适配Python版本与依赖包推荐:实现.pt转.tflite文件转换
Python 3.11.6兼容的.pt转.tflite工具链推荐
一、推荐的Python版本与依赖包版本
选择Python 3.11.6,该版本对TensorFlow 2.14+、PyTorch 2.1+均有稳定支持,适配性强。以下是经过验证的依赖包版本(避免冲突,tensorflow与tensorflow-intel二选一即可):
pip install numpy==1.24.3 pip install tensorflow==2.15.0 # 若为英特尔CPU,可替换为tensorflow-intel==2.15.0 pip install torch==2.1.0 pip install torchvision==0.16.0 pip install onnx==1.14.0 pip install onnxruntime==1.15.1
二、.pt转.tflite的可靠流程
.pt是PyTorch模型文件,需通过中间格式转换为TFLite,以下是两种稳定可行的方案:
方案1:PyTorch → ONNX → TFLite
- 导出PyTorch模型为ONNX格式(注意输入尺寸需与实际推理一致):
import torch # 替换为你的模型加载逻辑 model = torch.load("your_model.pt", map_location="cpu") model.eval() # 构造与模型输入匹配的虚拟张量,示例为[批量数, 通道数, 高, 宽] dummy_input = torch.randn(1, 3, 224, 224) # 指定opset_version=14以兼容更多PyTorch算子 torch.onnx.export(model, dummy_input, "model.onnx", opset_version=14)
- 将ONNX模型转换为TFLite:
import tensorflow as tf converter = tf.lite.TFLiteConverter.from_onnx("model.onnx") # 开启TF算子支持,解决部分算子无法被TFLite内置算子覆盖的问题 converter.target_spec.supported_ops = [ tf.lite.OpsSet.TFLITE_BUILTINS, tf.lite.OpsSet.SELECT_TF_OPS ] # 若需量化可添加converter.optimizations = [tf.lite.Optimize.DEFAULT] tflite_model = converter.convert() with open("model.tflite", "wb") as f: f.write(tflite_model)
方案2:PyTorch → TensorFlow SavedModel → TFLite
若ONNX转换存在算子兼容问题,可先转TensorFlow SavedModel再转TFLite:
- 安装辅助工具:
pip install onnx-tf==1.10.0
- 转换ONNX到SavedModel:
onnx-tf convert -i model.onnx -o saved_model_dir
- SavedModel转TFLite:
import tensorflow as tf converter = tf.lite.TFLiteConverter.from_saved_model("saved_model_dir") converter.target_spec.supported_ops = [ tf.lite.OpsSet.TFLITE_BUILTINS, tf.lite.OpsSet.SELECT_TF_OPS ] tflite_model = converter.convert() with open("model.tflite", "wb") as f: f.write(tflite_model)
三、之前尝试失败的可能原因
- 同时安装
tensorflow与tensorflow-intel,引发依赖冲突,需仅保留一个; - ONNX导出时opset版本过低(你使用的是opset13),无法兼容部分PyTorch算子;
- 转换TFLite时未开启
SELECT_TF_OPS,导致部分算子无法被TFLite支持。
内容的提问来源于stack exchange,提问作者abc777
相关产品推荐
相关产品推荐

