layout: post
title: 2D_Detection-模型加速(网络篇)
date: 2021-09-04 16:34:34.000000000 +09:00
categories: [算法篇]
tags: [CV, 综述]
mathjax: true


更多内容可访问个人博客:2D_detection检测综述

  • 前言
  • 详细介绍
    • 网络加速

      • SqueezeNet
      • MobileNet
      • ShuffleNet
      • OneNet
      • 网络剪枝

前言

深度学习网络的加速问题包含两部分内容:网络结构侧的加速和工程侧的加速。网络层面的加速主要从网络结构上进行优化,关注点在于网络的计算量和参数量上。

详细介绍

网络加速

对于图像检测领域来说,网络侧速度的瓶颈更多还是在于其Backbone上,所以很多网络加速Tricks都是基于Backbone开展的,以下介绍三种常用的轻量级网络:SqueezeNet,MobileNet,ShuffleNet。

从中可以了解轻量级网络设计上的一些通用策略。另外这里补充了另一个网络:OneNet,该网络主要探讨了物体检测的 去NMS 方案。最后,补充一种即插即用的网络加速策略:网络剪枝。

SqueezeNet

SqueezeNet于2017年发表于ICLR,当时发表时声称性能于AlexNet相近,但是模型参数量只有AlexNet的1/50。其核心结构为 Fire module ,整体网络基于该模块组合而成: 该模块包括两个部分: squeezeexpand

其中squeeze层的作用是通过1x1卷积进行通道降维,达到压缩的目的。然后expand层并行包含两类卷积:3x3和1x1卷积,其目的在于获得不同大小的感受野。最后再将expand层获得所有feature map进行concat得到最终的feature map输出。可以看到SqueezeNet的关键在于两个方面:

MobileNet

MobileNet是轻量化网络的经典之作,其关键在于提出了 可分离卷积 ,对于可分离卷积在2D_Detection-基本深度学习单元中有所介绍。

其核心在于将普通卷积分为两个部分: 深度卷积点卷积 ,其卷积方式演化为:先对输入的feature map(假设channel数为M)的每个channel进行单独的卷积操作,然后concat得到中间状态的featuemap,然后再通过点卷积(1x1xMxN)得到chnnel数为N的最终feature map。普通卷积和可分离卷积的计算量比值为KaTeX parse error: Undefined control sequence: \* at position 13: 1/N + 1/(D_k\̲*̲D_k)​​​​,DkD_kDk​​​​​对应的是深度卷积采用的卷积核大小(一般为3),因为N值一般较大,所以最终的计算量比值接近1/9。其核心结构图例如下:

当然采用可分离卷积还是有一定的精度损失,后续MobileNetV2,MobileNetV3也在V1基础上进行了一系列的优化,目的是维持其轻量化的前提下提升其精度,后续的提升手段包括: MobileNetV2:

MobileNetV3:

  • 精调网络结构:作者主要对尾部结构进行网络结构的调整,核心思想还是基于1X1卷积网络进行维度变化,减小feature map,从而降低计算量:

  • 引入SE模块:即插即用的模块,其核心是添加了通道的注意力模块。作者在引入该模块的适合采用了一定的技巧,减少SE模块的时间消耗:将SE模块放在深度卷积后,且现将池化后的channel特征通过fc缩小4倍然后再经过fc回去,再和深度卷积后的特征按照位相加:

  • 激活函数:核心是 sigmoid 激活函数较慢,采用 h-swish 激活函数,该函数基于ReLU实现,速度更快,兼容性更好些。

ShuffleNet

ShuffleNet系列论文包括两篇:ShuffleNetV1和ShuffleNetV2。个人认为ShuffleNet系列最大启发点包含两个部分:

  1. 提出了 Channel shuffle 的概念,且该操作可以基于常规张量操作实现,一定程度上提供了一个更轻量化的channel内特征融合的方案(对比基于1x1卷积的channel融合方案)。
  2. 从实际硬件推理角度(应该是GPU?)探讨了高性能网络设计的基本规则,有一定借鉴意义。

ShuffleNetV1的核心在于 Channel shuffle 概念的提出,在可分离卷积的基础上设计了更加轻量化的网络结构:通过1x1组卷积+Channel shuffle替换原始点卷积实现channel间的特征融合:

ShuffleNetV2其实一定程度上推翻了ShuffleNetV1的设计方案(个人观点),作者从模型推理角度发现同样的网络FLOP(单次推理计算次数)下,模型的推理速度也是不尽相同的,影响模型推理速度的还有两个关键指标:内存访问时间(Memory Access Cost, MAC)和网络并行度。基于此,作者提出了建立高性能网络的4个基本原则:

基于此,作者发现ShuffleNetV1存在一些不合理的设计,并以此设计了新的ShuffleNetV2结构:

OneNet

前文更多介绍Backbone层面上的网络加速策略, OneNet则是在检测网络层面设计了Non-NMS的网络检测方案,从整体方案角度其优势在于:

OneNet的核心在于其训练过程的样本匹配策略,即如何让网络学习到 one-to-one 的匹配策略。

OneNet的样本匹配策略基于 minimum cost 方法实现,具体实现是在模型训练进行样本匹配过程中先计算样本的loss值,然后基于loss计算cost,最后选取cost最小的样本作为match的对象。其cost定义为样本和gt的classfication loss和location loss之和:

作者在论文中提到classification loss是去掉NMS的关键,而类似Faster-RCNN/SSD/YOLO/FCOS等基于box IoU,point distance,object scale等,都只考虑了location cost。

网络剪枝

网络剪枝其实可以认为是一种通用的网络加速策略,一般用在网络方案确定后的网络加速。微软开源的NNI工具提高了一些常用模型剪枝和量化策略。

