目标检测与分割的应用
立即解锁
发布时间: 2025-09-01 01:57:45 阅读量: 3 订阅数: 11 AIGC 

### 目标检测与分割的应用
#### 1. 基于点云的3D目标检测
在2D图像中,我们已经掌握了利用锚框核心概念的算法来预测边界矩形。现在,我们将探讨如何将这一概念扩展到预测物体周围的3D边界框。在自动驾驶领域,行人/障碍物检测和路线规划等任务都依赖于对环境的了解,因此预测3D物体的位置和方向至关重要。不仅障碍物的2D边界框很重要,知道物体的距离、高度、宽度和方向对于在3D世界中安全导航也至关重要。下面我们将学习如何使用YOLO在真实世界数据集上预测汽车和行人的3D方向和位置。
##### 1.1 理论基础
激光雷达(LIDAR)是一种常用的实时3D数据采集传感器。它通过安装在旋转装置上的激光每秒发射数百次激光束,另一个传感器接收周围物体反射的激光,并计算激光在遇到障碍物之前的传播距离。通过在汽车的各个方向进行这样的操作,我们可以得到反映环境的3D点云距离数据。在我们要使用的数据集中,3D点云数据来自Velodyne开发的特定硬件。接下来,我们将了解3D目标检测的输入和输出编码方式。
##### 1.2 输入编码
原始输入是3D点云,以.bin文件的形式呈现。我们可以使用`np.fromfile(<filepath>)`将每个文件加载为NumPy数组。以下是示例代码:
```python
files = Glob('training/velodyne')
F = choose(files)
pts = np.fromfile(F, dtype=np.float32).reshape(-1, 4)
pts
```
为了可视化这些数据,我们可以去除远处的点,并使用以下代码进行可视化:
```python
# take the points and remove faraway points
x,y,z = np.clip(pts[:,0], 0, 50),
np.clip(pts[:,1], -25, 25),
np.clip(pts[:,2],-3, 1.27)
fig = go.Figure(data=[go.Scatter3d(
x=x, y=y, z=z, mode='markers',
marker=dict(
size=2,
color=z, # set color to a list of desired values
colorscale='Viridis', # choose a colorscale
opacity=0.8
)
)])
fig.update_layout(margin=dict(l=0, r=0, b=0, t=0))
fig.show()
```
这些文件位于按照GitHub仓库说明下载并移动原始文件后的`dataset/.../training/velodyne`目录中。
我们可以通过以下步骤将这些信息转换为鸟瞰图:
1. 将3D点云投影到XY平面(地面),并将其分割成分辨率为每个网格单元8平方厘米的网格。
2. 对于每个单元格,计算以下值并将其与指定通道关联:
- 红色通道:网格中最高点的高度。
- 绿色通道:网格中最高点的强度。
- 蓝色通道:网格中的点数除以64(归一化因子)。
##### 1.3 输出编码
以3D点云的鸟瞰图作为模型输入,模型需要预测以下真实世界特征:
| 特征 | 描述 |
| ---- | ---- |
| 物体类别 | 图像中存在的物体类别 |
| 东西轴距离(x) | 物体与汽车在东西轴上的距离(米) |
| 南北轴距离(y) | 物体与汽车在南北轴上的距离(米) |
| 物体方向(偏航角) | 物体的方向 |
| 物体大小 | 物体的长度和宽度(米) |
虽然可以在鸟瞰图的像素坐标系中预测边界框,但这在真实世界中没有实际意义,因为预测结果仍在像素空间中。因此,我们直接预测真实世界的值,以避免后处理中的额外步骤。
此外,在现实场景中,物体可能朝向任何方向。仅计算长度和宽度不足以描述紧密的边界框,因此我们还需要偏航角参数来确定障碍物的朝向。
YOLO模型使用一个32 x 64单元格的锚框网格(宽度大于高度),因为汽车的行车记录仪(以及激光雷达)视野通常更宽。模型使用两种损失函数:正常的YOLO损失(负责预测x、y、l、w和类别)和欧拉损失(专门预测偏航角)。预测最终边界框的方程如下:
\[
\begin{align*}
b_x &= \sigma(t_x) + c_x \\
b_y &= \sigma(t_y) + c_y \\
b_w &= p_w e^{t_w} \\
b_l &= p_l e^{t_l} \\
b_{\varphi} &= \arctan(t_{Im}, t_{Re})
\end{align*}
\]
其中,$b_x$、$b_y$、$b_w$、$b_l$和$b_{\varphi}$分别是障碍物的x和y坐标值、宽度、长度和偏航角。$t_x$、$t_y$、$t_w$、$t_l$、$t_{Im}$和$t_{Re}$是模型预测的六个回归值。$c_x$和$c_y$是32 x 64矩阵中网格单元中心的位置,$p_w$和$p_l$是通过取汽车和行人的平均宽度和长度选择的预定义先验。此外,实现中还有五个先验(锚框)。
总损失的计算方式为:
\[
Loss_{total} = Loss_{YOLO} + Loss_{Euler}
\]
#### 2. 训练用于3D目标检测的YOLO模型
由于代码已经标准化,用户的编码工作量大大减少。我们可以通过确保数据格式正确且位于正确的位置来训练和测试算法。具体步骤如下:
1. 克隆`Complex-YOLOv4-Pytorch`仓库:
```bash
git clone https://github.
```
0
0
复制全文
相关推荐










