《PersFormer:3D Lane Detection via Perspective Transformer and the OpenLane Benchmark》论文笔记

PersFormer采用透视变换构建BEV特征,解决3D车道检测中的空间偏移问题。通过多任务联合训练,结合2D和3D车道线预测,使用uncertain_loss调整损失权重。文章提出了OpenLane,一个大规模3D车道线检测数据集。
部署运行你感兴趣的模型镜像

参考代码:PersFormer_3DLane
OpenLane数据地址:OpenLane

1. 概述

介绍:在2D场景下检测得到的车道线在下游任务中会将其转换到bev空间下,但车辆在行驶过程中yaw和pitch是会存在一定程度偏移的,也就导致了bev空间下的车道线会出现交汇和发散的情况。对于这样的问题一种方案是通过姿态估计算法解算更准确的位姿,另外一种便是将其直接在bev空间下完成检测任务,这篇文章的方法属于后者。在这篇文章中建立2D bev空间到前视图像特征的映射关系,并通过该关系构建bev特征,并在bev特征上完成车道线预测,从而避免了车道线空间转换带来的问题。此外,在bev检测的基础上引入2D空间下的传统车道线检测算法,实现多任务联合训练,并使用uncertain_loss对这些损失函数进行调和。最后,文章公开了一个大型3D车道线检测数据集OpenLane,数据量和数据覆盖范围还是很广的。

总结现有的bev车道线获取方案,将其归纳为如下三种:
在这里插入图片描述

  • 1)在2D图像上完成车道线检测,并通过平面投影实现bev车道线检测,但是会存在pitch和yaw影响。
  • 2)根据相机内外参数将图像特征直接投影为bev特征,之后在bev特征上进行车道线预测,但是却有一个问题是投影的位置往往并不与实际位置相对应,因为还有depth未知,因而是次优的。
  • 3)在通过IPM建立bev特征与图像特征之间的关系,并通过deformable attention增强感知能力,这就是这篇文章使用的方案。

2. 方法设计

2.1 pipeline

在这里插入图片描述
文章方法的pipeline见上图,可以将其分为3个主要部分:

  • 1)由resnet构成的图像特征抽取网络,生成不同尺寸的特征图。
  • 2)预定义不同尺寸的bev网格作为bev query,经过经过self-attention对query进行优化(这里也是deformable attention),之后在相机内外参数作为先验下建立bev grid与图像特征之间变换关系,从而得到bev特征。上述的操作会在不同stride的图像特征下进行,最后得到的bev特征会经过bev_head模块融合得到完整分辨率的bev特征。
  • 3)在2D图像特征上使用传统车道线检测算法,在bev特征上使用3D车道线检测算法,组成多任务训练框架,并用uncertain_loss实现不同任务损失权重调整。

2.2 bev特征构建

这里bev特征的构建是在不同stride的图像特征下完成的,因而就会有多个bev query。这里bev query的运算过程包含了query自身的refine,以及在相机内外参数引导下的refine。这里相机内弯参数实现的是bev grid中target和图像特征中reference的关联,并使用deformable attention在reference的基础上添加offset实现提升感知能力,避免深度不符合先验导致特征抽取问题。下图展示了bev中target与图像特征reference之间的映射关系:
在这里插入图片描述
bev query的self-attention,以bev grid作为attention中心点:

# models/networks/Layers.py#L142
query = self.self_attn( query + bev_pos,  # bev query添加bev pos位置信息
                        reference_points=ref_2d,
                        input_flatten=temp_value,
                        input_spatial_shapes=torch.tensor(
                            [[bev_h, bev_w]], device=query.device),
                        input_level_start_index=torch.tensor(
                            [0], device=query.device),
                        identity=identity)

以内外参数确定target和reference实现cross attention:

# models/networks/Layers.py#L155
# cross attention
query = self.cross_attn(query,
                        reference_points=ref_3d,
                        input_flatten=value,
                        input_spatial_shapes=spatial_shapes,
                        input_level_start_index=level_start_index)

上述的过程会在不同stride图像特征上重复多次,之后这些特征会送入bev_head优化得到完整分辨率bev特征:

# models/PersFormer.py#L76
# BEV feature extractor
self.bev_head = BEVHead(args, channels=args.feature_channels)

2.3 车道线预测

这里车道线预测是参考了LaneATT中anchor的方案,同时在图像特征上和bev特征上进行,区别是增加了是否可视类别属性预测 v i s b e v ,   v i s f v vis_{bev},\ vis_{fv} visbev, visfv
在这里插入图片描述
不同任务头使用可学习的uncertain_loss自动调配权重:

# uncertainty loss weight
self.uncertainty_loss = nn.Parameter(torch.tensor([args._3d_vis_loss_weight,
                                                    args._3d_prob_loss_weight,
                                                    args._3d_reg_loss_weight,
                                                    args._2d_vis_loss_weight,
                                                    args._2d_prob_loss_weight,
                                                    args._2d_reg_loss_weight,
                                                    args._seg_loss_weight]), requires_grad=True)

文章方法中一些变量对于性能的影响:
在这里插入图片描述

3. 实验结果

在这里插入图片描述

相比CondLaneNet这种更灵活的车道线建模方式,基于anchor的方案在2D下还是差距挺大
在这里插入图片描述

您可能感兴趣的与本文相关的镜像

Anything-LLM

Anything-LLM

AI应用

AnythingLLM是一个全栈应用程序,可以使用商用或开源的LLM/嵌入器/语义向量数据库模型,帮助用户在本地或云端搭建个性化的聊天机器人系统,且无需复杂设置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值