一、参数数量和理论计算量

1、定义

  • 参数数量(params):关系到模型大小,单位通常为M,通常参数用 float32 表示,也就是每个参数占4个字节,所以模型大小是参数数量的 4 倍
  • 理论计算量(FLOPs)
    • 是 floating point operations 的缩写(注意 s 小写),可以用来衡量算法/模型的复杂度,这关系到算法速度,大模型的单位通常为 G,小模型单位通常为 M
    • 通常只考虑乘加操作(Multi-Adds)的数量,而且只考虑 CONV 和 FC 等参数层的计算量,忽略 BN 和PReLU 等等。一般情况,CONV 和 FC 层也会忽略仅纯加操作 的计算量,如 bias 偏置加和 shotcut 残差加等,目前技术有 BN 的 CNN 可以不加 bias

2、计算公式

假设卷积核大小为 K× Kw​,输入通道数为 Cin x Cout,输出特征图的宽 W 和高 H,忽略偏置。

  • CONV 标准卷积层:

    • 参数量就是kernel*kernel*channel_input*channel_output,卷积核的大小x通道数量x卷积核的个数
    • ,输入通道数等于一个卷积核的通道数,输出通道数=卷积核的个数
    • 计算量:kernel*kernel*next_featuremap_height*next_featuremap_wight*channel_input*channel_output
  • FC 全连接层(相当于 k=1,输入输出都不是二维图像,都是单个点):

    • 参数量等于计算量,因为输入输出都不能使二维平面,而是向量
    • ,C相当于一个一张图片展成一条线上的所有点,也就是所有的像素点

参数量取决于显存大小,计算量要求芯片的floaps(gpu的运算能力)

二、MobileNetV1: Efficient Convolutional Neural Networks for Mobile Vision Applications

1、能够减少参数数量和计算量的原理

深度可分离卷积的使用

  • 在进行 depthwise 卷积时只使用了一种维度为in_channels的卷积核进行特征提取(没有进行特征组合
  • 在进行 pointwise 卷积时只使用了output_channels 种维度为in_channels 1*1 的卷积核进行特征组合,普通卷积不同 depth 层的权重是按照 1:1:1…:1的比例进行相加的,而在这里不同 depth 层的权重是按照**不同比例(可学习的参数)**进行相加

  • 参数数量由原来的 --》p2 = F*F*in_channels*1 + 1*1*in_channels*output_channels参数量减小为原来的p2/p1,当F=3的时候,大概为1/9
    • 深度卷积参数量=卷积核尺寸 x 卷积核通道数1 x 卷积核个数(就是输入通道数);
    • 点卷积(普通卷积)参数量=卷积核尺寸1x1 x 卷积核通道数就是输入通道数 x 卷积核的个数(即输出通道数)
  • Note: 原论文中对第一层没有用此卷积,深度可分离卷积中的每一个后面都跟 BN 和 RELU
  • Global Average Pooling 的使用:这一层没有参数,计算量可以忽略不计
  • 用 CONV/s2(步进2的卷积)代替 MaxPool+CONV:使得参数数量不变,计算量变为原来的 1/4 左右,且省去了MaxPool 的计算量
  • Note:采用 depth-wise convolution 会有一个问题,就是导致 信息流通不畅 ,即输出的 feature map 仅包含输入的 feature map 的一部分,在这里,MobileNet 采用了 point-wise(1*1) convolution 帮助信息在通道之间流通

2、MobileNetV1 中引入的两个超参数

Width Multiplier(α \alphaα): Thinner Models

Resolution Multiplier(ρ \rhoρ): Reduced Representation

3、标准卷积和深度可分离卷积的区别

三、MobileNetV2:Inverted Residuals and Linear Bottlenecks

1、主要改进点

  • 引入残差结构,先升维(先1x1卷积,输出特征图的通道数增加)再降维(再3x3和1x1),增强梯度的传播,显著减少推理期间所需的内存占用(Inverted Residuals
  • 去掉 Narrow layer(low dimension or depth) 后的 ReLU,保留特征多样性,增强网络的表达能力(Linear Bottlenecks
  • 网络为全卷积的,使得模型可以适应不同尺寸的图像;使用 RELU6(最高输出为 6)激活函数,使得模型在低精度计算下具有更强的鲁棒性

MobileNetV2 building block 如下所示,若需要下采样,可在 DWise 时采用步长为 2 的卷积;小网络使用小的扩张系数(expansion factor),大网络使用大一点的扩张系数(expansion factor),推荐是5~10,论文中 t=6 t = 6t=6

2、和 MobileNetV1 的区别

3、和 ResNet 的区别

MobilNnet的更多相关文章

随机推荐

  1. SyntaxError Non-ASCII character '\xe5' in file

    环境: windows7 Python 2.7.16 在源码中添加注释之后报错如下: (WeChat) E:\WorkHome\Wechat>python firstBlood.py Trace ...

  2. 【LeetCode算法】LeetCode初级算法——字符串

      在LeetCode初级算法的字符串专题中,共给出了九道题目,分别为:反转字符串,整数反转,字符串中的第一个唯一字符,有效的字母异位词,验证回文字符串,字符串转换整数,实现strStr(),报数,最 ...

  3. "SetDestination" can only be called on an active agent that has been placed on a NavMesh. 解决办法

    1.设置了 navmesh之后 要bake 也就是烘焙之后 才有效果 2.在unity 中 window->navigation     4.基本上问题应该得以解决:    

  4. HTTPie:一个不错的 HTTP 命令行客户端

    转自:http://top.jobbole.com/9682/ HTTPie:一个不错的 HTTP 命令行客户端 HTTPie (读aych-tee-tee-pie)是一个 HTTP 的命令行客户端. ...

  5. luogu P4756 Added Sequence(凸包+思维)

    一眼望去不会. 考虑问题中的\(f(i,j)=|\sum_{p=i}^{j}​a_p​ |\)的实际意义. 其实就是前缀和相减的绝对值. \(f(i,j)=|\ sum[j]-sum[i-1]\ |\ ...

  6. HDU1867 - A + B for you again

    Generally speaking, there are a lot of problems about strings processing. Now you encounter another ...

  7. MyBatis中的大于号小于号表示

    可以使用转义字符把大于号和小于号这种直接替换掉: select* from table where '字段1'>=10怎么表示,问题来啦 xml转义可以使用 根据这个规则上面的sql写法应该变成 ...

  8. java的数组index[]方括号内是可以进行算数运算的

    java的数组index[]方括号内饰可以进行算数运算的 如: String[] stringArray = testString.split("\\."); System.out ...

  9. 在Eclipse中搭建Dagger和Dagger2使用环境

    眼下Dagger有两个版本号,一个是square的Dagger1.x,另外一个是由google主导与squre联合开发的Dagger2. 本文介绍一下在Eclipse中搭建Dagger和Dagger2 ...

  10. 多校第二场 1004 hdu 5303 Delicious Apples(背包+贪心)

    题目链接: 点击打开链接 题目大意: 在一个周长为L的环上.给出n棵苹果树.苹果树的位置是xi,苹果树是ai,苹果商店在0位置,人的篮子最大容量为k,问最少做多远的距离可以把苹果都运到店里 题目分析: ...