● 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
一、我的环境
● 语言环境:Python3.8
● 编译器:pycharm
● 深度学习环境:Pytorch
● 数据来源:链接:https://pan.baidu.com/s/1shV_R21WjZ34YJzjbrwsOA 提取码:a664
二、前言
在计算机视觉领域,卷积神经网络(CNN)已经成为主流的方法,比如GoogleNet,VGG-16,Inceptton等模型。CNN史上的一个里程碑事件是ResNet模型的出现,ResNet可以训练出更深的CNN模型,从而实现更高的准确度。ResNet模型的核心是通过简历前面层与后面层之间的“短路链接”(shortcut),进而训练出更深的CNN网络。
今天要介绍的DenseNet模型,它的基本思路与ResNet一致,但是它建立的是前面所有层与后面层的密集连接(dense connection),它的名称也由此而来。DenseNet的另一个特色是通过特征在channel上的连接来实现特征重用。这些特点让DenseNet在参数和计算成本更少的情形下实现比ResNet更优的性能,DenseNet也因此斩获CVPR 2017的最佳论文奖。
DenseNet论文
三、设计理念
相比ResNet,DenseNet提出了一个更激进的密集连接机制:即互相连接所有的层,具体来说就是每个层都会接受其前面所有层作为其额外的输入。图1为ResNet网络的连接机制,作为对比,图2为DenseNet的密集连接机制。可以看到,ResNet是每个层与前面的某层(一般是2~3层)短路连接在一起,连接方式是通过元素级相加。而在DenseNet中,每个层都会与前面所有层在channel维度上连接(concat)在一起(这里各个层的特征图大小是相同的,后面会有说明),并作为下一层的输入。对于一个 L LL 层的网络,DenseNet共包含 L ( L + 1 ) 2 \cfrac{L(L+1)}{2} 2L(L+1)个连接,相比ResNet,这是一种密集连接。而且DenseNet是直接concat来自不同层的特征图,这可以实现特征重用,提升效率,这一特点是DenseNet与ResNet最主要的区别。
ResNet网络的短路连接机制(其中+代表的是元素级相加操作)
如果用公式表示的话,传统的网络在 l ll层的输出为:
x l = H l ( x l − 1 ) x_l=H_l(x_{l-1}) xl=Hl(