点击上方“计算机视觉工坊”,选择“星标”

干货第一时间送达

作者丨ChaucerG

编辑丨集智书童

本文提出了一种基于MKLDNN加速策略的轻量级CPU网络,即PP-LCNet,它提高了轻量级模型在多任务上的性能,对于计算机视觉的下游任务,如目标检测、语义分割等,也有很好的表现。

1简介

随着模型特征提取能力的提高以及模型参数和FLOPs数量的增加,在基于ARM架构的移动设备或基于x86架构的CPU设备上实现快速推理变得困难。在这种情况下,已经提出了许多优秀的Mobile网络,但由于MKLDNN的限制,这些网络的速度在启用MKLDNN的Intel CPU上并不理想。

在本文中,作者重新思考了在Intel-CPU上设计网络的轻量级模型元素。作者特别考虑以下三个基本问题。

  1. 如何在不增加延迟的情况下促进网络学习更强的特性展示。

  2. 在CPU上提高轻量级模型精度的要素是什么?

  3. 如何有效结合不同的策略在CPU上设计轻量级模型。

本文的主要贡献是总结了一系列在不增加推理时间的情况下提高精度的方法,以及如何将这些方法结合起来以获得更好的精度和速度的平衡。

在此基础上,提出了设计轻量级CNN的几个一般原则,为其他研究人员构建轻量级CNN提供了新的思路CPU设备。

此外,该方法可以为神经结构搜索研究人员在构建搜索空间时提供新的思路,从而更快地获得更好的模型。

2相关工作总结

2.1 手工设计的架构

VGG展示了一种简单而有效的构建深度网络的策略:用相同的维度堆叠模块。

GoogLeNet构造了Inception block,它包含了4个并行运算:1x1卷积,3x3卷积,5x5卷积和max pooling。GoogLeNet让卷积神经网络变得足够轻,然后越来越轻的网络出现。

MobileNetV1用depthwise and pointwise convolutions代替了标准卷积,大大减少了模型的参数和FLOPs数量。

MobileNetV2的作者提出了Inverted block,进一步减少了模型的FLOPs,同时提高了模型的性能。

ShuffleNetV1/V2通过channel shuffle进行信息交换,减少了网络结构不必要的开销。

GhostNet的作者提出了一种新的Ghost模块,可以用更少的参数生成更多的特征图,从而提高模型的整体性能。

2.2 神经网络结构搜索

随着GPU硬件的发展,主要关注点已经从手工设计的架构转向了自适应地对特定任务进行系统搜索的架构。NAS生成的网络大多使用与MobileNetV2类似的搜索空间,包括EfficientNet、MobileNetV3、FBNet、DNANet、OFANet等。

MixNet提出在一层中混合不同核大小的深度卷积。NAS生成的网络依赖于手工生成的块,如“BottleNeck”、“Inverted-block”等。该方法可以减少神经结构搜索的搜索空间,提高搜索效率,并有可能提高整体性能。

3本文方法

虽然有许多轻量级网络在基于ARM的设备上的推断速度很快,但很少有网络考虑到Intel CPU上的速度,特别是在启用了MKLDNN之类的加速策略时。

许多提高模型精度的方法在ARM设备上不会增加太多的推理时间,但是当切换到Intel CPU设备时,情况会有所不同。本文总结了一些在不增加推理时间的情况下提高模型性能的方法。下面将详细描述这些方法。

作者使用MobileNetV1提到的DepthSepConv作为基本块。该块没有shortcut方式之类的操作,因此没有concat或elementwise-add之类的附加操作,这些操作不仅会降低类的推理速度模型,而且对小模型也不会提高精度。

此外,该块经过Intel CPU加速库的深度优化,推理速度可以超过其他轻量级块,如 inverted-block或shufflenet-block。将这些块堆叠起来形成一个类似于MobileNetV1的BaseNet。将BaseNet和一些现有的技术结合在一起,形成一个更强大的网络,即PP-LCNet

3.1 更好的激活函数

众所周知,激活函数的质量往往决定着网络的性能。由于网络的激活函数由Sigmoid变为ReLU,网络的性能得到了很大的提高。近年来,出现了越来越多超越ReLU的激活函数。当EfficientNet使用Swish激活函数表现出更好的性能后,MobileNetV3的作者将其升级为HSwish,从而避免了大量的指数运算。从那时起,许多轻量级网络也使用这个激活函数。作者还将BaseNet中的激活函数从ReLU替换为HSwish,性能有了很大的提高,而推理时间几乎没有改变。

3.2 将SE Block放在适当的位置

自SE-Block被提出以来,它已经被大量的网络所使用。该模块还帮助SENet赢得了2017年ImageNet分类竞赛。它在权衡网络通道以获得更好的特性方面做得很好,它的速度改进版本也用于许多轻量级网络,如MobileNetV3。

