论文笔记Densely Connected Convolutional Networks

论文笔记Densely Connected Convolutional Networks

  • 1. 标题及来源
  • 2. 阅读目的
  • 3. 领域
  • 4. 拟解决的问题
  • 5. 提出的方法
    • 5.1 整体网络结构
    • 5.2 Dense Block
    • 5.3 版本对比
  • 6. 结果
    • 6.1 DenseNet_v1实验结果
    • 6.2 DenseNet_v2实验结果
    • 6.6 DenseNet不同版本性能对比
  • 7. 改进&存在的问题
  • 8. 可借鉴的点
  • 9. 知识补充
    • 9.1 对论文的个人理解
      • 9.1.1 DenseNet_V1
      • 9.1.2 DenseNet_v2
    • 9.2 高低层特征融合

1. 标题及来源

Dense Connected Convolutional Networks. CVPR_2017
该论文一共有5个版本,这是第一个版本

2. 阅读目的

1.  了解DenseNet的设计思想
2.  了解如何优化网络结构(目标识别或者分类的难度不同,并不需要将它们都在网络的最后一层输出)

3. 领域

网络结构设计

4. 拟解决的问题

1.  设计更深的网络结构
2.  设计更深网络结构出现的梯度消失/爆炸问题

5. 提出的方法

5.1 整体网络结构

论文笔记Densely Connected Convolutional Networks_第1张图片
每个Dense Block之间都通过transition层连接,在transition层中有一个1x1卷积和一个池化,1x1卷积的输出通道数量和输入特征数量相同。通过加transition层的方式实现池化操作。
l t h l^{th} lth层的输入通道数是 k × ( l − 1 ) + k 0 , k 0 k \times (l - 1) + k_0,k_0 k×(l1)+k0k0表示输出的通道数。为了防止网络过宽,k通常取12(L=40),24(L=100)

5.2 Dense Block

论文笔记Densely Connected Convolutional Networks_第2张图片
每一层都接收之前所有层的特征图并且把自身的特征图传给后面所有的层。
假设当前层是L,那么L层会接收1, 2, …, L - 1层所有的特征,这些特征都作为单独的输入(concat)输入到第L层中, x l = H l ( [ x 0 , x 1 , ⋯   , x l − 1 ] ) x_l = H_l([x_0, x_1, \cdots, x_{l - 1}]) xl=Hl([x0,x1,,xl1]) [ x 0 , x 1 , ⋯   , x l − 1 ] [x_0, x_1, \cdots, x_{l - 1}] [x0,x1,,xl1]表示对这些特征图进行concat
ResNet是将特征进行相加, x l = H l ( x l − 1 ) + x l − 1 x_l = H_l(x_{l - 1}) + x_{l - 1} xl=Hl(xl1)+xl1

5.3 版本对比

v1:初始版本
v2:在transition layer中加入了Batch Normalization

版本号 改变
V1 1. dense connectivity
2. composite function
3. Pooling layers(transition layer)
4.Growth rate
V2 1. composite function:
\quad 加入bottleneck layer,即每次进行3x3卷积之前先进行1x1卷积,降维到4k个channel,记为DenseNet-B
2. transition layer:
\quad 加入Batch Normalization
\quad 加入compression,即输出通道数变为 [ θ m ] , θ ∈ ( 0 , 1 ] [\theta m],\theta \in (0, 1] [θm]θ(0,1],记为DenseNet-C,实验时 θ = 0.5 \theta = 0.5 θ=0.5
3. 加入ImageNet分类任务的结果
4. 简单讨论Stochastic Depth Networks与DenseNets之间的联系
5. 替换V1版本的heat map
6. 移除V1版本中DenseNets和Partial DenseNets的对比试验
V3、V4、V5 和V2相比没有变化

6. 结果

6.1 DenseNet_v1实验结果

论文笔记Densely Connected Convolutional Networks_第3张图片
在100层的DenseNet网络中,k从12增加到24,在C10上的表现降低,不一定是由过拟合问题引起的。因为作者针对这点,作了另外一个实验,使用DenseNet(L=100, k=12),然后不使用Dropout,在C10和C100上的结果分别是8.85%和32.53%,几乎超过了表中所有方法(除FractalNet with dropout)。当k从12增加到24时,这种误差波动在波动范围内,所以无法判断是否是由过拟合引起。

论文笔记Densely Connected Convolutional Networks_第4张图片
The weight norm serves as an approximate for the dependency of a convolutional layer on its preceding layers(权重范数是卷积层在其前层上的依赖性的近似值)
图中每列表示layer,每行表示对应的特征图,每个像素点表示卷积层与特征图关联的权重的范数。
点越偏近黄色,该层越充分利用该特征图;点越偏近深蓝色,表明该层未利用该特征图。
论文笔记Densely Connected Convolutional Networks_第5张图片

