Detr3D framework

CrossAttention 的实现

cross attention

整个Cross-Attention 的计算过程如下。

  • 首先 query_pos 随机数经过一个【子网络】构造 3D 空间中的参考点 ref points,
  • 根据外参计算参考点在图像上的投影关系,
  • 基于图像 2D 坐标得到对应图像的多级特征,
  • query_old 本身与随机位置编码 query_pos 融合形成新的 query
  • 然后对 query 进行【子网络编码】动态学习得到一个注意力权重
  • 将特征与注意力权重乘积累加得到 query 和 feature 的 CrossAttention 表达,
  • 最终的输出是上述融合 feature + residual + ref points 的位置编码

query 是随机生成的,本身不具有位置信息,但是与 ref points 位置是对应的; value 为主干网络提取的多级图像特征, 关键点是 key 并没有使用,不是标准定义的 Cross Product Attention。

query 和 ref points 两个子网之间应该有一定的内在关系, 即 3D 目标对应的 ref points 与外参的关系是确定,进而注意力权重也应保持一致。

讨论的点是一个真实的目标如何与对应的 query 产生最大响应呢? 首先,原始 query 并不与图像内容有关,ref points 也是根据学习的候选目标信息查询 得到的图像特征,value 只是被读取没有别修改, 所以在此部分图像中的目标与3D空间哪个位置关联最强没有必然联系, 只是 query 对应的不同图像特征是否具有全局一致性,加上最终与真值的对应学习到目标的存在性。 可能这样的表达能力不足,导致Detr3D 在同一视角方向可能有多个检测目标。

相反,考虑 LSS 方法,在 BEV 特征表达的时候就根据学习到的估计深度, 对同一图像投影但不同深度的特征有区分,可能这样的表达能降低3D位置学习难度,

参考链接

https://github.com/open-mmlab/mmdetection3d/blob/main/projects/DETR3D/detr3d/detr3d_transformer.py