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

本页目录

  • 输入帧宽高比不匹配
  • 裁剪
  • Letterbox
  • 拉伸
  • 在高分辨率下显示检测结果
  • 直通
  • 裁剪高分辨率帧
  • 拉伸帧
  • 编辑边界框

神经网络分辨率技术

在运行与输入帧宽高比不同的神经网络时,存在两个主要挑战:
  • 输入帧宽高比不匹配 - 当你的神经网络模型期望的宽高比与传感器的宽高比不同时
  • 神经网络输出的可视化 - 当你想在更高分辨率下可视化神经网络输出时

输入帧宽高比不匹配

当你的神经网络模型期望不同的宽高比(例如 1:1)而传感器的宽高比(例如 4:3)不同时,并且在传感器的全部视场(FOV)上运行神经网络推理,就会出现一个挑战。假设我们有一个 MobileNet-SSD 模型,它期望 300x300 的输入帧(1:1 宽高比),并且我们希望在传感器的完整视场上运行推理,那么我们有几个选择:
  1. 将 ISP 帧裁剪为 1:1 宽高比,从而损失部分视场
  2. 将 ISP 帧拉伸为神经网络的 1:1 宽高比
  3. 对 ISP 帧应用 letterboxing 以获得 1:1 宽高比的帧

裁剪

优点:不会降低神经网络精度。缺点:帧被裁剪,因此不是完整视场。将完整视场(isp)帧裁剪成神经网络的宽高比可以获得最佳的神经网络精度,但这会减少视场。 使用示例在此

Letterbox

优点:保留完整视场。缺点:较小的"帧"意味着特征减少,可能降低神经网络精度。Letterboxing 方法会在完整视场(isp)帧的上方和下方添加"黑边",从而保留宽高比。你可以通过使用 manip.setResizeThumbnail(x,y) 的 ImageManip 来实现这一点。使用此方法的缺点是你的实际图像会变小,因此某些特征可能无法保留,这可能导致神经网络精度下降。 使用示例在此

拉伸

优点:保留完整视场。缺点:由于帧被拉伸,神经网络精度可能会下降。拉伸是通过改变宽高比完成的。可以通过 camRgb.setPreviewKeepAspectRatio(False) 进行配置。这意味着宽高比不会被保留,图像会被"拉伸"。对于某些现成的神经网络模型来说,这可能会有问题,因此可能需要进行微调。 使用示例在此

在高分辨率下显示检测结果

要在 RVC2 上以实时速度(约 30FPS)运行目标检测模型,你通常会使用较低分辨率的输入帧进行推理(例如 300x300416x416)。与其在这样的低分辨率帧上显示边界框,你还可以流式传输更高分辨率的帧(例如来自 ColorCameravideo 输出),并在这些高分辨率帧上显示边界框。有几种方法可以实现这一点,在本节中我们将逐一探讨。

直通

只使用低分辨率的推理帧。这里我们使用了 MobileNetDetectionNetwork 输出的 passthrough 帧,因此边界框与帧同步。另一种选择是从 ColorCamera 流式传输 preview 帧,并在主机上同步(或不同步)。下方是带有检测结果的 300x300 帧。演示代码在此

裁剪高分辨率帧

一个简单的解决低分辨率帧的方法是将高分辨率帧(例如来自 ColorCameravideo 输出)流式传输到主机,并在其上绘制边界框。为了使边界框与帧匹配,previewvideo 的分辨率应具有相同的宽高比,即 1:1。在示例中,我们将 4K 分辨率降采样到 720P,因此最大分辨率为 720x720,这正是我们使用的分辨率(camRgb.setVideoSize(720,720))。我们也可以使用 1080P 分辨率,并将 1080x1080 帧流式传输回主机。演示代码在此

拉伸帧

我们经常遇到的模型问题是它们的宽高比是 1:1,而不是像相机分辨率的 16:9。这意味着部分视场将会丢失。上面(输入帧宽高比不匹配)我们展示了改变宽高比将保留相机的完整视场,但会"挤压"/"拉伸"帧,如下所示。演示代码在此

编辑边界框

为了避免拉伸帧(这可能会影响神经网络精度),我们还可以从设备流式传输完整视场的 video 帧,并在 300x300 帧上进行推理。然而,这意味着我们必须重新计算边界框以匹配不同宽高比的图像。这种方法并不能保留完整的宽高比,它只是在完整视场的 video 帧上显示边界框。演示代码在此