旷视研究院 · 2020年12月25日

深度视觉模型设计,还有哪些新思路?

image.png

在近期举办的Openl/O 2020启智开发者大会期间,旷视集结明星讲师天团,为现场及线上开发者带来了干货满满的“天元精品课程”,分享我们在深度学习上的探索与突破、成果与心得。为了让更多的朋友了解此次的课程内容,我们将精华干货整理成集锦,希望能够与大家一起探讨交流。

今天,我们将分享由旷视研究院Base Model组负责人张祥雨带来的《现代实用化深度视觉模型》课程。本期主讲内容围绕深度视觉识别系统的核心-卷积神经网络(CNN)模型设计展开。针对“如何设计又好又快的卷积神经网络模型”的研究主题,本期主要从3个方面讲述Base Model组在高效模型设计方向的研究成果:(1)模型搜索,(2)动态模型以及(3)重参数化与辅助监督。

与此同时,我们基于天元提供相关研究对应的开发实践案例。我们希望通过分享Base Model组在学术和实践上的探索和积累,为深度学习社区提供更多的参考和启发。

image.png

话不多说,我们直接上干货👇

 深度视觉模型发展 

基础模型很大程度上决定了业界的发展,一个好的模型对整个视觉任务的影响是巨大的。接下来,我们将分享我们在模型设计上的探索,其中包括一些比较先进、流行的深度视觉模型,和相对比较冷门,但在业务中非常有用的技术。同时,我们将分享这些模型在天元中的实践。

首先是CNN模型,CNN基础模型一直是深度视觉识别系统的核心。其核心的地位主要体现在预测精度和推理速度两个层面。从预测精度方面来说,基础模型对后端识别任务的提升是最显著和本质的。从推理速度方面来看,CNN模型设计对于模型部署也起到了决定性作用。

image.png

近年来,卷积神经网络在预测精度方面发展非常快。2015年,我们提出ResNet,在ImageNet任务上,ResNet的预测精度已经有了很大的提升。但随着准确度提高,模型推理速度也会随着模型计算复杂度增加而变慢。因此如何在精度和速度之间取得更好的平衡一直是模型设计过程中一个非常大的挑战。此外,目标任务或者硬件平台的差异性、理论复杂度和实际速度差异性和平台或业务的额外约束都极大地加大了模型设计难度。

为了解决上述模型设计存在的问题,设计更为实用的模型,Base Model组主要从6个方面进行了探索,分别是:轻量级架构、模型裁剪、低精度量化、模型搜索、动态模型以及重参数化与辅助监督。当然除此之外还有很多思路,但这6个技术是我们做大部分业务都会使用,且最常使用的。对于这6个基本思路,我们的天元框架都能提供支持。

image.png

需要注意的是,在实际进行高效模型设计时,我们不能简单依赖某一技术,而通常需要组合使用各种各样的技术,才可以取得比较理想的效果。今天,我们将重点讲三个比较新的思路,即模型搜索、动态模型和重参数化与辅助监督

 模型搜索 

最早期的模型搜索算法跟研究员平常做手工模型设计的过程是非常相似的——反复的试错,即尝试设计一个结构,通过训练该结构得到其最终预测性能,然后再回过来指导下一次的尝试,如此反复。但是,由于反复试错,模型需要被重复训练,导致整个设计过程非常低效。可见,模型搜索虽然是一个直接解决模型设计问题的途径,但要使得模型搜索真正发挥作用(超过手工模型设计)也会遇到重重困难。

模型搜索算法设计可以通过由效率、性能、灵活性组成的一个不可能三角来描述。通常情况下,一个模型搜索算法很难同时满足这3点要求,因此在实际设计模型搜索算法时,需要根据具体需求加以权衡。

如何挑战不可能三角?

不可能三角的第一个角是效率,我们通过继承权重提升效率。Base Model组近来提出SinglePath One-Shot NAS,它构建了一个超网络,该超网络包含了所有候选子网络。超网络训练完成后,每次找到一个候选子网络就不再需要进行训练,直接从超网络中拿出候选子网络对应的权重来对模型进行评估。虽然这些继承下来的权重能否代表候选网络单独训练时候的性能是存疑的,但这也是NAS领域中的一个开放性问题,正在被大家研究。但不可否认,继承权重的参数共享机制很大程度上减少了搜索的时间开销。

