DID-MDN
去雨任务面临的一个挑战是,图像中雨的密度是不同的。现有模型未能考虑多种形状,大小,密度的雨,只能处理特定类型的雨。该论文的主要贡献是提出了一个多流密集网络(multi-stream dense network),让网络自动掌握雨密度信息,在该信息的指导下去除不同密度的雨,并构建了一个包含三种雨密度(小,中,大)的图像的数据集。
模型
论文提出的方法进行去雨有两个阶段:估计雨密度(分类)和去除雨线。
y
=
x
+
r
y = x + r
y=x+r,r即为我们需要估计的雨特征。
- 多流密集连接网络
提取特征部分,得到r - 预估的r作为分类器的输入,经过残差特征提取和分类
模型主要分为残差感知密度分类器和多流密集连接网络两个部分。
-
残差感知密度分类器
残差可以更好的表征特征,快速决定密度级别。这个部分提取图像特征后通过一个分类器对雨线进行密度分级,将密度信息加入到多流密集连接网络中进行残差估计和雨线去除。
损失函数如下,第一项表示残差信息像素的欧式距离,第二项表示交叉熵
-
多流密集连接网络
小雨能被有小感知野的卷积核捕捉,大雨能被具有大感知野的卷积核捕捉,因此将不同层级的特征组合在一起,更好地表征图像中的物体及其附近情况。
损失函数如下,第一项表示与残差信息像素之间的欧式距离,第二项表示与去雨图像之间的欧氏距离,第三项表示基于特征的损失,从VGG-16的某一层计算得来
问题:为什么要有两个相同的多流网络训练两次?训练一次得到density-label之后直接与之前产生的特征拼接在一起不行吗?还是说只是图画成这样? 需要从源代码中找答案
模型中的DenseBlock的结构如下(以Dense1为例)
每个流(stream)中包含6个DenseBlock,每个block的输出记作
D
B
i
DB_{i}
DBi,每个流的输出是该流中6个DenseBlock的拼接,记作
s
j
s_{j}
sj,如下图公式所示:
每个block之间都有一个Transition层,每个流的Transition层不同:
- Dense1: 3个transition-down层,3个transition-up层,卷积核大小7 × 7
- Dense2: 2个transition-down层,2个no-sampling transition层,2个transition-up层,卷积核大小5 × 5
- Dense3: 1个transition-down层,4个no-sampling transition层,1个transition-up layer卷积核大小3 × 3
总结
作者利用对雨密度信息的掌握有效地将解决了不同大小的雨图的去雨问题,效果不错。