图像分类算法DenseNet论文解读

article/2025/9/13 16:19:49

论文名称:Densely Connected Convolutional Networks

论文地址:https://arxiv.org/pdf/1608.06993.pdf

 

如果说ResNet扩展了网络的深度,GoogLeNet扩展了网络的宽度,那么DenseNet就是利用特征图的重用。

 

一、论文解读

1、DenseNet介绍

传统的具有L层的卷积网络在每一层和它的下一层之间都有L个连接,而我们的网络有L(L+1)/2个连接。对于每一层,将前面所有层的特征图用作输入,并将其自身的特征图用作后面所有层的输入,通过连接来组合特性。由于其密集的连接模式,我们称之为稠密卷积网络(densenet)。

 

2、DenseNet优点:

(1)缓解消失梯度问题。

(2)加强特征传播。

(3)鼓励特征图重用。

(4)比传统的卷积网络需要更少的参数。

(5)改进了网络的信息流和梯度,更易于训练。

(6)每一层都可以从损失函数和原始输入直接访问梯度,可以训练更深层次的网络架构。

(7)密集的连接具有规则化的效果,这可以减少对训练集大小较小的任务的过度拟合。

 

3、ResNets

一个输入图片通过一个L层的卷积神经网络,每层相当于一个非线性函数是一个可以被操作的复合函数,如:批标准化(bn)、校正线性单元(relu)、池化(pool)或卷积(conv)。第i层的输出用表示。

传统的CNN都是将第L层的输出作为第L+1层的输入,也就是:

resnets添加一个跳过连接,该连接使用标识函数绕过非线性转换:Resnets的优点是,梯度变化可以直接通过标识函数从后面的层流到前面的层。然而,恒等映射函数和的输出是通过求和结合起来的,这会阻碍网络中的信息流。

 

4、Dense connectivity

我们提出了一种不同的连接模式,引入从前面任意层到所有后续层的直接连接。层接受所有前面层作为输入,那么第L层的输出为:。由于其密集的连接模式,我们称之为稠密卷积网络(densenet)。

 

5、Composite function

定义为三个连续操作的复合函数:批标准化(bn)、非线性校正单元(relu)和3×3卷积(conv)。

 

6、Pooling layers

当特征图的大小改变时,等式中使用的连接操作是不可行的,然而卷积网络的一个重要组成部分是下采样层,它改变了特征图的大小。为了便于在网络中进行下采样,将网络划分为多个密集连接的密集块,将块之间的层称为过渡层,它执行卷积和池化。实验中使用的过渡层包括一个批量标准化层和一个1×1的卷积层,然后是一个2×2的平均池层。如下图:

 

7、Growth rate

如果每个函数会生成k个特征图(通道数为k),第个特征图作为输入,是输入层的通道数。DenseNet和其他网络的对比在于,DenseNet只有很少的层(如12层)。

使用超参数k作为网络的增长率,每个层都可以访问其块中的所有前面的特征图,因此也可以访问网络的“集体知识”。可以将特征图视为网络的全局状态。每一层都将自己的K特征映射添加到此状态。增长率控制着每一层对全局状态贡献的新信息量。一旦写入全局状态,就可以从网络中的任何地方访问它。

 

8、Bottleneck layers

虽然每层只产生k个特征图,但它有很多的输入,在每3×3卷积之前,可以引入1×1卷积作为瓶颈层,以减少输入特征图的数量,从而提高计算效率。实验中,用1*1产生4k个特征图。

 

9、Compression

为了进一步提高模型的紧凑性,可以减少过渡层的特征图数量,如果密集块包含m个特征图,让下面的过渡层生成θm输出特征图,其中0<θ≤1被称为压缩因子。当θ=1时,跨越过渡层的特征映射数保持不变。我们将θ<1的densenet称为densenet-C,并在实验中设置θ=0.5。当使用θ<1的瓶颈层和过渡层时,我们将模型称为densenet-BC。

 

10、Implementation Details

在除ImageNet之外的所有数据集上,实验中使用的densenet都有三个密度块,每个都有相同数量的层。在进入第一个密集块之前,对输入图像执行16个(或Densenet BC的两倍增长率)输出通道的卷积。对于卷积核大小为3×3的卷积层,输入的每一侧都用一个像素填充为零,以保持特征图大小不变。使用1×1卷积和2×2平均池作为两个相邻密集块之间的过渡层。在最后一个密集块的末尾,执行全局平均池,然后附加一个SoftMax分类器。三个密集区块的特征图尺寸分别为32×32、16×16和8×8。

对于基本的DenseNet-C结构,使用{L = 40,k = 12},{L = 100, k = 12}和{L = 100, k = 24}三种结构。对于densenet-BC结构,使用{L = 100, k = 12},{L=250,k=24}和{L=190,k=40}。在对ImageNet的实验中,在224×224个输入图像上使用了4个密集块的Densenet-BC结构。初始卷积层包括大小为7×7、步幅为2的2K卷积;所有其他层中的特征图数量也从k开始。在ImageNet上使用的确切网络配置如表1所示。

 

11、训练