但是,在Intel cpu上,SE模块增加了推理时间,所以不能将其用于整个网络。事实上作者做了大量的实验和观察,当SE模块位于网络的末端时,它可以起到更好的作用。因此,只需将SE模块添加到网络尾部附近的模块中。这带来了一个更好的精度-速度平衡。与MobileNetV3一样,SE模块的2层激活函数分别为ReLU和HSigmoid。

3.3 更大的卷积核

卷积核的大小常常影响网络的最终性能。在MixNet中,作者分析了不同大小的卷积核对网络性能的影响,最终在网络的同一层中混合了不同大小的卷积核。但是这样的混合降低了模型的推理速度,所以作者尝试在单层中只使用一种大小的卷积核,并确保在低延迟和高精度的情况下使用大的卷积核。

实验发现,类似于SE模块的位置,取代3x3卷积内核只有5x5卷积内核的末端网络将实现替换的影响几乎所有层的网络,所以只在网络的末端做了这个替换操作。

3.4 Larger dimensional 1×1 conv layer after GAP

PP-LCNet中,经过GAP后的网络输出维数很小。而直接添加最终的分类层会失去特征的组合。为了使网络具有更强的拟合能力,在最后的GAP层之后增加了一个1280维尺寸为1×1 conv(相当于FC层),这将允许更多的模型存储,而不增加推断时间。

4实验

4.1 图像分类

表2显示了PP-LCNet在不同尺度下的top-1和top-5的验证精度和推断时间。此外,采用SSLD精馏法可大大提高模型的精度。表3显示了PP-LCNet与最先进模型的比较。与其他模型相比,PP-LCNet显示出强大的竞争力。

4.2 目标检测

对于目标检测任务,使用PaddleDection3开发的轻量级PicoDet作为Baseline方法。表4显示了PP-LCNet和MobileNetV3为Backbone的目标检测结果。与MobileNetV3相比,PP-LCNet大大提高了COCO上的mAP和推理速度。

4.3 语义分割

使用MobileNetV3作为Backbone进行比较。如表5所示,PP-LCNet-0.5x表现更好MobileNetV3-large-0.5x在mIoU上提高了2.94%,但推断时间减少了53ms。与 larger models相比,PP-LCNet也具有较强的性能。以PPLCNet-1x为Backbone时,模型的mIOU比MobileNetV3-large-0.75x提高了1.5%,但推理时间缩短了55ms。

4.4 消融实验

1、SE模块在不同位置的影响:

SE模块是通道间的注意力机制,可以提高模型的准确性。但如果盲目增加SE模块的数量,则会降低模型的推理速度,因此如何在模型中适当添加SE模块是值得研究和探索的。通过实验发现SE模块会对网络的末端产生较大的影响。如表7所示仅在网络中不同位置添加2个SE模块的结果。该表清楚地显示,对于几乎相同的推断时间,添加最后两个块更有利。因此,为了平衡推理速度,PP-LCNet只在最后两个块中添加了SE模块。

2、Large-kernel在不同位置的影响:

虽然Large-kernel可以提高精度,但在网络的所有位置都添加它并不是最好的方法。通过实验,给出了正确添加Large-kernel的一般规律。表8显示了5x5深度卷积所添加的位置。1表示DepthSepConv中的深度卷积核为5x5, 0表示DepthSepConv中的深度卷积核为3x3。从表中可以看出,与添加SE模块的位置相似,在网络尾部添加5x5卷积也更具竞争力。PP-LCNet选择了表的第3行中的配置。

3、不同技术的影响

在PP-LCNet中使用了4种不同的技术来提高模型的性能。表9列出了不同技术对PP-LCNet的累积增长,表6列出了减少不同模块对PP-LCNet的影响。从这2个表中可以看出,H-Swish和large-kernel可以在几乎不增加推断时间的情况下提高模型的性能。添加少量的SE模块可以进一步提高模型的性能。GAP后使用更大的FC层也将大大提高精度。同时,也许因为这里涉及的矩阵比较大,使用dropout策略可以进一步提高模型的准确性。

5参考

[1].PP-LCNet: A Lightweight CPU Convolutional Neural Network

本文仅做学术分享,如有侵权,请联系删文。

下载1

在「计算机视觉工坊」公众号后台回复:深度学习,即可下载深度学习算法、3D深度学习、深度学习框架、目标检测、GAN等相关内容近30本pdf书籍。

下载2

在「计算机视觉工坊」公众号后台回复:计算机视觉,即可下载计算机视觉相关17本pdf书籍,包含计算机视觉算法、Python视觉实战、Opencv3.0学习等。

下载3

在「计算机视觉工坊」公众号后台回复:SLAM,即可下载独家SLAM相关视频课程,包含视觉SLAM、激光SLAM精品课程。

重磅!计算机视觉工坊-学习交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有ORB-SLAM系列源码学习、3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、深度估计、学术交流、求职交流等微信群,请扫描下面微信号加群,备注:”研究方向+学校/公司+昵称“,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进去相关微信群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列三维点云系列结构光系列、手眼标定、相机标定、orb-slam3知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

