IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 【图像分类】(DenseNet)Densely Connected Convolutional Networks -> 正文阅读

[人工智能]【图像分类】(DenseNet)Densely Connected Convolutional Networks

论文名称:Densely Connected Convolutional Networks
论文下载地址:https://arxiv.org/pdf/1608.06993.pdf
论文代码地址:https://github.com/bamos/densenet.pytorch
论文参考翻译:https://blog.csdn.net/qq_41295976/article/details/88249740


论文标题
在这里插入图片描述

1.论文概述

  • 最近的研究表明,如果在接近输入层与输出层之间的网络层包含短连接,就可以训练更深、更准确、更有效的卷积网络。
  • 基于这一研究结论,作者提出了一种稠密卷积网络(DenseNet),该网络在前馈传播时,将每一层与其后的每一层连接起来。传统的 L L L层卷积网络有 L L L个连接,而DenseNet有 L ( L + 1 ) / 2 L(L+1) / 2 L(L+1)/2连接(根据后文的理解,这里的 L L L层应该不算上输入层)。每一层都将之前所有层的特征图作为输入,而它自己的特征图是之后所有层的输入。
  • DenseNet有一些很不错的优点:有助于梯度消失问题,有利于特征传播,鼓励特征的重复利用,还可以减少参数量。
  • DenseNets在CIFAR-10/100, SVHN,和ImageNet数据集上都取得了较好的性能。

2.论文提出的背景

  • 随着卷积神经网络的发展,越来越深的网络被提出,这导致了一个新问题的出现:当输入和梯度信息在经过很多层的传递之后,在到达网络的最后(或开始)可能会消失或“被冲洗掉”,即梯度消失问题。网络层数的增加也让更多的人进行结构的改善、不同连接模式的探索工作。

  • 针对上述问题,在以往的研究中提出了很多策略。例如,ResNets网络和Highway网络采用了一种旁路连接的方式。随机深度(Stochastic depth)在训练过程中随机丢掉一些层,进而缩短了ResNets网络,获得更好的信息和梯度流。FractalNets网络重复组合几个具有不同数量卷积块的并行层序列,获得更深的网络的同时还保留了网络中的短路径。

  • 上述的这些方法都有一个关键点:它们都在前几层和后几层之间产生了短路径。

  • 在这篇论文中,作者提出了一种结构,该结构提炼了上述的观点而形成了一种简单的连接模式:为了保证能够获得网络层之间的最大信息,作者将所有层都进行相互连接。为了能够保持前馈的特性,每一层都将之前所有层的输入进行拼接,之后将输出的特征图传递给之后的所有层。如下图所示。
    在这里插入图片描述

  • DenseNets不是通过很深或者很宽的网络来获得表征能力,而是通过特征的重复使用来利用网络的隐含信息,获得更容易训练、参数效率更高的稠密模型。将不同层学到的特征图进行组合连接,增加了之后层输入的多样性,提升了性能。

所以本质上来说,DenseNet网络的提出还是为了解决网络层不断加深而引发的一系列问题。

3.论文提出的方法

假设一张图片 x 0 x_0 x0?,在卷积网络中传播。网络共有 L L L层,每一层都有一个非线性变换 H l ( . ) H_l(.) Hl?(.),其中 l l l表示层的维度,即第几层。 H l ( . ) H_l(.) Hl?(.)是一个组合函数,有BN、ReLU、池化或卷积。用 x l x_l xl?表示 l t h l^{th} lth层的输出。

  • ResNets:传统前馈网络是将 l t h l^{th} lth层的输出作为 ( l + 1 ) t h (l+1)^{th} (l+1)th层的输入。因此可将这一过程抽象为表达式: x l x_l xl? = H l ( x l ? 1 ) H_l(x_{l-1}) Hl?(xl?1?)。而ResNets增加了一个跨层连接,将本层特征与输入到下一层的非线性转换的结果相加: x l x_l xl? = H l ( x l ? 1 ) H_l(x_{l-1}) Hl?(xl?1?) + x l ? 1 x_{l-1} xl?1?。ResNets的一个优点是可以直接将梯度从后层传向前层。然而,本层特征与经过 H l H_l Hl?层得到的输出是通过求和的形式来连接的,这可能使网络中信息的传播受到影响。
  • 稠密连接:为了更好的改善层与层之间的信息的传递,作者提出了一种不同的连接模式:将该层与之后的所有层进行连接。如上图,图一所示。因此, l t h l^{th} lth层将之前所有层的特征图 x 0 x_0 x0?,…, x l ? 1 x_{l-1} xl?1?作为输入,则可以将这一过程抽象为数学表达式:
    x l = H l ( [ x 0 , x 1 , . . . , x l ? 1 ] ) x_l = H_l([x_0, x_1,...,x_{l-1}]) xl?=Hl?([x0?,x1?,...,xl?1?])
    其中 [ x 0 , x 1 , . . . , x l ? 1 ] [x_0, x_1,...,x_{l-1}] [x0?,x1?,...,xl?1?]表示将第 0 , . . . , l ? 1 0,...,l-1 0,...,l?1层输出的特征图进行拼接。由于DenseNet的稠密连接模式,所以称该网络为稠密卷积网络。为了方便表达,将上式中 H l ( . ) H_l(.) Hl?(.)的多个输入表示为一个向量。

