跳到主要内容

硬件支持

信息

Frigate 支持多种不同的检测器,可在不同类型的硬件上工作:

大多数硬件

  • Coral EdgeTPU: Google Coral EdgeTPU 提供 USB 和 m.2 接口,可与多种设备兼容。

AMD

  • ROCm: ROCm 可以在 AMD 独立 GPU 上运行,提供高效的目标检测。
  • ONNX: 当配置了支持的 ONNX 模型时,ROCm 将自动被检测并用作 -rocm Frigate 镜像中的检测器。

Intel

  • OpenVino: OpenVino 可以在 Intel Arc GPU、Intel 集成 GPU 和 Intel CPU 上运行,提供高效的目标检测。
  • ONNX: 当配置了支持的 ONNX 模型时,OpenVINO 将自动被检测并用作默认 Frigate 镜像中的检测器。

Nvidia

  • TensortRT: TensorRT 可以在 Nvidia GPU 和 Jetson 设备上运行,可在众多默认模型中择其一。
  • ONNX: 当配置了支持的 ONNX 模型时,TensorRT 将自动被检测并用作 -tensorrt or -tensorrt-jp(4/5) Frigate 镜像中的检测器。

测试用途

  • CPU 检测器(不推荐): CPU 检测器(不建议实际使用): 不建议使用 CPU 运行 tflite 模型,大多数情况下 OpenVINO 可以在 CPU 模式下使用并获得更好的效果。

正式支持的检测器

Frigate 提供以下内置检测器类型:cpuedgetpuonnxopenvinorocmtensorrt。 默认情况下, Frigate 将使用单 CPU 检测器。其它检测器可能需要如下所述的额外配置。当使用多个检测器时,它们将在专用进程中运行,但从所有摄像机的公共队列中拉取检测请求。

Edge TPU 检测器

Edge TPU 检测器类型运行 TensorFlow Lite 模型,利用 Google Coral 委托进行硬件加速。要配置 Edge TPU 检测器,请将type属性设置为edgetpu

Edge TPU 设备可根据 TensorFlow Lite Python API 文档 使用 device 属性指定。如果未设置,代理将使用找到的第一个设备。

容器中的 /edgetpu_model.tflite 提供了一个 TensorFlow Lite 模型,该检测器类型默认使用该模型。要提供自己的模型,请将文件绑定到容器中,并使用 model.path 提供路径。

提示

如果检测不到 Edge TPU,请参阅Edge TPU 常见故障排除步骤。

单 USB Coral

detectors:
coral:
type: edgetpu
device: usb

多个 USB Corals

detectors:
coral1:
type: edgetpu
device: usb:0
coral2:
type: edgetpu
device: usb:1

原生 Coral (开发板)

警告:v0.9.x 之后版本可能存在兼容性问题

detectors:
coral:
type: edgetpu
device: ""

单 PCIE/M.2 Coral

detectors:
coral:
type: edgetpu
device: pci

多个 PCIE/M.2 Corals

detectors:
coral1:
type: edgetpu
device: pci:0
coral2:
type: edgetpu
device: pci:1

混合 Corals

detectors:
coral_usb:
type: edgetpu
device: usb
coral_pci:
type: edgetpu
device: pci

OpenVINO 检测器

OpenVINO 检测器类型可在 AMD 和 Intel CPU、Intel GPU 和 Intel VPU 硬件上运行 OpenVINO IR 模型。要配置 OpenVINO 检测器,请将 type 属性设为 openvino

要使用的 OpenVINO 设备根据 设备文档 中的命名约定使用 "device" 属性指定。最常见的设备是 CPUGPU。目前,使用 AUTO 存在已知问题。为了向后兼容,如果您的配置中设置了 AUTO,Frigate 将尝试使用 GPU

