张祥雨博士:高效轻量级深度模型的研究和实践 - AI procon大会

前言

张祥雨,现任旷视研究院主任研究员、基础模型组负责人,带领组里30多位年轻人为旷视寻找下一个兼具学术和产业价值的算法模型。2017年博士毕业于西安交通大学。期间参加西交大-微软亚洲研究院联合培养博士生项目,师从孙剑博士和何恺明博士。目前团队研究方向包括高性能卷积网络设计、AutoML与自动化神经网络架构搜索、深度模型的裁剪与加速等。已在CVPR/ICCV/ECCV/NIPS/TPAMI等顶级会议/期刊上发表论文二十余篇,获CVPR 2016最佳论文奖,Google Scholar引用数38000+。多次获得顶级视觉竞赛如ImageNet 2015、COCO 2015/2017/2018冠军。代表作包括ResNet、ShuffleNet v1/v2等,均在业界得到广泛应用。

人物轶事:
张祥雨----孙剑的第一个深度学习博士

跟旷视研究院院长孙剑的经历一样,张祥雨也是一名“土生土长”的西安交大人,从本科到博士都在西安交大就读,在大三那年(2011年),张祥雨拿下了美国大学生数学建模竞赛(MCM)特等奖提名奖(Finalist),当时创下西安交大参加该项竞赛以来历史最好成绩。凭借这次获奖经历,张祥雨获得了后来到微软亚洲研究院实习的资格。获得实习资格的有三人,但最终只有一个人能留下。当时还在微软亚洲研究院担任首席研究员的孙剑给这三人出了一道题:用一个月的时间,将人脸检测的速度提升十倍。这个任务现在来看比较容易实现,但当时还没有引入深度学习,张祥雨就靠着对模型调参,用了三天左右的时间完成任务,孙剑看过之后当场决定留下张祥雨。张祥雨之前并没有做科研的经验,这次有意思的实习考验让他初尝到做科研的成就感。他也意识到走学术路线,需要到产业界去锻炼。到了微软之后,张祥雨加入了视觉计算组,这个小组里的每一位成员名字放在当下来看都是业界大牛:小组负责人孙剑,组员包括何恺明、危夷晨、代季峰、袁路、曹旭东、任少卿等。在组里,张祥雨尤其擅长编程,并且还是唯一一个会CUDA人。刚加入小组时,就凭借这一技之长成为多个项目的核心成员,比如帮助危夷晨做Head Dance游戏,为袁路做浏览器图片布局等。2013年,张祥雨面临一个重要选择:博士课题。当时受微软亚洲研究院工作的一些影响,张祥雨倾向于做人脸这个领域。但是导师孙剑果断让他去做深度学习,“孙老师认为Deep learning以后必然会火,他一直非常有前瞻力,我很相信他”。
于是,张祥雨就成了孙剑组里第一个做深度学习的博士生。

基础模型是现代视觉识别系统中一个至关重要的关注点。基础模型的优劣主要从精度、速度或功耗等角度判定,如何设计模型应对复杂应用场景是非常重要的课题。

基础模型是最为关键的点有两层含义:第一,一个好的基础模型对整个系统的性能提升是决定性的,从精度或者从准确率来说优秀的基础模型起到了本质的作用。第二,从模型的实用性来说,搞深度学习的都知道基础模型通常占据了视觉系统的绝大部分运行时间,也吃了绝大多数运行功耗和存储。不管从精度还是从速度或功耗的角度,基础模型都是视觉系统的核心部分。

近日,由新一代人工智能产业技术创新战略联盟(AITISA)指导,鹏城实验室、北京智源人工智能研究院支持,专业中文 IT 技术社区 **** 主办的 2019 中国 AI 开发者大会(AI ProCon 2019)在北京举办。在计算机视觉技术专题,旷视研究院主任研究员、基础模型组负责人张祥雨主要从轻量级架构、模型裁剪、模型搜索三大思路讲述了高效轻量级深度模型的研究和实践。

高效模型设计的基本思路

  • 轻量级架构
  • 模型裁剪
  • 模型搜索
  • 低精度量化
  • 知识蒸馏
  • 高效实现

