首页 > 其他分享 >经典 backbone 总结

经典 backbone 总结

时间:2023-01-04 15:33:46浏览次数:60  
标签:总结 VGG ResNeXt 卷积 backbone ResNet 经典 所示 GPU

目录

VGG

VGG网络结构参数表如下图所示。

VGG

ResNet

ResNet 模型比 VGG 网络具有更少的滤波器数量和更低的复杂性。 比如 Resnet34FLOPs3.6G,仅为 VGG-19 19.6G18%

注意,论文中算的 FLOPs,把乘加当作 1 次计算。

ResNetVGG 的网络结构连接对比图,如下图所示。

resnet

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

resnet网络参数表

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

Inceptionv3

常见的一种 Inception Modules 结构如下:

Inception模块

Resnetv2

作者总结出恒等映射形式的快捷连接和预激活对于信号在网络中的顺畅传播至关重要的结论。

ResNeXt

ResNeXt 的卷积block 和 Resnet 对比图如下所示。

resnext的卷积block和resnet的对比图

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

resnext的结构参数和resnet的对比图

Darknet53

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

darknet53

DenseNet

作者 Gao Huang2018 年发表的论文 Densely Connected Convolutional Networks

在密集块(DenseBlock)结构中,每一层都会将前面所有层 concate 后作为输入DenseBlock(类似于残差块的密集块结构)结构的 3 画法图如下所示:

3种DenseNet结构画法

可以看出 DenseNet 论文更侧重的是 DenseBlock 内各个卷积层之间的密集连接(dense connection)关系,另外两个则是强调每层的输入是前面所有层 feature map 的叠加,反映了 feature map 数量的变化。

CSPNet

**CSPDenseNet 的一个阶段是由局部密集块和局部过渡层组成(a partial dense block and a partial transition layer)**。

Figure3几种不同形式的CSP

CSP 方法可以减少模型计算量和提高运行速度的同时,还不降低模型的精度,是一种更高效的网络设计方法,同时还能和 ResnetDensenetDarknetbackbone 结合在一起。

VoVNet

One-Shot Aggregation(只聚集一次)是指 OSA 模块的 concat 操作只进行一次,即只有最后一层($1\times 1$ 卷积)的输入是前面所有层 feature map 的 concat(叠加)OSA 模块的结构图如图 1(b) 所示。

VoVNet

OSA module 中,每一层产生两种连接,一种是通过 conv 和下一层连接,产生 receptive field 更大的 feature map,另一种是和最后的输出层相连,以聚合足够好的特征。通过使用 OSA module543 channelsDenseNet-40MAC 可以被减少 30%3.7M -> 2.5M)。

基于 OSA 模块构建的各种 VoVNet 结构参数表如下。

各种VoVNet结构

作者认为 DenseNet 用更少的参数与 Flops 而性能却比 ResNet 更好,主要是因为concatadd 能保留更多的信息。但是,实际上 DenseNet 却比 ResNet要慢且消耗更多资源。

GPU 的计算效率:

  • GPU 特性是擅长 parallel computationtensor 越大,GPU 使用效率越高。
  • 把大的卷积操作拆分成碎片的小操作将不利于 GPU 计算。
  • 设计 layer 数量少的网络是更好的选择。
  • 1x1 卷积可以减少计算量,但不利于 GPU 计算。

在 CenterMask 论文提出了 VoVNetv2,其卷积模块结构图如下:

VoVNetv2

一些结论

  • 当卷积层的输入输出通道数相等时,内存访问代价(MAC)最小。
  • 影响 CNN 功耗的主要因素在于内存访问代价 MAC,而不是计算量 FLOPs。
  • GPU 擅长并行计算,Tensor 越大,GPU 使用效率越高,把大的卷积操作拆分成碎片的小操作不利于 GPU 计算。
  • 1x1 卷积可以减少计算量,但不利于 GPU 计算。

参考资料

标签:总结,VGG,ResNeXt,卷积,backbone,ResNet,经典,所示,GPU
From: https://blog.51cto.com/armcvai/5988651

相关文章

  • Ansible 状态管理相关知识总结【转】
    前言就像所有服务器批量管理工具(puppet有DSL,salt有state)一样,ansible也有自己的状态管理组件,叫做playbook。所有这些类似的概念的东西都是让你用一种更简单的语言(而......
  • 森哥的代码Demo的总结
    permute()函数:permute()函数其实是对矩阵的块行列进行交换LSTM模型后增加DENSE(全连接)层的目的是什么?LSTM主要用于处理变长序列,就是说输入的长度是可变的。而全连接层......
  • Cadence Allegro贴片和插件元器件封装制作流程总结
    目录​​1.0805电阻封装的制作​​​​1.1计算焊盘尺寸​​​​1.2制作焊盘(用于生成*.pad)​​​​1.2封装制作(生成*.dra)​​​​1.3设置参数、栅格grid和原点​​​......
  • Python中的时间序列数据操作总结
    时间序列数据是一种在一段时间内收集的数据类型,它通常用于金融、经济学和气象学等领域,经常通过分析来了解随着时间的推移的趋势和模式Pandas是Python中一个强大且流行的......
  • 秋招总结
    先说一下结果中兴(燕郊)(n-0.5)*12第一年没年终好像荣耀(搞计算机视觉的一个部门)(n+3)*16华为(上海无线)(n+4)*16 滴滴(啥地图部门,说了好几次都没听清)(n+5)......
  • JAVA问题总结之28--读取某目录下所有文件
    JAVA问题总结之28–读取某目录下所有文件packagejava9231;importjava.io.File;publicclassforReadNFile{publicstaticvoidmain(String[]args){//TOD......
  • JAVA问题总结之27--创建100个文件
    JAVA问题总结之27–创建100个文件:packagejava9231;importjava.io.File;importjava.io.IOException;publicclassforCreateNFile{publicstaticvoidmain(String[]......
  • Scala学习5之scala与java的不同之总结1
    1.scala不同声明变量的具体类型,只需要声明是var还是val,即变量或不变量,由编译器自动判断。而java需要具体声明,比如Int,String2.scala函数声明返回值是声明在后面,而且可以不......
  • JAVA问题总结之22--Arraylist集合的操作
    JAVA问题总结之22--Arraylist集合的操作:packagecom.atguigu.java1;importjava.util.ArrayList;importjava.util.List;importorg.junit.Test;publicclassTestList{......
  • Scala学习6之scala与java的不同之总结2-重写override
    scala与java的不同之总结21.重写  scala:overridedefgetAge(){}java:@overridepublicIntgetAge(){}2.scala可以使用private[this]来更细化限定权限,private[this]可以......