[Other General Issues] How to export PicoDet ONNX without post-process / NMS for edge deployment?
Author: imHuangkeCreated Apr 3, 2026Updated Apr 4, 2026
问题描述
我在使用 PaddleDetection release/2.9 导出 PicoDet 的 ONNX,并尝试部署到 K230(通过 nncase 转 kmodel)时,遇到了两个连续问题:
- 默认导出的 ONNX 含有后处理相关结构,不利于下游边缘部署工具链转换
- 即使我手动把 ONNX 裁成静态、单输入、pre-NMS 子图,下游工具链仍然难以接收
因此想请教:
PaddleDetection 对 PicoDet 是否有官方推荐的“无后处理 / pre-NMS / edge-friendly”导出方式?
使用环境
- PaddleDetection:
release/2.9 - 模型:
picodet_l_320_coco_lcnet - PaddlePaddle:
2.6.1CPU - Paddle2ONNX:
1.3.1 - Windows
当前导出方式
我参考的是:
deploy/EXPORT_ONNX_MODEL.md
使用命令类似:
python tools/export_model.py -c configs/picodet/picodet_l_320_coco_lcnet.yml \
-o use_gpu=false \
weights=picodet_l_320_coco_lcnet.pdparams \
--output_dir inference_model
paddle2onnx --model_dir inference_model/picodet_l_320_coco_lcnet \
--model_filename model.pdmodel \
--params_filename model.pdiparams \
--opset_version 11 \
--save_file picodet_l_320_coco_lcnet.onnxPaddle2ONNX 实际会自动升到 opset 14,提示 hard_swish 需要更高版本。
遇到的问题
1. 默认导出的 ONNX 是双输入
输入为:
imagescale_factor
这对很多边缘侧转换工具链并不友好。
2. 默认导出的 ONNX 含有后处理图
图中包含例如:
NonMaxSuppressionTopKShapeGatherSlice
这导致下游工具链在转换时很容易失败。
3. 尝试关闭后处理导出,但似乎没有完全生效
我尝试过:
python tools/export_model.py -c configs/picodet/picodet_l_320_coco_lcnet.yml \
-o use_gpu=false \
export_post_process=false \
export_nms=false \
weights=picodet_l_320_coco_lcnet.pdparams \
--output_dir inference_model但后续转 ONNX 后,图中仍然出现了 NMS 相关结构。
从源码上看:
ppdet/modeling/architectures/picodet.py
中 PicoDet 的 _forward() 确实依赖:
self.export_post_processself.export_nms
但当前流程里我还没有找到一种稳定方式,能得到真正只保留原始 head 输出的 ONNX。
我手动裁出来的 pre-NMS 子图
我最终通过手工裁图得到了一个 pre-NMS ONNX,输入输出如下:
- input:
image[1, 3, 320, 320] - outputs:
Div.1[1, 2125, 4]Concat.9[1, 80, 2125]
而且确认图中已经没有:
NonMaxSuppressionTopK
这说明理论上 PicoDet 是可以只保留 pre-NMS 输出的。
想确认的问题
PaddleDetection release/2.9是否有官方支持的方式,直接导出 PicoDet pre-NMS ONNX?export_post_process=false/export_nms=false对PicoDet的 ONNX 导出是否应该生效?- 如果当前版本不支持,官方是否推荐修改哪一层(architecture / head / export script)来导出更适合边缘部署的 ONNX?
期望
我希望能得到下面其中一种明确建议:
- 官方推荐的 PicoDet pre-NMS 导出命令
- 官方认可的源码修改点
- 明确说明当前 release/2.9 暂不支持这类导出
如果需要,我也可以补充:
- 生成的 ONNX 文件
- 手工裁图方式
- 下游工具链报错信息
Source: PaddlePaddle/PaddleDetection