最近在做pointpillars模型部署,从openpcd训练好的模型想转onnx,发现很困难,因为pytorch是动态机制,转换需要读取模型+参数+输入才能完成输出,自己搞了一下老有报错,很困难,调研了一些文章:
PointPillars 工程复现_pointpillars复现-优快云博客
OpenPCDet模型导出ONNX - 半夜打老虎 - 博客园
这些文章中把model拆解成多个模块,然后单独加载参数和输入,最后输出多个onnx
分析原因,openpcd把模型的各个模块拆解然后单独封装,靠外部yaml模板控制和管理,这样用着比较方便。但是下面onnx的转换要求好像是加载一个完整的类,所以需要根据各个模块单独拆解!
#openpcd各个模块单独封装,然后靠字典把他们串在一起
def build_detector(model_cfg, num_class, dataset):
model = __all__[model_cfg.NAME](
model_cfg=model_cfg, num_class=num_class, dataset=dataset
)
return model
#而onnx 转换功能上要求加载一个完整的模型
if not args.no_c