经典 backbone 总结
目录
VGG
VGG网络结构参数表如下图所示。

ResNet
ResNet 模型比 VGG 网络具有更少的滤波器数量和更低的复杂性。 比如 Resnet34 的 FLOPs 为 3.6G,仅为 VGG-19 19.6G 的 18%。
注意,论文中算的
FLOPs,把乘加当作1次计算。
ResNet 和 VGG 的网络结构连接对比图,如下图所示。

不同层数的 Resnet 网络参数表如下图所示。

看了后续的
ResNeXt、ResNetv2、Densenet、CSPNet、VOVNet等论文,越发觉得ResNet真的算是Backone领域划时代的工作了,因为它让深层神经网络可以训练,基本解决了深层神经网络训练过程中的梯度消失问题,并给出了系统性的解决方案(两种残差结构),即系统性的让网络变得更“深”了。而让网络变得更“宽”的工作,至今也没有一个公认的最佳方案(Inception、ResNeXt等后续没有广泛应用),难道是因为网络变得“宽”不如“深”更重要,亦或是我们还没有找到一个更有效的方案。
Inceptionv3
常见的一种 Inception Modules 结构如下:

Resnetv2
作者总结出恒等映射形式的快捷连接和预激活对于信号在网络中的顺畅传播至关重要的结论。
ResNeXt
ResNeXt 的卷积block 和 Resnet 对比图如下所示。

ResNeXt 和 Resnet 的模型结构参数对比图如下图所示。

Darknet53
Darknet53 模型结构连接图,如下图所示。

DenseNet
作者
Gao Huang于2018年发表的论文Densely Connected Convolutional Networks。
在密集块(DenseBlock)结构中,每一层都会将前面所有层 concate 后作为输入。DenseBlock(类似于残差块的密集块结构)结构的 3 画法图如下所示:

可以看出 DenseNet 论文更侧重的是 DenseBlock 内各个卷积层之间的密集连接(dense connection)关系,另外两个则是强调每层的输入是前面所有层 feature map 的叠加,反映了 feature map 数量的变化。
CSPNet
CSPDenseNet 的一个阶段是由局部密集块和局部过渡层组成(a partial dense block and a partial transition layer)。

CSP 方法可以减少模型计算量和提高运行速度的同时,还不降低模型的精度,是一种更高效的网络设计方法,同时还能和 Resnet、Densenet、Darknet 等 backbone 结合在一起。
VoVNet
One-Shot Aggregation(只聚集一次)是指 OSA 模块的 concat 操作只进行一次,即只有最后一层(\(1\times 1\) 卷积)的输入是前面所有层 feature map 的 concat(叠加)。OSA 模块的结构图如图 1(b) 所示。

在 OSA module 中,每一层产生两种连接,一种是通过 conv 和下一层连接,产生 receptive field 更大的 feature map,另一种是和最后的输出层相连,以聚合足够好的特征。通过使用 OSA module,5 层 43 channels 的 DenseNet-40 的 MAC 可以被减少 30%(3.7M -> 2.5M)。
基于 OSA 模块构建的各种 VoVNet 结构参数表如下。

作者认为 DenseNet 用更少的参数与 Flops 而性能却比 ResNet 更好,主要是因为concat 比 add 能保留更多的信息。但是,实际上 DenseNet 却比 ResNet要慢且消耗更多资源。
GPU 的计算效率:
GPU特性是擅长parallel computation,tensor越大,GPU使用效率越高。- 把大的卷积操作拆分成碎片的小操作将不利于
GPU计算。 - 设计
layer数量少的网络是更好的选择。 - 1x1 卷积可以减少计算量,但不利于 GPU 计算。
在 CenterMask 论文提出了 VoVNetv2,其卷积模块结构图如下:

