嵌入式AI简报 (2020-04-04)

关注模型压缩、低比特量化、移动端推理加速优化、部署

导读:本期19条。「新闻」部分三个最近开源的框架:清华大学计算机图形学组的Jittor、旷视动态图和静态图合一且训练推理一体的MegEngine(ARM部分6月开源)华为自动实现分布式并行训练的MindSpore,也期待今年上半年将要开源的OneFlow,华为最近也推出了基于完整解决方案的华为云ModelArts Pro
「论文」GAN压缩基于训练方案+NAS、信息保留的二值神经网络且落地性能和实用性俱佳的IR-Net、超越EfficientNet的RegNet。
「开源」Google发布了更轻量的EfficienctNet-Lite,百度飞桨发布视觉分割库PaddleSeg并可结合Slim工具做压缩,Android Valgrind工具等等。
「博文」仍旧是微信在小网络设计方面的最佳实践(是上期的前篇),以及两篇关于深度学习框架的灵魂和如何欣赏一个深度学习框架,非常值得阅读,有一篇是使用Arduino Cortex-M4基于TFLite做语音识别和手势识别。
硬件厂商这边,三星目前正与超微半导体公司(AMD)合作发新的定制GPU解决方案,把Radeon GPU技术应用到Exynos芯片中。但是,Exynos 990与骁龙865在CPU/GPU性能上差距明显,也导致数万网友联名请愿:要求三星停用Exynos处理器。不仅麒麟820,麒麟7系列将至,在5G上的爆发力不容小觑华为P40系列也发布了联发科技也发文大力PR自家天玑系列5G芯片搭载的AI处理器APU3.0,但我们却迟迟不见搭载天玑1000的手机。

业界新闻

  • 苹果A12Z处理器揭秘:A12X打开第八个隐藏GPU核心 | 半导体行业观察
    摘要:最近发布的iPad Pro 2020款配备了一颗特殊的A12Z处理器,这也是苹果第一次使用“Z”字母作为处理器型号的后缀,A12X处理器采用台积电7nm工艺制造,拥有多达100亿个晶体管,集成八核心CPU、七核心GPU、神经网络引擎,每秒运算高达五万亿次,还支持先进的机器学习。
    A12Z在芯片层面和A12X一样,区别主要是A12Z开启了隐藏的第八个GPU核心,也就是拥有八核心CPU、八核心GPU,图形性能因此有所提升。另外,A12Z还在A12X的基础上优化了性能控制器,增强了散热架构,CPU核心的频率也有可能更高。
  • 搭载5G SOC麒麟820的荣耀30S即将发布 | 电脑爱好者
    摘要:一颗SoC的性能几何,在很大程度上取决于制程工艺,工艺越先进,SoC就能更长时间满血运行,发热量还低,在同级别SoC中容易占据优势。据悉,麒麟820将基于台积电最成熟的7nm工艺制造,采用Cortex-A76架构的CPU,以及Mali-G77架构的GPU。同时,麒麟820还将集成华为自研的最新达芬奇架构NPU,ISP性能更强。
    Cortex-A76和Mali-G77的组合强吗?答案是还凑合。Cortex-A76是ARM在2018年发布的CPU核心(同期GPU为Mali-G76),而Mali-G77则是ARM在2019年发布的GPU核心(同期CPU为Cortex-A77),它们的组合属于跨代的混搭,没能用A77+G77的黄金搭档是麒麟820的最大遗憾之处。
    在中高端5G SoC中,目前只有联发科天玑1000L采用了A77+G77的组合,Exyno 980是A77+G76,联发科还未上市的天玑800则是A76+G77,后者和麒麟820的思路一样。
  • 如何看待3月25号开源的旷视深度学习框架天元MegEngine | 知乎
    地址:https://github.com/MegEngine/MegEngine
    摘要:高效的、灵活的 LocalConv/GroupLocalConv,任意图、全自动 sublinear memory,内存不够时进行碎片整理。然而,要想成为主流,就得解决一个tensorflow和pytorch没能解决的痛点,目前看来国内的情况都不是很乐观。
  • 如何评价清华大学发布的自研深度学习框架-计图(Jittor) | 知乎
    地址:https://github.com/Jittor/jittor
    摘要:实现了一个比较经典的DAG graph,以及在图上来做fusion和各种pass。从op的实现上,选择了细粒度的op,例如bcast,reduce,等等,然后通过这种方式来形成meta op,比如说convolution:https://github.com/Jittor/jittor/blob/master/notebook/meta_op.src.md
    1. 值得关注的一点是,在XLA的早期,也有过对于op粒度的探索,目前大家的一些结论是,常见的op,比如说convolution,gemm,如果用细粒度op来实现,然后这些细粒度op是在一个op graph当中来做jit的,对性能会是一个很大的挑战(除了在代码里面embed constant value,loop reordering等等)之外,很多关于计算的细节信息都丢失了,会对后面的fusion pass有很大的挑战。
    2. 现在一般的自动编译框架选择的方式其实是选择两层IR,一层做计算图DAG,一层做数学表达(比如说bcast,reduce,最典型的是Halide)。可能值得一看。
  • 如何看待 2020 年 3 月 28 日华为开源的深度学习框架 MindSpore | 知乎
    地址:https://gitee.com/mindspore/mindspore
    摘要:引用老师木的评价:Mindspore 带来了惊喜,在众所周知的难题上勇闯无人区,auto-parallel完成度很高,数据并行,模型并行和混合并行。好像我应该算在社区最多鼓吹这个概念,也比较早,但并没有发表论文,近些年Google Mesh-tensorflow, gpipe也都出了论文,之前MXNet团队的Wang Minjie也发过相关论文,斯坦福的FlexFlow等都曾讨论过相关思路,尽管有这些先行者,但完整的在框架内实现出来是非常不易的。Mindspore团队集合了大学教授,2012实验室编译、分布式系统方向造诣很深的架构师,最顶级的工程师团队,既谦逊又无畏,令人敬畏,只要是好的想法,都可以为我所用,如果一个问题很重要,还没有可模仿的先例,也一定不惜任何代价搞定,有人说Mindspore团队说“是一帮狠人”,可以说是非常高的评价了。Mindspore的代码不是那么美观,类似Google style,但细节上并没有严格执行,和Tensorflow一样不嫌麻烦的抽象,这种方式适合大规模协同研发,又一定程度上保证质量。

