2021-09-16

本文将对论文Towards End-to-End Lane Detection: an Instance Segmentation Approach进行解读。这篇论文是于2018年2月挂在arxiv上的。

   文中提出了一种端到端的车道线检测算法,包括LaneNet和H-Net两个网络模型。其中,LaneNet是一种将语义分割和对像素进行向量表示结合起来的多任务模型,负责对图片中的车道线进行实例分割;H-Net是由卷积层和全连接层组成的网络模型,负责预测转换矩阵H,使用转换矩阵H对属于同一车道线的像素点进行回归(我的理解是对使用坐标y对坐标x进行修正)。

   根据论文中的实验结果,该算法在图森的车道线数据集上的准确率为96.4%,在NVIDIA 1080 TI上的处理速度为52FPS。

SystemOverview

图1 系统总览
如图1所示,对于同一张输入图片,LaneNet输出实例分割的结果,为每个车道线像素分配一个车道线ID,H-Net输出一个转换矩阵H,使用转换矩阵H对车道线像素进行修正,并对修正的结果拟合出一个三阶的多项式作为预测得到的车道线。

LaneNet
图2 LaneNet的结构
论文中将实例分割任务拆解为语义分割和聚类两部分,如图2所示,LaneNet中decoder分为两个分支,Embedding branch对像素进行嵌入式表示,训练得到的embedding向量用于聚类,Segmentation branch负责对输入图像进行语义分割(对像素进行二分类,判断像素属于车道线还是背景)。最后将两个分支的结果进行结合得到实例分割的结果。

语义分割
在设计语义分割模型时,论文主要考虑了以下两个方面:

1.在构建label时,为了处理遮挡问题,论文对被车辆遮挡的车道线和虚线进行了还原;

  1. Loss使用交叉熵,为了解决样本分布不均衡的问题(属于车道线的像素远少于属于背景的像素),参考论文ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation ,使用了boundedinverse class weight对loss进行加权:

图3 bounded inverse class weight
其中,p为对应类别在总体样本中出现的概率,c是超参数(ENet论文中是1.02,使得权重的取值区间为[1,50])。

实例分割
为了区分车道线上的像素属于哪条车道,embedding_branch为每个像素初始化一个embedding向量,并且在设计loss时,使得属于同一条车道线的像素向量距离很小,属于不同车道线的像素向量距离很大。

这部分的loss函数是由两部分组成:方差loss(L_var)和距离loss(L_dist):

图4 实例分割loss
其中,x_i为像素向量,μ_c为车道线的均值向量,[x]+ = max(0,x)

可以这么理解:

方差loss(L_var) :当像素向量(pixel embedding)x_i与对应车道线均值向量μ_c的距离大于δ_v时,模型会进行更新,使得x_i 靠近μ_c ;

距离loss(L_dist) :当不同车道线均值向量 μ_ca和μ_cb之间的距离小于δ_d 时,模型会进行更新,使得μ_ca与μ_cb远离彼此;

也就是说,方差loss(L_var)使得像素向量向车道线的均值向量 μ_c 靠近,距离loss(L_dist)则会推动聚类中心远离彼此。

聚类
为了方便在推理时对像素进行聚类,在图4中实例分割loss中设置δ_d > 6*δ_v。

    在进行聚类时,首先使用mean shift聚类,使得簇中心沿着密度上升的方向移动,防止将离群点选入相同的簇中;之后对像素向量进行划分:以簇中心为圆心,以2δ_v为半径,选取圆中所有的像素归为同一车道线。重复该步骤,直到将所有的车道线像素分配给对应的车道。

只有在推理时才需要对车道线像素进行聚类。

不熟悉mean shift算法的同学可以看看这篇博客:mean shift

Network Architecture
LaneNet是基于ENet的encoder-decoder模型,如图5所示,ENet由5个stage组成,其中stage2和stage3基本相同,stage1,2,3属于encoder,stage4,5属于decoder。

   如图2所示,在LaneNet中,语义分割和实例分割两个任务共享stage1和stage2,并将stage3和后面的decoder层作为各自的分支(branch)进行训练;其中,语义分割分支(branch)的输出shape为W*H*2,实例分割分支(branch)的输出shape为W*H*N,W,H分别为原图宽和高,N为embedding vector的维度;两个分支的loss权重相同。

图5 ENet网络结构

H-NET
LaneNet的输出是每条车道线的像素集合,还需要根据这些像素点回归出一条车道线。传统的做法是将图片投影到鸟瞰图中,然后使用2阶或者3阶多项式进行拟合。在这种方法中,转换矩阵H只被计算一次,所有的图片使用的是相同的转换矩阵,这会导致地平面(山地,丘陵)变化下的误差。

    为了解决这个问题,论文训练了一个可以预测转置矩阵H的神经网络H-Net,网络的输入是图片,输出是转置矩阵H:

图6 转置矩阵H
通过置0对转置矩阵进行约束,即水平线在变换下保持水平。(即坐标y的变换不受坐标x的影响)

    由图6可以看出,转置矩阵H只有6个参数,因此H-Net的输出是一个6维的向量。H-Net由6层普通卷积网络和一层全连接网络构成,其网络结构如图7所示:

图7 H-Net网络结构
损失函数设计
H-Net的损失函数
Curve Fitting (inference)
Curve fitting的过程就是通过坐标y去重新预测坐标x的过程:

图8 使用转换矩阵进行推理的过程

实验超参数设置
LaneNet和H-Net是分别进行训练的。在论文的实验部分,两个模型的参数配置如下所示:

LaneNet:
• Dataset : Tusimple

• Embedding dimension = 4

• δ_v=0.5

• δ_d=3

• Image size = 512*256

• Adam optimizer

• Learning rate = 5e-4

• Batch size = 8

H-Net:
• Dataset : Tusimple

• 3rd-orderpolynomial

• Image size =128*64

• Adam optimizer

• Learning rate = 5e-5

• Batch size = 10

个人总结
1.论文将车道线检测定义为实例分割问题,通过将语义分割和聚类两个任务结合完成了对车道线的实例分割;

2.由于图片中的车道线数量不固定,需用通过聚类的方法来检测出所有的车道线,论文通过embedding branch的loss函数的设计,使用有监督训练解决了像素的聚类问题;

3.LaneNet的网络结构是借鉴ENet的,而ENet是2016年提出的一种语义分割模型,是不是可以使用性能更好的语义分割模型(如deeplab)作为LaneNet的网络结构?

原文作者:liyonghong
链接:https://www.jianshu.com/p/c6d38d648509

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值