DenseNet解读

article/2025/9/15 1:46:48
Densely Connected Convolutional Networks ,作者清华姚班的刘壮,获得cvpr 2017 best paper。非常值得阅读。


DenseNet优势:
(1)解决了深层网络的梯度消失问题
(2)加强了特征的传播
(3)鼓励特征重用

(4)减少了模型参数


DenseNet的网络基本结构如上图所示,主要包含DenseBlock和transition layer两个组成模块。其中Dense Block为稠密连接的highway的模块,transition layer为相邻2个Dense Block中的那部分。

上图是一个详细的Dense Block模块,其中层数为5,即具有5个BN+Relu+Conv(3*3)这样的layer,网络增长率为4,简单的说就是每一个layer输出的feature map的维度为4。
这里,由于DenseNet的每一个Dense Block模块都利用到了该模块中前面所有层的信息,即每一个layer都和前面的layer有highway的稠密连接。假设一个具有L层的网络,那么highway稠密连接数目为L*(L+1)/2。
和Resnet不同的是,这里的连接方式得到的feature map做的是concat操作,而resnet中做的是elementwise操作。
其中ResNet的非线性变换方程如下:


DensNet的非线性变换方程如下:


highway的稠密连接方式具有诸多的优势,增加了梯度的传递,特征得到了重用,甚至减少了在小样本数据上的过拟合。但是随之产生2个缺点。

(1)   这里假设第L层输出K个feature map,即网络增长率为K,那么第L层的输入为K0+K*(L-1),其中K0为输入层的维度。也就是说,对于Dense Block模块中每一层layer的输入feature map时随着层数递增的,每次递增为K,即网络增长率。那么这样随着Dense Block模块深度的加深,后面的输入feature map的维度是很大的。为了解决这个问题,在Dense Block模块中加入了Bottleneck 单元,即1*1卷积进行降维,输出维度都被降到4K维(K为增长率)。

(2)   每一个DenseBlock模块的输出维度是很大的,假设一个L层的Dense Block模块,假设其中已经加入了Bottleneck 单元,那么输出的维度为,第1层的维度+第2层的维度+第3层的维度+******第L层的维度,加了Bottleneck单元后每层的输出维度为4K,那么最终Dense Block模块的输出维度为4K*L。随着层数L的增加,最终输出的feature map的维度也是一个很大的数。为了解决这个问题,在transition layer模块中加入了1*1卷积做降维。

 

 

文章同时提出了DenseNet,DenseNet-B,DenseNet-BC,三种结构,具体区别如下:

原始DenseNet:

Dense Block模块:BN+Relu+Conv(3*3)+dropout

transition layer模块:BN+Relu+Conv(1*1)(filternum:m)+dropout+Pooling(2*2)

DenseNet-B:

Dense Block模块:BN+Relu+Conv(1*1)(filternum:4K)+dropout+BN+Relu+Conv(3*3)+dropout

transition layer模块:BN+Relu+Conv(1*1)(filternum:m)+dropout+Pooling(2*2)

DenseNet-BC:

Dense Block模块:BN+Relu+Conv(1*1)(filternum:4K)+dropout+BN+Relu+Conv(3*3)+dropout

transition layer模块:BN+Relu+Conv(1*1)(filternum:θm,其中0<θ<1,文章取θ=0.5)+dropout+Pooling(2*2)

其中,DenseNet-B在原始DenseNet的基础上,在Dense Block模块中加入了1*1卷积,使得将每一个layer输入的feature map都降为到4k的维度,大大的减少了计算量。

DenseNet-BC在DenseNet-B的基础上,在transitionlayer模块中加入了压缩率θ参数,论文中将θ设置为0.5,这样通过1*1卷积,将上一个Dense Block模块的输出feature map维度减少一半。

 

DenseNet-BC的网络结构参数如下,其中网络增长率K=32,conv 代表BN-ReLU-Conv

在ImageNet上DenseNet-BC和ResNet对比如下


可以看出,DenseNet-BC比ResNet参数量要少,运算量也少,准确性高。

 

 

References:

https://github.com/liuzhuang13/DenseNet