论文

  • [CVPR2020] GAN Compression:计算量减少20倍,生成效果不变,GPU、CPU统统能加速 | 量子位
    文章:https://arxiv.org/abs/2003.08936
    代码:https://github.com/mit-han-lab/gan-compression
    摘要:来自MIT、Adobe研究院和上海交通大学的团队琢磨出了一个通用压缩框架。将CycleGAN的计算量减少了20倍以上,将GauGAN的计算量减少了9倍,简笔画到实物图的pix2pix也能驾驭,效果却未差分毫。
    压缩GAN,并不像压缩其他CNN模型那样容易。主要原因:GAN的训练动力学高度不稳定,生成器与鉴别器之间存在巨大的结构差异,让我们很难使用现有的CNN压缩算法。为了解决这个问题,作者提出了针对有效生成模型量身定制的训练方案,并通过神经架构搜索(NAS)进一步提高压缩率。
  • [CVPR2020] IR-Net:信息保留的二值神经网络,落地性能和实用性俱佳 | 机器学习研究组
    文章:https://arxiv.org/abs/1909.10788
    代码:https://github.com/htqin/IR-Net
    摘要:不同于以往二值神经网络大多关注量化误差方面,本文首次从统一信息的角度研究了二值网络的前向和后向传播过程,为网络二值化机制的研究提供了全新视角。
    本文首次从信息流的角度研究了网络二值化,提出了一种新的信息保持网络(IR-Net):(1)在前向传播中引入了一种称为Libra参数二值化(Libra-PB)的平衡标准化量化方法,最大化量化参数的信息熵和最小化量化误差;(2) 在反向传播中采用误差衰减估计器(EDE)来计算梯度,保证训练开始时的充分更新和训练结束时的精确梯度。
    IR-Net提供了一个全新的角度来理解二值神经网络是如何运行的,并且具有很好的通用性,可以在标准的网络训练流程中进行优化。作者使用CIFAR-10和ImageNet数据集上的图像分类任务来评估提出的IR-Net,同时借助开源二值化推理库daBNN进行了部署效率验证。
    在ARM设备上进行了先进二值化算法效率验证,显示了IR-Net部署时的优异性能和极高的实用性,有助于解决工业界关注的神经网络二值化落地的核心问题。
  • [CVPR2020] RegNet: Designing Network Design Spaces 的整体解读(一篇更比六篇强) | 知乎
    文章:https://arxiv.org/pdf/2003.13678.pdf
    摘要:各种自媒体的PR标题就是:超越EfficientNet…,所以我这里转一篇知乎解读。
    文章作者实验中发现的几个关于性能的打脸结论:
    1. 无论模型多大,20个block的深度是最合适的。大网络越深越好是不对的;
    2. bottleneck ratio设置成1是最好的;
    3. width multiplier设置成2.5是最优质的。
      剩下的初始网络宽度,group数量,宽度的增长斜率,这些随着模型增大而增加会是最佳选择。再就是,activation定义为所有conv层的输出张量的大小,flpos跟速度之间的关系明显没activations好。

