硬件支持
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 提供以下内置检测器类型:cpu
、edgetpu
、onnx
、openvino
、rocm
和tensorrt
。 默认情况下, 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"
属性指定。最常见的设备是 CPU
和 GPU
。目前,使用 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 构建和下载具有预训练权重的兼容模型。
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
模型生成
用于 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-608
和yolov7x-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
(可能还需要 render
和 ssl/_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 构建并下载带有预训练权重的兼容模型。
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 构建并下载带有预训练权重的兼容模型。
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 检测器。增加的探测器数量超过摄像机的数量不会提高性能。