对resnet densenet的理解
resnet
1
最重要的是残差网络的使用,在神经网络深度比较深的时候,按理说越深的网络,特征提取和拟合能力越强,但是时机训练的过程中发现,较深的网络会出现退化的问题,即准确率还不如浅层的网络。作者想到,能不能在至少不差于浅层网络的基础上,提升深层网络的准确率,下图的这种残差模块实现了这种想法
加入残差模块之后,我们基本上可以放心地增加深度,因为虽然我们并不知道网络具体什么深度才是最合适的,但是通过残差模块提供一种“可选择”状态(要要么继续拟合,要么保持一个恒等映射),就是我可以一直加深,但是如果到了某一层饱和了,我们也不用担心性能下降。
2
对于残差网络,维度不匹配时,同等映射有两种可选方案:
直接通过zero padding 来增加维度(channel)。
用1x1卷积改变维度。
3
在ResNet网络结构中会用到两种残差模块,一种是以两个3x3的卷积网络串接在一起作为一个残差模块,另外一种是1x1、3x3、1x1的3个卷积网络串接在一起作为一个残差模块,先降维再恢复
densenet
1 特点
DenseNet作为另一种拥有较深层数的卷积神经网络,具有如下优点:
相比ResNet拥有更少的参数数量.
旁路加强了特征的重用.
网络更易于训练,并具有一定的正则效果.
与resnet的sum操作不同的是,densenet采用的是cat,作者的意思是cat可以使每一层学到的feature map都能被之后所有层直接使用。
DenseNet在提出时做出的假设:和resnet相比与其多次学习冗余的特征(拟合残差),特征复用是一种更好的特征提取方式.
如下图,每一层学到的feature map都能被之后所有层直接使用,这使得特征可以在整个网络中重用。即实现了假设的特征复用。
2 一些细节
保证不同层的fature size和兼顾下采样
由于在DenseNet中需要对不同层的feature map进行cat操作,所以需要不同层的feature map保持相同的feature size,这样的话下采样就没法弄了,于是densenet中设置了几个dense block,在每个dense block中保证相同的fature size,在dense block之间采用下采样,作者给出的下采样方式是transation layer(BN + Conv(1×1) +2×2 average-pooling),可以改变fature size也可以改变维度
Bottleneck Layers
由于不同层feature map之间由cat操作组合在一起,最终仍然会是feature map的channel较大而成为网络的负担.作者在这里使用1×1 Conv(Bottleneck),作为特征降维的方法来降低channel数量,以提高计算效率.经过改善后的非线性变换变为BN-ReLU-Conv(1×1)-BN-ReLU-Conv(3×3)
SENet
思想是,确定出每个feature map的重要性,通过给feature map 加上一个权重来实现。
过程是通过在普通的conv—pooling层之后,先把每个feature map 变成一个数(global pooling),代表该feature map的全局特征,然后再通过一种学习机制,给每个feature map确定一个w权重,按照这个权重乘到原feature map上,完成对feature map的重要性评测。