5.2. FP32 模型生成

编译器

功能

使用指导

bmnetc

编译Caffe模型

BMNETC使用

bmnett

编译TensorFlow模型

BMNETT使用

bmnetm

编译MXNet模型

BMNETM使用

bmnetp

编译Pytorch模型

BMNETP使用

bmnetd

编译Darknet模型

BMNETD使用

bmneto

编译ONNX模型

BMNETO使用

bmpaddle

编译PaddlePaddle模型

BMPADDLE使用

bmnetu

编译算丰自定义UFW(Unified Framework)模型

BMNETU使用

在docker环境中执行 source envsetup.sh 后会自动安装以上转换工具,并在当前终端设置相关的环境变量。

注意

对于有些模型,比如paddle-ocr-detection或其他算子中有很多累加或除法的模型,如果在转换过程中打开比对选项,会由于误差累计导致比对结果超出允许的误差阈值范围,从而中断模型转换;还有一些需要排序操作的模型,虽然误差不大,但仍会影响排序的顺序,从而导致比对出错、模型转换中断。对于这些情况,可以在转换过程中关闭cmp参数,不进行数据比对,待模型转换完成后再到业务层面验证转换后模型的精度。

注解

PyTorch模型转换注意事项

  1. 什么是JIT(torch.jit):JIT(Just-In-Time)是一组编译工具,用于弥合PyTorch研究与生产之间的差距。它允许创建可以在不依赖Python解释器的情况下运行的模型,并且可以更积极地进行优化。

  2. JIT与BMNETP的关系:BMNETP只接受PyTorch的JIT模型。

  3. 如何得到JIT模型:在已有PyTorch的Python模型(基类为torch.nn.Module)的情况下,通过torch.jit.trace得到 torch.jit.trace(python_model,torch.rand(input_shape)).save(‘jit_model’)

  4. 为什么不能使用torch.jit.script得到JIT模型:BMNETP暂时不支持带有控制流操作(如if语句或循环)、inplace的操作(如copy_函数等)的JIT模型,但torch.jit.script可以产生这类模型,而torch.jit.trace却不可以,仅跟踪和记录张量上的操作,不会记录任何控制流操作。

  5. 为什么不能是GPU模型:BMNETP的编译过程不支持。

  6. 如何将GPU模型转成CPU模型? 在加载PyTorch的Python模型时,使用map_location参数 torch.load(python_model, map_location = ‘cpu’)

Darknet模型转换注意事项

cfg 文件中batch/subvision 要大于转换脚本中设置的输入shape的batch size。