一些结论
- 当卷积层的输入输出通道数相等时,内存访问代价(
MAC)最小。 - 影响 CNN 功耗的主要因素在于内存访问代价 MAC,而不是计算量 FLOPs。
- GPU 擅长并行计算,Tensor 越大,GPU 使用效率越高,把大的卷积操作拆分成碎片的小操作不利于 GPU 计算。
- 1x1 卷积可以减少计算量,但不利于 GPU 计算。
参考资料
VGG/ResNet/Inception/ResNeXt/CSPNet论文- 深度学习论文: An Energy and GPU-Computation Efficient Backbone Network for Object Detection及其PyTorch
经典 backbone 总结的更多相关文章
- Backbone源码分析(一)
距离上一篇博客有一段时间了,期间各种琐事萦绕.最主要的一件是,当我差不多将整个dojo核心源码看完,惊讶的发现dojo1.*的设计以是老态龙钟之象,而我沉溺在dojo中太久,已经不知道前端世界变成了什 ...
- 前端MVC框架Backbone 1.1.0源码分析(一)
前言 如何定义库与框架 前端的辅助工具太多太多了,那么我们是如何定义库与框架? jQuery是目前用的最广的库了,但是整体来讲jQuery目的性很也明确针对“DOM操作”,当然自己写一个原生态方法也能 ...
- Conquer and Divide经典例子之汉诺塔问题
递归是许多经典算法的backbone, 是一种常用的高效的编程策略.简单的几行代码就能把一团遭的问题迎刃而解.这篇博客主要通过解决汉诺塔问题来理解递归的精髓. 汉诺塔问题简介: 在印度,有这么一个古老 ...
- Django+Tastypie作后端,Backbone作前端的TodoMVC
TodoMVC是各种js框架入门的比较经典的例子,详细可查看github地址https://github.com/tastejs/todomvc 接着上篇文章, 1,先在github上把backbon ...
- backbone库学习-model
backbone库的结构: http://www.cnblogs.com/nuysoft/archive/2012/03/19/2404274.html 本文所有例子来自于http://blog.cs ...
- 【再探backbone 01】模型-Model
前言 点保存时候不注意发出来了,有需要的朋友将就看吧,还在更新...... 几个月前学习了一下backbone,这段时间也用了下,感觉之前对backbone的学习很是基础,前几天有个园友问我如何将路由 ...
- angularjs backbone 集成requirejs 模块化
首先认识requirejs requirejs是个包加载器,核心功能是模块化管理,可以实现按需加载. 重点是明白 模块化不是按需加载. 模块化的意义: 是通过代码逻辑表明模块之间的依赖关系和执行顺序, ...
- Backbone Model——数据模型
Model是Backbone中所有数据模型的基类,用于封装原始数据,并提供对数据进行操作的方法,我们一般通过继承的方式来扩展和使用它. 如果你做过数据库开发,可能对ORM(对象关系映射)不会陌生,而B ...
- (转)经典收藏 50个jQuery Mobile开发技巧集萃
(原)http://www.cnblogs.com/chu888chu888/archive/2011/11/10/2244181.html 经典收藏 50个jQuery Mobile开发技巧集萃 ...
- 为什么MVC不是一种设计模式? ---比较Backbone和Ext4.x在MVC实现上的差异
为什么MVC不是一种设计模式? ---比较Backbone和Ext4.x在MVC实现上的差异 大漠穷秋 前言 圣人云:不想做妈咪的小姐不是好码农. 每一个码农的心中都有一个终极理想,那就是有一天不用再 ...
随机推荐
- MasaFramework -- 缓存入门与设计
概念 什么是缓存,在项目中,为了提高数据的读取速度,我们会对不经常变更但访问频繁的数据做缓存处理,我们常用的缓存有: 本地缓存 内存缓存:IMemoryCache 分布式缓存 Redis: Stack ...
- 齐博x1标签实例:调用多个圈子同时调用相关会员
看这一篇之前,请先看上一篇,因为他们有关联性比如要实现这样的效果 可以通过下面的代码可以实现 {qb:tag name="xxx" type="qun" row ...
- Android RecyclerView使用ListAdapter高效刷新数据
原文:Android RecyclerView使用ListAdapter高效刷新数据 - Stars-One的杂货小窝 我们都知道,当RecyclerView数据源更新后,还需要通过adapter调用 ...
- 8.websocket slef概念
self代表当前用户客户端与服务端的连接对象,比如两客户端发来了两个连接,我们可以把两个连接放在一起 # 定义全局变量 CONN_List = [] class LiveConsumer(Websoc ...
- C# Static关键词的使用
一.C#中类的方法分为静态方法和非静态方法 静态方法有Static关键词修饰 静态方法归类所有,而非静态方法归类的实例所有:静态方法无需类去实例化可直接调用 静态成员属于类所有,为各个类的实例所公用, ...
- 使用 JWT 生成 token
JWT 简介 JWT:Json Web Token 官网:https://jwt.io 优点:可生成安全性较高的 token 且可以完成时效性的检验(登陆过期检查) JWT 结构:(由官网获取) JW ...
- Gorm源码学习-数据库连接
1 前言 gorm源码地址: Gorm , 本文基于commit:cef3de694d9615c574e82dfa0b50fc7ea2816f3e 官方入门指南: Dosc 2 连接数据库代码示例 目 ...
- 多点DMALL × Apache Kyuubi:构建统一SQL Proxy探索实践
伴随着国家产业升级的推进和云原生技术成熟,多点 DMALL 大数据技术也经历了从存算一体到存算分离的架构调整变迁.本文将从引入 Kyuubi 实现统一 SQL Proxy 的角度讲述这一探索实践的历程 ...
- windows error LNK2019
温馨提示,请使用ctrl+F进行快速查找 ws2_32.lib error LNK2001: 无法解析的外部符号 __imp_htons error LNK2001: 无法解析的外部符号 __imp_ ...
- 【实战】Hadoop安装01-伪分布式-Pseudo
Hadoop安装-伪分布式-Pseudo 〇.所需资料 一.前置环境安装 1.包含内容 (1)安装 虚拟机安装.系统安装 (2)配置 ip.host.主机名配置 关闭防火墙及selinux SSH免密 ...