当前位置:网站首页 > 技术博客 > 正文

program status



DenseNet(稠密连接网络)是由Cornell大学的Gao Huang等人于2017年提出的深度学习网络架构。它的设计灵感来自于ResNet(残差网络)以及其前身 Highway Networks 的思想。

论文链接:https://arxiv.org/pdf/1608.06993.pdf 

代码的github链接:https://github.com/liuzhuang13/DenseNet 

这是作者发表的一篇CVPR顶会上的一篇论文,代码的地址,大家可以自行下载。

在深度卷积神经网络中,通常存在梯度消失或梯度爆炸等问题,尤其是随着网络层数的增加,这种问题变得尤为严重,上篇讲到的残差网络引入了残差连接(跨层连接)来解决了这些问题,从而允许网络更深地训练,但是,ResNet中的跨层连接是通过相加的方式实现的,这意味着每一层只能直接访问前一层的输出。

DenseNet(密集卷积网络)的核心思想(创新之处)是密集连接,使得每一层都与所有之前的层直接连接,即某层的输入除了包含前一层的输出外还包含前面所有层的输出。

这样的话,有很多的优点:

(1)梯度复用:每一层都可以直接访问之前所有层的特征图,从而促进了特征的重用,有助于提取更丰富和更具有表征能力的特征,这句话更文学点的说法是可以理解成多尺度融合。

(2)梯度传播:密集连接使得梯度可以更轻松地传播到较早的层,有助于缓解梯度消失和梯度爆炸问题,从而使得更深的网络可以训练,和残差网络一样都具备这个优点。

(3)参数效率:参数量要少一些和残差网络大差不差。

整个网络主要是包含了三个核心结构,分别是DenseLayer(模型中最基础的原子单元,利用卷积完成一次最基础的特征提取)、DenseBlock(整个模型密集连接的基础单元,整个网络最核心的部分)和Transition(通常用于两个相邻的Dense块之间,主要的两个作用是减小特征图的大小和特征图的数量),通过上述的三个核心的结构的拼接加上其他层来完成整个模型的搭建。

DenseLayer层包含BN + Relu + 1*1Conv + BN + Relu + 3*3Conv。第L个DenseLayer层的第一个1*1Conv的输入通道层数为num_input_features+(L-1)*growth_rate,输出通道层数为bn_size*growth_rate;第二个3*3Conv的输入通道数为bn_size*growth_rate,输出通道数为growth_rate。整个DenseLayer层内特征层宽度不变,不存在stride=2或者池化的情况。这里有一点特殊之处,DenseLayer层的第一个结构是BN层而不是像其它模型那样是Conv。在BN层前面还存在一个Concatenation操作,负责本DenseBlock模块内前面所有层的输出以及第一层的输出进行拼接操作。

DenseBlock模块其实就是堆叠一定数量的DenseLayer层,在整个DenseBlock模块内不同DenseLayer层之间会发生密集连接,在DenseBlock模块内特征层宽度不变,不存在stride=2或者池化的情况。在一个block内部(即特征图大小都相同),将所有的层都进行连接,即第一层的特征会直接传输给后面的所有的层,后面的层会接受前面所有层的输出特征,一个块中有多个卷积层,每个卷积层的输入来自前面所有层的输出。

Transition模块包含BN + Relu + 1*1Conv + 2*2AvgPool,1*1Conv负责降低通道数,2*2AvgPool负责降低特征层宽度,降低到1/2。Transition模块的作用是连接不同的DenseBlock模块,之所以这样设计原因是,密接连接必须保证特征层的宽度是一致的,原因是连接方式为沿通道维拼接,如果整个模型都采用密集连接,那势必导致整个模型从输入到输出特征层宽度都不变,那最后无法完成分类任务,也无法压缩特征。

Dense连接只会在每个Dense block内部进行,不会进行跨block的Dense连接。

整体的这个流程可以看一下下边的model.py这个文件,感觉前边有一些内容也不是梳理的很清楚,后期有时间在进行修改。

一、划分数据集

 

二、模型文件

 

三、训练文件

 

以上就是代码文件了,数据集的格式如下图所示

其中,crack、rust、spalling、stoma、这四个文件夹名是类别,这种还不需要标注了,到了目标检测的环节才需要标注,本次的博客也算是写完了,以后会不定期更新遇到的问题的。

DenseNet网络结构的讲解与代码实现_transition层-CSDN博客

densenet的网络结构和实现代码总结(torch)_densenet结构-CSDN博客

版权声明


相关文章:

  • python代码整体右移2025-03-16 20:30:05
  • php界面怎么显示不出来2025-03-16 20:30:05
  • udp 套接字2025-03-16 20:30:05
  • mac代码对比工具2025-03-16 20:30:05
  • java内存模型图解2025-03-16 20:30:05
  • ubuntu双硬盘安装方法2025-03-16 20:30:05
  • c语言随机数生成算法2025-03-16 20:30:05
  • 系统文件检查器的作用2025-03-16 20:30:05
  • 神经网络knn2025-03-16 20:30:05
  • swap函数需要自己定义吗2025-03-16 20:30:05