DenseNet是在ResNet的基础上进行的增强,两者的主要区别在于:
1、DenseNet是让前面所有层与后面层实现密集连接;
2、DenseNet实现残差连接时,是通过在通道数上进行堆叠,而不是像ResNet那样实现元素级相加。
下面是DenseNet的网络结构:
我们可以看到DenseNet实现了一种更为激进的密集连接机制,也就是后面的每一层都会接受前面所有层作为输入。DenseNet的网络结构由两个部分所组成:DenseBlock+Transition。其中DenseBlock主要实现的是残差连接,Transition主要实现的是降低特征图的大小。因为DenseBlock中实现的是维度上的拼接,因此要求特征图大小必须一致,只能通过Transition来实现缩小特征图。
由于DenseNet采用的是密集连接,导致后面的层会得到非常多的输入,从而导致计算难度增加,因此可以在DenseBlock中采用瓶颈结构来减少计算量,主要就是通过的卷积来降低特征图的维度,这种结构叫做DenseNet-B。
其中Transition的结构为:,这种结构叫做DenseNet-C
使用了瓶颈结构的DenseBlock以及压缩系数小于1的Transition结构,这样的结构叫做DenseNet-BC