Skip to content

支持的硬件

信息

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

通用硬件

  • Coral EdgeTPU:Google Coral EdgeTPU 提供 USB 和 m.2 两种接口,兼容多种设备。
  • Hailo:Hailo8 和 Hailo8L AI 加速模块提供 m.2 接口和树莓派 HAT,兼容多种设备。

AMD

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

Intel

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

NVIDIA

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

Nvidia Jetson

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

瑞芯微 Rockchip

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

测试用途

NOTE

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

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

官方支持的检测器

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

Edge TPU 检测器

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

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

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

提示

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

单个 USB Coral

yaml
detectors:
  coral:
    type: edgetpu
    device: usb

多个 USB Coral

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

原生 Coral(开发板)

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

yaml
detectors:
  coral:
    type: edgetpu
    device: ''

单个 PCIE/M.2 Coral

yaml
detectors:
  coral:
    type: edgetpu
    device: pci

多个 PCIE/M.2 Coral

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

混合使用 Coral

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

Hailo-8 检测器

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

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

配置

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

YOLO 模型

此配置适用于基于 YOLO 的模型。当未提供自定义模型路径或 URL 时,检测器会根据检测到的硬件自动下载默认模型:

  • Hailo-8 硬件:使用YOLOv6n(默认:yolov6n.hef
  • Hailo-8L 硬件:使用YOLOv6n(默认:yolov6n.hef
yaml
detectors:
  hailo:
    type: hailo8l
    device: PCIe

model:
  width: 320
  height: 320
  input_tensor: nhwc
  input_pixel_format: rgb
  input_dtype: int
  model_type: yolo-generic
  labelmap_path: /labelmap/coco-80.txt

  # 检测器会根据你的硬件自动选择默认模型:
  # - Hailo-8硬件:YOLOv6n(默认:yolov6n.hef)
  # - Hailo-8L硬件:YOLOv6n(默认:yolov6n.hef)
  #
  # 可选:你可以指定本地模型路径来覆盖默认值。
  # 如果提供了本地路径且文件存在,将使用该文件而不是下载。
  # 示例:
  # path: /config/model_cache/hailo/yolov6n.hef
  #
  # 你也可以使用自定义URL覆盖:
  # path: https://hailo-model-zoo.s3.eu-west-2.amazonaws.com/ModelZoo/Compiled/v2.14.0/hailo8/yolov6n.hef
  # 只需确保根据模型提供正确的配置

SSD 模型

对于基于 SSD 的模型,请提供你编译的 SSD 模型的路径或 URL。集成将首先检查本地路径,必要时才会下载。

yaml
detectors:
  hailo:
    type: hailo8l
    device: PCIe

model:
  width: 300
  height: 300
  input_tensor: nhwc
  input_pixel_format: rgb
  model_type: ssd
  # 为SSD MobileNet v1指定本地模型路径(如果可用)或URL
  # 本地路径示例:
  # path: /config/model_cache/h8l_cache/ssd_mobilenet_v1.hef
  #
  # 或使用自定义URL覆盖:
  # path: https://hailo-model-zoo.s3.eu-west-2.amazonaws.com/ModelZoo/Compiled/v2.14.0/hailo8l/ssd_mobilenet_v1.hef

自定义模型

Hailo 检测器支持所有为 Hailo 硬件编译并包含后处理的 YOLO 模型。你可以指定自定义 URL 或本地路径来下载或直接使用你的模型。如果同时提供两者,检测器会优先检查本地路径。

yaml
detectors:
  hailo:
    type: hailo8l
    device: PCIe

model:
  width: 640
  height: 640
  input_tensor: nhwc
  input_pixel_format: rgb
  input_dtype: int
  model_type: yolo-generic
  labelmap_path: /labelmap/coco-80.txt
  # 可选:指定本地模型路径
  # path: /config/model_cache/hailo/custom_model.hef
  #
  # 或者作为备用方案,提供自定义URL:
  # path: https://custom-model-url.com/path/to/model.hef

更多现成模型,请访问:Hailo 模型库

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

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


OpenVINO 检测器

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

使用的 OpenVINO 设备通过device属性指定,需遵循设备文档中的命名规定。最常见的设备是CPUGPU。目前已知使用AUTO存在问题。为了向后兼容,如果在配置中设置了AUTO,Frigate 将尝试使用GPU

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

提示

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

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

支持的模型

SSDLite MobileNet v2

容器中提供了位于/openvino-model/ssdlite_mobilenet_v2.xml的 OpenVINO 模型,默认情况下此检测器类型使用该模型。该模型来自 Intel 的开放模型库SSDLite MobileNet V2,并转换为 FP16 精度的 IR 模型。

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

yaml
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模型受支持,但默认不包含。有关下载 YOLO-NAS 模型用于 Frigate 的更多信息,请参阅模型部分

警告

如果你使用的是 Frigate+ YOLO-NAS 模型,则除了 path 参数外,不应在配置中定义以下任何 model 相关参数。有关模型设置的更多信息,请参阅 Frigate+ 模型文档

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

yaml
detectors:
  ov:
    type: openvino
    device: GPU

model:
  model_type: yolonas
  width: 320 # <--- 应与notebook中设置的尺寸匹配
  height: 320 # <--- 应与notebook中设置的尺寸匹配
  input_tensor: nchw
  input_pixel_format: bgr
  path: /config/yolo_nas_s.onnx
  labelmap_path: /labelmap/coco-80.txt

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

YOLO(v3,v4,v7,v9)模型

YOLOv3、YOLOv4、YOLOv7 和 YOLOv9模型受支持,但默认不包含。

提示

YOLO 检测器设计用于支持 YOLOv3、YOLOv4、YOLOv7 和 YOLOv9 模型,但也可能支持其他 YOLO 模型架构。

警告

如果你使用的是 Frigate+ YOLOv9 模型,则除了 path 参数外,不应在配置中定义以下任何 model 相关参数。有关模型设置的更多信息,请参阅 Frigate+ 模型文档

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

yaml
detectors:
  ov:
    type: openvino
    device: GPU

model:
  model_type: yolo-generic
  width: 320 # <--- 应与模型导出时设置的imgsize匹配
  height: 320 # <--- 应与模型导出时设置的imgsize匹配
  input_tensor: nchw
  input_dtype: float
  path: /config/model_cache/yolo.onnx
  labelmap_path: /labelmap/coco-80.txt

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

RF-DETR 模型

RF-DETR是基于 DETR 的模型。支持导出为 ONNX 模型,Frigate 默认不包含该模型。有关下载 RF-DETR 模型用于 Frigate 的更多信息,请参阅模型部分

警告

由于 RF-DETR 模型的尺寸和复杂性,建议仅在独立 Arc 显卡上运行。

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

yaml
detectors:
  ov:
    type: openvino
    device: GPU

model:
  model_type: rfdetr
  width: 320
  height: 320
  input_tensor: nchw
  input_dtype: float
  path: /config/model_cache/rfdetr.onnx

D-FINE 模型

D-FINE是基于 DETR 的模型。支持导出为 ONNX 模型,Frigate 默认不包含该模型。有关下载 D-FINE 模型用于 Frigate 的更多信息,请参阅模型部分

警告

目前 D-FINE 模型只能在 OpenVINO 的 CPU 模式下运行,GPU 目前无法编译该模型

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

yaml
detectors:
  ov: 
    type: openvino

model: 
  model_type: dfine
  width: 640
  height: 640
  input_tensor: nchw
  input_dtype: float
  path: /config/model_cache/dfine_s_obj2coco.onnx
  labelmap_path: /labelmap/coco-80.txt

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

AMD/ROCm GPU 检测器

设置

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

Docker GPU 访问设置

ROCm 需要访问/dev/kfd/dev/dri设备。当 docker 或 frigate 不以 root 身份运行时,还应添加video(可能还有renderssl/_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)'

支持的模型

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

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

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-jp(4/5)版 Frigate 镜像中,Jetson 设备会被自动检测并与 ONNX 检测器一起使用。

提示

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

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

支持的模型

没有提供默认模型,支持以下格式:

YOLO-NAS

YOLO-NAS模型受支持,但默认不包含。有关下载 YOLO-NAS 模型用于 Frigate 的更多信息,请参阅模型部分

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

yaml
detectors:
  onnx:
    type: onnx

model:
  model_type: yolonas
  width: 320 # <--- 应与notebook中设置的尺寸匹配
  height: 320 # <--- 应与notebook中设置的尺寸匹配
  input_pixel_format: bgr
  input_tensor: nchw
  path: /config/yolo_nas_s.onnx
  labelmap_path: /labelmap/coco-80.txt

YOLO (v3, v4, v7, v9)

YOLOv3、YOLOv4、YOLOv7 和YOLOv9模型受支持,但默认不包含。

提示

YOLO 检测器设计用于支持 YOLOv3、YOLOv4、YOLOv7 和 YOLOv9 模型,但也可能支持其他 YOLO 模型架构。有关下载 YOLO 模型用于 Frigate 的更多信息,请参阅模型部分

警告

如果你使用的是 Frigate+ YOLOv9 模型,则除了 path 参数外,不应在配置中定义以下任何 model 相关参数。有关模型设置的更多信息,请参阅 Frigate+ 模型文档

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

yaml
detectors:
  onnx:
    type: onnx

model:
  model_type: yolo-generic
  width: 320 # <--- 应与模型导出时设置的imgsize匹配
  height: 320 # <--- 应与模型导出时设置的imgsize匹配
  input_tensor: nchw
  input_dtype: float
  path: /config/model_cache/yolo.onnx
  labelmap_path: /labelmap/coco-80.txt

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

YOLOx

YOLOx模型受支持,但默认不包含。有关下载 YOLOx 模型用于 Frigate 的更多信息,请参阅模型部分

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

yaml
detectors:
  onnx:
    type: onnx

model:
  model_type: yolox
  width: 416 # <--- 应与模型导出时设置的imgsize匹配
  height: 416 # <--- 应与模型导出时设置的imgsize匹配
  input_tensor: nchw
  input_dtype: float_denorm
  path: /config/model_cache/yolox_tiny.onnx
  labelmap_path: /labelmap/coco-80.txt

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

RF-DETR

RF-DETR是基于 DETR 的模型。支持导出的 ONNX 模型,但默认不包含。有关下载 RF-DETR 模型用于 Frigate 的更多信息,请参阅模型部分

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

yaml
detectors:
  onnx:
    type: onnx

model:
  model_type: rfdetr
  width: 320
  height: 320
  input_tensor: nchw
  input_dtype: float
  path: /config/model_cache/rfdetr.onnx

D-FINE

D-FINE是基于 DETR 的模型。支持导出的 ONNX 模型,但默认不包含。有关下载 D-FINE 模型用于 Frigate 的更多信息,请参阅模型部分

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

yaml
detectors:
  onnx:
    type: onnx

model:
  model_type: dfine
  width: 640
  height: 640
  input_tensor: nchw
  input_dtype: float
  path: /config/model_cache/dfine_m_obj2coco.onnx
  labelmap_path: /labelmap/coco-80.txt

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

CPU 检测器(不推荐使用)

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

危险

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

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

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

yaml
detectors:
  cpu1:
    type: cpu
    num_threads: 3
  cpu2:
    type: cpu
    num_threads: 3

model:
  path: '/custom_model.tflite'

使用 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 中,你需要对 Frigate 配置文件进行以下更改:

yaml
detectors:
  deepstack:
    api_url: http://<你的codeproject_ai服务器IP>:<端口>/v1/vision/detection
    type: deepstack
    api_timeout: 0.1 # 秒

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

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

由社区支持的检测器

NVIDIA TensorRT 检测器

英伟达 Jetson 设备可使用 TensorRT 库进行目标检测。由于附加库的大小问题,此检测器仅在带有-tensorrt-jp6标签后缀的镜像中提供,例如docker.cnb.cool/frigate-cn/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-608yolov7x-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 模型:

yaml
detectors:
  tensorrt:
    type: tensorrt
    device: 0 #这是默认值,选择第一个GPU

model:
  path: /config/model_cache/tensorrt/yolov7-320.trt
  labelmap_path: /labelmap/coco-80.txt
  input_tensor: nchw
  input_pixel_format: rgb
  width: 320 # 必须与所选模型匹配,例如 yolov7-320 对应 320,yolov4-416 对应 416
  height: 320 # 必须与所选模型匹配,例如 yolov7-320 对应 320,yolov4-416 对应 416

瑞芯微 Rockchip 平台检测器

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

  • RK3562
  • RK3566
  • RK3568
  • RK3576
  • RK3588

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

提示

多摄像头场景下,单个检测器可能处理不过来。若 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%,

支持的模型

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

yaml
detectors: # 必填
  rknn: # 必填
    type: rknn # 必填
    # 使用的NPU核心数量
    # 0表示自动选择
    # 如果有多核NPU(如在rk3588上),可增加此值以提高性能,例如设置为3
    num_cores: 0

以下推理时间是在 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 机器)。注意,仅支持对特定模型进行后处理。

YOLO-NAS 模型

yaml
model: # required
  # 模型名称(将自动下载)或自定义.rknn模型文件路径
  # 可选值:
  # - deci-fp16-yolonas_s
  # - deci-fp16-yolonas_m
  # - deci-fp16-yolonas_l
  # 或你的yolonas_model.rknn容器内完整路径
  path: deci-fp16-yolonas_s
  model_type: yolonas
  width: 320
  height: 320
  input_pixel_format: bgr
  input_tensor: nhwc
  labelmap_path: /labelmap/coco-80.txt

警告

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

YOLO (v9)模型

yaml
model: # required
  # 模型名称(将自动下载)或自定义.rknn模型文件路径
  # 可选值:
  # - frigate-fp16-yolov9-t
  # - frigate-fp16-yolov9-s
  # - frigate-fp16-yolov9-m
  # - frigate-fp16-yolov9-c
  # - frigate-fp16-yolov9-e
  # 或你的yolo_model.rknn容器内完整路径
  path: frigate-fp16-yolov9-t
  model_type: yolo-generic
  width: 320
  height: 320
  input_tensor: nhwc
  labelmap_path: /labelmap/coco-80.txt

YOLOx 模型

yaml
model: # required
  # 模型名称(将自动下载)或自定义.rknn模型文件路径
  # 可选值:
  # - rock-i8-yolox_nano
  # - rock-i8-yolox_tiny
  # - rock-fp16-yolox_nano
  # - rock-fp16-yolox_tiny
  # 或你的yolox_model.rknn容器内完整路径
  path: rock-i8-yolox_nano
  model_type: yolox
  width: 416
  height: 416
  input_tensor: nhwc
  labelmap_path: /labelmap/coco-80.txt

将自定义 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. 模型配置"部分

模型

Frigate 受限于协议等版权限制,不会自带某些模型,请自行下载相关模型并引用。

下载模型

以下是获取不同类型模型的提示

下载 D-FINE 模型

您可以通过运行以下命令将 D-FINE 模型导出为 ONNX 格式。请将整段命令复制粘贴到终端执行,只需修改第一行中的MODEL_SIZE=s参数,将其调整为sml尺寸。

sh
docker build . --build-arg MODEL_SIZE=s --output . -f- <<'EOF'
FROM python:3.11 AS build
RUN apt-get update && apt-get install --no-install-recommends -y libgl1 && rm -rf /var/lib/apt/lists/*
COPY --from=ghcr.io/astral-sh/uv:0.8.0 /uv /bin/
WORKDIR /dfine
RUN git clone https://github.com/Peterande/D-FINE.git .
RUN uv pip install --system -r requirements.txt
RUN uv pip install --system onnx onnxruntime onnxsim onnxscript
# Create output directory and download checkpoint
RUN mkdir -p output
ARG MODEL_SIZE
RUN wget https://github.com/Peterande/storage/releases/download/dfinev1.0/dfine_${MODEL_SIZE}_obj2coco.pth -O output/dfine_${MODEL_SIZE}_obj2coco.pth
# Modify line 58 of export_onnx.py to change batch size to 1
RUN sed -i '58s/data = torch.rand(.*)/data = torch.rand(1, 3, 640, 640)/' tools/deployment/export_onnx.py
RUN python3 tools/deployment/export_onnx.py -c configs/dfine/objects365/dfine_hgnetv2_${MODEL_SIZE}_obj2coco.yml -r output/dfine_${MODEL_SIZE}_obj2coco.pth
FROM scratch
ARG MODEL_SIZE
COPY --from=build /dfine/output/dfine_${MODEL_SIZE}_obj2coco.onnx /dfine-${MODEL_SIZE}.onnx
EOF

警告

相关模型的构建需要使用代理,国内网络可能无法正常访问国外的部分服务。

下载 RF-DETR 模型

你可以通过运行以下命令将 RF-DETR 导出为 ONNX 格式。请将整段命令复制粘贴到终端执行,并根据需要将第一行中的MODEL_SIZE=Nano修改为NanoSmallMedium规格。

sh
docker build . --build-arg MODEL_SIZE=Nano --rm --output . -f- <<'EOF'
FROM python:3.11 AS build
RUN apt-get update && apt-get install --no-install-recommends -y libgl1 && rm -rf /var/lib/apt/lists/*
COPY --from=ghcr.io/astral-sh/uv:0.8.0 /uv /bin/
WORKDIR /rfdetr
RUN uv pip install --system rfdetr[onnxexport] torch==2.8.0 onnx==1.19.1 onnxscript
ARG MODEL_SIZE
RUN python3 -c "from rfdetr import RFDETR${MODEL_SIZE}; x = RFDETR${MODEL_SIZE}(resolution=320); x.export(simplify=True)"
FROM scratch
ARG MODEL_SIZE
COPY --from=build /rfdetr/output/inference_model.onnx /rfdetr-${MODEL_SIZE}.onnx
EOF

下载 YOLO-NAS 模型

点击下方的Open in colab按钮即可在 Google Colab 中使用此构建脚本可直接构建并下载预训练兼容模型。 在Colab中打开

警告

注意,该在线构建服务由 Google 提供,中国大陆地区可能无法正常访问,请使用科学上网。

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

该 notebook 中的输入图像尺寸默认设置为 320x320。由于 Frigate 在执行检测前会将视频帧裁剪至关注区域,这种设置通常不会影响检测性能,同时还能降低 CPU 使用率并加快推理速度。如果需要,你可以将 notebook 和配置更新为 640x640 的输入尺寸。

下载 YOLO 模型

YOLOx

YOLOx 模型可以从YOLOx 仓库下载。

YOLOv3、YOLOv4 和 YOLOv7

导出为 ONNX 格式:

sh
git clone https://github.com/NateMeyer/tensorrt_demos
cd tensorrt_demos/yolo
./download_yolo.sh
python3 yolo_to_onnx.py -m yolov7-320

YOLOv9

你可以使用以下命令将 YOLOv9 模型导出为 ONNX 格式。请根据需要修改第一行中的MODEL_SIZE=tIMG_SIZE=320参数(模型大小MODEL_SIZE的值可替换为t, s, m, c, 以及 e等(从小到大排序) 模型尺寸,图像大小IMG_SIZE可替换为320640),然后将整段命令复制粘贴到安装了 Docker 的 Linux 系统中 或 运行 Frigate 的服务器终端执行(注意,不是 Frigate 的容器终端里!)。

提示

如果你当前在中国大陆,建议使用国内加速优化命令,将会在构建过程中使用镜像源,提高构建模型的速度。

镜像构建时间大约在 10-15 分钟左右,请耐心等待。

sh
docker build . --build-arg MODEL_SIZE=t --build-arg IMG_SIZE=320 --output . -f- <<'EOF'
FROM docker.cnb.cool/frigate-cn/mirrors/docker-image/python:3.11 AS build
RUN rm -rf /etc/apt/sources.list
ADD https://cnb.cool/frigate-cn/frigate-cn/-/git/raw/main/scripts/sources.list /etc/apt/sources.list
RUN apt-get update && apt-get install --no-install-recommends -y libgl1 && rm -rf /var/lib/apt/lists/*
COPY --from=ghcr.nju.edu.cn/astral-sh/uv:0.8.0 /uv /bin/
WORKDIR /yolov9
ADD https://cnb.cool/frigate-cn/mirrors/wongkinyiu/yolov9.git .
RUN uv pip install -i https://mirrors.ustc.edu.cn/pypi/simple --system -r requirements.txt
RUN uv pip install -i https://mirrors.ustc.edu.cn/pypi/simple --system onnx==1.18.0 onnxruntime onnx-simplifier>=0.4.1 onnxscript
ARG MODEL_SIZE
ARG IMG_SIZE
ADD https://cnb.cool/frigate-cn/mirrors/wongkinyiu/yolov9/-/releases/download/v0.1/yolov9-${MODEL_SIZE}-converted.pt yolov9-${MODEL_SIZE}.pt
RUN sed -i "s/ckpt = torch.load(attempt_download(w), map_location='cpu')/ckpt = torch.load(attempt_download(w), map_location='cpu', weights_only=False)/g" models/experimental.py
RUN python3 export.py --weights ./yolov9-${MODEL_SIZE}.pt --imgsz ${IMG_SIZE} --simplify --include onnx
FROM scratch
ARG MODEL_SIZE
ARG IMG_SIZE
COPY --from=build /yolov9/yolov9-${MODEL_SIZE}.onnx /yolov9-${MODEL_SIZE}-${IMG_SIZE}.onnx
EOF
sh
docker build . --build-arg MODEL_SIZE=t --build-arg IMG_SIZE=320 --output . -f- <<'EOF'
FROM python:3.11 AS build
RUN apt-get update && apt-get install --no-install-recommends -y libgl1 && rm -rf /var/lib/apt/lists/*
COPY --from=ghcr.io/astral-sh/uv:0.8.0 /uv /bin/
WORKDIR /yolov9
ADD https://github.com/WongKinYiu/yolov9.git .
RUN uv pip install --system -r requirements.txt
RUN uv pip install --system onnx==1.18.0 onnxruntime onnx-simplifier>=0.4.1 onnxscript
ARG MODEL_SIZE
ARG IMG_SIZE
ADD https://github.com/WongKinYiu/yolov9/releases/download/v0.1/yolov9-${MODEL_SIZE}-converted.pt yolov9-${MODEL_SIZE}.pt
RUN sed -i "s/ckpt = torch.load(attempt_download(w), map_location='cpu')/ckpt = torch.load(attempt_download(w), map_location='cpu', weights_only=False)/g" models/experimental.py
RUN python3 export.py --weights ./yolov9-${MODEL_SIZE}.pt --imgsz ${IMG_SIZE} --simplify --include onnx
FROM scratch
ARG MODEL_SIZE
ARG IMG_SIZE
COPY --from=build /yolov9/yolov9-${MODEL_SIZE}.onnx /yolov9-${MODEL_SIZE}-${IMG_SIZE}.onnx
EOF
最近更新