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

文章介绍了如何在Python环境中利用ONNX和onnx-converter-common库将FP32模型转换为FP16,以减少计算资源需求。提到直接使用PyTorch的model.half()可能存在局限性,特别是在处理复杂网络结构时。此外,还提到了在转换过程中可能遇到的问题及转换参数调整,如min_positive_val和max_finite_val,以确保模型功能和精度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值