开源项目

注:每条内容前缀为github地址的仓库拥有者和仓库名<repo_owner>/<repo_name>

  • Google发布EfficientNet-Lite,有效提高视觉模型精度 | TensorFlow
    地址:https://github.com/google/automl/tree/master/efficientdet
    摘要:2019 年 5 月,Google 发布了一系列名为 EfficientNet 的图像分类模型,参数和算力消耗实现了最前沿 (SOTA) 的精度。这次的 EfficientNet-Lite (GitHub,TFHub)模型在 TensorFlow Lite 上已针对 CPU、GPU 和 EdgeTPU 进行性能优化,让边缘设备也能利用 EfficientNet 的强大性能,并提供五个不同版本,让用户能够按照自己的需求从低延迟/小模型 (EfficientNet-Lite0) 到高精度 (EfficientNet-Lite4) 之间进行灵活选择。
    其中计算量最大的版本,纯整型量化(Integer-Only Quantized EfficientNet-Lite4) 的 EfficientNet-Lite4,在 ImageNet 上可达到 80.4% 的 Top-1 精度,同时可实时运行在 Pixel 4 CPU (30 毫秒/图像)上。
    除了量化模型外,为了解决异构硬件问题,对原本的 EfficientNets 进行了如下改进:
    1. 删除 Squeeze-and-Excitation 网络,因在这类设备上支持欠佳;
    2. 用 RELU6 替代所有 swish 激活函数,从而显著提升训练后量化的质量;
    3. 放大模型时固定住其 stem 与 head 模块,以减少缩放后模型的大小与计算量。
  • PaddlePaddle/PaddleSeg: PaddleSeg图像分割库再添新武器,新增压缩部署方案FLOPs降低51% | 飞桨PaddlePaddle
    摘要:在某些场景中,语义分割模型在实际部署时,可能会由于耗时、体积等多方面因素导致模型无法满足要求。此时模型压缩通常是解决内存占用和速度问题的有效手段。PaddleSlim为PaddleSeg提供了多种分割模型的压缩方案,以L1 Pruning裁剪方案为例,该方案通过裁剪掉卷积核来减小模型体积并降低模型计算复杂度。
  • sunShuShu/ValgrindHelperForAndroid: A easy way to use valgrind on Android device.
    摘要:现在有很多安卓应用因为性能或安全方面原因,会通过JNI调用原生代码。排查原生的C、C++代码时可以使用Valgrind。Valgrind工具包括Memcheck(用于检测C和C++中与内存相关的错误)、Cachegrind(缓存分析器)、Massif(堆分析器)和其他几种工具。Valgrind在Linux开发中应用广泛,但在安卓开发中用起来比较麻烦,官方文档和网上的资料也比较少。这就是这个工具诞生的原因。
  • jpinedaa/Voice-ML: MobileNet trained with VoxCeleb dataset and used for voice verification
    摘要:Model Training folder contains code for processing and training of tensorflow model. App folder contains android app that uses converted tensorflow model for verification.
  • xiangweizeng/mobile-lpr: Mobile-LPR 是一个面向移动端的准商业级车牌识别库
    摘要:以NCNN作为推理后端,使用DNN作为算法核心,支持多种车牌检测算法,支持车牌识别和车牌颜色识别。特点如下:
    1. 超轻量,核心库只依赖NCNN,并且对模型量化进行支持;
    2. 多检测,支持SSD,MTCNN,LFFD等目标检测算法;
    3. 精度高,LFFD目标检测在CCPD检测AP达到98.9,车牌识别达到99.95%, 综合识别率超过99%;
    4. 易使用,只需要10行代码即可完成车牌识别;
    5. 易扩展,可快速扩展各类检测算法。

