DenseNet---密集卷积网络论文理解
pytorch代码:https://github.com/WangXiaoCao/attention-is-all-you-need-pytorch
参考博客:https://blog.csdn.net/sinat_33761963/article/details/83958802
1.模型结构
每一层网络的输入是前边所有层输出的连接。
公式:
网络的整体结构:
网络包括:(1)feature block即图中第一个卷积块;(2)dense block,该网络结构中有3个block,每个块中有n个dense层,即图中灰色圆圈,该层代表与前边几层输出相连接;白色圆圈表示上一层的输出;(3)transition block,包括卷积层和池化层;(4)classification block,包括pooling,linear;(5)预测层,用softmax进行分类。
2.重点理解dense block
2.1 dense layer
每一个灰色圆圈代表BN + ReLU + (Bottleneck) + 3x3conv + (Dropout)。模型中出现k值,是预先设定的,k = 32。
其中Bottleneck是可选的,主要目的是为了减少特征图数量;Dropout同样也是可选的,用于防止过拟合。
对于第一个块中的第一个圆圈来讲,输入是56x56x64---->56x56x64---->56x56x64---->(56x56x128---->56x56x128---->56x56x128)---->56x56x32(kernel_size=3, channel = k)---->56x56x32。
2.2 dense block
layer0(如块中白色圆圈):56x56x64---->56x56x32;
layer1:56x56x(32*1)---->56x56x32;只接收到layer0额输出;
layer2:56x56x(32*2)---->56x56x32;接收到layer0和layer1的输出,将两个输出的channel拼接自然得到32*2个channel;
layer3:56x56x(32*3)---->56x56x32;接收到layer0,layer1和layer2的输出;
layer4:56x56x(32*4)---->56x56x32;接收到layer0,layer1,layer2和layer3的输出;
.........
layer n:56x56x(32*n)---->56x56x32;接收到layer0,layer1,layer2.....layer n-1的输出。
具体的网络模型如图。