第二个角是准确度。通过SinglePath One-Shot NAS的均匀随机采样训练机制,使得各条路径之间尽可能的解耦。这种训练机制使得超网络中单路径的性能更好地逼近真实的单独训练的模型性能,实现了较高的模型评估准确度。

第三个角是灵活性。在业务层面,以遗传算法作为框架,可以使用模型的不同指标进行搜索约束,例如功耗、速度的限制等,因此能够实现非常灵活地搜索。

那么,Single PathOne-Shot NAS究竟能做什么?首先可以用它做结构单元搜索,也能做通道搜索,还可以做混合精度量化搜索。做量化的时候,我们使用SinglePath One-Shot NAS对不同层的比特数进行搜索,从而达到更好的量化效果。

image.png

虽然Single PathOne-Shot NAS从提出到现在已经有两年了,看起来比较古老,但由于其较强的可扩展性,我们基于Single PathOne-Shot NAS又进行了很多改进,使其能够适用于不同的任务。在快速发展的深度学习浪潮里面,过了两年还能有效的东西属实不多。比如说对于物体检测,提出了DetNAS,对于通道裁剪任务,我们去年提出了Meta-Pruning,今年提出了JointMD-Pruning。JointMD-Pruning对网络输入大小、通道数和深度进行了联合搜索——这个搜索可以在一次训练中完成,是非常高效的、多维度的超联合搜索。

如前文所述,子网络从超网络中继承的权重并不能完全代表最终的预测性能,导致这种结果的一个原因搜索空间太大,而搜索空间裁剪是一种常见的缩小权重继承机制下模型性能和模型最终预测性能差异的重要技巧。在这个研究领域衍生了很多方法,我们提出了AngleNAS这种搜索空间裁剪方法。AngleNAS通过不同路径参数更新的速率来进行判断——更新速率越快,就可以认为这条路径越重要。通过使用AngleNAS对搜索空间进行裁剪,我们可以进一步提升了SinglePath One-Shot NAS的搜索性能。

 动态模型 

动态模型是一种数据自适应的模型。一般的模型一旦训练完毕之后不管输入什么数据,推理计算过程都是固定的。而对于动态模型,不同输入数据会使得模型使用的权重、推理的路径、所用的超参数大小和深度都随之改变。

动态模型本质上是一种以空间换时间的技术。如下图所示,我们用这样一个forests模型体现动态模型的思想。这棵树上有很多分支,整棵非常复杂但各个分支非常高效,根据数据的特点为其选择其中一条分支作为推理模型,这样整个推理过程就是动态变化的。在推理过程中,我们希望通过为不同的数据选择不同计算复杂度的推理模型,在保证模型预测准确率的基础上进一步提升模型推理速度,这是动态模型的基本思想。

image.png

根据动态模型的不同变化维度, 这里主要介绍3种动态模型研究思路。第一个思路叫做动态路由。在CVPR2020中,我们基于动态路由思路,对不同的输入数据选择不同的推理路径,以实现高效推理。

image.png

第二个思路叫做动态权重,对于不同的数据,卷积核里面的权重是不一样的。第三个思路叫做动态架构超参数,可以自适应的、根据数据选择最合适的网络形式。

image.png

image.png

在实际应用中,以上的动态网络方法都是比较好的思路,但我们更倾向于动态权重思路。动态权重保证只有卷积核参数是不一样的,但推理路径是相同的,每次推理需要的资源消耗、推理时间是相对稳定的,这个在做业务的时候更为常用一些。

动态权重方面的案例,重点介绍WeightNet。

在模型设计里面,有非常重要的两个技巧,一个是SENet,可以看作一种通道注意力,另外一个非常常用的是谷歌去年提出的CondConv,早期叫做SCC(Soft Conditional Convolution),它的基本思路是把卷积核看成多个专家的系统。旷视研究院由此思考,能不能把这两个东西进行融合,然后得到统一的框架。

