雷锋网按:作者黄畅博士,地平线机器人技术联合创始人&算法副总裁,深度学习专家、前百度主任架构师(T10),长期从事计算机视觉、机器学习、模式识别和信息检索方面的研究。本科、硕士以及博士毕业于清华大学计算机科学与技术系,曾经在美国南加州大学和 NEC 美国研究院担任研究员。2012年加入百度美国研发中心,2013年参与组建百度深度学习研究院(IDL),任高级科学家、主任研发架构师。
黄畅博士在继山世光教授以及他的博士生邬书哲的演讲之后,又补充介绍了DenseBox系列物体检测算法。大家可能对这个方法不是特别熟悉,其实早在2014年的时候地平线就已经开始围绕这个方法做了各种各样的工作,不断迭代并产生了许多新的改进,这些改进在后来的一些公开的算法中,也能看到不少影子。DenseBox已经在地平线的ADAS系统中得到了广泛引用。
1.ADAS辅助驾驶系统中的具体问题
黄畅博士围绕一个具体的应用——ADAS即高级辅助驾驶系统来讲目标检测。在ADAS的应用场景中,物体检测面临的问题更加困难,这个问题并不仅仅来自于对检测精度更高的要求,也来自于检测问题本身更加复杂。不仅要识别是什么东西,还需要要做精准的定位。精确的定位能够帮助人们知道物体的距离, 这对ADAS系统中的前向碰撞预警是十分重要的。
计算机视觉当中有很多的问题,比如说检测、跟踪、识别、分割,如果在这里面选一个最重要的问题,恐怕绝大部分的同学都会选择物体检测。物体检测在各种各样的应用系统当中,往往是第一步,也是最重要一步。物体检测相对于图像识别,它的难度更大,因为检测还需要对物体进行精确的定位,还是个搜索问题。在ADAS 产品当中,车辆检测是一个非常重要的问题,同时也面临巨大的挑战。以KITTI车辆检测数据集为例,比如说这个车辆,在画面当中只出现一部分,这个是truncation导致的问题;然后车辆大小差距很大,这是scale variation导致的问题;然后车辆因为视角的原因,会被很多车辆遮挡,这是occlusion导致的问题;这些都是物体检测面临的挑战。
那么如果直接尝试用Faster R-CNN或者YOLO,会出现什么样的问题呢? 首先不能很好地处理面积非常小的物体,因为这些方法,尤其是YOLO,最终在分类的时候是基于低分辨率的特征图像,这导致原图像中面积很小的物体在经过多次的卷积之后,其信息很难在低分辨率的特征图中进行保存。
2.地平线的解决方案
地平线提出的方法叫做DenseBox(V2)。相比起YOLO以及SSD,最明显的不同在于DenseBox(V2)输出预测图的分辨率很高。用DenseBox(V2)的方法,输出大小为原始图像的八分之一, 即在原图中每移动8个像素,输出中就有一个对应的检测框,这就保证能够在结果中保留小的物体以及严重遮挡的物体。
2.1 标注生成与模型设计
要训练一个检测物体的神经网络,首先要用结构化的信息去描述图像。对于那些关注的物体,地平线会在合适的尺度和合适的位置进行像素分类,即判断物体中心是否在这个像素附近。其实有点像把物体检测问题,变成一个图像分割问题来看待。对于很可能包含物体的图像区域,还需要知道物体的检测框在哪里。针对检测框,地平线用两个点来描述,即框的左上角和右下角。
地平线设计的网络还有一个特点,就是对于不同的尺度输出有不同的分支。网络底层的卷积被所有分支共享,用来学习低层的图像特征,到了中间以后,会逐步分出三个分支, 去描述三个尺度上物体的分布。以左边的图为例,一大一小的两辆车,都可以在网络中找到合适的尺度去定位。除了产生正样本的区域, 即左图中红色的区域外, 还会产生灰色的区域(gray zone) 或者是说模糊的区间。这些灰色地带被判别为正样本或者负样本都是不合理的, 训练的时候模型不应该对这些区域的预测正确与否产生惩罚。
正如前面所提到,除了产生正负样本区域以外,还需要回归物体框的位置。地平线用相对距离去描述框的位置,相对于当前这个物体的中心,框的两个角点水平和垂直方向距离是多少。在实际应用中,地平线发现一个很重要的小技巧,可以提升检测框的定位精度。不仅仅要对正样本做回归,对于灰度区域(gray zone)也需要做回归。这么做的目的是希望检测器即使把灰度区域当成正样本,那么还要求检测框的位置是准确的。
地平线在设计网络的时候,也借鉴了全卷积网络做图像分割的方法。如果只做简单的全卷积,在高层的特征空间里很难保留物体的细节特征。这对于小物体的检测以及遮挡物体的定位都会带来不利的影响。图像分割中常常使用特征融合的方法,即把浅层的特征与高层的特征经过尺度变换后拼在一起。拼接的方式基本有两种,一种是像GoogLeNet一样,按channel维度拼起来,第二种就是孙健的ResNet那样,把它们直接相加。现在这种做法也变成了趋势,越来越多人做视觉任务都用了类似的方法。经过多层卷积,下采样后得到低分辨率的高维表达,可以抽象出物体的高层语意表达,捕获物体的上下文空间信息,相当于是一个bottom-up的表达抽象过程。然后再逐步把前面层的特征组合起来,补充细节信息,这相当于再做一个top-down的修正。
2.2 模型训练
地平线采用多任务学习(multi-task learning)的方式对网络进行端到端(end-to-end)的训练。多任务训练体现在同时进行分类和回归的学习,以及不同尺度对应的网络分支也会进行监督学习。多任务学习有助于网络训练的整体稳定,同时还能加快收敛。除此之外对于分类任务,地平线也用了在线难负样本挖掘(online hard negative mining)方法训练CNN。这个方法最近被证实在训练CNN检测器的时候很有效。其实在很早以前大家用boosting, DPM等方法的时候就已经这么做了,地平线也很早就在我们的方法里头用了这个策略。具体来说,会首先保持正负样本比例为1:1,然后让所有的负样本,一半从最难(即分类最糟糕)的一部分中采样,另一半则为随机采样。另外,我们用hinge loss来做分类,用简单的L2 loss 做检测框的回归。还有个细节就是地平线在训练中还用了梯度修剪(clip gradient)的方法来缓和训练过程中梯度不稳定的情况。
2.3 性能测评
上图是地平线用DenseBox(V2)的方法在KITTI数据集上的实验结果,这个方法在很长一段时间内,在车辆检测这个任务上都是排名第一。地平线主要试验了两个模型版本,一个版本是叫Direwolf,它的参数大概有22M个,另外一个模型叫Peregrine,参数大概是1.4M个,但是计算量只有前者的三十分之一, 在GPU上可以做到实时。 相比于同一时期的其他方法, 例如Faster R-CNN等不能达到实时检测,准确度甚至比Peregrine还是要差一点。
3.物体检测与ADAS
除了车辆检测之外,地平线还关注车道线以及行人检测。不仅如此,地平线还对于可行驶区域在图像中的分割问题也非常感兴趣,因为在ADAS问题中它和物体检测技术是非常互补的。物体检测可以处理像车,交通标志牌,行人等形状规则的刚体(rigid object) ;对于像路面,马路栏杆等结构不规则的非刚体,图像分割是更合适的选择。同时可行驶区域的分割也可以提供相对保守的策略保证行驶的安全。前段时间特斯拉的严重交通事故就是因为过于依赖物体检测技术造成的。
黄畅博士认为,在ADAS应用中,不应该只是在平均期望的意义下优化问题,二是应该努力规避最差的情况。驾驶本身就是高风险活动,一旦出错将造成严重的后果。因此,整个系统的冗余是非常必要的,这个冗余来自于不同的传感器,来自于不同的方法,来自于系统中不同的任务和目标。
4.总结
最后,黄畅博士对上面的介绍做一个简单的总结:
DenseBox是一个完整的基于CNN的物体检测框架,它通过精心的网络设计,能够处理不同尺度的检测,实现更精确的定位回归。模型训练中所采用特征融合,多任务训练,难负样本挖掘等方法也是被广泛证明有效的。同时它也KITTI上的结果也从另一个角度说明,只要模型设计和训练得当,小模型已经有足够好的效果。但是对于ADAS而言,光有检测是远远不够的,往往需要通过系统的冗余,采取相对保守的策略来规避最差的情况。
注:本文由大牛讲堂发布雷锋网,如需转载请联系原作者,并注明作者和出处,不得删减内容。有兴趣可以关注公号【地平线机器人技术】,了解最新消息。