# 空间AI

空间AI使机器人或计算机能够像人类一样感知世界——识别物体或特征是什么——以及它们在物理世界中的位置。DepthAI平台通过将[神经网络](https://docs.luxonis.com/software/perception/neural-networks.md)与OAK相机上的[深度感知](https://docs.luxonis.com/hardware/platform/features/depth.md)相融合，利用了空间AI。

有几种不同的方法来实现AI与深度的融合：

 1. [神经网络推理与深度图融合](#Neural%20inference%20fused%20with%20depth%20map)
 2. [语义深度](#Semantic%20depth)
 3. [立体神经网络推理](#Stereo%20neural%20inference)

## 神经网络推理与深度图融合

DepthAI可以将神经网络推理（物体/地标检测）结果与深度图融合，以估算场景中所有物体/地标的空间坐标（XYZ）。

这种技术对于现有的（预训练）2D物体/特征检测器非常有效，因为它对彩色/单色帧进行推理，并利用生成的边界框确定ROI（感兴趣区域）。然后DepthAI在这些ROI内对深度图中的深度值进行平均，并据此计算空间坐标。

### 3D物体定位

首先，让我们定义什么是[物体检测](https://pjreddie.com/darknet/yolo/)。它是在图像的像素空间（即像素坐标）中找到感兴趣物体的边界框的技术术语。

3D物体定位（或3D物体检测）是指在物理空间而非像素空间中找到物体。它在实时测量或与物理世界交互时非常有用。

下图展示了物体检测与3D物体定位之间的区别：

[https://www.youtube.com/watch?v=2J5YFehJ3N4](https://www.youtube.com/watch?v=2J5YFehJ3N4)

DepthAI将这些2D神经网络（例如MobileNet、Yolo）与空间信息结合，赋予它们3D上下文。

在上图中，DepthAI应用在RGB摄像头流上运行MobileNet物体检测器，并将其与深度图[[RGB-D](https://docs.luxonis.com/software/perception/rgb-d.md)]融合，以估算每个检测到的物体的3D位置（详见[MobileNetSpatialDetectionNetwork](https://docs.luxonis.com/software/depthai-components/nodes/mobilenet_spatial_detection_network.md)节点）。

> **NeuralNetwork解码**
> DepthAI API提供了一种简单的方法来解码神经网络结果，包括边界框、标签和置信度分数。这对于
> [Yolo](https://docs.luxonis.com/software/depthai-components/nodes/yolo_detection_network.md)
> 和
> [MobileNet](https://docs.luxonis.com/software/depthai-components/nodes/mobilenet_detection_network.md)
> 神经网络架构是可行的。对于任何自定义神经网络，您可以使用标准的
> [NeuralNetwork](https://docs.luxonis.com/software/depthai-components/nodes/neural_network.md)
> 节点，但需要自行解码结果。

### 3D地标定位

地标定位的过程类似。这里，神经网络检测的不是单独的物体，而是地标（手部/姿态/特征）。一个示例是在DepthAI上运行的手部地标检测器（如下演示）。使用普通摄像头时，该网络返回所有21个手部地标的2D（XY）坐标（手指所有关节的轮廓）。而使用相同的网络与DepthAI，这些21个手部地标现在成为物理空间中的3D点，而非像素空间中的2D点。

[https://www.youtube.com/watch?v=xXXsT6afW6E](https://www.youtube.com/watch?v=xXXsT6afW6E)

演示：[手部地标](https://github.com/geaxgx/depthai_hand_tracker)（上图）、[人体姿态地标](https://github.com/geaxgx/depthai_blazepose)和[面部地标](https://github.com/luxonis/oak-examples/tree/master/gen2-facemesh#gen2-facial-landmarks-on-depthai)检测演示。

## 语义深度

自主机器人导航/执行中的一个经典问题是未知物体。已知物体在安装前被指定为可能遇到的，例如工具、其他机器、工人、设备和设施。

我们无法预料未知物体——包括那些不可知或从未见过的物体。训练物体检测器对于已知物体是足够的，因为这是一种“正向”的物体检测形式：“路径中有堆，停下。”“路径中有铲子，停下。”等等。

这种通用的避障场景需要一种“负向”的物体检测系统，而一个非常有效的技术是使用RGB、深度或RGB+深度的语义分割。

[https://github.com/luxonis/oak-examples/tree/master/gen2-deeplabv3_depth](https://github.com/luxonis/oak-examples/tree/master/gen2-deeplabv3_depth)

在这种“负向”系统中，语义分割系统在所有非物体的表面上进行训练。因此，任何不是该表面的物体都被视为物体——允许导航知道其位置并采取相应行动（停止、绕行、转向等）。因此，语义深度对于避障和导航规划应用极具价值。

在上图中，一个人体语义分割模型正在RGB帧上运行，并根据结果裁剪深度图，仅包含人的深度。

在上面的示例中，自动割草机将仅在草地区域周围导航，并避开所有其他物体（树木、树根、井盖、路径等）。

## 立体神经网络推理

在此模式下，神经网络推理（地标检测）在左和右摄像头上运行，以产生立体推理结果。与单目神经网络推理结合立体深度不同——这里没有最大视差搜索限制——因此最小距离仅受限于（a）立体摄像头本身的水平视场角（HFOV）和（b）摄像头的超焦距（物体清晰聚焦的最小距离）中的较大值。

在得到来自左/右摄像头的2D地标位置后，我们可以计算结果之间的视差，然后通过校准的相机内参进行三角测量，以给出所有检测到的特征的3D位置。

[https://github.com/luxonis/oak-examples/tree/master/gen2-triangulation](https://github.com/luxonis/oak-examples/tree/master/gen2-triangulation)

更多信息，请查看[立体神经网络推理演示](https://github.com/luxonis/oak-examples/tree/master/gen2-triangulation)。

示例包括寻找以下物体的3D位置：

 * 面部地标（眼睛、耳朵、鼻子、嘴角等）
 * 产品上的特征（螺丝孔、瑕疵等）
 * 人体关节（例如肘部、膝盖、髋部等）
 * 车辆上的特征（例如后视镜、前灯等）
 * 植物上的害虫或病害（即对于物体检测+立体深度而言过小的特征）

此模式不需要神经网络使用深度数据进行训练。DepthAI采用标准的现成2D网络（这类网络更为常见），并利用这种立体推理产生精确的3D结果。

### 需要帮助？

请前往 [OAKChina 官网](https://www.oakchina.cn/) 获取技术支持或解答您的任何疑问。
