
# 基于 CNN 的体素空间人员检测：利用强度测量和点云聚类展平

J. Dybedal $^{1}$ G. Hovland $^{1}$

 $^{1}$挪威格里姆斯塔德，阿格德大学工程科学系

## 摘要

本文演示了在相对较大的室内工业机器人工作站以及室外环境中实现实时人员检测。 使用安装在天花板上的六个深度传感器生成工作站的合并点云。 将合并的点云分割成簇，并将其展平为 xy 和 xz 平面的灰度 2D 图像。 然后，这些图像用作基于卷积神经网络 (CNN) 的分类器的输入。 最终输出是表示人类的 3D 位置 $(x, y, z)$ 和边界框。 该系统能够实时检测和跟踪室内和室外环境中的多个人类。 已通过多个地面真实位置验证所提出的方法的定位精度，结果在所使用的点云体素尺寸（即 0.04 米）范围内。 在户外数据集上的测试结果显示，检测召回率为 76.9%，F1 分数为 0.87。

关键词： 人员检测，室内，室外，点云，体素，展平，CNN

## 1 介绍

在三维数据中检测人员或其它物体的存在，对于实现机器和人类共存环境中的自主性和自动化至关重要。 一个典型的例子是汽车行业，其中自动驾驶车辆必须能够准确感知其周围环境。 另一个例子是在任何工业环境中，例如大型海上平台或小型室内机器人工作站，机器人设备必须与人员共存。

人员检测的方法有很多，在二维图像中检测人员和其他物体的问题在学术文献中有充分的记录，特别是使用了诸如直方图定向梯度 (HOG) (Dalal and Triggs, 2005) 和卷积神经网络 (CNN) 等不同类型的机器学习方法。 在三维空间中检测人员（例如在点云中）也是一个热门话题。 已经进行了大量关于使用 2D 和 3D 激光雷达（通常用于自动驾驶汽车和移动机器人的方法）进行检测的研究。 在 Borgmann et al. (2017) 中，使用隐式形状模型 (ISM) 来检测 3D 激光雷达扫描中的人员，在 Kim et al. (2020) 中，使用激光雷达扫描人员的臀部区域，并使用基于样本的联合概率数据关联滤波器 (SJPDAF) 进行人员检测和跟踪。 激光雷达也被用于 Spinello et al. (2011)，其中使用自下而上的方法选择候选对象，并对细分体素进行验证。

对于 RGB-D 图像，Linder 和 Arras (2015) 的作者使用基于细分的增强方法对人类特征进行分类，例如不同类型的衣服和发型。 该方法与 Lewandowski et al. (2019) 中基于特征的检测方法相结合，用于 Wengefeld et al. (2019) 中估计人类姿势，方法是使用高性能特征。

---

从彩色点云中提取特征。所使用的检测方法采用基于层的策略，为点云簇中的每一层计算特征描述符，并将直方图连接起来形成特征向量。在 Linder 和 Arras (2016) 的研究中，2D 激光扫描和 RGB-D 图像都用于人类检测和跟踪，包括跟踪群体中的多个人类。

```text


人类姿态估计也得到了广泛的研究，基于 CNN 的方法，例如 OpenPose Cao et al. (2017) 用于 2D 姿态估计，以及 Tome 和 Russell (2017) 用于从 2D 图像进行 3D 姿态估计。在 Zimmermann et al. (2018) 中，使用 RGB-D 数据进行 3D 姿态估计，除了彩色图像外，还利用深度信息。使用神经网络（如 VoxelNet Zhou 和 Tuzel (2017)、3D YOLO Hakim (2018) 和 Simon et al. (2019)）在激光雷达点云中进行车辆检测也显示出很有前景的结果。

```

上述方法的共同点是，它们要么是专门为激光雷达扫描设计的，要么依赖于 RGB 图像以及任何深度数据。虽然 RGB 图像的可用性是一个合理的假设，但在某些情况下，冗余性至关重要，例如在油气平台的红色区域。这些区域通常由 RGB 和深度传感器同时监控（参见 Velodyne Lidar (2020)），虽然结合这些测量结果可以获得最佳的检测结果，但如果 RGB 信息不可用，则应提供一种仅基于深度信息的备用解决方案。因此，本文旨在消除检测人员时使用 RGB 图像的必要性。

```text


此外，虽然大多数文献集中在安装在车辆或机器人的单个移动传感器上，但本文提出的方法利用 Dybedal et al. (2019) 中描述的多个静态安装的 3D 传感器生成点云，这在工业环境中也同样常见。

```

在 Simon et al. (2018) 中，介绍了 Complex-YOLO，它是 YOLOv2 的扩展，YOLOv2 是一种用于 RGB 图像的快速 2D 标准对象检测器，它通过特定的复杂回归策略来估计笛卡尔空间中的多类 3D 边界框。提出了一种特定的欧拉区域提议网络 (E-RPN)，通过向回归网络添加一个虚数和实数部分来估计对象的姿态。结果是一个封闭的复数空间，这可以避免通过单个角度估计可能出现的奇异点。在我们的工作中，使用了多个深度传感器，并将数据合并到单个点云中用于检测。因此，正如 Simon et al. (2018) 中提到的单个角度问题，在本文提出的工作中不是一个问题。

