dcscn-super-resolution
dcscn-super-resolution 是一个基于 TensorFlow 实现的深度学习图像超分辨率工具,旨在将低分辨率图片快速、准确地还原为高清图像。它主要解决了传统插值算法(如双三次插值)导致的图像模糊和细节丢失问题,通过人工智能技术从单张低清图片中重建出丰富的高频细节。
这款工具非常适合计算机视觉研究人员、AI 开发者以及需要批量提升图像质量的设计师使用。对于希望深入理解或改进单图像超分辨率(SISR)模型的技术人员来说,它提供了一个结构清晰且高效的参考实现。
dcscn-super-resolution 的核心亮点在于其独特的网络架构设计。它结合了深度卷积神经网络(Deep CNN)、残差连接(Skip Connection)以及“网络中的网络”(Network in Network)结构,能够同时捕捉图像的局部特征与全局信息。此外,该工具还集成了像素重排(Pixel Shuffler)、转置卷积、自集成(Self Ensemble)以及深度可分离卷积等先进技术。这些特性不仅显著提升了图像复原的精度(PSNR),还有效降低了模型复杂度,使其在保持轻量级的同时,性能优于许多同类深度学习方法。无论是用于学术研究还是实际工程部署,它都是一个兼具速度与精度的优秀选择。
使用场景
某数字档案馆正在对一批珍贵的低分辨率历史照片进行数字化修复,以便在高清显示屏上展出。
没有 dcscn-super-resolution 时
- 细节模糊丢失:传统的双三次插值(Bicubic)放大算法仅靠数学估算填充像素,导致老照片中的文字边缘和人物五官严重模糊,无法辨认关键信息。
- 伪影干扰严重:强行放大后图像出现明显的锯齿和块状噪点,破坏了历史影像的质感,需要人工逐张修图,耗时极长。
- 算力与效果难平衡:现有的其他深度学习超分模型虽然效果尚可,但参数量巨大、推理速度慢,难以在有限的服务器资源下批量处理数万张图片。
- 纹理重建能力弱:对于衣物纹理、建筑砖墙等高频细节,传统方法完全无法还原,只能得到一片平滑的色块。
使用 dcscn-super-resolution 后
- 高频细节精准还原:利用其独特的跳跃连接(Skip Connection)和网络内网络(Network in Network)架构,成功恢复了照片中原本模糊的报纸文字和发丝细节,清晰度显著提升。
- 画面自然无伪影:结合 Pixel Shuffler 亚像素卷积技术,生成的 4 倍放大图像边缘平滑自然,有效消除了锯齿感,保留了胶片特有的颗粒质感。
- 轻量高效批量处理:相比同类重型模型,dcscn-super-resolution 结构更轻量,在保持高 PSNR(峰值信噪比)的同时大幅提升了推理速度,使大规模批量自动化修复成为可能。
- 复杂纹理智能重构:借助深度可分离卷积技术,模型能更敏锐地捕捉局部与全局特征,将原本模糊的砖墙和布料纹理“猜”得栩栩如生。
dcscn-super-resolution 以轻量级的架构实现了媲美重型模型的修复效果,让低清历史影像在保留真实质感的前提下重获高清新生。
运行环境要求
- 未说明
- 非必需(支持 CPU 运行,但建议使用 GPU 加速训练
- 未指定具体型号、显存大小或 CUDA 版本)
未说明(小数据集可存入内存以加速,建议根据数据集大小调整)

