首页 > 汽车技术 > 正文

算力限制场景下的目标检测实战浅谈

2019-01-21 23:39:47·  
 
今天的分享是面向极市开发者们,分享中会相对偏向于实战,更像是一个如何调参的经验方法论方面的分享。需要强调的是,因为不少内容缺少系统的数学和理论基础,所
今天的分享是面向极市开发者们,分享中会相对偏向于实战,更像是一个如何调参的经验方法论方面的分享。需要强调的是,因为不少内容缺少系统的数学和理论基础,所以必须称之为浅谈,比如边际效用递减曲线、特征空间复杂程度等自提概念都还需要进一步提炼和完善,也希望能借此机会可以和大家展开深入讨论。
 
算力限制场景主要是指在嵌入式设备,也就是算力相对比较弱的芯片上面做实时或者准实时的目标检测。这个问题在学术和工业界一直都是备受关注,并且在深度学习越来越强调落地的大背景下,这个问题也正变得越来越突出。
 
问题
 
分享之前,先提出几个问题,我们带着这几个问题来贯穿整个分享。
 
第一组问题,在实践中,当我们遇到一个具体的任务的时候,比如热门的车辆检测问题,它属于刚体检测(被检测物体内部不会有形变的情况)。那么,一般需要多大的神经网络计算量,可以满足一般场景下检出绝大多数目标,同时保证出现尽量少的误报?当我们需要在嵌入式的低计算能力的硬件平台上完成这个任务的时候,我们应该怎么去完成这个任务?
 
第二组问题,如果现在我们面临的新任务是手势检测,也就是柔体检测(被检测物体内部会发生形变的情况),刚体检测任务中面临的问题显然是同样存在的。那么,因为我们做过了刚体检测问题,经验直接借鉴过来,适用吗?
 
第三组触及灵魂的问题来了,既然刚体柔体都搞过一遍了,那么能不能再随便来一个新的任务,都可以套用一套相同的方法来完成?也就是大家最关心的放之四海而皆准的标准“炼丹”方法。更进一步,学术上非常热门的AutoML 与网络结构搜索Network Architecture Search,与这个所谓的同一套方法又有什么关系呢?
 
目标检测在算力限制场景下的特点
 
我们先看一下目标检测这个方法在算力限制场景下的基本特点。谷歌在2016年11月Speed/accuracy trade-offs for modern convolutional object detectors 论文中,有这样一张coco 检测问题时所能达到的mAP结果图。图上有当时最热门的神经网络骨干网和检测方法,他们在不同的网络大小下,有的方法能力强,有的方法耗时短。可以发现,所有方法都没有超出作者在图上沿左下右上的一条凸起的虚线,也就是说,在这里速度和精度是“鱼和熊掌不可兼得”的。同样,在谷歌2018年7月发表的MNasNet 论文中,对于MNasNet 和MobileNet-V2的对比,同样也展示出来神似的一条曲线,不同的是横轴从GPU时间换成了手机上的预测时间。
在这里,我们借用一个经济学中非常常用的概念,就是边际效用递减曲线来描述这条论文中常出现的曲线。举一个大家都熟悉的陈佩斯被朱时茂忽悠吃面的例子,当陈佩斯吃掉第一碗面的时候,他的幸福感可以从无到有提升到了七八成,吃完第二碗之后,可能幸福感就爆棚了,但是吃完第三碗和第四碗的时候,估计快要吐了,还谈何幸福感。也就是说,每增加相同的一碗面,陈佩斯获得的实际收益则越来越小,甚至变成负的了。
 
回到我们问题上面,算力就是陈佩斯的面,我们每给目标检测方法多增加相同量的算力的时候,所能带来的精度提升会越来越少,最后微乎其微,更有甚者,如果发生了过拟合,曲线还可能往下跌,也就是陈佩斯被撑吐了一样。
这里就可以随手画出一条曲线进行简单的展示了。需要说明的是,实际的数据和曲线只会遵循大体的趋势,一定不会严格拟合。同时,这条曲线既不是倒数,也不是多项式或是对数曲线,它究竟是什么数学公式,以当前深度学习的研究现状来说并不可以推导和求解的。
简单说,它只是一条辅助线,那它有什么用呢?
 
首先,他可以帮助我们大体上去了解我们所探索的问题边界所在。
 
其次,当我们设计调参实验的时候,可以通过绘制或者在脑子里假装绘制不同变量条件下的曲线,这条辅助线可以帮助我们来对比变量优劣。例如,我们可以在某个变量固定时调整它的算力,当进行少量的实验之后,就可以画出这样一条趋势曲线出来了,同理,调整该变量的之后就可以再画一条,两条曲线的对比就可以帮助我们判断该变量的优劣。
 
最重要的,它可以帮助我们明确我们的任务在这个曲线上所处的区间。首先,不同的区间内解决问题的方法也不尽相同,不同变量在指定区间内的对比关系也不尽相同;同时,当你发现当前问题所处区间位于某个变量的曲线上升区,那么这个变量绝对是一个值得发力重点研究的变量。
举一个简单的例子,如图所示,mobilenet-v1和mobilenet-v2,根据论文或者自己的实验,我们只需要将寥寥几个点绘制上去就可以绘制两条曲线。这里需要解释一下,为了演示方便,图上的数据关系只是展示了趋势。
这里需要特殊说明的是,并不是所有方法对比图都是理想的一上一下优者恒优的,例如,我们组18年发表的fast-downsampling mobilenet MobileNet 结构简单微调的一点性能提升的方法(https://www.jianshu.com/p/681960b4173d),在100MFlops 以下的区间内,mAP 会高于mobilenet-v1,但是超过100MFlops 之后,就要弱于mobilenet-v1了。
因此,我们必须限定任务在曲线上所处的区间。
算力:硬件限制
算力限制场景本身就是限定任务在曲线上所处的区间的一个最常见的因素。
众所周知,硬件本身主要就是芯片的算力是有当前芯片研发现状,芯片的价格等等诸多因素决定的。并且,当场景需求不同时,相同的硬件条件下的情况也不尽相同。任务如果是实时的,就必须在30ms 左右计算完毕,当然如果不是实时的,慢一些就没关系了。同时,在有些场景下还要求不能功耗满载,那么我们就需要更快的时间算完,例如10ms 等等。
分享到:
 
反对 0 举报 0 收藏 0 评论 0
沪ICP备11026620号