资讯动态

MMagic 中的 SRCNN 图像超分辨率:从 TPAMI‘2015 论文到可复现的训练与推理实践

发布时间:2026/9/29 5:36:37 来源:尧图企业网站定制
媒体生成计算机视觉深度学习人工智能大模型【免费下载链接】mmagicOpenMMLab Multimodal Advanced, Generative, and Intelligent Creation Toolbox. Unlock the magic : Generative-AI (AIGC), easy-to-use APIs, awsome model zoo, diffusion models, for text-to-image generation, image/video restoration/enhancement, etc.项目地址https://gitcode.com/gh_mirrors/mm/mmagic点击查看免费下载导读SRCNNSuper-Resolution Convolutional Neural Network是深度学习单图像超分辨率SISR领域的开创性工作发表于 IEEE TPAMI 2015。本文以 MMagicOpenMMLab 多模态生成与智能创作工具箱仓库中 configs/srcnn/README_zh-CN.md 为骨架结合 配置文件 与 网络实现 源码完整讲解 SRCNN 的网络结构、官方预训练权重在 Set5 / Set14 / DIV2K 上的评测结果以及从零开始训练与测试一套 ×4 超分辨率模型的完整实操流程。读完本文你将能复现官方指标并能自行调整通道数、卷积核尺寸、放大倍数等关键参数。一、算法背景与论文信息SRCNN 首次证明了「深度卷积网络可以端到端学习低分辨率图像到高分辨率图像的非线性映射」其核心思想是先用双三次插值bicubic将低分辨率图像放大到目标尺寸再通过一个轻量级的三层卷积网络完成特征提取、非线性映射与重建。传统基于稀疏编码的方法也可以被看作一种深度卷积网络但 SRCNN 将所有层联合优化而非分步处理。论文标题Image Super-Resolution Using Deep Convolutional Networks发表刊物IEEE Transactions on Pattern Analysis and Machine Intelligence (TPAMI)2015 年第 38 卷第 2 期295–307 页任务类型图像超分辨率Image Super-Resolution仓库登记MMagic 的 model-index.yml 与 configs/srcnn/metafile.yml 均将该算法收录于SRCNN集合任务为image super-resolution年份标记为 2015引用格式可直接用于论文写作article{dong2015image, title{Image super-resolution using deep convolutional networks}, author{Dong, Chao and Loy, Chen Change and He, Kaiming and Tang, Xiaoou}, journal{IEEE transactions on pattern analysis and machine intelligence}, volume{38}, number{2}, pages{295--307}, year{2015}, publisher{IEEE} }二、MMagic 中的 SRCNN 网络结构SRCNNNet 源码解读在 MMagic 中SRCNN 的实现位于 mmagic/models/editors/srcnn/srcnn_net.py类名为SRCNNNet通过MODELS.register_module()注册进 MMagic 的模型注册表并在 mmagic/models/editors/srcnn/init.py 与 mmagic/models/editors/init.py 中导出。2.1 核心结构与默认超参数SRCNNNet包含三个卷积层和一条双三次上采样路径构造参数如下参数默认值含义channels(3, 64, 32, 3)各层通道数长度必须为 4输入通道 三个卷积层输出通道kernel_sizes(9, 1, 5)各卷积层核尺寸长度必须为 3upscale_factor4放大倍数默认 ×4前向计算流程对应 srcnn_net.py用nn.Upsample(scale_factorupscale_factor, modebicubic, align_cornersFalse)将输入的低分辨率图像先放大到目标高分辨率尺寸conv19×9 卷积负责 patch 提取与特征表示输出经 ReLU 激活conv21×1 卷积实现非线性映射输出经 ReLU 激活conv35×5 卷积完成重建直接输出高分辨率图像。每个卷积层均使用padding kernel_size // 2以保持空间尺寸不变见 srcnn_net.py。因此输出的空间尺寸完全由双三次上采样决定这正是原论文「先在 HR 空间做映射」的设计。2.2 参数约束与测试佐证构造函数对参数做了显式校验srcnn_net.pychannels元组长度必须为 4否则抛出AssertionErrorkernel_sizes元组长度必须为 3否则抛出AssertionError。对应的单元测试位于 tests/test_models/test_editors/test_srcnn/test_srcnn_net.py其中验证了两个关键行为以channels(3, 4, 6, 3), kernel_sizes(9, 1, 5), upscale_factor4构造输入(1, 3, 4, 4)输出形状为(1, 3, 16, 16)—— 空间尺寸恰好放大 4 倍以channels(1, 4, 8, 1), kernel_sizes(3, 3, 3), upscale_factor2构造输入(1, 1, 4, 4)输出形状为(1, 1, 8, 8)。这组测试同时覆盖了 CPU 前向、GPU 前向条件判断torch.cuda.is_available()以及两类非法参数输入的断言路径是复现与二次开发时最直接的参考样例。三、官方配置逐项解析srcnn_x4k915_1xb16-1000k_div2kMMagic 为 SRCNN 提供了唯一一套训练配置 configs/srcnn/srcnn_x4k915_1xb16-1000k_div2k.py。配置名x4k915表示放大倍数 ×4、卷积核 9-1-51xb16表示 1 卡、batch size 161000k表示 100 万次迭代。整个配置由数据、模型、训练循环、优化器、学习率策略和默认运行时六部分组成。3.1 模型定义BaseEditModel SRCNNNetscale 4 model dict( typeBaseEditModel, generatordict( typeSRCNNNet, channels(3, 64, 32, 3), kernel_sizes(9, 1, 5), upscale_factorscale), pixel_lossdict(typeL1Loss, loss_weight1.0, reductionmean), train_cfgdict(), test_cfgdict(metrics[PSNR], crop_borderscale), data_preprocessordict( typeDataPreprocessor, mean[0., 0., 0.], std[255., 255., 255.], ))要点说明外层使用 MMagic 的BaseEditModel生成式/复原式模型的通用基类生成器内嵌SRCNNNet通道配置为(3, 64, 32, 3)、核尺寸(9, 1, 5)与论文设置一致损失采用 L1 像素损失L1Loss权重 1.0reductionmean这是当前 SISR 训练的主流选择test_cfg中声明crop_borderscale即 4对应 README 中「评估前裁剪每个边界scale像素」的约定data_preprocessor将图像像素值除以 255std[255., 255., 255.]把输入归一化到 [0, 1] 区间。3.2 训练数据流水线训练阶段依次应用以下变换配置文件LoadImageFromFile分别加载低分辨率img与高分辨率gtRGB、cv2后端SetValues写入scale4供后续采样使用PairedRandomCrop以gt_patch_size128裁剪出配对图像块对应低分辨率块尺寸为 128/432Flip水平翻转概率 0.5与垂直翻转概率 0.5RandomTransposeHW以 0.5 概率交换 H、W 维度等效转置增强PackInputs打包为模型输入。验证流水线val_pipeline则只做图像加载与打包不做任何数据增强。3.3 数据集与评测配置train_dataloader dict( num_workers4, batch_size16, samplerdict(typeInfiniteSampler, shuffleTrue), datasetdict( typeBasicImageDataset, ann_filemeta_info_DIV2K800sub_GT.txt, metainfodict(dataset_typediv2k, task_namesisr), data_rootdata/DIV2K, data_prefixdict(imgDIV2K_train_LR_bicubic/X4_sub, gtDIV2K_train_HR_sub), pipelinetrain_pipeline))训练集为 DIV2K 的 800 张子图DIV2K800sub低分辨率图由双三次下采样得到X4_sub验证集为 Set5data_rootdata/Set5data_prefixdict(imgLRbicx4, gtGTmod12)即 4 倍双三次低分辨率图与 mod12 对齐的高分辨率图验证评估器val_evaluator同时输出MAE、PSNR、SSIM三个指标其中PSNR与SSIM均设置crop_borderscale多数据集测试基类配置见 mmagic/configs/base/datasets/sisr_x4_test_config.py其中以test_dataloader [set5, set14, div2k]的形式串联三个测试集并分别用prefixSet5 / Set14 / DIV2K区分指标来源。3.4 训练循环、优化器与学习率train_cfg dict( typeIterBasedTrainLoop, max_iters1000000, val_interval5000) optim_wrapper dict( constructorDefaultOptimWrapperConstructor, typeOptimWrapper, optimizerdict(typeAdam, lr2e-4, betas(0.9, 0.999))) param_scheduler dict( typeCosineRestartLR, by_epochFalse, periods[250000, 250000, 250000, 250000], restart_weights[1, 1, 1, 1], eta_min1e-7)采用基于迭代的训练循环IterBasedTrainLoop总迭代数 100 万每 5000 次迭代验证一次优化器为 Adam学习率 2e-4betas(0.9, 0.999)学习率使用CosineRestartLR每 25 万次迭代为一个周期共 4 个周期重启权重均为 1最低学习率eta_min1e-7default_hooks中 Checkpoint 每 5000 次迭代保存一次并附带优化器状态save_optimizerTrueLogger 每 100 次迭代输出一次日志。此外配置继承了 mmagic/configs/base/default_runtime.py其中 CheckpointHook 额外设置save_bestPSNR、rulegreater与max_keep_ckpts10即按 PSNR 择优保留最多 10 个 checkpoint可视化使用ConcatImageVisualizer拼接gt_img / input / pred_img输出。四、官方预训练模型与评测结果README 中说明所有结果均在 RGB 通道上评测评测前裁剪每个图像边界scale即 4个像素指标为 PSNR 与 SSIM。官方提供的唯一预训练权重为srcnn_x4k915_1x16_1000k_div2k1 张 GPU 训练100 万迭代各数据集结果如下数据集PSNRSSIM训练资源Set528.43160.80991 GPUSet1425.64860.70141 GPUDIV2K27.74600.78541 GPU以上数值同时记录在 configs/srcnn/metafile.yml 中DIV2K 的 SSIM 为 0.7854可通过该文件与官方日志交叉核对。需要说明的是该权重训练于较早的 MMEditing 版本链接文件名为srcnn_x4k915_1x16_1000k_div2k_20200608-4186f232.pth在 MMagic 中加载时建议先验证输入输出张量形状与归一化约定是否一致参考 test_srcnn_net.py 中(n, c, h, w)→ 空间尺寸 ×4 的约束。五、快速开始训练与测试命令5.1 训练 SRCNN以下命令均以 configs/srcnn/srcnn_x4k915_1xb16-1000k_div2k.py 为配置入口脚本位于 tools/train.py 与 tools/dist_train.sh。# CPU 上训练 CUDA_VISIBLE_DEVICES-1 python tools/train.py configs/srcnn/srcnn_x4k915_1xb16-1000k_div2k.py # 单个 GPU 上训练 python tools/train.py configs/srcnn/srcnn_x4k915_1xb16-1000k_div2k.py # 多个 GPU 上训练以 8 卡为例 ./tools/dist_train.sh configs/srcnn/srcnn_x4k915_1xb16-1000k_div2k.py 8训练产物checkpoint、日志、可视化默认写入配置中定义的work_dir ./work_dirs/srcnn_x4k915_1xb16-1000k_div2k训练开始前请按上文 3.3 节准备 DIV2K 训练数据目录data/DIV2K下含DIV2K_train_LR_bicubic/X4_sub与DIV2K_train_HR_subSet5 验证数据放置于data/Set5数据集格式与转换工具可参考 tools/dataset_converters/div2k 与 tools/dataset_converters/vid4 等目录下的说明文档。5.2 测试评估预训练模型测试入口脚本为 tools/test.py 与 tools/dist_test.sh用法与训练对称# CPU 上测试 CUDA_VISIBLE_DEVICES-1 python tools/test.py \ configs/srcnn/srcnn_x4k915_1xb16-1000k_div2k.py \ https://download.openmmlab.com/mmediting/restorers/srcnn/srcnn_x4k915_1x16_1000k_div2k_20200608-4186f232.pth # 单个 GPU 上测试 python tools/test.py \ configs/srcnn/srcnn_x4k915_1xb16-1000k_div2k.py \ https://download.openmmlab.com/mmediting/restorers/srcnn/srcnn_x4k915_1x16_1000k_div2k_20200608-4186f232.pth # 多个 GPU 上测试以 8 卡为例 ./tools/dist_test.sh \ configs/srcnn/srcnn_x4k915_1xb16-1000k_div2k.py \ https://download.openmmlab.com/mmediting/restorers/srcnn/srcnn_x4k915_1x16_1000k_div2k_20200608-4186f232.pth 8测试会依次在 Set5、Set14、DIV2K 三个数据集上运行见 sisr_x4_test_config.py 中test_dataloader与test_evaluator的列表结构输出带数据集前缀的 PSNR / SSIM可与上文结果表逐项对照。5.3 进一步阅读训练与测试流程的通用说明分布式环境、恢复训练、可视化、指标含义等可查阅docs/zh_cn/user_guides/train_test.mdTrain a model / Test a pre-trained model 部分即 README 中「更多细节」指向的文档docs/zh_cn/user_guides/metrics.mdPSNR 等评估指标配置说明docs/zh_cn/user_guides/config.md配置文件语法六、二次开发要点修改网络与配置的常见路径6.1 调整放大倍数与网络宽度若需训练 ×2 或 ×8 模型只需修改 配置文件 中的scale并同步调整test_cfg.crop_border与val_evaluator中 PSNR / SSIM 的crop_border保持等于scale否则指标与官方约定不一致数据集的data_prefix中低分辨率目录如X2_sub/X8_subPairedRandomCrop的gt_patch_size可保持不变低分辨率 patch 尺寸会自动按scale换算。若需改变网络容量直接修改generator中的channels与kernel_sizes即可但必须保证channels长度为 4、kernel_sizes长度为 3否则会触发 srcnn_net.py 中的断言错误。6.2 从源码结构可推断的扩展思路将pixel_loss从L1Loss替换为MSELoss或加权的组合损失即可复现原论文使用的 MSE 目标原论文以 MSE 优化 PSNR当前仓库默认改用 L1SRCNNNet的forward在BaseEditModel框架内通过data_preprocessor完成归一化若替换数据集如灰度图需同时把channels[0]改为 1 并调整data_preprocessor的mean/std。七、总结SRCNN 以极轻量的三层卷积结构确立了深度学习超分辨率的基本范式MMagic 仓库以SRCNNNetBaseEditModel的形式完整落地了该算法并提供可直接复现的训练/测试配置configs/srcnn/srcnn_x4k915_1xb16-1000k_div2k.py与论文一致的网络实现mmagic/models/editors/srcnn/srcnn_net.py及配套单测tests/test_models/test_editors/test_srcnn/test_srcnn_net.py三个基准数据集上的官方指标Set5 28.4316 PSNR / 0.8099 SSIM 等与模型权重、日志。按照本文第二节的结构理解、第三节的配置拆解和第五节的命令流程你可以在一台 GPU 上完整复现 SRCNN 的 ×4 超分辨率训练与评测并将其作为对比基线或改造起点进一步探索更深、更宽的 SISR 架构。赞分享媒体生成计算机视觉深度学习人工智能大模型【免费下载链接】mmagicOpenMMLab Multimodal Advanced, Generative, and Intelligent Creation Toolbox. Unlock the magic : Generative-AI (AIGC), easy-to-use APIs, awsome model zoo, diffusion models, for text-to-image generation, image/video restoration/enhancement, etc.项目地址https://gitcode.com/gh_mirrors/mm/mmagic点击查看免费下载相关推荐MMagic 中的 SRGAN 图像超分辨率从论文原理到 4× 超分训练与评测实战MMagic 中的 SRGAN 图像超分辨率从论文原理到 4× 超分训练与评测实战 SRGANPhoto Realistic Single Image Su媒体生成计算机视觉深度学习人工智能大模型MMagic 中的 SRCNN 图像超分辨率模型原理、配置与训练测试实战指南MMagic 中的 SRCNN 图像超分辨率模型原理、配置与训练测试实战指南 导读 SRCNNSuper Resolution Convolutional媒体生成计算机视觉深度学习人工智能大模型MMagic 中 ESRGAN 图像超分辨率实战指南从 RRDB 生成器到相对论判别器训练MMagic 中 ESRGAN 图像超分辨率实战指南从 RRDB 生成器到相对论判别器训练 本文以 OpenMMLab 生成式 AI 工具箱 MMagic 仓媒体生成计算机视觉深度学习人工智能大模型上一篇RustOwl调试技巧解决分析结果与预期不符问题下一篇如何在3步内下载国家中小学智慧教育平台电子课本电子课本下载工具完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