
# 基于CNN的无人机载3D LiDAR人体检测

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

摘要—本文研究了无人机载3D-LiDAR采集点云中的人体检测问题。该技术拥有大量潜在应用场景，例如安全监控、救灾以及搜索救援行动。本文提出一种基于CNN的方法，可对3D LiDAR传感器返回的点云进行分析，从而实现人体检测。本文所述算法包含三个主要部分：数据预处理、后处理和人体分类。本文中将目标划分为两类：人体和非人体。分类通过占用栅格映射将3D点云投影到一系列2D平面上实现，得到目标对应顶视图、正视图和侧视图的一组轮廓。最终通过有监督CNN，使用单视图和多视图（3通道）图像块完成分类。

## I. 引言与相关工作

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

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

过去十年，工程技术和电池技术的进步让消费级无人飞行器（又称无人机）步入主流，为空载LiDAR打开了大门，催生了大量潜在应用场景[^6] [^7]。具体而言，将空载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的人体分类。

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

### 二、研究方法与所提方案

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

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

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

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

多帧点云数据的配准可通过现有算法实现，该算法基于LiDAR里程计对各帧进行同步。为了能够对数据进行处理操作，点云必须与全局坐标系对齐。要实现每帧的旋转，可以在点云中识别出一个特定的「参考地标」作为参考点。随后所有帧都可经过旋转/平移调整，最终在全局坐标系中完成对齐。本研究需要两种不同的配准流程，但二者都需要遵循下述两步流程：

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平面内进行一次额外旋转。和之前一样，这需要识别一个特定特征，作为确定纵向方向的参考。点云会在地面上形成对称图案（前提是UAV没有倾斜，俯仰角和滚转角均为0）。对称轴可用于生成最佳拟合线。鉴于地平面的对称性，对称轴可以通过线性数据拟合计算为“最佳拟合线”。这条最佳拟合线被用来确定点云与x轴之间的旋转偏移量。

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

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

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

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

本文采用基于欧氏距离$d_{E}$的层次聚类法，确定点云中的聚类数量。层次聚类会构建聚类的层级结构，要求将待聚类空间划分为离散子区域，本文通过3D网格细分实现该划分。聚类过程分为两个部分：第一部分生成感兴趣区域（ROI），第二部分对该区域内的目标进行聚类。唯一可调整的输入参数是$d_{E}$。本文测试了1~2米之间的多个取值，以确定能得到最优结果的参数。最优取值取决于ROI内的目标数量、目标的常规尺寸以及目标间的典型间距。当仅存在单个目标时，$d_{E}$必须足够大，才能将所有数据点归为同一个聚类。假设ROI仅包含感兴趣目标的数据点（即地平面移除和裁剪操作成功），那么对于仅含单个目标的帧，$d_{E}$不存在上限。这种情况下，增大该参数只会得到相同的结果：所有数据点都会被归为同一个聚类。但完整移除并裁剪地平面的假设并不总能成立，偶尔会有部分地面残留在ROI中，这是因为地面起伏导致部分数据点被判定为地平面的离群点。在这类情况下，较大的$d_{E}$会将这些离群地面点与目标所属的数据点归为一类，这是不符合预期的结果。研究发现，当仅存在1个目标时，取$d_{E}$为2米的测试成功率可达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-tree 表示；
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$ 都处理完成后，算法终止；

如果多个目标彼此位置邻近，就会被归为同一组。这种效应会因LiDAR $^{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，采用3种不同的网格分辨率训练，分别对应10、25和50个网格单元，对应的单元格边长依次为10 cm、4 cm和2 cm。同一聚类在3种分辨率下的正投影如图4所示。根据表I，每个CNN都在同一测试数据集（正负样本组合）上完成了测试。不同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模型。例如：子集1对应的CNN用子集2、3、4训练，用子集1测试；子集2对应的CNN用子集1、3、4训练，用子集2测试，以此类推。正如前文所述，测试集必须与训练集不重叠，该规则同样适用于增广图像，因此每张原始图像生成的所有增广图像都被划分到同一个子集。

本研究分别在非增广训练集和增广训练集上，针对四类图像（T、F、S和TFS）各训练了一个CNN。为得到更准确的结果，我们对同一图像类型下4个CNN（对应各子集组合）的测试准确率取平均值，完整结果见表III。除侧视图（Side-view）外，增广模型的准确率平均显著高于非增广模型，顶视图（Top-view）的提升尤为明显，这符合普遍规律：更多训练数据通常会提升CNN的性能。至于AUC（由图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都处于同一“平坦”地平面，但这无法代表真实环境，真实环境中的地面往往凹凸不平、存在多层结构。要在这类场景下有效工作，需要引入新的数据对齐策略。根据应用场景和所需精度，可使用性能更优（高分辨率）的传感器，从而获得更好的结果。

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

#### IV. 结论与未来工作

这是一个独特的研究课题，具备良好的发展前景，因为LIDAR技术的成本和体积正持续

---

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

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

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

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

在实际应用中，无人机需要一套导航系统，该系统以目标位置作为输入，输出飞行器所需的动作。只有配备该系统，搭载3D LiDAR的无人机才能实现对人员的自主跟踪与跟随，这可作为未来的研究方向。此外，该算法经过适配后也可应用于其他载具或其他场景。最后，也可对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.
