Skip to content

物体/目标检测器 ​

支持的硬件 ​

目标检测是 Frigate 用来识别摄像头视野中什么内容——人、车、动物等——的能力,而非仅仅对像素变化做出反应。当 Frigate 的画面变动检测在一帧中发现活动时,该区域会被发送到目标检测器,检测器返回它识别到的目标及其位置和置信度分数。这些检测结果驱动追踪目标、警报、检测和通知。

目标检测计算量大,因此 Frigate 被设计为在专用的 AI 加速器或 GPU 上运行,而非 CPU。检测器是 Frigate 用来运行推理的特定硬件和模型后端。选择与你硬件匹配的检测器是获得良好性能的最重要步骤之一,正确的选择取决于 Frigate 运行在什么设备上。

信息

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

通用硬件

  • Coral EdgeTPU:Google Coral EdgeTPU 提供 USB、Mini PCIe 和 m.2 三种接口,兼容多种设备。
  • Hailo:Hailo8 和 Hailo8L AI 加速模块提供 m.2 接口和树莓派 HAT,兼容多种设备。
  • 社区支持 MemryX:MX3 加速模块提供 m.2 接口版本,为各种平台提供广泛的兼容性。
  • 社区支持 AXERA:高效的边缘计算模块。

AMD

  • ROCm:ROCm 可在 AMD 独立显卡上运行,提供高效物体/目标检测。
  • ONNX:当配置了支持的 ONNX 模型时,ROCm 会在-rocm版 Frigate 镜像中自动被检测并使用。

Apple Silicon

  • Apple Silicon: Apple Silicon 可在 M1 以及更新的 Apple Silicon 设备上运行。

Intel

  • OpenVino:OpenVino 可在 Intel Arc 显卡、核显和 CPU 上运行,提供高效的物体/目标检测。
  • ONNX:当配置了支持的 ONNX 模型时,OpenVINO 会在默认 Frigate 镜像中自动被检测并使用。

NVIDIA GPU

  • ONNX:当配置了受支持的 ONNX 模型时,在-tensorrt Frigate 镜像中,TensorRT 将被自动检测并用作检测器。

Nvidia Jetson 社区支持

  • TensortRT:TensorRT 可在 Jetson 设备上运行,使用多种预设模型。
  • ONNX:当配置了支持的 ONNX 模型时,TensorRT 会在-tensorrt-jp6版 Frigate 镜像中自动被检测并使用。

瑞芯微 Rockchip 社区支持

  • RKNN:RKNN 模型可在内置 NPU 的瑞芯微 Rockchip 设备上运行。

Synaptics 社区支持

  • Synaptics: Synap 模型可在配备内置 NPU 的 Synaptics 设备(例如 Astra Machina)上运行。

AXERA 社区支持

  • AXEngine: axmodels 可在 AXERA AI 加速设备上运行。

测试用途

NOTE

不能混合使用多种检测器进行物体/目标检测(例如:不能同时使用 OpenVINO 和 Coral EdgeTPU 进行物体/目标检测)。

当然,不影响其他需要使用硬件加速任务,如语义搜索。

选择模型大小 ​

除了为你的硬件选择检测器外,你还需要选择模型的输入分辨率(如 320x320 或 640x640),以及对于 YOLOv9 等模型系列,还需选择变体大小(tiny、small 等)。两者都会影响准确性与你的硬件所能承受的推理时间之间的平衡。

分辨率(320x320 vs 640x640): Frigate 针对 320x320 模型进行了优化,320x320 是绝大多数配置的最佳选择。Frigate 的设计专门通过从全帧中裁剪画面变动区域并在运行检测前放大该区域来弥补较小模型的不足,因此 320x320 模型实际上对小型和远距离目标更优——而非更差。640x640 模型速度更慢、资源消耗更大,其主要优势在于当许多目标分散在大面积区域时,可以在单次推理中容纳更多目标。近期版本的 Frigate 已改善对 640x640 模型的支持,但 320x320 仍然是几乎所有配置的推荐起点。

变体大小(tiny/small/medium): 更大的变体准确性逐步提高但速度更慢。差异是否明显取决于你的具体摄像头和场景。一个好的经验法则是使用你的硬件在不跳过检测的情况下能运行的最大模型,你可以在界面的 系统 > 指标 > 摄像头 页面进行监控——更好的准确性只有在你的检测器能跟上所有摄像头的检测负载时才有意义。

可接受的推理时间取决于你的硬件。 推理时间本身并不能说明全部情况,因为不同硬件有不同的处理能力。GPU 可以同时运行同一模型的多个实例,因此约 30ms 的推理时间仍然可以跟上多个摄像头。Google Coral 只能运行模型的一个实例,因此需要更低的推理时间(约 10ms)才能跟上。

提示

最佳的检测准确性来自在与 Frigate 实际看到的图像相似的图像上训练的模型——即裁剪到关注区域的安全摄像头录像。你可以在此类图像上训练或微调自己的模型并作为自定义模型运行(参见下文各检测器章节),但 Frigate+ 通过在你从自己的摄像头提交的图像上为你处理训练,使这一切变得更加简单。对于 YOLOv9,s(small)变体在 320x320 分辨率下是一个不错的起点。

官方支持的检测器 ​

Frigate 官方提供了数种支持的检测器类型。默认情况下,Frigate 会使用单个 CPU 检测器。其他检测器可能需要额外配置,如下所述。使用多个检测器时,它们会在专用进程中运行,但会从所有摄像头的公共检测请求队列中获取任务。

Edge TPU 检测器 ​

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

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

提示

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

单个 USB Coral ​

步骤 1 / 3打开设置
设置

检测器和模型

配置检测器后端及其使用的模型。

检测器硬件配置运行目标检测的检测器后端。
EdgeTPUcoral使用 EdgeTPU 委托运行为 Coral EdgeTPU 编译的 TensorFlow Lite 模型的 EdgeTPU 检测器。
IDcoral
类型EdgeTPU
设备类型用于 EdgeTPU 推理的设备(例如 'usb'、'pci')。
usb
添加自定义键
添加检测器
类型 添加
检测模型配置模型及其输入形状。
Frigate+自定义模型
自定义目标检测模型路径

自定义检测模型文件的路径(或 Frigate+ 模型的 plus://<model_id>)。

自定义目标检测器的标签映射

将数字类别映射到检测器字符串标签的标签映射文件路径。

目标检测模型输入宽度

模型输入张量的宽度(像素)。

目标检测模型输入高度

模型输入张量的高度(像素)。

高级设置 (4)
模型输入像素颜色格式

模型期望的像素色彩空间:'rgb'、'bgr' 或 'yuv'。

模型输入张量形状

模型期望的张量格式:'nhwc' 或 'nchw'。

模型输入数据类型

模型输入张量的数据类型(例如 'float32')。

目标检测模型类型

某些检测器用于优化的检测器模型架构类型(ssd、yolox、yolonas、yolo-generic、rfdetr和dfine)。

多个 USB Coral ​

步骤 1 / 1查找检测器硬件
设置

检测器和模型

配置检测器后端及其使用的模型。

检测器硬件配置运行目标检测的检测器后端。
EdgeTPUcoral1使用 EdgeTPU 委托运行为 Coral EdgeTPU 编译的 TensorFlow Lite 模型的 EdgeTPU 检测器。
IDcoral1
类型EdgeTPU
设备类型用于 EdgeTPU 推理的设备(例如 'usb'、'pci')。
usb:0
添加自定义键
EdgeTPUcoral2使用 EdgeTPU 委托运行为 Coral EdgeTPU 编译的 TensorFlow Lite 模型的 EdgeTPU 检测器。
IDcoral2
类型EdgeTPU
设备类型用于 EdgeTPU 推理的设备(例如 'usb'、'pci')。
usb:1
添加自定义键
添加检测器
类型 添加
检测模型配置模型及其输入形状。
Frigate+自定义模型
自定义目标检测模型路径

自定义检测模型文件的路径(或 Frigate+ 模型的 plus://<model_id>)。

自定义目标检测器的标签映射

将数字类别映射到检测器字符串标签的标签映射文件路径。

目标检测模型输入宽度

模型输入张量的宽度(像素)。

目标检测模型输入高度

模型输入张量的高度(像素)。

高级设置 (4)
模型输入像素颜色格式

模型期望的像素色彩空间:'rgb'、'bgr' 或 'yuv'。

模型输入张量形状

模型期望的张量格式:'nhwc' 或 'nchw'。

模型输入数据类型

模型输入张量的数据类型(例如 'float32')。

目标检测模型类型

某些检测器用于优化的检测器模型架构类型(ssd、yolox、yolonas、yolo-generic、rfdetr和dfine)。

原生 Coral(开发板) ​

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

步骤 1 / 1查找检测器硬件
设置

检测器和模型

配置检测器后端及其使用的模型。

检测器硬件配置运行目标检测的检测器后端。
EdgeTPUcoral使用 EdgeTPU 委托运行为 Coral EdgeTPU 编译的 TensorFlow Lite 模型的 EdgeTPU 检测器。
IDcoral
类型EdgeTPU
设备类型用于 EdgeTPU 推理的设备(例如 'usb'、'pci')。
添加自定义键
添加检测器
类型 添加
检测模型配置模型及其输入形状。
Frigate+自定义模型
自定义目标检测模型路径

自定义检测模型文件的路径(或 Frigate+ 模型的 plus://<model_id>)。

自定义目标检测器的标签映射

将数字类别映射到检测器字符串标签的标签映射文件路径。

目标检测模型输入宽度

模型输入张量的宽度(像素)。

目标检测模型输入高度

模型输入张量的高度(像素)。

高级设置 (4)
模型输入像素颜色格式

模型期望的像素色彩空间:'rgb'、'bgr' 或 'yuv'。

模型输入张量形状

模型期望的张量格式:'nhwc' 或 'nchw'。

模型输入数据类型

模型输入张量的数据类型(例如 'float32')。

目标检测模型类型

某些检测器用于优化的检测器模型架构类型(ssd、yolox、yolonas、yolo-generic、rfdetr和dfine)。

单个 PCIE/M.2 Coral ​

步骤 1 / 1查找检测器硬件
设置

检测器和模型

配置检测器后端及其使用的模型。

检测器硬件配置运行目标检测的检测器后端。
EdgeTPUcoral使用 EdgeTPU 委托运行为 Coral EdgeTPU 编译的 TensorFlow Lite 模型的 EdgeTPU 检测器。
IDcoral
类型EdgeTPU
设备类型用于 EdgeTPU 推理的设备(例如 'usb'、'pci')。
pci
添加自定义键
添加检测器
类型 添加
检测模型配置模型及其输入形状。
Frigate+自定义模型
自定义目标检测模型路径

自定义检测模型文件的路径(或 Frigate+ 模型的 plus://<model_id>)。

自定义目标检测器的标签映射

将数字类别映射到检测器字符串标签的标签映射文件路径。

目标检测模型输入宽度

模型输入张量的宽度(像素)。

目标检测模型输入高度

模型输入张量的高度(像素)。

高级设置 (4)
模型输入像素颜色格式

模型期望的像素色彩空间:'rgb'、'bgr' 或 'yuv'。

模型输入张量形状

模型期望的张量格式:'nhwc' 或 'nchw'。

模型输入数据类型

模型输入张量的数据类型(例如 'float32')。

目标检测模型类型

某些检测器用于优化的检测器模型架构类型(ssd、yolox、yolonas、yolo-generic、rfdetr和dfine)。

多个 PCIE/M.2 Coral ​

步骤 1 / 1查找检测器硬件
设置

检测器和模型

配置检测器后端及其使用的模型。

检测器硬件配置运行目标检测的检测器后端。
EdgeTPUcoral1使用 EdgeTPU 委托运行为 Coral EdgeTPU 编译的 TensorFlow Lite 模型的 EdgeTPU 检测器。
IDcoral1
类型EdgeTPU
设备类型用于 EdgeTPU 推理的设备(例如 'usb'、'pci')。
pci:0
添加自定义键
EdgeTPUcoral2使用 EdgeTPU 委托运行为 Coral EdgeTPU 编译的 TensorFlow Lite 模型的 EdgeTPU 检测器。
IDcoral2
类型EdgeTPU
设备类型用于 EdgeTPU 推理的设备(例如 'usb'、'pci')。
pci:1
添加自定义键
添加检测器
类型 添加
检测模型配置模型及其输入形状。
Frigate+自定义模型
自定义目标检测模型路径

自定义检测模型文件的路径(或 Frigate+ 模型的 plus://<model_id>)。

自定义目标检测器的标签映射

将数字类别映射到检测器字符串标签的标签映射文件路径。

目标检测模型输入宽度

模型输入张量的宽度(像素)。

目标检测模型输入高度

模型输入张量的高度(像素)。

高级设置 (4)
模型输入像素颜色格式

模型期望的像素色彩空间:'rgb'、'bgr' 或 'yuv'。

模型输入张量形状

模型期望的张量格式:'nhwc' 或 'nchw'。

模型输入数据类型

模型输入张量的数据类型(例如 'float32')。

目标检测模型类型

某些检测器用于优化的检测器模型架构类型(ssd、yolox、yolonas、yolo-generic、rfdetr和dfine)。

混合使用 Coral ​

步骤 1 / 1查找检测器硬件
设置

检测器和模型

配置检测器后端及其使用的模型。

检测器硬件配置运行目标检测的检测器后端。
EdgeTPUcoral_usb使用 EdgeTPU 委托运行为 Coral EdgeTPU 编译的 TensorFlow Lite 模型的 EdgeTPU 检测器。
IDcoral_usb
类型EdgeTPU
设备类型用于 EdgeTPU 推理的设备(例如 'usb'、'pci')。
usb
添加自定义键
EdgeTPUcoral_pci使用 EdgeTPU 委托运行为 Coral EdgeTPU 编译的 TensorFlow Lite 模型的 EdgeTPU 检测器。
IDcoral_pci
类型EdgeTPU
设备类型用于 EdgeTPU 推理的设备(例如 'usb'、'pci')。
pci
添加自定义键
添加检测器
类型 添加
检测模型配置模型及其输入形状。
Frigate+自定义模型
自定义目标检测模型路径

自定义检测模型文件的路径(或 Frigate+ 模型的 plus://<model_id>)。

自定义目标检测器的标签映射

将数字类别映射到检测器字符串标签的标签映射文件路径。

目标检测模型输入宽度

模型输入张量的宽度(像素)。

目标检测模型输入高度

模型输入张量的高度(像素)。

高级设置 (4)
模型输入像素颜色格式

模型期望的像素色彩空间:'rgb'、'bgr' 或 'yuv'。

模型输入张量形状

模型期望的张量格式:'nhwc' 或 'nchw'。

模型输入数据类型

模型输入张量的数据类型(例如 'float32')。

目标检测模型类型

某些检测器用于优化的检测器模型架构类型(ssd、yolox、yolonas、yolo-generic、rfdetr和dfine)。

配置 ​

步骤 1 — 选择模型

Mobiledet 推荐▼

步骤 2 — 下载模型

步骤 3 — 配置检测器

yaml

Hailo-8 检测器 ​

Hailo-8 检测器支持 Hailo-8 和 Hailo-8L AI 加速模块。该集成会自动通过 Hailo CLI 检测你的硬件架构,如果未指定自定义模型,则会选择适当的默认模型。

有关配置 Hailo 硬件的详细信息,请参阅安装文档。

信息

如果未提供自定义模型,Hailo 检测器会在首次启动时从 Hailo 模型库下载默认模型。缓存后,模型可完全离线使用。详见网络要求。

配置 ​

配置 Hailo 检测器时,你有两种指定模型的方式:本地路径或URL。 如果同时提供两者,检测器将首先检查给定的本地路径。如果未找到文件,则会从指定的 URL 下载模型。模型文件缓存在/config/model_cache/hailo目录下。

步骤 1 — 选择模型

YOLO 推荐▼

步骤 2 — 下载模型

步骤 3 — 配置检测器

yaml

更多现成模型,请访问:https://github.com/hailo-ai/hailo_model_zoo

Hailo8 支持 Hailo 模型库中所有包含 HailoRT 后处理的模型。你可以选择任何这些预配置模型。

注意: > config.path 参数可以接受以 .hef 结尾的本地文件路径或 URL。当提供时,检测器将首先检查路径是否为本地文件路径。如果文件在本地存在,将直接使用。如果未找到本地文件或提供了 URL,则会尝试从指定 URL 下载模型。


OpenVINO 检测器 ​

OpenVINO 检测器可在 AMD CPU 和 Intel CPU、Intel GPU 以及 Intel NPU 上运行 OpenVINO IR 模型。要配置 OpenVINO 检测器,请将"type"属性设置为"openvino"。

使用的 OpenVINO 设备通过device属性指定,需遵循设备文档中的命名规定。最常见的设备是 CPU、GPU以及 NPU。

OpenVINO 支持 第 6 代 Intel 平台(Skylake)以及更新的版本。虽然没有官方支持,但它也可以在 AMD CPU 上运行。使用 GPU 或 NPU 设备需要支持的 Intel 平台。有关详细的系统要求,请参阅OpenVINO 系统要求

提示

NPU + GPU 的系统: 如果你同时拥有可用的 NPU 和 GPU(例如 Intel 酷睿 Ultra 处理器),请使用 NPU 进行目标检测,使用 GPU 进行增强处理(语义搜索、人脸识别等),以获得最佳性能和兼容性。

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

yaml
detectors:
  ov_0:
    type: openvino
    device: GPU # 或 NPU
  ov_1:
    type: openvino
    device: GPU # 或 NPU

Intel NPU 主机要求 ​

NPU 固件由宿主机内核加载,不包含在 Frigate 镜像中。NPU 需要的其他所有内容都已捆绑在容器中,因此绝不应挂载宿主机 NPU 库。

Frigate 捆绑了特定版本的 Intel linux-npu-driver,宿主机固件必须来自该版本或更高版本。固件版本旧于捆绑的驱动可能导致 MAPPED_INFERENCE_VERSION is NOT compatible with the ELF 错误,其中 Expected 是固件支持的版本,received 是捆绑编译器生成的版本。发行版通常打包的固件比 Frigate 自带的驱动更旧,请使用 sudo dmesg | grep -i vpu 检查宿主机上的构建日期并在需要时更新。

Intel NPU 无法在 Home Assistant OS 下使用,因为该系统不包含 NPU 固件。

配置 ​

步骤 1 — 选择模型

YOLOv9 推荐▼

步骤 2 — 下载模型

步骤 3 — 配置检测器

yaml

Apple Silicon 检测器 ​

Apple Silicon 中的 NPU 无法从容器内访问,因此必须先设置Apple Silicon 检测器客户端。建议使用带有-standard-arm64后缀的 Frigate docker 镜像,例如 ghcr.io/blakeblackshear/frigate:stable-standard-arm64。

设置 ​

  1. 下载并配置安装Apple Silicon 检测器客户端并运行客户端。
  2. 在 Frigate 中配置检测器并启动 Frigate。

配置 ​

使用下面的检测器配置将连接到客户端:

步骤 1 — 选择模型

YOLOv9 推荐▼

步骤 2 — 下载模型

步骤 3 — 配置检测器

yaml

注意:labelmap 使用的是完整 COCO 标签集的子集,仅包含 80 种类型的目标。

AMD/ROCm GPU 检测器 ​

设置 ​

AMD GPU 的支持通过ONNX 检测器提供。要使用 AMD GPU 进行物体/目标检测,请使用带有-rocm后缀的 Frigate docker 镜像,例如 ghcr.io/blakeblackshear/frigate:stable-rocm。

Docker GPU 访问设置 ​

ROCm 需要访问/dev/kfd和/dev/dri设备。当 docker 或 frigate 不以 root 身份运行时,还应添加video(可能还有render和ssl/_ssl)组。

直接使用 docker run 时,应添加以下标志以访问设备:

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

使用 Docker Compose 时:

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

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

覆盖 GPU 芯片组的 Docker 设置 ​

你的 GPU 可能无需特殊配置即可正常工作,但在许多情况下需要手动调整一些配置。因为 AMD/ROCm 自带的 GPU 驱动程序集并不完整,对于较新或缺失的型号,你需要将芯片组版本覆盖为较旧/通用版本才能使其工作。

此外,AMD/ROCm 没有"官方正式"支持核显。它仍然可以与大多数核显正常工作,但需要特殊设置。必须配置HSA_OVERRIDE_GFX_VERSION环境变量。有关背景和示例,请参阅ROCm 问题报告。

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

  • gfx1031 -> 10.3.0
  • gfx1103 -> 11.0.0

如果你有其他芯片组,可能需要在 Docker 启动时覆盖HSA_OVERRIDE_GFX_VERSION。假设你需要的版本是10.0.0,则应从命令行配置为:

bash
$ docker run -e HSA_OVERRIDE_GFX_VERSION=10.0.0 \
    ...

使用 Docker Compose 时:

yaml
services:
  frigate:
    ...
    environment:
      HSA_OVERRIDE_GFX_VERSION: "10.0.0"

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

  1. 首先通过在 frigate 容器中运行/opt/rocm/bin/rocminfo确保 rocm 环境正常运行 - 它应该列出 CPU 和 GPU 及其属性
  2. 从rocminfo的输出中找到你拥有的芯片组版本(格式为 gfxNNN,N 为数字)(见下文)
  3. 使用搜索引擎查询给定 gfx 名称所需的HSA_OVERRIDE_GFX_VERSION("gfxNNN ROCm HSA_OVERRIDE_GFX_VERSION")
  4. 用相关值覆盖HSA_OVERRIDE_GFX_VERSION
  5. 如果仍然无法工作,请检查 frigate docker 日志

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

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

确定你的 AMD GPU 芯片组版本 ​

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

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

配置 ​

提示

已知 AMD GPU 内核在将模型转换为 mxr 格式时存在问题。推荐的方法是:

  1. 在配置中禁用目标检测。
  2. 启动配置了 onnx 检测器的 Frigate,主要目标检测模型将被转换为 mxr 格式并缓存在配置目录中。
  3. 日志显示转换完成后,在界面中启用目标检测并确认其正常工作。
  4. 在配置中重新启用目标检测。

有关支持的模型,请参阅 ONNX 支持的模型,但有以下注意事项:

  • 不支持 D-FINE / DEIMv2 模型
  • 已知 YOLO-NAS 模型在核显上运行不佳

步骤 1 — 选择模型

YOLOv9 推荐▼

步骤 2 — 下载模型

步骤 3 — 配置检测器

yaml

ONNX ​

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

信息

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

  • AMD

    • 在-rocm版 Frigate 镜像中,ROCm 会被自动检测并与 ONNX 检测器一起使用。
  • Intel

    • 在标准 Frigate 镜像中,OpenVINO 会被自动检测并与 ONNX 检测器一起使用。
  • NVIDIA

    • 在-tensorrt版 Frigate 镜像中,NVIDIA GPU 会被自动检测并与 ONNX 检测器一起使用。
    • 在-tensorrt-jp6版 Frigate 镜像中,Jetson 设备会被自动检测并与 ONNX 检测器一起使用。

提示

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

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

配置 ​

步骤 1 — 选择模型

YOLOv9 推荐▼

步骤 2 — 下载模型

步骤 3 — 配置检测器

yaml

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

危险

不建议将 CPU 检测器用于一般用途。如果你没有 GPU 或 Edge TPU 硬件,使用OpenVINO 检测器的 CPU 模式通常比使用 CPU 检测器更高效。

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

容器中提供了位于/cpu_model.tflite的 TensorFlow Lite 模型,默认情况下此检测器类型使用该模型。要提供自己的模型,请将文件绑定挂载到容器中,并通过model.path提供路径。

配置 ​

步骤 1 — 选择模型

MobileNet v2 推荐

步骤 2 — 下载模型

步骤 3 — 配置检测器

yaml

使用 CPU 检测器时,可以为每个摄像头添加一个 CPU 检测器。添加比摄像头数量更多的检测器不会提高性能。

Deepstack / CodeProject.AI 服务器检测器 ​

Frigate 的 Deepstack/CodeProject.AI 服务器检测器允许你将 Deepstack 和 CodeProject.AI 的物体/目标检测功能集成到 Frigate 中。CodeProject.AI 和 DeepStack 是开源 AI 平台,可以在各种设备上运行,如树莓派、NVIDIA Jetson 和其他兼容硬件。需要注意的是,集成是通过网络进行的,因此推理时间可能不如原生 Frigate 检测器快,但它仍然为物体/目标检测和追踪提供了高效可靠的解决方案。

设置 ​

要开始使用 CodeProject.AI,请访问其官方网站,按照说明在你选择的设备上下载并安装 AI 服务器。CodeProject.AI 的详细设置说明不在 Frigate 文档范围内。

要将 CodeProject.AI 集成到 Frigate 中,请按以下方式配置检测器:

配置 ​

步骤 1 — 选择模型

YOLO 推荐

步骤 2 — 下载模型

步骤 3 — 配置检测器

yaml

将<your_codeproject_ai_server_ip>和<port>替换为你的 CodeProject.AI 服务器的 IP 地址和端口。

要验证集成是否正常工作,请启动 Frigate 并观察日志中是否有与 CodeProject.AI 相关的错误消息。此外,你可以检查 Frigate 网络界面,查看 CodeProject.AI 检测到的对象是否正确显示和追踪。

由社区支持的检测器 ​

MemryX MX3 ​

此检测器可用于 MemryX MX3 加速器 M.2 模块。Frigate 在兼容硬件平台上支持 MX3,提供高效和高性能的物体检测。

有关配置 MemryX 硬件的信息,请参阅安装文档。

要配置 MemryX 检测器,只需将type属性设置为memryx并按照下面的配置指南。

配置 ​

步骤 1 — 选择模型

YOLO-NAS 推荐▼

步骤 2 — 下载模型

步骤 3 — 配置检测器

yaml

使用自定义模型 ​

要使用你自己的自定义模型,首先需要将其编译为 .dfp 文件,这是 MemryX 使用的格式。

编译模型 ​

自定义模型必须使用 MemryX SDK 2.1 编译。

在编译模型之前,请在主机上从 安装工具 页面安装 MemryX Neural Compiler 工具。

注意: 建议在主机上或另一台独立机器上编译模型,而不是在 Frigate Docker 容器内编译。在 Docker 中安装编译器可能与容器包冲突。建议创建一个 Python 虚拟环境并在其中安装编译器。

设置好 SDK 2.1 环境后,按照 MemryX 编译器 文档编译你的模型。

示例:

bash
mx_nc -m yolonas.onnx -c 4 --autocrop -v --dfp_fname yolonas.dfp

有关编译模型的详细说明,请参阅 MemryX 编译器 文档和教程。

打包编译好的模型 ​

  1. 将编译好的模型打包成 .zip 文件。

  2. .zip 文件必须包含编译好的 .dfp 文件。

  3. 根据模型的不同,编译器可能还会生成裁剪的后处理网络。如果存在,将以 _post.onnx 为后缀命名。

  4. 将 .zip 文件绑定挂载到容器中,并在配置中使用 model.path 指定其路径。

  5. 更新 labelmap_path 以匹配自定义模型的标签。

yaml
# 如果配置中未提供任何内容,检测器将自动选择默认模型。
#
# 或者,你可以指定本地模型路径作为 .zip 文件来覆盖默认值。
# 如果提供了本地路径且文件存在,将使用该文件而不是下载。
#
# 示例:
# path: /config/yolonas.zip
#
# .zip 文件必须包含:
# ├── yolonas.dfp          (以 .dfp 结尾的文件)
# └── yolonas_post.onnx    (可选;仅当模型包含裁剪的后处理网络时)

NVIDIA TensorRT 检测器 ​

英伟达 Jetson 设备可使用 TensorRT 库进行目标检测。由于附加库的大小问题,此检测器仅在带有-tensorrt-jp6标签后缀的镜像中提供,例如 ghcr.io/blakeblackshear/frigate:stable-tensorrt-jp6。此检测器旨在与用于目标检测的 Yolo 模型配合使用。

生成模型 ​

用于 TensorRT 的模型必须在其运行的同一硬件平台上进行预处理。这意味着每个用户都必须执行额外的设置,为 TensorRT 库生成模型文件。其中包含一个脚本,可构建几种常见的模型。

如果在启动时未找到指定的模型,Frigate 镜像将生成模型文件。已处理的模型存储在/config/model_cache文件夹中。通常,/config路径已映射到主机上的一个目录,除非用户希望将其存储在主机上的其他位置,否则无需单独映射model_cache。

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

如果你拥有带有 DLA(Xavier 或 Orin)的 Jetson 设备,可以通过在模型名称后附加-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-416
yolov7-320
yolov7x-640
yolov7x-320

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

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

配置参数 ​

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

TensorRT 检测器默认使用位于/config/model_cache/tensorrt中的.trt模型文件。所使用的模型路径和维度将取决于你生成的模型。

使用以下配置来处理生成的 TRT 模型:

步骤 1 — 选择模型

YOLO (v3, v4, v7) 推荐

步骤 2 — 下载模型

步骤 3 — 配置检测器

yaml

Synaptics ​

以下 SoC 支持硬件加速物体检测:

  • SL1680

此实现使用Synaptics 模型转换,版本 v3.1.0。

此实现基于 sdk v1.5.0。

有关配置 SL 系列 NPU 硬件的信息,请参阅安装文档。

配置 ​

配置 Synap 检测器时,你必须指定模型:本地路径。

步骤 1 — 选择模型

SSD MobileNet 推荐

步骤 2 — 下载模型

步骤 3 — 配置检测器

yaml

瑞芯微 Rockchip 平台检测器 ​

瑞芯微 Rockchip 平台支持以下 SoC 的硬件加速物体/目标检测:

  • RK3562
  • RK3566
  • RK3568
  • RK3576
  • RK3588

该实现使用Rockchip 的 RKNN-Toolkit2 v2.3.2 版本。

信息

如果未提供自定义模型,RKNN 检测器会在首次启动时从 GitHub 下载默认模型。缓存后,模型可完全离线使用。详见网络要求。

提示

多摄像头场景下,单个检测器可能处理不过来。若 NPU 资源允许,可配置多个检测器,例如:

yaml
detectors:
  rknn_0:
    type: rknn
    num_cores: 0
  rknn_1:
    type: rknn
    num_cores: 0

前提条件 ​

请确保按照Rockchip 特定安装说明进行操作。

提示

你可以通过以下命令查看 NPU 负载:

bash
$ cat /sys/kernel/debug/rknpu/load
>> NPU load:  Core0:  0%, Core1:  0%, Core2:  0%,

RockChip 支持的模型 ​

以下config.yml展示了配置检测器的所有相关选项并加以说明。除两处外,所有显示的值均为默认值。标记为"required"的行是使用检测器至少需要的配置,其他行均为可选。

以下推理时间是在 rk3588 上使用 3 个 NPU 核心测得的:

模型大小(MB)推理时间(ms)
deci-fp16-yolonas_s2425
deci-fp16-yolonas_m6235
deci-fp16-yolonas_l8145
frigate-fp16-yolov9-t635
rock-i8-yolox_nano314
rock-i8_yolox_tiny618
  • 所有模型都会自动下载并存储在config/model_cache/rknn_cache文件夹中。升级 Frigate 后,应删除旧模型以释放空间。
  • 你也可以提供自己的.rknn模型。请不要将自己的模型保存在rknn_cache文件夹中,应直接存储在model_cache文件夹或其他子文件夹中。要将模型转换为.rknn格式,请参阅rknn-toolkit2(需要 x86 机器)。注意,仅支持对特定模型进行后处理。

步骤 1 — 选择模型

YOLOv9 推荐▼

步骤 2 — 下载模型

步骤 3 — 配置检测器

yaml

将自定义 onnx 模型转换为 rknn 格式 ​

要使用rknn-toolkit2将 onnx 模型转换为 rknn 格式,你需要:

  1. 将一个或多个 onnx 格式的模型文件放置在 Docker 容器内的config/model_cache/rknn_cache/onnx目录下(可能需要sudo权限)
  2. 将配置文件保存为config/conv2rknn.yaml(详见下文)
  3. 运行docker exec <此处填写frigate的容器ID> python3 /opt/conv2rknn.py。如果转换成功,rknn 模型将被放置在config/model_cache/rknn_cache中

以下是需要根据你的 onnx 模型进行调整的配置文件范例:

yaml
soc: ['rk3562', 'rk3566', 'rk3568', 'rk3576', 'rk3588']
quantization: false

output_name: '{input_basename}'

config:
  mean_values: [[0, 0, 0]]
  std_values: [[255, 255, 255]]
  quant_img_RGB2BGR: true

参数说明:

  • soc: 要为其构建 rknn 模型的 SoC 列表。如果不指定此参数,脚本会尝试检测你的 SoC 并为其构建 rknn 模型
  • quantization: true表示将进行 8 位整数(i8)量化,false表示为 16 位浮点(fp16)。默认值:false
  • output_name: 模型的输出名称。可以使用下面几个变量:
    • quant: 根据配置为"i8"或"fp16"
    • input_basename: 输入模型的基本名称(例如,如果输入模型名为"my_model.onnx",则为"my_model")
    • soc: 模型构建的目标 SoC(如"rk3588")
    • tk_version: rknn-toolkit2的版本(如"2.3.0")
    • 示例: 指定output_name = "frigate-{quant}-{input_basename}-{soc}-v{tk_version}"可能会生成名为frigate-i8-my_model-rk3588-v2.3.0.rknn的模型
  • config: 传递给rknn-toolkit2进行模型转换的配置。所有可用参数的说明请参阅本手册的"2.2. 模型配置"部分

AXERA 算力卡 ​

以下 SoC 支持硬件加速物体检测:

  • AX650N
  • AX8850N

此实现使用 AXera Pulsar2 工具链。

有关配置 AXEngine 硬件的信息,请参阅安装文档。

信息

AXEngine 检测器会在首次启动时从 HuggingFace 下载默认模型。缓存后,模型可完全离线使用。详见网络要求。

配置 ​

配置 AXEngine 检测器时,你必须指定模型名称。

步骤 1 — 选择模型

YOLOv9 推荐

步骤 2 — 下载模型

步骤 3 — 配置检测器

yaml