所有网络均采用随机梯度下降(SGD)进行训练,在cifar和svhn上,分别使用批量64,对300和40个epoch进行训练。初始学习率设置为0.1,并在总训练epoch数的50%和75%时,除以10。在ImageNet上,为批量大小为256的90个epoch训练模型。学习率最初设置为0.1,在第30和60epoch时降低10次。使用10-4的权重衰减率和0.9的Nesterov动量,在每个卷积层(第一层除外)后添加一个dropout层,并将dropout率设置为0.2。

 

12、Implicit Deep Supervision

densenet以一种隐含的方式执行类似的深层监督:网络顶部的单个分类器通过至多两个或三个过渡层直接监督所有层。然而,由于所有层之间共享相同的损失函数,因此密集网络的损失函数和梯度基本上不那么复杂。

 

13、Stochastic vs. deterministic connection.

在稠密卷积网络和残差网络的随机深度正则化之间有联系。在随机深度下,残差网络中的层被随机丢弃,从而在周围层之间创建直接连接。由于池层从不被丢弃,因此网络会产生与densenet类似的连接模式:如果随机丢弃所有中间层,那么在相同池层之间的任何两个层直接连接的可能性很小。虽然这些方法最终是完全不同的,但是对随机深度的densenet解释可能提供了这个正则化器成功的见解。

 

14、Feature Reuse

(1)早期层提取的特征直接用于密集网络的深层。因为在同一块中,所有层都会预先分配权重。

(2)过渡层的权重还将其权重分布在前一个密集块内的所有层上,这表明信息流从densenet的第一层到最后一层通过几个间接方向流动。

(3)第二个和第三个密集块中的层一致地将最小权重分配给过渡层的输出,表明过渡层输出许多冗余特性。这与Densenet BC的结果保持一致,在这里精确地压缩了这些输出。

(4)虽然最后一个分类层也使用了整个密集块的权重,但似乎集中在最终特征图上,这表明在网络后期可能会产生更多的高级特征。

 

15、结论

提出了一种新的卷积网络结构,称之为密集卷积网络(densenet)。它引入了具有相同特征图大小的任意两层之间的直接连接。densenet可以自然地扩展到数百层,但不存在优化困难,实验中,densenet在参数不断增加的情况下,在精确度方面有持续的提高,而没有任何性能下降或过度拟合的迹象。此外,densenet需要更少的参数和更少的计算来实现最先进的性能。在研究中采用了针对残差网络优化的超参数设置,所以通过更详细地调整超参数和学习率,可以进一步提高densenet的精度。

 

 

 


http://chatgpt.dhexx.cn/article/VEDpy6vP.shtml

相关文章

DenseNet论文笔记

DenseNet论文笔记 Densely Connected Convolutional Networks Introduction中引用了Deep networks with stochastic depth,提到了resnet里很多层都学不到东西&#xff0c;贡献很少可以随机丢掉&#xff0c;解释了InceptionV4里的Scaling of the Residuals操作&#xff0c;Ince…

DenseNet解析

1 前言 在计算机视觉领域&#xff0c;卷积神经网络&#xff08;CNN&#xff09;已经成为最主流的方法&#xff0c;比如最近的GoogLenet&#xff0c;VGG-19&#xff0c;Incepetion等模型。CNN史上的一个里程碑事件是ResNet模型的出现&#xff0c;ResNet可以训练出更深的CNN模型…

denseNet 详解

CNN网络架构演进&#xff1a;从LeNet到DenseNet - Madcola - 博客园 (cnblogs.com) 1、解决梯度消失问题 2、特征图相应变少

DenseNet详述

简介 从2012年AlexNet大展身手以来&#xff0c;卷积神经网络经历了&#xff08;LeNet、&#xff09;AlexNet、ZFNet、VGGNet、GoogLeNet&#xff08;借鉴Network in Network&#xff09;、ResNet、DenseNet的大致发展路线。其实&#xff0c;自从ResNet提出之后&#xff0c;Res…

DenseNet

paper: Densely Connected Convolutional Networks Memory-Efficient Implementation of DenseNets code: https://github.com/pytorch/vision/blob/main/torchvision/models/densenet.py 在本篇文章中&#xff0c;作者提出了Dense Convolutional Network (DenseNet)&…

详解DenseNet(密集连接的卷积网络)

前言 在计算机视觉领域&#xff0c;卷积神经网络&#xff08;CNN&#xff09;已经成为最主流的方法&#xff0c;比如最近的GoogLenet&#xff0c;VGG-19&#xff0c;Incepetion等模型。CNN史上的一个里程碑事件是ResNet模型的出现&#xff0c;ResNet可以训练出更深的CNN模型&a…

DenseNet 简介

个人公众号,欢迎关注 YouChouNoBB 1.首先对深度学习做一个简单的回顾 2.介绍DenseNet 3.参考文献 1.1 DNN回顾 如下图所示是一个基本DNN结构&#xff0c;通过forward传播和backword传播来训练一个模型。包含input层&#xff0c;L个隐藏层和一个output&#xff0c;隐层使用的…