博文

  • 在Arduino上基于TFLite使用机器学习 | TensorFlow
    摘要:Arduino 是一个专注于让每个人都能使用微控制器进行应用开发的开源平台和社区。本教程中使用的开发板配置为运行频率 64 MHz,1MB 闪存和 256 KB RAM 的 Arm Cortex-M4 微控制器。本文先讲了如何在 Arduino 开发板上安装一个神经网络,并识别简单语音指令。之后,作者将会在 Colab 中使用 TensorFlow 为 Arduino 训练自定义手势识别的模型。
  • 如何欣赏一个深度学习框架 | 知乎
    摘要:深度学习框架发展到今天,有些功能已经变成常规需求了,譬如易用,高效,完备(算子、模型、配套工具链、文档、案例),一个新的框架在这些方面应该没有明显的短板。一个后出现的框架要追求成功,仅仅没有短板还不够,还必须有长板,独门功法,有超越于其它框架的地方,或者其它框架根本做不到,或者很难做到,只有这样,才有可能先从细分市场切开一个小口,进而站稳脚本。
  • 深度学习框架的灵魂 | 知乎
    摘要:2020年是中国深度学习框架年,清华Jittor,旷视MegEngine,华为Mindspore已经接连在3月份开源,一流科技的Oneflow也在为开源做着紧锣密鼓的准备。绝大多数人认为深度学习框架已陷入思路枯竭,没有什么花样可做了,但创新势不可挡,总还是有新的思路出现。框架已进入疯狂弥补自身短板的白热化竞争,同时,有杀手锏创新的话,有可能一剑封喉。国内研发的框架虽然个性还不够强,但已经实现了局部突破,未来可期。
  • 微信「扫一扫识物」 的背后技术揭秘 | 腾讯技术工程
    摘要:上一期简报,分享了《揭秘微信「扫一扫」识物为什么这么快》这篇文章,本文作为上一篇的前传。
    微信扫码已经深入人心,从识别特定编码形态的图片(二维码/小程序码/条形码/扫翻译),到精准识别自然场景中商品图片(鞋子/箱包/美妆/服装/家电/玩具/图书/食品/珠宝/家具/其他商品),有哪些难点需要去克服? 扫物以图片(视频)作为媒介,聚合微信内部有价值的生态内容如电商,百科,资讯进行展示, 会催生哪些新的落地场景?本文将细细道来。
  • 详细记录超轻量中文OCR LSTM模型ncnn实现 | 知乎
    摘要:前阵子ouyanghuiyu的OCR一条龙项目用到了LSTM,效果不错。本文作者用作实验模型把LSTM搞出来提升识别准确性,一方面算是填上ncnn LSTM的坑。ncnn没有batch维度,跑LSTM模型需要一些特殊手法,作者把LSTM和OCR在ncnn上的实现过程写出来,作为参考。
  • 通过vmstat学习CPU和进程性能监控 | 人人都是极客
    摘要:性能监控和优化是一个庞大而又严谨的体系,要深入研究只能通过原理、实现和工具三方面结合,本文只是管中窥豹学习了CPU调度和进程管理,希望对大家的运维工作有所帮助。虽然文中以Linux Server端为例,但是也同样适用于Android和ARM Linux。

往期回顾

2 0 2 0
2020-04-04 2020-03-19 2020-03-02 2020-02-16
2020-01-27 2020-01-06 2019-12-17 2019-12-02
2 0 1 9
2019-11-30 2019-11-18 2019-10-31 2019-10-17
2019-10-03 2019-09-16 2019-08-30 2019-08-15
2019-07-30 2019-07-15 2019-06-29 2019-06-17
2019-05-30 2019-05-15 2019-04-27 2019-04-13
2019-03-31

wechat_qrcode

往期回顾:见公众号主菜单【历史消息】


知识共享许可协议
本作品采用知识共享署名-相同方式共享 4.0 通用许可协议进行许可。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

2020-04-26@Bi-weekly 上一篇
2020-03-19@Bi-weekly 下一篇