当前位置:网站首页 > 编程语言 > 正文

deno源码解析(dehazenet源码下载)



  • 🍨 本文为🔗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的最佳论文奖。

在这里插入图片描述

图1 Dense模块(5-layer,growth rate of k=4)

二、设计理念☕

相比ResNet,DenseNet提出了一个更激进的密集连接机制:即互相连接所有的层,具体来说就是每个层都会接受前面所有层作为额外的输入

图3为ResNet网络的残差连接机制,作为对比,图4为DenseNet的密集连接机制。可以看到,ResNet是每个层与前面的某层(一般是2~4层)短路连接在一起,连接方式是通过元素相加。而在DenseNet中,每个层都会与前面所有层在channel维度上链接(concat)在一起(即元素叠加),并作为下一层的输入。

对于一个层的网络,DenseNet共包含个连接,相比ResNet,这是一种密集连接。而且DenseNet是直接concat来自不同层的特征图,这可以实现特征重用,提升效率,这一特点是DenseNet与ResNet最主要的区别。

在这里插入图片描述

图2 标准的神经网络传播过程

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

图3 ResNet网络的短路连接机制(其中+代表元素级相加操作)

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

在这里插入图片描述

图4 DenseNet网络的密集连接机制(其中C代表层级的concat操作)

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

在这里插入图片描述

图5 DenseNet的前向过程

三、网络结构☕

在这里插入图片描述

图6 DenseNet的网络结构

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

在这里插入图片描述

图7 使用DenseBlock+Transition的DenseNet网络

在中,各个层的特征图大小一致,可以在channel维度上连接。中的非线性组合函数的是BN+ReLU+3x3Conv的结构,如下图8所示。

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

在这里插入图片描述

图8 DenseBlock中的非线性转换结构

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

在这里插入图片描述

图9 使用bottleneck的DenseBlock结构

对于层,它主要是连接两个相邻的,并且降低特征图大小。层包括一个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所示.

在这里插入图片描述

四、与其它算法进行对比

在这里插入图片描述

图10 在CIFAR-100数据集上ResNet v.s. DenseNet

1、导入库

 
 
 

2、导入和检查数据

 
 
 
 

在这里插入图片描述

3、配置数据集

 
 
 
 
 

4、搭建DenseNet

 
 
 
到此这篇deno源码解析(dehazenet源码下载)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就! 




版权声明


相关文章:

  • 速排卵药是什么(速排卵药会有什么影响)2025-10-16 11:27:10
  • 游戏分类的依据(游戏分类的标准是)2025-10-16 11:27:10
  • 域名解析ip138在线查询(域名解析ip在线查询反查)2025-10-16 11:27:10
  • latex编辑器有哪些(latex编辑文档的优缺点)2025-10-16 11:27:10
  • mha是什么意思网络用语(msha是什么意思)2025-10-16 11:27:10
  • pdf界面怎么截图(pdf页面怎么截图)2025-10-16 11:27:10
  • max31865三线(max31865三线接法)2025-10-16 11:27:10
  • 换国内源(npm换国内源)2025-10-16 11:27:10
  • 拆包机(拆包机视频)2025-10-16 11:27:10
  • 104规约遥控报文解析(103规约遥控报文解析)2025-10-16 11:27:10
  • 全屏图片