这是一篇自动驾驶相关的文章,当我们的汽车在高速公路上以高速行驶的时候,一些微小的障碍物都有可能是自动驾驶汽车使用者的巨大隐患。作者认为在高速行驶的汽车上,使用激光雷达等主动传感器很难检测到障碍物,因为需要在离障碍物很远的距离时就检测到障碍物,而激光雷达距离和分辨率都无法达到这样的精度。
所以作者使用单目相机采集图像,训练了一个受限玻尔兹曼机(RBM)重建出假设不存在障碍物的地面信息,检测重建出的地面和观察到的图像之间的差异,有差异的地方就是与障碍物较为相关的区域。并在合成的基于纹理的数据集以及真实视频中对微小物体进行了检测。
自动驾驶的研究是从2004年的DARPA比赛开始的,可用的传感器有雷达,激光,双目相机以及标准的单目广视角相机。在城镇中自动驾驶汽车需要一中低速度安全行驶,在高速公路上需要高速行驶,而并不是所有的传感器都适用于高速行驶的自动驾驶汽车,因为车辆的传感器范围直接关系到未来它可以预测并避免碰撞等事件。
例如,最大安全减速度为0.8 g,时速为150 km / h时,汽车至少需要110米才能完全停下来,从而为知觉和决策过程留出延迟。
在远处的大型障碍物,我们可以使用雷达或者是2维外观检测算法,比如HoG特征,但是对于在远处的微小的学习方法未学习过的障碍物,就搞不定了。作者总结了,这里主要有两个原因:
现在已经有很多对行人与车辆进行检测的方法及文章了,但是很少有对远处异常障碍物的检测方法出现,该方法在中低速驾驶中不常用到,但是在高速自动驾驶中非常重要。通常在中低速自动驾驶中,有源距离传感器已经足以检测出障碍物。
针对高速公路场景下的障碍物检测,前期有很多人进行了尝试。
近几年有些研究人员使用双目或SFM的方法去解决这个问题。
近十年,使用机器学习的方法尝试去解决这一问题的人越来越多:
另一个机器学习的主要问题是现在没有完整的可用的数据集,而其行人检测,车辆检测,场景物体检测等数据集都无法充分的训练处模型来检测道路上的微小障碍物。
作者考虑使用单一类别学习方法,只需要知道哪些区域是道路区域,哪些区域不是道路区域就可以了。所以在文中作者并没有关注如何障碍物的威胁等级,或者决策的做出以及避开障碍物等其他问题,而是将他们一视同仁,从图像中寻找广义的微小障碍物。该方法的主要做法是利用训练好的RBM作为自动编码神经网络将道路重构出来,并将原本的道路和重构出的道路进行一个差值,就可以寻找出地面上的异常障碍物,这样会比分割得到candidate的方法更有效。
深入到方法本身,该方法需要输入一个二维的RGB图像,对着这张图像作者表示可以做两阶段处理,第一阶段是生成一张heat map,heat map的每个点表示存在障碍物的可能性,这样可以用灰度图来表示出来,将非道路像素显示成黑色,道路像素显示成白色。第二阶段是使用这张heat map对潜在障碍物区域进行分割。但是本文只关注与第一阶段。在重构道路的任务中,作者使用RBM作为一个自动编码器,学习道路上的纹理信息,进行道路重构。
在预处理阶段,作者将一张输入的大图像,用一个mask掩膜,将mask区域的图像分割成 P∗P P ∗ P 的许多的patch,每个小方块都被转换成一个浮点数向量,并进行中心化和归一化,在这篇文章中,作者使用了 P=8 P = 8 的patch和 S=6 S = 6 的步长来取这些Patch,
在拿到了预处理阶段的patch之后,将这些patch作为输入,去训练一个高斯二元RBM。RBM的输入层大小是 Lvis=P∗P∗3 L v i s = P ∗ P ∗ 3 ,隐藏层大小设置为 H H ,作者将 H H 设置为20,并在训练的时候使用随机梯度下降进行收敛,并在最后将RBM的模型参数保存成结构体 RBMmodel=(W,bhid,bvis) R B M m o d e l = ( W , b h i d , b v i s ) 。其中 W W 是权重矩阵, bhid,bvis b h i d , b v i s 分别是隐偏差和显偏差。通过以下的重构向量就可以重构出道路上的patch:
虽然这样很有效果,但是作者也提出训练的过程不是非常完美的,因为RBM必须学习在整个数据集中比较通用的东西,比如说地面的patch。而他们选择RBM最大的原因在于,快,简单并且易于实现,能够实时运行。
测试流程如上图,从图中可以看出,作者利用海绵上的大部分patch,重构了海面,并将正规化的图像和重构图像进行相减处理得到Heat map,从海面上提取出了很多物体。
然后将所有的误差拼起来,得到heat map。
但是在这里如果要把整幅图像所有的patch拼起来是非常耗费时间的,所以作者将每个patch中的像素误差求平均值,用均值代表该patch的误差,并重新生成一个二维图像,这个图像的每个像素点就是每个patch的平均误差。 ϵxi=∑0≤k<LvisΔxi,k ϵ x i = ∑ 0 ≤ k < L v i s Δ x i , k 。但是这样做的话,就相当于是对图像用 P∗P P ∗ P 的卷积核做了一次卷积,而进行了下采样,但是作者认为,因为目标物体的大小是比patch要大的,所以这种下采样引起的模糊效应不会显着影响异常检测。
最后就是要进行一次后处理过程,也就是将原本重构出来的heatmap进行反转。首先将所有点的强度从[0,mean]重新映射到[0,1],以便使重建误差不明显的区域饱和为白色。然后从heat map中得到最终的分割。但是。。。本文没介绍怎么分割,只是说,用很多方法都可以进行分割,所以本文也就不提供这样的方法了。
虽然感觉这段说的不多,但是简单介绍一下吧,这篇文章从YouTube(对,就是那个404网站)上下载了一段在日本高速公路上的长达1h40m的视频,视频是使用松下GH4相机以4K分辨率拍摄的,每两秒为1帧,共有3054帧,作者将它降采样为原图的1/2,然后从道路中心区域取了大概500*500的mask作为采样区域。
这部分是作者花费较大篇幅去介绍的,因为目前没有用于高速公路上小障碍物检测的数据集,所以作者只能自己去采集。
作者一行人到互联网上去搜索了带有障碍物的高速公路行驶视频,他们自己也扛着相机去进行了拍摄,拍摄细节我就不介绍了,但是他们说长达4小时33分钟的视频中就只有一个障碍物。。。,这部分不是重点,重点在于,后面的算法评估。
作者表示,在本文中的算法评估的目的就是为了检测他们用RBM重构出来的分布是否能比原始图像更好的指示标签。因为没有现成的方法可以进行比较,所以作者使用RGB图像作为输入,并使用LDA和SVM等标准的分类方法作为对比。
作者采用CIFAR数据集,这个数据集上都是32*32的小RGB图像。正样本由包含从手动标记的图像中采样的普通道路(ROAD-RGB)的图像组成。 一种负样本是由实际的CIFAR10公共数据集组成的,作为随机非道路元素(CIFAR-RGB)的来源。 另一种负样本由道路贴片组成,将CIFAR中的物体贴在道路patch上(OBS-RGB)。所有的数据被分为2000个训练集和2000个测试集,每个实验包含两个数据集,一正一负。
两个实验中
实验一是将CIFAR和ROAD进行比较,进行分类。
实验二试将OBS和ROAD进行比较分类。
用ROC图来表示:
可以看出本文的效果确实不错。并且作者表示,对道路纹理的压缩表示,足以让算法对从未见过的其他道路patch有通用性。
作者表示他们的方法的一个明显的局限性是,由于没有负样本训练类别,正样本类的边界仍然粘在特征空间中道路样本的外壳上。换句话说,该系统只能概括在训练集中看见的patch。这种限制在下图中很清楚。YouTube视频中的这个场景在黄昏时拍摄,整个场景沉浸在黄昏的独特红色照明中。这种照明没有出现在训练视频中。因此,所有那些稍微偏红的道路修补程序都被视为非道路修补程序。然而,位于汽车和桥梁阴影中的道路贴片并不能反映这种红光并且被正确地重建。
为了解决这类问题,系统应该学习所有可能的道路外观。对于干净而统一的外观的高速公路来说,这样的效果很好,但是在梅西耶公路数据上可能会更困难。补充方法是使用帧内(或视频段内)道路外观来检测异常。事实上,虽然道路外观可能差异很大,但其纹理在一帧或一帧短帧内仍保持局部自相似性。