文章导读
兄嘚们,小编考完PMP回来了。本文我们学习泊车场景的感知中较为关键的一个模块,即鱼眼相机的目标检测。从介绍开源数据集开始,讨论目前一些针对鱼眼相机进行目标检测的方法,最后针对端到端的目标检测分析输入端,网络端,输出端的关注点。
1
引言
之前的文章我们介绍了环视感知中的摄像机参数和车位线检测算法,但是在寻找车位或者泊入的过程中会遇到行人/车辆的穿梭挡道,地锁/障碍物占据车位等情况,所以基于鱼眼相机的障碍物检测需求就显得更加重要,当然车身周围安装的12颗超声波雷达也能辅助更好的完成近距离避障的功能。
在泊车场景下,鱼眼相机的安装位置通常位于左右后视镜下方以及前后车牌中心下方,视野如下图所示:
从功能角度来说,从APA到AVP均属于低速场景,鱼眼的目标检测能够做到20米以内即可。
2
原视角的鱼眼数据集
前段时间小编搜索各种开源数据,针对原始视角的鱼眼数据集只找到WoodScape数据集。该数据集提供以下几个任务文件:
- 语义分割
- 实例分割
- 运动分割
- 污渍检测
- 目标检测
- 校准数据
- 车辆信息
语义分割数据提供了10个类别,包括:背景、道路、车道线、路沿、行人、骑手、车辆、自行车、摩托车、交通标志。
其中车道线的标识将地面上所有线段都进行了分割,提供了车位线检测的一种分而治之的思路,先对地面线段进行分割任务,在进一步检测角点做车位匹配。
实例分割的标签包括43个类别,以Json格式进行存储。
运动分割的标签包括19个类别,用于运动目标的分割任务,小编感觉和语义分割有些重复,语义分割的类别去除静态障碍物难道不就是运动目标吗?如下图所示:
污渍检测作为分类任务,将图片类型分为干净,透明,半透明,不透明。
目标检测的标签包括5个类别:车辆、行人、自行车、交通信号灯、交通标志牌。
车辆信息的标签中记录了车辆速度、加速度、转角、偏航角等,校准文件中记录了摄像头的内外参和畸变数据。
3
环视鱼眼感知方法
关于环视鱼眼镜头的感知资料,小编推荐以下几篇文章参考学习:
“Computer Vision in Automated Parking Systems: Design,Implementation and Challenges”:本文从计算机视觉算法的角度探讨自动泊车系统的设计和实现,从硬件设计与选型到应用场景的使用用例,最后分析泊车感知中几个关键的视觉模块,包括三维重建、停车位识别、可行驶区域分割、车辆/行人检测等。
“FisheyeMODNet:Moving Object detection on Surround-view Cameras for AD”:本文是一篇双流网络的分割模型,输入的是连续的两帧鱼眼图片,经过编解码模块,根据两帧之间目标位置的偏移来判断出一副图像中哪些是运动物体输出运动目标的掩码图。
“FisheyeMultiNet: Real-time Multi-task Learning Architecture for Surround-view Automated Parking System”:本文将软硬件结合提出一个多任务架构,运行在硬件加速器上需要1TOPS算力和10瓦功耗。模型方面共享编码器,三个独立的解码器分别用于语义分割、目标检测、污渍检测任务。
“Generalized Object Detection on Fisheye Cameras for Autonomous Driving:Dataset, Representations and Baseline”:本文是一篇针对鱼眼相机径向畸变比较严重,优化外接框形式的文章。根据下图所示有六种表达方式,我们最常用的是(a)和(b)两种形式:
文章采用的网络基于YOLOv3的框架,对包围框不同形式的损失进行对比,如下图所示:
“WoodScape A multi-task, multi-camera fisheye dataset for AD”:本文是一篇利用鱼眼图像进行多任务的网络,包括语义分割、运动分割、深度估计、目标检测、污渍检测等子任务。除此之外该文的一大亮点是提供了首个鱼眼开源数据集WoodScape。
还有下面5篇文章感兴趣的小伙伴欢迎一起讨论,后面有时间的话我会逐一进行论文解读。如需所有文章可加微信找小编要。
1.“Scene Understanding Networks for AD based on Around View Monitoring System”
2.“OmniDet: Surround View Cameras based Multi-task Visual Perception Network for Autonomous Driving”
3.“Real-Time Semantic Segmentation for Fisheye Urban Driving Images Based on ERFNet †”
4.“Restricted Deformable Convolution based Road Scene Semantic Segmentation Using Surround View Cameras”
5.“Scene Understanding Networks for Autonomous Driving based on Around View Monitoring System”
4
鱼眼相机的目标检测
虽然在环视泊车的显示/渲染/感知中,经常会基于拼接的鸟瞰图搞事情,但是2D或3D目标检测任务还是在相机的原始视图中做更为直观。
之前使用线性相机/广角相机做目标检测的流程,一般先对相机做标定进行畸变校正,然后在用各种CNN模型做检测/分割等任务。相比较而言,鱼眼相机的感知也是如此,不过也有不少小伙伴建议直接将畸变的图像输入网络进行训练。
a. 图像输入端:是否要做畸变校正?
当我们用线性相机或者广角相机做计算机视觉任务时,通常第一步就是相机标定,而标定得到的内参即可用于图像的畸变校正。将相机换成鱼眼镜头后,操作是否一样呢?如下图所示:
左边是原始图像,右边是直线型视窗校正后的图像。所谓直线型视窗校正可以看成采用小孔模型来等效鱼眼模型,入射光线经过相机光心投影到成像平面上的点在一条直线上,所以当鱼眼相机的视场角大于一定角度后,则不能在等效的模型中呈现,观察后可以发现校正后的右图边缘丢失了部分视野并且存在重采样失真的问题。
但是不做畸变校正,图像中的非线性失真,难道不会破坏CNN的平移不变性吗?
从理论层面分析,基于内参和畸变参数进行的图像校正是对每个像素进行矩阵变化,如果直接将原图输入网络,可以看成将图像校正的矩阵变换集成进了网络的隐层。
但是从上图可以看出,校正后的图像中物体存在拉伸的感觉,这是由于将物体投影到平面上的原因,因此可以考虑在畸变校正后做一次柱面投影。
b. 模型网络端:是否需要特殊设计?
根据输入的图像形式分析,如果输入的是畸变校正后的图像,那么可以沿用常规的目标检测网络;如果输入的是原始图像,可以采用可变型卷积学习输入特征图上用的卷积滤波器的形状来有效构建几何变换模型。
c. 拟合输出端:回归怎样的包围框?
目标检测的输出可以分为2D、2.5D、3D三种回归形式。2D回归是最常见的一种形式,不管是标准矩形还是旋转矩形,都是对目标整体进行一个二维框输出。
2.5D或者伪3D回归是将一个目标拆分成多个部分,比如对于一辆车,往往输出车头、车尾、车身、车轮等子类别,最终目的还是为了提高测距的准确性。
3D回归是直接输出目标的真实坐标,不过由于相机参数的不同,标定算法的难度,地面的非理想性等因素,直接做端到端的三维回归目前还不太准确。
下面带来一个Demo小视频,四颗鱼眼独立的做二维目标检测。(改进点还有很多,比如标准矩形升级成旋转矩形,2D检测升级成伪3D检测等)
本文仅做学术分享,如有侵权,请联系删文。