CNN:经典Backbone和Block

本文详细介绍了CNN的经典结构,包括AlexNet、VGG、Inception、ResNet系列,以及Efficientnet、RegNet和ConvNeXt等网络设计,探讨了网络的参数量、计算量和内存占用,分析了网络结构如Stage和Block的演变,最后提到了轻量化网络MobileNet系列和ShuffleNet的设计思想。
摘要由CSDN通过智能技术生成

一、网络的属性参数

选择网络backbone时除了考虑网络结果精准度外,还需要根据计算平台的性能约束(算力、内存、带宽),以及期望的网络推理帧率,选取合适的网络backbone,这就需要考察网络的属性指标:参数量、计算量、占用Memory。

1. 参数量

主要指网络权重的参数量,对于CNN网络,主要是卷积核、BN层、全连接层的参数量。

  • 卷积核:设Nin, Nout, K分别表示in_channels,out_channels,kernel_size,则参数量为:Nin*K*K*Nout + Nout (权重+bias
  • BN层:2*Nin
  • 全连接层:Lin*Lout + Lout(设Lin,Lout分别表示输入和输出向量的长度)

在实操中,pytorch可以统计model.parameters()中参数量获得网络的参数的数量。

参考:神经网络参数量的计算:以UNet为例 - 知乎

2. 计算量

一次卷积操作的计算量为:Nin*(K*K+K*K-1) +  Nin-1  , 其中,卷积的乘法为K*K,卷积核的加法K*K-1,Nin-1为跨通道的加法数。

需要进行的卷积次数:Hout*Wout。 设输入分辨率为Hin*Win,经过卷积后输出分辨率为

Hout=[Hin+2*padding[0]-dilation[0]*(kernel_size[0]-1)-1]/stride[0]+1,

Wout=[Win+2*padding[1]-dilation[1]*(kernel_size[1]-1)-1]/stride[1]+1,

再考虑需要的输出通道数Nout和Batch数B,

卷积的计算量为:B*Nout*Hout*Wout*(Nin*2K*K-1+Nin-1)

举例:当输入为224x224时,对于ResNet-50,计算量约4.5GFLOPs;对于ResNet-200, 计算量约15GFLOPs。

核算整个网络的计算量后,可以知道模型对应的计算量是多少floating-point operations (FLOPs)。随后结合计算平台的算力是多少FLOPS(floating-point operations per second)可以大概推算模型的帧率(当然,实际还涉及到模型的优化部署问题以及带宽等瓶颈是的实际帧率会低于该评估值)。

模型计算量评估可参考:神经网络中参数量以及计算量的计算 - 知乎

这里需要注意,评估模型的计算量单位是FLOPs,注意是小s,表示的是模型需要进行多少次浮点运算。评估计算平台的算力单位是FLOPS,表示的是计算平台在单位时间可以进行多少次浮点运算。根据模型推理的帧率需求fps,以及计算平台的物理算力FLOPS,可以计算模型的计算量FLOPs,三者之间关系:FLOPs= FLOPS/fps。

参考:FLOPS、TOPS和FLOPs的区别_BRUCE_WUANG的博客-CSDN博客_tops和flops

3. Memory

占用memory的网络要素包括:

  • 各层的feature map(占用主要的memory)
  • 网络的权重(根据float32占用4bytes可以折算上面的权重所占用的memory)
  • 训练过程需要在考虑梯度占用内存

参考:神经网络参数量、数据量计算 - leizhao - 博客园

二、网络结构

一般而言,一个网络backbone包括多个Stages,每个Stage包含多个Block。

Stage是指卷积提取特征中,feature map的size是逐级降低的,一个feature map分辨率之间的所有网络结构叫做一个Stage;

Block是指用于构建网络的基本单元,每个block包含卷积层、pooling层等基本操作。

论文中网络结构会创造或优化Block,并搭建一个或多个Backbone。

1. 越来越深的网络

以ImageNet 2012~2017年(2017年是最后一届)冠军网络代表了深度神经网络的发展趋势,2012~2014年结果可参见论文(2015,Imagenet large scale visual recognition challenge),2016~2017年结果可参见链接:ImageNet历年冠军和相关CNN模型 - PilgrimHui - 博客园  

AlexNet

AlexNet(2012, Imagenet classification with deep convolutional neural networks)是2012年ImageNet的SOTA,通过CNN方法取得的性能远超过传统机器学习手动提取的特征,使得神经网络方法成为主流。其主要贡献是验证了深度神经网络在大规模数据集的性能。对后来网络的主要影响包括:

  • 使用ReLU激活函数,相比于sigmoid和tanh而言,训练更快,并防止梯度弥散。
  • 训练中提出了dropout正则化方法防止过拟合。

AlexNet共8层,是当时最深层的网络。结构如下:

VGG

VGG(2014, Very deep convolutional networks for large-scale image recognition)是2014年ImageNet的LOC任务的SOTA。VGG使用2个3x3的kernel,感受野达到5x5,使用3个3x3的k

  • 7
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuyuelongfly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值