YOLOP
论文标题:YOLOP: You Only Look Once for Panoptic Driving Perception
论文地址:https://arxiv.org/abs/2108.11250
论文源码:https://github.com/hustvl/YOLOP CVPR2022 华中科技大学
Introduction
? 全景驾驶感知系统(panoptic driving perception system)是自动驾驶的重要组成部分。一个高精度、实时的感知系统可以帮助车辆在驾驶时做出合理的决策。本文提出了一种全视驾驶感知网络(YOLOP)来同时进行交通目标检测、可驾驶区域分割和车道检测。它由一个用于特征提取的编码器和三个用于处理特定任务的解码器组成。该工作的模型在BDD100K数据集上表现得非常好,在准确性和速度方面,在所有三个任务上都实现了sota的水平。此外,本文通过分解研究验证了多任务学习模型对联合训练的有效性。本文工作是第一个可以在嵌入式设备Jetson TX2(23FPS)上同时实时处理这三种视觉感知任务,并保持良好的准确性的工作。
对于这种全景驾驶感知系统,高精度和实时性是两个最关键的要求,即自动驾驶汽车是否能够做出准确、及时的决策,以确保安全。然而,对于实际的自动驾驶系统,特别是ADAS,计算资源往往是边缘的和有限的。因此,在现实场景中同时考虑这两个需求是非常具有挑战性的。
多任务网络更适合于这种情况,因为(1)可以通过同时处理多个任务来加速图像分析过程。而不是顺序处理不同任务。(2)它可以在多个任务之间共享信息,因为多任务网络通常共享相同的特征提取主干。因此,探索自动驾驶中的多任务方法具有重要意义。
? 本文的检测decoder是基于目前性能最好的单级检测网络,主要有两个原因:(1)单级检测网络比两阶段检测网络速度快。(2)单阶段检测器基于网格的预测机制与其他两个语义分割任务更相关,而实例分割通常与region-based检测器相结合。并在实验部分验证了这两种观点。encoder输出的特征图结合了不同层次和尺度的语义特征,本文的分割分支可以利用这些特征图很好地完成像素级语义预测。
本文的主要贡献是:
- 提出了一种高效的多任务网络,它可以共同处理自动驾驶中的三个关键任务:目标检测、可驾驶区域分割和车道检测,以节省计算成本和减少推理时间。是第一次在嵌入式设备上实现实时传输,同时在BDD100K数据集上保持最先进水平的性能。
- 本文设计了分解实验来验证多任务处理方案的有效性。证明了这三个任务可以共同学习,而不需要进行繁琐的交替优化。
- 证明了基于网格的检测任务的预测机制与语义分割任务的预测机制更相关,这为其他相关的多任务学习研究工作提供了参考。
METHODOLOGY
A. Encoder
网络共享一个编码器,它由一个主干网络和一个颈neck network组成。
backbone:利用主干网网络提取输入图像的特征。由于YOLOv4在目标检测方面的优异性能,选择CSPDarknet作为骨干,解决了优化过程中的梯度问题。它支持特征传播和特征共享,从而减少了参数和计算的数量。因此,它有利于保证网络的实时性能。
Neck:用来融合由骨干产生的特征的。主要由空间金字塔池(SPP)模块和特征金字塔组成网络(FPN)模块。SPP生成并融合不同尺度的特征,FPN融合不同语义级别的特征,使生成的特征包含多个尺度和多个语义级信息。工作中采用了串联的方法来融合特征。
B. Decoders
网络中的三个头是这三个任务的特定解码器。
Detect Head:与YOLOv4类似,采用了基于锚定的多尺度检测方案。首先,使用了一个PANnet的结构,一个自下而上的特征金字塔网络。FPN自上而向下传输语义特性,PAN自下而向上传输定位特性。将它们结合起来,获得更好的特征融合效果,然后直接利用PAN中的多尺度融合特征图进行检测。然后,每个网格的多尺度特征图将分配三个锚不同的纵横比,和检测头将预测位置的偏移和缩放的高度和宽度,以及每个类别的概率和相应的置信度预测。
Drivable Area Segment Head & Lane Line Segment Head:Drivable area segment head和 Lane line Segment head采用相同的网络结构。将FPN的底层输入到分割分支,大小为
(
W
/
8
,
H
/
8
,
256
)
(W/8,H/8,256)
(W/8,H/8,256)。分割分支非常简单。经过三次上采样过程后,将输出特征映射恢复到
(
W
,
H
,
2
)
(W,H,2)
(W,H,2)的大小,它表示输入图像中Drivable area segment head和Lane line Segment head每个像素的概率。此外,在上采样层中使用Nearest Interpolation来降低计算成本,而不是进行反卷积(deconvolution)。因此,解码器不仅获得了高精度的输出,而且在推理过程中也非常快。
C. Loss Function
由于在网络中有三个解码器,多任务损失包含三个部分。对于检测损失
L
d
e
t
L_{det}
Ldet?,它是分类损失、目标损失和边界框损失的加权和。
其中
L
c
l
a
s
s
L_{class}
Lclass?和
L
o
b
j
L_{obj}
Lobj?是focal loss,用来减少分类简单样本的损失,从而扩大困难样本对损失的影响。
L
c
l
a
s
s
L_{class}
Lclass?用于惩罚分类,
L
o
b
j
L_{obj}
Lobj?表示一个预测的置信度。
L
b
o
x
L_{box}
Lbox?是
L
c
I
o
u
L_{cIou}
LcIou?损失函数,它考虑了距离、重叠率、预测盒与GT之间的标度相似性和纵横比。
Drivable area segment损失和Lane line Segment Loss均包含交叉熵损失,旨在最小化网络输出像素与目标之间的分类误差。特别的是IOU损失:
L
I
O
U
=
1
?
T
P
T
P
+
F
P
+
F
N
\mathcal {L}_{IOU}=1-\frac {TP}{TP+FP+FN}
LIOU?=1?TP+FP+FNTP?被添加到
L
l
l
?
s
e
g
\mathcal {L}_{ll-seg}
Lll?seg?中,因为它对预测车道线的稀疏类别特别有效。
L
d
a
\mathcal {L}_{da}
Lda?和
L
l
l
?
s
e
g
\mathcal {L}_{ll-seg}
Lll?seg?分别定义为。
总之,最终损失是三个部分的加权和。
其中
α
1
,
α
2
,
α
3
,
γ
1
,
γ
2
,
γ
3
\alpha_{1},\alpha_{2},\alpha_{3},\gamma_{1},\gamma_{2},\gamma_{3}
α1?,α2?,α3?,γ1?,γ2?,γ3?可以调整平衡总损失的所有部分。
D. Training Paradigm
? 本文尝试用不同的范式来训练模型。最简单的一个是端到端训练,然后可以共同学习三个任务。当所有的任务都确实是相关时,这种训练模式是有用的。此外,还尝试了一些交替优化算法,逐步训练模型。在每个步骤中,模型可以只关注一个或多个相关的任务,而不考虑那些不相关的任务。即使不是所有的任务都是相关的,模型仍然可以用这个范式充分地学习每个任务。
Experiment
Dataset Setting: BDD100K dataset。BDD100K数据集有三个部分,70K图像的训练集,10K图像的验证集,20K图像的测试集。由于测试集的标签不是公开的,所以我们在验证集上评估网络。
*Implementation Details:*为了使检测器能够在交通场景中获得更多的先验知识,使用kmeans聚类算法从数据集的所有检测帧中获得先验锚。使用Adam作为优化器来训练模型,初始学习率、β1和β2分别设置为0.001、0.937和0.999。在训练过程中,使用预热和余弦退火来调整学习速率,旨在使模型收敛得更快、更好地提高。使用数据增强来增加图像的可变性,从而使模型在不同的环境中具有鲁棒性。在训练方案中考虑了光度失真和几何失真。对于光度畸变,调整图像的色调、饱和度和值。使用rotating, scaling, translating, shearing, and left-right flflipping来处理图像来处理几何畸变。
具体的分解实验请看原论文,上面有给论文地址
|