大家好,又见面了,我是你们的朋友全栈君。
这是CVPR2018的一篇文章,提出了针对图像复原任务的CNN模型RDN(residual dense network)。
RDN主要是提出了网络结构RDB(residual dense blocks),它本质上就是残差网络结构与密集网络结构的结合。
1.残差网络(resnet)与密集网络(densenet)
- 残差网络结构:在输入与输出之间引入一个前向反馈的shortcut connection,这有点类似与电路中的“短路”,即所谓的identity mapping(恒等映射y=x)。原本的网络是学习输入到输出的映射H(x),而残差网络学习的是F(x)=H(x)−x。
残差学习有效缓解了随着网络深度增加引发的梯度消失的现象。使得提高网络深度,还能保持很好性能与效率。
残差学习很适合做图像复原,因为低质图像与高质图像之间相似度很高,而他们的残差其实很稀疏,简单理解残差学习另网络需要学习的东西变少了。
关于残差网络(resnet)的详解见我的另一篇文章:https://www.jianshu.com/p/11f1a979b384
- 相比resnet,densenet提出更激进的密集连接机制,即每个层都会接受前面所有层作为额外的输入。
ResNet是每个层与前面的某层(一般2~3层)短路连接在一起,连接方式是通过元素相加;
而DenseNet是每一层与前面所有层在channel维度上连接(concat)在一起,实现特征复用。
密集连接有效缓解了梯度消失问题,加强特征传播,鼓励特征复用,减少了参数量。
2.RDN网络结构
2.1 RDN包含四个模块
- Shallow feature extraction net(SFENet)表示前两个卷积层,用于提取浅层特征
- Residual dense blocks(RDBs)融合残差模块和密集模块,每个块还包含Local feature fusion 和Local residual learning
- Dense feature fusion(DFF)包含Global feature fusion 和Global residual learning 两部分
- Up-sampling net(UPNet)网络最后的上采样(超分任务需要)+卷积操作
2.2 RDB(residual dense block)
RDB模块主要将残差模块residual block和dense block模块进行了整合,将两者集合起来,形成了residual dense block 。
每一个RDB包含以下三个模块,如上图所示:
- Contiguous memory:将Fd-1、Fd,1 … Fd,c、Fd,C多层的特征都在channel这一维度串接(concat)起来。
- Local feature fusion:concat之后的1*1的卷积操作,主要用于多通道的特征融合,降维作用
- Local residual learning::将Fd-1、Fd,LF的特征进行融合。
2.3 DFF(dense feature fusion)
如上图所示,所谓global residual learning和RDB中的local residual learning其实本质上没有不同,只不过一个是全局、一个是局部;但是有细节需要注意,global feature fusion和local feature fusion还是有不同的,因为在RDB中是每一层都接收到了之前所有层的特征,但是在RDB之外的global feature fusion只是把每一个RDB的特征串接起来。区别简单来说:全局的特征融合的短接用的更少,局部特征融合短接用的更多。
3.其他细节
- 除了local/global feature fusion中的1*1的卷积,所有卷积核都是3 * 3的,并且通过padding,保持每一层的特征图大小不变。
- 每一层的卷积核数量都是64。
- 应对超分的RDN比去噪的RDN多了一个上采样层,相反去噪的RDN多了一个从LQ图像到HQ图像的短接。如图3所示。
4. 超分网络性能对比图:
这张图来自其他论文,可见复原效果较好的网络,参数往往也很多,意味着模型的复杂度更高。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/150449.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...