网络剪枝的原理在于深度模型的过度参数化,也可以认为是其过拟合的一种表现。网络剪枝按照原理上可以分为两类:一类是结构化剪枝;一类是非结构化剪枝:

结构化剪枝通常是高层次的模型裁剪,常见的层次有:Channel-level,Vector-level,Filter-level。个人认为其一定程度上依赖于经验,前文中一些网络结构上的设计一定程度也可以归于结构化剪枝。另外,基于NAS(Neural Architecture Search)的模型结构搜索通常也可以应用模型剪枝结构的搜索。

非结构化剪枝则是从更细粒度上进行模型权重的裁剪:将原本稠密的参数矩阵裁剪为更为稀疏的参数矩阵。其一般流程为:

通常来说,结构化剪枝能够带来明显的网络提速,但是可能会有精度损失(如果资源够的话,基于NAS的search方案通常更有效);而非结构剪枝不一定会带来精度损失,但是由于其稀疏矩阵的不连续性,在真实部署的时候不一定能提速。

2D_Detection-模型加速(网络篇)相关推荐

  1. 模型加速之轻量化网络

    模型加速之轻量化网络 当前物体检测结构大都依赖使用卷积网络进行特征提取,即 Backbone,通常使用 VGGNet.ResNet 等优秀的基础网络,但是这些网络往往计算量巨大,依赖这些基础网络的检测 ...

  2. 【模型加速】关于模型加速的总结

    概述 ● 模型加速的目标: a. Increase inference speed:加快推理速度(应用层面). b. Reduce model size:压缩模型. ● 关于模型的加速大致可以分为三个 ...

  3. 用软件可编程FPGA加速网络边缘的移动应用总结

    用软件可编程FPGA加速网络边缘的移动应用 Accelerating Mobile Applications at the Network Edge with Software-Programmabl ...

  4. 模型转换、模型压缩、模型加速工具汇总

    点击上方"计算机视觉工坊",选择"星标" 干货第一时间送达 编辑丨机器学习AI算法工程 一.场景需求解读   在现实场景中,我们经常会遇到这样一个问题,即某篇论 ...

  5. SIGIR‘22 推荐系统论文之图网络篇

    2022推荐系统论文梳理系列 推荐系统相关顶会整理 IJCAI'22 推荐系统论文梳理 ICML/ICLR'22 推荐系统论文梳理 WWW'22 推荐系统论文之序列推荐篇 WWW'22 推荐系统论文之 ...

  6. 大模型的1000+篇文章总结

    大模型的1000+篇文章总结 本文收集和总结了有关大模型的1000+篇文章,由于篇幅有限只能总结近期的内容,想了解更多内容可以访问:http://www.ai2news.com/, 其分享了有关AI的 ...

  7. Android面试题网络篇

    Android面试题网络篇,由本人整理汇总,后续将继续推出系列篇,如果喜欢请持续关注和推荐. 系列文章目录: Android面试题View篇 Android面试题进程篇 Android面试题线程篇 T ...

  8. 14种轻量级网络综述 — 主干网络篇

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨VincentLee 来源丨晓飞的算法工程笔记 编辑丨极市平台 导读 早期的卷积神经很少考虑参数 ...

  9. 【华为云 ModelArts-Lab AI实战营】第三期:图像分类 (III) 模型参数网络调优

    https://github.com/huaweicloud/ModelArts-Lab/issues/219 本期实战为图像分类第三期.本期实战,本期我们将会以 "VGG16模型" ...

最新文章

  1. Android安装apk
  2. H.264解码器ffmpeg完整优化代码(包括PC和Windows Mobile版本)
  3. 原码一位乘法器设计_数字IC校招基础知识点复习(七)——超前进位加法器、Wallace树、Booth乘法器...
  4. 我的docker随笔31:oracle数据库再次部署
  5. iOS NSString的常用用法
  6. bcd 初始化库系统卷失败_开源IP地址管理系统,告别传统IP统计方式(安装部署篇)
  7. linux设备驱动归纳总结(三):1.字符型设备之设备申请【转】
  8. mysql中修改表字段的类型长度_mysql中修改表字段名/字段长度/字段类型详解
  9. JDKAndroid下载安装
  10. LateX安装下载使用详细教程
  11. matlab 转子振动,转子—支承系统振动不平衡响应的MATLAB实现
  12. 第五次作业+度盘下载器
  13. python爬虫 爬取京东网页
  14. 2017 icpc 西安赛区 B.Coin(推公式+二项式定理)
  15. 【弹吉他必备的乐理知识】【2】节拍
  16. 重磅推荐,国内国外优秀的素材资源网站
  17. cmnet 和 cmwap 收费等区别
  18. svchost.exe占用内存过高解决办法
  19. 企业报表插件怎么用?
  20. 图像的高频信息和低频信息代表的含义(以奇异值分解实现图像压缩为例附实验说明)

热门文章

  1. boolean android.graphics.Bitmap.compress(android.graphics.Bitmap$CompressFormat, int, java.io.Output
  2. LeetCode.M62.不同路径
  3. 2018区块链顶尖论文及学者榜单:50个顶级学术团队,带你探索区块链学术研究最前沿...
  4. 百篇大计敬本年之系统篇《十》 —— 系统文件名长度限制
  5. 每个人的心里都有两头狼
  6. [WordPress] 隐藏 Featured Image 新手非程序方法
  7. AI+药物研发:人工智能赋能新药研发
  8. 软工网络15团队作业8——Beta阶段敏捷冲刺
  9. mirai 高效率 QQ 机器人框架
  10. wow服务器合并信息,《魔兽世界》台服合并部分服务器_网络游戏魔兽世界_新浪游戏_新浪网...