--bg_upsampler realesrgan 背景增强:什么时候该开
CodeFormer 只修人脸
这是理解 --bg_upsampler 的前提:CodeFormer 的推理模型只处理人脸区域,整图里除了脸的其他部分(头发边缘、肩膀、背景、衣服、文字)CodeFormer 完全不管。
所以如果你只跑:
python inference_codeformer.py -w 0.7 --input_path photo.jpg
结果是:
- ✅ 人脸被修复了(可能从 64×64 分辨率升到 1024×1024)
- ❌ 背景保持原样(还是原来的低分辨率 / 模糊)
- ❌ 人脸和背景的边界处可能有明显的分辨率差(像"贴图")
Real-ESRGAN 是背景增强的标准方案
Real-ESRGAN 是腾讯 ARC Lab 开源的通用图像超分辨率模型,擅长非人脸区域(风景、建筑、衣物、纹理)的 2-4 倍放大增强。CodeFormer 作者选择它作为默认的背景增强器,因为:
- 速度快
- 不挑内容(不像 CodeFormer 只修脸)
- 开源可商用(NTU S-Lab License 兼容)
开启背景增强
python inference_codeformer.py \
-w 0.7 --input_path photo.jpg \
--bg_upsampler realesrgan # 加上这个
处理流程变化
原来:
整图 → 检测人脸 → 人脸修复 → 融合回整图 → 输出
加了 --bg_upsampler 后:
整图 → 检测人脸 → 人脸修复
↓
整图 → Real-ESRGAN 背景增强(整张图都放大,但人脸区域的增强结果会被 CodeFormer 的修复结果覆盖)
↓
融合(CodeFormer 修复的人脸贴到 Real-ESRGAN 增强的背景上)
↓
输出
注意:不是"只增强非人脸区域"——Real-ESRGAN 会增强整张图,然后 CodeFormer 的修复脸会覆盖到 Real-ESRGAN 的脸上。这样脸上的头发边缘是 Real-ESRGAN 修的,人脸内部是 CodeFormer 修的,接缝处用 back projection 融合。
为什么背景增强重要
| 不开 | 开了 |
|---|---|
| 人脸清晰、背景模糊 | 人脸和背景都清晰 |
| 边界有明显分辨率差 | 边界过渡自然 |
| 看起来像"PS 贴图" | 看起来像"整图修过" |
| 节省显存 ~4GB | 多 30% 时间 |
显存和时间代价
| 显卡 | 整图 + 人脸修复 | 加 Real-ESRGAN 后 |
|---|---|---|
| RTX 3060 | 1.5s / 8GB | 2.1s / 12GB |
| RTX 3080 | 0.8s / 10GB | 1.2s / 14GB |
| T4 云 | 2.0s / 8GB | 2.8s / 12GB |
显存增量约 +3.5GB,时间增量约 +35%。显存紧张(< 12GB)时只能放弃背景增强。
什么时候不该开
1. 显存不够
8GB 卡 + 1080p 整图 → 加背景增强可能 OOM。
2. 快速预览
调 w 值、试参数阶段,先不开背景增强。确定满意了再开。
3. 背景不重要的场景
- 证件照(只有脸和纯色背景,背景增强意义不大)
- 头像裁切(只留脸,没有背景)
- 批量处理 + 赶时间(背景增强拖慢整体速度)
4. 背景有文字或敏感区域
Real-ESRGAN 可能对文字区域"瞎猜"——低分辨率文字可能被增强成乱码。如果照片里有重要文字(证件照、文件扫描件),不要开。
和 --face_upsample 的关系
python inference_codeformer.py \
-w 0.7 --input_path photo.jpg \
--bg_upsampler realesrgan \
--face_upsample # 两个一起开
--face_upsample 是在 CodeFormer 修复完人脸后,再用 Real-ESRGAN 单独上采样一次。而 --bg_upsampler 是用 Real-ESRGAN 处理整张图(包括背景)。
通常两个一起开效果最好:
- Real-ESRGAN 修背景
- CodeFormer + face_upsample 修脸
- 两者融合
其他背景增强器
CodeFormer 框架通过 --bg_upsampler 支持插拔不同的增强器。目前官方只内置了 realesrgan,但 BasicSR 训练框架的灵活性意味着未来可能支持更多选项(如 SwinIR、HAT)。