圈里有高质量教程资料、答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  

快到起飞 | PP-LCNet在CPU上让模型起飞,精度提升且比MobileNetV3+快3倍相关推荐

  1. PPLcnet和YOLO的碰撞,真的能在cpu上快到起飞?

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨陈TEL 来源丨GiantPandaCV [导语]这是一篇论证博客,前几天,baidu发布了PP ...

  2. 如何在CPU上优化GEMM矩阵乘法

    如何在CPU上优化GEMM矩阵乘法 How to optimize GEMM on CPU (TL;DR) TVM 提供抽象接口,允许用户分别描述算法和算法的实现组织(所谓的调度).通常,在高性能调度 ...

  3. 如何在 CPU 上优化 GEMM

    如何在 CPU 上优化 GEMM (TL;DR) TVM 提供抽象接口,允许用户分别描述算法和算法的实施组织(所谓的调度).通常,在高性能调度中编写算法,会破坏算法的可读性和模块化.尝试各种看似有前途 ...

  4. 如何在CPU上优化GEMM(上)

    如何在CPU上优化GEMM(上) (TL:DR)TVM提供了抽象接口,用户分别描述算法和算法的实现组织(所谓的调度).通常,在高性能调度中编写算法会破坏算法的可读性和模块性.尝试各种看似有希望的时间表 ...

  5. FastFormers:实现Transformers在CPU上223倍的推理加速

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要5分钟 Follow小博主,每天更新前沿干货 作者:Parth Chokhra 编译:ronghuaiyang 导读 使用多头注意力的Tran ...

  6. 多核CPU上python多线程并行的一个假象(转)

    转自:http://www.cnblogs.com/skying555/p/6527189.html GIL 与 Python 线程的纠葛 GIL 是什么东西?它对我们的 python 程序会产生什么 ...

  7. CPU上跑到 33 FPS 的简单轻量级人体姿态估计网络

    点击我爱计算机视觉标星,更快获取CVML新技术 在姿态估计算法中,微软开发的 SimpleBaseline 是精度高而又轻量级的典范,昨天一篇论文Simple and Lightweight Huma ...

  8. 在VB中如何让线程或进程在指定的CPU上运行

    代码如下: Option Explicit Private Declare Function WTSEnumerateProcesses Lib "wtsapi32.dll" Al ...

  9. 操作系统应该如何在多CPU上调度工作?

    本章将介绍多处理器调度(multiprocessor scheduling)的基础知识.由于本章内容相对较深,建议认真学习并发相关的内容后再读. 过去很多年,多处理器(multiprocessor)系 ...

  10. 在英特尔 CPU 上加速 Stable Diffusion 推理

    点击蓝字 关注我们,让开发变得更有趣 前一段时间,我们向大家介绍了最新一代的 英特尔至强 CPU (代号 Sapphire Rapids),包括其用于加速深度学习的新硬件特性,以及如何使用它们来加速自 ...

最新文章

  1. 简单01背包 POJ3211 Washing Clothes 多种衣服分别dp
  2. linux关于文件夹的知识,Ubuntu 7.10 系统文件夹相关知识
  3. java中multiply用法_java中BigDecimal加减乘除基本用法
  4. 5g与edge ai_使用OpenVINO部署AI Edge应用
  5. JQuery Datatables Ajax dataSrc的使用
  6. 新漏洞可导致西门子 PLCs 遭远程攻击
  7. 玉米叶片病害识别与分类的优化密集卷积神经网络模型
  8. 基于稀疏大规模矩阵的多目标进化算法简介
  9. Sublime Text 3下载-汉化-插件配置
  10. VS 2019 插件开发
  11. AP3128 DC/DC转换器 小封装,高性能 异步升压10白光LED驱动
  12. 实验3:搜索算法求解8数码问题
  13. 基于redis幂等机制,保证优惠券不会重复发放-13
  14. html 调用safari,如何从托管在Web浏览器控件中的HTML中打开Safari中的链接?
  15. java-commen判断一个数据是否存在于列表中
  16. 计算机编程玫瑰花,c语言实现玫瑰花的方法
  17. MKS PI V1.0使用说明书
  18. 中国土地利用现状遥感监测数据(1985-2020年)
  19. jQuery实现对file对象的压缩
  20. PyTorch 编写自定义数据集,数据加载器和转换

热门文章

  1. mac+nginx+php70+mysql环境搭建
  2. swift 3.0 协议笔记
  3. POJ 1637 混合图欧拉回路
  4. [备查]SPQuery 返回所有的项目(查询不生效)的问题
  5. Jquery—JQuery对select的操作(01)
  6. vue 跨域请求js添加代码
  7. BigDecimal的保留位数和四舍五入的方法
  8. C++ minidump类
  9. 每天一道剑指offer-重建二叉树
  10. 安装linux-mysql-yum方式