端侧 AI 部署三大崩溃类型 × 根因 × 解法——ONNX 算子不支持、RKNN 转换失败、量化精度暴跌、RT-DETR 崩溃、模型不准。每条都带人工评注和时效标记,不是 AI 生成的泛泛之谈。
1️⃣ ONNX/RKNN 转换失败 → 算子不支持 / 动态 shape / 自定义算子
2️⃣ 量化精度暴跌 → 预处理不一致 / 对称量化不适合低 bit / 校准数据太少
3️⃣ 模型不准 → 数据问题(90%) / 训练问题 / 部署问题(极少)
| 分类 | 崩溃症状 | 解法 | 避坑 |
|---|---|---|---|
| 🔧 数据不够怎么办 | 标注数据太少(不到100张)怎么训练 P0 | 100万+开发者用的标注+增强平台,自动做翻转/旋转/色彩增强把100张扩到500张;免费版够小项目用 | ImageNet预训练权重偏向自然图像,工业缺陷/医学图像域差异大;这种情况用COCO预训练的YOLO比ImageNet预训练的ResNet迁移效果好 |
| 🔧 数据不够怎么办 | 模型量化后精度暴跌怎么救 P0 | PTQ(训练后量化)精度损失大时上QAT:在训练中模拟量化误差,模型学会适应INT8;QAT可挽回PTQ损失的80%以上精度 | 最隐蔽的坑:校准用白天数据但推理在夜间,量化后夜间检测mAP从70%暴跌到30%;校准数据必须与真实场景分布一致 |
| 🔧 数据不够怎么办 | 模型在真实场景效果差(训练好用实测不行) P0 | 训练时加随机光照/阴影/模糊/色彩抖动增强,让模型见过更多变化;YOLO训练加mosaic增强可提升5-10%泛化mAP | 训练用网图/实验室数据,部署后真实场景光照/角度/背景完全不同,mAP从95%暴跌到40%;必做:部署前用真实场景数据做验证集 |
| ⚠️ 模型转换踩坑专题 | ONNX转RKNN/TensorRT时算子不支持怎么办 P0 | RKNN支持自定义算子(custom_op)用CPU实现不支持的NPU算子;但CPU算子会拖慢整体推理速度,能避免就避免 | YOLO/PicoDet导出ONNX含NMS后处理算子,RKNN不支持NonMaxSuppression直接报错;解决方案:导出时去掉NMS后处理,在板端C++/Python手动做NMS |
| ⚠️ 模型转换踩坑专题 | 模型量化转换失败/量化后精度为0 P0 | dynamic_axes导出ONNX后转RKNN报错"Failed to convert dynamic_axes";端侧部署固定input_size_list,别用动态轴 | FP16精度正常但INT8量化后mAP直接归零,用户称"折磨了我两礼拜";根因是最后一层输出范围太大导致量化崩塌,需调整激活值分布或分层量化 |
| ⚠️ 模型转换踩坑专题 | RKNN Toolkit/Runtime版本不匹配导致板端崩溃 P0 | — | PC端Toolkit v2.x.x转换的模型不能在板端Runtime v1.x.x上运行;必须查清板端Runtime版本再选对应Toolkit版本 |
| ⚠️ 模型转换踩坑专题 | 板端推理结果和PC端不一致怎么排查 P0 | 取一张测试图,在PC端ONNX和板端RKNN分别推理,对比中间层输出(如backbone特征图)找到分歧点;从输入到输出逐层比,哪层开始不同就是问题所在 | RKNN转换时mean/std必须和训练时完全一致,差一个小数点结果全错;用Netron查看ONNX输入节点确认预处理参数 |
| ⚠️ 模型转换踩坑专题 | YOLO letterbox预处理和NMS后处理怎么不踩坑 P0 | 导出时设nms=True让TensorRT内部处理所有后处理,比手动实现NMS层更干净;YOLO11导出需修改exporter.py的output_names避免多输出问题 | 直接拉伸会变形(人体被压扁),训练分布是"比例正确的人"推理变成"压扁的人"导致mAP暴跌;必须用Letterbox:等比缩放→补灰边(114)→记录scale |
| 🔧 数据不够怎么办 | 没有标注数据怎么办 P1 | 先用COCO预训练YOLO跑一遍你的数据,导出标注结果,人工只修正错误框;80%的框是对的,人工只需改20% | — |
| 🔧 数据不够怎么办 | 缺陷/稀有样本太少怎么合成数据 P1 | 用Stable Diffusion+ControlNet生成带缺陷的工业图像,可控制缺陷类型/位置/光照;但生成图像与真实缺陷分布有差距,需人工筛选 | 合成数据训练的模型在真实场景可能效果差(域偏移);合成数据占训练集不超过30%,必须混入真实数据一起训练 |
| 🔧 数据不够怎么办 | 模型太大怎么压缩(剪枝/知识蒸馏) P1 | 通道剪枝+L1范数,剪枝率30%,微调10 epoch,模型体积缩小至2.5MB(INT8后),推理速度提升约25%,mAP仅损失0.2%;这是性价比最高的压缩方式 | 一次剪枝30%+会导致准确率崩盘;正确做法是每次剪5-10%→微调→再剪5-10%→微调,迭代进行直到目标压缩率 |
| ⚠️ 模型转换踩坑专题 | 端侧部署怎么防止模型被提取/逆向 P2 | 利用卷积线性性质将kernel分解为critical/common/kernel,注入decoy kernels并permute channel/kernel order;让逆向者拿到的是混淆后权重无 | 即使模型二进制加密,物理攻击者可通过缓存时序(Flush+Reload)和功耗分析侧信道提取权重;现有防御无法在物理拷贝后仍保持保护 |
来自 问题分诊台 · Vertical Hub — 按症状找方案的路由层