输入:图片 Image
输出:车道线信息提取及表达
算法输入:前视相机图片
算法输出:车道线方程(前视或俯视)
处理步骤:预处理、特征提取、拟合、后处理
模块 | 预处理模块 |
---|---|
模块目的 | 突出图片中的车道线特征 |
操作内容 | 俯视图变换、灰度图转换、感兴趣区域设置等 |
模块 | 特征提取模块 |
---|---|
模块目的 | 利用机器视觉算法,像素级提取车道线特征 |
操作内容 | 颜色检测、边缘检测 |
模块输出 | 像素级特征图 |
模块 | 拟合模块 |
---|---|
模块目的 | 将像素级特征转换为数学化的曲线方程以便决策利用 |
操作内容 | 方程拟合,常用RANSAC及Hough变换等 |
模块 | 后处理模块 |
---|---|
模块目的 | 对拟合结果进行进一步处理,减少误检及漏检 |
操作内容 | 车道线筛选、追踪等 |
俯视图变换:将前视图转化为真实世界坐标下的俯视图,还原车道线在真实世界中的位置,以利用车道线间距等先验信息
感兴趣区域:保留图片中的路面部分区域
灰度图转换:充分利用车道线的高亮度
感兴趣区域(ROI)设置:根据相机的分辨率、视野范围等,确定感兴趣区域的边界。一般来说,车道线的感兴趣区域位于图片的下半部分,感兴趣区域的边界可以根据车辆姿态动态设置。
灰度图转化的加权系数可调。
根据心理学研究,灰度可由RGB线性加权计算,权重反映了人眼对三色光的灵敏程度,图像处理库OpenCV应用了此原理心理学实验得出的通用权值: X = 0.30 ∗ R + 0.59 ∗ G + 0.11 ∗ B X = 0.30*R + 0.59*G + 0.11*B X=0.30∗R+0.59∗G+0.11∗B
车道线检测任务中,采用了加权滤波平均的方式对图像进行去噪,减少随机性噪声对像素提取任务的影响。模块运算系数采用高斯分布。
设定邻域格数为n时,像素 ( u , v ) (u,v) (u,v)处的灰度按下式计算 G ′ ( u , v ) = ∑ j = − n n ∑ i = − n n P ( u + i , v + j ) G ( u + i , v + j ) P N ˜ ( ( u , v ) , σ 2 ) \begin{array}{l}G'(u,v) = \sum\limits_{j = - n}^n {\sum\limits_{i = - n}^n {P(u + i,v + j)G(u + i,v + j)} } \\P\~N((u,v),{\sigma ^2})\end{array} G′(u,v)=j=−n∑ni=−n∑nP(u+i,v+j)G(u+i,v+j)PN˜((u,v),σ2)
车道线识别中的二值化:一般来说,道路上的车道线利用高亮度颜色描绘。对应的灰度值一般都比较大。
基于车道线像素点的高亮度特征,在灰度图中设置阈值以保留灰度较高的像素,就可以提取出车道线上的像素点。
阈值设置:根据算法漏检率和误检率手动反馈调节
目的:去除误检的车道线,对多车道线排序。
原理:基于车道线的连贯特征,误检的杂散噪声一般尺寸较小,方向随机。
方法:
俯视图和前视图两种形式的输出,两种输出方式根据逆投影变换关系可转换。
方法 | 基于规则的方法 | 基于学习的方法 |
---|---|---|
优势 | 明确可控,可以充分利用人类经验,针对性优化算法 | 通过网络训练代替人工复杂规则,具有复杂环境适应潜力 |
劣势 | 为提高复杂环境适应性,需要设计大量规则,工作量巨大,人类经验难以覆盖所有情况 | 网络输出不可控,需要全场景数据集,且少量极端样本难以被学习到 |
定义(狭义):给定图像 I I I, 输出图像中所有目标实例的包围框集合 B = B k k = 1 : K B={B_k}_{k=1:K} B=Bkk=1:K,并提供对应包围框中目标实例的类别。
面临的挑战:
人工设计的特征存在计算复杂,且泛化能力较低的问题,从而难以满足在速度和性能上的要求,难以适用于复杂多样的实际场景。
One-stage | Two-stage |
---|---|
One-stage方法更注重效率,相同算力下其处理图片速度更快(高检测帧率) | Two-stage方法更注重检测准确性,此方法检测精度相对更高,误检更少;但相对效率低于One-stage方案。 |
端到端方法,便于模型训练 | 分阶段训练,与One-stage方法相比训练慢 |
典型的One stage网络包括SSD, YOLO等。 | 典型的网络有Faster-RCNN,R-FCN等。 |
YOLO网络(You Only Look Once)
为什么选择YOLO?
PS:论文——You Only Look Once: Unified, Real-Time Object Detection, Joseph Redmon et al. 2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR)
YOLO网络架构
YOLO V1网络 – 详细网络结构
YOLO V1网络 – 特征重排列
bbox=
Car 0.00 0 -1.35 334.28 180.65 490.02 297.48 1.65 1.67 3.81 -3.18 1.79 12.20 -1.60
Car 0.00 0 -1.93 785.85 179.67 1028.82 340.75 1.52 1.51 3.10 3.18 1.61 8.46 -1.59
Car 0.00 1 -1.80 711.98 179.65 848.82 277.62 1.53 1.58 3.53 2.90 1.66 13.14 -1.59
Truck 0.00 2 1.71 445.91 131.69 539.77 228.36 2.60 2.06 5.42 -3.48 1.52 22.27 1.56
Car 0.00 0 -1.64 660.82 178.72 713.09 222.03 1.46 1.60 3.71 2.71 1.69 26.41 -1.54
x _ c e n t e r = l e f t + r i g h t 2 ∗ w x\_center = \frac{{left + right}}{{2*w}} x_center=2∗wleft+right y _ c e n t e r = t o p + b o t t o m 2 ∗ h y\_center = \frac{{top + bottom}}{{2*h}} y_center=2∗htop+bottom w i d t h = r i g h t − l e f t w width = \frac{{right - left}}{w} width=wright−left h e i g h t = t o p − b o t t o m h height = \frac{{top - bottom}}{h} height=htop−bottom
分类问题,模型的预测结果可按照是否正确分为以下几类:
类别 | 说明 |
---|---|
True Positive(真正, T P TP TP) | 将正类预测为正类数. |
True Negative(真负 , T N TN TN) | 将负类预测为负类数 |
False Positive(假正, F P FP FP) | 将负类预测为正类数,即误报 (Type I error). |
False Negative(假负 , F N FN FN) | 将正类预测为负类数,即漏报 (Type II error) |
准确率(accuracy) = ( T P + T N ) / ( T P + F N + F P + T N ) (TP+TN)/(TP+FN+FP+TN) (TP+TN)/(TP+FN+FP+TN)
精确率(precision) = T P / ( T P + F P ) TP/(TP+FP) TP/(TP+FP)
召回率(recall) = T P / ( T P + F N ) TP/(TP+FN) TP/(TP+FN)
单个检测结果的判断 – 交并比 IoU
交并比:产生的候选框(candidate bound)与原标记框(ground truth bound)的交叠率,即它们的交集与并集的比值。
I o U = a r e a o f o v e r l a p a r e a o f u n i o n IoU = \frac{{{\rm{area of overlap}}}}{{{\rm{area of union}}}} IoU=areaofunionareaofoverlap
交并比值可以衡量目标检测问题中,检测框相对于真值框的精度。交并比越高,则认为目标检测的位置越精确。
在检测问题中,一般设置若检测框与真实框的IoU 大于阈值θ,则认为该检测有效TP(True Positive)
单类别目标检测结果的判断 – Average Precision(AP)
对某个类别C,首先计算C在一张图片上的Precision:
P r e c i s i o n C = N ( T P ) C N ( T o t a l O b j e c t s ) C Precisio{n_C} = \frac{{N{{(TP)}_C}}}{{N{{(TotalObjects)}_C}}} PrecisionC=N(TotalObjects)CN(TP)C
对于类别C,可能在多张图片上有该类别,计算类别C的AP指数:
A v e r a g e P r e c i s i o n C = N P r e c i s i o n C N ( T o t a l I m a g e s ) C AveragePrecisio{n_C} = \frac{{NPrecisio{n_C}}}{{N{{(TotalImages)}_C}}} AveragePrecisionC=N(TotalImages)CNPrecisionC
对于整个数据集,存在多个类别C1、C2、C3, mAP(mean Average Precision) 表示所有类别的平均精确度: M e a n A v e r a g e P r e c i s i o n C = N A v e r a g e P r e c i s i o n C N ( c l a s s e s ) C MeanAveragePrecisio{n_C} = \frac{{NAveragePrecisio{n_C}}}{{N{{(classes)}_C}}} MeanAveragePrecisionC=N(classes)CNAveragePrecisionC
本人所有文章仅作为自己的学习记录,若有侵权,联系立删。本系列文章主要参考了清华大学、北京理工大学、深蓝学院、百度Apollo等相关课程。