OpenVINO 受第六代英特尔平台 (Skylake) 及更新版本支持。尽管没有官方支持,但它也可以在 AMD CPU 上运行。要将 GPU 设备与 OpenVINO 结合使用,需要受支持的英特尔平台。有关详细系统要求,请参阅 OpenVINO 系统要求

提示

当使用多个摄像头时,一个检测器可能不足以应对需求。如果有足够的 GPU 资源,可以定义多个检测器。示例配置如下:

detectors:
ov_0:
type: openvino
device: GPU
ov_1:
type: openvino
device: GPU

支持的模型

SSDLite MobileNet v2

容器中提供了一个 OpenVINO 模型(地址为 /openvino-model/ssdlite_mobilenet_v2.xml),该检测器类型默认使用此模型。模型来自英特尔的 Open Model Zoo SSDLite MobileNet V2,且已转换为 FP16 精度IR模型。

使用默认模型的 OpenVINO 检测器时,请使用如下所示的模型配置:

detectors:
ov:
type: openvino
device: GPU

model:
width: 300
height: 300
input_tensor: nhwc
input_pixel_format: bgr
path: /openvino-model/ssdlite_mobilenet_v2.xml
labelmap_path: /openvino-model/coco_91cl_bkgr.txt

YOLOX

该探测器还支持 YOLOX。Frigate 未预装任何 YOLOX 模型,因此您需要提供自己的模型。

YOLO-NAS

支持YOLO-NAS 模型,但默认情况下不包含在内。您可以使用这个 notebook Open In Colab 构建和下载具有预训练权重的兼容模型。

注意

DeciAI 预先训练的 YOLO-NAS 权重受其许可约束,不能用于商业用途。有关更多信息,请参阅:https://docs.deci.ai/super-gradients/latest/LICENSE.YOLONAS.html

此 notebook 中的输入图像大小设置为 320x320。由于 Frigate 在运行检测之前会将视频帧裁剪到感兴趣的区域,因此在大多数情况下,这可以降低 CPU 使用率并加快推理时间,而不会影响性能。如果需要,可以将 notebook 和配置更新为 640x640。

将下载的 onnx 模型放在您的 config 文件夹中后,您可以使用以下配置:

detectors:
ov:
type: openvino
device: GPU

model:
model_type: yolonas
width: 320 # <--- should match whatever was set in notebook
height: 320 # <--- should match whatever was set in notebook
input_tensor: nchw
input_pixel_format: bgr
path: /config/yolo_nas_s.onnx
labelmap_path: /labelmap/coco-80.txt

请注意,labelmap 使用完整 COCO 标签集的子集,该子集仅有 80 个对象。

NVidia TensorRT 检测器

Nvidia GPU 可使用 TensorRT 库进行目标检测。基于额外库的大小考虑,该检测器仅在后缀为 -tensorrt 标签的镜像中提供,例如 frigate:stable-tensorrt。该检测器旨在与 Yolo 模型配合使用,以进行目标检测。

最低硬件支持

TensorRT 检测器使用 12.x 系列 CUDA 库,这些库具有次版本兼容性。主机系统上的最低驱动程序版本必须为 >=530。此外,GPU 必须支持 5.0 或更高的算力。这通常与 Maxwell 时代或更新的 GPU 有关,请查看下面链接的 NVIDIA GPU 算力表。

要使用 TensorRT 检测器,请确保您的主机系统安装了 nvidia-container-runtime,以便将 GPU 传递到容器,并且主机系统为 GPU 安装了兼容的驱动程序。

TensorRT 可以受益于较新的 GPU 架构中的改进功能,例如 INT8 运算和 Tensor 核心。当模型转换为 trt 文件时,与您的硬件兼容的功能将得到优化。目前,用于生成模型的脚本提供了一个开关来启用/禁用 FP16 操作。如果您希望使用较新的功能(例如 INT8 优化),则需要做更多工作。

算力参考:

NVIDIA TensorRT Support Matrix

NVIDIA CUDA Compatibility

NVIDIA GPU Compute Capability

模型生成

