news 2026/9/28 6:41:03

MMagic 中的 DIC:基于迭代协作机制的人脸 8 倍超分辨率算法实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MMagic 中的 DIC:基于迭代协作机制的人脸 8 倍超分辨率算法实战指南
  • 媒体生成
  • 计算机视觉
  • 深度学习
  • 人工智能
  • 大模型

【免费下载链接】mmagic

OpenMMLab 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
点击查看免费下载

本文聚焦 OpenMMLab 生成式视觉工具箱 MMagic 中的人脸超分辨率算法 DIC(CVPR'2020),从论文思想、网络结构、配置文件到训练与测试命令,结合仓库源码给出完整的实战级解析。读完本文,你将掌握如何在 MMagic 中复现 DIC / DICGAN 在 CelebA-HQ 上的人脸 8× 超分实验,并理解"恢复分支与关键点估计分支迭代协作"这一核心机制的代码实现。

任务背景与算法定位

DIC(Deep face super-resolution with Iterative Collaboration between Attentive Recovery and Landmark Estimation)发表于 CVPR 2020,属于**图像超分辨率(Image Super-Resolution)**任务,其核心目标是解决严重退化的人脸图像的 8 倍超分辨率问题。在 MMagic 中,它被收录于 configs/dic 目录,相关文档为 configs/dic/README_zh-CN.md。

早期基于深度学习与人脸先验的超分方法存在一个共同缺陷:人脸先验(如关键点 landmark、部件图 component map)通常是由低分辨率或粗糙超分结果估计得到的,先验本身不够准确,进而限制了恢复效果。DIC 的解决思路是让两条循环网络迭代协作:

  • 恢复分支:负责人脸图像重建,在每一步利用关键点先验生成更高质量的图像;
  • 关键点估计分支:以当前恢复结果估计更准确的人脸关键点,反过来又提升下一轮恢复质量。

两个过程相互促进、逐步提升,形成"恢复 → 关键点估计 → 更好恢复"的正向循环。此外,论文设计了一个注意力融合模块(Attentive Fusion Module),将面部各部件分别生成后按注意力聚合,强化 landmark 热图对人脸恢复的引导作用。

引用信息(论文 BibTeX)见 configs/dic/README.md:

@inproceedings{ma2020deep, title={Deep face super-resolution with iterative collaboration between attentive recovery and landmark estimation}, author={Ma, Cheng and Jiang, Zhenyu and Rao, Yongming and Lu, Jiwen and Zhou, Jie}, booktitle={Proceedings of the IEEE/CVF conference on computer vision and pattern recognition}, pages={5569--5578}, year={2020} }

网络结构源码解析:迭代协作如何落地

MMagic 中 DIC 的完整实现位于 mmagic/models/editors/dic,共包含 5 个源文件。整个模型由生成器DICNet与可选判别器LightCNN组成,整体算法封装在DIC类中。

DIC 算法类:多损失协同训练

DIC 继承自 SRGAN,注册名为DIC,其关键设计包括:

  • 像素损失(pixel_loss):对生成器输出的每一迭代步 SR 结果计算与 GT 的 L1 损失;
  • 对齐损失(align_loss):对每一迭代步估计出的关键点热图与 GT 热图计算 MSE 损失;
  • 特征损失(feature_loss):可选,使用预训练 LightCNN 提取特征计算感知损失;
  • GAN 损失(gan_loss):可选,配合 LightCNN 判别器构成对抗训练。

从 dic.py 可以看到,模型通过train_cfg.pixel_init控制"纯像素训练"的迭代步数:当self.step_counter >= self.pixel_init时才启用特征损失与 GAN 损失。训练流程中判别器以disc_repeat指定的次数重复更新(见 dic.py)。

DICNet 生成器:反馈块 + 沙漏网络

DICNet 是生成器主体,注册名为DICNet。其前向过程体现了"迭代协作"的具体形态(见 dic_net.py):

  1. 输入低分辨率图像先经conv_first(3×3 卷积 + PReLU + PixelShuffle 2×)放大特征;
  2. 进入num_steps(默认 4)次迭代循环:
    • 第一步由first_block(FeedbackBlockCustom)提取初始特征;
    • 后续每一步由FeedbackBlockHeatmapAttention结合上一步估计的人脸热图进行注意力融合恢复;
    • 每步恢复结果经conv_last(转置卷积 + PReLU + 3×3 卷积)输出 SR 图像,并与双线性插值的中间结果相加(残差式输出);
    • 随后由FeedbackHourglass沙漏网络从 SR 图像估计 68 点人脸关键点热图,输出又作为下一步的引导;
  3. 返回所有迭代步的sr_outputs与heatmap_outputs列表,训练时每一层都参与损失计算。

关键子模块:

  • FeedbackBlock / FeedbackBlockCustom:反馈块,结构为"模块输出回传给模块输入"的循环样式,通过维护last_hidden隐状态实现跨迭代的信息复用;
  • FeatureHeatmapFusingBlock:注意力融合模块,将特征按热图通道分组,对热图做 softmax 后加权聚合面部各部件(见 dic_net.py);
  • FeedbackHourglass:带反馈连接的沙漏网络,用于人脸关键点估计。其输出热图被切分为两部分——前半用于生成 heatmap,后半作为 feedback 回传(见 feedback_hour_glass.py)。

值得注意的是 reduce_to_five_heatmaps:DIC 利用人脸关键点做超分,而不同数据集的关键点数量不同。该函数将原始关键点热图(如 68 点)归一化并聚合成 5 张热图,分别对应左眼、右眼、鼻子、嘴、人脸轮廓,统一后送入注意力融合模块。

LightCNN 判别器:MaxFeature 结构

DICGAN 使用LightCNN作为判别器(输入尺寸 128×128)。它采用MaxFeature基础单元:卷积输出双倍通道后切分,逐元素取最大值,形成判别力更强的特征选择器。分类头最终输出 1 维真假分数。此外,预训练的 LightCNN 权重(light_cnn_feature.pth)也作为LightCNNFeatureLoss的特征提取器,构成感知/特征损失。

配置文件深度解读:两种训练范式

MMagic 为 DIC 提供两套开箱即用的配置,均针对 CelebA-HQ 数据集、8 倍放大:

1. dic_x8c48b6_4xb2-150k_celeba-hq.py(纯回归版本)

配置文件为 configs/dic/dic_x8c48b6_4xb2-150k_celeba-hq.py,继承../_base_/default_runtime.py。核心要点:

配置项取值说明
generatorDICNet, in_channels=3, out_channels=3, mid_channels=48生成器通道数 48
pixel_lossL1Loss, loss_weight=1.0像素 L1 损失
align_lossMSELoss, loss_weight=0.1关键点热图对齐损失
train_cfgIterBasedTrainLoop, max_iters=150_000, val_interval=2000迭代式训练
optim_wrapperAdam, lr=1e-4生成器优化器
param_schedulerMultiStepLR, milestones=[10000,20000,40000,80000], gamma=0.5阶梯式学习率衰减
val_evaluatorMAE / PSNR / SSIM, crop_border=scale评估指标

该版本仅含像素损失与对齐损失,不包含判别器与 GAN 相关配置。

2. dic_gan-x8c48b6_4xb2-500k_celeba-hq.py(GAN 版本)

配置文件为 configs/dic/dic_gan-x8c48b6_4xb2-500k_celeba-hq.py,继承上一配置并在其基础上叠加对抗训练:

  • 增加判别器LightCNN(in_channels=3);
  • 增加feature_loss=LightCNNFeatureLoss(使用预训练light_cnn_feature.pth,loss_weight=0.1,criterion='l1');
  • 增加gan_loss=GANLoss(gan_type='vanilla', loss_weight=0.005);
  • train_cfg中设置pixel_init=10000(前 10000 迭代仅训练像素/对齐损失)、disc_repeat=2(判别器每步更新 2 次);
  • 采用MMSeparateDistributedDataParallel包装,生成器与判别器使用分离优化器:生成器 Adam lr=1e-4,判别器 Adam lr=1e-5;
  • 训练迭代数提升到 500_000,milestones 调整为 [100000, 200000, 300000, 400000]。

此外,两套配置均设置data_preprocessor的均值为[129.795, 108.12, 96.39]、标准差为[255, 255, 255],用于输入归一化。

数据流水线与数据集准备

以 configs/dic/dic_x8c48b6_4xb2-150k_celeba-hq.py 中的训练流水线为例,数据处理包含三个关键环节:

  1. 加载与缩放:LoadImageFromFile加载 RGB 彩色 GT 图,随后Resize到 128×128;
  2. 退化模拟:再次Resize按1/8比例缩小并保持宽高比,输出键img,得到低分辨率输入(16×16 级);
  3. 关键点热图生成:GenerateFacialHeatmap以 GT 图为基准,在 32×32 分辨率下生成高斯热图(sigma=1.0),作为对齐损失的监督信号。

验证与测试流水线(valid_pipeline/test_pipeline)不生成热图,仅做加载与缩放;inference_pipeline面向推理,直接以img为输入键。数据集类型为BasicImageDataset,训练/验证分别指向data/CelebA-HQ下的train_256/all_256与test_256/all_256,batch_size=2(4 GPU 下等效 8)。

需要特别说明:训练集必须包含关键点标注,因为训练流水线中的GenerateFacialHeatmap需要 GT 人脸关键点来合成热图标签。因此复现时需准备带关键点标注的 CelebA-HQ 数据。

快速开始:训练与测试

以下命令与官方文档 configs/dic/README_zh-CN.md 保持一致,完整训练/测试细节可进一步参考 docs/zh_cn/user_guides/train_test.md。

训练

# CPU 上训练 CUDA_VISIBLE_DEVICES=-1 python tools/train.py configs/dic/dic_gan-x8c48b6_4xb2-500k_celeba-hq.py # 单个 GPU 上训练 python tools/train.py configs/dic/dic_gan-x8c48b6_4xb2-500k_celeba-hq.py # 多个 GPU 上训练(以 8 卡为例) ./tools/dist_train.sh configs/dic/dic_gan-x8c48b6_4xb2-500k_celeba-hq.py 8

其中tools/train.py与tools/dist_train.sh位于仓库根目录 tools 下。训练产出与日志保存在配置指定的work_dirs/dic_gan-x8c48b6_4xb2-500k_celeba-hq目录。

测试

# CPU 上测试 CUDA_VISIBLE_DEVICES=-1 python tools/test.py configs/dic/dic_gan-x8c48b6_4xb2-500k_celeba-hq.py https://download.openmmlab.com/mmediting/restorers/dic/dic_gan_x8c48b6_g4_500k_CelebAHQ_20210625-3b89a358.pth # 单个 GPU 上测试 python tools/test.py configs/dic/dic_gan-x8c48b6_4xb2-500k_celeba-hq.py https://download.openmmlab.com/mmediting/restorers/dic/dic_gan_x8c48b6_g4_500k_CelebAHQ_20210625-3b89a358.pth # 多个 GPU 上测试 ./tools/dist_test.sh configs/dic/dic_gan-x8c48b6_4xb2-500k_celeba-hq.py https://download.openmmlab.com/mmediting/restorers/dic/dic_gan_x8c48b6_g4_500k_CelebAHQ_20210625-3b89a358.pth 8

测试时通过 URL 直接指定预训练权重,MMagic 会自动下载。若需测试非 GAN 版本模型dic_x8c48b6_g4_150k_CelebAHQ,将配置与权重替换为对应文件即可(权重与日志见下表下载列)。

评估协议与官方结果

官方评估协议(见 configs/dic/README_zh-CN.md):

  • 在RGB 通道上评估,评估前裁剪图像每个边界的scale(即 8)像素;
  • 使用PSNR和SSIM作为指标,这与配置中val_evaluator的crop_border=scale设置一致;
  • 训练资源:4 块 Tesla PG503-216 GPU。

两个模型的官方结果如下:

算法scaleCelebA-HQ PSNR / SSIMGPU 信息下载
dic_x8c48b6_g4_150k_CelebAHQx825.2319 / 0.74224 (Tesla PG503-216)模型 | 日志
dic_gan_x8c48b6_g4_500k_CelebAHQx823.6241 / 0.67214 (Tesla PG503-216)模型 | 日志

需要留意两点官方说明:

  1. 纯回归版本dic_x8c48b6_g4_150k_CelebAHQ的 PSNR/SSIM 更高,GAN 版本追求视觉真实感,因此像素级指标反而略低,这与 GAN 超分的普遍规律一致;
  2. 在dic_gan_x8c48b6_g4_150k_CelebAHQ的日志数据中,DICGAN 仅在 CelebA-HQ 测试集前 9 张图片上验证,因此表中 PSNR/SSIM 与日志中的数值不同。

小结

DIC 是 MMagic 中人脸超分辨率方向的重要基线算法,其"迭代协作 + 注意力融合"的设计在 mmagic/models/editors/dic 中有完整且可读的实现。通过两套官方配置,你可以快速复现从纯回归到 GAN 对抗两种训练范式;借助GenerateFacialHeatmap数据流水线、DICNet的多步迭代结构与LightCNN判别器,可以深入理解人脸先验引导超分的完整链路。若需将 DIC 用于自定义数据集或调整放大倍数,可在配置中修改scale、mid_channels、num_steps等关键参数,并同步调整数据流水线中的缩放比例与评估器的crop_border。

  • 媒体生成
  • 计算机视觉
  • 深度学习
  • 人工智能
  • 大模型

【免费下载链接】mmagic

OpenMMLab 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
点击查看免费下载

相关推荐

上一篇:Supabase-CSharp与其他后端服务的对比:为什么选择它?
下一篇:Yew迭代器:Rust Web应用中集合处理和转换的终极指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/28 6:40:35

ARIMAX多变量预测模型实战:原理、源码与参数调优

简介:基于ARIMAX的多变量预测模型源码与配套数据,面向具备一定Python与统计基础的数据分析学习者,用于在销量预测、经济指标分析等场景中掌握带外生变量的时间序列建模方法。ARIMAX模型在经典时间序列模型基础上引入外生变量,能够…

作者头像 李华
网站建设 2026/9/28 6:40:14

第三方登录实战:OAuth 2.0授权码模式与微信/GitHub接入全解析

第三方登录这活儿,看着简单,不就是“点一下微信图标,扫码,进来”嘛。可真自己动手做一遍,从开放平台注册、回调地址配置、签名算法、到用户体系绑定、登录态维持,一环扣一环,坑多到你怀疑人生。…

作者头像 李华
网站建设 2026/9/28 6:39:38

ax:面向AI Agent的Kubernetes原生gRPC运行时底座

1. 项目概述:从一个极简标题“ax”出发,我们到底在讨论什么?刚看到这个标题“ax”,第一反应是——这真的能算一个项目吗?连空格都没有,比Linux命令行里最短的ls还少一个字母。但恰恰是这种极简命名&#xf…

作者头像 李华
网站建设 2026/9/28 6:39:26

Univer开源实践:自托管Web表格与协作办公集成指南

做 Web 表格产品多年,我一直觉得市面上的几套方案各有利弊。有的功能强但重量级、定制困难,有的轻便但协作和公式能力太弱,想要一套能自托管、能按业务一点点扩展的“办公三件套”几乎得从零造轮子。直到后来我认真研究并试用了开源项目 Univ…

作者头像 李华
网站建设 2026/9/28 6:39:26

数字孪生落地制造:从透明工厂到全流程智能管控实践

1. 从“黑箱”到“透明工厂”:我在制造数字化一线看到的真正痛点1.1 所谓的“黑箱”到底黑在哪里在制造行业摸爬滚打这么多年,我听到最多的一个词就是“黑箱”。很多老板说工厂是黑箱,但问他们黑在哪个环节,往往说不清。根据我个人…

作者头像 李华