在自动驾驶感知算法中,有一个重要的分支是单目视觉检测,在检测目标是单目相机最困难的地方在于恢复目标物的深度信息,无论使用小孔成像还是逆透视变换等方法都无法做到任意场景的鲁棒,并且在远距离也有较好的深度回复能力。
神经网络给我们提供了一种全新的解决思路,使用cnn直接回归出目标在相机坐标系下的深度信息,这种做法可在一定程度上达到激光雷达的效果,令人兴奋!如果使用多个不同焦距的相机进行拼接,完全有可能实现纯视觉感知。
BTS网络是目前市面上相对优秀的单目深度估计网络,他的主要引入了局部平面假设来回复深度图的分辨率,一般市面上都会使用encoder+decoder的结构去完成深度估计,但是在encoder过程中由于stride和pooling会使得feature的分辨率逐层减小,虽然可以通过多尺度网络,反卷积网络,SPP模块来解决,但是这些解决办法在恢复分辨率的时的做法其实都比较狂野,效果一般。
Local Planer Guidence
在decoder部分,输入是encoder输出的较低分辨率的特征1/8, 1/4, 1/2的特征图,在每一个位置估计出一个4维向量,这四个参数可以定义出一个平面方程:A*x+B*y+C*z+D=0,这个平面用于将特征图恢复到输入的大小;例如:对于1/8分辨率的特征图,它的每个位置估计的4个参数会拟合一个大小为8*8的平面,对于1/2分辨率的特征图,它的每个位置估计的4个参数会拟合一个大小为2*2的平面,以此类推。这样,不同分辨率的特征图最终都会得到大小相同即为输入分辨率的特征图,这些特征图再拼接到一起,得到深度图最终的深度图。
整体网络架构如下图:
整体网络架构就是典型的encoder+decoder结构,在decoder部分线采用了aspp模块(借鉴deeplab系列),后面再接上Local Planar Guidance进一步回复分分辨率,最后输出一张相对精细的深度图。
训练标签的制作:
深度估计的标签需要是一张与图像等大且稠密的深度图,当前可以获取深度图的做法一共有两种:
- 使用TOF深度相机,此做法适用于室内场景。
- 使用高线束激光雷达,将激光雷达与相机进行标定,然后把点云投影到图像上,在对点云进行插值。
训练的损失:
深度估计的损失非常简单,直接使用mae或mse即可,一般差距不大,重点在于传感器建模,可以尝试通过分类来代替直接回归深度会有惊喜。
源码:
链接:https://pan.baidu.com/s/1aoGrsz5omhlQWGKiaAqHMg
提取码:nrco
作者:派大星