ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

MMagic 中的 SRGAN 图像超分辨率:从论文原理到 4× 超分训练与评测实战

MMagic 中的 SRGAN 图像超分辨率:从论文原理到 4× 超分训练与评测实战 媒体生成计算机视觉深度学习人工智能大模型【免费下载链接】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点击查看免费下载SRGANPhoto-Realistic Single Image Super-Resolution Using a Generative Adversarial Network是图像超分辨率领域引入生成对抗网络的里程碑工作发表于 CVPR 2016。本文以 MMagic 仓库中 configs/srgan_resnet 的官方配置与实现为核心系统讲解 SRGAN 的算法原理、生成器/判别器网络结构、三类损失函数的设计细节并给出基于 DIV2K 数据集完成 4× 超分训练的完整配置解读与可复现的 CPU/单卡/多卡训练、测试命令。读完本文你将掌握如何在 MMagic 中从零训练并评测 SRGAN 及其预训练骨干 MSRResNet理解 PSNR/SSIM 指标与感知质量的取舍关系。一、算法背景为什么超分辨率需要 GAN传统的单图像超分辨率Single Image Super-Resolution, SISR方法依赖深度卷积网络最小化均方重建误差MSE。这类模型在 PSNR 等数值指标上表现优异但在大倍数放大时如 4×往往丢失高频纹理细节输出图像过平滑与真实高分辨率图像的观感不符。SRGAN 论文的核心观点是优化目标objective function的选择决定了超分结果的行为单纯以像素空间相似度为目标无法生成符合自然图像流形natural image manifold的纹理。SRGAN 因此提出用生成对抗网络框架来完成超分任务生成器Generator基于深层残差网络将低分辨率图像映射为高分辨率图像判别器Discriminator训练用于区分超分结果与真实高分辨率图像感知损失Perceptual Loss由对抗损失与内容损失组成内容损失在特征空间而非像素空间度量感知相似性对抗损失将生成结果推向自然图像流形。论文通过大规模平均意见得分MOS测试表明SRGAN 生成的图像在感知质量上显著优于当时的 SOTA 方法其 MOS 得分更接近原始高分辨率图像。这也是感知质量与PSNR 数值并不总是同向变化的经典案例在 MMagic 的官方结果表中SRGAN 的 PSNR 反而低于纯 L1 训练的 MSRResNet但视觉纹理更真实详见第五节结果对比。二、网络架构MSRResNet 生成器与 ModifiedVGG 判别器MMagic 将 SRGAN 拆分为三个可独立构建的模块注册在mmagic.models.editors.srgan包下模块类名源码位置生成器MSRResNetmmagic/models/editors/srgan/sr_resnet.py判别器ModifiedVGGmmagic/models/editors/srgan/modified_vgg.py顶层模型SRGANmmagic/models/editors/srgan/srgan.py2.1 MSRResNet无 BN 的紧凑残差生成器MSRResNet是论文中 SRResNet 的紧凑改进版类注释明确说明它去掉了残差块中的 BatchNorm与 EDSR 类似并支持 x2、x3、x4 三种放大倍率见_supported_upscale_factors [2, 3, 4]。其前向流程sr_resnet.py为conv_first3×3 卷积将输入3 通道升维到mid_channels默认 64接 LeakyReLUnegative_slope0.1trunk_net由make_layer(ResidualBlockNoBN, num_blocks, ...)堆叠num_blocks默认 16个无 BN 残差块作为主干上采样分支放大倍率 x4 时级联两个PixelShufflePack各 2×x2/x3 时使用单个对应倍率的 PixelShuffle 模块conv_hrconv_last3×3 卷积恢复输出通道全局残差连接输入x经img_upsampler双线性上采样到目标尺寸后与主干输出相加构成典型的先上采样、再残差增强结构。关键配置参数如下均取自 msrresnet_x4c64b16_1xb16-1000k_div2k.py参数默认值含义in_channels3输入通道数RGBout_channels3输出通道数RGBmid_channels64主干中间特征通道数num_blocks16主干残差块数量upscale_factor4放大倍率仅支持 2/3/42.2 ModifiedVGG面向 128×128 输入的判别器ModifiedVGGmodified_vgg.py是一个针对输入尺寸128×128设计的 VGG 风格判别器前向入口处有assert x.size(2) 128的尺寸校验也被 ESRGAN 复用。其结构为五段下采样卷积每段由 3×3 卷积与 4×4 步长 2 卷积交替构成通道数从mid_channels64逐段翻倍至 8 倍每层卷积后接 BatchNorm 与 LeakyReLUnegative_slope0.2最终特征图下采样到 4×4 后展平经两个全连接层mid_channels*8*4*4 → 100 → 1输出标量判别得分。测试用例 test_modified_vgg.py 对其前向传播进行了验证。三、损失函数像素损失 感知损失 对抗损失SRGAN 的训练目标由三类损失加权组合而成在 srgan_x4c64b16_1xb16-1000k_div2k.py 中配置如下model dict( typeSRGAN, generatordict( typeMSRResNet, in_channels3, out_channels3, mid_channels64, num_blocks16, upscale_factorscale), discriminatordict(typeModifiedVGG, in_channels3, mid_channels64), pixel_lossdict(typeL1Loss, loss_weight1e-2, reductionmean), perceptual_lossdict( typePerceptualLoss, layer_weights{34: 1.0}, vgg_typevgg19, perceptual_weight1.0, style_weight0, norm_imgFalse), gan_lossdict( typeGANLoss, gan_typevanilla, loss_weight5e-3, real_label_val1.0, fake_label_val0), train_cfgdict(), test_cfgdict(), data_preprocessordict( typeDataPreprocessor, mean[0., 0., 0.], std[255., 255., 255.]))损失类型权重作用pixel_lossL1Loss1e-2在像素空间约束重建保真度防止 GAN 训练导致结构漂移perceptual_lossPerceptualLoss1.0取 vgg19 第 34 层layer_weights{34: 1.0}特征计算感知相似度style_weight0表示不启用风格损失gan_lossGANLossvanilla 交叉熵型5e-3对抗损失real_label_val1.0、fake_label_val0定义真假标签对应实现类为PerceptualLossmmagic/models/losses/perceptual_loss.py与GANLossmmagic/models/losses/gan_loss.py均通过MODELS注册表按配置字符串构建。3.1 对抗训练的调度逻辑源码级顶层模型SRGANsrgan.py继承BaseEditModel其train_step实现了一套典型的 GAN 交替训练流程srgan.py生成器步g_step_with_optim中先关闭判别器梯度set_requires_grad(self.discriminator, False)计算loss_pix、loss_perceptual与生成器侧对抗损失loss_gan随后更新生成器参数判别器步d_step_with_optim分别对真实图d_step_real与生成图d_step_fake输入已detach()计算loss_d_real与loss_d_fake累加梯度后更新判别器train_cfg支持disc_steps、disc_repeat、disc_init_steps等参数控制判别器更新节奏默认均为 1/0。单元测试 test_srgan.py 以 32×32 输入、128×128 GT 的小规模配置跑通完整train_step并断言日志中同时包含loss_gan / loss_pix / loss_perceptual / loss_d_real / loss_d_fake五个损失项——这恰好印证了上述三类损失 判别器双步的完整训练链路。四、配置文件深度解读两阶段训练策略MMagic 为 SRGAN 提供两个配套配置形成先训 MSE 骨干、再训 GAN的两阶段策略4.1 第一阶段MSRResNet纯像素损失预训练msrresnet_x4c64b16_1xb16-1000k_div2k.py 继承../_base_/default_runtime.py与../_base_/datasets/sisr_x4_test_config.py即仓库根目录 configs/base/default_runtime.py 与 mmagic/configs/base/datasets/sisr_x4_test_config.py模型为BaseEditModelMSRResNet仅使用L1Lossloss_weight1.0。核心训练设定数据管道PairedRandomCrop(gt_patch_size128)随机裁剪 128×128 GT 块配合 0.5 概率的水平/垂直翻转与RandomTransposeHW数据增强训练集BasicImageDataset读取data/DIV2K下的DIV2K_train_LR_bicubic/X4_subLR与DIV2K_train_HR_subGT标注文件为meta_info_DIV2K800sub_GT.txtbatch_size16、num_workers8验证集Set14LRbicx4/GTmod12每 5000 iter 验证一次优化器Adamlr2e-4betas(0.9, 0.999)学习率调度CosineRestartLR四个 250k 周期eta_min1e-7训练轮数IterBasedTrainLoopmax_iters1,000,000CheckpointHook 每 5000 iter 保存一次save_optimizerTrue。4.2 第二阶段SRGANGAN 微调srgan_x4c64b16_1xb16-1000k_div2k.py 直接以_base_ ./msrresnet_x4c64b16_1xb16-1000k_div2k.py继承全部数据/运行时配置只覆盖 GAN 相关部分模型换成SRGAN新增判别器与三类损失见第三节优化器改为MultiOptimWrapperConstructor为生成器与判别器分别维护 Adamlr 均降至 1e-4学习率调度改为MultiStepLRby_epochFalsemilestones[50000, 100000, 200000, 300000]gamma0.5总迭代数缩短为 400,000配置中保留了注释掉的load_from权重链接——即推荐加载第一阶段 MSRResNet 的预训练权重作为生成器初始化这是获得稳定 GAN 训练的关键实践模型并行包装使用MMSeparateDistributedDataParallel以支持生成器与判别器独立梯度同步。五、结果与模型库官方评测官方结果在 RGB 通道上评测评估前会裁剪每个边界scale像素即 4 像素指标为 PSNR / SSIM测试集由 Set5、Set14、DIV2K 组成多测试集评测配置见 sisr_x4_test_config.pyPSNR/SSIM 均设置crop_border4模型Set5Set14DIV2K训练资源msrresnet_x4c64b16_1xb16-1000k_div2k30.2252 / 0.849126.7762 / 0.736928.9748 / 0.81781 GPUsrgan_x4c64b16_1xb16-1000k_div2k27.9499 / 0.784624.7383 / 0.649126.5697 / 0.73651 GPU观察GAN 版本的 PSNR/SSIM 全面低于纯 L1 版本但按论文 MOS 实验的结论其感知纹理质量更接近真实高分辨率图像——这正是以感知损失换数值指标的 SRGAN 设计取向。模型清单、权重与评测结果的机器可读记录位于 configs/srgan_resnet/metafile.yml对应权重文件可通过表格中 Download 列的官方链接download.openmmlab.com/mmediting/restorers/srresnet_srgan/下的.pth文件获取训练日志.log.json同样可下载复现。六、数据准备训练依赖 DIV2K 数据集。按官方数据集转换流程需将原始 DIV2K 组织为如下目录结构data_root datadata/DIV2K/ ├── DIV2K_train_LR_bicubic/X4_sub/ # 训练 LR4× 双三次下采样 ├── DIV2K_train_HR_sub/ # 训练 GT └── meta_info_DIV2K800sub_GT.txt # 训练标注文件 data/Set14/ ├── LRbicx4/ # 验证 LR └── GTmod12/ # 验证 GTDIV2K 的转换脚本与说明位于 tools/dataset_converters/div2k。Set5/Set14 验证集按相同LRbicx4/GTmod12命名约定放置即可。七、训练命令CPU / 单卡 / 多卡以 SRGAN 完整配置为例三种运行方式如下命令取自原文档并保持原样# CPU 训练 CUDA_VISIBLE_DEVICES-1 python tools/train.py configs/srgan_resnet/srgan_x4c64b16_1xb16-1000k_div2k.py # 单卡训练 python tools/train.py configs/srgan_resnet/srgan_x4c64b16_1xb16-1000k_div2k.py # 多卡训练8 卡分布式 ./tools/dist_train.sh configs/srgan_resnet/srgan_x4c64b16_1xb16-1000k_div2k.py 8tools/train.py与tools/dist_train.sh位于仓库根目录 toolsCPU 训练通过CUDA_VISIBLE_DEVICES-1禁用 GPU训练输出checkpoint、日志默认写入配置中work_dir指定的./work_dirs/{experiment_name}更完整的训练流程说明含 checkpoint 恢复、断点续训等可参考 docs/en/user_guides/train_test.md 中Train a model一节。八、测试与评测命令加载官方预训练权重进行评测# CPU 测试 CUDA_VISIBLE_DEVICES-1 python tools/test.py configs/srgan_resnet/srgan_x4c64b16_1xb16-1000k_div2k.py https://download.openmmlab.com/mmediting/restorers/srresnet_srgan/srgan_x4c64b16_1x16_1000k_div2k_20200606-a1f0810e.pth # 单卡测试 python tools/test.py configs/srgan_resnet/srgan_x4c64b16_1xb16-1000k_div2k.py https://download.openmmlab.com/mmediting/restorers/srresnet_srgan/srgan_x4c64b16_1x16_1000k_div2k_20200606-a1f0810e.pth # 多卡测试 ./tools/dist_test.sh configs/srgan_resnet/srgan_x4c64b16_1xb16-1000k_div2k.py https://download.openmmlab.com/mmediting/restorers/srresnet_srgan/srgan_x4c64b16_1x16_1000k_div2k_20200606-a1f0810e.pth 8测试时配置会自动加载 sisr_x4_test_config.py 中定义的 Set5、Set14、DIV2K 三个测试集及对应 PSNR/SSIM 评测器最终输出带Set5/Set14/DIV2K前缀的指标结果。若希望将本仓库训练出的权重用于推理可参考 demo/mmagic_inference_demo.py 的推理示例Test a pre-trained model的完整说明见 docs/en/user_guides/train_test.md。九、引用inproceedings{ledig2016photo, title{Photo-realistic single image super-resolution using a generative adversarial network}, author{Ledig, Christian and Theis, Lucas and Husz{\a}r, Ferenc and Caballero, Jose and Cunningham, Andrew and Acosta, Alejandro and Aitken, Andrew and Tejani, Alykhan and Totz, Johannes and Wang, Zehan}, booktitle{Proceedings of the IEEE conference on computer vision and pattern recognition workshops}, year{2016} }小结SRGAN 是以感知质量为目标的超分范式开创者。在 MMagic 中你可以通过 configs/srgan_resnet 下的两个配置文件完整体验L1 预训练骨干 → GAN 微调的标准流程第一阶段用 msrresnet_x4c64b16_1xb16-1000k_div2k.py 拿到高 PSNR 基线第二阶段用 srgan_x4c64b16_1xb16-1000k_div2k.py 引入判别器与感知损失换取真实纹理。理解MSRResNet、ModifiedVGG与SRGAN三个注册模块的实现mmagic/models/editors/srgan即可在此基础上自由调整损失权重、判别器节奏或更换骨干将其迁移到自己的超分数据集上。赞分享媒体生成计算机视觉深度学习人工智能大模型【免费下载链接】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 图像超分辨率配置解析、源码原理与训练测试全指南MMagic 中的 SRGAN 图像超分辨率配置解析、源码原理与训练测试全指南 SRGANPhoto Realistic Single Image Supe媒体生成计算机视觉深度学习人工智能大模型PaddleOCR Text Gestalt 文本图像超分辨率算法从论文原理到训练、评估与推理部署实战PaddleOCR Text Gestalt 文本图像超分辨率算法从论文原理到训练、评估与推理部署实战 Text Gestalt 是 PaddleOCR 在人工智能计算机视觉深度学习MMagic 中的 EDSR 图像超分辨率模型架构原理、配置解析与训练测试实战MMagic 中的 EDSR 图像超分辨率模型架构原理、配置解析与训练测试实战 本篇技术指南围绕 OpenMMLab 多模态生成工具箱 MMagic 中内置的媒体生成计算机视觉深度学习人工智能大模型上一篇php-amqplib安全配置指南SSL/TLS加密与认证机制终极教程下一篇【亲测免费】 折叠搜寻 Foldseek高效蛋白质结构比对的利器创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表