基于 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-Pixel Convolutional 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)
核心技术
-
特征映射(Feature Mapping)
- 第一层:5×5 卷积核,64 个滤波器,提取浅层特征
- 第二层:3×3 卷积核,32 个滤波器,进一步提取深层特征
- 激活函数:Tanh,增强非线性表达能力
-
亚像素卷积(Sub-Pixel Convolution)
- 使用 3×3 卷积生成 r²×C 个通道(r 为放大倍数,C 为输出通道数)
- 通过 PixelShuffle 操作将通道重组为空间分辨率
- 避免传统插值方法的模糊问题
-
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是通道索引
推理流程
输入 BGR 图像
BGR → YCbCr
分离 Y/Cb/Cr 通道
Cb/Cr双三次插值放大
Y 通道归一化
ONNX 模型推理
输出 Y 通道 Clamp 0-1
Y 通道转为 8 位
合并 Y/Cb/Cr
YCbCr → BGR
输出 SR 图像
💻 环境要求
开发环境
| 组件 | 版本要求 | 说明 |
|---|---|---|
| 操作系统 | Windows 10/11 (64 位) | 必须为 64 位系统 |
| IDE | Visual Studio 2019 Community/Professional/Enterprise | 需包含".NET 桌面开发"工作负载 |
| .NET Framework | 4.7.2 或以上 | VS 2019 默认集成 |
| C# 语言版本 | 5.0 | 项目已配置 |
| MSBuild | 16.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.48 | NVIDIA 官网 |
| CUDA Toolkit 12.x | 12.0 或以上 | NVIDIA CUDA |
| cuDNN | 9.x | NVIDIA cuDNN |
注意:项目已内置 CUDA 12.x 运行时 DLL,通常无需单独安装 CUDA Toolkit。
📦 安装步骤
步骤 1:克隆或下载项目
bash
# 如果使用 Git
git clone <repository-url>
cd FIRC
# 或直接解压下载的 ZIP 文件
步骤 2:准备 ONNX 模型文件
从 ESPCN-PyTorch 项目获取模型文件:
bash
# 模型文件应位于以下路径
FIRC/
└── bin/
└── x64/
└── Release/
└── weights/
├── espcn-x2.onnx # 2 倍放大模型
├── espcn-x3.onnx # 3 倍放大模型
└── espcn-x4.onnx # 4 倍放大模型(默认)
模型获取方式:
- 从 ESPCN-PyTorch-master 项目的预训练模型目录复制
- 或从项目 releases 页面下载
- 或自行训练并导出为 ONNX 格式
步骤 3:安装依赖包
项目已通过 NuGet 配置自动恢复依赖,如需手动安装:
powershell
# 在 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 图形界面
- 双击打开
FIRC.sln解决方案文件 - 顶部菜单栏选择:生成 → 重新生成解决方案
- 等待编译完成,输出窗口应显示"成功 1 个"
方法二:命令行编译
powershell
# 打开"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
🚀 运行步骤
首次启动
-
启动程序
bash# 方式 1:直接双击 bin\x64\Release\FIRC.exe # 方式 2:命令行启动 cd bin\x64\Release .\FIRC.exe -
检查界面
- 窗口标题:"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.onnxespcn-x3.onnxespcn-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
第三方库
xml
<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 | ~25ms |
| 512×512 | ~250ms | ~35ms | ~400ms | ~60ms |
| 1024×1024 | ~900ms | ~120ms | ~1500ms | ~200ms |
测试环境:Intel i7-9700K @ 3.6GHz, NVIDIA RTX 2070 Super, 16GB RAM
放大效果对比
| 方法 | PSNR↑ | SSIM↑ | 主观质量 |
|---|---|---|---|
| 双线性插值 | 28.5 | 0.82 | 模糊,细节丢失 |
| 双三次插值 | 29.2 | 0.85 | 略有改善,仍有模糊 |
| ESPCN x4 | 32.8 | 0.94 | 清晰,细节丰富 |
🔗 相关资源
官方文档
参考项目
- ESPCN-PyTorch - PyTorch 实现版本
- BasicSR - 开源图像复原工具箱
学习资源
📝 更新日志
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) - 开源图像复原工具箱
学习资源
📝 更新日志
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
- 适用场景:动漫图像放大、老照片修复、截图清晰度增强