张祥雨博士:高效轻量级深度模型的研究和实践 - AI procon大会

轻量级架构

轻量级架构是模型设计最简单,也是最彻底的做法。在具体实践中,通常我们会综合考虑设备的运行时间和任务特性进行统筹,综合使用多种设计思想。这里我们总结出了两个轻量级模型设计的总体原则:

张祥雨博士:高效轻量级深度模型的研究和实践 - AI procon大会
张祥雨博士:高效轻量级深度模型的研究和实践 - AI procon大会

第二个设计原则。我们认为要想设计一个高效的模型不能只考虑理论复杂度,还需要尽可能在设备上有更高的实际执行速度。例如对于很多模型,虽然理论上卷积运算占据了大部分复杂度,但是实际执行时其他操作也会占用大量时间。影响实际执行速度的因素不仅有理论计算量,还有计算/访存比、模块并行度、设备特性/实现效率等。
张祥雨博士:高效轻量级深度模型的研究和实践 - AI procon大会
对于如何提高实际执行速度问题上,第一,我们在设计卷积的时候可以让它的输入输出通道数量尽可能接近,在相同的计算量下可以做到访存量最小。第二,需要谨慎使用分组卷积,因为分组卷积大幅提升了内存访问量,还增加了高效实现的难度。第三,要设法减少网络碎片。碎片化操作一大特点是计算量少访存量大,不太容易实现非常高的并行,所以这种操作也要尽可能减少。第四,逐元素运算不可忽视。虽然算理论复杂度的时候不会计算在内,但是运行的时候也会带来很多开销。
张祥雨博士:高效轻量级深度模型的研究和实践 - AI procon大会

基于这些原则大家再重新审视一下学术界的模型,我们可以看到很多模型并不适合落地使用。它们普遍违反了高效执行的准则,并不适合在目前大部分设备上使用。那么什么样的结构在设备上更为高效呢?
张祥雨博士:高效轻量级深度模型的研究和实践 - AI procon大会
张祥雨博士:高效轻量级深度模型的研究和实践 - AI procon大会
前面回顾了模型设计的几个指导原则。模型设计是不是只有这几个原则呢?当然不是了,模型设计是非常细碎的,在实际业务中针对不同平台和不同业务场景都需要设计。对于不同平台来说,我们公司的很多产品横跨云端芯三大平台。在云上我们会选择结构规则、并行度很高的大模型,比如最原始的ResNet,虽然已经是比较老的模型,但是它在GPU上运行效率非常高,主要在云上使用。在端上靠ShuffleNet系列,可以平衡精度和速度。而在芯片上我们自己有相关的芯片研发,会选择量化后的模型进行部署。

张祥雨博士:高效轻量级深度模型的研究和实践 - AI procon大会
前面说的是平台。而对于任务来说,我们需要针对不同的任务设计不同的模型。举个例子,前不久我们提出了ThunderNet模型,达到了detection最大的速度和精度的平衡。它的设计要点是专门考虑了detection模型的具体要求:首先在骨干网络上继续使用ShuffleNet v2,这是一个修改版,针对detection的具体要求进行了专门的优化。detection head部分则使用了一个LightHead R-CNN。相比于业界广泛使用的SSD系列,ThunderNet实现了数量级的提升,无论是速度还是精度都超过了目前最好的水平。

张祥雨博士:高效轻量级深度模型的研究和实践 - AI procon大会
对于语义分割任务,我们也提出了高性能模型DFANet,它是我们在手机拍摄这条产品线的模型经过整理归纳之后发表的。它的设计要点包括:首先,在骨干网络上使用了Xception,因为语义分割需要非常大的感受野,Xception的结构更适合做语义分割的任务。其次,我们通过多尺度特征融合和特征复用实现高性能。

张祥雨博士:高效轻量级深度模型的研究和实践 - AI procon大会
这里给大家展示一些结果。相对于业界广泛使用的模型,DFANet实现了精度和速度的全面提升。这个网络已经落地到我们的手机算法产品中,用于手机端的单摄虚化。它的技术原理非常简单,就是一个语义分割,分割出前景和背景,只要你分割得足够准确,我们就可以模拟出一种长焦摄像头的背景虚化效果来突出前景。听起来很简单,但是实现难度很大,主要原因是需要在手机这样一个低功耗的设备上实现非常高速度的实时分割,而且分割得必须非常精准。当然这里还配合了一些其他的技术。

