DenseNet论文笔记

article/2025/9/13 23:46:11

DenseNet论文笔记

Densely Connected Convolutional Networks

Introduction中引用了Deep networks with stochastic depth,提到了resnet里很多层都学不到东西,贡献很少可以随机丢掉,解释了InceptionV4里的Scaling of the Residuals操作,Inception也是把新的缩小后再相加,不能把原来基础的feature改动太大,新的加一点。

Dense block

同一个block内的feature map尺寸不变

每个block内的层和其之前的所有层相连,具体来说是之前所有层输出的feature maps全部做concat作为下一层输入。

每个L层的block内有(L+1)L/2个连接。

优势:通过建立前面所有层与后面层的密集连接,实现了特征在通道维度上的复用,不但减缓了梯度消失的现象,也使其可以在参数与计算量更少的情况下实现比ResNet更优的性能

在这里插入图片描述

结构

通用DenseNet架构:

img

传统前馈网络: x l = H l ( x l − 1 ) x_{l}=H_{l}\left(x_{l-1}\right) xl=Hl(xl1)

ResNet:
x l = H l ( x l − 1 ) + x l − 1 x_{l}=H_{l}\left(x_{l-1}\right)+x_{l-1} xl=Hl(xl1)+xl1
DenseNet:
x l = H l ( [ x 0 , x 1 , … , x l − 1 ] ) x_{l}=H_{l}\left(\left[x_{0}, x_{1}, \ldots, x_{l-1}\right]\right) xl=Hl([x0,x1,,xl1])
密集连通性:dense连接。

复合函数:指的是Hl为BN+RELU+3*3conv。

池化层:作者指出在两个dense block之间的两个层为transitional layer,具体为:BN+1* 1conv先降维+2* 2average pooling减小feature map大小,减少参数。减少冗余特征。

增长率k(growth rate):Dense block中,如果每个H_l 都额外新增 k 个特征图,那么第l层就有(l-1)k个特征图作为输入,其中 k0 表示输入层的通道数。DenseNet中k=12。k小一点效果好。

Bottleneck layers:名字应该是照resnet起的,Hl :BN-ReLU-Conv(1* 1)-BN-ReLU-Conv(3* 3),这个没压缩的版本叫DenseNet-B。

模型压缩:transitional layer降维,if一个block输出m个特征图,让过渡层降维成θm个特征图(向下取整)。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传θ<1的DenseNet为DenseNet-C,上述两个都有就是DenseNet-BC。实验中θ=0.5。

实现细节:除了ImageNet外的所有数据集上,实验中使用的DenseNet都有三个dense block,每一个block都有相同的层数。在进入第一个dense block之前,输入图像先经过了16个(DenseNet-BC中是两倍的增长速率)卷积。对于3x3的卷积层,使用一个像素的零填充来保证特征图尺寸不变。在两个dense block之间的过渡层中,我们在2x2的平均池化层之后增加了1x1的卷积。在最后一个dense block之后,使用全局平均池化和softmax分类器。三个dense block的特征图的尺寸分别是32x32,16x16,8x8。

对于在ImageNet数据集上的实验,我们使用4个dense block的DenseNet-BC结构,图片的输入是224x224。最开始的卷积层有 2k(64)个卷积,卷积核是7x7,步长是2;其余所有层的特征图都设为 k 。

针对ImageNet设计的DenseNet(k=32):

针对ImageNet设计的DenseNet

实验结果:

img

准确率:对于SVHN数据集,DenseNet-BC的结果并没有DenseNet(k=24)的效果好,作者认为原因主要是SVHN这个数据集相对简单,更深的模型容易过拟合。

Capacity:可以看出,随着L和K变大,DenseNet效果变好。

Overfitting:DenseNet不容易过拟合,可能是因为bottleneck结构和模型压缩有正则化作用。

下图是DenseNet-BC和ResNet在ImageNet数据集上的对比,左边那个图是参数复杂度和错误率的对比,可以在相同错误率下看参数复杂度,也可以在相同参数复杂度下看错误率,提升还是很明显的。右边是flops和错误率的对比,同样有效果。

img

左边的图表示不同类型DenseNet的参数和error对比。中间的图表示DenseNet-BC和ResNet在参数和error的对比,相同error下,DenseNet-BC的参数复杂度要小很多,错误率也低。右边的图也是表达DenseNet-BC-100只需要很少的参数就能达到和ResNet-1001相同的结果。

这里的实验直接把ResNet里的block改成DenseNet的block,超参数用的是ResNet的

img

Discussion

Model compactness

reuse和压缩模型

Implicit Deep Supervision

类似DSN,DSN每层接了分类器强制中间层学有区分度的feature,densenet的分类器算是和所有层相连的,但是densenet的loss function在所有层共享。

Stochastic 和 deterministic connection

随机丢resnet层的输出和把每层都连接起来,有概率可以造成临近两个层的直接相连。densenet是直接连起来。

Feature Reuse

img

上面的热力图算的是 average(absolute)weight assigned,可以理解为对应层的feature map的复用率,横轴是block中的层,纵轴越红则复用率越高,黑框加粗的是两个transitional layers和classification layer。顶上第一行是block的输入的feature map。

怎么看:例如block1的第12层,纵轴有12个块分别代表12个不同层的feature map,底下的偏红说明底层的feature map复用的多。

observations:

  • 所有层的feature map在后面都有被用到。就算是很早的层在后面的层也有用,只是不大。

  • 即使是Transition layer也会使用到之前Denseblock中所有层的特征。

  • 第2-3个Denseblock中的层对之前Transition layer利用率很低,说明transition layer输出大量冗余特征.这也为DenseNet-BC提供了证据支持,既Compression的必要性。

  • 最后的分类层虽然使用了之前Denseblock中的多层信息,但更偏向于使用最后几个feature map的特征,说明在网络的最后几层,可能产生某些high-level的特征。

    参考:https://www.jianshu.com/p/0b8fc900abef


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

相关文章

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、写模式打开文件——写模式&#…

layer中的open与close

关于layer中的open方法与close方法 open方法open函数的定义open函数里面optionsopen函数中返回的值 close方法如何使用close方法关于layer中的一些发现 写在最后的话 open方法 open函数用来创建一个弹出层。 open函数的定义 形式为&#xff1a;layer.open(options) 例如&…