自动驾驶(三十四)---------可行驶区域检测

       可行驶区域的检测主要是为自动驾驶提供路径规划辅助,可以实现整个的路面检测,也可以只提取出部分的道路信息,比如前方一定区域内的道路走向或者道路中点等,只要能结合高精度地图实现道路路径规划和障碍物躲避,不一定要完全的提取出完整的路面可行驶区域。

1. 传统机器视觉

        颜色, 通过手动标注的路面颜色数据集,实现非路面和路面颜色分割区域,手动标注时给路面和非路面区域贴上标签,通过学习得到路面的分割结果。

                       

       纹理,纹理提取的最基本的方法就是使用Gabor滤波器,Gabor特征对于边缘比较敏感,可提取出边缘的方向,受光照影响较小,同时具有尺度不变性。

                                    

       边缘,有明显的道路边缘分界,提取这些道路的边缘分界,可以分割出道路路面,常用的边缘检测算子有sobel、prewitt等算子,使用算子来进行提取边缘的核心思想就是将一个待检测的像素与周围的像素关联起来,通过设定算子的水平、竖直方向的权重,计算待检测像素的左右、上下的像素差值的和,判断待检检测像素的水平与竖直的像素差异性,判断该像素点是否是边缘点。

                                              

       灭点,灭点又叫消失点,是平行透视变换的一个交点,通俗的理解就是在透视变换中,视场中的平行线都会相交与一点,这个点就是灭点。标准的马路道路边缘存在平行直线,平行直线在图像中的交点在灭点附近,通过提取取多对平行直线(道路边缘线、车道线)的交点,求取这些交点的中心位置,可以近似的估计出灭点。对于非结构化的路面,提取到灭点后可以使用灭点来找大概的道路边缘,快速的提取一个三角形的路面可行驶区域。

                                

       道路模型,道路模型的分割方法出发点是,沿着车辆前进方向,道路的方向和区域在变换中存在这一些不变的大轮廓特征,这些大轮廓特征概括为道路的走向,主要为直行、拐弯。根据拐弯的程度可以分为急拐弯和缓拐弯。利用这个基本的思想,我们可以提前设定一些基本的道路模型,在提取一定的道路特征基础上,拿已有的道路模型去“匹配”,也可以变换基本道路模型适应更多的路面场景。在提取基本特征的基础上获得准确度道路路面区域。

                   

       SVM:支持向量积在路面分割的学习中非常有效,也是使用的非常多的方法之一,主要策略是标注一幅图中的路面区域和非路面区域,通过SVM的学习,得到路面区域的检测分类器,加载分类器检测出可行驶区域的路面。

                                             

      俯视图,在路面检测的方法中,图像的变换对于路面的提取非常有利,前视图变换到鸟瞰图,再提取道路路面区域,比较直观,方便进行路面提取的准确率评估。从前视图变换到俯视图中间存在一个透视变换,对每一个摄像头参数不同、摄像头的安装高度角度不同,都需要通过标定实验求出一组特定的变换矩阵,使用变换矩阵变换得到鸟瞰图。

                    

     混合多个特征进行检测,结果比使用单个特征检测方法要好。

2.  深度学习

       基于DeepLab V3+做了一部分改进,得到了不错的效果。整体来说是encoder-decoder结构,以resnet101和ASPP模块为encoder,并加入了一个简单有效的decoder模块来改善物体边缘的分割结果。用1*1的卷积核提取low-level特征信息,并融合encoder得到的high-level语义信息通过concatenate进行信息融合,最后再上采样4倍,得到原始图像大小的预测结果。

                                             

      这里想着重展示下deeplab中的ASPP模块,这也是我们选择deeplab为基础架构的主要原因。前面提到,要想较好的识别出可行驶区域和选择性行驶区域,必须要结合上下文整个语义信息。而空洞卷积允许我们有效地扩大滤波器的视野以并入较大的上下文,而不增加参数的数量或计算量,空洞卷积在语义分割中得到了积极的探索。在ASPP中,通过使用不同rate的空洞卷积,引入了多尺度的上下文信息,得到更强健的分割结果。更近一步的,为了将全局上下文信息纳入模型,。融合了整个图像级特征,将特征采用全局平均池化,然后双线性插值将特征提升到所需的空间维度。最后通过concat的方式将不同尺度的上下文信息融合在一起。

                                     

        在deeplabv3中的backbone resnet101中,每个block的卷积步长都为2,整个模型的outstride是32。这样做的好处是使得模型有更广的感受野,更容易捕获长距离的信息,整个图像的特征都可以汇聚在最后一个小分辨率的特征图中。但是连续的stride下降,虽然获得了较大的感受野,但是极大的损失了空间信息,会造成细节信息的丢失,对语义分割是有害的。因此将resnet101中最后的两个block卷积步长更改为1,将普通CNN分别以rate为2,4的空洞卷积代替,这样改进之后,模型的感受野没有改变,增大模型的分辨率为原来的四倍。同时,由于resnet101模型的感受野没有改变,我们还可以直接使用imagenet的预训练权重来提高整体的性能。

                                           

发布了66 篇原创文章 · 获赞 115 · 访问量 82万+

猜你喜欢

转载自blog.csdn.net/zhouyy858/article/details/100518195
今日推荐