经典 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实现上的差异 大漠穷秋 前言 圣人云:不想做妈咪的小姐不是好码农. 每一个码农的心中都有一个终极理想,那就是有一天不用再 ...
随机推荐
- Go_gin权限验证
权限管理 Casbin是用于Golang项目的功能强大且高效的开源访问控制库. 1. 特征 Casbin的作用: 以经典{subject, object, action}形式或您定义的自定义形式实施策 ...
- vue中将验证表单输入框的方法写在一个js文件中(表达式验证邮箱、身份证、号码、两次输入的密码是否一致)
文章目录 1.实现的效果 2.编写的js文件(这里写在了api文件下) 3.在vue页面中引入(script) 4.页面代码 1.实现的效果 20220606_154646 2.编写的js文件(这里写 ...
- golang中的socket编程
0.1.索引 https://waterflow.link/articles/1664591292871 1.tcp的3次握手(建立连接) 客户端的协议栈向服务器端发送了 SYN 包,并告诉服务器端当 ...
- python实现多接口翻译软件
本实验用pyqt5做了一个小软件,里面使用了市面上主流的6种翻译软件接口:谷歌.百度.有道.金山词霸.腾讯.必应,界面如图所示: 以下是程序代码: import time,sys,os,hashlib ...
- eDP接口简介
1. eDP背景介绍 随着显示分辨率的越来越高,传统的VGA.DVI等接口逐渐不能满足人们的视觉需求. 随后就产生了以HDMI.DisplayPort为代表的新型数字接口,外部接口方面HDMI占据 ...
- 前端监控系列4 | SDK 体积与性能优化实践
背景 字节各类业务拥有众多用户群,作为字节前端性能监控 SDK,自身若存在性能问题,则会影响到数以亿计的真实用户的体验.所以此类 SDK 自身的性能在设计之初,就必须达到一个非常极致的水准. 与此同时 ...
- 九、kubernetes命令行工具kubectl
为了方便在命令行下对集群.节点.pod进行管理,kubernetes官方提供了一个管理命令:kubectl kubectl作为客户端CLI工具,可以让用户通过命令行对Kubernetes集群进行操作. ...
- FastAPI + tortoise-orm基础使用
更改sqlite为mysql from tortoise import Tortoise import asyncio async def init(): user = 'root' password ...
- Spring三级缓存解决循环依赖
前提知识 1.解决循环依赖的核心依据:实例化和初始化步骤是分开执行的 2.实现方式:三级缓存 3.lambda表达式的延迟执行特性 spring源码执行逻辑 核心方法refresh(), popula ...
- 【k8s连载系列】2. k8s整体架构
# 一.Kubernetes的整体架构 学习k8s,最终目的是为了部署应用,部署一个完整的k8s, 就要知道k8s的组成.k8s主要包含两大部分: 中间包含三个绿色包的是master服务器. 下面是n ...