DenseNet的主要思想
目前的网络结构要么是增加了网络的宽度(GoogLeNet),要么是增加了网络的深度(Resnet)。但是DenseNet另辟蹊径,他是从特征上入手。网络结构非常小巧,但是效果却非常的惊人!
一些有用的链接
论文:Densely Connected Convolutional Networks 论文链接:https://arxiv.org/pdf/1608.06993.pdf 代码的github链接:https://github.com/liuzhuang13/DenseNet MXNet版本代码(有ImageNet预训练模型): https://github.com/miraclewkf/DenseNet
DenseNet 的核心
DenseNet 的核心是Dense block。这个东西我用一句话概括一下就是每一层的输入来自前面所有层的输出。 在传统的神经网络中,如果你有N层,那么就有N个连接。但是在DenseNet中,会有
L
?
(
L
+
1
)
/
2
L*(L+1)/2
L?(L+1)/2个连接。下面看一下Dense block的图示:
文章中同样也用公式说明了DenseNet和ResNet的区别: 首先看一下ResNet的公式:
X
l
=
H
l
(
X
l
?
1
)
+
X
l
?
1
X_l = H_l(X_{l-1})+X_{l-1}
Xl?=Hl?(Xl?1?)+Xl?1? 这里的
l
l
l表示层,
X
l
X_l
Xl?表示
l
l
l层的输出,
H
l
H_l
Hl?表示一个非线性变换。所以对于ResNet而言,
l
l
l层的输出是
l
?
1
l-1
l?1层的输出加上对
l
?
1
l-1
l?1层输出的非线性变换。 再来看一下我们的DenseNet的公式:
X
l
=
H
l
(
[
X
0
,
X
1
,
X
2
,
.
.
.
,
X
l
?
1
]
)
X_l = H_l([X_0, X_1,X_2, ... , X_{l-1}])
Xl?=Hl?([X0?,X1?,X2?,...,Xl?1?])
[
X
0
,
X
1
,
X
2
,
.
.
.
,
X
l
?
1
]
[X_0, X_1,X_2, ... , X_{l-1}]
[X0?,X1?,X2?,...,Xl?1?]表示将
0
0
0到
l
?
1
l-1
l?1层的输出feature map做concatenation。concatenation是做通道的合并,就像Inception那样。而前面resnet是做值的相加,通道数是不变的。
H
l
H_l
Hl?包括BN,ReLU和
3
×
3
3\times3
3×3的卷积。
DenseNet的优点
这里面主要说其中的四点:
1。 减轻了梯度消失的问题 2。 加强了特征的传播 3。 有效的利用了特征 4。减少了参数的数量
DenseNet的结构
下面的表示的是一个DenseNet的结构图,在这个结构图中包含了3个dense block。作者将DenseNet分成多个dense block,原因是希望各个dense block内的feature map的size统一,这样在做concatenation就不会有size的问题。
|