前面我说的大部分模型已经开源,这里给出一些资源。

ShuffleNet v1
https://github.com/megvii-model/ShuffleNet-Series/tree/master/ShuffleNetV1

ShuffleNet v2
https://github.com/megvii-model/ShuffleNet-Series/tree/master/ShuffleNetV2

ShuffleNet v2+
https://github.com/megvii-model/ShuffleNet-Series/tree/master/ShuffleNetV2

ShuffleNet v2 Large
https://github.com/megvii-model/ShuffleNet-Series/tree/master/ShuffleNetV2.Large

模型搜索

前面说了轻量级架构的设计思路。那么在高效轻量级模型设计领域还有哪些思路?目前最火的是使用模型搜索,利用机器来代替人工自动完成模型设计。过去,轻量级模型设计是一个非常依靠经验的劳动,我前面提到的所有项目背后都有一大批非常优秀的工程师,他们凭借对模型、算法和业务的理解,对每个模型分别进行非常细致的调优,才形成了一个性能非常高的模型和算法。
张祥雨博士:高效轻量级深度模型的研究和实践 - AI procon大会

我们不禁要问,既然轻量级模型设计如此复杂,有没有更简单、通用的方法,使用统一的自动化算法代替人工来完成如此高要求的模型设计任务?近年发展出来的AutoML技术被寄予厚望。AutoML旨在使用一个机器学习算法设计另一个机器学习系统。传统机器学习里面有很多超参数,进入神经网络时代以后超参数就更多了,比如对于网络结构要怎么连才最好,这是搜索空间非常大的超参。针对它我们应用AutoML,这个叫神经网络架构搜索(NAS)。此外架构超参数如通道数等也是搜索的关键点。其他的像数据增广方法、**函数等也都是可以搜的。

这里列出了NAS和人工架构的一些性能对比,可见自动化模型在性能上有明显优势。2017年谷歌的NASNet算法首次打败人工,从此AutoML和NAS一发而不可收。从文献上大家也可以看出,2017年AutoML爆发之后,如今有超过200篇文章讨论了AutoML和架构搜索。

我简单说一下AutoML和NAS在业务上的应用。模型搜索的文章在学术界文章很多,但是在目前应用上尚有很多问题,其中主要问题可以抽象为这三个关键词,一个是效率,一个是性能,一个是灵活性。在性能方面,我们在业务中通常不能只对其中的某一块进行优化,要对整个算法流程进行总的优化;怎么实现复杂环境下的搜索是非常难的问题。灵活性方面,现在基于梯度的搜索算法在灵活性方面非常差,例如,很多任务要求算法在某个型号的设备上的执行时间不能太长,功耗不能太高,加入这些限制后,我们发现大部分搜索算法的使用还是非常不方便的。
张祥雨博士:高效轻量级深度模型的研究和实践 - AI procon大会

我们总结和对比了学术界的主要算法在工业落地上的主要优缺点。大家会发现目前没有一种算法适合实际使用的需求。
张祥雨博士:高效轻量级深度模型的研究和实践 - AI procon大会

鉴于此,我们提出了一种更适合应用落地的算法叫Single Path One-Shot NAS,对效率、准确度、灵活性进行了很大程度上的改良,使得搜索流程大幅简化,很多时候只需要付出比正常训练一个模型2倍左右的时间,就可以得到精度好很多,并且可以在具体设备上高效执行的模型。
张祥雨博士:高效轻量级深度模型的研究和实践 - AI procon大会

大家会发现这个算法还是非常通用的,既可以进行一个网络结构单元的搜索,也可以进行通道数的搜索,还可以进行混合精度量化的搜索。该算法在我们云端芯全系列的模型上都可以实现非常高效率的搜索。并且和之前SOTA相比,不管是搜索速度还是最终得到的模型精度都有比较明显的提升。