https://github.com/liuzhuang13/DenseNetCaffe




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

相关文章

MYSQL实现排名函数RANK,DENSE_RANK和ROW_NUMBER

文章目录 1. 排名分类1.1 区别RANK&#xff0c;DENSE_RANK和ROW_NUMBER1.2 分组排名 2. 准备数据3. 不分组排名3.1 连续排名3.2 并列跳跃排名3.3 并列连续排名 4. 分组排名4.1 分组连续排名4.2 分组并列跳跃排名4.3 分组并列连续排名 在MYSQL的最新版本MYSQL8已经支持了排名函数…

tf.keras.layers.Dense函数

函数原型 tf.keras.layers.Dense(units, activationNone, use_biasTrue,kernel_initializerglorot_uniform,bias_initializerzeros, kernel_regularizerNone,bias_regularizerNone,activity_regularizerNone, kernel_constraintNone,bias_constraintNone, **kwargs )函数说明 …

DenseNet模型

《Densely Connected Convolutional Networks》阅读笔记 代码地址&#xff1a;https://github.com/liuzhuang13/DenseNet 首先看一张图&#xff1a; 稠密连接&#xff1a;每层以之前层的输出为输入&#xff0c;对于有L层的传统网络&#xff0c;一共有 L 个连接,对于DenseNe…

深入理解 keras 中 Dense 层参数

目录 引言深入理解 Dense 层的用法查看参数输入尺寸输出尺寸示例&#xff1a;用法完整示例示例一: 最小网络示例二&#xff1a;多维度数据示例三&#xff1a;特殊情况&#xff0c;待讨论 附录 引言 大家或许已经对深度学习不陌生了。不管是养家糊口工作还是科研学习早日毕业&a…

Keras大法(4)——Dense方法详解

Keras大法&#xff08;4&#xff09;——Dense方法详解 &#xff08;一&#xff09;keras.layers.Dense方法&#xff08;二&#xff09;使用示例&#xff08;三&#xff09;总 结 &#xff08;一&#xff09;keras.layers.Dense方法 在开始定义模型之前&#xff0c;我们有必要…

dense层、激活函数、输出层设计

Tensorflow——tf.layers.dense dense&#xff1a;全连接层 对于层方式的实现的时候&#xff01; layers.Dense(units,activation)函数一般只需要指定输出节点数Units和激活函数类型即可。输入节点数将根据第一次运算时输入的shape确定&#xff0c;同时输入、输出节点自动创建…

Dense层

