欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > 制作一款将黑白照片、视频变成彩色模型

制作一款将黑白照片、视频变成彩色模型

2025/2/5 7:24:58 来源:https://blog.csdn.net/roxxo/article/details/145428186  浏览:    关键词:制作一款将黑白照片、视频变成彩色模型

将黑白照片或视频转换为彩色(Image/Video Colorization)的AI模型,通常涉及深度学习计算机视觉技术。以下是完整的实现流程:


1. 任务定义

彩色化(Colorization)任务的目标是:

  • 输入:黑白(灰度)图像或视频帧。
  • 输出:尽可能真实的彩色图像或视频。

常见应用场景

老照片修复:让历史照片焕然一新。
黑白电影修复:将经典黑白电影变为彩色版。
医学图像:如 X 光片转换为彩色图像,提高可读性。
夜视图像增强:对红外或低光图像进行彩色化处理。


2. 数据准备

2.1 选择数据集

  • ImageNet(1400 万张自然图像)
  • COCO Dataset(复杂场景图像)
  • Places365 Dataset(室内外场景)
  • CelebA Dataset(人脸数据集)

这些数据集包含丰富的自然颜色,适用于训练彩色化模型。

2.2 数据预处理

  • 转换成灰度图像(模拟黑白照片)
import cv2
import numpy as npimg = cv2.imread("color.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imwrite("gray.jpg", gray)
  • 数据增强
    • 随机翻转、旋转、模糊、裁剪,以提高模型泛化能力。

3. 选择模型架构

模型适用任务优势计算量
DeOldify(基于 GAN)照片/视频彩色化真实感强
U-Net + CNN照片彩色化训练简单
Pix2Pix(基于 GAN)图像到图像翻译适用于风格化彩色化
ChromaGAN自动彩色化细节恢复较好

推荐模型

DeOldify(最真实)适用于高质量照片和视频
U-Net + CNN 适用于移动端和嵌入式设备


4. 构建彩色化模型

方法1:基于 U-Net 训练(轻量级)

U-Net 是一种适用于图像复原的 CNN 结构。

import torch
import torch.nn as nnclass UNetColorization(nn.Module):def __init__(self):super(UNetColorization, self).__init__()self.encoder = nn.Sequential(nn.Conv2d(1, 64, kernel_size=3, padding=1),nn.ReLU(),nn.Conv2d(64, 128, kernel_size=3, padding=1),nn.ReLU())self.decoder = nn.Sequential(nn.Conv2d(128, 64, kernel_size=3, padding=1),nn.ReLU(),nn.Conv2d(64, 2, kernel_size=3, padding=1)  # 输出 a, b 通道)def forward(self, x):x = self.encoder(x)return self.decoder(x)model = UNetColorization()
训练方式
  • 输入:灰度图(1 通道)。
  • 输出:Lab 颜色空间的 a、b 通道(色彩信息)。
  • 损失函数:L1 Loss(保证颜色平滑)。

方法2:使用 DeOldify(基于 GAN)

DeOldify 使用 GAN + 视觉注意力机制 进行彩色化,适用于照片和视频

4.2.1 安装 DeOldify
git clone https://github.com/jantic/DeOldify.git
cd DeOldify
pip install -r requirements.txt
4.2.2 运行彩色化
from deoldify.visualize import get_image_colorizercolorizer = get_image_colorizer(artistic=True)
colorizer.plot_transformed_image('black_white.jpg', render_factor=35)
4.2.3 处理视频
colorizer.colorize_from_file_name('black_white_video.mp4')

5. 训练优化

5.1 训练策略

  • 使用 ImageNet 预训练模型(提升泛化能力)。
  • 数据增强(随机旋转、翻转,提高鲁棒性)。
  • GAN 训练策略
    • 采用 L1 + Perceptual Loss,提高色彩质量。
    • 使用 PatchGAN 作为判别器,提高局部细节的真实性。
import torch.optim as optimcriterion = nn.L1Loss()
optimizer = optim.Adam(model.parameters(), lr=0.0002)for epoch in range(50):for gray_images, color_images in train_loader:optimizer.zero_grad()output = model(gray_images)loss = criterion(output, color_images)loss.backward()optimizer.step()

6. 部署优化

6.1 量化和加速

  • TensorRT(用于 GPU 部署)
import tensorrt as trt
engine = trt.lite.Engine(model="color_model.onnx")
  • TensorFlow Lite(用于移动端)
import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_saved_model("color_model")
tflite_model = converter.convert()
  • Pruning(剪枝优化)
import torch.nn.utils.prune as prune
prune.l1_unstructured(model.encoder[0], name='weight', amount=0.3)

7. 评估与测试

7.1 评估指标

  • PSNR(峰值信噪比):越高越好,>30 dB 为优。
  • SSIM(结构相似度):>0.9 说明彩色化质量较好。
  • LPIPS(感知损失):越低越好。
测试代码
from skimage.metrics import peak_signal_noise_ratio as psnr, structural_similarity as ssimdef evaluate(img1, img2):return psnr(img1, img2), ssim(img1, img2, multichannel=True)

8. 最终部署

8.1 Flask API

from flask import Flask, request
from PIL import Image
import torchapp = Flask(__name__)
model = torch.load("color_model.pth")@app.route("/colorize", methods=["POST"])
def colorize():file = request.files["image"]img = Image.open(file).convert("L")  # 转换为灰度result = model(img)result.save("output.jpg")return "Image processed!"if __name__ == "__main__":app.run(host="0.0.0.0", port=5000)

9. 总结

任务适用模型部署方式
老照片彩色化DeOldifyPyTorch, ONNX
超轻量级应用U-NetTensorFlow Lite
视频彩色化DeOldifyFFmpeg + ONNX

如果需要更真实的色彩,建议使用 DeOldify。如果需要高效实时处理,可以用 U-Net + TensorRT 进行加速。

备注:文章仅供参考

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com