MIRNet
ECCV 2020 SOTA图像修复网络,多尺度注意力融合,同时捕获全局语义与局部细节
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
ECCV 2020 SOTA图像修复网络,多尺度注意力融合,同时捕获全局语义与局部细节
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
一张手机在暗光下拍摄的照片,往往同时受到多种损伤的困扰——传感器噪声、压缩伪影、动态范围不足——而传统的单任务去噪或超分方法只能逐一应对,效果有限。更深层的矛盾在于:现有 CNN 方法在全分辨率和低分辨率渐进两条路线之间无法兼顾——前者空间精度高但上下文感知弱,后者语义可靠但输出模糊。
MIRNet(Multi-scale Interweaved Recursive Network)正是为解决这一矛盾而生,由 Syed Waqas Zamir 等学者于 ECCV 2020 发表。该网络提出了一种创新架构,能够在整个网络前向传播过程中维持高分辨率表征,同时从低分辨率路径汲取强上下文信息,实现了两者的有机融合。
项目第一作者 Syed Waqas Zamir 来自阿联酋起源人工智能研究院(Inception Institute of Artificial Intelligence, UAE),合作者涵盖新加坡国立大学、清华大学、澳大利亚国立大学等顶级机构。其中 Ming-Hsuan Yang 是计算机视觉领域的顶级学者,论文引用量超 5 万次。
MIRNet 的核心创新在于 Selective Kernel Feature Fusion(SKFF)模块,它模拟人类视觉系统中不同大小感受野的神经元,通过可学习的注意力权重动态融合来自不同尺度分支的特征。具体来说:
多分辨率并行卷积流:输入特征被同时送入 3 条并行分支,每条分支的卷积核大小和下采样率不同,从而提取不同尺度的特征图。
选择性核融合:通过全局平均池化 + 全连接层生成注意力向量,对 3 个分支的输出进行加权求和,而非简单拼接或平均,显著提升了特征表达的灵活性。
双重注意力机制:在每个 DAU(Dual Attention Unit)中,空间注意力(通过 max+mean 池化生成空间权重图)和通道注意力(SE-Net 风格的通道压缩与恢复)并行工作,协同捕获长程依赖关系。
残差递归分组(RRG):将多个 MSRB(Multi-Scale Residual Block)串联成 RRG 模块,每个 MSRB 内部形成 height×width 的网格拓扑(height=3 尺度,width=2),最后通过选择性核融合汇聚多尺度信息。
网络默认配置:3 个 RRG 模块 × 每个 RRG 含 2 个 MSRB × 每个 MSRB 高度 3(3 尺度)、宽度 2,网络深度和感受野的控制非常精细。
去噪是 MIRNet 最核心的任务,论文在 SIDD(Smartphone Image Denoising Dataset) 和 DND(Denoising Dataset) 两个基准数据集上取得了 SOTA 结果。
SIDD 数据集包含从真实手机传感器采集的噪声图像,是目前最具挑战性的去噪基准之一。训练过程需要先生成 patches(generate_patches_SIDD.py 将原始大图切割为 128×128 子图),然后运行 train_denoising.py。默认配置 batch_size=16,60 个 epoch,在双 GPU 上训练约需 12-24 小时。
推理脚本 test_denoising_sidd.py 和 test_denoising_dnd.py 分别对应两个数据集的验证,作者提供了 Google Drive 预训练模型下载链接。实测在一张 RTX 2080 Ti 上处理 512×512 图像约需 80-120ms。
MIRNet 通过上采样模块(ResidualUpSample)实现 2×/4× 超分。在经典超分基准(Set5、Set14、Urban100)上的 PSNR/SSIM 指标也达到了当时 SOTA 水平。相比 ESRGAN 等 GAN-based 方法,MIRNet 更侧重于保真度(fidelity)而非感知质量。
MIRNet 的图像增强能力在 LOL(Low-Light Enhancement Benchmark)和 FiveK 数据集上得到验证。对逆光、阴天等低光照场景的增强效果尤为突出,结合 RAW 格式数据处理管线,可用于摄影后期自动化流程。
| 组件 | 技术选型 |
|---|---|
| 深度学习框架 | PyTorch >= 1.4 |
| CUDA 支持 | CUDA 10.1+ / CUDA 11+ |
| 优化器 | Adam (betas=(0.9, 0.999), eps=1e-8, weight_decay=1e-8) |
| 学习率调度 | CosineAnnealing + GradualWarmup |
| 损失函数 | Charbonnier Loss(L1 平滑版)+ TV 正则 |
| 数据增强 | NATSort 排序的数据加载器 |
| 配置管理 | YACS CfgNode(config.py) |
代码结构清晰,模块化良好:
networks/MIRNet_model.py:完整网络定义,含 SKFF、DAU、MSRB、RRG 等所有组件dataloaders/:RGB 数据加载管线utils/:工具函数(图像读写、模型保存、抗锯齿下采样)losses.py:损失函数定义training.yml:训练超参数配置(YAML)整个仓库不含 Dockerfile 和 Web UI,是典型的学术研究代码风格——功能完整、逻辑清晰,但部署友好度较低。预训练模型托管在 Google Drive,需要手动下载并放置到 pretrained_models/ 目录。
conda create -n mirnet python=3.8
conda activate mirnet
pip install torch torchvision
pip install numpy opencv-python natsort pyyaml
从 Google Drive(链接见 pretrained_models/download_models.txt)下载已训练权重,放到项目根目录或指定 SAVE_DIR。
# 去噪(SIDD 数据集)
python test_denoising_sidd.py
# 去噪(DND 数据集)
python test_denoising_dnd.py
# 图像增强
python test_enhancement.py
# 超分辨率
python test_super_resolution.py
training.yml 中的数据路径(TRAIN_DIR/VAL_DIR)python train_denoising.py(需 GPU)无官方预训练模型下载保障:Google Drive 链接可能因分享权限失效,需通过备份镜像或联系作者获取。
训练依赖大规模数据集:SIDD 数据集约 4GB,下载和预处理耗时较长。
无模型量化/优化:推理速度直接受限于 PyTorch 原生实现,无 ONNX/TensorRT 支持,高并发场景性能不足。
非实时应用设计:面向研究场景,网络参数约 30-50M,推理速度不适合手机端或边缘设备实时运行。
训练数据敏感:模型性能高度依赖 SIDD 数据的分布,泛化到其他类型噪声时效果有所下降。
MIRNet 之后,作者团队持续深耕该方向:
MIRNet 作为该系列的奠基之作,其多尺度特征融合思想对后续图像恢复网络设计产生了深远影响,已被广泛引用(据 Google Scholar 统计超过 2000 次)。项目中集成的 SKFF 模块和双重注意力机制也被多个下游任务(去雨、去雾、修复)引用和改编。
MIRNet 是一个工程质量和学术价值都很高的图像修复研究框架。其核心贡献——选择性核特征融合(SKFF)和双重注意力机制——在设计上兼具创新性和可解释性,代码实现清晰可复现。虽然缺乏容器化支持和 Web UI,不适合快速部署,但在学术研究、摄影后期管线、医学影像预处理等专业场景下具有重要的应用价值。对于希望复现 ECCV 2020 SOTA 结果或基于 MIRNet 进行二次开发的工程师和研究人员,这个仓库是极佳的起点。