BezierLaneNet
前段时间读了PolyLaneNet的论文,发现论文中的思路跟我当时做的一些工作很类似,感觉手头上的工作可以跟车道线检测这个任务进行结合,于是有了现在的BezierLaneNet。但是我自己并不是专门做车道线检测的,所以只花了一个周末的时间,写了一份小代码进行探索性的试验,初步验证了想法的可行性,因此这个模型也只能当作一个基线模型。
PolyLaneNet使用了多项式建模车道线,对于每一张输入图片,模型输出
BezierLaneNet使用了贝塞尔曲线建模车道线,对于每一张输入图片,模型输出
PolyLaneNet vs BezierLaneNet:
- 都直接设定了
的值; - 每条车道线都有置信度
; - 贝塞尔曲线的表示方式更加简洁(只需要控制点),其中,第一个控制点和最后一个控制点分别对应了曲线的起点和终点,正好也分别对应了车道线的起点和终点,不需要额外的
和 参数; - 若使用贝塞尔曲线标注车道线数据,标记数据可以直接用来训练BezierLaneNet;
- 若使用贝塞尔曲线标注车道线数据,BeizerLaneNet可以对数据进行预标记,标注员可以通过调整贝塞尔曲线的控制点进行曲线修正,起到辅助标记的作用。
贝塞尔曲线背景知识:
网上有不少介绍贝塞尔曲线的文章,这里不再赘述,只给出维基百科的词条链接,以及构造一条三次贝塞尔曲线的演示动画图:
动画中
实验使用的数据集:
实验使用了CULane数据集,该数据集提供了车道线坐标点的标记,很适合用来验证BezierLaneNet的可行性。对于数据集中的图片,可能存在0/1
分别表示图片中从左到右四条车道线是否存在,如0 0 0 0
表示图片中没有车道线,1 1 1 1
表示图片中有四条车道线,0 0 1 1
表示图片中有两条车道线。
BezierLaneNet模型:
BezierLaneNet使用了ResNet101作为主干网络,后接一层全连接层直接回归出贝塞尔曲线的控制点。对于CULane数据集,模型固定输出四条贝塞尔曲线a b c d
,与数据集中的0/1 0/1 0/1 0/1
标签一一对应,将0/1 0/1 0/1 0/1
作为每条贝塞尔曲线的置信度0/1 0/1 0/1 0/1
逐项乘以四条贝塞尔曲线的回归损失,即可消去0/1 0/1 0/1 0/1
标签中值为0
的车道线(即不存在的车道线)的贝塞尔曲线的回归损失。
训练标签的生成:
对于模型训练时使用到的标签,可以参考以下两种方式生成:
- 对CULane数据集中的每一条车道线拟合出一条贝塞尔曲线,再将拟合出来的贝塞尔曲线的控制点作为模型回归的目标(两阶段间接法);
- 对CULane数据集中的每一条车道线,模型直接拟合出一条贝塞尔曲线(一阶段直接法);
- 上述两者相结合(既有控制点坐标标签也有曲线坐标标签)。
无论是直接法还是间接法,都需要给数据集中每条车道线的每个坐标点赋予一个0
开始,故其取值范围为
模型的训练:
BezierLaneNet的训练采用了一阶段直接法,由于每条车道线的标记坐标点的个数可能不相同,在训练时随机均匀抽取
最终效果:
关于改进的思路:
预先设置
的值似乎不太合理; 0/1 0/1 0/1 0/1
的标签形式似乎不太合理;更好的参数
的赋值方式; 使用更好的主干网络;
……