feat: export classifier with YOLO OpenVINO interface

This commit is contained in:
Shaun Zhou
2026-10-14 12:00:36 +08:00
parent d42a89ed13
commit 03f667276b
3 changed files with 258 additions and 0 deletions
+28
View File
@@ -801,6 +801,34 @@ ultralytics 自己还会在 `runs/detect/film/` 下写:
配置支持 `_base_` 继承与命令行 `--set a.b.c=value` 覆盖,见 [utils/config.py](utils/config.py)。
新增骨架 / 数据集只需用注册表装饰器注册,再在 yaml 里按 `name` 引用。
## 分类模型复用 YOLO OpenVINO 接口
生产端只使用类别时,可以将分类器导出成与既有 YOLO IR 相同的输入输出接口:
```bash
uv pip install openvino
uv run python scripts/export_classifier_openvino.py \
--checkpoint runs/classify/best.pth \
--template runs/detect/models/film_128_20261013_0902_openvino_model/film_128_20261013_0902.xml \
--out runs/classify/models/resnet18_128_yolo_adapter
```
`--template` 请指定实际部署的 YOLO `.xml`,其同目录需要有 `metadata.yaml`。
脚本读取分类检查点的配置和同目录 `eval_report.json` 中的类别顺序;也可用
`--classes classes.txt` 或 `--classes eval_report.json` 明确指定分类器的类别顺序。
两者类别集合不一致、训练预处理不受支持或输入尺寸不匹配时会拒绝导出。
产出的 XML/BIN 使用模板文件名,输入为 RGB float32 BCHW、值域 `[0,1]`。
逐图标准化按训练配置嵌入模型,分类概率按 YOLO 类别顺序排列。
输出保持 `[1,4+nc,anchors]`:仅第一个候选携带全图伪框及 Softmax 概率,其他候选为零。
伪框是像素 `cx,cy,w,h`,不表示缺陷位置。脚本不进行 resize,图片必须已切为目标尺寸。
部署时成对替换 XML/BIN;使用元数据的程序也需同步 `metadata.yaml`。
仓库的 `deploy/cpp` 解码器可直接读取适配模型,生产代码若有额外硬编码则需核对。
Softmax 分数不同于 YOLO 置信度,需在实际数据上确认过滤阈值。
`normal` 也作为普通分类结果返回;原图被切成多片时,每片各返回一个分类结果。
输出目录必须是新目录,原有模型不会被覆盖。
## 开发
```bash