关键词:开源抠图、BiRefNet、RMBG、Real-ESRGAN、CodeFormer、图像超分、人脸修复、本地部署、basicsr 安装报错
本文真机实测 RTX 4090(但 6G 卡足够)上的 5 个开源图像后处理模型,给出耗时/显存/PSNR 硬数据,并完整记录 basicsr/opencv/transformers 的依赖地狱怎么填平。
0. 模型清单与定位
| 子方向 | 模型 | 网络 | 许可 |
|---|---|---|---|
| 抠图 | RMBG-1.4 | ISNet | 非商用 |
| 抠图 | BiRefNet | 双边参考网络 | MIT |
| 超分 | Real-ESRGAN x4plus | RRDBNet | BSD-3 |
| 超分 | realesr-general-x4v3 | SRVGGNetCompact | BSD-3 |
| 修脸 | CodeFormer | Transformer codebook | 研究免费 |
1. 环境(关键:版本要锁死)
这套老牌 CV 工具对版本极其敏感,照抄:
conda create-nimgprocpython=3.10-y&&conda activate imgproc pipinstalltorch==2.1.2torchvision==0.16.2 --index-url https://download.pytorch.org/whl/cu121 pipinstall"setuptools<81""numpy<2"# 关键:见坑1、坑2pipinstall"transformers==4.46.3"# 关键:见坑3pipinstall"opencv-python==4.9.0.80"# 关键:见坑2pipinstallbasicsr --no-deps --no-build-isolation# 关键:见坑1pipinstallrealesrgan gfpgan facexlib --no-deps --no-build-isolation pipinstalladdict yapf lmdb future pyyaml tqdm filterpy numba lpips scikit-image2. 实测数据
抠图(1024 输入):RMBG-1.4 = 0.09s/张、1.09G;BiRefNet = 0.17s/张、3.35G(发丝边缘更干净)。
超分(4×,对 4× 降质 + JPEG q30 的输入,与 GT 比对):
| 模型 | PSNR | SSIM | 耗时 | 显存 |
|---|---|---|---|---|
| Real-ESRGAN x4plus | 29.70 | 0.886 | 0.10s | 0.66G |
| general-x4v3 | 29.19 | 0.895 | 0.04s | 0.05G |
有意思:x4plus PSNR 更高但 SSIM 更低(更锐但偶有 GAN 伪纹),general-v3 更平滑、快一倍、显存几乎为 0。
修脸:CodeFormer(w=0.7)= 3.9s/张、PSNR 27.17、SSIM 0.869、1.81G。注:修脸 PSNR 偏低是因为它重新生成五官(像素改写),主观清晰度才是重点。
3. 七个踩坑(本文核心价值)
坑 1:basicsr 安装两连击
setuptools>=81删了pkg_resources→ basicsr 编译报ModuleNotFoundError: pkg_resources。降setuptools<81。- basicsr 声明
tb-nightly等装不上的依赖 → 用--no-deps --no-build-isolation,再手动补addict yapf lmdb future。
坑 2:numpy 2.x ABI 把 opencv 打废
装numpy<2(basicsr 需要)后,为 numpy2 编译的opencv-python 4.10出现module 'cv2' has no attribute 'cvtColor'(C 扩展半加载)。换opencv-python==4.9.0.80。
坑 3:transformers 5.x 检测不到 torch
transformers==5.12+torch 2.1.2→AutoModelForImageSegmentation requires the PyTorch library but it was not found。降transformers==4.46.3。
坑 4:RMBG-2.0 是 gated 仓库
HuggingFace 上briaai/RMBG-2.0需登录审批 + 非商用 → 匿名报Access denied。用开放的 BiRefNet(MIT)或 RMBG-1.4 替代。
坑 5:RMBG-1.4 与 BiRefNet 输出格式不同
- BiRefNet:
model(x)[-1].sigmoid() - RMBG-1.4(ISNet):
model(x)[0][0]然后min-max 归一(不是 sigmoid)
坑 6:修脸模型的隐藏网络阻塞
facexlib 的 RetinaFace 用pretrained=True的 ResNet50 backbone → torchvision 直连download.pytorch.org下 ImageNet 权重。如果你像下 HF 模型那样unset了代理,这里会卡死。修脸模型不碰 HF,反而要开代理:
os.environ["http_proxy"]=os.environ["https_proxy"]="http://127.0.0.1:10808"并预缓存resnet50-0676ba61.pth、detection_Resnet50_Final.pth、parsing_parsenet.pth。
坑 7:GFPGAN 段错误 → 换 CodeFormer
GFPGAN 在numpy1.26 + opencv4.9 + torch2.1下 exit 1 无 traceback(疑似 ABI 段错误)。改用 CodeFormer:补lpips,并在仓库basicsr/下手建version.py(仓库 vendored basicsr 的版本文件未生成)。
4. 核心代码(抠图)
fromtransformersimportAutoModelForImageSegmentationfromtorchvisionimporttransforms model=AutoModelForImageSegmentation.from_pretrained("BiRefNet",trust_remote_code=True).cuda().eval()tf=transforms.Compose([transforms.Resize((1024,1024)),transforms.ToTensor(),transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])])x=tf(img).unsqueeze(0).cuda()mask=model(x)[-1].sigmoid().cpu()[0].squeeze()# RMBG-1.4 改 model(x)[0][0] + minmax完整脚本(含超分 PSNR/SSIM、CodeFormer 封装、显存采样)见仓库scripts/。
5. 选型结论
- 抠图商用 →BiRefNet(MIT);极轻量 → RMBG-1.4
- 超分性价比 →general-x4v3(0.05G 显存、快一倍);极致锐利 → x4plus
- 修脸 →CodeFormer(身份保真 + 强度可调)
- 这套工具6G 显卡就够,秒级、可常驻,是最易落地的 AI 能力。
实测:RTX 4090 24G / 2026-06。数据可复现。