#UniAD
UniAD是围绕查询设计的,它的感知、预测、规划任务都使用交叉注意力来将前置任务的查询转换为当前任务的查询。每个任务的查询以及这些查询的组合,都用长度为256的向量表征。最初的表征(BEV元素)通过多个Transformer Decoder,每个Decoder的输出有不同任务的监督数据,这些任务引导了中间表示(dim=256的向量)的演化。
在这个过程中,UniAD对表征做了很多组合和变换,引入了冗余的参数。(与之相比,英伟达的ParaDrive则直接从BEV并行训练多任务,取得了更好的效果。)中间表征在演化过程中有多个名字,如下表中形状中有x256的变量,作为每个模块的输入和输出。在开始关注每个模块的代码前,需要牢记下表中每个查询变量的含义和形状。
如果大家对端到端自动驾驶技术栈还不是很熟悉,可以翻一翻我们前面的 端到端技术栈汇总!
对于感知部分,由于已经有很多文章对目标检测、跟踪和建图的论文和代码做过解读,因此我们不再重复。在这篇文章中,我们只对运动预测、占用预测和规划器进行解读。
运动预测模块
这个模块的结构可以在配置文件base_e2e.py中查看。我们忽略了参数部分,只关注模型的前向传播链。我们把写在模块代码的__init__中而不在配置文件中的部分也填充进去,构成完整的前向传播链:
我们按照UniAD、MotionHead、MotionTransformerDecoder的顺序看前向传播链的forward函数。其中:
- UniAD的forward只是简单地串联起了五个模块
- MotionHead相当于MotionTransformerDecoder的预处理和后处理,它做了锚点和轨迹首尾点的嵌入,作为MotionTransformerDecoder的输入,之后又将MotionTransformerDecoder的输出查询转换为轨迹点列
- MotionTransformerDecoder是最核心的部分,它将锚点和轨迹的嵌入相加构造输入查询,通过三个交叉注意力模块吸收上游模块的查询的信息,再将它们的输出串联并压缩,得到输出查询。
我们对代码中的关键部分进行注释,并省略相对次要的部分。
MotionHead:
这段代码主要实现了以下功能:
- 构造并归一化代理级别和场景级别的锚点。
- 使用嵌入层将锚点的位置信息转换为嵌入向量。
- 通过MotionFormer模型进行前向传播,获取中间状态和参考轨迹。
- 计算每个级别的轨迹分数和轨迹,并应用双变量高斯激活。
- 构造输出字典,包含轨迹分数、预测轨迹、轨迹查询的有效性掩码等信息,并返回
MotionTransformerDecoder:
这段代码融合了静态意图、动态意图、代理之间的交互、代理与地图的交互以及代理与目标的交互,最终生成了融合了多种信息的查询嵌入query_embed。这里意图(intention)代表目标位置。
占用预测:
占用预测模块由5层Transformer构成,每层有一个自注意力和一个交叉注意力模块:
这部分的代码十分简单,因为DetrTransformerDecoder和DetrTransformerDecoderLayer是mmdet3d实现的,这里只是简单调用这个解码器和解码器层。这个模块的配置和前向传播如下,它主要实现了占用预测的任务,通过Transformer解码器对输入的特征图进行处理,生成未来的状态、掩码预测和占用逻辑。
规划模块
规划模块是3层解码器,在图中由下到上依次为:
- 构造查询Q:由跟踪和运动预测模块的输出查询和导航信息的嵌入相加,经过MLP,选择概率最大的单个轨迹(从6个轨迹中),最后加上位置编码
- 通过N层解码器融合BEV信息,得到轨迹
- 使用占用预测做碰撞优化
代码也比较简单,这个模块的配置和前向传播如下。它实现了基于BEV特征嵌入、占用掩码、驾驶命令等输入,生成SDC(自动驾驶车辆)轨迹的过程。
写在最后的话:
UniAD在自动驾驶的每个子任务中使用交叉注意力,显式指定了信息流向,且只能利用nuScenes类的封闭数据集。与之相对的,基于多模态基础模型的自动驾驶架构只使用自注意力层,将视觉信息映射为tokens,和多模态prompt的tokens一起输入自注意力层,多模态prompt隐式指定了信息流向,基础模型也已经用开放数据集进行了预训练。这是一种与UniAD互补的思路。
#Depth Anything v2
论文标题:
Depth Anything V2
论文作者:
Lihe Yang, Bingyi Kang, Zilong Huang, Zhen Zhao, Xiaogang Xu, Jiashi Feng, Hengshuang Zhao
项目地址: https://depth-anything-v2.github.io/
导读:
在单目深度估计研究中,广泛使用的标记真实图像具有很多局限性,因此需要借助合成图像来确保精度。为了解决合成图像引起的泛化问题,作者团队采用了数据驱动(大规模伪标记真实图像)和模型驱动(扩大教师模型)的策略。同时在一个现实世界的应用场景中,展示了未标记真实图像的不可或缺的作用,证明“精确合成数据+伪标记真实数据”比标记的真实数据更有前景。最后,研究团队将可转移经验从教师模型中提炼到更小的模型中,这类似于知识蒸馏的核心精神,证明了伪标签蒸馏更加容易和安全。©️【深蓝AI】编译
这项工作展示了Depth Anything V2, 在不追求技巧的情况下,该项研究的目标是为建立一个强大的单目深度估计模型奠定基础。值得注意的是,与V1相比,这个版本通过三个关键实践产生了更精细,更强大的深度预测:
●用合成图像替换所有标记的真实图像;
●扩大教师模型的能力;
●通过大规模伪标记真实图像的桥梁教授学生模型。
与建立在Stable Diffusion上最新的模型相比,Depth Anything v2的模型效率更高更准确。作者提供不同规模的模型(从25M到1.3B参数),以支持广泛的场景。得益于强大的泛化能力,研究团队使用度量标签对模型进行微调,以获得度量深度模型。除了模型本身之外,考虑到当前测试集的有限多样性和频繁的噪声,研究团队构建了一个具有精确注释和多样化场景的多功能评估基准,以方便未来的研究。
单目深度估计(Monocular Depth Estimation,MDE)因其在广泛的下游任务中的重要作用而受到越来越多的关注。精确的深度信息不仅在经典应用中是有利的,例如3D重建,导航和自动驾驶,而且在其他生成场景中也是可应用的。
从模型建构方面来看,已有的MDE模型可以分为两类,一类基于判别模型,另一类基于生成模型,从图1的比较结果,Depthing Anything是更高效轻巧的。根据表1可得,Depth Anything V2可以实现复杂场景的可靠预测,包括且不局限于复杂布局、透明对象、反射表面等;在预测的深度图中包含精细的细节,包括但不限于薄物体、小孔等;提供不同的模型规模和推理效率,以支持广泛的应用;具有足够的可推广性,可以转移到下游任务。从Depth Anything v1出发,研究团队推出v2,认为最关键的部分仍然是数据,它利用大规模未标记的数据来加速数据扩展并增加数据覆盖率。研究团队进一步构建了一个具有精确注释和多样化场景的多功能评估基准。
▲图1|Depthing Anything v2与其他模型比较
▲表1|强大的单目深度估计模型的优选特性
重新审视Depth Anything V1标记数据的设计,如此大量的标记图像真的有利吗?真实标记的数据有2个缺点:一个是标签噪声,即深度图中的标签不准确。由于各种收集程序固有的局限性,真实标记数据不可避免地包含不准确的估计,例如无法捕捉透明物体的深度,立体匹配算法以及SFM算法在处理动态物体或异常值时受到的影响。另一个是细节忽略,一些真实数据通常会忽略深度图中的某些细节,例如树和椅子的深度往往表示非常粗糙。为了克服这些问题,研究者决定改变训练数据,寻找具有最好注释的图像,专门利用具有深度信息的合成图像进行训练,广泛检查合成图像的标签质量。
合成图像具有以下优势:
●所有精细细节都会得到正确标记,如图2所示;
●可以获得具有挑战性的透明物体和反射表面的实际深度,如图2中的花瓶。
▲图2|合成数据的深度
但是合成数据仍然也具有以下局限性:
●合成图像与真实图像之间存在分布偏差。尽管当前的图像引擎力求达到照片级逼真的效果,但其风格和颜色分布与真实图像仍存在明显差异。合成图像的颜色过于“干净”,布局过于“有序”,而真实图像则包含更多随机性;
●合成图像的场景覆盖范围有限。它们是从具有预定义固定场景类型的图形引擎迭代采样的,例如“客厅”和“街景”。
因此在MDE中,从合成图像到真实图像的迁移并非易事。为了缓解泛化问题,一些工作使用真实图像和合成图像的组合训练集,但是真实图像的粗深度图对细粒度预测具有破坏性。另一个潜在的解决方案是收集更多的合成图像,但是这是不可持续的。因此,在本文中,研究者提出一个路线图可以在不进行任何权衡的情况下解决精确性和鲁棒性困境,并且适用于任何模型规模。
▲图3|对不同视觉编码器在合成到真实转换方面的定性比较
研究团队提出的解决方案是整合未标记的真实图像。团队最强大的MDE模型基于DINOV2-G,最初仅使用高质量合成图像进行训练,然后它在未标记的真实图像上分配伪深度标签,最后仅使用大规模且精确的伪标记图像进行训练。Depth Anything v1凸显了大规模无标记真实数据的重要性。针对合成标记图像的缺点,阐述整合未标记真实图像的作用:
●弥补差距:由于分布偏移,直接从合成训练图像转移到真实测试图像具有挑战性。但是如果可以利用额外的真实图像作为中间学习目标,这个过程将更加可靠。直观地讲,在对伪标记真实图像进行明确训练后,模型可以更熟悉真实世界的数据分布。与手动注释的图像相比,自动生成的伪标签细粒度和完整度更高。
●增强场景覆盖率:合成图像的多样性有限,没有包含足够的真实场景。然而可以通过合并来自公共数据集的大规模未标记图像轻松覆盖大量不同的场景。此外,由于合成图像是从预定义视频中重复采样的,因此确实非常冗余。相比之下,未标记的真实图像清晰可辨,信息量丰富。通过在足够的图像和场景上训练,模型不仅表现出更强的零样本MDE能力,而且还可以作为下游相关任务更好的训练源。
●将经验从最强大的模型转移到较小的模型:如图5所示,较小的模型本身无法直接从合成到真实的迁移中受益。然而,有了大规模未标记的真实图像,可以学习模仿更强大的模型的高质量预测,类似于知识蒸馏。
▲图4|Depth Anything v2
■3.1 整体框架
基于以上分析,训练Depth Anything v2的流程如下:
●基于高质量合成图像训练基于DINOv2-G的可靠教师模型;
●在大规模未标记的真实图像上产生精确的伪深度;
●在伪标记的真实图像上训练最终的学生模型,实现稳健的泛化。
研究团队发布4种学生模型,分别基于DINOv2的小型,基础,大型和巨型模型。
■3.2 细节
如表2所示,使用5个精确合成的数据集和8个大规模伪标记真实数据集进行训练。与V1相同,对于每个伪标记样本,忽略top-n-largest-loss最大区域,n设为10%。同时,模型可以产生仿射不变的逆深度,因为模型使用2个损失项对标记图像进行优化,分别是平移不变损失和梯度匹配损失。其中梯度匹配损失在使用合成图像时,对深度清晰度优化非常有效。在伪标记图像上,遵循V1添加额外的特征对齐损失,以保留来自预训练的DINOv2编码器的信息语义。
▲表2|训练数据集
■3.3 DA-2K
考虑到已有噪声数据的限制,该研究的目标是构建一个通用的相对单目深度估计评估基准。该基准可以:
●提供精确的深度关系;
●覆盖广泛的场景;
●包含大多数适合现代使用的高分辨率图像。
事实上,人类很难标注每个像素的深度,尤其是对于自然图像,因此研究员为每个图像标注稀疏深度。通常,给定一幅图像,可以选择其中的2个像素,并确定它们之间的相对深度。
▲图5|DA-2K
具体来说,可以采用2个不同的管道来选择像素对。在第一个管道中,如图5(a)所示,使用SAM自动预测对象掩码。但是可能存在模型预测的情况,引入第二个管道,仔细分析图像并手动识别具有挑战性的像素对。DA-2K并不能取代当前的基准,它只是作为准确密集深度的先决条件。
与Depth Anything v1一样,使用DPT作为深度解码器,并且基于DINO v2编码器构造。所有图像均裁剪到518进行训练,在合成图像上训练教师模型时,使用64的批处理大小进行160k次迭代。在伪标记真实图像上训练的第三阶段,该模型使用192的批处理大小进行480k次迭代。使用Adam优化器,分别将编码器和解码器的学习率设置为5e-5和5e-6。
▲表3|零样本深度估计
▲表4|DA-2K评估基准上的性能
如表3所示,结果优于MiDaS,稍逊于V1。然而,v2本身是针对薄结构进行细粒度预测,对复杂场景和透明物体进行稳健预测。这些维度的改进无法正确反映在当前的基准测试中。而在DA-2K的测试上,即使是最小的模型也明显优于其他基于SD的大模型。提出的最大模型在相对深度辨别方面的准确率比Margold高出10.6%.
▲表5|将Depth Anything V2预训练编码器微调至域内度量深度估计,即训练和测试图像共享同一域。所有比较方法都使用接近ViT-L的编码器大小
如表5所示,将编码器转移到下游的度量深度估计任务上,在NYU-D和KITTI数据集上都比之前的方法取得了显著改进,值得注意的是,即使是最轻量级的基于ViT-S的模型。
▲表6|伪标记真实图像上的重要性
如表6所示,消融实验证明了大规模伪标记真实图像的重要性。与仅使用合成图像进行训练相比,模型通过结合伪标记真实图像得到了极大的增强。
在本研究中,作者提出了Depth Anything v2,一种更强大的单目深度估计基础模型。它能够:
●提供稳健且细粒度更大的深度预测;
●支持具有各种模型大小(从25M到1.3B参数)的广泛应用;
●可轻松微调到下游任务,可以作为有效的模型初始化。
研究团队揭示了这项关键发现,此外,考虑到现有测试集中多样性弱,噪声强的特点,团队构建了一个多功能评估基准DA-2K,涵盖具有精确且具有挑战性的稀疏深度标签的各种高分辨率图像。
欢迎大家一起 扣 ~裙研究~~ 64104075
whaosoft aiot 天皓智联