边缘 AI:INT8 量化与标定实操手册(电力视觉 / 传感)
调研日期:约 2026-10-25(Asia/Shanghai)
定位:站端部署前如何做 PTQ / QAT、建校准集、走各 NPU 公开工具链、设精度门禁,并与model.ver/ 签名仓 / Mender / 主动学习回流对齐。
衔接:edge-ai-board-fps-power-matrix.md、edge-ai-cn-npu-fps-matrix.md、edge-ai-model-signstore-mender-cookbook.md、edge-ai-active-learning-relabel-loop.md、edge-ai-event-schema-acceptance.md、edge-ai-d60-d90-acceptance-checklist.md、edge-ai-license-ledger-template.md、edge-ai-substation-gateway-bom.md、edge-ai-ppe-smoke-fire-model-shortlist.md。
原则:只写公开文档可核验的路径与概念;不确定标 unknown;不编造未公开厂商私有命令或 SDK 内部开关。Zoo FP16/INT8 FPS ≠ 合同保证值。
0. 一句话结论与红线
结论:电力边缘视觉默认走 PTQ INT8(校准集必须同源场景);关键类别跌幅超阈或头敏感时再上 混合精度 / QAT;量化产物以内容哈希为 model.ver 进签名仓,站内端到端复测通过后才切 current。
| 红线 ID | 禁止项 | 说明 |
|---|---|---|
| Q1 | Zoo FP16/INT8 FPS 进合同 | Model Zoo / 官网 model-only 吞吐不得作保证值;对齐 D90-11 / V2 |
| Q2 | 量化后不站内复测就上线 | 校准过 ≠ 站端过;须同验证集 v1 + 目标板 + 真实解码复测(D60-11) |
| Q3 | 校准集异源 / 过小 | 禁止只用 COCO128、随机噪声或纯室内图校准站内安监/烟火/表计;须覆盖目标光照与天气 |
| Q4 | AGPL / NC 权重进 prod 量化仓 | Ultralytics AGPL、CC BY-NC、仅学术权重禁止商用 INT8 制品入仓(台账 + D60-05 / V3 / V9) |
| Q5 | model.ver 与校准集哈希脱钩 |
权重 SHA、校准集清单 SHA、工具链版本须写入 manifest;缺一不可签名发布 |
1. PTQ vs QAT:何时用
| 路径 | 需要什么 | 适用 | 不适用 |
|---|---|---|---|
| PTQ(训练后量化) | 代表性校准集(无标签亦可估激活范围);厂商编译器 | PPE / 闯入 / 多数检测骨干;首版上线默认 | 极小目标、红外窄动态、表计指针细线等 PTQ 断崖时 |
| 混合精度 / 敏感层回浮点 | PTQ + 层白名单(如 RKNN hybrid、OpenVINO accuracy-control) | 检测头 / 小目标层 INT8 敏感 | 全图强制纯 INT8 且板端无 FP16 算力时 |
| QAT(量化感知训练) | 可训权重 + 模拟量化节点 + 有标签训练集 | PTQ/混合仍超跌幅阈;长期主模型 | 无站内复标数据、一周内要交付 POC |
选型口诀:先 PTQ → 门禁不过再混合 → 仍不过再 QAT。传感 1D(振动/局放)若跑 MCU TinyML,另见 edge-ai-mcu-tinyml-sensing-cookbook.md,本文以视觉 NPU 为主。
2. 校准集:样本量与电力站分布
2.1 规模建议(可配置,写入验收协议)
| 用途 | 建议样本量 | 备注 |
|---|---|---|
| PTQ 校准(估 scale/zp) | 200~500 张(OpenVINO NNCF 文档常举例 ~300) | 过少易断崖;过多收益递减 |
| 精度门禁验证集 v1 | ≥500 张或 ≥10 min 标注片段(对齐 Schema 验收) | 冻结并哈希;与校准集可重叠但须声明 |
| 难例补校准 | 每周主动学习回流难例的 10%~30% 并入下一轮校准池 | 见复标闭环手册 |
无标签校准只服务量化参数;召回/mAP 门禁必须有标签验证集。
2.2 电力站分布清单(校准与验证都应覆盖)
| 维度 | 必须覆盖 | 典型失败模式 |
|---|---|---|
| 光照 | 晴天顺光 / 逆光 / 阴天 / 站内灯光 | 逆光人体框漂移、帽扣漏检 |
| 夜间 | 红外补光可见光、弱光、眩光 | INT8 对暗部激活夹紧 → 人/烟漏检 |
| 天气 | 雨雾、镜头水珠、灰尘污秽 | 蒸汽/雾当烟火误报 |
| 场景 | 刀闸间隔、构架、大门、电缆沟口 | 区外行人误闯、背景纹理伪烟 |
| 任务特化 | PPE:帽/服/近电;烟火:白烟/黑烟/电焊弧;表计:指针/数显/污表;红外:伪彩/灰度 | 表计细针、红外窄温差对 INT8 极敏感 |
| 传感(若同仓) | 与视觉分轨校准;勿用视觉图校准 1D | 域错误直接废模型 |
硬规则:校准预处理(mean/std、RGB/BGR、640 letterbox)必须与线上推理 逐字节一致;Hailo 等需在 model script 声明 normalization(公开文档要求 mean/std 与训练域对齐)。
2.3 校准集制品
calib/<task>/<date>/
images/ # 或 npy;路径清单 dataset.txt / 清单 CSV
manifest_calib.json # sha256 of sorted file list + per-file sha
preprocess.yaml # 与线上一致的输入规格
manifest.json(模型仓)应引用 calib_sha256 与工具链版本字段(见 §5)。
3. 工具链对照表(公开文档级)
命令为示意骨架,以各厂商当前文档为准;大版本切换时参数可能变更(如 TensorRT 11 移除
trtexec --int8/--calib)。不确定处标 unknown。
| 平台 / 产物 | 公开路径(文档级) | 校准输入形态 | 备注 |
|---|---|---|---|
NVIDIA TensorRT → .engine |
TRT 10.x:Polygraphy/IInt8Calibrator 生成 cache,再 trtexec --onnx=… --int8 --calib=….cache --saveEngine=…(无 cache 时动态范围随机,精度不可用)。TRT 11.x:先 ModelOpt 离线量化 ONNX,再 trtexec 仅构建(--int8/--calib 已移除) |
代表性 batch;Polygraphy data-loader 脚本 | Engine 绑 JetPack/TRT/GPU;换板重建 |
| OpenVINO → IR INT8 | 现行主推 NNCF nncf.quantize / quantize_with_accuracy_control(POT 已迁移);文档示例校准子集约 300 |
nncf.Dataset + transform |
工控 NPU/CPU 须本机 benchmark_app 复测 |
RKNN-Toolkit2 → .rknn |
config → load_onnx → build(do_quantization=True, dataset='dataset.txt');精度不够用 hybrid_quantization_step1/2(改 custom_quantize_layers 回 float16) |
dataset.txt 每行一图(多输入空格分隔) |
布局/自定义头可能逼改图;Zoo 单核 FPS≠三核管线 |
| ONNX Runtime QDQ | 训练或 PTQ 插入 Q/DQ 节点 → ORT / 下游编译器消费 | 视量化工具(ORT quantization / NNCF ONNX 等) | 作中间交换;最终仍以板端编译器为准 |
| Ultralytics export | model.export(format='engine'|'rknn'|'openvino'|'hailo'|…);Hailo 路径可传 data= 校准 YAML |
默认任务小集(如 COCO128)不够电力域 | AGPL-3.0:商用闭源须 Enterprise 或改 A 轨(YOLOX/RTMDet Apache) |
算能 Sophon → .bmodel |
TPU-MLIR:model_transform → run_calibration → model_deploy --processor BM1684X|BM1688|CV186X |
校准图集(官方例程目录) | 与 bmruntime/bmrt_test 绑定 SDK 大版本 |
地平线 RDK / 旭日 → .bin |
ONNX → hb_mapper(如 makertbin,march 如 bayes-e)等公开 RDK DOC 流程 |
校准集需域内;具体 flag 以当前 DOC 为准,版本差标 unknown | X5 等 BPU INT8;HEF 类比勿混用 |
爱芯 AX → .axmodel |
ONNX → Pulsar2 → AxEngine;--target_hardware 切芯片 |
域内校准;命令细节以 AXERA 公开手册为准 | AX650/AX630C 算力口径不同 |
Hailo → .hef |
DFC:translate → optimize(calib) → compile;8 与 8L HEF 不通用 |
域内图;model script normalization | DFC 常在客户区;Pi5 PCIe×1 打折 |
| 高通 QNN | ONNX → QNN / AI Hub → HTP | unknown(客户文档为主) | 非信创首选时作备选 |
| Coral Edge TPU | 全整型 TFLite → edgetpu_compiler |
训练期全整型量化 | 新开电力项目不优先 |
统一训练侧出口:优先 ONNX(固定 shape、与线上预处理一致) → 各板编译;禁止把未量化随机 INT8 engine 当验收件。
4. 精度门禁(可配置阈值)
写入验收协议 / 配置基线;下列为系列默认建议,合同可严可松,但不得空缺。
| 门禁 | 默认阈值 | 级别 |
|---|---|---|
| 全局 mAP@0.5(或任务约定 F1)相对 FP32/FP16 基线 | 绝对跌幅 ≤ 2.0~3.0 pp(百分点,可配置) | 超标 → 否决(升 D60-11) |
| 业务召回(验证集 v1) | 相对基线跌幅 ≤ 约定 %(建议 ≤5% 相对或按合同) | 否决 |
关键类别单独否决:person / 烟火类 / 表计读数类 |
各类召回跌幅 ≤ 约定(建议严于全局);烟火误报率不升 | 否决(任一类超标即拒收) |
| 端到端 FPS / 功耗 | 对齐 FPS 矩阵与 BOM 档位自测,不抄 Zoo | 否决(D90-01) |
| 许可 | 校准数据与骨干 SPDX 绿行;无 NC/AGPL 未授权 | 否决(D60-05) |
报告最少列:基线 model.ver、INT8 model.ver、校准集 SHA、工具链版本、逐类 AP/召回、跌幅、是否混合/QAT、目标板序列号。
5. 与 model.ver / 签名仓 / Mender / 主动学习衔接
复标难例 → A 轨微调 →(可选 QAT)→ ONNX
→ 板端 PTQ/混合 → 精度门禁
→ manifest(model.ver=权重SHA + calib_sha + toolkit_ver)
→ Ed25519 签名 → 模型仓
→ 设备验签 → store/<sha> → canary → current
失败 → previous / Mender 不回滚 rootfs
| 字段 / 动作 | 要求 |
|---|---|
model.ver |
= 主权重文件 SHA-256 hex(.rknn/.engine/.bmodel/.hef/…) |
compat.runtime |
记录 tensorrt / rknn_toolkit2 / tpu-mlir / hailort 等版本 |
calib_sha256 |
校准清单哈希;变更校准集必须重新量化并新 model.ver |
license_ledger_id |
台账行号(WT-xxx) |
| Mender | 只管 rootfs/Agent/公钥;大权重走数据分区签名仓(分轨,D60-07) |
| 主动学习 | 难例闭环 ≥2 周期才谈 D90;每轮 INT8 跌幅写入 A/B 摘要 |
错签 / 门禁失败:发 MODEL_VERIFY_FAIL 或保持旧 current,禁止热切未过门禁制品。
6. 两周落地清单 + 验收门禁
第 1 周:校准与工具链打通
| 日 | 动作 | 产物 |
|---|---|---|
| D1 | 冻结验证集 v1 + 哈希;从站内抽校准 200~500 张覆盖 §2.2 | manifest_calib.json |
| D2 | 确认骨干许可(A 轨 Apache 优先);台账勾选 | 台账绿行 |
| D3–4 | ONNX 导出;目标板 PTQ(RKNN / TRT / TPU-MLIR / … 择一主路径) | 候选 INT8 权重 |
| D5 | 同验证集对比 FP 基线;记逐类跌幅 | 《精度对比表》草稿 |
| D6–7 | 超阈则 hybrid / accuracy-control;仍超则排 QAT 数据 | 混合配置或 QAT 计划 |
第 2 周:门禁、签名、站内复测
| 日 | 动作 | 产物 |
|---|---|---|
| D8 | 填 manifest + 签名;灌 canary 设备 | 签名包 |
| D9 | 真机解码 + N 路负载;FPS/功耗/温度 | 与 FPS 矩阵口径一致的自测表 |
| D10 | 夜间/逆光/雨雾抽测关键类 | 抽测记录 |
| D11 | 故意坏签名与精度不过包演练回滚 | 演练日志 |
| D12–14 | 汇总报告;勾 D60-11;主路径切 current |
签字报告 |
验收门禁(本手册)
- [ ] Q1~Q5 红线无违反
- [ ] 校准集同源且分布勾选完整
- [ ] 精度表含关键类;未超配置阈
- [ ]
model.ver= 内容哈希;校准 SHA、工具链版本在仓 - [ ] 站内端到端复测(非 Zoo)通过
7. 与系列文档衔接
| 文档 | 衔接点 |
|---|---|
edge-ai-substation-gateway-bom.md |
档位决定主编译器(RK / 算能 / Orin / …)与散热余量 |
edge-ai-board-fps-power-matrix.md / edge-ai-cn-npu-fps-matrix.md |
导出路径与 INT8 注意点;承诺值只认自测 |
edge-ai-event-schema-acceptance.md |
model.ver、INT8 跌落否决、验收协议措辞 |
edge-ai-d60-d90-acceptance-checklist.md |
D60-11 精度报告;D90-01/05/08/11 |
edge-ai-model-signstore-mender-cookbook.md |
manifest、验签、current/previous |
edge-ai-active-learning-relabel-loop.md |
难例→微调→再量化 |
edge-ai-license-ledger-template.md |
AGPL/NC 红线;校准数据来源 SPDX |
edge-ai-ppe-smoke-fire-model-shortlist.md 等 SOP |
任务类名与关键类否决清单 |
8. 参考(公开入口)
- NVIDIA TensorRT:Command-Line Programs;Polygraphy INT8 calibration 例;TRT 11.x
trtexec迁移说明(ModelOpt) - OpenVINO:Post-training Quantization / NNCF basic & accuracy-control(约 300 sample 示例)
- airockchip/rknn-toolkit2:User Guide;
examples/functions/hybrid_quant - 算能 TPU-MLIR:
run_calibration→model_deploy(sophon-demo) - Hailo Dataflow Compiler:optimize + calibration;Ultralytics Hailo export 校准说明
- Ultralytics 各 format export 文档(注意 AGPL)
具体 chip SDK 小版本命令以到货文档为准;本文不固化未核验的私有 flag。
全文完。本地路径:/workspace/research/edge-ai-int8-quant-calibration.md。未改飞书。