[ONNX从入门到入土]FP32->FP16转换

Float16 Python Conversion script

  1. 首先在Python端创建转换环境

pip install onnx onnxconverter-common
  1. 将FP32模型转换到FP16

 import onnx
 from onnxconverter_common import float16

 model = onnx.load("path/to/model.onnx")
 model_fp16 = float16.convert_float_to_float16(model)
 onnx.save(model_fp16, "path/to/model_fp16.onnx")

这里解答一个疑惑:

  • 问:直接使用torch提供的model.half()不行吗?

  • 答:其实是可以的,但是你得保证网络和参数都进行half转换.其次,对于一些集成性很强的网络结构,比如yolo中model.half()会报错(即调用pytorch的的half()方法有些层不支持).当然也许有解决办法,但使用onnx导出端提供的转换方法付出的代价更小.

Float16 Tool Arguments

如果转换后的模型不起作用或精度较差,则可能需要设置其他参数。

convert_float_to_float16(model, min_positive_val=1e-7, max_finite_val=1e4, keep_io_types=False,
                         disable_shape_infer=False, op_block_list=None, node_block_list=None)

你可能感兴趣的:(c++,python,pytorch)