```text


在 Munaro et al. (2016a) 中，介绍了 OpenPTrack，这是一款用于 RGB-D 摄像头网络的开源多摄像头标定和人员跟踪软件。人员检测在连接到每个传感器的机器上本地执行，而跟踪由一个节点执行，该节点考虑来自网络的检测结果。对于 Kinect v1 和立体摄像头，这些摄像头可以生成彩色图像，因此使用 HOG 技术对这些图像中的人员进行检测，这些图像与从点云中提取的簇对应。对于 Kinect v2，使用红外图像，因为它们对可见光是无差别的。

```

在 Munaro et al. (2016b) 中，提出的算法通过使用工业环境中对齐的颜色和深度数据进行了进一步的验证。这些算法已作为 ROS-Industrial 项目的一部分以开源形式发布。与 Munaro et al. (2016a,b) 的工作不同，本文采用基于 CNN 的方法，并且在中央节点上使用仅深度测量对合并的点云进行人员检测，而不是在每个节点上使用颜色或红外图像以及深度信息进行本地检测。作者认为，在中央节点上进行人员检测和跟踪将更稳健，因为中央节点可以访问来自所有传感器在实时接收到的完整点云，但这项工作尚未在实验中证明这一点。

在 Hui et al. (2019) 中，提出了一种基于激光点云的三维信息提取的对象检测方法。与本文的方法类似，在 Hui et al. (2019) 中，点云被扁平化为二维图像，这些二维图像用于使用 AdaBoost 算法进行学习。

在 Tang et al. (2017) 中，提出的方法通过一种基于距离的扩展方法将三维点云映射到二维平面。然后提取相应的二维轮廓及其相关的二维特征。使用提取的特征，采用径向基函数 (RBF) 核支持向量机 (SVM) 进行分类。一种选择性二进制和高斯滤波正则化水平集 (SBGFRLS) 算法用于在二维图像中进行轮廓检测。此外，还提取了来自投影二维图像的其他流行的特征描述符，例如 HOG、LBP 和 Haar-like 特征。

Yan et al. (2020) 介绍了关于使用三维激光雷达数据和基于标准支持向量机 (SVM) 的算法进行人体检测和分类的最新工作。Yan et al. (2020) 中使用的三维室内数据已公开发布。在结论部分，作者写道：“未来的工作应该研究其他分类方法，例如深度神经网络。”本文解决了使用 CNN 方法的建议，并且这里开发的这种方法非常适合这种系统，因为它旨在对包含强度测量的点云中的人类进行分类。

---

![Image](images/403eb4757cedd6d91293d87737442b42562e33a4e09f25a073681ae4e696cadc.jpg)

<div style="text-align: center;">Figure 1: Flowchart of the people detection system. The point clouds from each sensor is compressed by an edge computer, and received by a centralized computer before being decompressed and processed.</div>

人类，类似于激光雷达系统生成的点云。

本文的组织结构如下：第 2 节介绍了总体方法和开发的各种模块。第 3 节包含多个实验结果，而讨论和结论在第 4 节给出。

## 2 方法

我们工作的灵感主要来自“3D YOLO”类型的检测器，其中使用激光点云作为图像分类器的输入。为了解决仅使用深度信息进行人体检测的问题，开发了一种基于卷积神经网络 (CNN) 的场景分类方案。为了生成用于分类的图像，应用了一种点云扁平化方法。

检测器的输入是压缩的体素化点云流，如 Dybedal et al. (2019) 中所述。这些流以 ROS (机器人操作系统) 主题的形式发布。使用六个 Microsoft Kinect V2 3D 传感器生成深度测量值，对应于六个点云流。虽然 Microsoft Kinect 传感器可以提供 RGB 图像，但本研究的目的是使其不依赖于 RGB 传感器，因此仅使用深度测量值。

该方法在本论文中通过在室内和室外环境中进行实时多人检测来展示。

图 1 显示了所开发系统的结构，不同的步骤将在以下部分中进一步阐述。源代码可在 Dybedal (2021a) 处获取。

### 2.1 点云预处理

六个 Kinect 传感器节点中的每个节点都以高达 20Hz 的速率发布压缩的点云流。如 Dybedal 等人 (2019) 所述，压缩点云中的点不包含颜色，但包含一个附加的强度值，该值对应于单个体素内测量的点数，并对传感器距离进行了补偿。添加此项的目的是为了在压缩点云时，为每个体素添加一个强度或置信度指标，同时考虑到靠近传感器的物体比更远处的类似物体具有更高的点密度。

