mono3d汇总

ops/2025/1/21 5:49:18/

lidar坐标系

lidar坐标系可以简单归纳为标准lidar坐标系和nucense lidar坐标系,参考链接。这个坐标系和车辆的ego坐标系是一致的。

  • 标准lidar坐标系
    opendet3d,mmdetection3d和kitt都i使用了该坐标系
                   up z^   x front|  /| /left y <------ 0

kitti采集平台传感器安装示意图如下,其中红色圆圈标记的为lidar坐标系。
在这里插入图片描述
后面说的global yaw就是目标与’-y’的夹角,与’-y’重合时是0, 与x重合为90度。

  • nucense lidar坐标系
    nucense传感器坐标系示意图如下,可以看出lidar坐标系和和标准lidar坐标系有个90度的旋转关系。
    在这里插入图片描述

local yaw & global yaw

由于透视投影的关系,目标在相平面上的成像会同时收到目标转动和相对相机位移的双重影响。所以引出了local yaw和global yaw。

网络学习的对象为local yaw(下面的 α z \alpha_z αz, 其中 α z = α x + p i / 2 \alpha_z = \alpha_x + pi/2 αz=αx+pi/2), 推理时根据目标位置+local yaw计算出global yaw。

α x \alpha_x αx在kitti数据集中的定义为:

α∈[−π,π],即从 −180∘ 到 180∘。
α=0:目标物体的方向与相机光轴完全对齐(面向相机)。
α>0:目标物体的朝向偏向相机光轴的 左侧(逆时针方向)。
α<0:目标物体的朝向偏向相机光轴的 右侧(顺时针方向)。

部分公司2d目标标注的local yaw:目标与相机z同向重叠:90度,与右侧方向的相机x轴重叠:0度。
global yaw为[-pi, pi]之间,一般正前方为0,左边为90,右边-90. 参考lidar_box3d.py中的定义:

class LiDARInstance3DBoxes(BaseInstance3DBoxes):"""3D boxes of instances in LIDAR coordinates.Coordinates in LiDAR:.. code-block:: noneup z    x front (yaw=0)^   ^|  /| /(yaw=0.5*pi) left y <------ 0The relative coordinate of bottom center in a LiDAR box is (0.5, 0.5, 0),and the yaw is around the z axis, thus the rotation axis=2. The yaw is 0 atthe positive direction of x axis, and increases from the positive directionof x to the positive direction of y.Attributes:tensor (Tensor): Float matrix with shape (N, box_dim).box_dim (int): Integer indicating the dimension of a box. Each row is(x, y, z, x_size, y_size, z_size, yaw, ...).with_yaw (bool): If True, the value of yaw will be set to 0 as minmaxboxes."""YAW_AXIS = 2@propertydef corners(self) -> Tensor:"""Convert boxes to corners in clockwise order, in the form of (x0y0z0,x0y0z1, x0y1z1, x0y1z0, x1y0z0, x1y0z1, x1y1z1, x1y1z0)... code-block:: noneup zfront x           ^/            |/             |(x1, y0, z1) + -----------  + (x1, y1, z1)/|            / |/ |           /  |(x0, y0, z1) + ----------- +   + (x1, y1, z0)|  /      .   |  /| / origin    | /left y <------- + ----------- + (x0, y1, z0)(x0, y0, z0)Returns:Tensor: A tensor with 8 corners of each box in shape (N, 8, 3)."""if self.tensor.numel() == 0:return torch.empty([0, 8, 3], device=self.tensor.device)dims = self.dimscorners_norm = torch.from_numpy(np.stack(np.unravel_index(np.arange(8), [2] * 3), axis=1)).to(device=dims.device, dtype=dims.dtype)corners_norm = corners_norm[[0, 1, 3, 2, 4, 5, 7, 6]]# use relative origin (0.5, 0.5, 0)corners_norm = corners_norm - dims.new_tensor([0.5, 0.5, 0])corners = dims.view([-1, 1, 3]) * corners_norm.reshape([1, 8, 3])# rotate around z axiscorners = rotation_3d_in_axis(corners, self.tensor[:, 6], axis=self.YAW_AXIS)corners += self.tensor[:, :3].view(-1, 1, 3)return corners

mmdetection3d box_3d_mode.py中定义的各种坐标系:

class Box3DMode(IntEnum):"""Enum of different ways to represent a box.Coordinates in LiDAR:.. code-block:: noneup z^   x front|  /| /left y <------ 0The relative coordinate of bottom center in a LiDAR box is (0.5, 0.5, 0),and the yaw is around the z axis, thus the rotation axis=2.Coordinates in Camera:.. code-block:: nonez front//0 ------> x right||vdown yThe relative coordinate of bottom center in a CAM box is (0.5, 1.0, 0.5),and the yaw is around the y axis, thus the rotation axis=1.Coordinates in Depth:.. code-block:: noneup z^   y front|  /| /0 ------> x rightThe relative coordinate of bottom center in a DEPTH box is (0.5, 0.5, 0),and the yaw is around the z axis, thus the rotation axis=2."""

SMOKE: Single-Stage Monocular 3D Object Detection via Keypoint Estimation 对local yaw给出了示意图:
在这里插入图片描述
在这里插入图片描述

  • globa2local转换
    参考fcos3d代码:
def _get_target_single(..):
#...# change orientation to local yawgt_bboxes_3d[..., 6] = -torch.atan2(gt_bboxes_3d[..., 0], gt_bboxes_3d[..., 2]) + gt_bboxes_3d[..., 6]

http://www.ppmy.cn/ops/151842.html

相关文章

在 Vue 3 中实现插件化架构:设计可扩展的前端插件系统

随着前端项目的复杂性不断提升&#xff0c;模块化和可扩展性在架构设计中的重要性愈加突出。Vue 3 的 Composition API 和插件机制为我们实现插件化架构提供了便利。本文将深入探讨如何在 Vue 3 中构建一个高效、灵活的插件系统&#xff0c;为大型前端项目的扩展性打下基础。 …

electron 如何申请 Mac 系统权限

对于一些使用 Electron开发的app, 需要获取一些系统权限,比如录屏权限, 获取摄像头权限,麦克风等等,类似于以下界面: 那么Electron App 应该如何申请呢? 首先我们明确一下macOS中基础权限的分类,可以分为以下几种: 隐私权限(Private Permissions) : <!-- entitlements.ma…

机器学习-基本术语

文章目录 1. **数据集&#xff08;Dataset&#xff09;**2. **样本&#xff08;Sample&#xff09;**3. **属性&#xff08;Attribute&#xff09;**4. **特征&#xff08;Feature&#xff09;**5. **属性值&#xff08;Attribute Value&#xff09;**6. **属性空间&#xff08…

如何爬取淘宝详情接口

在电商领域&#xff0c;淘宝作为中国最大的在线零售平台之一&#xff0c;拥有海量的商品数据。获取这些商品的详情信息对于市场分析、用户体验优化和商业决策具有重要意义。本文将详细介绍如何使用Python爬虫技术来爬取淘宝的详情接口数据&#xff0c;包括环境搭建、基本爬虫编…

HTML5 教程(下)

HTML5 Video(视频) HTML5 Video(视频) 在本节内容中&#xff0c;你将了解到在HTML5中视频是如何工作的、主流浏览器支持的视频格式以及如何对网页中的视频进行控制。 很多站点都会使用到视频. HTML5 提供了展示视频的标准。 检测您的浏览器是否支持 HTML5 视频&#xff1a; …

IP归属地为什么和定位不一致?原因解析

在数字化时代&#xff0c;IP地址作为网络设备的唯一标识符&#xff0c;不仅关乎设备间的通信&#xff0c;还涉及到用户的网络身份与位置信息。其中&#xff0c;IP归属地作为IP地址的地理位置信息&#xff0c;备受用户关注。然而&#xff0c;在日常使用中&#xff0c;不少用户会…

后端开发流程学习笔记

后端开发流程学习笔记 术语前瞻 分类英文中文解释研发模式Waterfall Model瀑布模型瀑布模型&#xff08;Waterfall Model&#xff09;最早强调软件或系统开发应有完整之周期&#xff0c;且必须完整的经历周期之每一开发阶段&#xff0c;并系统化的考量分析与设计的技术、时间…

探秘 JMeter 前置处理器:让性能测试如虎添翼

想象一下&#xff0c;你是一位超级英雄&#xff0c;要对一个庞大的虚拟城市&#xff08;Web 应用&#xff09;进行全面的 “健康检查”。JMeter 就是你的神奇工具包&#xff0c;而其中的前置处理器&#xff0c;就像是这个工具包里的各种超级武器&#xff0c;能帮助你轻松应对各…