基于C#winform部署图像着色DDColor轻量级onnx模型实现图像上色灰度图变彩图源码

作品简介

基于深度学习的黑白图像自动着色工具,使用 DDColor (Decoupled Diffusion Colorization) 模型实现灰度图像的智能化彩色还原。

效果展示

在这里插入图片描述

在这里插入图片描述

算法原理

DDColor 模型概述

DDColor 是一种基于扩散模型的图像着色算法,通过解耦扩散过程实现高质量的黑白图像着色。该模型在 Lab 颜色空间工作,主要流程如下:

核心处理流程
  1. 颜色空间转换
  • 输入图像从 BGR 转换到 RGB 颜色空间
  • RGB 转换到 Lab 颜色空间,提取 L 通道(亮度通道,范围 0-100)
  • L 通道代表图像的灰度信息
  1. 模型输入预处理
  • 将 L 通道缩放到模型输入尺寸(512×512)
  • 构造三通道 Lab 图像:L 通道为缩放后的亮度,a 和 b 通道初始化为 0
  • 通过 Lab→RGB 转换得到灰度 RGB 图像作为模型输入
  • 归一化到 [0, 1] 范围,转换为 CHW 格式的浮点张量
  1. ONNX 推理
  • 输入张量形状:[1, 3, 512, 512](批量大小=1,3通道,高=512,宽=512)
  • 模型输出形状:[1, 2, 512, 512](批量大小=1,2通道为a和b,高=512,宽=512)
  • 输出包含预测的 a 和 b 颜色通道
  1. 后处理
  • 将输出的 a、b 通道重构为双通道 Mat 图像
  • 使用双线性插值将 ab 通道放大到原始图像尺寸
  • 合并原始 L 通道与预测的 ab 通道,得到完整的 Lab 图像
  • Lab→RGB→BGR 转换,得到最终的彩色图像
  • 像素值从 [0, 1] 缩放到 [0, 255],转换为 8UC3 格式
技术优势
  • 高质量着色 :基于扩散模型,生成自然、真实的颜色
  • 语义理解 :能够理解图像内容并分配合适的颜色
  • 灵活部署 :支持 CPU 和 CUDA GPU 推理
  • 高效推理 :使用 ONNX Runtime 加速,推理速度快

环境要求

开发环境
  • 操作系统 :Windows 10/11 (x64)
  • IDE :Visual Studio 2019 或更高版本
  • .NET Framework :4.7.2
  • C# 语言版本 :C# 6.0
依赖库
  • OpenCvSharp :4.13.0(图像处理)
  • ONNX Runtime :1.20.1(模型推理)
  • CUDA (可选):12.x(GPU 加速)
  • cuDNN (可选):9.x(GPU 加速)
硬件要求
  • CPU 模式 :任意 x64 处理器,建议 4 核以上
  • GPU 模式 :NVIDIA GPU(支持 CUDA 12.x),建议 4GB 以上显存
  • 内存 :至少 4GB RAM
  • 存储 :至少 500MB 可用空间

安装步骤

1. 克隆或下载项目
# 如果使用 Git
git clone 
cd FIRC

或直接下载项目压缩包并解压。

2. 准备模型文件

将 DDColorONNX模型文件放置到 ​​weights​​ 文件夹:

weights/
  └── ddcolor_paper_tiny.onnx

注意 :模型文件需要单独下载,请从官方渠道获取 ​​ddcolor_paper_tiny.onnx​​ 文件。

3. 检查依赖 DLL

确保 ​​bin\x64\Release​​ 文件夹包含以下必要文件:

  • OpenCvSharp.dll 及相关 DLL
  • Microsoft.ML.OnnxRuntime.dll
  • CUDA 相关 DLL(如使用 GPU):cudart64_12.dll、cublas64_12.dll 等
  • OpenCvSharpExtern.dll(位于 dll\x64 文件夹)
4. 使用Visual Studio打开项目
  1. 双击 ​​FIRC.sln​​ 文件,使用 Visual Studio 2019 打开项目
  2. 等待 NuGet 包恢复完成(如果使用 NuGet 管理依赖)
  3. 检查项目引用是否正常
5. 编译项目
  1. 在 Visual Studio 中,选择配置为 ​​Release​​​ ,平台为 ​​x64​
  2. 点击菜单: ​​生成​​​ → ​​生成解决方案​​​ (或按 ​​Ctrl+Shift+B​​ )
  3. 确保编译无错误

运行步骤

方式一:Visual Studio 运行
  1. 在 Visual Studio 中按 ​​F5​​​ 运行调试,或 ​​Ctrl+F5​​ 直接运行
  2. 程序启动后会显示主界面
方式二:直接运行可执行文件
  1. 进入 ​​bin\x64\Release​​ 文件夹
  2. 双击运行 ​​FIRC.exe​
