YoloVision 预处理与后处理指南
YoloVision 故意不把某一个 YOLO 导出脚本的图像预处理写死为全系列默认。不同 family、opset、export 参数和任务类型会影响输入归一化、letterbox、输出 layout、objectness、NMS 和多输出张量解释。本文给出推荐的 metadata 写法和托管后处理边界。
预处理输入
applications/YoloVision 当前支持两类明确输入:
| 参数 | 输入内容 | 适用场景 |
|---|---|---|
--input <path> |
raw byte tensor | 快速验证 byte 输入路径 |
--input-data <path> |
预处理后的 float32 tensor | 推荐的真实模型样例输入 |
--input-data 应与 --input-shape 元素数量完全一致。例如 1x3x640x640 需要 1*3*640*640 个 float32。
dotnet run --project .\applications\YoloVision -- `
--model .\models\yolo.onnx `
--labels .\models\labels.txt `
--input-data .\models\input-fp32.bin `
--input-shape 1x3x640x640 `
--family v8 `
--task det
图片 decode、resize、letterbox、BGR/RGB、归一化、padding 和 HWC/NCHW 转换建议由 owner 的预处理脚本完成,并把脚本 hash、输入图 hash 和输出 tensor hash 写进 asset manifest。
输出 layout
常见 detection 输出包括:
| Layout | 示例 shape | 说明 |
|---|---|---|
| channel-first | [1,84,8400] |
通道维包含 box 和 class score |
| box-first | [1,8400,84] |
每个候选框一行 |
| end-to-end | [1,N,6] 或多输出 |
NMS 已在图内或 plugin 内完成 |
如果 --layout auto 无法无歧义判断,应显式指定。--has-objectness auto 只在 class count 可推导时使用;否则应根据模型导出说明写明 objectness 规则。
托管后处理
YoloVision 的托管后处理覆盖:
- confidence filtering;
- class-aware / class-agnostic NMS;
- segmentation mask compose;
- pose keypoint 解释;
- OBB angle 解释;
- semantic argmax 边界;
- end-to-end 输出校验。
这些能力证明的是样例层 decode/helper 存在,不自动证明真实模型输出质量。真实模型必须用 sample-run-evidence 记录输出摘要、人工或自动比对结果、日志和 hash。
Metadata 示例
{
"family": "v8",
"task": "det",
"inputShape": "1x3x640x640",
"outputLayout": "auto",
"classCount": 80,
"hasObjectness": "auto",
"nmsMode": "class-aware",
"confidenceThreshold": 0.25,
"iouThreshold": 0.45,
"preprocessBoundary": "owner-provided",
"proofClassification": "template-only"
}
边界说明
- 预处理脚本和 tensor hash 是 real-model-runtime 的必要材料。
- 后处理 helper 通过单元测试或样例运行证明代码路径,但不替代真实模型质量评估。
- build-only、parse-only、sidecar-only 都不是 inference proof。
- sample evidence 不是 public package proof,也不是 post-publish proof。
- Boundary keywords: not public package proof, not post-publish proof, not package push, not release close approval.