热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DenseNet模型解读

导言:    传统的卷积网络在一个前向过程中每层只有一个连接,ResNet增加了残差连接从而增加了信息从一层到下一层的流动。FractalNets重复组合几个有不同卷积块数量的并行

导言:

    传统的卷积网络在一个前向过程中每层只有一个连接,ResNet增加了残差连接从而增加了信息从一层到下一层的流动。FractalNets重复组合几个有不同卷积块数量的并行层序列,增加名义上的深度,却保持着网络前向传播短的路径。相类似的操作还有Stochastic depth和Highway Networks等。

    这些模型都显示一个共有的特征,缩短前面层与后面层的路径,其主要的目的都是为了增加不同层之间的信息流动。DenseNet基于此提出了一种新的连接模式--Dense connections。

 

    传统L层的网络仅有L个连接,在DenseNet中使用了L(L+1)/2个连接。这样做有几个明显的优点:避免了梯度消失问题,加强了特征传播,实现特征复用(feature reuse),以及实质上减少了参数量。

DenseNet在CIFAR-10, CIFAR-100, SVHN, 和ImageNet上超过了大部分的SOTA模型,使用更少的计算实现了更好的效果。


DenseNet网络结构

 

    DenseNet使用Dense connections构成三个Dense Block,再通过几层卷积和池化。其中Dense Block中的Dense connections是通过concat实现的。

    在ResNet中,残差连接的识别函数为Xi = Hi (Xi-1) +Xi-1,这里i指层数。而DenseNet中的识别函数为 Xi = Hi( [X0, X1, X2... Xi-1] )。(注:一个输入经过卷积,BN,激活函数,得到输出,这个过程可认为是一个识别函数Hi)

    考虑到是使用Concat连接,若每个Block层数和通道数太多,将导致Block巨大,这里Block中每层的通道数都比较小(在本文中通道数用K表示,k取12,24,40)。这里K也表示growth rate。如每个识别函数产生k个通道,则第i层将有k0 + k x( i-1)个输入通道。

    在DenseNet中,Block的结构是BN + ReLU +3x3Conv。而在DenseNet-B中使用了Bottleneck, Block的结构是BN+ReLU+1x1 Conv+BN+ReLU+3x3 Conv,在1x1处降维以减少参数。在DenseNet-C中为了使得模型更小,使用了一个超参数θ,对于通道数为k的block,其通道数在DenseNet-C中变为θk, θ取0.5。(注:DenseNet中是没有使用Bottleneck和超参数θ的,对于同时使用Bottleneck和θ的模型成为DenseNet-BC)。

    DenseNet在ImageNet上的结构如上所示,这里的Block都是BN+ReLU+3x3Conv结构。


实现细节

    除了用于ImageNet数据集的模型有四个Dense Block,其他都只有三个,在第一个dense block前有16通道输出、3x3卷积核大小的卷积层用于处理输入图片,(DenseNet-BC是32通道),每层卷积都使用了1个像素的padding以保持输出大小不变,在两个Dense blocks之间使用1x1卷积和2x2平均池化作为Transition Layer,在最后一个Dense blocks后使用全局平均池化,以及softmax分类器。

    三个Dense blocks的feature map大小分别是32x32, 16x16, 8x8。对于一般的DenseNet,有三种结构配置:{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}。这里L指的是模型的总层数,不是dense block的层数。(注:BN,pooling,ReLU都是不计入层数中的)。

    图像输入大小为:224x224。


DenseNet理论依据

    Dense connections使得前几层的信息在后面层中可以直接获得,信息得到很好的保留,增加了不同层之间的信息流动以及梯度传播,这使得模型更加容易训练。这种在每一层都使用前面所有层的信息的方式,称之为特征复用(feature reuse),其他论文里出现这个feature reuse。

    每一层都可以直接获得来源于Loss function的梯度和输入信号(这里指的直接来源于Loss function的梯度其实指的是dense block,而不是DenseNet),从而实现了隐式的深监督(Implicit Deep Supervision),这也有利于训练更深的网络。

    此外,它还有正则化效果,这使得它可以使用更小的模型尺寸,而不会出现过拟合。


结论

    这里C10表示CIFAR-10数据集。

DenseNet与ResNet在ImageNet上的实验对比,明显可知DenseNet效果更好。

若有错误或疑问,欢迎留言指出。

本文来源于微信公众号“ CV技术指南 ” 。若有错误或疑问,欢迎在公众号中留言指出。

欢迎关注公众号“CV技术指南”,主要进行计算机视觉方向的论文解读,最新技术跟踪,以及CV技术的总结。正在进行的系列有网络模型解读、行为识别和CV技术总结

原创文章第一时间在公众号中更新,博客只在有空时间才更新公众号文章



推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
author-avatar
一片绿洲053766
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有