EDSR-PyTorch
EDSR-PyTorch 是经典论文《Enhanced Deep Residual Networks for Single Image Super-Resolution》的官方 PyTorch 实现,专注于单图像超分辨率任务。它旨在解决低分辨率图像模糊、细节丢失的问题,通过深度学习算法将小图放大并重建出清晰的高清细节,显著提升图像的视觉质量与 PSNR 指标。
这款工具特别适合计算机视觉领域的研究人员、算法开发者以及需要高质量图像放大的技术人员使用。相比于原始代码版本,EDSR-PyTorch 进行了深度优化:代码结构更加紧凑,去除了冗余部分;模型参数量缩减至原来的一半左右,大幅降低了训练和推理时的显存占用;同时在保持甚至略微提升性能的前提下,实现了更高效的 Python 原生运行体验。
项目提供了完整的复现脚本,支持用户从零开始训练模型,或直接使用预训练模型(涵盖 EDSR 和 MDSR 架构,支持 2 倍至 4 倍放大)快速处理自己的图片。无论是为了学术实验对比,还是实际工程中的图像增强需求,EDSR-PyTorch 都是一个轻量、高效且易于上手的选择。
使用场景
一家数字档案馆正在对一批珍贵的低分辨率历史照片进行数字化修复,以便在高清显示屏上展出。
没有 EDSR-PyTorch 时
- 直接使用传统插值算法放大图片,导致人脸纹理模糊、建筑边缘出现明显锯齿,完全无法满足展览的清晰度要求。
- 尝试寻找其他深度学习方案时,发现模型参数量过大(往往超过 40M),普通工作站的显存无法支撑训练或推理,频繁报错溢出。
- 复现论文代码过程繁琐,依赖环境冲突不断,团队花费数周时间仍在调试数据加载器(dataloader)等基础组件,进度严重滞后。
- 缺乏预训练模型支持,若从头训练需要海量算力和时间,对于急需上线的项目来说成本过高且不现实。
使用 EDSR-PyTorch 后
- 利用 EDSR-PyTorch 提供的预训练模型(如 EDSR_x4),直接将老照片放大 4 倍,成功还原了衣物褶皱和砖墙细节,PSNR 指标显著提升,画面锐利自然。
- 得益于其精简的代码结构和更小的模型体积(基线模型仅约 1.5M 参数),在单张消费级显卡上即可流畅运行,大幅降低了硬件门槛。
- 基于成熟的 PyTorch 实现,团队通过简单的
demo.sh脚本即可完成测试,无需处理复杂的版本兼容问题,半天内便打通了全流程。 - 支持自定义输入输出,工作人员只需将扫描好的 JPEG 图片放入指定文件夹,即可批量生成高质量修复结果,极大提升了工作效率。
EDSR-PyTorch 以其高效的架构和易用的特性,让低资源团队也能轻松实现电影级的图像超分辨率重建,让历史影像重现清晰光彩。
运行环境要求
- 未说明
- 未明确说明必需,但支持多 GPU 训练
- 提及使用 12GB 显存可处理 4000x2000 输入图像(4 倍缩放),建议使用大显存显卡
最低未说明,推荐 >= 32GB(用于 --ext bin 模式打包数据),普通训练建议充足内存

快速开始
关于 PyTorch 1.2.0
- 现在主分支默认支持 PyTorch 1.2.0。
- 由于严重的版本问题(尤其是 torch.utils.data.dataloader),MDSR 功能暂时禁用。如果您必须训练/评估 MDSR 模型,请使用旧版分支。
EDSR-PyTorch
关于 PyTorch 1.1.0
- 1.1.0 更新带来了一些细微变化。现在我们默认支持 PyTorch 1.1.0,如果您更倾向于使用旧版本,请使用旧版分支。

