
# 基于CNN的无人机载三维激光雷达人体检测

Jack N.C. Hayton $^{1}$ Tiago Barros $^{2}$ Cristiano Premebida $^{2}$ Matthew J. Coombes $^{1}$ Urbano J. Nunes $^{2}$

摘要——本文研究了无人机搭载的三维激光雷达采集的点云数据中的人体检测问题。该技术拥有诸多潜在应用场景，例如安全监控、救灾和搜救行动。本文提出一种基于CNN的方法，能够分析三维激光雷达传感器返回的点云，从而实现人体检测。本文所述算法由三个核心部分组成：数据预处理、后处理和人体分类。本文中将目标划分为两类：人体和非人体。分类过程通过占用栅格地图将三维点云投影到一系列二维平面上完成，生成目标对应顶视图、前视图和侧视图的一组轮廓，最终通过监督CNN使用单视图和多视图（3通道）图像块完成分类。

## 一、引言与相关工作

过去十年，机器人技术与自动驾驶的兴起让LiDAR传感器步入主流，在此之前，这类传感器因价格过高、体积偏大，无法集成到大多数机器人应用中。LiDAR能够提供精度极高的空间感知，但它的分辨率通常远低于相机等其他常见传感器。在机器人应用场景中，它的核心功能是提供可用于机器人控制与导航的实时空间感知。处理LiDAR数据（也称为点云）时，最大的挑战之一就是在三维数据点集中准确检测出感兴趣目标。

利用LiDAR开展目标分类与跟踪的研究已经十分充分，近十年来，随着机器人技术$^{[1]}$和自动驾驶汽车$^{[2]}$的发展，LiDAR的应用规模出现了大幅增长。大多数LiDAR相关研究都围绕无人（自主）地面车辆（UGV）$^{[3]}$展开，但过去几年间，LiDAR在无人飞行器（UAV）$^{[4]}$ $^{[5]}$上的应用不断增加，这主要得益于LiDAR系统的体积与重量持续缩小。

过去十年，工程技术与电池技术的进步让消费级UAV（即无人机）成为主流，也为机载LiDAR打开了通往大量潜在应用的大门[^6] [^7]。目前机载LiDAR的应用大多局限于静态航空测绘，因此将机载LiDAR技术与目标检测算法结合[^8]带来了诸多全新可能性。潜在应用场景十分丰富，其中就包括国防或执法领域中需要对人员进行追踪跟

![Image](images/d554fcf6281b389b8537607dcd894110a12e82a6a25231bffc15e906f718ba2f.jpg)

<div style="text-align: center;">Fig. 1. The octocopter drone (DJI S1000) with the onboard LiDAR (Velodyne VLP-16) used to collect point cloud data for human detection. The sensor coordinate reference system ( $F_{velo}$) are designated by the xyz axes.</div>

不适合地面车辆通行的地形。此外，这类系统还可用于救灾或搜救行动，在这类任务中，无人机会扫描指定区域，定位人员并传输他们的位置。

目前绝大多数关于小型机载LiDAR的研究工作都与地形测绘、地质勘测、农业机器人和数字高程测绘相关。Tulldahl等人[^6]回顾了小型无人机载LiDAR的应用场景与性能，但并未提及任何目标检测或跟踪的用例。目前已经存在商用解决方案，例如Phoenix LiDAR Systems，该方案旨在为应用于测绘和地质勘测领域的无人机载LiDAR提供一套完整的集成解决方案[^9]。近期，Velodyne与YellowScan合作，将其VLP-16 Puck LiDAR（即本项目使用的同款型号）集成到YellowScan勘测系统中，用于满足高要求无人机应用的需求[^10]。无人机载LiDAR系统过去主要用于测绘，如今正被应用于更多样化的场景中。据我们所知，迄今为止尚未有研究验证将现成LiDAR（如Velodyne Puck）安装在无人机上用于识别和跟踪目标的可行性。

机载LiDAR领域现有研究的匮乏促使我们从无人机采集真实场景的LiDAR数据，如图1所示。本研究旨在开发一种基于CNN的目标检测算法，使用搭载在无人机上的三维LiDAR实现检测。本文的核心贡献如下：(i) 一个面向人员检测的无人机载三维LiDAR数据集；(ii) 完整的点云前后处理流程，包括地面检测、聚类和占据栅格二维表示；(iii)

---

![Image](images/a7eeaf988ce4e32a8348a68427c919a60f3b5a19cf9e25c104aed2b0ae1442e3.jpg)

<div style="text-align: center;">Fig. 2. Proposed pipeline of the 3D LiDAR-based human detection algorithm. Main modules are: pre-processing, post-processing, and object classification.</div>

基于CNN的人员分类。

本文剩余部分结构安排如下：第二节介绍了本文开发的、用于处理三维点云并检测人体的方法与思路。第三节详细介绍了数据集、实验以及包含增强和非增强CNN模型在内的研究结果。最后，第四节总结了本研究并给出未来工作的建议。

