DenseNet这篇论文是在ResNet之后一年发表的,由于ResNet在当时引起了很大的轰动,所以DenseNet也将ResNet作为了主要的对比方法,读起来还是比较容易的,全篇只有两个数学公式,也很容易懂,感觉也是入门CV必看。

一、为什么要引入DenseNet?

原因其实是和ResNet类似的,还是为了解决网络深度加深后引起的梯度消失/爆炸问题,虽然已经有一系列的网络结构针对这一问题有了很大的改善,但这些方法都有一个共同的核心思想:将feature map进行跨网络层的连接。而作者认为与其多次学习冗余的特征,特征复用是一种更好的特征提取方式。因此DenseNet就诞生了。

二、DenseNet的网络结构

见下图网络结构其实已经很明了了,DenseNet的结构简单来说就是每两层之间两两相连,假设有4层结构,那么第4层就会得到来自最初的特征$x_{0}$,第1层输出的特征$x_{1}$...第3层输出的特征$x_{3}$,从而保证网络中层与层之间最大程度的信息传输。

以下是论文中对这种结构的定义:

假设网络结构由$L$层组成,每一层的特征都经过一系列变换(BN、ReLU、Pooling或Conv),我们将这一变换称为$H_{l}(\cdot)$ ,那么根据上面对DenseNet的定义,第$l$层特征的输出要取决于前面层输出的特征,即:

$$x_{l} = H_{l}([x_{0}, x_{1},..., x{l-1}])$$

此外,我们将$k$定义为第$l$层输出的feature map个数,也就是channels(作者将$k$定义为该网络结构的growth rate)。

下图为针对ImageNet设计的DenseNet网络结构,根据这张图我们从整体到细节来分析具体的结构。

从整体来看,Dense的主要组成是

1个卷积层(2k个卷积)+maxpooling层

+1个DenseBlock+1个Transition层(包括1个1x1的卷积层+avgpooling层)这两层后面要细说

+1个DenseBlock+1个Transition层

+1个DenseBlock+1个Transition层

+avgpool层+全连接层,softmax

从细节来看,我们假设每层的输出feature map个数为$k$:

(1)DenseBlock

每个DenseBlock其实是可以细分成:BN-ReLU-Conv(1x1)-BN-ReLU-Conv(3x3)

而Conv(1x1)即bottleneck主要作用就是用来降维或升维的,由于在该网络中每个DenseBlock的$L$层输入该Block中的$0, 1,..., L-1$层中提取的特征,再将它们叠加起来,因此可能会产生较大的channels($n_{channel}=(L-1)*k+k_{0}$,$k_{0}$是最初输入的feature map个数),所以bottleneck就可以用来降维,从而减小计算量和参数。这也是基本DenseNet中该有的部分,文中将拥有bottleneck的DenseNet称为DenseNet-B。

(2)Transition

Transition的组成其实就是:Conv(1x1)-avgpooling

为了能进一步压缩参数,作者引入另一个参数$\theta(0<\theta<=1)$,我们假设$\lfloor \theta \rfloor$为Transition层输出的feature map个数,显而易见Conv(1x1)在这里做的也是降维,也就是将通道数变少,那么对于下一层的输入的feature map也就少了,文中将有Transition层且有bottleneck的DeseNet称为DenseNet-BC(只有Transition层的称为DenseNet-C),也就是说该DenseNet-BC中每个Transition层的输出通道数是输入的一半。

三、DenseNet的优点

1、减少了参数及计算量。从作者提供的实验中可以看出ResNet-101的参数量和DenseNet-201的参数量差不多,准确率却已经达到了和ResNet相当的水平。至于为什么省参数的原因,也就是上述DenseBlock和Transition结构的优点。

2、特征复用程度高。DenseNet将所有层都连接起来,即每一层的输入都来自前面所有层的输出,也就意味着很深的层也会用到较浅层输出的特征,因此更加有效的使用了特征。

3、泛化性能更强。相比于一般神经网络的分类器直接依赖于网络最后一层(复杂度最高)的特征,DenseNet 可以综合利用浅层复杂度低的特征,因而更容易得到一个光滑的具有更好泛化性能的决策函数。在作者提供的实验中,在没有data augmention的情况下,CIFAR-100下,ResNet表现error下降很多,DenseNet下降不多,说明DenseNet泛化性能更强。

最新文章

  1. JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议
  2. Python socket超时
  3. .net 实现Office文件预览,word文件在线预览、excel文件在线预览、ppt文件在线预览
  4. jq 一些小方法
  5. 用vuejs写了一个酷狗的webApp
  6. jquery 获取select框选中的值示例一则
  7. 笔记13:File 类的一些操作
  8. jsoi2014前两轮回眸
  9. 《天书夜读:从汇编语言到windows内核编程》四 windows内核调试环境搭建
  10. 一个轻量级iOS安全框架:SSKeyChain
  11. ng 服务端渲染
  12. ORB-SLAM2阅读笔记(一)从mono_eourc.cpp出发理解ORB-SLAM2
  13. 获取表单内的所有元素的值 表单格式化插件jquery.serializeJSON
  14. Markdown编辑工具及命令
  15. [技术选型] spring boot
  16. codeforces 779D - String Game
  17. 使用UltraISO制作光盘镜像
  18. 马哥 Linux文本处理和文件查找 笔记
  19. Sprite和UI Image的区别
  20. Egret Wing4.0.3 合并资源图片问题

热门文章

  1. XCTF攻防世界web进阶练习—mfw
  2. Swift Playground All In One
  3. leetcode best solutions
  4. Dart &amp; basic
  5. how to get selected option text in javascript
  6. Chrome debug &amp; string to object &amp; copy format json
  7. BGV等 DeFi产品暴涨背后隐藏着什么?
  8. NGK” 呼叫河马 “智能合约火爆全网
  9. Java 开源办公开发平台 O2OA V5.4.0 发布 | 设计元素搜索功能上线
  10. 痞子衡嵌入式:盘点国内RISC-V内核MCU厂商