本仓库是论文 “用于单幅图像超分辨率的增强深度残差网络” 的官方 PyTorch 实现,该论文发表于 CVPRW 2017, 第二届 NTIRE。 您可以在 这里 找到原始代码及更多信息。
如果您在研究或出版物中使用了我们的工作,请引用如下:
[1] Bee Lim, Sanghyun Son, Heewon Kim, Seungjun Nah, 和 Kyoung Mu Lee, “用于单幅图像超分辨率的增强深度残差网络”, 第二届 NTIRE:图像修复与增强新趋势研讨会暨与 CVPR 2017 联合举办的图像超分辨率挑战赛。 [PDF] [arXiv] [幻灯片]
@InProceedings{Lim_2017_CVPR_Workshops,
author = {Lim, Bee and Son, Sanghyun and Kim, Heewon and Nah, Seungjun and Lee, Kyoung Mu},
title = {Enhanced Deep Residual Networks for Single Image Super-Resolution},
booktitle = {The IEEE Conference on Computer Vision and Pattern Recognition (CVPR) Workshops},
month = {July},
year = {2017}
}
我们提供了用于复现论文中所有结果的脚本。您可以从头开始训练模型,也可以使用预训练模型来放大您的图像。
Torch 版本之间的差异
- 代码更加简洁。(移除了所有不必要的部分。)
- 模型体积更小。(大约缩小了一半。)
- 性能略有提升。
- 训练和评估所需内存更少。
- 基于 Python。
依赖项
- Python 3.6
- PyTorch >= 1.0.0
- numpy
- skimage
- imageio
- matplotlib
- tqdm
- cv2 >= 3.xx(仅当您希望使用视频输入/输出时)
代码
将此仓库克隆到您希望的任何位置。
git clone https://github.com/thstkdgus35/EDSR-PyTorch
cd EDSR-PyTorch
快速入门(演示)
您可以用自己的图像测试我们的超分辨率算法。请将图像放入 test 文件夹中。(例如 test/<your_image>)我们支持 png 和 jpeg 文件。
运行 src 文件夹中的脚本。在运行演示之前,请取消注释 demo.sh 中您想要执行的相应行。
cd src # 您现在位于 */EDSR-PyTorch/src
sh demo.sh
您可以在 experiment/test/results 文件夹中找到结果图像。
| 模型 | 缩放倍数 | 文件名 (.pt) | 参数量 | **PSNR |
|---|---|---|---|---|
| EDSR | 2 | EDSR_baseline_x2 | 1.37 M | 34.61 dB |
| *EDSR_x2 | 40.7 M | 35.03 dB | ||
| 3 | EDSR_baseline_x3 | 1.55 M | 30.92 dB | |
| *EDSR_x3 | 43.7 M | 31.26 dB | ||
| 4 | EDSR_baseline_x4 | 1.52 M | 28.95 dB | |
| *EDSR_x4 | 43.1 M | 29.25 dB | ||
| MDSR | 2 | MDSR_baseline | 3.23 M | 34.63 dB |
| *MDSR | 7.95 M | 34.92 dB | ||
| 3 | MDSR_baseline | 30.94 dB | ||
| *MDSR | 31.22 dB | |||
| 4 | MDSR_baseline | 28.97 dB | ||
| *MDSR | 29.24 dB |
- 基线模型位于
experiment/model。请从 这里 下载我们的最终模型(542MB)。 ** 我们使用 DIV2K 0801 ~ 0900 数据集、RGB 通道,并且未采用自集成方法来测量 PSNR。(图像边界处会忽略缩放倍数 + 2 像素的部分。)
您可以通过广泛使用的基准数据集来评估您的模型:
Set5 - Bevilacqua 等人 BMVC 2012,
Urban100 - Huang 等人 CVPR 2015。
对于这些数据集,我们首先将结果图像转换为 YCbCr 颜色空间,并仅在 Y 通道上评估 PSNR。您可以下载 基准数据集(250MB)。设置 --dir_data <where_benchmark_folder_located> 即可使用这些基准数据集评估 EDSR 和 MDSR。
您还可以从 这里 下载一些结果。
该链接包含 EDSR+_baseline_x4 和 EDSR+_x4。
此外,您也可以通过 demo.sh 脚本轻松生成结果图像。
如何训练 EDSR 和 MDSR
我们使用 DIV2K 数据集来训练我们的模型。请从 这里 下载(7.1GB)。
将 tar 文件解压到您希望的任何位置。然后,在 src/option.py 中将 dir_data 参数修改为 DIV2K 图像所在的路径。
我们建议您在训练之前对图像进行预处理。此步骤会解码所有 png 文件并将其保存为二进制文件。首次运行时,请使用 --ext sep_reset 参数。如果您想跳过解码步骤并直接使用已保存的二进制文件,可以使用 --ext sep 参数。
如果您有足够的内存(>= 32GB),可以使用 --ext bin 参数将所有 DIV2K 图像打包成一个二进制文件。
您可以自行训练 EDSR 和 MDSR。所有脚本都包含在 src/demo.sh 中。请注意,EDSR(x3、x4)需要预先训练好的 EDSR(x2)。您可以通过移除 --pre_train <x2 模型> 参数来忽略此限制。
cd src # 现在您位于 */EDSR-PyTorch/src
sh demo.sh
更新日志
2018年1月4日
- 许多部分被重写。您无法直接使用之前的脚本和模型。
- 预训练的 MDSR 暂时禁用。
- 包含了训练细节。
2018年1月9日
- 补充了缺失的文件(
src/data/MyImage.py)。 - 修复了一些链接。
- 补充了缺失的文件(
2018年1月16日
- 实现了内存高效的前向传播函数。
- 在您的脚本中添加
--chop_forward参数以启用该功能。 - 基本上,该函数会先将大图像分割成小块,超分辨率处理后再将这些小块拼接起来。我曾在 12GB 内存下测试过该功能,输入分辨率为 4000 x 2000,放大倍率为 4。(因此,输出将是 16000 x 8000。)
2018年2月21日
- 修复了加载预训练多 GPU 模型时的问题。
- 添加了预训练的缩放因子为 2 的基准模型。
- 此代码现在默认只保存表现最好的模型。对于 MDSR 而言,“最好”可能有些模糊。请使用
--save_models参数来保留所有中间模型。 - PyTorch 0.3.1 更改了 DataLoader 函数的实现方式。因此,我也更改了自己的 MSDataLoader 实现。您可以在 feature/dataloader 分支中找到它。
2018年2月23日
现在默认使用 PyTorch 0.3.1。如果您使用旧版本,请使用 legacy/0.3.0 分支。
通过新的
src/data/DIV2K.py代码,用户可以轻松创建用于超分辨率的新数据类。新的二进制数据包。(如果您已有
DIV2K_decoded文件夹,请将其删除。)使用
--ext bin参数后,代码会自动生成并保存与之前DIV2K_decoded对应的二进制数据包。(这需要大量内存(约 45GB,可使用交换空间),请务必小心。)如果无法生成二进制包,请使用默认设置(
--ext img)。修复了一个错误:日志中的 PSNR 与从保存图像计算出的 PSNR 不一致。
现在保存的图像质量更好!(PSNR 比原始代码高约 0.1dB。)
添加了 Torch7 模型与 PyTorch 模型之间的性能对比。
2018年3月5日
- 所有基准模型均已上传。
- 现在支持测试时的半精度计算。使用
--precision half参数即可启用。这不会降低输出图像的质量。
2018年3月11日
- 修复了代码和脚本中的部分错别字。
- 现在默认设置为
--ext img。虽然我们建议您在训练时使用--ext bin,但在仅进行测试时请使用--ext img。 - 实现了 skip_batch 功能。使用
--skip_threshold参数可以跳过您想要忽略的批次。尽管此功能与 Torch7 版本并不完全相同,但它仍能按预期工作。
2018年3月20日
- 使用
--ext sep-reset可以预先解码大型 png 文件。这些解码后的文件将保存在与 DIV2K png 文件相同的目录中。首次运行后,您可以使用--ext sep来节省时间。 - 现在支持多种基准数据集。例如,尝试使用
--data_test Set5来在 Set5 图像上测试您的模型。 - 改变了 skip_batch 的行为。
- 使用
2018年3月29日
- 我们现在提供了论文中所有的模型。
- 同时提供
MDSR_baseline_jpeg模型,该模型可以抑制原始低分辨率图像中的 JPEG 码块效应。如果您遇到相关问题,可以使用该模型。 MyImage数据集已更改为Demo数据集,并且运行效率比以前更高。- 部分代码和脚本被重写。
2018年4月9日
2018年4月26日
- 兼容 PyTorch 0.4.0。
- 如果您仍在使用旧版本的 PyTorch,请使用 legacy/0.3.1 分支。
- 进行了少量错误修复。
2018年7月22日
- 感谢最近的提交,其中包含了 RDN 和 RCAN。请参阅
code/demo.sh以训练和测试这些模型。 - 现在的数据加载器比以前更加稳定。请删除在此提交之前创建的
DIV2K/bin文件夹。同时,请避免使用--ext bin参数。我们的代码会在训练前自动解码 png 图像。如果您磁盘空间不足(约 10GB),我们建议使用--ext img(但速度较慢)。
- 感谢最近的提交,其中包含了 RDN 和 RCAN。请参阅
2018年10月18日
- 使用
--pre_train download参数,预训练模型将自动从服务器下载。 - 支持视频输入/输出(仅推理)。尝试使用
--data_test video --dir_demo [视频文件目录]。
- 使用
关于 PyTorch 1.0.0
- 我们支持 PyTorch 1.0.0。如果您更喜欢旧版本的 PyTorch,请使用旧分支。
- 不再支持
--ext bin参数。请使用--ext sep-reset删除现有的二进制文件。成功构建二进制文件后,您可以移除参数中的-reset。
常见问题
相似工具推荐
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 艺术创作变得触手可及。
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 协议完全开源,是提升终端工作效率的理想助手。
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备
Deep-Live-Cam
Deep-Live-Cam 是一款专注于实时换脸与视频生成的开源工具,用户仅需一张静态照片,即可通过“一键操作”实现摄像头画面的即时变脸或制作深度伪造视频。它有效解决了传统换脸技术流程繁琐、对硬件配置要求极高以及难以实时预览的痛点,让高质量的数字内容创作变得触手可及。 这款工具不仅适合开发者和技术研究人员探索算法边界,更因其极简的操作逻辑(仅需三步:选脸、选摄像头、启动),广泛适用于普通用户、内容创作者、设计师及直播主播。无论是为了动画角色定制、服装展示模特替换,还是制作趣味短视频和直播互动,Deep-Live-Cam 都能提供流畅的支持。 其核心技术亮点在于强大的实时处理能力,支持口型遮罩(Mouth Mask)以保留使用者原始的嘴部动作,确保表情自然精准;同时具备“人脸映射”功能,可同时对画面中的多个主体应用不同面孔。此外,项目内置了严格的内容安全过滤机制,自动拦截涉及裸露、暴力等不当素材,并倡导用户在获得授权及明确标注的前提下合规使用,体现了技术发展与伦理责任的平衡。