- 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
- 🍖 原作者:K同学啊
🍺本周任务:
- 根据本文Tensorflow代码,编写出相应的Pytorch代码
- 了解ResNetV2与ResNetV的区别
- 改进思路是否可以迁移到其他地方呢(自由探索)
⛽ 我的环境
- 语言环境:Python3.10.12
- 编译器:Google Colab
- 深度学习环境:
- torch==2.5.0+cu121
- torchvision==0.20.0+cu121
⛵参考博客/文章:
- 论文《Densely Connected Convolutional Networks》
- 深度学习 Day23——J3DenseNet算法实战与解析
一、前言☕
在计算机视觉领域,卷积神经网络(CNN)已经成为最主流的方法,比如GoogleNet,VGG-16,Incepetion等模型。CNN史上的一个里程碑事件是ResNet模型的出现,ResNet可以训练出更深的CNN模型,从而实现更高的准确率。ResNet模型的核心是通过建立前面层与后面层之间的“短路连接”(shortcut, skip connection),进而训练出更深的CNN网络。
今天我们要介绍的是DenseNet模型,它的基本思路与ResNet一致,但是它建立的是前面所有层与后面层的密集连接(dense connection),它的名称也是由此而来。DenseNet的另一大特色是通过特征在channel上的连接来实现 特征重用(feature reuse)。这些特点让DenseNet在的情形下实现比ResNet更优的性能,DenseNet也因此斩获CVPR 2017的最佳论文奖。

二、设计理念☕
相比ResNet,DenseNet提出了一个更激进的密集连接机制:即互相连接所有的层,具体来说就是每个层都会接受前面所有层作为额外的输入。
图3为ResNet网络的残差连接机制,作为对比,图4为DenseNet的密集连接机制。可以看到,ResNet是每个层与前面的某层(一般是2~4层)短路连接在一起,连接方式是通过元素相加。而在DenseNet中,每个层都会与前面所有层在channel维度上链接(concat)在一起(即元素叠加),并作为下一层的输入。
对于一个层的网络,DenseNet共包含个连接,相比ResNet,这是一种密集连接。而且DenseNet是直接concat来自不同层的特征图,这可以实现特征重用,提升效率,这一特点是DenseNet与ResNet最主要的区别。

图2是一个标准的神经网络传播过程示意图,输入和输出的公式是,其中是一个组合函数,通常包括BN、ReLu、Pooling、Conv等操作,是第层的输入的特征图(来自于层的输出),是第层的输出的特征图。

图3是ResNet的网络连接机制,由图可知是跨层相加,输入和输出的公式是

图4为DenseNet的连接机制,采用跨通道的concat的形式连接,会连接前面所有层作为输入,输入和输出的公式是 。这里要注意所有层的输入都来源于前面所有层在channel维度的concat,以下动图形象表示这一操作。

三、网络结构☕

CNN网络一般要经过Pooling或者stride>1的Conv来降低特征图的大小,而DenseNet的密集连接方式需要特征图大小保持一致。为了解决这个问题,DenseNet网络中使用的结构,其中是包含很多层的模块,每个层的特征图大小相同,层与层之间采用密集连接方式。而层是连接两个相邻的,并且通过使特征图大小降低。下图7给出了DenseNet的网络结构,它共包含4个,各个之间通过层连接在一起。

在中,各个层的特征图大小一致,可以在channel维度上连接。中的非线性组合函数的是BN+ReLU+3x3Conv的结构,如下图8所示。
另外,与ResNet不同,所有中各个层卷积之后均输出个特征图,即得到的特征图的channel数为,或者说采用个卷积核。在DenseNet称为,这是一个超参数。一般情况下使用较小的(比如12),就可以得到较佳的性能。假定输入层的特征图的channel数为,那么层输入的channel数为,因此随着层数的增加,尽管设定的较小,的输入会非常多,不过这是由于特征重用所造成的,每个层仅有个特征是自己独有的。

由于后面层的输入会非常大,内部采用bottleneck层来减少计算量,主要是原有的结构中增加1x1Conv,如下图9所示,即BN+ReLU+1x1Conv+BN+ReLU+3x3Conv,称为结构。其中1x1Conv得到个特征图,它起到的作用是降低特征数量,从而提升计算效率。

对于层,它主要是连接两个相邻的,并且降低特征图大小。层包括一个1x1的卷积和2x2的AvgPooling,结构为BN+ReLU+1x1Conv+2x2AvgPooling。
另外,层可以起到压缩模型的作用。假定层的上接得到特征图channels数为,层可以产生特征(通过卷积层)
,其中是压缩系数(compression rate)。当时,特征个数经过层没有变化,即无压缩,而当压缩系数小于1时,这种结构称为,文中使用。对于使用bootleneck层的结构和压缩系数小于1的组合机构称为。
对于ImageNet数据集,图片输入大小为224x224,网络结构采用包含4个的,其首先是一个stride=2的7x7卷积层,然后是一个stride=2的3x3MaxPooling层,后面才进入DenseBlock。ImageNet数据集所采用的网络配置如下表1所示.

四、与其它算法进行对比

1、导入库
2、导入和检查数据

3、配置数据集
4、搭建DenseNet
到此这篇deno源码解析(dehazenet源码下载)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/bcyy/12987.html