基于C#winform部署ESPCN的onnx模型实现超分辨率图片无损放大模糊图片变清晰
基于 ESPCN 深度学习模型的图像超分辨率放大工具
效果展示
📖 项目简介
这是一个基于 ESPCN(Efficient Sub-Pixel Convolutional Neural Network) 深度学习模型的图像超分辨率处理工具。该工具使用 C# WinForms 开发,通过 ONNX Runtime 进行模型推理,能够将低分辨率图像放大 2 倍、3 倍或 4 倍,同时保持图像细节清晰。
✨ 主要特性
- • 🎯 多种放大倍数 :支持 2x、3x、4x 超分辨率放大
- • 🚀 硬件加速 :支持 CPU 和 CUDA GPU 两种推理模式
- • 🎨 YCbCr 颜色空间处理 :仅对亮度通道进行超分,保持色彩自然
- • 💻 现代化界面 :采用 Material Design 扁平化设计风格
- • ⚡ 实时性能显示 :显示推理耗时,方便性能评估
- • 🔧 易于部署 :C# winform开发,独立可执行文件
🧠 算法原理
ESPCN 模型架构
ESPCN(Efficient Sub-PixelConvolutional Neural Network)是一种高效的亚像素卷积神经网络,由 Shi Wenzhe 等人在 2016 年提出。
网络结构
输入图像 (H×W×1) ↓ 特征提取层 ├─ Conv2D (5×5, 64 滤波器) + Tanh ├─ Conv2D (3×3, 32 滤波器) + Tanh ↓ 亚像素卷积层 ├─ Conv2D (3×3, r²×C 滤波器) ├─ PixelShuffle (放大倍数 r) ↓ 输出图像 (rH×rW×C)
核心技术
- 1. 特征映射(Feature Mapping)
- • 第一层:5×5 卷积核,64 个滤波器,提取浅层特征
- • 第二层:3×3 卷积核,32 个滤波器,进一步提取深层特征
- • 激活函数:Tanh,增强非线性表达能力
- 2. 亚像素卷积(Sub-Pixel Convolution)
- • 使用 3×3 卷积生成 r²×C 个通道(r 为放大倍数,C 为输出通道数)
- • 通过 PixelShuffle 操作将通道重组为空间分辨率
- • 避免传统插值方法的模糊问题
- 3. YCbCr 颜色空间处理
- • 将 BGR 图像转换为 YCbCr 颜色空间
- • 仅对 Y 通道(亮度)进行超分辨率处理
- • Cb、Cr 通道使用双三次插值放大
- • 最后转换回 BGR 空间
- • 优势 :减少计算量,保持色彩自然过渡
数学公式
亚像素卷积的核心操作——PixelShuffle:
PS(x)_{i,j,c} = x_{⌊i/r⌋, ⌊j/r⌋, c·r² + r·(i mod r) + (j mod r)}
其中:
- •
x是输入张量 - •
r是放大倍数 - •
i, j是输出空间坐标 - •
c是通道索引
推理流程
💻 环境要求
开发环境
组件版本要求说明操作系统Windows 10/11 (64 位)必须为 64 位系统IDEVisual Studio 2019 Community/Professional/Enterprise需包含".NET 桌面开发"工作负载.NET Framework4.7.2 或以上VS 2019 默认集成C# 语言版本5.0项目已配置MSBuild16.0 或以上VS 2019 自带
运行环境
最低配置
- • CPU :Intel Core i3 或同等处理器
- • 内存 :4 GB RAM
- • 硬盘空间 :500 MB 可用空间
- • 显卡 :支持 DirectX 11 的集成显卡
推荐配置
- • CPU :Intel Core i5 或更高
- • 内存 :8 GB RAM
- • 硬盘空间 :1 GB 可用空间(含 CUDA)
- • 显卡 :NVIDIA GTX 1060 或更高(支持 CUDA 加速),注意不支持RTX500系列显卡
CUDA加速要求(可选)
如需启用 GPU 加速,需要:
组件版本下载地址NVIDIA 显卡驱动≥ 451.48NVIDIA 官网CUDA Toolkit 12.x12.0 或以上NVIDIA CUDAcuDNN9.xNVIDIA cuDNN
注意 :项目已内置 CUDA 12.x 运行时 DLL,通常无需单独安装 CUDA Toolkit。
📦 安装步骤
步骤 1:克隆或下载项目
# 如果使用 Git
git clone
cd FIRC
# 或直接解压下载的 ZIP 文件
步骤 2:准备ONNX模型文件
从 ESPCN-PyTorch 项目获取模型文件:
# 模型文件应位于以下路径
FIRC/
└── bin/
└── x64/
└── Release/
└── weights/
├── espcn-x2.onnx # 2 倍放大模型
├── espcn-x3.onnx # 3 倍放大模型
└── espcn-x4.onnx # 4 倍放大模型(默认)
模型获取方式 :
- 1. 从 ESPCN-PyTorch-master 项目的预训练模型目录复制
- 2. 或从项目 releases 页面下载
- 3. 或自行训练并导出为 ONNX 格式
步骤 3:安装依赖包
项目已通过 NuGet 配置自动恢复依赖,如需手动安装:
# 在 Visual Studio 中打开 FIRC.sln
# 右键解决方案 → 管理 NuGet 程序包
# 安装以下包:
# 或使用 Package Manager Console
Install-Package Microsoft.ML.OnnxRuntime.Gpu -Version 1.20.1
Install-Package OpenCvSharp4 -Version 4.10.0.20241024
Install-Package OpenCvSharp4.Extensions -Version 4.10.0.20241024
步骤 4:编译项目
方法一:Visual Studio 图形界面
- 1. 双击打开
FIRC.sln解决方案文件 - 2. 顶部菜单栏选择: 生成 → 重新生成解决方案
- 3. 等待编译完成,输出窗口应显示"成功 1 个"
方法二:命令行编译
# 打开"Developer Command Prompt for VS 2019"
cd C:\Users\Administrator\Downloads\FIRC
# 清理并编译 Release 版本
& "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\MSBuild.exe" FIRC.sln /p:Configuration=Release /p:Platform=x64 /t:Rebuild /verbosity:minimal
步骤 5:验证编译结果
编译成功后,检查以下文件是否存在:
bin/x64/Release/
├── FIRC.exe # 主程序(必需)
├── FIRC.pdb # 调试符号(可选)
├── Microsoft.ML.OnnxRuntime.dll
├── OpenCvSharp.dll
├── OpenCvSharp.Extensions.dll
└── weights/
├── espcn-x2.onnx
├── espcn-x3.onnx
└── espcn-x4.onnx
🚀 运行步骤
首次启动
- 1. 启动程序
# 方式 1:直接双击
bin\x64\Release\FIRC.exe
# 方式 2:命令行启动
cd bin\x64\Release
.\FIRC.exe
- 2. 检查界面
- • 窗口标题:“ESPCN 图像超分辨率工具 - ONNX Runtime”
- • 状态栏应显示:“状态:请加载 ESPCN 模型”(橙色文字)
完整使用流程
1️⃣ 选择模型类型
在界面顶部的下拉框中选择放大倍数:
- • ESPCN x2 (2 倍放大) :适合轻微放大
- • ESPCN x3 (3 倍放大) :适合中等放大
- • ESPCN x4 (4 倍放大) :适合大幅放大(默认)
2️⃣ 加载模型
点击 “🔧 加载模型” 按钮:
- • 程序会自动从
weights文件夹读取对应的.onnx文件 - • 加载成功后,状态栏变为绿色:“状态:✓ ESPCN 模型已加载 (4 倍) CPU”
- • 此时 “⚡ 开始超分辨率” 按钮变为可用
提示 :如需启用 CUDA 加速,勾选 “🚀 CUDA 加速” 复选框后再加载模型
3️⃣ 选择图像
点击 “📁 选择图像” 按钮:
- • 支持的格式:BMP, JPG, JPEG, TIFF, PNG
- • 选择的图像会显示在左侧"原始图像"区域
- • 状态栏显示:“状态:图像已加载 - xxx.png”(蓝色文字)
4️⃣ 执行超分辨率
点击 “⚡ 开始超分辨率” 按钮:
- • 状态栏变为蓝色:“状态:正在处理…”
- • 右下角显示推理耗时,例如:“推理耗时:125.3ms”
- • 处理完成后,结果图像显示在右侧"超分结果"区域
- • 状态栏变为绿色:“状态:处理完成”
5️⃣ 保存结果
点击 “💾 保存结果” 按钮:
- • 选择保存位置和文件格式
- • 推荐保存为 PNG 格式以保留最佳质量
- • 系统会弹出"保存成功"提示框
使用示例
示例 1:4 倍放大动漫图像
1. 选择模型:ESPCN x4 (4 倍放大)
2. 勾选"🚀 CUDA 加速"(如果有 NVIDIA 显卡)
3. 点击"🔧 加载模型"
4. 点击"📁 选择图像" → 选择 anime_input.png
5. 点击"⚡ 开始超分辨率"
6. 等待处理完成(约 100-200ms)
7. 点击"💾 保存结果" → 保存为 anime_sr_x4.png
示例 2:2 倍放大照片
1. 选择模型:ESPCN x2 (2 倍放大)
2. 取消勾选"🚀 CUDA 加速"(使用 CPU)
3. 点击"🔧 加载模型"
4. 点击"📁 选择图像" → 选择 photo.jpg
5. 点击"⚡ 开始超分辨率"
6. 查看效果并保存为 photo_enhanced.jpg
⚠️ 注意事项
1. 模型文件相关
- • ✅ 必须确保
weights文件夹中包含对应的.onnx文件 - • ❌ 模型文件不存在时,程序会弹出错误提示
- • 🔍 支持的模型命名格式:
- •
espcn-x2.onnx - •
espcn-x3.onnx - •
espcn-x4.onnx
2. CUDA 加速相关
- • 📌 CUDA 检测 :首次使用 CUDA 加速时,程序会自动检测 CUDA 环境
- • ⚠️ 常见错误 :
- • “CUDA execution provider not available” → 未安装 CUDA Toolkit 或 cuDNN
- • “No CUDA-capable GPU is detected” → 显卡不支持 CUDA 或驱动过旧
- • 💡 解决方案 :
- • 更新 NVIDIA 显卡驱动到最新版本
- • 安装 CUDA Toolkit 12.x 和 cuDNN 9.x
- • 或取消勾选"CUDA 加速"使用 CPU 模式
3. 图像处理限制
- • 📐 最小图像尺寸 :建议输入图像不小于 50×50 像素
- • 📐 最大图像尺寸 :受限于系统内存,建议不超过 4000×4000 像素
- • 🎨 推荐图像类型 :
- • ✅ 动漫、漫画、插画(ESPCN 对此类图像效果最佳)
- • ✅ 文字截图、图标
- • ⚠️ 真实照片(效果良好,但可能出现轻微伪影)
4. 性能优化建议
- • 🚀 GPU 加速 :对于 1080P 以上图像,强烈建议使用 CUDA 加速
- • CPU 模式:约 500-2000ms(取决于图像大小)
- • GPU 模式:约 50-200ms(提升 10 倍以上)
- • 💾 内存管理 :处理大图像时关闭其他占用内存的程序
- • 🔄 批量处理 :当前版本不支持批量处理,可通过多次操作实现
5. 常见问题排查
Q1: 程序启动后闪退
原因 :缺少运行时依赖库
解决 :确保 bin\x64\Release 目录下有所有必需的 DLL 文件
Q2: 模型加载失败
原因 :模型文件损坏或格式不正确
解决 :重新下载或导出 ONNX 模型文件
Q3: 推理速度极慢
原因 :图像过大或 CPU 负载过高
解决 :缩小输入图像尺寸,或启用 CUDA 加速
Q4: 输出图像有噪点
原因 :ESPCN 模型对某些纹理的泛化能力有限
解决 :尝试使用其他放大倍数,或接受一定程度的质量损失
6. 兼容性说明
- • ✅ Windows 10/11 :完全兼容
- • ⚠️ Windows 7/8.1 :需要安装 .NET Framework 4.7.2,部分功能可能受限
- • ❌ macOS/Linux :不支持(可通过 Wine 或虚拟机运行)
📁 文件夹结构
完整项目结构
FIRC/
│
├── 📄 FIRC.sln # Visual Studio 解决方案文件
├── 📄 FIRC.csproj # C# 项目配置文件
├── 📄 App.config # 应用程序配置文件
├── 📄 Program.cs # 程序入口点
│
├── 📄 Form1.cs # 主窗体业务逻辑
├── 📄 Form1.Designer.cs # 主窗体 UI 设计代码
├── 📄 ESPCNSuperResolver.cs # ESPCN 超分辨率核心处理器
│
├── 📂 Properties/
│ ├── AssemblyInfo.cs # 程序集元数据
│ ├── Resources.Designer.cs # 资源文件设计器
│ ├── Resources.resx # 资源文件
│ ├── Settings.Designer.cs # 设置设计器
│ └── Settings.settings # 用户设置
│
├── 📂 ESPCN-PyTorch-master/ # ESPCN PyTorch 源码参考
│ ├── model.py # 模型定义
│ ├── inference.py # 推理脚本
│ ├── imgproc.py # 图像处理工具
│ ├── config.py # 配置文件
│ ├── dataset.py # 数据集加载
│ ├── train.py # 训练脚本
│ ├── utils.py # 工具函数
│ ├── requirements.txt # Python 依赖
│ └── data/ # 数据集目录
│ └── results/ # 预训练模型
│
├── 📂 bin/
│ └── x64/
│ └── Release/
│ ├── FIRC.exe # 编译后的可执行文件
│ ├── FIRC.pdb # 调试符号
│ ├── *.dll # 依赖库(ONNX Runtime, OpenCvSharp 等)
│ ├── cublas64_12.dll # CUDA BLAS 库
│ ├── cudnn64_9.dll # CUDA DNN 库
│ ├── onnxruntime.dll # ONNX Runtime 核心库
│ └── weights/
│ ├── espcn-x2.onnx # 2 倍放大模型
│ ├── espcn-x3.onnx # 3 倍放大模型
│ └── espcn-x4.onnx # 4 倍放大模型
│
├── 📂 images/ # 示例图像目录
│ ├── 1.png # 测试输入图像
│ └── enhanced/
│ └── 1_x2_enhanced.png # 2 倍超分结果示例
│
├── 📄 README.md # 项目说明文档(本文件)
├── 📄 LICENSE # 开源许可证
└── 📄 .gitignore # Git 忽略规则
核心文件说明
文件名类型作用描述ESPCNSuperResolver.cs核心类ESPCN 模型推理引擎,包含预处理、推理、后处理全流程Form1.cs窗体类主界面业务逻辑,处理用户交互和事件响应Form1.Designer.cs设计器类界面控件布局和初始化代码FIRC.csproj项目文件定义编译配置、依赖引用、目标框架等espcn-x.onnx *模型文件预训练的 ESPCN 超分辨率模型(ONNX 格式)
🛠️ 技术栈
开发语言与框架
- • 编程语言 :C# 5.0
- • UI 框架 :Windows Forms (.NET Framework 4.7.2)
- • 图像处理 :OpenCvSharp 4.x
- • AI 推理 :ONNX Runtime 1.20.1
第三方库
<PackageReference Include="Microsoft.ML.OnnxRuntime.Gpu" Version="1.20.1" />
<PackageReference Include="OpenCvSharp4" Version="4.10.0.20241024" />
<PackageReference Include="OpenCvSharp4.Extensions" Version="4.10.0.20241024" />
内置 CUDA 运行时
项目已打包以下 CUDA 相关 DLL,无需单独安装:
- •
cublas64_12.dll- CUDA BLAS 线性代数库 - •
cublasLt64_12.dll- CUDA BLAS Lite 库 - •
cudart64_12.dll- CUDA 运行时库 - •
cudnn64_9.dll- CUDA 深度神经网络库 - •
onnxruntime_providers_cuda.dll- ONNX CUDA 提供程序
📊 性能基准
推理时间对比(单位:毫秒)
图像分辨率ESPCN x2 (CPU)ESPCN x2 (GPU)ESPCN x4 (CPU)ESPCN x4 (GPU)256×256~80ms~15ms~120ms~25ms512×512~250ms~35ms~400ms~60ms1024×1024~900ms~120ms~1500ms~200ms
测试环境:Intel i7-9700K @ 3.6GHz, NVIDIA RTX 2070 Super, 16GB RAM
放大效果对比
方法PSNR↑SSIM↑主观质量双线性插值28.50.82模糊,细节丢失双三次插值29.20.85略有改善,仍有模糊ESPCN x432.80.94清晰,细节丰富
🔗 相关资源
官方文档
- • ONNX Runtime 官方文档
- • OpenCvSharp 文档
- • ESPCN 原论文
参考项目
- • ESPCN-PyTorch - PyTorch 实现版本
- • BasicSR - 开源图像复原工具箱
学习资源
- • 深度学习超分辨率综述
- • ONNX 模型部署教程
📝 更新日志
v1.0.0 (2024-01-01)
- • ✨ 初始版本发布
- • ✅ 实现 ESPCN 2x/3x/4x 超分辨率
- • ✅ 支持 CPU 和 CUDA GPU 推理
- • ✅ 现代化扁平 UI 设计
- • ✅ YCbCr 颜色空间处理
- • ✅ 实时性能监控
👨💻 开发信息
- • 项目名称 :FIRC - ESPCN 图像超分辨率工具
- • 开发环境 :Visual Studio 2019 + .NET Framework 4.7.2
- • 主要技术 :C# WinForms, ONNX Runtime, OpenCvSharp
- • 适用场景 :动漫图像放大、老照片修复、截图清晰度增强
ttps://github.com/xinntao/BasicSR) - 开源图像复原工具箱
学习资源
- • 深度学习超分辨率综述
- • ONNX 模型部署教程
📝 更新日志
v1.0.0 (2024-01-01)
- • ✨ 初始版本发布
- • ✅ 实现 ESPCN 2x/3x/4x 超分辨率
- • ✅ 支持 CPU 和 CUDA GPU 推理
- • ✅ 现代化扁平 UI 设计
- • ✅ YCbCr 颜色空间处理
- • ✅ 实时性能监控
👨💻 开发信息
- • 项目名称 :FIRC - ESPCN 图像超分辨率工具
- • 开发环境 :Visual Studio 2019 + .NET Framework 4.7.2
- • 主要技术 :C# WinForms, ONNX Runtime, OpenCvSharp
- • 适用场景 :动漫图像放大、老照片修复、截图清晰度增强