我给出一个应用的具体案例:用它做一个物体检测模型的搜索。物体检测模型包含很多关键的结构单元,比如图像预处理、FPN特征融合等。
这里给出一个对骨干网络搜索的例子。Detection模型的骨干网络搜索是一个非常困难的任务,因为每次我们改了基础模型,后面的特征就都变了,需要重新训练一遍,反复迭代需要非常长的时间。我们大致测算了一下,采样类似谷歌NASNet这种搜索方法,把算法运行完成需要将近一年时间,无法实现有效的搜索。但是使用了前面介绍的Single-Path One-Shot搜索算法之后,模型搜索只需要走一遍就可以高效完成,只需要进行一次完整运行就可以实现显著的效果提升。
张祥雨博士:高效轻量级深度模型的研究和实践 - AI procon大会

这是搜索过程中的图示,随着迭代的进行大模块会退到后面,小模块会移到前面,这符合我们对检测系统的认知。这张图展示了系统性能,大家会发现相对于业界普遍使用的基础模型如ResNet等,我们搜出的DetNAS模型在相同的计算量下实现了性能极大程度的提升。

张祥雨博士:高效轻量级深度模型的研究和实践 - AI procon大会

总结一下,目前在轻量级模型设计这个领域,基于模型搜索的方法已经成为了目前的主流,也是最重要的研究方向之一。在实践中我们发现模型搜索对设备适配问题,尤其是寻找对于具体设备上运行时间最快、功耗最少的模型,相对于人工有非常大的优势。但是模型搜索也有很多问题,搜索空间现在还是依靠人工设计,搜索空间的设计非常依赖经验,并且没有好的指导原则,这是未来的研究方向和难点。

模型裁剪

张祥雨博士:高效轻量级深度模型的研究和实践 - AI procon大会

模型裁剪也是设计轻量级模型的非常重要的思想。一句话概括就是先设计一个大的再砍下来。在模型裁剪中有很多种方法,比如可以使用稀疏连接、低秩分解、通道裁剪等。其中通道裁剪是最有效的方法,算法相对简单,容易得到规整的结构,方便硬件的实现。
张祥雨博士:高效轻量级深度模型的研究和实践 - AI procon大会
我们2017年提出了一个通道裁剪的方法,可以实现对通道的自动化选择和参数重建。训练完一个模型以后,不需要进行重新训练,我们的通道裁剪算法只需要很短时间就可以自动生成比之前快2到4倍左右的模型。

不过,我们在实用中发现这个算法有很多缺陷,其中最大的问题就是它对模型结构的依赖相对来讲比较大。比如对于ResNet等对通道数量有很强约束的模型来说,这个通道裁剪方法很难取得比较高的裁剪效果。这是所有类似模型裁剪框架的本质问题。正是因为有这些问题,这两年基于AutoML和NAS的通道裁剪方法开始兴起。
张祥雨博士:高效轻量级深度模型的研究和实践 - AI procon大会
这是我们最新提出的MetaPruning算法。它和之前的算法不一样,之前的算法通常是为了找最具代表性的特征,以及选择哪些通道进行化简。而MetaPruning的主要目标和NAS比较像,更多的预测化简后的结构,以及不同层的通道数。基本的思想是构建一个大的网络,通过PruningNet对内部不同的子网络进行随机采样,只需要经过一次训练就得到不同的模型。具体算法流程大家可以参考上图。
张祥雨博士:高效轻量级深度模型的研究和实践 - AI procon大会

从效果来看,对比之前最好的模型裁剪算法,我们的方法可以用更少的优化时间得到更强的模型性能,和进行手工裁剪相比可以达到明显好的性能和速度。
关于MetaPruning和Channel Pruning我们已经开源,在安防等关键任务上得到了落地应用。从我们团队的使用经验来说,它们更多的还是在设备适配上面能够得到非常好的效果,而在模型结构上的改进带来的性能提升就比较有限。

资源:

MetaPruning

Channel Pruning

参考链接

  1. https://blog.****.net/qq_31622015/article/details/100658982
  2. https://blog.****.net/dQCFKyQDXYm3F8rB0/article/details/101238825