上述是ResNets和DenseNets的数学表达式,值得注意的一点是:与ResNets不同,DenseNets从不在特征到达一个层之前通过求和的方式来组合特征,而是将之前层的特征进行拼接。在DenseNets中,对于一个L层的网络,第 l l l层有 l l l个输入,这些输入是 l l l层之前所有层的特征图 ,而 l l l层自己的特征图则传递给之后的所有 L ? l L-l L?l层。因此,一个一个L层的DenseNets网络,有 L ( L + 1 ) / 2 L(L+1) / 2 L(L+1)/2连接(这其实就是等差数列求和: 1 + 2 + . . . . . + L 1+2+ ..... + L 1+2+.....+L),而传统的结构只有 L L L个连接。

  • 增长速率:增长速率是作者引入的一个超参数 k k k,用来表示每层网络产生的特征图的数量(看原文中的解释 k k k其实就是网络的宽度)。如果每个 H l H_l Hl?都产生 k k k个特征图,则 l t h l^{th} lth层就有 k 0 + k ? ( l ? 1 ) k_0 + k*(l-1) k0?+k?(l?1)个特征图作为输入,其中 k 0 k_0 k0?表示输入层的通道数。作者将这里的 k k k作为一种超参数引入,并且DenseNet和现存结构的一个很重要的不同是,DenseNet很窄。当使用一个较小的增长速率时,DenseNet就已经在测试数据集上表现出了很好的性能。作者给出了性能好的解释:在DenseNet中,每一层都可以和它之前的所有层的特征图进行拼接,使得网络具有了“集体知识”。可以将特征图看作是网络的全局状态。每一层相当于对当前状态添加 k k k个特征图。增长速率控制着每一层有多少信息对全局状态有效。全局状态一旦被写定,就可以在网络中的任何地方被调用,而不用像传统的网络结构那样在层与层之间不断的重复。
    如下所示,为DenseNet的结构示意图:
    在这里插入图片描述
    特别值得注意的是,在以前学习的很多网络层结构中,各种操作的顺序往往是先卷积,再BN层,最后是ReLU层,而DenseNet中网络层的操作顺序为先BN层,再ReLU层,最后是卷积层。
    如下图为网络层的forward函数:
    def forward(self, x):
        out = self.conv1(F.relu(self.bn1(x)))
        out = self.conv2(F.relu(self.bn2(out)))
        out = torch.cat((x, out), dim=1)
        return out
  • 过渡层:当特征图的尺寸改变时,稠密连接就会出现问题。但是可以通过卷积网络中的下采样层来改变特征图的尺寸。为了便于下采样的实现,作者将网络划分为多个稠密连接的Dense Block,如下图所示:
    在这里插入图片描述
    作者将每个Dense Block之间的层称为过渡层,完成卷积、池化操作。每个过渡层由BN层、1x1卷积层和2x2平均池化层组成。
  • Bottleneck层:在我给的代码链接中,Bottleneck结构:在3x3的卷积之前加入1x1的卷积。而如果没有Bottleneck结构,则单个网络层只有3x3的卷积操作。然后多个单个网络层的重复堆叠形成Dense Block结构。

根据网络结构图,对DenseNet的几种衍生结构进行说明。

  1. DenseNet-B:添加Bottleneck结构:在3x3的卷积之前加入1x1的卷积实现降维,可以减少计算量。而这一结构给了DenseNet启发,作者在3x3的卷积之前加入1x1的卷积实现升维,并令1x1的卷积产生 4 k 4k 4k个特征图。
  2. DenseNet-C:为了简化模型,作者在过度层中减少了特征图的数量。如一个Dense Block有m个特征图,让其经过过渡层生成 Θ m Θm Θm个输出特征图。其中 0 < Θ < = 1 0<Θ<=1 0<Θ<=1,表示压缩系数。定义当 Θ < 1 Θ<1 Θ<1时的 DenseNet为 DenseNet-C。当Bottleneck和过渡层都有 Θ < 1 Θ<1 Θ<1时,定义为DenseNet-BC。

4.实验

  • 训练集:CIFAR-10、CIFAR-100、SVHN和ImageNet ILSVARC2012分类数据集

4.1 CIFAR和SVHN数据集

作者使用不同深度 L L L和不同增长速率 k k k来分别训练DenseNets。在CIFAR和SVHN数据集上的分类结果如下表所示:
在这里插入图片描述
注释:在上表中,加粗的字号表示性能优于现存的模型,蓝色标注表示在该数据集上的最好结果。通过上表可以观察到:DenseNets在准确率、模型容量、参数效率上都取得了优秀的性能。

4.2 ImageNet数据集

  • 作者在ImageNet分类任务上测试了不同深度和增长速率的DenseNet-BC的误差,并且和ResNet结构的性能进行了比较。如下表中记录了DenseNets在ImageNet上的single-crop和10-crop的验证误差:
    在这里插入图片描述
  • DenseNets和ResNets single-crop的top-1验证误差如下图所示。其中,左图以参数量为变量,右图以flops为变量。
    在这里插入图片描述
    注释:从上图中可以看出:与ResNets相比,在相同性能的前提下,DenseNets的参数量和计算量更小。并且作者只是修改了和ResNets对应的超参数,而不是DenseNets的所有超参数,作者认为修改更多的超参数可以进一步优化DenseNets的性能。
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:33:43  更:2022-10-17 12:38:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:26:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码