快速开始
基于跳跃连接与网络内网络的深度CNN实现快速且准确的图像超分辨率
作者:Jin Yamanaka、Shigesumi Kuwashima 和 Takio Kurita
概述(版本2)
这是对论文《基于跳跃连接与网络内网络的深度CNN实现快速且准确的图像超分辨率》(arXiv:1707.05425)的TensorFlow实现,该论文提出了一种基于深度学习的单幅图像超分辨率(SISR)模型。我们将其命名为DCSCN。如果您正在查看论文中的代码和结果,请参阅ver1分支。
模型结构如下所示。我们使用了带有残差网络、跳跃连接和网络内网络的深度CNN。深度CNN与跳跃连接层的组合被用作提取局部和全局图像特征的特征提取器。同时,类似于“网络内网络”的并行化1×1卷积网络也被用于图像重建。
作为版本2,我们还实现了以下功能:
- 来自论文《利用高效的亚像素卷积神经网络进行实时单幅图像和视频超分辨率》(arXiv:1609.05158)的__像素洗牌__
- 来自论文《用于语义分割的全卷积网络》(arXiv:1411.4038)的__转置卷积__(可选)
- 来自论文《改进基于示例的单幅图像超分辨率的七种方法》(arXiv:1511.02228)的__自集成__
- 裁剪归一化(梯度裁剪)
- 动态加载训练图像(可选)
- 添加额外层或更新默认参数以获得更好的PSNR结果
- 来自论文《Xception:深度可分离卷积的深度学习》(arXiv:1610.02357)的__深度可分离卷积__。由Chew Jing Wei添加。深度可分离卷积通过将传统卷积层的计算分为两个步骤来降低模型复杂度。第一步是进行深度卷积,即每个输入通道独立地与其他通道隔离进行卷积;第二步则是进行逐点卷积,即将每个深度滤波器的输出堆叠起来,再通过一个1×1的滤波器确定该层最终的输出通道数。如需更完整且适合初学者的解释,请参阅https://towardsdatascience.com/a-basic-introduction-to-separable-convolutions-b99ec3102728。
示例结果
| 输入图像(橙色)与x4双三次插值 | 我们的DCSCN输出 |
|---|---|
![]() |
![]() |
与基于深度学习的其他SISR模型相比,我们的DCSCN模型要轻量得多,这一点在版本1中已经体现。而在版本2中,我们采用了更大的模型和最新的技术,以获得更好的图像恢复性能。
环境要求
Python >= 3.5
TensorFlow >= 2.0.0, scipy, numpy, pillow, imageio 和 scikit-image
PSNR结果
以下是使用默认参数的示例结果。该模型使用DIV2k数据集进行了训练,每轮包含15万张48×48的图像。
| 数据集 | 缩放倍数 | 双三次插值 | c-DCSCN(版本1) | DRCN | VDSR | DCSCN(版本2) | DRRN |
|---|---|---|---|---|---|---|---|
| set5 | x2 | 33.66 | 37.15 | 37.63 | 37.53 | 37.79 | 37.74 |
| x3 | 30.39 | 33.09 | 33.82 | 33.66 | 34.06 | 34.03 | |
| x4 | 28.42 | 30.85 | 31.53 | 31.35 | 31.72 | 31.68 | |
| set14 | x2 | 30.24 | 32.74 | 33.04 | 33.03 | 33.25 | 33.23 |
| x3 | 27.55 | 29.47 | 29.76 | 29.77 | 29.95 | 29.96 | |
| x4 | 26.00 | 27.76 | 28.02 | 28.01 | 28.25 | 28.21 | |
| bsd100 | x2 | 29.56 | 31.61 | 31.85 | 31.90 | 32.00 | 32.05 |
| x3 | 27.21 | 28.52 | 28.80 | 28.82 | 28.89 | 28.95 | |
| x4 | 25.96 | 27.06 | 27.23 | 27.29 | 27.35 | 27.38 |
结果和模型将在几天内上传!!
评估
本GitHub仓库包含了部分参数的预训练权重。请使用以下参数执行evaluate.py,结果将保存在output目录中。如果您希望使用其他参数进行评估,建议先进行训练,然后再使用与训练时相同的参数进行评估。评估日志将记录在log.txt文件中,请查阅。
其中包含了一些预训练模型:
# 评估set14数据集
python3 evaluate.py --test_dataset=set14 --save_results=true
# 评估set5数据集并使用小型模型
python3 evaluate.py --test_dataset=set5 --save_results=true --layers=8 --filters=96
# 评估所有数据集(set5、set14、bsd100)
python3 evaluate.py --test_dataset=all
# 评估我们的紧凑版DCSCN(c-DCSCN)
python3 evaluate.py --scale=2 --layers=7 --filters=32 --min_filters=8 --filters_decay_gamma=1.2 --nin_filters=24 --nin_filters2=8 --reconstruct_layers=0 --self_ensemble=1 --batch_image_size=32 --pixel_shuffler_filters=1 --test_dataset=all
应用于您自己的图像
将您的图像文件放置在项目目录中。然后运行“sr.py --file 'your_image_file'”以应用超分辨率处理。结果将生成在output目录中。请注意,您应使用与训练时相同的参数。
例如,如果您想对image001.png应用此模型,可以尝试以下操作:
# 对image001.jpg应用超分辨率(结果将在output目录中显示)
python3 sr.py --file=your_file.png
# 使用小型模型应用超分辨率
python3 sr.py --file=your_file.png --layers=8 --filters=96
如何使用您自己的数据集进行训练
您可以使用任何数据集进行训练。将您的图像文件作为训练数据放入data目录下的相应文件夹中,然后通过--dataset参数指定。由于训练过程中有一些重要的超参数需要设置,请参阅args.py,以了解如何使用其他训练参数。
一旦确定了训练参数,模型名称将根据这些参数自动定义。例如,使用默认参数时,模型名称可能为“dcscn_L12_F196to48_NIN_A64_PS_R1F32”,该名称代表了模型的具体结构。
# 使用bsd200数据集进行x2倍缩放的训练
python3 train.py --dataset=bsd200 --training_images=80000
# 使用您自己的数据集进行x3倍缩放的训练
python3 train.py --scale=3 --dataset=[您自己的数据目录]
# 使用转置卷积代替像素洗牌层进行上采样,以实现2倍放大
python3 train.py --dataset=bsd200 --training_images=80000 --pixel_shuffler=false
- 每次训练和评估的摘要都会被记录到 log.txt 中。
- 模型将保存在 models/"模型名称".ckpt 下。
- 评估结果图像会生成在 output/"模型名称"/data/[数据集目录名] 目录下。
- 当你使用 evaluate.py / sr.py 脚本时,请确保使用的参数与训练时完全一致,这样脚本才能加载你自己训练好的 "模型名称".ckpt 文件。
使用小型模型进行训练/测试(适用于CPU)
如果出现以下情况:1) 你使用的是CPU;2) 训练数据量较小;或3) 只是想测试一下是否能正常工作,我建议你使用更小的模型。对于我的DCSCN模型来说,8层、每层96个滤波器的配置已经具备足够的性能。而在CPU环境下,4–6层、每层32–64个滤波器的配置则是一个不错的起点。
# 使用小型模型进行2倍放大训练
python3 train.py --dataset=bsd200 --layers=8 --filters=96 --training_images=30000
# 使用微型模型进行测试性2倍放大训练
python3 train.py --dataset=set5 --layers=4 --filters=32 --use_nin=false --training_images=10000
在我的论文中,我们提出了一种紧凑版的DCSCN(c-DCSCN)。如果你想尝试用这个模型进行训练,可以使用以下选项。(2倍缩放)
python3 train.py --scale=2 --layers=7 --filters=32 --min_filters=8 --filters_decay_gamma=1.2 --nin_filters=24 --nin_filters2=8 --reconstruct_layers=0 --self_ensemble=1 --dataset=yang_bsd_8 --training_images=228688 --batch_image_size=32 --build_batch=True --do_benchmark=True --pixel_shuffler_filters=1
加快训练速度
请注意,每次训练都需要加载和转换批次图像,这一过程较为耗时,尤其是在迭代次数较多的情况下。以下是一些优化选项,可以帮助显著缩短训练时间:
- 使用 “convert_y.py” 将你的数据集图像转换为Y通道单色位图。
如果你的训练数据是以PNG或JPEG等压缩格式存储的,并且图像分辨率较高,那么在训练之前必须先进行转换。特别是对于DIV2K数据集,这样做可以大大节省解压和图像转换的时间。此外,在这种模式下,每个输入批次图像有50%的概率会被水平翻转。
- 对于较小的数据集,可以使用 “--build_batch True” 选项。
如果你的数据集足够小,能够完全存放在CPU内存中,就可以使用此选项。它会提前将源图像分割成批次图像并保存下来,以便在训练过程中重复使用。如果你使用的是HDD(而非SSD),并且数据集规模不大(例如Yang91 + BSD200通过8种方式增强后的数据集),那么这个选项非常有用。它可以避免每次训练时都重新加载和转换图像的过程。
在这种情况下,批次图像的位置会被调整并限制在以半批图像尺寸为网格的范围内。不过,根据我的实验,这并不会对PSNR性能产生太大影响。
如何设置 --training_images 参数?
--training_images 参数表示一个epoch内训练的图像块数量。通常情况下,它的值应与输入训练图像块的总数相同。当你使用 build_batch=True 时,训练程序会在训练前在 "batch_data" 目录下生成一批图像块,这样你就能清楚地看到训练数据中有多少个批次图像。
然而,具体的数值还需要根据图像类型、多样性以及模型复杂度来决定。你可以从非常小的值开始,比如1,000,如果效果不够理想,再逐步增加到10万至20万。
重要参数
| 参数名 | 名称 | 默认值 | 说明 |
|---|---|---|---|
| layers | CNN层数 | 12 | 特征提取CNN的层数 |
| filters | 第一层CNN滤波器数量 | 196 | 第一层特征提取CNN的滤波器数量 |
| min_filters | 最后一层CNN滤波器数量 | 48 | 最后一层特征提取CNN的滤波器数量 |
| filters_decay_gamma | 滤波器衰减系数 | 1.5 | 每层的CNN滤波器数量会按照该系数从[filters]衰减到[min_filters] |
| pixel_shuffler | 像素洗牌层 | True | 是否使用像素洗牌层作为上采样层。若为False,则使用转置卷积作为上采样层。 |
| self_ensemble | 自集成 | 8 | 对1–8张翻转/旋转后的图像分别进行超分辨率处理,然后取平均图像作为最终结果。 |
| training_images | 每个训练epoch的批次图像数 | 24000 | 这个数值决定了一个epoch内用于训练的批次图像数量。我通常会为每个学习率设置10个epoch,每个epoch使用10万批次图像。 |
| dropout_rate | Dropout率 | 0.8 | 输出节点保留的概率。取值范围为1 ≥ drop out > 0。若为1,则不使用Dropout。 |
| initializer | 初始化方法 | he | 各权重的初始化方法。可选值包括[uniform, stddev, xavier, he, identity, zero]。 |
| activator | 激活函数 | prelu | 每层CNN的激活函数类型。可选值包括[relu, leaky_relu, prelu, sigmoid, tanh]。 |
| optimizer | 优化器函数 | adam | 优化器的方法。可选值包括[gd, momentum, adadelta, adagrad, adam, rmsprop]。 |
| batch_image_size | 每个批次的图像尺寸 | 48 | 每张训练图像都会被分割成这个尺寸的小块。 |
| batch_num | 每个批次的图像数量 | 20 | 一次训练步骤中使用的批次图像数量。 |
| clipping_norm | 梯度裁剪阈值 | 5 | 梯度裁剪的范数。若小于等于0,则不进行梯度裁剪。 |
此外,学习率和其他模型参数也非常重要。 我们将按照 [ training_images / batch_num ] 步骤进行每个epoch的训练。初始学习率设为 initial_lr。经过 [lr_decay_epoch] 个epoch后,学习率将按 lr_decay 的比例衰减。当当前学习率低于 end_lr 时,训练即告结束。
通常可以通过调整 training_images 和 lr_decay_epoch 来控制训练的迭代次数。更多参数请参考 arg.py 文件。
数据增强
为了获得更好的性能,数据增强是必不可少的。你可以使用 augmentation.py 脚本来构建增强后的数据集。其中,参数 augment_level = 4 表示将添加左右翻转、上下翻转以及同时左右和上下翻转的图像,从而使数据集扩大4倍。此时会生成名为 yang91_4 的增强数据集目录。
为了得到更好的模型,你应该使用更大的训练数据,比如 (BSD200 + Yang91) 经过8种方式增强后的数据集。
# 为yang91数据集构建4倍增强数据集(仅添加翻转图像)
python3 augmentation.py --dataset=yang91 --augment_level=4
# 为yang91数据集构建8倍增强数据集(添加翻转和旋转图像)
python3 augmentation.py --dataset=yang91 --augment_level=8
# 使用增强后的数据进行训练
python3 train.py --dataset=yang91_4
如何计算 PSNR / SSIM
将 RGB 图像转换为 YCbCr 图像,然后仅对 Y 通道进行训练和应用。
对于 PSNR,默认情况下,会从结果图像和原始图像的每条边沿裁剪掉 ‘scale’ 像素,四舍五入取整后,再计算 PSNR 和 SSIM。 我使用的是 scikit-image 中的 SSIM 指标计算流程。参数如下:(win_size=11, gaussian_weights=True, multichannel=True, K1=0.01, K2=0.03, sigma=1.5, data_range=255) (2018年9月16日 修改)
可视化
在训练过程中,TensorBoard 日志会保存在 tf_log 目录下。
您可以在 TensorBoard 中查看训练过程中测试 PSNR 的变化趋势。此外,所有权重、偏置以及梯度的均值、标准差和直方图也会被记录到 TensorBoard 中。

常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