### 二、研究方法与本文提出的方法

本节详细介绍了所开发的算法，该算法以无人机机载激光雷达（LiDAR）输出的点云作为输入，输出视场内各个目标的位置和类别。图2给出了该算法的流程框图，本检测算法分为三个主要模块：数据预处理、后处理和目标分类。

### A. 传感器数据预处理

数据预处理指从规模更大的原始数据中提取并“清理”出数据子集的过程。这一步必不可少，因为真实场景的数据通常存在不完整、不一致、无序和含噪的问题。在本文研究背景下，输入数据为点云：即由直角坐标描述的无序点构成的$(N \times 3$数组，其中N为数据点的数量。本文所需的预处理步骤包括同步、地面检测、数据对齐和ROI生成。数据同步确保不同帧之间的数据点共享同一全局坐标系，从而可以对比不同帧中目标的坐标。数据聚类用于将场景中的目标从环境中分离出来（即生成目标候选假设），以便后续对目标进行分类。

### B. 同步、地面检测与对齐

多帧点云数据的配准可通过现有算法实现，该算法基于激光雷达里程计完成帧间同步。点云必须与全局坐标系对齐，才能对数据进行处理。我们可以通过在点云中识别出一个可作为参考点的特定“参考地标”来实现每一帧的旋转，之后所有帧都可经过旋转/平移，最终对齐到全局坐标系中。本研究需要两种不同的配准流程，但二者都采用下文描述的两步流程：

1）识别并提取公共地标，即地面。

2）基于公共地标对数据集进行旋转/平移。

无人机的运动导致激光雷达输出的原始点云数据无法同步。帧同步通过运行$loam\_velodyne$ SLAM工具包$^1$ [^11]完成，但该过程仅使用里程计数据，即不会构建地图。SLAM算法通常用于通过递归向单个数据集添加数据来生成地图，但在本研究中，仅使用该算法的定位功能来完成帧同步。只有在数据同步完成后，才能将其输入主算法，主算法从地面检测开始。数据对齐过程包括确定一个固定参考，之后可利用该参考旋转点云。由于所有物体都位于地面上，因此地平面是这种情况下合适的参考基准。将地平面与笛卡尔坐标系$\{B\}$对齐（参见图5），可以轻松将点云从上到下、前后或侧向投影到平面上，简化占据栅格建图步骤。三维数据集的旋转通过将其乘以旋转矩阵$R_{zyx}(\phi, \theta, \psi)$实现，其中$\psi$、$\theta$和$\phi$分别对应偏航角、俯仰角和滚转角三个旋转角度。

常用参考地标的类型决定了其提取方法，本文中地平面就是参考地标，三维平面是待提取的图元。因此，我们需要一种算法能够识别点云中位于三维空间同一平面内的点集。三维空间中的平面可以通过两个参数实现参数化，这两个参数描述平面法向量的空间角度。本文采用RANSAC方法确定三维数据集的最佳拟合平面。因此，RANSAC的执行结果会输出地平面及其

---

对应法线。利用该法线和坐标x轴计算得到旋转矩阵，随后将该旋转应用于所有剩余帧。这种初始旋转可保证地平面与xy平面平行，但无法保证地面位于高度0处，该要求通过将整个点云沿当前到地面的平均偏移平移实现。请注意，本流程适用的前提是视野（FOV）内仅存在单个地平面（平坦地面），本次数据采集的设置始终满足这一条件。若地面不平整或存在多个高程，这种对齐方法会得到不准确的结果。

为完成对齐，点云的纵轴还需要与坐标x轴对齐。这需要在平行于地平面的xy平面内进行额外旋转。和之前步骤一样，这需要识别一个特定特征作为参考，来确定纵向方向。点云会在地面上生成对称图案（前提是无人机未倾斜，俯仰角和滚转角均为0）。对称轴可用于生成最佳拟合线。根据地平面的对称特性，对称轴可以计算为线性数据拟合得到的“最佳拟合线”。该最佳拟合线用于确定点云与x轴之间的旋转偏移量。

RANSAC [^12] 在地面检测中表现极佳，成功在测试数据集的所有帧中识别出地平面。当地面存在较为明显的起伏时会产生轻微误差，本质上是将地面分割为多个线性单元。这种情况偶尔会导致检测得到的地平面与真实地面不完全平行。不过，与地面本身的不平整相比，这些误差微不足道，对算法的运行结果没有实质影响。但由于地面检测存在轻微偏差，第二次旋转更容易出错，会形成不对称形状，最终得到一条“错误”的最佳拟合直线。因此，第二次旋转的流程会执行两次，最终平均误差为0.45度，而仅执行一次旋转的误差为4.6度。

### C. 目标假设生成——聚类

对可能出现在LiDAR的FOV中的目标进行分类的第一步是识别出目标本身。该过程被称为聚类，工作内容包括确定目标数量、每个目标所属的数据点以及每个目标的质心。聚类对算法的成功至关重要，因为点云的精准聚类能力会直接影响分类器的准确率。

在聚类之前，必须首先通过创建感兴趣区域（ROI）来缩减点云规模。聚类的计算成本随待聚类数据点的数量增加而上升，因此任何不会影响聚类结果的点云缩减都是有益的。感兴趣区域的生成取决于无人机（UAV）的运行环境。本次数据采集的设计简化了感兴趣区域的创建流程：所有目标（人类和非人类目标）都位于地平面上，且处于无人机10米半径范围内（无人机保持恒定高度）。在数据对齐过程中，我们使用RANSAC确定地平面以及所有属于地平面的数据点。创建感兴趣区域的第一步是从点云中移除地平面，这可以确保与地面相关的数据点不会被聚类为目标的一部分。第二步是修剪剩余点云，去除不必要的数据点，具体操作是在无人机周围创建一个“框”，移除所有位于该边界之外的点。激光雷达里程计会输出传感器的位置，该位置被用作“修剪框”的中心（仅使用x和y位置，修剪框的高度从地面开始算起）。该框的尺寸为$20 \times 10 \times 3$ 米，由于无人机保持恒定高度，因此框尺寸不会发生变化。该方法仅在已知激光雷达运行条件时才能使用，而这在实际应用场景中通常难以实现。

本文采用基于欧氏距离$d_{E}$的层次聚类法，确定点云中的聚类数量。层次聚类会构建聚类的层级结构，要求将待聚类空间划分为离散子分区，这一步骤通过三维网格细分实现。聚类过程分为两个部分：第一部分生成感兴趣区域（ROI），第二部分对该区域内的目标进行聚类。

唯一可调整的输入参数是$d_{E}$。本文测试了1米至2米之间的多个取值，以确定哪一个能得到最优结果。最优参数值取决于ROI内的目标数量、目标的典型尺寸以及目标之间的典型间距。当仅存在单个目标时，$d_{E}$必须足够大，才能将所有数据点归为同一个聚类。假设ROI仅包含目标物体的数据点（即地平面去除和修剪操作成功），那么对于仅含单个目标的帧，$d_{E}$不存在上限。这种情况下，增大该参数只会得到相同的结果：所有数据点仍会被归为同一个聚类。

但地平面完全去除和修剪的假设并非总是成立，偶尔仍会有部分地面残留在ROI中。这是因为地面存在起伏，导致部分数据点被判定为地平面的离群点。这类情况下，较大的$d_{E}$会将这些离群地面点与目标物体的数据点归为同一聚类，这是不符合预期的结果。研究发现，当仅存在1个目标时，取值为2米的$d_{E}$在96%的案例中都能成功聚类，同时还能确保聚类不会将ROI内残留的其他数据点归入目标聚类。但该取值不适用于多目标场景，因为它通常会将多个目标归为同一个聚类，让整个聚类过程失去意义。

在多目标场景中，仅调整$d_{E}$参数不足以持续获得准确结果。这是因为当$d_{E}$低于0.5时，每个独立目标会被分割为多个聚类。而当该值高于0.5时，多个

---

```pseudo
// Algorithm 1: Clustering for point cloud object hypothesis generation.

```

结果：点云聚类列表 C

1 输入：点云数据 P，其中 $p_i = [x, y, z] \in P$；
2 为 P 构建 kd 树表示；
3 初始化空聚类列表 C，以及待检查点队列 Q；
4 对每个点 $p_i \in P$ 执行以下操作：
5 将 $p_i$ 添加到当前队列 Q 中；
6 对每个点 $p_i \in Q$ 执行以下操作：
7 搜索 $P_i^k$ 的邻点集合 $p_i$，满足邻点位于半径为 $r, d_E$ 的球体范围内；
8 对每个邻点 $p_i^k \in P_i^k$ 检查该点是否已被处理，若未处理则将其添加到 Q 中；
9 结束
10 当 Q 中所有点都处理完成后，将 Q 添加到聚类列表 C 中，然后 $Q \leftarrow \varnothing$；
11 结束
12 返回：当所有点 $\in P$ 都处理完成后，算法终止；

如果多个目标彼此距离很近，它们就会被归为同一组。激光雷达$^{2}$相对较低的分辨率放大了这一效应，因为每个目标仅占用激光雷达的两到三个通道。由于通道之间存在较大间隔，属于目标“A”的数据点实际上可能比部分属于目标“B”的数据点距离更近，这就会导致部分数据点被分到错误的聚类簇中。然而，如果将$d_{E}$降低到0.5米以下，单个目标又会被聚类为多个对象，导致无法动态判断哪些聚类簇属于哪个目标。当目标之间的距离在1米以内时，聚类的成功率仅为57%。该算法的步骤已总结在算法1中。

#### D. 基于Occ.Grid映射的环境表示

聚类算法会返回一个$N \times 3D$数组，其中包含所有属于某一簇的数据点。聚类分类基本上可以通过两种方法实现：(i) 将包含该聚类所有数据点的数组输入到一个三维模型中，例如PointNet [^13]；(ii) 将三维聚类表示为一系列二维投影，再将这些二维“图像”输入传统CNN。第一种方法保留了数据中的全部特征，理论上能得到更准确的结果，但该方法需要对聚类进行更多后处理。具体来说，由于CNN的输入层维度必须保持恒定，每个聚类都需要经过缩减或扩充，使所有聚类包含相同数量的数据点，才能输入同一个CNN。复杂度提升、数据集规模可能过小无法得到合理结果，以及三维点标注难度大，这些因素共同促使我们选择第二种方法。

将三维空间降维至二维空间只需将数据点投影到给定平面上即可，如图3所示，该投影会生成目标物体在

![Image](images/4e79f0be026982b32b5d1763d5ab621b45eb140cacc75734a65f2f56edb70edd.jpg)

<div style="text-align: center;">Fig. 3. 3D-LiDAR cluster of person and the multi-view 2D representation: Top (T), Front (F), Side (S).</div>

平面。我们选取三个笛卡尔平面作为投影平面，分别是xy平面（俯视图）、xz平面（正视图）和zy平面（侧视图）。为了减少输入变量数量，进而降低后续CNN算法的复杂度，我们没有采用直接投影，而是使用占据栅格地图构建[^14]流程生成低分辨率投影图像。该流程会根据所需精度将投影目标平面拆分为多个离散单元，我们通过将聚类中心与栅格地图中心对齐，把聚类放置在栅格地图的中心，之后将数据点投影到栅格上，再根据落入每个栅格单元的点的属性为栅格单元赋值，可视化后该值对应不同的灰度。在最简单的二值栅格场景中，任意包含至少一个数据点的单元会被判定为“已占据”（黑色），其余所有单元判定为空闲（白色）。这类栅格通常用于构建机器人导航所需的环境俯视图，但在本研究中，我们用这类栅格生成可输入分类器的图像。

二维占据栅格分为两类：二值栅格和概率栅格[^15]。概率栅格会为目标单元格赋予一个占用概率（百分比）。这类栅格可转换为灰度图像（0 = 白色，1 = 黑色，中间为不同灰度梯度）。二值栅格为每个单元格赋予单一值，仅标记其为占用或空闲。本文最初采用概率栅格，分配给单元格的概率值对应分配到该栅格单元的数据点归一化后的高度。此处归一化的含义是：0 = 簇内的最低“高度”，1 = 簇内的最高“高度”。“高度”这一术语指垂直于投影平面的轴。但研究发现，就分类器准确率而言，二值栅格和概率栅格之间没有差异。因此，对比不同CNN时仅使用二值栅格。创建栅格地图时，有两个参数可以调整：栅格整体尺寸和分辨率（单元格尺寸）。本文所用的所有栅格地图整体尺寸一致，为$3 \times 3$米。栅格分辨率指每米的单元格数量，该参数决定了每个单元格的尺寸。

---

## 2020年IEEE自主机器人系统与竞赛国际会议（ICARSC），4月15-16日，葡萄牙蓬塔德尔加达

<div style="text-align: center;">TABLE I</div>

<div style="text-align: center;">NUMBER OF EXAMPLES PER VIEW (T,S,F AND TSF), IN TOTAL (TOT) AND IN EACH SUBSET (Sub). PERCENTAGES OF THE TRAINING, TEST AND VALIDATION SETS FOR THE CNN-MODEL</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;'></td><td style='text-align: center; word-wrap: break-word;'>Single View</td><td style='text-align: center; word-wrap: break-word;'>Object</td><td style='text-align: center; word-wrap: break-word;'>Human</td><td style='text-align: center; word-wrap: break-word;'>Train. Set [%]</td><td style='text-align: center; word-wrap: break-word;'>Valid. Set [%]</td><td style='text-align: center; word-wrap: break-word;'>Test Set [%]</td></tr><tr><td rowspan="2">Augmented Data</td><td style='text-align: center; word-wrap: break-word;'>TOT</td><td style='text-align: center; word-wrap: break-word;'>3124</td><td style='text-align: center; word-wrap: break-word;'>1612</td><td style='text-align: center; word-wrap: break-word;'>1512</td><td style='text-align: center; word-wrap: break-word;'>60</td><td style='text-align: center; word-wrap: break-word;'>15</td><td style='text-align: center; word-wrap: break-word;'>25</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Sub</td><td style='text-align: center; word-wrap: break-word;'>806</td><td style='text-align: center; word-wrap: break-word;'>428</td><td style='text-align: center; word-wrap: break-word;'>378</td><td style='text-align: center; word-wrap: break-word;'>-</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">Non-Augmented Data</td><td style='text-align: center; word-wrap: break-word;'>TOT</td><td style='text-align: center; word-wrap: break-word;'>510</td><td style='text-align: center; word-wrap: break-word;'>225</td><td style='text-align: center; word-wrap: break-word;'>285</td><td style='text-align: center; word-wrap: break-word;'>60</td><td style='text-align: center; word-wrap: break-word;'>15</td><td style='text-align: center; word-wrap: break-word;'>25</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Sub</td><td style='text-align: center; word-wrap: break-word;'>12t</td><td style='text-align: center; word-wrap: break-word;'>56</td><td style='text-align: center; word-wrap: break-word;'>71</td><td style='text-align: center; word-wrap: break-word;'>-</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 II</div>

<div style="text-align: center;">CNN ARCHITECTURE DESCRIPTION.</div>

<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td style='text-align: center; word-wrap: break-word;'>N#</td><td style='text-align: center; word-wrap: break-word;'>Layer</td><td style='text-align: center; word-wrap: break-word;'>Description</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>1</td><td style='text-align: center; word-wrap: break-word;'>Image Input</td><td style='text-align: center; word-wrap: break-word;'>$90 \times 90 \times \frac{1}{3}$, ‘zerocentre’ normalization</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>2</td><td style='text-align: center; word-wrap: break-word;'>Convolution</td><td style='text-align: center; word-wrap: break-word;'>$83 \times 3$ conv., stride [1 1], padd. [1 1]</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>3</td><td style='text-align: center; word-wrap: break-word;'>Batch norm.</td><td style='text-align: center; word-wrap: break-word;'>Batch normalization</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>4</td><td style='text-align: center; word-wrap: break-word;'>ReLU</td><td style='text-align: center; word-wrap: break-word;'>ReLU</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>5</td><td style='text-align: center; word-wrap: break-word;'>Max Pooling</td><td style='text-align: center; word-wrap: break-word;'>$2 \times 2$ max pool., stride [2 2], pad. [0 0 0 0]</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>6</td><td style='text-align: center; word-wrap: break-word;'>Convolution</td><td style='text-align: center; word-wrap: break-word;'>$163 \times 3$ conv., stride [1 1], padding ‘same’</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>7</td><td style='text-align: center; word-wrap: break-word;'>Batch norm.</td><td style='text-align: center; word-wrap: break-word;'>Batch normalization</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>8</td><td style='text-align: center; word-wrap: break-word;'>ReLU</td><td style='text-align: center; word-wrap: break-word;'>ReLU</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>9</td><td style='text-align: center; word-wrap: break-word;'>Max Pooling</td><td style='text-align: center; word-wrap: break-word;'>$2 \times 2$ max pool., stride [2 2], pad. [0 0 0 0]</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>10</td><td style='text-align: center; word-wrap: break-word;'>Convolution</td><td style='text-align: center; word-wrap: break-word;'>$323 \times 3$ conv., stride [1 1], padding ‘same’</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>11</td><td style='text-align: center; word-wrap: break-word;'>Batch norm.</td><td style='text-align: center; word-wrap: break-word;'>Batch normalization</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>12</td><td style='text-align: center; word-wrap: break-word;'>ReLU</td><td style='text-align: center; word-wrap: break-word;'>ReLU</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>13</td><td style='text-align: center; word-wrap: break-word;'>Full connected</td><td style='text-align: center; word-wrap: break-word;'>2 fully connected layer</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>14</td><td style='text-align: center; word-wrap: break-word;'>Softmax</td><td style='text-align: center; word-wrap: break-word;'>Softmax</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>15</td><td style='text-align: center; word-wrap: break-word;'>Output</td><td style='text-align: center; word-wrap: break-word;'>Classification w/ CrossEntropy</td></tr></table>

### E. 基于CNN的分类

我们使用同一数据集训练了一个CNN，分别在三种不同网格分辨率下训练，对应网格数为10、25和50，对应的单元格边长分别为10 cm、4 cm和2 cm。同一聚类在三种分辨率下的正投影如图4所示。每个CNN都按照表I在同一测试数据集（正负样本组合）上进行了测试。不同CNN之间的对比将在下一节讨论，所有对比所用模型均基于25格网格分辨率生成的图像训练得到，因为该分辨率取得了最佳结果。

![Image](images/e9e43679627fabe34518f79bb9e7484819b9bed7b9a9b4dc9613c06a32b51acf.jpg)

![Image](images/deb02a56c8bdc5e66b3f58b8764ebe86af62111a1ae028f5ab8fff7bcb96851e.jpg)

![Image](images/b884a95571d752d27764584685e30a0168a85eec251ebd584277f24df70af159.jpg)

<div style="text-align: center;">Fig. 4. 2D representations, using grid mapping technique, with resolutions of 10, 25 and 50 cells respectively.</div>

#### III. 实验与分类结果

搭载于无人机（UAV）的LiAR直到最近才受到关注，因此该领域目前尚未开展大量研究。受此影响，目前没有公开可用的数据集，因此我们需要自行采集数据。

为了$m^{i}$ations that the airborne LiD-narios were

![Image](images/1bdc96cd49f253787bafaa7f392935578eaee825ad6174006736929710112545.jpg)

<div style="text-align: center;">Fig. 5. A point cloud frame in the  $\{B\}$ coordinate system, where it is possible to visualize some people.</div>

以及物体（负样本），同时涵盖单目标和多目标场景。由于点云本身呈狭长形态（如图5所示），当人员从相对于点云纵轴垂直或平行的方向进入LiDAR视野时，人员的点云形状会出现微小差异。因此每种场景都在两种方向下开展了实验。实验场景包含5名成年人（4名男性、1名女性）构成正类，总共10个独特物体构成负类。

作为负类样本，我们选取了通常出现在户外的物体，具体而言就是这类技术大概率会投入应用的城市环境中的物体。由于物体总量有限，我们确保所选物体具有不同的形状和大小，以最大程度提升数据集的多样性。正类仅包含成年人样本，所有样本的身高都相近（范围在160-185厘米之间）。点云不包含颜色或纹理信息，因此它能捕捉到的不同个体之间的唯一差异就是尺寸（身高/形状）。表I总结了该数据集的信息。

#### A. 基于CNN的分类

栅格图的分类采用深度CNN模型完成。我们有意将生成的栅格图（下文简称图像）做得稍大，对应$90 \times 90$个单元格，以此确保每个聚类的所有数据都能被完全覆盖，因为所用算法只要有任意一个数据点落在栅格区域外就会运行失败。但这种做法会导致大多数物体周围存在大量空白区域，增大了图像尺寸，进而增加了神经网络所需的节点数量。

该数据集包含三组图像：顶部（T）、正面（F）和侧面（S）投影，每个投影对应一个通道。我们设计了多个CNN，对比了它们的准确率，以确定三种投影中哪一种能得到最优结果。单一投影包含的信息量有限，因此我们将所有图像拼接为一幅（3通道）图像（TFS）。为了降低过拟合的风险，我们对数据进行了增强处理。数据增强可以通过多种方式实现，例如对图像进行裁剪、旋转、镜像、再次旋转或平移。在我们的研究场景中，裁剪或平移图像并没有特别大的作用，因为算法会动态生成网格图。

---

采用相同的方法处理后，待分类图像始终保持统一尺寸，且目标始终位于网格图的中心位置。

我们最终选择的数据增强方法是沿所有三个坐标轴进行小步长旋转。每个簇绕其质心在给定的角度步长范围内进行旋转。经过数据增强后，原本225个（目标/负样本）和285个（人类）独特网格图，被转换为总计1612张和1512张图像。尽管数据量仍然相对有限，但已经足够训练该神经网络。输入层的节点数必须与图像中的像素/单元数相等。在本研究中，多通道（拼接视图）的输入层为 $[90 \times 90 \times 3]$，单张图像的输入层为 $[90 \times 90 \times 1]$。网络输出层的数量等于分类任务的类别数；在本案例中，分类器仅需要区分人类和其他所有物体，因此需要一个包含2个节点的输出层。CNN模型/架构、网络层和超参数的具体参数见表II。

#### B. 结果与讨论

在训练和验证学习模型时，必须将整个数据集划分为训练集和测试集。测试集中的样本必须不同于训练集中的样本，这一点至关重要（为了得到公平的测试结果，网络在此之前不能接触过这些测试样本）。我们既可以简单按比例划分数据集（70%为训练集，30%为测试集），也可以像本文一样采用交叉验证技术。交叉验证法会将整个数据集划分为多个大小相等的部分；本研究将数据拆分为了4个子集，随后用4种不同的训练/测试数据组合训练4个架构相同的CNN模型。例如：第一个CNN子集用子集2、3、4训练，子集1测试；第二个CNN子集用子集1、3、4训练，子集2测试，以此类推。如前文所述，测试集必须与训练集不重叠，这一规则同样适用于增广图像，因此每张原始图像生成的所有增广图像都被划分到同一个子集。

本研究分别使用非增广训练集和增广训练集，针对四种图像类型（T、F、S 和 TFS）各训练了一个CNN。为得到更准确的结果，会对每种图像类型下4个CNN（对应不同子集组合）的测试准确率取平均值。完整结果详见Table III。除侧视图（Side-view）外，增广模型的准确率平均显著高于非增广模型，顶视图（Top-view）的提升尤为明显，这符合普遍规律：更多训练数据通常会提升CNN的性能。至于AUC（根据Figs 6和7中的ROC曲线计算得到），我们需要谨慎解读模型的性能结果，因为测试集规模不足，无法覆盖真实场景中所有可能的变化。请注意，所有CNN模型都是在非增广测试集上完成测试的。

尽管该算法目前能够正常运行，但仍可通过改进来提升其鲁棒性和运行速度。聚类是该算法所有组件中失败率最高的部分，因此该子算法

<div style="text-align: center;">TABLE III</div>

<div style="text-align: center;">PERFORMANCE MEASURES, IN %, FOR EACH "VIEW" ON THE AUGMENTED AND NON AUGMENTED MODELS.</div>

<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td style='text-align: center; word-wrap: break-word;'></td><td colspan="4">Augmented CNN</td><td colspan="4">Non-Augmented CNN</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>View:</td><td style='text-align: center; word-wrap: break-word;'>S</td><td style='text-align: center; word-wrap: break-word;'>F</td><td style='text-align: center; word-wrap: break-word;'>T</td><td style='text-align: center; word-wrap: break-word;'>TFS</td><td style='text-align: center; word-wrap: break-word;'>S</td><td style='text-align: center; word-wrap: break-word;'>F</td><td style='text-align: center; word-wrap: break-word;'>T</td><td style='text-align: center; word-wrap: break-word;'>TFS</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Accuracy</td><td style='text-align: center; word-wrap: break-word;'>95.5</td><td style='text-align: center; word-wrap: break-word;'>97.1</td><td style='text-align: center; word-wrap: break-word;'>78.2</td><td style='text-align: center; word-wrap: break-word;'>98.8</td><td style='text-align: center; word-wrap: break-word;'>96.5</td><td style='text-align: center; word-wrap: break-word;'>97.8</td><td style='text-align: center; word-wrap: break-word;'>69.6</td><td style='text-align: center; word-wrap: break-word;'>95.8</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>AUC</td><td style='text-align: center; word-wrap: break-word;'>99.2</td><td style='text-align: center; word-wrap: break-word;'>99.7</td><td style='text-align: center; word-wrap: break-word;'>91.0</td><td style='text-align: center; word-wrap: break-word;'>99.9</td><td style='text-align: center; word-wrap: break-word;'>99.5</td><td style='text-align: center; word-wrap: break-word;'>99.7</td><td style='text-align: center; word-wrap: break-word;'>83.9</td><td style='text-align: center; word-wrap: break-word;'>99.7</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Precision</td><td style='text-align: center; word-wrap: break-word;'>92.3</td><td style='text-align: center; word-wrap: break-word;'>96.1</td><td style='text-align: center; word-wrap: break-word;'>87.0</td><td style='text-align: center; word-wrap: break-word;'>98.4</td><td style='text-align: center; word-wrap: break-word;'>95.4</td><td style='text-align: center; word-wrap: break-word;'>97.1</td><td style='text-align: center; word-wrap: break-word;'>97.1</td><td style='text-align: center; word-wrap: break-word;'>99.4</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Recall</td><td style='text-align: center; word-wrap: break-word;'>99.6</td><td style='text-align: center; word-wrap: break-word;'>98.6</td><td style='text-align: center; word-wrap: break-word;'>79.8</td><td style='text-align: center; word-wrap: break-word;'>99.5</td><td style='text-align: center; word-wrap: break-word;'>98.2</td><td style='text-align: center; word-wrap: break-word;'>98.9</td><td style='text-align: center; word-wrap: break-word;'>66.9</td><td style='text-align: center; word-wrap: break-word;'>93.7</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>F-score</td><td style='text-align: center; word-wrap: break-word;'>95.7</td><td style='text-align: center; word-wrap: break-word;'>97.3</td><td style='text-align: center; word-wrap: break-word;'>81.5</td><td style='text-align: center; word-wrap: break-word;'>98.9</td><td style='text-align: center; word-wrap: break-word;'>96.7</td><td style='text-align: center; word-wrap: break-word;'>98.0</td><td style='text-align: center; word-wrap: break-word;'>78.68</td><td style='text-align: center; word-wrap: break-word;'>96.4</td></tr></table>

![Image](images/5548033bec1d3a230002ea797570282c665fb62dd348501151d281129c493422.jpg)

<div style="text-align: center;">Fig. 6. ROC curves for the CNN models trained on the non-augmented dataset.</div>

应当进行修订，或是替换为其他方案。聚类效果的改进也会对分类产生积极的连锁效应。当前算法假设整个ROI位于同一个“平坦”地平面，但这无法代表真实环境，真实环境中的地面往往凹凸不平、存在多层结构。因此需要实现新的数据对齐策略，才能在这类场景下有效工作。根据应用场景和精度要求，可以选用性能更优（高分辨率）的传感器，从而得到更好的结果。

可通过反馈回路将算法的分类/检测组件关联起来实现改进。这在跟踪近距离多目标的场景中尤为必要，因为在这类场景下聚类组件或分类组件单独工作都可能出现故障。目标的预估位置可以用来辅助该目标的聚类和分类工作。若要让本文提出的方法适用于更具挑战性的复杂场景，必须大幅增加输出类别的数量。这就需要获取规模大得多的数据集，尤其是非人类物体（负样本）的数据。为了提升鲁棒性，数据集应当涵盖多种不同环境，包含差异显著的天气和光照条件。

#### 四、结论与未来工作

这是一个独特的研究课题，且颇具前景，因为LIDAR技术的成本和体积正不断

---

![Image](images/67072761131e8193df51e2a5f4f213c06110a28098223b1976891ae54e617291.jpg)

<div style="text-align: center;">Fig. 7. ROC curves for the augmented dataset.</div>

目前在保持高分辨率的同时实现了大幅缩减。另一方面，随着深度学习方法从3D LiDAR数据中提取丰富有用信息的能力不断提升，新的应用将推动机载激光雷达传感器在小型无人机上的应用。

本研究聚焦于可输出目标分类结果（人类与非人类）的算法设计。我们在真实环境中采集了无人机搭载的3D LiDAR数据，并构建了一个二分类数据集。提出了一套包含预处理、后处理阶段以及目标分类的处理流程。我们按照交叉验证策略对直接CNN模型和增强CNN模型进行了训练、测试与比较。文中描述了详细实验，结果颇具前景。

在实际应用中，UAV需要一套导航系统，该系统以目标位置为输入，输出飞行器所需的行动指令。只有配备该系统，搭载3D LiDAR的UAV才能自主追踪和跟随人员，这可作为未来的研究方向。此外，该算法可经过调整后应用于其他载具或其他场景。最后，也可以对Complex-YOLO $^{[16]}$这类更复杂先进的方法展开研究。

#### 五、致谢

本研究得到葡萄牙MATIS项目（CENTRO-01-0145-FEDER-000014）支持，并由FCT通过基金项目UID/EEA/00048/2019提供部分资助。

### 参考文献

[^1]: Z. Yan, T. Duckett, and N. Bellotto, “Online learning for human classification in 3D LiDAR-based tracking,” in IEEE/RSJ Int. Conference on Intelligent Robots and Systems (IROS), 2017, pp. 864–871.

[^2]: A. Rangesh and M. M. Trivedi, “No blind spots: Full-surround multi-object tracking for autonomous vehicles using cameras and lidars,” IEEE Transactions on Intelligent Vehicles, vol. 4, no. 4, 2019.

[^3]: C. Premebida, O. Ludwig, and U. Nunes, "Lidar and vision-based pedestrian detection system," Journal of Field Robotics, vol. 26, no. 9, pp. 696–711, 2009.

[^4]: L. Wallace, A. Lucieer, and C. S. Watson, “Evaluating tree detection and segmentation routines on very high resolution uav lidar data,” IEEE Transactions on Geoscience and Remote Sensing, vol. 52, no. 12, Dec 2014.

[^5]: F. Azevedo, A. Dias, J. Almeida, A. Oliveira, A. Ferreira, T. Santos, A. Martins, and E. Silva, “Lidar-based real-time detection and modeling of power lines for unmanned aerial vehicles,” Sensors, vol. 19, no. 8, 2019.

[^6]: M. Tulldahl, H. Larsson, G. Tolt, F. Bissmarck, C. Gronwall, and J. Nordlof, “Application and capabilities of LiDAR from small UAV,” in Laser Radar Technology and Applications XXI, M. D. Turner and G. W. Kamerman, Eds., vol. 9832, International Society for Optics and Photonics. SPIE, 2016.

[^7]: M. U. de Haag, C. G. Bartone, and M. S. Braasch, "Flight-test evaluation of small form-factor LiDAR and radar sensors for sUAS detect-and-avoid applications," in 2016 IEEE/AIAA 35th Digital Avionics Systems Conference (DASC), Sep. 2016.

[^8]: L. Zheng, P. Zhang, J. Tan, and F. Li, “The obstacle detection method of uav based on 2D lidar,” IEEE Access, vol. 7, 2019.

[^9]: G. Omans, "Phoenix LIDAR systems overview," 2018. [Online]. Available: <https://www.phoenixlidar.com/team/#phoenix-overview/>

[^10]: A. Hussey and Velodyne, “Velodyne LiDAR partners with YellowScan for integrated LiDAR for UAVs,” 2017. [Online]. Available: <https://velodynelidar.com/press-release/velodyne-lidar-partners-with-yellowscan-for-integrated-lidar-for-uavs/>

[^11]: J. Zhang and S. Singh, "LOAM: Lidar odometry and mapping in real-time," in Proceedings of the RSS Conference, 2014.

[^12]: M. Fischler and R. Bolles, “Random sample consensus: A paradigm for model fitting with applications to image analysis and automated cartography,” Communications of the ACM, vol. 24, no. 6, 1981.

[^13]: C. R. Qi, H. Su, K. Mo, and L. J. Guibas, “Pointnet: Deep learning on point sets for 3D classification and segmentation,” Proc. Computer Vision and Pattern Recognition (CVPR), IEEE, 2017.

[^14]: A. Elfes, “Occupancy grids: A stochastic spatial representation for active robot perception,” ArXiv, vol. abs/1304.1098, 2013.

[^15]: S. Thrun, W. Burgard, and D. Fox, Probabilistic robotics. MIT Press, 2005.

[^16]: M. Simony, S. Milzy, K. Amendey, and H.-M. Gross, “Complex-YOLO: An Euler-region-proposal for real-time 3D object detection on point clouds,” in Proceedings of the European Conference on Computer Vision (ECCV), 2018.
