MobileNet V1算法介绍记录

注:仅供自己学习记录

轻量化网络

从2015年开始机器的图片分类准确率超过人眼,随着逐渐发展到了2017年准确率已经很厉害,所以轻量化网络开始被关注

轻量化网络是需要部署在一些硬件设备上的模型,他不仅需要考虑识别的准确率,还要考虑搭载设备的计算量和内存等,所以要尽可能的缩减网络所需要的的计算量和参数量。例如无人驾驶、机器人、安防摄像头等本地边缘实时计算

边缘计算是部署在本地,不需要实现连接云服务器的设备,设备在本地就要进行计算和得出结果,不需要网络延迟、网络传输,也可以做到保护个人隐私。同时边缘终端设备的计算力很弱,需要做到端云协同

image-20220105162115180

image-20220105162335089

根据贾扬清的博士论文可以看到,神经网络在训练和运行时,GPU和CPU被占用最多的是卷积层的运算

image-20220105162827798

而且卷积层的运算量和时间是随着Batch Size的增大变的越来越大(全连接层的计算量后期被全局平均池化代替)

image-20220105162944350

计算机的能耗去了哪里?

从下图表中我们可以看到,加法的能耗最少,乘法的能耗是加法的4-5倍,读取内存的能耗最高,是前面两种操作的几百倍

图中也有读取内存的步骤,过度读取会导致能量消耗,浪费电能是一方面,另一方面会导致芯片的散热,所以要减少能耗

image-20220105163134053

节省能耗可以通过减少参数量、调整结构(让结构更规则)等方式来实现

轻量化网络可以分为四个方面进行学习

从参数量、计算量、内存访问量、耗时、能耗、碳排放、CUDA加速、对抗学习角度分析

        1)压缩已训练好的模型:知识蒸馏、权值量化、剪枝(权重剪枝和通道剪枝)、注意力迁移

        2)直接训练轻量化网络:SqueezeNet、MobileNetV1、V2、V3、ShuffleNet、Xception、EfficientNet、NasNet、DARTS

        3)加速卷积运算:im2col+GEMM、Winograd、低秩分解

        4)硬件部署:TensorRT、Jetson、Tensorflow-slim、Tensorflow-lite、Openvino

轻量化网络在任何一个研究领域都可以发挥自己相应的左右,例如NLP、计算机视觉、对抗学习等

现有模型的精度、计算量和参数量展示

图中可以看到不同模型结构的不同指标,图像中左上角的模型相对精度和参数量更小

image-20220105200010039

不同模型的参数量效率:单位参数量对最终性能准确率的贡献

image-20220105200400687

不同batch_size的计算时间

Depthwise separable convolution (深度可分离卷积)

常规卷积

卷积的过程

动图:2DConv on RGB image

image-20220105201014042

image-20220105201540217

使用128个卷积核扫描输入,再将扫描结果叠加起来,作为下一层的输入,那么下一层卷积核的通道数就要是128

image-20220105201749093

使用相同通道数的卷积核扫描,进行逐个元素的相乘求和,放在后面的输出

image-20220105202037100

image-20220105202110091

深度可分离卷积

之前的卷积是一次卷积包含三通道或者多通道,深度可分离卷积是每个卷积核负责各自的通道,之后再将每个卷积核生成的feature map融合在一起

image-20220105202358505

image-20220105202539416

image-20220105202624776

image-20220105202710879

之后再使用1x1卷积对融合后的特征图扫描,这样可以进行跨层(通道)的融合

image-20220105202921926

综上可知,深度可分离卷积是先进性depth_wise(深度卷积),在进行point_wise(逐点卷积)

先关注长宽方向的信息,后面只关注跨通道的信息

image-20220105203108330

image-20220105203516468

MobileNetV1原文的图

image-20220105203740057

image-20220105203841254

类似结构的Xception将两种卷积过程颠倒

image-20220105203939415

image-20220105204804755

注:本质上二者的顺序对模型影响不大

而且深度可分离卷积也可以看作是Group卷积的“及至版本”,Group卷积是每个Group负责一部分通道的卷积计算,而深度可分离改进到到了每个通道都有一个卷积负责

各类卷积图参考博客:https://towardsdatascience.com/a-comprehensive-introduction-to-different-types-of-convolutions-in-deep-learning-669281e58215

image-20220105204700714

同样思想的卷积核拆分还出现在InceptionV3中,使用的空间可分离卷积,但是没有起到轻便的作用

image-20220105205021188

深度可分离卷积参数量和计算量分析

传统卷积一次的乘法计算量和参数量

image-20220105205259530

深度可分离卷积

网络中还有两个控制网络大小的参数

image-20220105205530728

二者参数量相比较可以得出,如果都使用常见的3x3,深度可分离网络的参数量和计算量是传统卷积的1/9

image-20220105205928204

MobileNet

MobileNetV1网络结构

image-20220105210258553

image-20220105213829546

MobileNetV1性能分析

大部分计算集中在1x1卷积中,计算核心就是加速1x1卷积

image-20220105210555314

怎样加速1x1卷积?

1x1卷积的作用:

        1)卷积核数量大于扫描数据通道数,升维度

        2)卷积核数量小于扫描数据通道数,降维度

image-20220105210653722

加速1x1卷积运算我们可以将卷积运算变成矩阵运算,现有的科学计算法已经可以高效的运行计算

关键点是:Im2col高效GEMM(后面进行详细介绍)

加速的过程如下:

image-20220105211619346

1-分多次将卷积结果变成列

image-20220105211719830

2-将卷积运算变成矩阵运算,使用GEMM加速

image-20220105211748478

1x1卷积的优势是它本身就是一个向量,不需要进行Im2col,直接可以使用矩阵乘法

MobileNet的性能

作者和许多经典网络性能进行对比,可以看出MobileNet的参数量大大减小且精度影响不大

image-20220105212326713

准确率和计算量二者之间的关系,会在精度达到一个界限时参数量猛增,再提升精度需要消耗更多能量

image-20220105212655694

在目标检测、人脸识别、以图搜地等领域有较好效果

代码实现

用代码实现论文中的两种卷积结构,传统卷积深度可分离卷积

基于keras框架的代码(部分)

image-20220105213356740

Im2col(image to column 为了加速卷积)

矩阵乘法运算可以被高度优化加速,有很多现成算法和工具包

将卷积运算变成矩阵乘法

将感受野(立方体)拉成一列,后面多个卷积核的感受野同样进行这样的操作

因为不同感受野之间有重叠,不同感受野(列)很多元素重复,占用大量内存

image-20220105220652693

将卷积核拉成行

image-20220105220911007

然后将行和列相乘,就可以得到拉伸数据和拉伸卷积核扫描的结果,在进行Reshape变成需要的形状

image-20220105221110519

整个流程图

image-20220105223902809

变成数字计算

image-20220105224011777

三通道示意图,三通道矩阵图需要分别进行拉伸,对应的卷积也同样要进行拉伸

image-20220105224134547

将拉伸卷积核与拉伸图像进行矩阵运算,再根据需求进行Reshape

image-20220105224348119

三通道

image-20220105224432665

也可以将卷积核拉成列,数据拉成行

image-20220105224943265

caffe代码怎样进行计算

知乎上caffe的作者亲自回答了该问题:在 Caffe 中如何计算卷积? - 知乎

image-20220105225223709

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值