值得注意的是，除了不包含颜色之外，本文中使用的点云经过高度压缩和体素化降采样。当使用体素尺寸为 $4\,\mathrm{cm} \times 4\,\mathrm{cm} \times 4\,\mathrm{cm}$ 且裁剪到感兴趣的体积时，Dybedal 等人 (2019) 发现，每个点云通常从 217088 个点减少到 $17\,771 \pm 118$，所需的存储空间减少了 $1:40.5 \pm 0.5$。

在本文中，创建了一个 ROS 节点，该节点接收、同步和合并点云到一个单独的点云。传感器节点与服务器进行时间同步，以确保不同的点云在时间上尽可能接近。根据 Aalerud 等人 (2019) 中描述的方法，执行了校准以确保传感器和全局坐标系之间的优化转换函数。在合并点云时，累加强度值，因此合并点云中的点包含与同一体素对应的所有强度值的总和。因此，所开发的 ROS 节点的输出是单个体素化的点云流，其中每个点包含一个强度值以及 x、y 和 z 坐标。

---

此外。

当获得单个合并的点云时，它会根据集群之间最小的欧几里得距离进行聚类。但是，大多数生成的集群都可以被丢弃，只有被定义为人类候选的集群才用于检测方案。为了选择候选集群，应用以下基于典型人体姿势的约束：

• 最小、最大高度（z 维度）：0.5 米和 2.0 米

• 最小、最大宽度（x、y 维度）：0.2 米和 2.0 米

• 最大距离从地面：0.2 米

如图 2 所示，此过滤操作产生了一组候选集群，这些集群用于生成灰度图像，用于 CNN 训练和分类。

![Image](images/85849ece569854c8ae118d1621d809e07d0ebbccfb4df9631490fb16bf0f5719.jpg)

<div style="text-align: center;">(a)</div>

![Image](images/f2688bff202d22bc0dcb54e78f154f3b294133d5b7eeacb0def9c7a950755de0.jpg)

<div style="text-align: center;">(b)</div>

<div style="text-align: center;">Figure 2: (a) Candidate clusters after segmentation, but before dimension constraints; (b) Candidate clusters after dimension constraints have been applied.</div>

### 2.2 点集群扁平化

考虑了多种计算点云中人员位置的方法，包括将整个点云切片成 xz 平面和 yz 平面的多个部分，然后在每个切片中对人员进行分类/检测。但是，由于人员通常只存在于点中的一小部分，因此这种方法被认为计算成本太高。除了精度（切片厚度）和速度之间的不可避免的权衡外，同一个人或其部分可能在多个切片中被检测到。因此，本文开发的解决方法是，将每个候选点簇在 xz 平面和 yz 平面上进行展平，从而只需对每个候选点簇产生两个小切片。

由于输入点云已经通过基于体素网格的压缩器，其中每个点在体素中心具有固定的坐标，并且体素与全局坐标系统对齐，因此可以通过迭代每个维度的体素来实现簇展平。公式 1 描述了生成 xz 平面中一个像素的过程。

 $$ P(i,j)=\sum_{y=y_{min}}^{y_{max}}I(x_{i},y,z_{j}), $$

其中 $P(i,j)$ 是展平图像中的一个像素，$I(x_i, y, z_j)$ 是位于 $(x_i, y, z_j)$ 体素处的强度值。结果是两个灰度图像，其中每个像素对应于展平点的强度值之和，如图 3 所示。使用强度值创建灰度图像而不是简单地计数点，可以获得具有更大动态范围的图像。由于人体是实心的，因此点只能存在于外部，这大大限制了会导致单个像素的展平点的数量。

由于体素化点云的分辨率较低，因此当使用 4 厘米的体素网格分辨率时，一个人通常由 25x45 像素的图像表示。

### 2.3 场景分类

由于图像已经裁剪到候选点簇，并且在全局坐标系中的位置已知，因此无需进行额外的分割或边界框。因此，可以对生成的图像进行场景分类，即整个图像被分类为单个类别。作为一种概念验证，使用从捕获的数据集中生成的图像训练了一个简单的卷积神经网络。训练数据集中的每个候选簇对应的图像都经过手动标记，分为“人类”、“基于人类”和“基于 AI”三个类别。

---

![Image](images/10901b69166d4d611d4a460b883df698ecaba13cb6c69843824c0b82ceef266a.jpg)

<div style="text-align: center;">(a)</div>

![Image](images/a7cd8afbc2e61991d3b78f15f7648f0db1ea6bee899ae1c09d0b86c436f6fc5c.jpg)

<div style="text-align: center;">(b)</div>

<div style="text-align: center;">Figure 3: (a) Candidate cluster after flattening in the y dimension (xz plane); (b) Candidate cluster after flattening in the x dimension (yz plane). Color represents the accumulated intensity values, where yellow is higher.</div>

“非人类”。共使用了 1105 张图像作为“人类”类别的图像，1956 张图像作为“非人类”类别的图像。选择这两个类别是因为这里的目的是检测机器人环境中是否存在人类。可以扩展类别数量，以能够对任何其他对象进行分类，例如机器人、其他机器、设备等。

然后，标记的图像被随机划分为训练图像（60%）、验证图像（30%）和测试图像（10%）。此外，图像还通过随机旋转（ $\pm90deg$）、反射（围绕 z 轴）和剪切进行增强。

神经网络的结构，包括三个卷积块，以及使用的参数，如表 1 所示。 该结构灵感来自 The MathWorks, Inc (2021) 的一个简单示例，但经过调整以最大化验证精度。 输入层是三维的（RGB），输入大小为 224x224 像素。 因此，除了调整大小之外，图像还需要进行增强，以便在所有 RGB 通道中复制灰度内容。 许多图像分类器，包括预训练的网络，都期望使用彩色图像，因此转换为彩色图像可以实现模块化应用，即可以将分类器替换为另一个分类器，而无需添加额外的复杂性。 与许多其他情况不同，要分类的图像非常小，如前一节所述。 因此，大多数图像需要在被分类器评估之前进行放大，而不能缩小。

网络训练在 Matlab 中使用随机梯度下降与动量

<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td style='text-align: center; word-wrap: break-word;'>Layer</td><td style='text-align: center; word-wrap: break-word;'>Parameter</td><td style='text-align: center; word-wrap: break-word;'>Value</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Input Layer</td><td style='text-align: center; word-wrap: break-word;'>Size</td><td style='text-align: center; word-wrap: break-word;'>$224 \times 224 \times 3$</td></tr><tr><td rowspan="3">Convolution Layer</td><td style='text-align: center; word-wrap: break-word;'>Filter Size</td><td style='text-align: center; word-wrap: break-word;'>3</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>No. of filters</td><td style='text-align: center; word-wrap: break-word;'>16</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Padding</td><td style='text-align: center; word-wrap: break-word;'>1</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Batch Norm. Layer</td><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td style='text-align: center; word-wrap: break-word;'>ReLu Layer</td><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td rowspan="2">Max-pooling layer</td><td style='text-align: center; word-wrap: break-word;'>Pool Size</td><td style='text-align: center; word-wrap: break-word;'>2</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Stride</td><td style='text-align: center; word-wrap: break-word;'>2</td></tr><tr><td rowspan="3">Convolution Layer</td><td style='text-align: center; word-wrap: break-word;'>Filter Size</td><td style='text-align: center; word-wrap: break-word;'>3</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>No. of filters</td><td style='text-align: center; word-wrap: break-word;'>32</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Padding</td><td style='text-align: center; word-wrap: break-word;'>1</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Batch Norm. Layer</td><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td style='text-align: center; word-wrap: break-word;'>ReLu Layer</td><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td rowspan="2">Max-pooling layer</td><td style='text-align: center; word-wrap: break-word;'>No. of pools</td><td style='text-align: center; word-wrap: break-word;'>2</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Stride</td><td style='text-align: center; word-wrap: break-word;'>2</td></tr><tr><td rowspan="3">Convolution Layer</td><td style='text-align: center; word-wrap: break-word;'>Filter Size</td><td style='text-align: center; word-wrap: break-word;'>3</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>No. of filters</td><td style='text-align: center; word-wrap: break-word;'>64</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Padding</td><td style='text-align: center; word-wrap: break-word;'>1</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Batch Norm. Layer</td><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td style='text-align: center; word-wrap: break-word;'>ReLu Layer</td><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Fully-connected layer</td><td style='text-align: center; word-wrap: break-word;'>Output Size</td><td style='text-align: center; word-wrap: break-word;'>2</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Softmax Layer</td><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td style='text-align: center; word-wrap: break-word;'>2-class Classifier</td><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'></td></tr></table>

<div style="text-align: center;">Table 1: CNN Structure and layer parameters.</div>

(SGDM) 优化器。 使用 100 个 epoch 和初始学习率为 0.00001，最终验证精度为 95.75%。

### 2.4 标签和位置提取

本文开发的检测机制包括一个粗略的置信度指标，即，人类可以被分类为在扁平图像中出现 0 个、1 个或 2 个。 在本文的测试中，仅当两个图像都被分类为人时，才被认为是检测。

在检测到目标时，开发的 ROS 程序会发布一个“marker”消息，其中包含检测到的目标的位置和范围。 使用的位置是围绕候选点簇的边界框的中心，边界框本身用于描述检测到人员的区域。

## 3 实验结果

使用了四个不同的测试用例来评估系统。 首先，该方案在 Agder 大学工业

---

机器人实验室 (IRL) 中进行测试 (Dybedal et al. 2019)。 在此环境中，在围绕机器人单元的墙壁上安装了六个 3D 传感器节点，这些节点由 Microsoft Kinect V2 和 NVIDIA Jetson TX2 组成。 在传感器监控的区域内，有三个 ABB 机器人，其中两个是轨道式，一个安装在 Gdel 龙门吊上。 该测试用作概念验证，验证检测器在与训练和验证数据集不同的实时数据上是否有效。

其次，通过将检测到的坐标与由 Leica 激光跟踪仪测量的地面真实坐标进行比较，来测量系统的准确性。 使用与第一个实验相同的设置。

最后，使用户外数据重新训练 CNN，并进行检测能力测试，以测量可能检测到的目标与实际检测到的目标之间的关系。

第三，使用在离岸管道处理设备户外测试设施记录的数据集进行测试，而没有修改算法。 这些数据集是在 2018 年 8 月录制的，使用了与 IRL 实验室相同的传感器节点，并且包括在不同天气条件下具有多个人员的录像。

所有实验都在运行检测器的 Matlab 的台式计算机上进行。 该计算机运行 Ubuntu 16.04，使用 ROS Kinetic，并且包含一个 Intel Core i7 7820X 3.6 GHz 处理器、一个 NVIDIA GTX 1080Ti GPU 和 32 GB 的 RAM。

以下子部分展示了来自三个不同测试用例的结果。 户外数据集已在 Dybedal (2021b) 中公开发布。

### 3.1 室内单人检测

在训练完检测器后，它在一个位于 IRL 实验室的单人身上进行了测试。 目标是验证检测器在与训练数据不同的数据上也能获得良好结果。

图 4 显示了检测到的围绕不同姿势的人的边界框。 在 (a) 中，检测到的位置坐标为 $x = 4.42 \, \text{m}$、$y = 5.22 \, \text{m}$、$z = 0.94 \, \text{m}$，该点是显示的边界框的中心。 检测算法按预期工作，为所有测试姿势的人标记了大小合适的边界框。

此外，使用了一组 160 张“人类”图像和 70 张“非人类”图像来测试 CNN。 在这些图像中，主体穿着不同于训练中使用的服装。 在此测试中，准确率为 88.2%，正如预期的那样，这略低于训练准确率，但仍然接近 90%。

### 3.2 室内准确性验证

为了验证检测器的准确性，将输出的 X、Y 坐标与之前使用徕卡激光跟踪仪以亚毫米精度测量的坐标进行比较，并将这些坐标标记在地板上。 一个人将在监测区域内行走，并在到达标记坐标后，再移动到下一个坐标。 这样进行测试会引入一些不确定性，因为无法保证该人在地面真实坐标的正上方。 但是，由于输入点云的分辨率为 0.04 米，因此该测试仍然可以获得有用的结果。

总共预先测量了 21 个坐标。 在测试过程中，总共在地面真实位置进行了 94 次检测，其中一部分结果显示在表 2 中。 结果显示在表 3 中，可以看出检测器的平均绝对偏差在 0.04 米的点云分辨率范围内。

<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td style='text-align: center; word-wrap: break-word;'>X</td><td style='text-align: center; word-wrap: break-word;'>Y</td><td style='text-align: center; word-wrap: break-word;'>X meas.</td><td style='text-align: center; word-wrap: break-word;'>Y meas.</td><td style='text-align: center; word-wrap: break-word;'>Z meas.</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>5.0</td><td style='text-align: center; word-wrap: break-word;'>8.0</td><td style='text-align: center; word-wrap: break-word;'>4.96</td><td style='text-align: center; word-wrap: break-word;'>8.06</td><td style='text-align: center; word-wrap: break-word;'>0.94</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>5.0</td><td style='text-align: center; word-wrap: break-word;'>7.0</td><td style='text-align: center; word-wrap: break-word;'>5.02</td><td style='text-align: center; word-wrap: break-word;'>7.02</td><td style='text-align: center; word-wrap: break-word;'>0.94</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>5.0</td><td style='text-align: center; word-wrap: break-word;'>6.0</td><td style='text-align: center; word-wrap: break-word;'>4.96</td><td style='text-align: center; word-wrap: break-word;'>6.02</td><td style='text-align: center; word-wrap: break-word;'>0.92</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>5.0</td><td style='text-align: center; word-wrap: break-word;'>5.0</td><td style='text-align: center; word-wrap: break-word;'>5.02</td><td style='text-align: center; word-wrap: break-word;'>4.98</td><td style='text-align: center; word-wrap: break-word;'>0.94</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>4.69</td><td style='text-align: center; word-wrap: break-word;'>5.3</td><td style='text-align: center; word-wrap: break-word;'>4.72</td><td style='text-align: center; word-wrap: break-word;'>5.23</td><td style='text-align: center; word-wrap: break-word;'>0.92</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>4.0</td><td style='text-align: center; word-wrap: break-word;'>3.0</td><td style='text-align: center; word-wrap: break-word;'>4.02</td><td style='text-align: center; word-wrap: break-word;'>2.98</td><td style='text-align: center; word-wrap: break-word;'>0.94</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>2.0</td><td style='text-align: center; word-wrap: break-word;'>7.0</td><td style='text-align: center; word-wrap: break-word;'>5.02</td><td style='text-align: center; word-wrap: break-word;'>7.02</td><td style='text-align: center; word-wrap: break-word;'>0.94</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>5.42</td><td style='text-align: center; word-wrap: break-word;'>9.24</td><td style='text-align: center; word-wrap: break-word;'>5.5</td><td style='text-align: center; word-wrap: break-word;'>9.2</td><td style='text-align: center; word-wrap: break-word;'>0.94</td></tr></table>

<div style="text-align: center;">Table 2: A subset of results obtained during the accuracy validation.</div>

<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'>X</td><td style='text-align: center; word-wrap: break-word;'>Y</td><td style='text-align: center; word-wrap: break-word;'>Total</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Mean absolute deviation (m)</td><td style='text-align: center; word-wrap: break-word;'>0.035</td><td style='text-align: center; word-wrap: break-word;'>0.039</td><td style='text-align: center; word-wrap: break-word;'>0.037</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Std.dev absolute deviation (m)</td><td style='text-align: center; word-wrap: break-word;'>0.041</td><td style='text-align: center; word-wrap: break-word;'>0.035</td><td style='text-align: center; word-wrap: break-word;'>0.038</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Mean deviation (m)</td><td style='text-align: center; word-wrap: break-word;'>-0.001</td><td style='text-align: center; word-wrap: break-word;'>-0.004</td><td style='text-align: center; word-wrap: break-word;'>-0.003</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Std.dev deviation (m)</td><td style='text-align: center; word-wrap: break-word;'>0.054</td><td style='text-align: center; word-wrap: break-word;'>0.053</td><td style='text-align: center; word-wrap: break-word;'>0.053</td></tr></table>

<div style="text-align: center;">Table 3: Results from accuracy test using 94 detections compared to ground truth coordinates.</div>

使用的 X 和 Y 坐标用于验证，因为这些是具有准确地面真实数据的坐标。 但是，边界框还包含检测到的人的宽度、深度和高度。 虽然宽度和深度会因姿势的不同而有很大差异，但测得的高度与测试对象的实际高度进行比较。 使用 56 次在受试者站立时进行的检测，测得的高度为 $(1.76 \pm 0.06)$ 米，而测试对象的实际高度为 1.75 米。

---

![Image](images/8bfba4e85997ee518a8abe1c2e017b1a7296829f6d8282ab5ffecb95cfb5fbbf.jpg)

<div style="text-align: center;">(a)</div>

![Image](images/c0bd6c43d1fee8aa6659009e6fc7908fa8b6eb3e7fd0d5bd80240d66bb614203.jpg)

<div style="text-align: center;">(b)</div>

![Image](images/26c20bf531f67c5ae7a9b5f46bcd7ec48de4b40c33b6620611b74c554907f7bf.jpg)

<div style="text-align: center;">(c)</div>

<div style="text-align: center;">Figure 4: (a) Example detection, walking; (b) Example detection, arms out; (c) Example detection, crouching.</div>

### 3.3 在户外数据集上的测试

为了在更具挑战性的数据上测试检测算法，使用了记录在户外设施的数据集。 数据集是在 2018 年 8 月录制的，使用了与前两个实验相同的传感器，并包含各种天气条件和多个人。 由于未使用 ARUCO 代码进行室内实验中使用的自动校准，因此使用点云中的其他特征手动校准了传感器的平移和旋转。

图 5 (a) 和 (b) 显示了第一个测试的快照，其中有四个人。 如在图 5 (a) 中看到的，天气条件具有挑战性，低太阳光照射在湿混凝土上。 所有人穿着不同的服装，此外还戴着头盔，这并不是原始训练数据的一部分。 但是，在不修改算法的情况下，即仅使用室内实验的训练数据，它能够检测到所有四个人。

另一个数据集是在大雨中记录的。虽然雨水导致点云中的噪声增加，但系统仍然能够正确地对人类进行分类，如图 5 (c) 和 (d) 所示。

#### 3.3.1 人体检测性能

为了确定系统的检测能力，网络再次进行训练，这次包括来自户外数据集的数据。添加了六个数据集，每个数据集包含约 1500 个合并的点云帧，其中包含 0-2 名人员。在提取图像并进行手动标注后，最终的训练和验证集现在包含 4715 张“人类”类别的图像和 6805 张“非人类”类别的图像。

第七个数据集用于测试。该数据集包含 300 秒的录像，其中最多有四人同时出现。这些人随机行走，导致出现许多不同的姿势，以及进出区域。从这组数据中，分析了总共 949 个合并的点云，其中 21 个包含 1 人，83 个包含 2 人，324 个包含 3 人，521 个包含 4 人，即总共有 3243 个聚类应该被归类为人类。检测准确率（召回率）是通过将实际检测到的人数除以可能检测到的总人数来计算的。这得出的召回率为 76.9%（3243 名人类中有 2495 名被正确检测到）。计算出的 F1 分数为 0.87，这是由于精度很高（99.9%）。

在测试过程中，当点云以大约 5 Hz 的速率传输时，检测器以大约 1.2 Hz 的速率输出结果。相对较低的速率是由于检测系统在 Matlab 中运行，并且在对图像进行分类之前，临时图像会写入磁盘。

## 讨论与结论

本文展示了一种使用仅深度信息，对非常稀疏的点云进行人员检测的新方法。概念验证和准确性实验显示出有希望的结果，绝对误差与体素点云的分辨率大致相同，约为 $\pm4$ 厘米。

在准确性测试中，测试对象穿着的服装颜色与训练数据中使用的颜色不同。这表明使用点云中的强度值而不是颜色，允许分类器根据形状区分对象，而不会受到某些服装的影响。

---

![Image](images/9b25f76d25a811baef633bec001b3289574d248b3493240491431cd3adec6052.jpg)

<div style="text-align: center;">(a)</div>

![Image](images/75a9bdf9480fecc61b465ff7c579107c452af8da0eaec1daa881001b7a87fa0c.jpg)

<div style="text-align: center;">(b)</div>

![Image](images/55d2d83a774a9fdbe30edbb317ba35b0b83dc1fa8c92c129f7b6eadcd505334d.jpg)

<div style="text-align: center;">(c)</div>

![Image](images/fb4e9280cfb318e385191ee143ca631011b7bc2902bd6eb129bb651893bb8a84.jpg)

<div style="text-align: center;">(d)</div>

<div style="text-align: center;">Figure 5: Detection test on Outdoor Data - (a) and (b) Four people present and detected at the test site, in low sun on wet ground; (c) and (d) Two people present and detected, in heavy rain.</div>

在户外数据集的测试中，检测召回率为 76.9%，F1 分数为 0.87。虽然这还不是最佳结果，但进一步的调查表明，这主要是由于过滤和分割过程，而不是分类。首先，应该优化分割，以更好地区分人员和环境。典型的场景是人员站立在建筑物上或建筑物附近，或者携带大型物品。在这些场景中，欧几里得距离分割方法难以创建正确的候选聚类，并且这些聚类会被立即丢弃，永远不会传递给分类器。

另一种改进方法是将人员的部分而不是整个人员进行分类。在某些情况下，例如当穿着非常深色的衣服或当物体遮挡时，人体的一部分可能无法在点云中看到。在一个只有躯干可见的示例中，当前的候选集群处理方法会丢弃这些集群，因为它们不在约束范围内。当人员进入或退出监控区域时也会出现相同的问题，从而导致身体的点云不完整。

由于我们的方法使用场景分类器，因此该方法可以通过在训练过程中添加更多类别或完全使用其他类别来扩展以检测任何类型的对象。这使得系统可以扩展以检测人体部位或任何其他对象，例如机器人和设备。如果需要，该系统还可以通过将 (x,y) 平面包含在展平过程中，从而生成第三个用于分类的图像，但这会增加计算负载。

---

计算负载。

未来的工作还应该在其他已发布的数据库上测试分类器，以将性能与其他人员检测技术进行比较。具体来说，所提出的解决方案的精度为 99.9%，但数据集中存在一些异物，这导致了很少的误报。此外，应将分类器和检测器从 MATLAB 移植到更高效的环境（例如本机 ROS 节点），以实现比本文中实现的 1.2Hz 更高的最大检测速率。

## 感谢

本文的研究得到了挪威研究委员会、SFI Offshore Mechatronics 项目（项目编号 237896）的资助。

## 参考文献

Aalerud, A., Dybedal, J., and Hovland, G. 自动校准使用反射式辅助标记的工业 RGB-D 相机网络。Sensors, 2019. 19(7):1561. doi:10.3390/s19071561.

Borgmann, B., Hebel, M., Arens, M., and Stilla, U. 使用隐式形状模型的 MLS 点云中人员检测。pf.bgu.tum.de, 2017. doi:10.5194/isprs-archives-XLII-2-W7-203-2017.

Cao, Z., Simon, T., Wei, S. E., and Sheikh, Y. 使用部分亲和场进行实时多个人 2D 姿势估计。Proc. 30th IEEE Conf. Comp. Vision and Pattern Rec., CVPR 2017. pages 1302–1310, 2017. doi:10.1109/CVPR.2017.143.

Dalal, N. and Triggs, B. 用于人类检测的定向梯度直方图。Proc. 2005 IEEE Comp. Soc. Conf. on Comp. Vision and Pattern Recognition, CVPR 2005, volume I. pages 886–893, 2005. doi:10.1109/CVPR.2005.177.

Dybedal, J. 使用点云展平和 CNN 场景分类器的点云人类检测器。<https://github.com/dybedal/wp3-human-voxel-detector>, 2021a.

Dybedal, J. 用于：使用强度测量和点集群展平进行体素空间的人员检测的复制数据。DataverseNO. 2021b. doi:10.18710/HMJVFM.

Dybedal, J., Aalerud, A., and Hovland, G. 用于大型工业环境的 3D 传感器数据的嵌入式处理和压缩。Sensors, 2019. 19(3):636. doi:10.3390/s19030636.

