障碍物检测车道分割
障碍物检测车道分割
1)AdvNet: Multi-Task Fusion of Object Detection and Semantic Segmentation
1.backbone采用Enet,结构如下:实现分割
2.检测分支-类似yolov3的处理方法
3.训练策略
在训练阶段,由于分割任务是一个二元分割问题,只有车道线和背景这两类,如果我们长时间使用 Tusimple 数据集训练网络,必然会影响主干的特征提取能力。首先,我们在 ImageNet 分类数据集上预训练了主干。然后,我们只在 KITTI 数据集上训练主干和检测分支,直到模型收敛。接下来,将进行交替训练过程。 Tusimple 数据集上的分割分支中的两个 epoch 训练过程结束后,检测分支中的五个 epoch 训练过程将随之而来,在这两个过程中,主干中的参数也将更新,但它们的学习率策略是不同的。这样的操作将重复 17 次。最后,我们在标记的训练集(500 个中的 400 个)上联合训练整个网络模型 41 个 epoch。学习率为 0.0001,权重衰减为 0.0002,batch size 为 4,我们得到了很好的结果。
2) DLT-Net: Joint Detection of Drivable Areas, Lane Lines, and Traffic Objects
模型结构见论文。
文中loss设计:可行驶区域loss采用交叉熵损失。车道线损失采用focal loss 。交通物体分类损失采用focal loss。交通物体位置损失采用L1回归损失。
DLT-Net 在这项工作中进行了端到端的训练。学习率设置为 10−4,衰减为 5x10−3。
3)SAD---Learning Lightweight Lane Detection CNNs by Self Attention Distillation
这篇论文用于检测车道线,作者提出
Self Attention Distillation(SAD)
(自注意力蒸馏)模块,可用于现有任何网络结构,提升检测效果但不增加inference time。在模型ENet-SAD上的结果,与现有方法有可比性,但是参数量小于1/20,并且速度快于20倍。作者发现当网络学习到一定程度,不同特征层都会对车道线附近的区域产生更多兴趣。如图在block2、block3、block4中,车道线附近区域特征已被高亮显示:
给已训练好一半的模型添加SAD模块,让浅层特征来学习(mimic)高层特征的表达,从而加强网络的整体特征表达能力。从图中显示,添加SAD后(after SAD),浅层block的特征表达得到加强,继而高层block的征表达也得到加强。这种底层特征模仿高层特征的学习过程,属于自注意力蒸馏(Self Attention Distillation)。
- 知识蒸馏(Knowledge distillation):用于把大网络学习到的内容(knowledge)迁移到小网络中。具体有两个目标要学习,一是小网络输出与真值的相似,二是让小网络与大网络的输出相似。
- 注意力蒸馏(Attention distillation):用于把大网络学习到的注意力特征图(attention map)迁移到小网络中。具体在知识蒸馏基础上,再对网络中间层特征进行迁移,以保证大小网络中间的注意力特征图相似。
- 自注意力蒸馏(Self Attention Distillation):抛弃大网络,单独在小网络中对不同层学习到的注意力特征图进行迁移学习。
Self Attention Distillation
- 注意力特征图包含两种类型:一种是
activation-based attention maps
,另一种是gradient-based attention maps
,二者区别为是否使用激活函数。
- Activation-based attention distillation,主要是把长、宽、通道三维特征转换为长、宽两维特征,其中m代表第m个卷积层:
通过考虑各通道上激活后的特征值,来确定空间上特征的分布状况,获得attention map。主要方式有三种:
作者发现第二种方式获取的attention map更好,并设置p的值为2:
- 作者基于SAD(Self Attention Distillation),得到AT- GEN(attention generator),把它引入到网络的个层级上:
其中AT-GEN,先把网络中的指定特征经过G得到attention map,再上采样(Bilinear)到目标大小,最后通过softmax激活。
损失函数
- 相邻层attention map的损失函数:
这里使用的是L2函数。
- 网络总损失函数:
4)YOLOPv1: You Only Look Once for Panoptic Driving Perception
由一个encoder和三个特定任务的decoder组成 encoder包含: 主干网络( CSPDarknet ),和neck结构(SPP+FPN) decoders分为:一个检测头和两个分割头, 检测头和yolov4的检测头一样,不做多说。 两个分割头都是使用FPN的最底层特征图(W/8,H/8,256)作为输入,进行三次最近邻上采样,最终输出(W,H,2)的特征图。在可行驶区域分割头中,行驶区域为前景,其他为背景;在车道线分割头,车道线为前景,其他为背景。
损失函数
损失函数分为Ldet,Lda−seg和 Lll−seg 三部分
其中Ldet为检测任务的loss,公式如下: Ldet = α1 * Lclass + α2 * Lobj + α3 * Lbox,Lclass和Lobj都是focal loss,分别用于分类和置信度计算;Lbox为LCIoU损失函数
Lda−seg为可行驶区域分割任务的loss,公式如下 Lda−seg = Lce 就是正常的交叉熵损失函数
Lll−seg为车道线分割任务的loss,公式如下: Lll−seg = Lce + LIoU 由交叉熵损失函数和iou损失函数组成,其中 LIoU = TN /(TN + FP + FN)。 因为车道线的像素比较稀疏,所以需要额外添加一个LIoU 损失
整体损失函数如下: Lall = γ1 * Ldet + γ2 * Lda−seg + γ3 * Lll−seg,其中 包含6个超参数,α1,α2,α3,γ1,γ2,γ3;该怎么设置呢,终于到了调参侠的用武之地了。
检测任务结果
可行驶区域分割任务结果
车道线分割任务结果
5) YOLOPv2: Better, Faster, Stronger for Panoptic Driving Perception
这项工作的主要贡献总结如下:
- 更好:我们提出了一种更有效的模型结构,并开发了更复杂的免费袋,例如,在对数据预处理执行 Mosaic 和 Mixup 以及应用了一种新的混合损失时。
- 更快:我们为模型实施了更高效的网络结构和内存分配策略。
- 更强:我们的模型是在强大的网络架构下训练的,因此它具有很好的通用性,可以适应各种场景并同时保证速度。
目标检测
可行驶区域
车道线分割
速度对比
6) HybridNets-End-to-End Perception Network-2022
多任务学习的一个方案,主要是检测+可行使区域分割+车道线,整理来看创新思路不多,工程性偏多,整体网络结构如下图所示:
主干网络:EfficientNet-B3
检测任务:检测头使用BiFPN,5个尺度层;
分割头:将backbone-p2特征和neck部分P3~P7特征通过上采样做concat,然后卷积输出(W,H,3)的feature,分别属于可行使区域、车道线、背景的概率;
检测loss为smooth L1,分割loss为focal和Tversky loss:
实验对比
检测任务:
分割任务:
车道线检测任务: