0.单目3D检测任务
(
c
,
x
,
y
,
z
,
w
,
l
,
h
,
θ
)
(c,x,y,z,w,l,h,\theta)
( c , x , y , z , w , l , h , θ )
θ
\theta
θ : 目标在三维空间中相对于水平方向的航向信息
1.坐标系转换关系:
1.1.像素坐标系
o
−
u
,
v
o-u,v
o − u , v :
描述物体在数字图像中的位置,单位为像素(pixel),该坐标系以图像顶点作为坐标原点,u、v 轴分别平行于图像坐标系的 x、y 轴。
1.2图象坐标系
O
−
x
,
y
O-x,y
O − x , y :
反映了成像过程中二维-三维的投影关系,通过连续的实际物理量描述物体在图像平面中的位置,单位为毫米,以垂直于图像平面的相机光轴和图像平面的交点作为坐标原点,由于相机光心往往存在偏移,因此该原点通常并不是图像中心
1.3相机坐标系:
O
c
−
X
c
,
Y
c
,
Z
c
O_c-X_c,Y_c,Z_c
O c − X c , Y c , Z c : 主要是和其他传感器、物体的位置做区分。
描述空间中目标物体相对于相机的位置而引入的坐标系,单位为米(m),坐标系原点在相机光心,规定垂直于图像平面的相机光轴为Zc轴正方向,垂直向下为Yc正方向 ,按右手坐标系来建立坐标系.
kitti数据集中相机坐标系如图所示:
1.4.世界坐标系
O
w
−
X
w
,
Y
w
,
Z
w
O_w-X_w,Y_w,Z_w
O w − X w , Y w , Z w :
描述物体在客观世界中的绝对位置,单位为米(m),坐标系原点可以由人自由选取以方便计算,很多论文都将世界坐标系的原点选择为自车坐标系的原点
1.5激光雷达坐标系
激光雷达坐标系通常定义如下**左图**所示,其中x指向前方,y指向左方,z指向上方。
相机坐标系右图,和激光雷达不一样
1.6世界坐标系转为相机坐标系
世界坐标系和相机坐标系之间的转换其实是旋转和平移的过程,即先旋转到目标坐标系的方向,然后再平移过去。
设目标坐标系下某一点为
[
x
,
y
,
z
]
[x,y,z]
[ x , y , z ] ,该点在当前坐标系下的坐标为
[
x
’
,
y
’
,
z
’
]
[x’,y’,z’]
[ x ’ , y ’ , z ’ ] ,变化方式如下:
[
x
y
z
]
\begin{bmatrix}x \\y\\z\end{bmatrix}
x y z
=
R
[
x
⋅
y
⋅
z
⋅
]
+
T
R\begin{bmatrix}x^ ·\\y^·\\z^·\end{bmatrix}+T
R
x ⋅ y ⋅ z ⋅
+ T
其中R为旋转矩阵,T为平移矩阵。在3D目标检测中,一般会写成齐次方程的形式,即
[
x
y
z
1
]
\begin{bmatrix}x \\y\\z\\1\end{bmatrix}
x y z 1
=
[
R
3
∗
3
)
y
⋅
z
⋅
]
[
x
⋅
y
⋅
z
⋅
]
+
T
\begin{bmatrix}R_3*3)\\y^·\\z^·\end{bmatrix}\begin{bmatrix}x^ ·\\y^·\\z^·\end{bmatrix}+T
R 3 ∗ 3 ) y ⋅ z ⋅
x ⋅ y ⋅ z ⋅
+ T
1.7图像坐标和像素坐标之间的转换
在图像坐标系中坐标(x, y)表示其在图像平面的实际二维物理位置,单位为毫米,而像素坐标系中坐标(u,v) 表示其相对于像素坐标原点平移的像素个数,因此在转换过程中涉及尺度变换和原点平移两个步骤 ,可得到图像坐标系到像素坐标系的坐标转换关系如下所示
$$
d
x
dx
d x 和
d
y
dy
d y 表示单位像素在
x
y
xy
x y 轴上的物理长度,写成齐次公式即为
1.8像素坐标系和世界坐标系之间的转换
K
i
n
t
:
K_{int}:
K in t : 相机内参矩阵,其值只和相机的结构有关。
f
x
=
f
/
d
x
,
f
y
=
f
/
d
y
f_x = f/d_x ,f_y = f/d_y
f x = f / d x , f y = f / d y
K
e
x
t
:
K_{ext}:
K e x t : 相机外参矩阵,也叫刚体运动中的变换矩阵 。其中 R 为旋转矩阵
(
R
−
1
=
R
T
)
(R^{-1}= R^T)
( R − 1 = R T ) ,T为平移向量。
R
、
T
R、T
R 、 T 则由相机在世界、相机坐标系中的位置姿态决定。
2.Kitti数据集解析
文件结构:
calib文件:
calib文件是相机、雷达、Imu等传感器的矫正数据
P0: 7.215377000000e+02 0.000000000000e+00 6.095593000000e+02 0.000000000000e+00 0.000000000000e+00 7.215377000000e+02 1.728540000000e+02 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 0.000000000000e+00
P1: 7.215377000000e+02 0.000000000000e+00 6.095593000000e+02 -3.875744000000e+02 0.000000000000e+00 7.215377000000e+02 1.728540000000e+02 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 0.000000000000e+00
P2: 7.215377000000e+02 0.000000000000e+00 6.095593000000e+02 4.485728000000e+01 0.000000000000e+00 7.215377000000e+02 1.728540000000e+02 2.163791000000e-01 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 2.745884000000e-03
P3: 7.215377000000e+02 0.000000000000e+00 6.095593000000e+02 -3.395242000000e+02 0.000000000000e+00 7.215377000000e+02 1.728540000000e+02 2.199936000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 2.729905000000e-03
R0_rect: 9.999239000000e-01 9.837760000000e-03 -7.445048000000e-03 -9.869795000000e-03 9.999421000000e-01 -4.278459000000e-03 7.402527000000e-03 4.351614000000e-03 9.999631000000e-01
Tr_velo_to_cam: 7.533745000000e-03 -9.999714000000e-01 -6.166020000000e-04 -4.069766000000e-03 1.480249000000e-02 7.280733000000e-04 -9.998902000000e-01 -7.631618000000e-02 9.998621000000e-01 7.523790000000e-03 1.480755000000e-02 -2.717806000000e-01
Tr_imu_to_velo: 9.999976000000e-01 7.553071000000e-04 -2.035826000000e-03 -8.086759000000e-01 -7.854027000000e-04 9.998898000000e-01 -1.482298000000e-02 3.195559000000e-01 2.024406000000e-03 1.482454000000e-02 9.998881000000e-01 -7.997231000000e-01
其中
b
x
(
i
)
b^{(i)}_ x
b x ( i ) 表示相对于参考摄像机0的基准值(以米为单位)。
Tr_velo_to_cam:(
T
v
e
l
o
c
a
m
T_{velo}^{cam}
T v e l o c am ):从雷达到相机的旋转平移矩阵(
R
3
∗
4
R^{3*4}
R 3 ∗ 4 ) :
label文件
label文件是KITTI中object的标签和评估数据,以“000001.txt”文件为例,包含样式如下:
Truck 0.00 0 -1.57 599.41 156.40 629.75 189.25 2.85 2.63 12.34 0.47 1.49 69.44 -1.56
Car 0.00 0 1.85 387.63 181.54 423.81 203.12 1.67 1.87 3.69 -16.53 2.39 58.49 1.57
Cyclist 0.00 3 -1.65 676.60 163.95 688.98 193.93 1.86 0.60 2.02 4.59 1.32 45.84 -1.55
DontCare -1 -1 -10 503.89 169.71 590.61 190.13 -1 -1 -1 -1000 -1000 -1000 -10
DontCare -1 -1 -10 511.35 174.96 527.81 187.45 -1 -1 -1 -1000 -1000 -1000 -10
DontCare -1 -1 -10 532.37 176.35 542.68 185.27 -1 -1 -1 -1000 -1000 -1000 -10
DontCare -1 -1 -10 559.62 175.83 575.40 183.15 -1 -1 -1 -1000 -1000 -1000 -10
Truck 0.00 0 -1.57 599.41 156.40 629.75 189.25 2.85 2.63 12.34 0.47 1.49 69.44 -1.56 第1列 (字符串):代表物体类别(type) 总共有9类,分别是:Car、Van、Truck、Pedestrian、Person_sitting、Cyclist、Tram、Misc、DontCare。其中DontCare标签表示该区域没有被标注 ,比如由于目标物体距离激光雷达太远。为了防止在评估过程中(主要是计算precision),将本来是目标物体但是因为某些原因而没有标注的区域统计为假阳性(false positives),评估脚本会自动忽略DontCare区域的预测结果。
Truck 0.00 0 -1.57 599.41 156.40 629.75 189.25 2.85 2.63 12.34 0.47 1.49 69.44 -1.56 第2列 (浮点数):代表物体是否被截断(truncated) 数值在0(非截断)到1(截断)之间浮动,数字表示指离开图像边界对象的程度。
Truck 0.00 0 -1. -1.57 57 599.41 156.40 629.75 189.25 2.85 2.63 12.34 0.47 1.49 69.44 -1.56 第3列(整数 ):代表物体是否被遮挡(occluded) 整数0、1、2、3分别表示被遮挡的程度
Truck 0.00 0 -1.57 599.41 156.40 629.75 189.25 2.85 2.63 12.34 0.47 1.49 69.44 -1.56 第4列(弧度数) :物体的观察角度(alpha) 取值范围为:-pi ~ pi(单位:rad),它表示在相机坐标系下,以相机原点为中心,相机原点到物体中心的连线为半径,将物体绕相机y轴旋转至相机z轴,此时物体方向与相机x轴的夹角,如图1所示。
Truck 0.00 0 -1.57 599.41 156.40 629.75 189.25 2.85 2.63 12.34 0.47 1.49 69.44 -1.56 第5~8列(浮点数 ):物体的2D边界框大小(bbox) 四个数分别是xmin、ymin、xmax、ymax(单位:pixel),表示2维边界框的左上角和右下角的坐标
Truck 0.00 0 -1.57 599.41 156.40 629.75 189.25 2.85 2.63 12.34 0.47 1.49 69.44 -1.56 第9~11列(浮点数 ):3D物体的尺寸(dimensions) 分别是高、宽、长(单位:米)
Truck 0.00 0 -1.57 599.41 156.40 629.75 189.25 2.85 2.63 12.34 0.47 1.49 69.44 -1.56 第12-14列 (浮点数):3D物体的位置(location) 分别是x、y、z(单位:米),特别注意的是,这里的xyz是在相机坐标系下3D物体的中心点位置
Truck 0.00 0 -1.57 599.41 156.40 629.75 189.25 2.85 2.63 12.34 0.47 1.49 69.44 -1.56 第15列(弧度数):3D物体的空间方向(rotation_y) 取值范围为:-pi ~ pi(单位:rad),它表示,在照相机坐标系下,物体的全局方向角(物体前进方向与相机坐标系x轴的夹角),如图1所示。
第16列(浮点数 ):检测的置信度(score) 要特别注意的是,这个数据只在测试集的数据中有(待确认)。
里面的rotation_y和alpha容易让人弄错,下面详细介绍一下 摄像机坐标系和物体坐标系如下:
rotation_y表示物体的全局方向角 ,是对物体朝向的一个表示,描述的是目标在现实世界中的朝向,不随目标位置的变化而变化,数值上为车头方向和相机X轴正方向的夹角(顺时针方向为正) ,路面上的物体肯定都在X_Z上,所以物体的朝向只有Y轴的变化。
alpha表示物体的观察角度 ,描述的是目标相对于相机视角的朝向,且会随着方位角theta变化而变化,求取方法为在相机坐标系下,以相机原点为中心,相机原点到物体中心的连线为半径,将物体绕相机y轴旋转至相机z轴,此时物体方向与相机x轴的夹角。
r_y + pi/2 -theta = alpha +pi/2(即图中紫色的角是相等的)
alpha + theta = rotation_y
参考文献:
[kitti参数](https://zhuanlan.zhihu.com/p/403188378) 3d目标检测中的旋转角/航向角θ应该如何理解? Rope3D数据集