DepthAI v2 has been superseded by DepthAI v3. You are viewing legacy documentation.

本页目录

  • 在设备上运行您自己的CV功能
  • 使用PyTorch创建自定义模型
  • Kornia

计算机视觉

我们的平台支持在设备上执行计算机视觉(CV)功能。虽然无法直接运行OpenCV,但您可以使用其支持的许多功能。使用DepthAI,您可以:
  • 裁剪、旋转、畸变/去畸变、镜像、翻转、透视变换等,使用ImageManip
  • 检测边缘(Sobel滤波器)使用EdgeDetector
  • 检测和跟踪特征使用FeatureTracker
  • 跟踪物体(卡尔曼滤波器、匈牙利算法)使用ObjectTracker 开箱即用支持Yolo和MobileNet目标检测器。
  • 感知立体深度(Census变换、代价匹配与聚合)使用StereoDepth
DepthAI计算机视觉
如果您想使用任何其他CV功能,请参阅以下指南,了解如何在设备的硬件加速模块上高效实现和运行CV功能。

在设备上运行您自己的CV功能

演示:

使用PyTorch创建自定义模型

在本指南中,我们将创建一个简单的模型,将三个帧拼接为一个。这是一个简单的示例,但您可以使用相同的过程创建更复杂的模型。

TL;DR

如果您只对实现感兴趣

我们首先需要创建一个继承PyTorch的nn.Module的Python类。然后我们可以将神经网络逻辑放入所创建类的forward函数中。在帧拼接的示例中,我们可以使用torch.cat函数来拼接多个帧:
Python
1class CatImgs(nn.Module):
2    def forward(self, img1, img2, img3):
3        return torch.cat((img1, img2, img3), 3)
对于更复杂的模块,请参考Kunal Tyagi开发的Harris角点检测PyTorch演示。请记住,VPU仅支持FP16,这意味着最大值为65504。当相乘几个值时,如果不进行适当的归一化/除法,可能会快速溢出。
由于PyTorch不被OpenVINO直接支持,我们首先需要将模型导出为onnx格式,然后再转换为OpenVINO。PyTorch内置了对onnx的支持,因此导出到onnx非常简单:
Python
1# 对于300x300帧
2X = torch.ones((1, 3, 300, 300), dtype=torch.float32)
3torch.onnx.export(
4    CatImgs(),
5    (X, X, X), # 用于形状的虚拟输入
6    "path/to/model.onnx",
7    opset_version=12,
8    do_constant_folding=True,
9)
这将把拼接模型导出为onnx格式。我们可以使用Netron应用可视化创建的模型:
Netron应用可视化
将模型导出为onnx时,PyTorch效率并不高。它会创建大量不必要的操作/层,这会增加网络的大小(可能导致较低的FPS)。这就是为什么我们建议使用onnx-simplifier,一个简单的Python包,可以移除不必要的操作/层。
Python
1import onnx
2from onnxsim import simplify
3
4onnx_model = onnx.load("path/to/model.onnx")
5model_simplified, check = simplify(onnx_model)
6onnx.save(model_simplified, "path/to/simplified/model.onnx")
以下是一个示例,展示了使用onnx-simplifier简化是多么显著。左侧是从PyTorch直接导出的(来自Kornia的)模糊模型,右侧是相同功能的简化网络:
模糊模型对比
现在我们有了(简化后的)onnx模型,我们可以将其转换为OpenVINO,然后转换为.blob格式。有关转换模型的更多信息,请参阅转换指南通常的做法是首先使用OpenVINO的模型优化器将onnx转换为IR格式(.bin/.xml),然后使用编译工具编译为.blob。但我们也可以使用blobconverter直接将onnx转换为.blob。Blobconverter一次性完成这两个步骤——无需安装OpenVINO。您可以按如下方式编译您的onnx模型:
Python
1import blobconverter
2
3blobconverter.from_onnx(
4    model="/path/to/model.onnx",
5    output_dir="/path/to/output/model.blob",
6    data_type="FP16",
7    shaves=6,
8    use_cache=False,
9    optimizer_params=[]
10)
您现在可以将您的.blob模型与NeuralNetwork节点一起使用。查看oak-examples/custom-models以运行使用这些自定义模型的演示应用程序。

Kornia

Kornia,"最先进且精选的计算机视觉算法,基于 AI 实现。",拥有 一组用 PyTorch 实现的常见计算机视觉算法。这使得用户能够实现类似以下的操作:
Python
1import kornia
2
3class Model(nn.Module):
4    def forward(self, image):
5        return kornia.filters.gaussian_blur2d(image, (9, 9), (2.5, 2.5))
并按照 使用 PyTorch 创建自定义模型 中描述的完全相同的过程来实现帧模糊 如下所示:
帧模糊