黑白照片上色:colorization 脚本用法和效果预期
上色脚本在哪
CodeFormer 仓库根目录有 inference_colorization.py——它不是 inference_codeformer.py 的子命令,是独立脚本。
python inference_colorization.py --input_path inputs/cropped_faces/
先决条件
- 对齐好的 512×512 人脸(
--has_aligned模式的输入) - 预训练模型:需要从 Releases v0.1.0 下载 colorization 权重(脚本会自动下载或手动放到
weights/CodeFormer/)
基本用法
单张黑白人脸
python inference_colorization.py --input_path inputs/black_white/portrait.png
批量文件夹
python inference_colorization.py \
--input_path inputs/black_white/ \
--output_path results/colorized/
上色原理

colorization 模型和 face restoration 模型是两个独立的预训练权重:
- restoration:从低清彩色/灰度图恢复高清彩色
- colorization:专门给灰度图上色
colorization 模型学到了 FFHQ(高质量彩色人脸库)里的肤色和发色分布,它会:
- 判断人脸的肤色范围(从五官几何 + 光照推断)
- 生成匹配的肤色
- 头发颜色根据人脸整体色调推断(黑发 / 棕发 / 金发的概率分布)
效果预期
能做好的
- ✅ 黑白人像上色(自然肤色)
- ✅ 褪色照片的颜色还原(颜色变鲜艳但不偏离)
- ✅ 统一色调(不会一张脸一半红一半黄)
做不好的
- ❌ 精准历史还原:比如"这张 1950 年的照片里衬衫到底是藏蓝还是墨绿?"——模型不知道,只能按最常见的配色猜
- ❌ 背景上色:colorization 脚本只处理人脸区域,背景保持原样
- ❌ 多人合照:需要先把每张脸单独裁出来分别上色
- ❌ 非人脸物体:照片里的衣服、墙壁、风景都不管
推荐工作流
老照片上色通常分两步:
第一步:人脸上色
# 1. 裁脸对齐
python scripts/crop_align_face.py -i inputs/old_photos -o inputs/faces_bw
# 2. 人脸上色
python inference_colorization.py --input_path inputs/faces_bw --output_path results/faces_color
# 3. 人脸修复
python inference_codeformer.py -w 0.7 --has_aligned \
--input_path results/faces_color --output_path results/faces_fixed
第二步:整体上色(可选)
背景和非人脸区域的上色,用专门的整图上色模型(如 DeOldify、Bringing-Old-Photos-Back-to-Life)。CodeFormer 不管这部分。
第三步:贴回原图
# 你需要自己把处理好的彩色脸贴回原老照片
# 用 Photoshop / GIMP 的修复画笔
这一步没有自动化脚本,因为背景上色和人脸贴回需要人工判断。
参数
| 参数 | 默认 | 说明 |
|---|---|---|
| --input_path | — | 单张或文件夹 |
| --output_path | results/colorization/ | 输出目录 |
| --weights_path | weights/CodeFormer/colorization_codeformer.pth | 上色权重路径 |
上色脚本没有 w 权重、没有背景增强、没有上采样——因为上色任务不需要保真度权衡。
和其他上色工具对比
| 工具 | 风格 | 质量 | 自动程度 |
|---|---|---|---|
| CodeFormer colorization | 自然、写实 | 中 | 只上色人脸 |
| DeOldify | 鲜艳、饱和度高 | 中 | 整图上色 |
| BOPL(Bringing-Old-Photos-Back-to-Life) | 学术、保守 | 较高 | 整图上色 + 修复 |
| Photoshop 神经网络滤镜 | 稳定、可控 | 高(需人工) | 手动调色 |
CodeFormer 的定位是老照片修复流程中的"人脸上色"环节,不是独立的整图上色器。