YOLO3D将YOLO应用于3D点云的目标检测,与Complex-YOLO(Complex-YOLO的解读从这进入)类似,不同的是将yolo v2的损失函数扩展到包括偏航角、笛卡尔坐标下的三维box以及直接回归box的高度。
论文: https://arxiv.org/abs/1808.02350
论文中将3D点云投影为鸟瞰图网格,创建两个网格映射如图。
第一个包含最大高度,其中每个网格单元(像素)值表示与该单元关联的最高点的高度。 第二个网格图表示点的密度,密度的计算参考MV3D(论文解读从此进入)。
论文在原始YOLO v2中添加了两个回归项以生成 3D 边界框:中心的 z 坐标和框的高度。z 坐标的回归以类似于 x 和 y的回归的方式,通过 sigmoid 激活函数进行坐标。
值得注意的是,虽然 x 和 y 通过在每个网格单元中预测 0 到 1 之间的值进行回归,定位该点位于该单元内的位置,但 z 的值仅映射到位于一个垂直网格单元内,如下图所示 . 选择将 z 值仅映射到一个网格而将 x 和 y 映射到多个网格单元的原因是 z 维度中值的可变性远小于 x 和 y 的可变性(大多数对象具有非常相似的框高程 )。
论文中定义边界框的方向范围从 -π 到 π。 将该范围归一化为 -1 到 1,并调整我们的模型以通过单个回归数直接预测边界框的方向。 在损失函数中,计算地面实况和我们预测的角度之间的均方误差:
3D box的损失是2Dbox原始 YOLO 损失的扩展。偏航项的损失按照 上述计算。高度的损失是中宽度和长度损失的延伸。类似地,z 坐标的损失是 x 和 y 坐标损失的扩展。
λ c o o r λcoor λcoor :分配给坐标损失的权重,
λ c o n f λconf λconf :分配给预测置信度损失的权重,
λ y a w λyaw λyaw:分配给方向角损失的权重,
λ c l a s s e s λclasses λclasses :分配给损失的权重 类概率,
L i j o b j L^{obj}_{ ij} Lijobj :一个变量,它根据第 i 个和第 j 个位置中是否存在真实值框取 0 和 1 的值。如果有一个盒子,则为 1,否则为 0,
L i j n o o b j L^{noobj}_{ ij} Lijnoobj :与前一个变量相反。如果没有物体,则取值为 0,否则取值为 1,
x i , y i , z i x_i , y_i , z_i xi,yi,zi:地面实况坐标,
x i ^ , y i ^ , z i ^ \hat{x_i}, \hat{y_i}, \hat{z_i} xi^,yi^,zi^ :地面实况和预测方向角,
φ i , φ i ^ φ_i, \hat{φ_i} φi,φi^ :地面实况和预测方向角 …等,
C i , C i ^ C_i, \hat{C_i} Ci,Ci^ : 真实情况和预测置信度,
w i , l i , h i w_i , l_i , h_i wi,li,hi : 真实情况宽度、高度和盒子的长度,
w i , l i , h i w^i, l^i, h^i wi,li,hi : 预测宽度、高度和长度框
p i ( c ) 、 p i ^ ( c ) p_i( c)、\hat{p_i}( c) pi(c)、pi^(c) 真实情况和预测的类别概率。
论文使用了 KITTI 基准数据集。 点云以每像素 0.1m 的分辨率在 2D 空间中投影为鸟瞰网格图,与MV3D使用相同的分辨率。
网格图表示的 LiDAR 空间范围为向右 30.4 米,向左 30.4 米,向前 60.8 米。 在上述分辨率为 0.1 的情况下使用此范围会导致每个通道的输入形状为 608x608。
LiDAR 空间中的高度剪裁在 +2m 和 -2m 之间,并缩放到 0 到 255 以表示为最大高度通道中的像素值。
该网络以端到端的方式进行训练。 使用了动量为 0.9、权重衰减为 0.0005 的随机梯度下降。 将网络训练了 150 个 epoch,批量大小为 4。
对于前几个 epoch,将学习率从 0.00001 慢慢提高到 0.0001。 如果以高学习率开始,我们的模型通常会因梯度不稳定而发散。 再继续用 0.0001 训练 90 次,然后用 0.0005 训练 30 个时期,最后用 0.00005 训练最后 20 次。
参考:
论文阅读《YOLO3D: End-to-end real-time 3D Oriented Object Bounding Box Detection from LiDAR Point Cloud》
YOLO3D端到端的3d物体检测论文笔记
YOLO3D 论文翻译及笔记