CVPR2024: UniMODE: Unified Monocular 3D Object Detection

论文名字:UniMODE: Unified Monocular 3D Object Detection

地址:https://arxiv.org/abs/2402.18573v1

代码:https://github.com/Lizhuoling/UniMODE/blob/master/configs/UniMODE.yaml

主要内容

1、针对多种数据集的处理

实验基于六种数据集进行,每个都是不用的检测范围,如图3室内和室外的范围.也有不同的类别。

  • KITTI
  • nuScenes
  • Sun RGB-D
  • ARKitScenes
  • Hypersim
  • Objectron

方案:

  • 采用 deformable DETR architecture ,应对geometry property difference
  • 采用 two-stage detection。
  • 采用了可变化的网格 Uneven BEV Grid

2、BEV 投影(解决单目3D)

采用 corresponding depth confidence 深度阈值,筛选需要投影的特征点。

3、设计的Domain adaptive LN层 应对跨数据集

训练数据来自多个不同的域(如不同数据集、不同相机参数、不同场景),这些域的数据分布(颜色、风格、物体外观等)存在巨大差异。直接混合训练会导致模型性能下降。UniMODE 通过 "特征视角"​ 和 "损失函数视角"​ 来解决这个问题。

要求1(泛化性):模型在推理时,即使遇到训练时没见过的新域图像,也要能正常工作。

要求2(高效性):引入的域自适应机制不能增加太多计算开销。

工作原理

划分域:首先将训练数据划分为 D个域(例如,D=4,分别对应4个不同的子数据集)。

创建可学习参数:为每个域 i创建一对专属的可学习参数 (α_i, β_i)。初始化时,所有 α_i=1,所有 β_i=0。这样,初始状态下DALN等同于标准LayerNorm,保证训练稳定性。

Domain Head(域识别头):如图2所示,Domain Head是一个小的卷积网络,以图像特征 F为输入。它的任务是预测当前输入图像属于这 D个域的置信度分数​ {c_i}(一个概率分布,如图2中的 (c1, c2, ..., cn))。

根据预测出的置信度 {c_i},对 D个域的专属参数进行加权求和,得到针对当前输入图像的、独一无二的归一化参数 (α, β)。

公式:α = Σ (c_i * α_i), β = Σ (c_i * β_i)。

这正是图中 "Domain Confidence" -> "Domain Parameters" -> "Mini-adjust" 的数学实现。

自适应归一化X:

X 的表示 x(b,l,c)

b、l、c 通常是深度学习(尤其是处理序列数据的模型中)用来表示张量不同维度的索引。结合上下文 Xl ∈ RB×L×C,这很可能是一个具有 Batch大小、序列长度 和 特征维度 的三维张量。

下表详细解释了每个索引的常见含义:

索引符号 通常代表的维度 具体含义与上下文

b Batch Size (批次大小) 表示一次同时处理的独立样本(如图像、句子)的数量。例如,b=0 代表这一批数据中的第一个样本。

l Length / Position (序列长度/位置) 表示序列中元素的位置。在处理文本时,这可以是一个句子中的第 l 个单词;在处理时间序列时,则代表第 l 个时间点。

c Channel / Feature (特征维度) 表示每个序列点(或单词)对应的特征向量的维度。例如,在词嵌入中,c 遍历一个单词的 C 维向量表示中的每一个数值。

💡 一个直观的例子

假设我们有一个包含8个句子的批次(B=8),每个句子被填充或截断到50个单词的长度(L=50),每个单词用一个300维的向量表示(C=300)。那么,输入张量 Xl 的形状就是 [8, 50, 300]。

此时,x(b,l,c) 就指向了这个大张量中的一个具体数值:

• x(0, 4, 255) 表示:这个批次中第一个句子(b=0)里的第五个单词(l=4,因为索引通常从0开始)的第256维特征值(c=255)。

操作

先用标准LayerNorm处理输入特征 X,得到 X_hat。

然后用计算出的 (α, β)对 X_hat进行缩放和偏移:X_bar = α * X_hat + β。

X_bar就是经过域自适应调整后的输出特征。

4、类别对齐损失(Class Alignment Loss)

不同数据集的标注类别空间不同。例如,数据集A标注了"窗户",但数据集B没有标注"窗户"。

当把数据集A和B合并时,总的类别空间是它们所有类别的并集。对于数据集B的一张图,其中可能包含"窗户",但这个"窗户"没有被标注(在数据集B的标注里,它不属于任何目标)。

在训练时,模型可能会把这个"窗户"检测为某个物体,但由于数据集B的标注里没有"窗户",这个检测结果会被错误地视为"背景"上的假阳性目标而受到惩罚。这会严重干扰模型收敛。

解决方案:Class Alignment Loss

这个损失函数的逻辑非常巧妙:

判断类别是否在数据集的标注范围内:对于当前样本(来自第 i个数据集),如果其真实标签 y_bar是背景(B),并且这个背景所对应的真实类别(即模型可能预测的那个类别)y并不属于第 i个数据集的标注空间 Ω_i。

减轻惩罚:当上述条件满足时,就认为这个"错误"是由于标注冲突造成的,而不是模型真的判断错了。因此,计算损失时,对这个样本的惩罚会乘以一个缩小因子 γ (0 < γ < 1),从而减轻对这类情况的惩罚力度。

正常惩罚:对于其他情况(例如,模型把猫误判成狗,而猫和狗都在数据集的标注范围内),则按正常损失计算。

总结一下:这个损失函数教会模型"知之为知之,不知为不知"。对于一个数据集未标注的类别,即使模型没检测对,也不会受到严厉的惩罚,从而避免了标注不一致带来的训练干扰。

相关推荐
啊西:几秒前
SuperMap iClient3D for WebGL与iObjects Java结合实现前端动态绘制面与体的布尔运算
java·3d·webgl
智慧地球(AI·Earth)1 分钟前
CEO亲自宣传!全新ChatGPT Images!
人工智能·chatgpt
net3m334 分钟前
做了一块可以调用百度云语音识别api和tts api的esp32 s3开发板,支持跑ai小智机器人的源码,基于idf5.5.1库编译,分享下
人工智能·机器人·语音识别
七夜zippoe6 分钟前
AutoGen数据分析智能体实战:让Excel自动说话
人工智能·数据分析·excel·智能体·autogen
冬奇Lab6 分钟前
OpenAI官方Prompt工程六大原则:从入门到精通
人工智能·chatgpt·prompt
Baihai_IDP7 分钟前
靠更换嵌入模型,该产品将 RAG 延迟降低了50%
人工智能·面试·llm
市象8 分钟前
AI手机豆包化,荣耀能否讲出新故事
人工智能
智算菩萨11 分钟前
【Python进阶】数据结构的精巧与算法的智慧:AI提速的关键
开发语言·人工智能·python
@大迁世界11 分钟前
ChatGPT 的应用商店上线啦!
人工智能·chatgpt
雨大王51213 分钟前
工业互联网赋能装备制造智能化:企业如何抓住机遇规避风险
人工智能·机器学习·汽车·制造