赞
踩
本期为大家带来车位线检测相关知识点,以及算法工程落地的全流程演示。车位线检测是自动泊车领域必不可缺的一环,顾名思义就是采用环视鱼眼相机对路面上的车位线进行检测,从而识别出车位进行泊车。
较为常规的做法是使用四颗鱼眼相机环视拼接然后在鸟瞰图上做停车位检测,因为鸟瞰图的输入形式保留了地面线条的几何特征,有利于车位线的检测,如下图所示:
基于传统算法的车位线检测在这里就不多介绍了,毕竟传统算法在检测效果上已经完全被深度学习所碾压,在这里仅贴出近年来具有代表性的传统算法,有兴趣的可以自行了解。
2000年,Vision-Guided Automatic Parking for Smart Car
2006年,Parking Slot Markings Recognition for Automatic Parking Assist System
2010年,Uniform User interface for Semi-automatic Parking Slot Markings Recognition
2012年,Fully-automatic recognition of various parking slot markings in Around View Monitor (AVM) image sequences
2016年,Directional-DBSCAN Parking-slot Detection using a Clustering Method
这篇文章来自于18年同济,是近两年影响比较大的一篇,可能是第一篇公开的基于深度学习的停车位检测算法,网络名:DeepPS。同时公开了数据集:ps2.0,主要包含直库、斜库、平行库三种车库类型在不同环境(阴影、雨天、地下车库、户外等)下的场景共12000多张。
算法整体流程:
1.用深度卷积神经网络目标检测的方法实现对车位角点(头部角点)的检测,可以看出基于YOLOv2训练的角点检测网络。
2.然后又利用一个分类网络对检测到的结果对应的车库类型进行分类(文章总共设置了7类)。
3.根据检测得到的头部角点和分类对应的角度seta值和车库深度d,用公式即可计算出车库另外两个点(可能不在可视范围内)。
分类网络结构:
算法评价:
检测效果不错,工作很扎实,然而开源代码是基于windows下matlab平台,不适用于我们工程化落地。
同样来自于18年同济。本篇文章是一个利用卷积神经网络实现车位线与背景分割加上传统方法的工作。除此之外,本篇文章还发布了一个环视图像的停车位数据集PSV。
算法整体流程:
1.卷积神经网络做车位线与背景的分割。
2.形态学处理提取车位线骨架。
3.hough变换获取车位直线。
4.合并/删除多余直线,算出车位坐标(角点坐标)。
分割网络结构:
分割结果:
算法评价:
很不错的分割效果,除了车位线之外,还能对车道线进行分割。缺点是后处理仍较复杂,算法并没有开源。
仍然是一篇来自同济的文章,19年发表,不得不说同济在车位线这块做了不少工作,这篇是在上述自己DeepPS的基础上改进发表的论文,提出了一种基于回归来做车位检测的方式。
算法整体流程:
1.CNN回归,这里提出了一种基于CNN的directional marking point回归模型,directional marking point这个概念定义是:position、shape、orientation。位置指的是车位进入线对应的角点,形状则认为可归类为T型和L型,方向则自然指的是是车位倾角。
2. 推断出最后的车位类型、结果,这里推断主要做了两个事情,第一个是根据车位进入线长度限制、点与点之前是否还有其他点等条件,删除多余的点,第二个是然后是剩下的点完成合适的配对,最后根据几何线索即可得到结果。
检测效果:
算法评价:
将DeepPS中检测+分类的方案简化为了只有检测问题,实现了较DeepPS更高精度、速度更快的结果。算法也进行了开源:github
一篇来自21年的文章,可能是截至目前最好的车位线检测工作
算法整体流程:
1.首先检测拼接的环视图上的停车位点
2.然后将检测出来的停车位点作为图上的节点,然后采用Transformer思想,对停车位点进行attentional 信息聚合和positional encoding
3.最后用MLP对一对停车位点是否可以组成停车位进行二分类判断。
网络结构:
检测效果:
算法评价:
前面说了,这可能是目前最好的车位线检测工作,利用Transformer进行降维打击,在PS2.0 和PSV数据集上达到 SOTA,代码也已经开源:github,我们就以此项目进行我们工程化落地的全流程演示
基与四鱼眼环视拼接的车位线数据集就是上面介绍的2个:ps2.0以及PSV,均来自于同济
ps2.0是一份四颗鱼眼拼接后的数据,数据均属于停车场景,训练集约1W张,测试集不到5K张,标签是mat格式。
PSV同ps2.0数据集差不多,由四颗鱼眼相机拼接后的图片制作而成。数据量较小,训练集2550张,验证集425张,测试集1274张,标签是语义分割图。
介绍了这么多,总算到了工程化环节,接下来我们将一步步实现工程落地。
1)下载gcn-parking-slot
git clone https://github.com/Jiaolong/gcn-parking-slot.git
2)下载ps2.0或PSV数据集,并放入 datasets/目录下的对应数据集目录中,可供后续训练使用。
3)新建一个anaconda虚拟环境并进入
conda create -n gcn python=3.6
source activate gcn
4)安装环境
pip3 install -r requirements.txt
5) 下载预训练模型
这里有2个模型可供选择:
使用ps2.0部分数据集训练的model_subset,提取码:bc0a
使用ps2.0全部数据集训练的model_full,提取码:pgig
一般来讲,下载model_full作为我们的预训练模型就好,在工程中新建model/目录,将模型放入model/目录下。
这样环境准备就完成了。
1)选定配置文件和模型
训练时需要根据数据集来选定配置文件,例如使用PSV数据集,则选用config/psv_gat.yaml配置文件,查看配置文件各参数是否正确。
但推理时无需数据集,任选一个配置文件即可。
模型使用刚下载下来的model/checkpoint_epoch_200.pth
2)选定你需要推理的图像集
修改demo.py文件中image_dir
路径为你需要推理的图像集,可用我们下载的PSV数据集进行测试。
3)显示车位线检测结果
修改demo.py文件中display = True
修改demo.py文件中cv2.waitKey()
的数值,调整显示时间
4)进行推理
export PYTHONPATH=`pwd`
python3 tools/demo.py -c config/psv_gat.yaml -m model/checkpoint_epoch_200.pth
效果如下:
接下来就是拿到输出的车位检测结果,可通过demo.py文件中draw_parking_slot
函数得到p1、p2、p3、p4这4个点的像素坐标,这4个点就是车位的4个角点,其中p1、p2是车位入口点
这里就不多重复讲解了,可以直接查看本专栏前两篇博客,掌握进行ROS工程移植基础知识,然后参考车道线检测博客中完整移植代码,自行进行ROS移植。
整个节点输入摄像头图像,输出车位的像素坐标,从而实现了车位线检测功能。
本文介绍了历年来的车位线检测算法,并选取当前SOTA算法gcn-parking-slot为例讲解如何实现ROS工程落地,可以看到检测效果也十分优秀。
如果以上下载链接因需要梯子而下载不了的话,可以私信我发送百度网盘链接,谢谢大家观看!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。