经典网络DenseNet介绍

经典网络DenseNet(Dense Convolutional Network)由Gao Huang等人于2017年提出&#xff0c;论文名为&#xff1a;《Densely Connected Convolutional Networks》&#xff0c;论文见&#xff1a;https://arxiv.org/pdf/1608.06993.pdf DenseNet以前馈的方式(feed-forward fashio…

DenseNet 浅析

文章目录 1. 简介2. DenseNet 浅析2.1 网络结构2.2 Dense Block2.3 Bottleneck Layer2.4 Trainsition Layer 3. 个人理解4. DenseNet-121 的 PyTorch 实现 1. 简介 DenseNet 见于论文《Densely Connected Convolutional Networks》&#xff0c;是 CVPR2017 的 oral。一般而言&a…

【深度学习原理第9篇】DenseNet模型详解

目录 一、背景概述二、DenseNet2.1 DenseBlock2.2 Transition Layer2.3 DenseNet网络结构 实验结果 一、背景概述 DenseNet是2017年CVPR的最佳论文&#xff0c;它不同于ResNet中的残差结构&#xff0c;也不同于GoogLetNet中的Inception网络结构。DenseNet提出了一种新的提升性…

DenseNet(密集连接的卷积网络)

这里写目录标题 前言1. DenseNet网络2.设计理念2.1 Resnet2.2 DenseNet2.3 密集连接的实现 3. DenseNet的实现3.1 Dense Block的实现3.2 Transition Layer的实现3.3 DenseNet网络3.4 DenseNet-121网络 4. 测试 前言 DenseNet是指Densely connected convolutional networks&…

DenseNet详解

入门小菜鸟&#xff0c;希望像做笔记记录自己学的东西&#xff0c;也希望能帮助到同样入门的人&#xff0c;更希望大佬们帮忙纠错啦~侵权立删。 ✨完整代码在我的github上&#xff0c;有需要的朋友可以康康✨ https://github.com/tt-s-t/Deep-Learning.git 目录 一、DenseNet网…

DenseNet网络结构详解及代码复现

1. DenseNet论文详解 Abstract: 如果在靠近输入和靠近输出层之间包含更短的连接&#xff0c;那么卷积神经网络可以很大程度上更深&#xff0c;更准确和高效地进行训练。根据这一结果&#xff0c;我们提出了DenseNet&#xff08;密集卷积网络&#xff09;: 对于每一层&#xf…

设计模式六大原则(6)开闭原则(Open Close Principle)

开闭原则&#xff08;Open Close Principle&#xff09; 定义&#xff1a;一个软件实体如类、模块和函数应该对扩展开放&#xff0c;对修改关闭。 问题由来&#xff1a;在软件的生命周期内&#xff0c;因为变化、升级和维护等原因需要对软件原有代码进行修改时&#xff0c;可…

Linux C/C++编程: 文件操作open/close、fopen与freopen/fclose

open是linux下的底层系统调用函数&#xff0c;fopen与freopen c/c下的标准I/O库函数&#xff0c;带输入/输出缓冲。 linxu下的fopen是open的封装函数&#xff0c;fopen最终还是要调用底层的系统调用open。 所以在linux下如果需要对设备进行明确的控制&#xff0c;那最好使用底…

Linux之open()、close()函数

目录 open函数 函数介绍 头文件及函数原型 参数 close函数 函数介绍 头文件函数原型 open()、close()函数使用 open函数 函数介绍 在Linux中open()函数用来打开或创建一个文件&#xff0c;当打开文件失败时返回值为-1&#xff1b;成功则返回作为文件描述符(一个非负的…

Linux李哥私房菜——open、close和fd

open() 头文件&#xff1a;#include<fcntl.h>//在centos6.0中只要此头文件就可以#include<sys/types.h>#incldue<sys/stat.h> 功能&#xff1a;打开和创建文件&#xff08;建立一个文件描述符&#xff0c;其他的函数可以通过文件描述符对指定文件进行读取与…

详解C中的系统调用open/close/read/write

文章目录 open() and close()read() and write()实操:代码示例1 将in.txt文件中的内容写入到out.txt文件中&#xff08;一个一个字符写入&#xff09;2 将in.txt文件中的内容写入到out.txt文件中&#xff08;数组写入&#xff09; 先谈谈open/close/read/write与fopen/fclose/f…

JavaScript中window对象及open和close使用

Window对象 是一个顶级对象&#xff0c;不是任何对象的属性&#xff0c;所以可以不写window.xxx而直接使用内部的属性和方法。 实际上&#xff0c;在web前端开发时&#xff0c;所有的全局变量都自动成为window对象的属性 Window对象的属性 Screen History Location Navigat…

Python基础(十三)——文件操作(open函数、close函数)

本文以Python3以上为学习基础。 目录 1、 使用文件操作第一原则 2、open函数 2.1、文件打开模式 2.1.1、只读模式打开文件——只读&#xff08;r&#xff09; 2.1.2、读写模式打开文件——读写模式&#xff08;r&#xff09; ​ 2.1.3、写模式打开文件——写模式&#…