1 常见参数 model.add(Dense(units, #输出的大小&#xff08;神经元个数&#xff09;activationNone, #激活函数use_biasTrue, #是否添加偏置kernel_initializerglorot_uniform, #权重矩阵初始化bias_initializerzeros, #偏置初始化kernel_regularizerNone, #权重矩阵的正则函…

Keras中dense层原理及用法解释

文章目录 一.全连接层Fully Connection作用二.API解释2.1 示例1&#xff1a;dense层为输入层2.2 示例2&#xff1a;dense层为中间层2.3 示例3&#xff1a;dense层为输出层 三.实现过程四.数学解释 一.全连接层Fully Connection作用 全连接的核心操作就是矩阵向量乘积 y W ∗…

矩阵运算实现求样本与样本之间欧式距离

前言 最近需要写关于kmeans的一些小程序&#xff0c;需要计算距离&#xff0c;直接写for循环又特别慢&#xff0c;再要是样本多一点&#xff0c;那简直了。细细一想&#xff0c;需要计算距离的地方还真不少&#xff0c;kmeans、KNN、图等等。 1. 理论指导 小学学过的公式&am…

实现两个点集的欧式距离和cos距离和索引值寻找(含有两种解法,for循环和矩阵操作)

一.计算欧式距离 1&#xff0c;直接for循环 两个点集points1&#xff0c;points2&#xff0c;用dist来存储距离 points1np.array([[1,2],[3,4]]) points2 np.array([[5, 6],[7,8]]) dist np.zeros(shape[points1.shape[0],points2.shape[0]]) for i in range(points1.sha…

计算样本欧式距离——python

任务描述 本关实现一个函数来计算欧几里得距离。 相关知识 通常数据集中的样本都可描述为一个 n 维向量 。每一个维度代表样本的一个属性。比如&#xff0c;对于用户 x 而言&#xff0c;其属性可能是收入、年龄、工作时间等&#xff0c;对于电影而言&#xff0c;其属性可能…

什么是范数,及其对应的 “曼哈顿距离“、“欧式距离“、“闵氏距离“、“切比雪夫距离“

什么是范数&#xff0c;及其对应的 "曼哈顿距离"、"欧式距离"、"闵氏距离"、"切比雪夫距离" 一、什么是范数二、欧式距离&#xff08;对应L2范数&#xff09;三、曼哈顿距离&#xff08;对应L1范数&#xff09;三、闵氏距离&#xff0…

计算两个矩阵的行向量之间的欧式距离

1 问题描述 矩阵P的大小为[m, d] 用行向量表示为P1, P2,...,Pm 矩阵C的大小为[n, d] 用行向量表示为C1, C2,...,Cn 求矩阵P的每个行向量与矩阵C的每个行向量的欧氏距离 典型的例子是KNN算法应用于二维的点的聚类时&#xff0c;求取点与点之间的欧式距离时的情况。 2 …

标准化欧式距离

标准化欧式距离 在对长方体区域进行聚类的时候&#xff0c;普通的距离无法满足要求。 按照普通的距离聚类出的大多是圆形的区域&#xff0c;这时候要采用标准的欧式距离。 两个 n 维向量 a(X11,X12,X13,…X1n)与b(X21,X22,…X2n) 间的标准化欧氏距离公式为&#xff1a; 其中S…

Java实现的基于欧式距离的聚类算法的Kmeans作业

Kmeans作业 环境配置 java环境&#xff0c;使用原生的Java UI组件JPanel和JFrame 算法原理 基于欧式距离的聚类算法&#xff0c;其认为两个目标的距离越近&#xff0c;相似度越大。 该实验产生的点为二维空间中的点。 欧式距离 n维空间中的两个点X&#xff0c;Y d i s t…

python+dlib的欧式距离算法进行人脸识别

资源下载地址&#xff1a;https://download.csdn.net/download/sheziqiong/85738944 资源下载地址&#xff1a;https://download.csdn.net/download/sheziqiong/85738944 人脸识别的主要算法 其核心算法是 欧式距离算法使用该算法计算两张脸的面部特征差异&#xff0c;一般在…

计算欧式距离和余弦相似度

本文介绍Python计算欧式距离和余弦相似度。为了余弦相似度需要使用欧式距离&#xff0c;我们首先介绍欧式距离。 欧式距离 欧式距离标识两个向量之间的距离&#xff0c;计算公式如下&#xff1a; 欧式距离 Σ ( A i − B i ) 2 \sqrt{Σ(A_i-B_i)^2} Σ(Ai​−Bi​)2 ​ …

欧式距离和马式距离的区别

前言 为什么要讨论这两个距离之间的区别&#xff1f; 因为&#xff0c;距离函数的选择对数据挖掘算法的效果具有很大的影响&#xff0c;使用错误的距离函数对挖掘过程非常有害。有时候&#xff0c;语义非常相似的对象被认为不相似&#xff0c;而语义不相似的对象却被认为是相…

马氏距离(Mahalanobis Distance)与欧式距离

马氏距离(Mahalanobis Distance)是度量学习中一种常用的距离指标&#xff0c;同欧氏距离、曼哈顿距离、汉明距离等一样被用作评定数据之间的相似度指标。但却可以应对高维线性分布的数据中各维度间非独立同分布的问题。 什么是马氏距离 马氏距离(Mahalanobis Distance)是一种距…

欧式距离分割

主要函数&#xff1a; [labels, numClusters] pcsegdist(ptCloud, minDistance) 欧式聚类是一种基于欧式距离的聚类算法 ptCloud pcread(maize.pcd);%两个不同簇之间最小距离 minDistance 0.06%执行欧式距离分割 [labels, numClusters] pcsegdist(ptCloud, minDistance)…