参考代码:pytorch-auto-drive
1. 概述
介绍:在这篇文章中对车道线建模表示进行了讨论和分析,文中指出现有的车道线检测方法大体为:segmentation-based、key_points-based、polynomial-based,当然还有一些其它类型的车道线建模表述方法。在此基础上依靠文章对车道线使用曲线描述函数对车道线进行建模,这样就省去了很多特征解码的相关问题,只需要网络去预测对应曲线的参数就行了。但是在polynomial-based方法中其多项式回归对网络来讲是较难,导致的结果就是其性能相比前面提到的两种类型有较大的差距。对此文章借鉴贝塞尔曲线的描述方式,通过预测3阶贝塞尔曲线描述车道线(通过少量的控制点便可实现曲线描述),并且对特征图进行水平折半反转加可变形卷积的方式实现特征融合和表达能力提升(是来源于场景中车道线相对车中轴是对称分布的)。
上述提到的4中对与车道线的描述见下图所示:
这里文章的车道线是通过预测贝塞尔曲线控制点的方式实现的,然后对应文章的代码实现发现其在对应数据集下车道线的数量是固定的,那么对于自动驾驶场景车道变化复杂的情况,其适应性可能会存在一些问题,这里表示存疑。
PS:关于贝塞尔曲线的相关原理基础可以参考如下资料:
贝塞尔曲线原理(简单阐述)
2. 方法设计
2.1 网络pipeline
文章的整体pipeline见下图所示:
在上图中可以看到其包含了文章所提出的两个创新点:feature flip特征融合与贝塞尔曲线拟合头。
2.2 Feature Flip
这部分是用于特征图感知能力增广的,其是对特征图进行水平折半翻转,之后通过可变形卷积实现特征的增强表达,其网络结构见下图所示:
该网络结构的思想是来自于对下图中实际数据的观察,其思想是通过对称原理弥补左右图像区域车道线不明显而导致的检测问题。个人感觉这样的假设先验有一定的道理但是其假设性比较强。
2.3 贝塞尔曲线拟合
曲线的描述:
贝塞尔曲线是控制点和偏置项决定的,则一条曲线可以被描述为:
B = ∑ i = 0 n b i , n ( t ) P i , 0 ≤ t ≤ 1 \mathcal{B}=\sum_{i=0}^nb_{i,n}(t)\mathcal{P}_i,0\le t \le1 B=i=0∑nbi,n(t)Pi,0≤t≤1
其中,生成曲线上每一个点的偏移项在阶数 n n n(文章中将其设置为3)下的描述为:
b i , n = C n i t i ( 1 − t ) n − i , i = 0 , … , n b_{i,n}=C_n^it^i(1-t)^{n-i},i=0,\dots,n bi,n=Cniti(1