经过一系列数学推导,我们发现可以用非常简单的模型来进行统一描述。普通的Conv模型是参数固定的,而我们引入两个计算分支来实现动态权重变换。一个全连接分支预测出卷积核对应的加权系数,然后结合学习到的卷积核分支得到数据依赖的卷积核参数,最后使用加权后的卷积核进行真正的卷积运算。

image.png

全连接分支中的第二个FC叫做Grouped FC,根据分组数不同,发现分组数非常小甚至不分组的时候,就会退化成谷歌的CondConv,但当分组数非常多的时候,就是SENet。我们发现分组数最优值在这CondConv和SENet两个极端的之间,通过把分组数调到这两个中间的某一个值,实现既快又好的推理。

image.png

再举一个动态网络的例子,是我们今年一直提的FReLU。从实验效果上来看比之前的大部分方法都好。我们用了很小的卷积和MAX操作来避免了额外性能开销,同时预测性能更好。那么WeightNet和FReLU都是如何在天元框架中进行实现呢?戳戳下方视频,解锁更多详细解答👇

image.png

 重参数化与辅助监督 

重参数化是目前刚开始火起来的领域。什么叫重参数化?模型在训练和推理阶段分别使用不同网络结构和模型参数,但模型训练结束后通过结构和参数变换,把模型从训练使用的结构和参数变成推理使用的结构和参数。其中模型结构和参数变换的约束条件是是它们所表示的模型功能在数学上是等价的。一般来说,进行重参数化的模型结构需要满足一些条件:训练阶段倾向易于优化,推理阶段倾向于高效部署。如何让两边的好处都可以实现?最典型案例就是BatchNomalization。

辅助监督着眼于利用额外的辅助损失函数取得更高的性能,辅助损失函数只在训练时存在。这重参数化和辅助监督两个思路的共同特性是不增加推理阶段的开销,只是训练阶段使用的技巧,因此它们在实际模型训练过程和生产过程是非常有利的。

关于重参数化和辅助监督,为大家举几个相对比较新的方法,其中重参数化方法分别是ACNet、RepVGG,辅助监督方法为LabelEnc。

ACNet

它认为经过训练的卷积核参数的重要程度是不一样的,比如对于3×3卷积核,最重要的是最中心的像素,因此训练的时候模型结构使用三路,第一路只使用3×3,第二层使用1×3,第三层使用3×1,最后将3路特征加起来进行特征融合,通过这样的方式进行训练。推理阶段,将三个卷积合成一个3x3卷积,复杂度相对拆解前不增加,但是相对于直接使用3x3卷积训练能取得较大的性能提升。

image.png

RepVGG

有非常多好处,推理阶段是纯3×3网络,能够节省运行时内存,去掉Shortcut的单路结构使得访存友好,利于跨层流水。原始的VGG各种计算机视觉任务上都比不过ResNet。为了提升预测性能,训练阶段,我们在原始VGG网络基础上引入1x1 conv和identity辅助分支来解决模型优化问题。因为1x1 conv和identity都是线性操作,在推理阶段都可以结合成一个3×3,从而消除因为引入额外分支带来的开销,实现无痛涨点。

image.png

LabelEnc

这个方法的核心思想在于训练目标检测模型时我们要对backbone进行直接监督,使得它不再完全依赖于检测头部,同时也依赖于其他部分。第一步是学习Label Encoding Function,将标签反向映射回特征空间,第二步是利用LabelEncoding Function对网络中间特征进行监督用,利用类似模型蒸馏的方法完整训练检测模型。

image.png

最后,关于文中提及的部分技术及算法详解,大家可以点击以下链接获取。

技术及算法详解:

开源模型+代码:

专栏文章推荐

欢迎关注旷视研究院极术社区专栏,定期更新最新旷视研究院成果
加入旷视:career@megvii.com
推荐阅读
关注数
7707
内容数
164
专注旷视研究院学术论文解读推送,涵盖计算机视觉,文字识别等
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息