ResNet和DenseNet

ResNet 深度深
每一个
Inception 宽度广

一个Kernel(一个核KKD,设D个通道channel)就是一个对应的feature map. 第一个核会在每一个通道上都(卷积)走一遍,然后将对应每个通道的卷积值加起来,形成第一个feature map. 其他依此类推。对于各个通道而言,核的值均可不一样,所以D个通道并不共享权值,所谓权值共享是在整张图上不同位置会共享同一个kernel。

多通道卷积
对于D通道图像的各通道而言,是在每个通道上分别执行二维卷积,然后将D个通道加起来,得到该位置的二维卷积输出,对于RGB三通道图像而言,就是在R,G,B三个通道上分别使用对应的每个通道上的kernel_sizekernel_size大小的核去卷积每个通道上的WH的图像,然后将三个通道卷积得到的输出相加,得到二维卷积输出结果。因此,若有M个卷积核,可得到M个二维卷积输出结果,即M个Feature map,这m个特征图是取决于m个卷积核,而通道在这里被消去了。而下一层的卷积核的个数又是由上一层的kernel数决定的。Conv 1*1的核 能够保持输出图和原图一样,且计算量较小。在有padding的情况下,也能保持输出图片大小和原来的一样,因此是output(W,H,M)。
如果这里有连着的一堆差不多同质的数据 就可认为是把某个作为一帧中的多个通道堆叠起来进行卷积,然后输出一个具有几个feature map(由核的数目决定)的输出。

每一层都连着其以下的所有层,或者说每一层都与前面各层相连,且中间使用batch-normalization.

每个卷积层的输出feature map数量很少,该连接方式使得特征和梯度的传递更加有效。
Each layer has direct access to the gradients from the loss function and the original input signal, leading to an implicit deep supervision. alleviate the overfitting.
因为梯度在很多层之间不停地传递,这样就会出现层数越深梯度消失的情况。对于densenet,每层都可以直接 从损失函数和原始输入信号中获取梯度,从而带来隐含的深度监督。
dense connection 的这种连接方式减少了网络的参数,可在一定程度上抑制过拟合。
网络更窄,参数更少。 DenseNet [….] 表示将0到l-1层的输出feature map做concatenation。concatenation是做通道的合并,就像Inception那样。
denseblock
在两个相邻的denseblock之间,使用了卷积和池化操作,作为转移层和改变feature map的尺寸。

k=卷积核的数量即grow rate. 作者选择k=32 或者48.( 每个dense block中每层输出的feature map个数)
bottleneck layer每个dense block 的33卷积前都包含了一个11的卷积操作。另外这里每个dense block的33卷积前面都包含了一个11的卷积操作,就是所谓的bottleneck layer,目的是减少输入的feature map数量,既能降维减少计算量,又能融合各个通道的特征,何乐而不为。另外作者为了进一步压缩参数,在每两个dense block之间又增加了11的卷积操作。
因此在后面的实验对比中,如果你看到DenseNet-C这个网络,表示增加了这个Translation layer,该层的1
1卷积的输出channel默认是输入channel到一半。如果你看到DenseNet-BC这个网络,表示既有bottleneck layer,又有Translation layer。
再详细说下bottleneck和transition layer操作。在每个Dense Block中都包含很多个子结构,以DenseNet-169的Dense Block(3)为例,包含32个11和33的卷积操作,也就是第32个子结构的输入是前面31层的输出结果,每层输出的channel是32(growth rate),那么如果不做bottleneck操作,第32层的33卷积操作的输入就是3132+(上一个Dense Block的输出channel),近1000了。而加上11的卷积,代码中的11卷积的channel是growth rate4,也就是128,然后再作为33卷积的输入。这就大大减少了计算量,这就是bottleneck。至于transition layer,放在两个Dense Block中间,是因为每个Dense Block结束后的输出channel个数很多,需要用11的卷积核来降维。还是以DenseNet-169的Dense Block(3)为例,虽然第32层的33卷积输出channel只有32个(growth rate),但是紧接着还会像前面几层一样有通道的concat操作,即将第32层的输出和第32层的输入做concat,前面说过第32层的输入是1000左右的channel,所以最后每个Dense Block的输出也是1000多的channel。因此这个transition layer有个参数reduction(范围是0到1),表示将这些输出缩小到原来的多少倍,默认是0.5,这样传给下一个Dense Block的时候channel数量就会减少一半,这就是transition layer的作用。文中还用到dropout操作来随机减少分支,避免过拟合,毕竟这篇文章的连接确实多。

你可能感兴趣的:(ResNet和DenseNet)