用于 TensorRT 的模型必须在其运行的相同硬件平台上进行预处理。这意味着每个用户都必须运行额外设置,为 TensorRT 库生成模型文件。我们提供了一个脚本,用于构建多个常见模型。

如果找不到指定的模型,Frigate 镜像会在启动过程中生成模型文件。处理后的模型存储在 /config/model_cache 文件夹中。通常情况下,/config 路径已经映射到主机上的一个目录,而 model_cache 不需要单独映射,除非用户想将其存储在主机上的不同位置。

默认情况下不会生成任何模型,但可以通过在 Docker 中指定 YOLO_MODELS 环境变量来覆盖此设置。可以以逗号分隔的格式列出一个或多个模型,并且每个模型都会生成。仅当 model_cache 文件夹中不存在相应的 {model}.trt 文件时才会生成模型,因此您可以通过从 Frigate 数据文件夹中删除模型来强制重新生成模型。

如果您的 Jetson 设备带有 DLA(Xavier 或 Orin),您可以通过在模型名称后添加 -dla 来生成可在 DLA 上运行的模型,例如指定 YOLO_MODELS=yolov7-320-dla。模型将在 DLA0 上运行(Frigate 目前不支持 DLA1)。与 DLA 不兼容的图层将退回到 GPU 上运行。

如果你的 GPU 不支持 FP16 运算,可以通过环境变量 USE_FP16=False 来禁用它。

可以通过向 docker run 命令或在 docker-compose.yml 文件中传递环境变量来选择特定的模型。使用形如 -e YOLO_MODELS=yolov4-416,yolov4-tiny-416 选择一个或多个模型名称。可用的模型如下所示。

yolov3-288
yolov3-416
yolov3-608
yolov3-spp-288
yolov3-spp-416
yolov3-spp-608
yolov3-tiny-288
yolov3-tiny-416
yolov4-288
yolov4-416
yolov4-608
yolov4-csp-256
yolov4-csp-512
yolov4-p5-448
yolov4-p5-896
yolov4-tiny-288
yolov4-tiny-416
yolov4x-mish-320
yolov4x-mish-640
yolov7-tiny-288
yolov7-tiny-416
yolov7-640
yolov7-320
yolov7x-640
yolov7x-320

Pascal 显卡转换yolov4-608yolov7x-640模型的docker-compose.yml片段示例如下:

frigate:
environment:
- YOLO_MODELS=yolov7-320,yolov7x-640
- USE_FP16=false

如果有多个 GPU 传递到 Frigate,可以指定使用哪一个进行模型转换。转换脚本将使用第一个可见的 GPU,但在具有混合 GPU 模型的系统中,您可能不希望使用默认索引进行目标检测。添加 TRT_MODEL_PREP_DEVICE 环境变量来选择特定的 GPU。

frigate:
environment:
- TRT_MODEL_PREP_DEVICE=0 # Optionally, select which GPU is used for model optimization

配置参数

可以通过指定 tensorrt 作为模型类型来选择 TensorRT 检测器。需要使用硬件加速部分所述的相同方法将 GPU 传递到 docker 容器。如果通过多个 GPU,可以使用 device 配置参数来选择哪个 GPU 用于检测器。device 参数是 GPU 索引的整数值,如容器中的 nvidia-smi 所示。

TensorRT 检测器使用 .trt 模型文件,这些文件默认位于 /config/model_cache/tensorrt 中。这些模型路径和使用的尺寸取决于您生成的模型。

detectors:
tensorrt:
type: tensorrt
device: 0 #This is the default, select the first GPU

model:
path: /config/model_cache/tensorrt/yolov7-320.trt
input_tensor: nchw
input_pixel_format: rgb
width: 320
height: 320

AMD/ROCm GPU 检测器

设置

rocm 检测器支持在 AMD GPU 上运行 YOLO-NAS 模型。请使用带有 -rocm 后缀的 Frigate Docker 镜像,例如 ghcr.io/blakeblackshear/frigate:stable-rocm

用于 GPU 访问的 Docker 设置

ROCm 需要访问 /dev/kfd/dev/dri 设备。如果 Docker 或 Frigate 不是以 root 用户运行,则还需要添加 video(可能还需要 renderssl/_ssl)组。

直接运行 Docker 时,应添加以下标志以访问设备:

$ docker run --device=/dev/kfd --device=/dev/dri  \
...

使用 docker compose 时:

services:
frigate:
---
devices:
- /dev/dri
- /dev/kfd

有关推荐设置的参考,请参阅 在 Docker 中运行 ROCm/pytorch

用于覆写 GPU 芯片组的 Docker 设置

您的 GPU 可能无需任何特殊配置即可正常工作,但在许多情况下需要手动设置。AMD/ROCm 软件栈附带了一组有限的 GPU 驱动程序,对于较新或缺失的型号,您需要将芯片组版本覆盖为较旧/通用版本以使一切正常工作。

此外,AMD/ROCm 并不“官方”支持集成 GPU。尽管如此,大多数集成 GPU 仍然可以正常工作,但需要特殊设置。必须配置 HSA_OVERRIDE_GFX_VERSION 环境变量。有关背景和示例,请参阅 ROCm 问题报告

对于 rocm frigate 构建,有一些自动检测:

  • gfx90c -> 9.0.0
  • gfx1031 -> 10.3.0
  • gfx1103 -> 11.0.0

如果您有其他型号,则可能需要在 Docker 启动时覆写 HSA_OVERRIDE_GFX_VERSION。假设您需要的版本是 9.0.0,应从命令行配置如下:

$ docker run -e HSA_OVERRIDE_GFX_VERSION=9.0.0 \
...

使用 docker compose 时:

services:
frigate:
...
environment:
HSA_OVERRIDE_GFX_VERSION: "9.0.0"

确定所需的版本可能很复杂,因为您无法从 AMD 品牌名称中得知芯片组名称和驱动程序。

  • 首先通过在 Frigate 容器中运行 /opt/rocm/bin/rocminfo 来确保 rocm 环境正常运行 -- 它应列出 CPU 和 GPU 及其属性。
  • rocminfo 的输出中找到您的芯片组版本(gfxNNN)(见下文)。
  • 使用搜索引擎查询给定 gfx 名称所需的 HSA_OVERRIDE_GFX_VERSION("gfxNNN ROCm HSA_OVERRIDE_GFX_VERSION")。
  • 使用相关值覆盖 HSA_OVERRIDE_GFX_VERSION
  • 如果仍然无法正常工作,请检查 Frigate Docker 日志。

检查 AMD/ROCm 是否正常工作并找到您的 GPU

$ docker exec -it frigate /opt/rocm/bin/rocminfo

确定您的 AMD GPU 芯片组版本:

我们取消设置 HSA_OVERRIDE_GFX_VERSION 以防止现有覆写干扰结果:

$ docker exec -it frigate /bin/bash -c '(unset HSA_OVERRIDE_GFX_VERSION && /opt/rocm/bin/rocminfo |grep gfx)'

支持的模型

Frigate 不提供默认模型,支持以下格式的模型:

YOLO-NAS

支持 YOLO-NAS 模型,但默认情况下不包含在内。您可以使用这个 notebook Open In Colab构建并下载带有预训练权重的兼容模型。

注意

DeciAI 提供的预训练 YOLO-NAS 权重受其许可证约束,不能用于商业用途。更多信息请参阅:https://docs.deci.ai/super-gradients/latest/LICENSE.YOLONAS.html

此 notebook 中的输入图像大小设置为 320x320。由于 Frigate 在运行检测之前会将视频帧裁剪为感兴趣区域,因此在大多数情况下,这不会影响性能,同时可以降低 CPU 使用率并加快推理速度。如果需要,可以将 notebook 和配置更新为 640x640。

将下载的 onnx 模型放入配置文件夹后,您可以使用以下配置:

detectors:
rocm:
type: rocm

model:
model_type: yolonas
width: 320 # <--- should match whatever was set in notebook
height: 320 # <--- should match whatever was set in notebook
input_pixel_format: bgr
path: /config/yolo_nas_s.onnx
labelmap_path: /labelmap/coco-80.txt

请注意,labelmap 使用完整 COCO 标签集的子集,该子集仅有 80 个对象。

ONNX

ONNX 是一种用于构建机器学习模型的开放格式,Frigate 支持在 CPU、OpenVINO 和 TensorRT 上运行 ONNX 模型。启动时,Frigate 会自动尝试使用可用的 GPU。

信息

如果使用了适合您 GPU 的正确构建,GPU 将被自动检测并使用。

  • AMD

    • -rocm Frigate 镜像中,ROCm 将自动被检测并用于 ONNX 检测器
  • Intel

    • 在默认的 Frigate 镜像中,OpenVINO 将自动被检测并用于 ONNX 检测器。
  • Nvidia

    • -tensorrt Frigate 镜像中,Nvidia GPU 将自动被检测并用于 ONNX 检测器。
    • -tensorrt-jp(4/5) Frigate 镜像中,Jetson 设备将自动被检测并用于 ONNX 检测器。
提示

当使用多个摄像头时,一个检测器可能不足以应对需求。如果有足够的 GPU 资源,可以定义多个检测器。示例配置如下:

detectors:
onnx_0:
type: onnx
onnx_1:
type: onnx

支持的模型

Frigate 不提供默认模型,支持以下格式的模型:

YOLO-NAS

支持 YOLO-NAS 模型,但默认情况下不包含在内。您可以使用这个 notebook Open In Colab构建并下载带有预训练权重的兼容模型。

注意

DeciAI 提供的预训练 YOLO-NAS 权重受其许可证约束,不能用于商业用途。更多信息请参阅:https://docs.deci.ai/super-gradients/latest/LICENSE.YOLONAS.html

此 notebook 中的输入图像大小设置为 320x320。由于 Frigate 在运行检测之前会将视频帧裁剪为感兴趣区域,因此在大多数情况下,这不会影响性能,同时可以降低 CPU 使用率并加快推理速度。如果需要,可以将 notebook 和配置更新为 640x640。

将下载的 onnx 模型放入配置文件夹后,您可以使用以下配置:

detectors:
onnx:
type: onnx

model:
model_type: yolonas
width: 320 # <--- should match whatever was set in notebook
height: 320 # <--- should match whatever was set in notebook
input_pixel_format: bgr
input_tensor: nchw
path: /config/yolo_nas_s.onnx
labelmap_path: /labelmap/coco-80.txt

请注意,labelmap 使用完整 COCO 标签集的子集,该子集仅有 80 个对象

CPU 检测器(不推荐)

CPU 检测器类型使用 CPU 运行 TensorFlow Lite 模型,无需硬件加速。建议改用硬件加速检测器类型以获得更好的性能。要配置基于 CPU 的检测器,请将 type 属性设置为 cpu

危险

如果没有 GPU 或 Edge TPU 硬件,使用 OpenVINO 检测器通常比使用 CPU 检测器更有效。

解释器使用的线程数可用 num_threads 属性指定,默认为 3

容器中的 /cpu_model.tflite 提供了一个 TensorFlow Lite 模型,该检测器类型默认使用该模型。要提供自己的模型,请将文件绑定到容器中,并用 model.path 提供路径。

detectors:
cpu1:
type: cpu
num_threads: 3
model:
path: "/custom_model.tflite"
cpu2:
type: cpu
num_threads: 3

使用 CPU 检测器时,每台摄像机可添加一个 CPU 检测器。增加的探测器数量超过摄像机的数量不会提高性能。