Hakim, E. A. 端到端 3D 对象检测，使用点云。Technical report, 2018.

Hakim, E. A. 3D YOLO: 端到端的 3D 目标检测，使用点云。技术报告，2018 年。

Hui, L., Yun, L., Meiyi, Q., 和 Shujuan, P. 基于激光点云三维信息提取的人体检测方法。在 ACM 国际会议论文集。Association for Comp. Mach., 纽约，美国，第 208-213 页，2019. doi:10.1145/3307363.3307366.

Kim, J. M., Kim, Y.-J., 和 Moon, C.-B. 基于 SJPDAF 滤波去除激光扫描点云的人体目标跟踪，使用三维激光测距仪。Intl. J. Control, Automation and Systems, 2020. 18(X):1-11. doi:10.1007/s12555-019-0603-6.

Lewandowski, B., Liebner, J., Wengefeld, T., Muller, S., 和 Gross, H. M. 用于移动机器人应用的快速且鲁棒的三维人体检测器和姿态估计器。在 IEEE 国际机器人与自动化会议论文集。第 4869-4875 页，2019. doi:10.1109/ICRA.2019.8793712.

Linder, T. 和 Arras, K. O. 使用网格细分提升方法的 RGB-D 图像中的实时全身人体属性分类。在 IEEE 国际智能机器人与系统会议。第 1335-1341 页，2015. doi:10.1109/IROS.2015.7353541.

Linder, T. 和 Arras, K. O. 使用 ROS 在移动服务机器人上进行人员检测、跟踪和可视化。Studies in Computational Intelligence, 2016. 625:187–213. doi:10.1007/978-3-319-26054-9_8.

Munaro, M., Basso, F., 和 Menegatti, E. OpenPTrack：用于 RGB-D 相机网络的开源多相机校准和人员跟踪。Robotics and Autonomous Systems, 2016a. 75:525–538. doi:10.1016/j.robot.2015.10.004.

Munaro, M., Lewis, C., Chambers, D., Hvass, P., 和 Menegatti, E. 用于工业环境的 RGB-D 人体检测和跟踪。在 Adv. Intell. Systems and Computing。第 1655-1668 页，2016b. doi:10.1007/978-3-319-08338-4_119.

Simon, M., Amende, K., Kraus, A., Honer, J., Sämann, T., Kaulbersch, H., Milz, S., 和 Gross, H. M. Complexer-YOLO：在语义点云上进行实时 3D 对象检测和跟踪。技术报告，2019.

Simon, M., Milz, S., Amende, K., 和 Gross, H.-M. Complex-YOLO：一种用于实时 3D 对象检测的欧拉区域提议方法，应用于点云。技术报告，2018.

---

Spinello, L., Luber, M., 和 Arras, K. O. 使用自下而上的自上而下检测器在 3D 中跟踪人员。在 Proc. IEEE 国际机器人与自动化会议。第 1304-1310 页，2011. doi:10.1109/ICRA.2011.5980085.

Tang, H. L., Chien, S. C., Cheng, W. H., Chen, Y. Y., 和 Hua, K. L. 基于 3D 点云数据的多线索行人检测。在 Proc. IEEE 国际多媒体展览会议。第 1279-1284 页，2017. doi:10.1109/ICME.2017.8019455.

The MathWorks, Inc. 场景分类

使用深度学习。<https://blogs.mathworks.com/deep-learning/2019/11/25/>

scene-classification-using-deep-learning/, 2021. 访问日期：2021-04-28.

Tome, D. 和 Russell, C. 从单张图像进行卷积 3D 姿态估计：从深度中提取。技术报告，2017. URL <http://visual.cs.ucl.ac.uk/pubs/liftingFromTheDeep>.

Velodyne Lidar. 使用 Velodyne 自动化

——马斯登小组——Velodyne 激光雷达。

2020. URL <https://velodynelidar.com/automated-with-velodyne/the-marsden-group/>.

Wengefeld, T., Lewandowski, B., Seichter, D., Pfennig, L., 和 Gross, H. M. 使用彩色点云进行实时人员姿态估计。在 2019 年欧洲移动机器人会议论文集。2019. doi:10.1109/ECMR.2019.8870914.

Yan, Z., Duckett, T., and Bellotto, N. 基于3D LiDAR的在线学习用于人体检测：点云聚类和分类方法的实验分析。Autonomous Robots, 2020. 44:147–164. doi:10.1007/s10514-019-09883-y.

周, Y. and Tuzel, O. V. VoxelNet: 基于点云的3D目标检测的端到端学习。IEEE计算机学会计算机视觉和模式识别会议论文集，2017. 第4490–4499页。doi:10.1109/CVPR.2018.00472.

Zimmermann, C., Welschehold, T., Dornhege, C., Burgard, W., and Brox, T. 基于RGBD图像的3D人体姿态估计，用于机器人任务学习。IEEE国际机器人与自动化会议论文集。第1986–1992页，2018. doi:10.1109/ICRA.2018.8462833.