6.2 DenseNet_v2实验结果

论文笔记Densely Connected Convolutional Networks_第6张图片
对比DenseNet(L=100, k=24)和DenseNet-BC可以发现,随着网络深度的增加,网络的性能并没有得到提升, 这是因为SVHN是一个相对简单的任务,使用更深的网络会导致模型过拟合
DenseNet(L=100, k=12)在C10上的5.77到DenseNet(L=100, k=24)的5.83,是因为过拟合引起的,解决V1版本中该问题引起原因

论文笔记Densely Connected Convolutional Networks_第7张图片
论文笔记Densely Connected Convolutional Networks_第8张图片
论文笔记Densely Connected Convolutional Networks_第9张图片
(l, s)处的红点表示l层充分利用了s层之前生成的特征

  1. 所有层都将其权重分布在同一块中的多个输入上,表明浅层提取的特征实际上直接被同一Dense Block的深层所利用
  2. transition layer的权重也将其权重分布在前一Dense Block内的所有层上,表明少量信息流间接从DenseNet的第一层流向最后一层
  3. Dense Block2和Dense Block3的层一致地将最小权重分配给transition layer(三角形的顶行)的输出,这表明transition layer输出许多冗余特征(平均权重较低)
  4. 最后的分类层也使用了整个密集块的权重,但似乎集中在最终特征图上,这表明网络中后期可能会产生一些更高级别的特征

6.6 DenseNet不同版本性能对比

版本 (L, K) Params C10 C10+ C100 C100+ SVHN
V1 40, 12 1.0M 7.00 5.24 27.55 24.42 1.79
V1 100, 12 7.0M 5.77 4.10 23.79 20.20 1.67
V1 100, 24 27.2M 5.83 3.74 23.42 19.25 1.59
V2 100, 12 0.8M 5.92 4.51 24.15 22.27 1.76
V2 250, 24 15.3M 5.19 3.62 19.64 17.60 1.74
V2 190, 40 25.6M - 3.46 - 17.18 -

L表示网络深度,K表示Growth Rate,不同数据集中的数据是error rate(%),数据集后面有个+表示使用data augmentation,即the images are first zero-padded with 4 pixels on each side, then randomly cropped to again, produce 32x32 images; half of the images are then horizontally mirrored

7. 改进&存在的问题

8. 可借鉴的点

1.  特征的reuse方式
2.  网络结构的设计思想(将不同层特征直接进行重用,并且重用每一层的特征)
3.  DenseNet中,网络的低层特征会流向高层并被高层充分利用
4.  该层的平均权重小,说明特征冗余。因为当有大量重复特征时,网络再使用的时候并不需要全部使用它们,而是使用它们中的一部分(有点类似与PCA),剩余的部分几乎不被使用,所以权重会相对较低,因此该层的平均权重会偏小。

9. 知识补充

9.1 对论文的个人理解

9.1.1 DenseNet_V1

DenseNet中每一层都可以和损失函数有直接"交流"(可以直接通过损失函数计算梯度,而不需要层层回传,也正是因为这点,所以避免了梯度消失和梯度爆炸)。
DenseNet每一层都很"窄"(channel数量非常少,只有12或者24),然后每层学习一些特征,每层都会接收之前所有层的特征,相当于对这些特征进行了重组,充分利用这些特征。举个不是很恰当的例子:例如猫的识别,在第一层网络中,学习了猫的毛发特征,可能是一些点或者线,然后在第二层网络中,学习了猫的一些轮廓信息,在第三层中,学习了猫的身体信息,第四层中,学习了猫的头部信息。在分类时,分类器会接收所有的这些特征,然后基于这些特征来判断是否是一个猫。ps:实际的学习过程可能并没有这么快,此处只是一个假设,用于理解该网络的设计理念

9.1.2 DenseNet_v2

DenseNet中,网络的低层特征会流向高层并被高层充分利用,这说明低层的特征对于网络的贡献是不可忽略的。
该层的平均权重小,说明特征冗余。因为当有大量重复特征时,网络再使用的时候并不需要全部使用它们,而是使用它们中的一部分(有点类似与PCA),剩余的部分几乎不被使用,所以权重会相对较低,因此该层的平均权重会偏小。

9.2 高低层特征融合

参考博客:https://blog.csdn.net/xys430381_1/article/details/88370733

你可能感兴趣的:(#,网络结构)