使用流程
  1. 加载模型
  • 勾选或取消勾选 “CUDA 加速” 复选框(根据硬件选择)
  • 点击 “加载模型” 按钮
  • 等待状态栏显示 “模型已加载 [CPU]” 或 “模型已加载 [CUDA]”
  1. 上传图片
  • 点击 “上传图片” 按钮
  • 选择要着色的灰度图像(支持 .bmp, .jpg, .jpeg, .tiff, .png 格式)
  • 图像将显示在左侧 “原始图像” 区域
  1. 开始推理
  • 点击 “开始推理” 按钮
  • 等待推理完成
  • 着色结果将显示在右侧 “着色结果” 区域
  • 耗时信息显示在界面上方
  1. 保存结果
  • 右键点击右侧结果图像,可以保存着色后的图像

注意事项

模型相关
  1. 模型文件 :确保 ​​ddcolor_paper_tiny.onnx​​​ 文件存在于 ​​weights​​ 文件夹中
  2. 模型版本 :不同大小的模型(tiny/small/base)推理速度和效果不同
  3. 输入尺寸 :当前配置模型输入尺寸为 512×512,可在 ​​DDColor.cs​​​ 中修改 ​​ModelInputSize​​ 常量
硬件相关
  1. CUDA 支持
  • 需要 NVIDIA GPU 且安装了正确的 CUDA 12.x 驱动
  • 首次使用 CUDA 可能较慢(初始化开销)
  • 如果 CUDA 初始化失败,程序会自动回退到 CPU 模式
  1. 内存使用
  • 大尺寸图像会占用更多内存
  • 建议处理图像尺寸不超过 4000×4000 像素
使用建议
  1. 图像格式 :建议使用无损格式(PNG)以获得最佳效果
  2. 灰度图像 :模型对真正的灰度图像效果最佳
  3. 批量处理 :当前版本支持单张图像处理,批量处理需要修改代码
  4. 异常处理 :如果推理失败,请检查模型文件是否完整、依赖 DLL 是否齐全
常见问题

Q: 提示 “模型文件不存在”? A: 检查 ​​weights​​​ 文件夹中是否有 ​​ddcolor_paper_tiny.onnx​​ 文件。

Q: CUDA 加速无法使用? A:

  • 确认已安装 NVIDIA GPU 驱动
  • 确认 ​​bin\x64\Release​​ 文件夹包含 CUDA 相关 DLL
  • 检查 CUDA 版本是否为 12.x

Q: 推理速度很慢? A:

  • CPU 模式推理较慢属正常现象
  • 建议使用 CUDA GPU 加速
  • 可尝试使用更小的模型(如 ddcolor_paper_tiny)

Q: 编译时提示缺少引用? A: 检查项目引用中的 DLL 路径是否正确,确保所有依赖文件存在。

文件夹结构

FIRC/
│
├── FIRC.sln                      # Visual Studio 解决方案文件
├── FIRC.csproj                   # 项目配置文件
├── FIRC.csproj.user              # 用户项目配置
├── App.config                    # 应用程序配置文件
├── Program.cs                    # 程序入口点
│
├── Form1.cs                      # 主窗体逻辑代码
├── Form1.Designer.cs             # 主窗体设计器代码
├── Form1.resx                    # 主窗体资源文件
│
├── DDColor.cs                    # DDColor 图像着色推理类(核心)
│
├── Properties/                   # 项目属性文件夹
│   ├── AssemblyInfo.cs           # 程序集信息
│   ├── Resources.Designer.cs     # 资源设计器
│   ├── Resources.resx            # 资源文件
│   ├── Settings.Designer.cs      # 设置设计器
│   └── Settings.settings         # 应用程序设置
│
├── weights/                      # 模型权重文件夹
│   └── ddcolor_paper_tiny.onnx   # DDColor ONNX 模型文件
│
├── images/                       # 测试图像文件夹
│   ├── gray_faces/               # 灰度人脸测试图像
│   ├── whole_imgs/               # 完整图像测试集
│   ├── cropped_faces/            # 裁剪人脸图像
│   └── masked_faces/             # 掩码人脸图像
│
├── bin/                          # 编译输出文件夹
│   └── x64/
│       └── Release/              # 64位发布版本
│           ├── FIRC.exe          # 主程序可执行文件
│           ├── FIRC.pdb          # 程序调试数据库
│           ├── *.dll             # 依赖库文件
│           ├── dll/x64/          # OpenCV 外部 DLL
│           │   ├── OpenCvSharpExtern.dll
│           │   └── opencv_videoio_ffmpeg4130_64.dll
│           └── weights/          # 运行时模型文件夹(复制)
│               └── ddcolor_paper_tiny.onnx

核心类说明

DDColor 类

位于 ​​DDColor.cs​​ ,是项目的核心推理类:

  • LoadModel(modelPath, useCuda) :加载 ONNX 模型
  • Colorize(inputImage) :执行图像着色推理
  • IsModelLoaded :检查模型是否已加载
  • Dispose() :释放资源
Form1 类

位于 ​​Form1.cs​​ ,是主窗体类:

  • 负责用户界面交互
  • 调用 DDColor 类进行推理
  • 显示输入/输出图像和耗时统计

技术支持

如有问题或建议,请通过以下方式联系:

  • 提交 Issue
  • 发送邮件至项目维护者

许可证

本项目仅供学习和研究使用。使用本项目时请遵守相关法律法规。

参考文献

  • DDColor 原论文
  • ONNX Runtime 文档
  • OpenCvSharp 文档


创作时间: