ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Frigate YOLO-NAS 模型导出实战:基于官方 Notebook 构建兼容 ONNX 检测模型

Frigate YOLO-NAS 模型导出实战:基于官方 Notebook 构建兼容 ONNX 检测模型 Frigate YOLO-NAS 模型导出实战基于官方 Notebook 构建兼容 ONNX 检测模型【免费下载链接】frigateNVR with realtime local object detection for IP cameras项目地址: https://gitcode.com/GitHub_Trending/fr/frigate本指南围绕 Frigate 仓库自带的 notebooks/README.md 与配套 YOLO_NAS_Pretrained_Export.ipynb完整讲解如何在 Google Colab 中构建并下载一个与 Frigate 兼容的 YOLO-NAS 预训练 ONNX 检测模型。读完本文你将掌握 notebook 每个单元格的具体作用、关键导出参数输入尺寸、置信度阈值、输出张量格式的取值依据并学会将导出的模型通过 ONNX / OpenVINO 检测器接入 Frigate 的完整配置方法。一、背景Frigate 的自定义模型与 Notebook 的定位Frigate 是一个面向 IP 摄像头的实时本地目标检测 NVR默认依赖容器内自带的检测模型。当你想使用其他架构的自定义模型时可以通过配置detectors与model段将其接入。ONNX 是一种开放的机器学习模型交换格式Frigate 支持在 CPU、OpenVINO、ROCm 与 TensorRT 上运行 ONNX 模型见 object_detectors.md 的 ONNX 章节。YOLO-NAS 是由 DeciAI 提出的目标检测模型系列包含YOLO_NAS_S、YOLO_NAS_M、YOLO_NAS_L三种规格。由于 Frigate 检测器期望的是经过特定导出方式处理的 ONNX 模型扁平输出格式、固定每图预测数上限直接下载网上的通用 ONNX 模型往往无法工作。为此仓库在 notebooks 目录下提供了官方导出 Notebook保证导出结果与 Frigate 的 ONNX 运行时完全兼容。二、重要前提与限制2.1 许可证警告Notebook 在 README 中明确标注了WARNING来自 DeciAI 的 YOLO-NAS 预训练权重受其自身许可证约束不能用于商业用途。详细信息请参阅 super-gradients 项目中的LICENSE.YOLONAS.html文档。在动手导出前请先确认你的使用场景研究、学习或非商业项目符合该许可证要求。2.2 Python 版本要求Colab 运行时Notebook 第一个单元格markdown给出了关键的运行前提示运行前请进入Runtime → Change runtime type → Fallback runtime version: 2025.07Python 3.11。当前 Colab 默认运行时Python 3.12与super-gradients不兼容。也就是说如果你直接在新版 Colab 默认环境中运行依赖安装或模型加载可能失败务必先手动切换到 2025.07 版本对应 Python 3.11的运行时。三、Notebook 逐步拆解从权重到 Frigate 兼容 ONNX整个 Notebook 共 5 个可执行单元逻辑清晰准备环境 → 修复下载源 → 加载预训练模型 → 导出 ONNX → 下载到本地。下面逐单元格说明。3.1 安装依赖! pip install -q jedi0.16 ! pip install -q githttps://github.com/Deci-AI/super-gradients.gitjedi0.16用于保证 Notebook 的代码补全/内省在 Colab 环境下正常。super-gradients从 GitHub 直接安装而非 PyPI 发布版因为导出 YOLO-NAS 到 Frigate 所需格式的功能依赖其最新代码。3.2 重写预训练权重下载源! sed -i s/sghub\.deci\.ai/d2gjn4b69gu75n.cloudfront.net/g; s/sg-hub-nv\.s3\.amazonaws\.com/d2gjn4b69gu75n.cloudfront.net/g /usr/local/lib/python*/dist-packages/super_gradients/training/pretrained_models.py ! sed -i s/sghub\.deci\.ai/d2gjn4b69gu75n.cloudfront.net/g; s/sg-hub-nv\.s3\.amazonaws\.com/d2gjn4b69gu75n.cloudfront.net/g /usr/local/lib/python*/dist-packages/super_gradients/training/utils/checkpoint_utils.py这一步将 super-gradients 内部预训练权重下载地址sghub.deci.ai与sg-hub-nv.s3.amazonaws.com统一重定向到 CDN 镜像域名规避部分网络环境无法访问原始下载源的问题。若你的网络环境可以直接访问原始域名可跳过此单元。3.3 加载 COCO 预训练权重from super_gradients.common.object_names import Models from super_gradients.conversion import DetectionOutputFormatMode from super_gradients.training import models model models.get(Models.YOLO_NAS_S, pretrained_weightscoco)Models.YOLO_NAS_S指定模型规格。README 指出YOLO_NAS_S 是默认构建规格同时也提供 YOLO_NAS_M 与 YOLO_NAS_L 规格可供导出只需将此处替换为Models.YOLO_NAS_M/Models.YOLO_NAS_L。pretrained_weightscoco加载在 COCO 数据集上预训练的权重即 README 警告中提及的、受 DeciAI 许可证约束的预训练权重。3.4 导出 Frigate 兼容的 ONNX 模型核心model.export( yolo_nas_s.onnx, output_predictions_formatDetectionOutputFormatMode.FLAT_FORMAT, max_predictions_per_image20, num_pre_nms_predictions300, confidence_threshold0.4, input_image_shape(320, 320), )这是整个 Notebook 中最关键的一步各参数含义如下参数取值作用output_predictions_formatDetectionOutputFormatMode.FLAT_FORMAT必须使用扁平输出格式。Frigate 的 ONNX 检测器解析的就是这种格式详见下文源码分析这是兼容性的核心max_predictions_per_image20每张图像最多输出的预测框数量与 Frigate 端解析时预设的20个检测槽位一一对应num_pre_nms_predictions300NMS非极大值抑制前保留的候选预测数量保证小目标召回confidence_threshold0.4导出时内置的置信度阈值低于该值的预测会被直接丢弃input_image_shape(320, 320)模型输入分辨率修改后需同步修改 Frigate 配置中的width/height3.5 下载模型到本地from google.colab import files files.download(yolo_nas_s.onnx)通过 Colab 的文件下载接口将yolo_nas_s.onnx保存到本地随后将其放入 Frigate 容器可访问的目录例如挂载到/config的宿主机目录。四、为什么默认用 320×320 输入README 专门解释了这一设计选择Notebook 中设置的输入图像尺寸为 320×320。由于 Frigate 在运行检测前会把视频帧裁剪到感兴趣区域在大多数场景下 320×320 可以在不损失性能的前提下降低 CPU 占用并加快推理速度。如有需要Notebook 与配置文件都可以改为 640×640。也就是说Frigate 的检测流程是先基于运动检测将画面裁剪为包含目标的区域region再将该区域送入检测模型而非对整帧做全图推理。因此模型输入分辨率无需与摄像头原始分辨率一致小输入尺寸320×320通常足够且更快。若你的使用场景需要更高的检测精度可同时将 Notebook 中的input_image_shape与配置中的width/height改为640。五、将导出的模型接入 Frigate5.1 挂载模型文件将yolo_nas_s.onnx放到宿主机config目录通常通过 Docker volume 挂载到容器内/config使容器内路径为/config/yolo_nas_s.onnx。5.2 ONNX 检测器配置以 ONNX 检测器为例参照 docs/data/object_detectors_models.yaml 中onnx→yolonas条目detectors: onnx: type: onnx model: model_type: yolonas width: 320 # 必须与 Notebook 中 input_image_shape 一致 height: 320 # 必须与 Notebook 中 input_image_shape 一致 input_pixel_format: bgr input_tensor: nchw path: /config/yolo_nas_s.onnx labelmap_path: /labelmap/coco-80.txt参数说明字段定义见 detector_config.py 中的ModelConfig字段取值说明model_typeyolonas检测模型架构类型。ModelTypeEnum中合法取值为ssd、yolox、yolonas、yolo-generic、rfdetr、dfine见 detector_config.pywidth/height320模型输入张量尺寸必须与导出时的input_image_shape一致input_pixel_formatbgr模型期望的像素色彩空间rgb/bgr/yuvinput_tensornchw模型输入张量布局nchw/nhwc等YOLO-NAS 导出结果为 NCHWinput_dtypeint默认值输入张量数据类型float/float_denorm/int不写则使用默认值intpath/config/yolo_nas_s.onnx模型文件在容器内的路径labelmap_path/labelmap/coco-80.txt将数字类别映射为字符串标签的标签映射文件容器内已预置 COCO-80 标签文件5.3 通过 UI 配置在 Frigate 的Settings → System → Detectors and model页面选择ONNX检测器类型并点击Add然后在 Custom Model 标签页中按上表逐项填写即可二者最终都会落到同一份 YAML 配置上。5.4 OpenVINO 检测器配置如果你使用 OpenVINO 后端例如 Intel 核显检测器类型openvino设备GPU配置与 ONNX 几乎一致仅需将detectors段替换为detectors: ov: type: openvino device: GPU model: model_type: yolonas width: 320 height: 320 input_tensor: nchw input_pixel_format: bgr path: /config/yolo_nas_s.onnx labelmap_path: /labelmap/coco-80.txtFrigate 在启动时会自动探测硬件并选择合适的执行后端默认镜像配合 OpenVINO 使用 Intel GPU-rocm镜像自动启用 AMD ROCm-tensorrt镜像自动使用 Nvidia GPU详见 object_detectors.md 的 ONNX 章节。六、源码级原理Frigate 如何解析 YOLO-NAS 输出要理解导出的参数为何如此设定需要看 Frigate 的 ONNX 检测器实现 onnx.py。在detect_raw中针对ModelTypeEnum.yolonas的分支逻辑如下elif self.onnx_model_type ModelTypeEnum.yolonas: predictions tensor_output[0] detections np.zeros((20, 6), np.float32) for i, prediction in enumerate(predictions): if i 20: break (_, x_min, y_min, x_max, y_max, confidence, class_id) prediction # when running in GPU mode, empty predictions in the output have class_id of -1 if class_id 0: break detections[i] [ class_id, confidence, y_min / self.height, x_min / self.width, y_max / self.height, x_max / self.width, ] return detections从这段代码可以确认几个与 Notebook 参数严格对应的约定输出格式必须是扁平张量predictions取自tensor_output[0]每行是(_, x_min, y_min, x_max, y_max, confidence, class_id)形式的扁平结构。这正是 Notebook 中DetectionOutputFormatMode.FLAT_FORMAT的作用——super-gradients 默认输出格式带后处理的嵌套结构无法被该分支解析。每图最多 20 个检测detections预分配为(20, 6)循环i 20即截断。因此导出时max_predictions_per_image20必须不小于 Frigate 的解析上限否则多余的预测会被丢弃。空槽位以class_id 0标记GPU 后端下未使用的预测槽位class_id为-1Frigate 遇到负值即提前终止解析因此导出时无需恰好凑满 20 个预测。坐标按输入尺寸归一化y_min / self.height等除法说明坐标会相对模型输入尺寸归一化之后再由 Frigate 映射回原始帧坐标系。这正是width/height必须与导出尺寸一致的原因——一旦不匹配框坐标将整体错位。此外ONNXDetector在初始化时会根据配置的input_tensor构造预热张量并执行一次推理_warmup用于分摊 CUDA PTX JIT 编译、MIGraphX 图编译等一次性开销见 onnx.py首次启动日志中会出现 warming up detector (may take a while on first run)。七、注意事项与常见问题ROCmAMD集显兼容性官方文档在 ROCm 章节明确提示 YOLO-NAS models are known to not run well on integrated GPUs已知在 AMD 集成显卡上运行不佳见 object_detectors.md 的 ROCm 部分。使用 AMD 集显时建议评估其他模型如 YOLOv9、D-FINE。升级到 640×640修改 Notebook 中input_image_shape(640, 640)重新导出同时将配置中width、height改为640。注意更高的输入分辨率会带来更高的 CPU 占用与更长的推理时间。多检测器扩展当摄像头数量较多、单检测器吞吐不足时可定义多个检测器实例例如onnx_0、onnx_1均指向同一模型前提是 GPU 资源充足详见 object_detectors.md。标签映射导出的 YOLO-NAS 使用 COCO 类别顺序容器内/labelmap/coco-80.txt与之对应无需自备标签文件若使用自定义标签集请提供对应的labelmap_path。其他加速后端同样的 YOLO-NAS 模型还可用于 MemryX MX3 检测器其默认模型即为 YOLO-NAS 320×320见 object_detectors_models.yaml 中memryx→yolonas条目以及 Rockchip RKNN 等社区支持的硬件具体导出流程不同需参考对应章节。八、总结通过仓库自带的 YOLO_NAS_Pretrained_Export.ipynb你可以在一台仅有浏览器的环境中完成预训练权重 → Frigate 兼容 ONNX的完整链路安装 super-gradients、加载 COCO 预训练权重、以扁平格式导出 320×320 的模型并下载。随后在 object_detectors.md 与 object_detectors_models.yaml 的指引下通过 ONNX 或 OpenVINO 检测器将其接入 Frigate即可在本地实时推理中体验 YOLO-NAS 的检测能力——前提是严格遵守其非商业使用的许可证约束。【免费下载链接】frigateNVR with realtime local object detection for IP cameras项目地址: https://gitcode.com/GitHub_Trending/fr/frigate创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表