1. AIRNet模型概览:多任务图像修复的瑞士军刀
第一次看到AIRNet这个模型时,我脑海中浮现的是瑞士军刀的形象——一个工具解决多种问题。AIRNet全称All-In-One Image Restoration Network,顾名思义,它试图用单一网络结构应对多种图像修复任务,包括去噪、去雨、去雾等。不过在实际测试中,我发现它并非在所有任务上都表现完美,这点后面会详细分析。
这个模型最吸引我的地方是它的设计理念:通过batch内选择patch进行对比学习。简单来说,就是让模型在学习时自己比较图像的不同部分,从而理解什么是"好"的图像特征。这种自监督学习的方式减少了对外部标注数据的依赖,对于实际应用场景特别友好。
从架构上看,AIRNet主要由两大模块组成:CBDE(负责特征提取和对比学习)和DGRN(负责图像恢复)。这种分工明确的架构设计让代码结构非常清晰,我在阅读源码时能很快理解每个部分的功能。不过要注意的是,虽然论文宣称是"All-In-One",但实测下来在去噪任务上表现最好,去雨和去雾任务的效果相比专门的MPRNet还是稍逊一筹。
2. 核心代码结构解析:从输入到输出的技术之旅
2.1 模型骨架:AirNet类实现
打开model.py文件,首先看到的就是AirNet类的定义。这个类像是一个精密的流水线,把各个模块串联起来。我特别喜欢它的简洁性——只有两个主要组件:编码器E(CBDE模块)和恢复器R(DGRN模块)。
class AirNet(nn.Module):
def __init__(self, opt):
super(AirNet, self).__init__()
# Encoder
self.E = CBDE(opt) #编码特征值
# Restorer
self.R = DGRN(opt) #特征解码
forward函数的实现也很有讲究,训练和推理时走不同的分支。训练时需要计算对比损失,所以返回logits和labels;推理时则只需要恢复后的图像。这种设计既保证了训练效果,又优化了推理效率。
2.2 CBDE模块:对比学习的核心引擎
CBDE模块是AIRNet的灵魂所在,它基于MoCo(Momentum Contrast)框架实现对比学习。我花了些时间研究这段代码,发现它的精妙之处在于正负样本的处理方式。
class CBDE(nn.Module):
def __init__(self, opt):
super(CBDE, self).__init__()
dim = 256
self.E


428

被折叠的 条评论
为什么被折叠?



