在深度学习项目中,你是否也曾面对一堆后缀各异的模型文件感到困惑?
.h5
、.pt
、.pth
、.onnx
、.tflite
、.pb
……这些看似简单的文件扩展名,背后却藏着不同的框架、用途和部署场景。用错了格式,轻则无法加载,重则部署失败、性能暴跌。
别慌!本文将带你系统梳理12种主流模型文件格式,讲清它们的来龙去脉、适用场景,并提供模型转换路线图与代码示例。无论你是刚入门的新手,还是正在部署模型的工程师,都能快速找到答案。
一、为什么会有这么多模型格式?
深度学习生态百花齐放,不同框架(如 TensorFlow、PyTorch、Keras)各自发展,导致模型保存方式五花八门。每种格式都有其“出生背景”和“使命”:
- 有的为训练设计(便于断点续训)
- 有的为部署优化(轻量、跨平台)
- 有的专为跨框架服务(如 ONNX)
理解这一点,你就迈出了第一步。
二、12种常见模型格式全解析
我们按“框架归属 → 文件用途 → 部署场景”三个维度,逐一拆解。
模型文件格式
├── TensorFlow/Keras
│ ├── .h5 (HDF5)
│ ├── .pb (SavedModel)
│ └── .ckpt (检查点)
├── PyTorch
│ ├── .pt / .pth (PyTorch 模型)
│ └── .bin (PyTorch 权重)
├── 通用/中间格式
│ ├── .onnx (ONNX 格式)
│ ├── .json + .bin (TensorFlow.js)
│ └── .safetensors (安全张量)
└── 移动端/边缘设备
├── .tflite (TensorFlow Lite)
├── .ncnn (NCNN 框架)
└── .mnn (MNN 框架)
1. .h5
(HDF5 格式)
- 来源:Keras / TensorFlow 早期默认格式
- 特点:支持保存模型结构 + 权重 + 配置,适合快速实验
- 缺点:依赖 Python,跨平台能力差
- 适用场景:Keras 模型训练、本地验证
✅ 推荐使用:Keras 用户做原型开发
❌ 不推荐用于生产部署
2. .pt
/ .pth
(PyTorch 模型)
- 来源:PyTorch
- 本质:Python 的
pickle
序列化文件 - 优点:保存灵活(模型、优化器、epoch等)
- 风险:反序列化有安全风险,不跨语言
✅ 训练阶段必备
❌ 不能直接用于 C++ 或移动端
3. .onnx
(Open Neural Network Exchange)
- 定位:跨框架中间表示(IR)
- 优势:PyTorch → ONNX → TensorFlow / TensorRT / ONNX Runtime
- 支持平台广:Windows、Linux、Web、移动端
- 局限:部分自定义算子可能不支持
✅ 多框架协作、推理加速首选
✅ 尤其适合需要部署到非 Python 环境的场景
4. .tflite
(TensorFlow Lite)
- 专为移动和嵌入式设备设计
- 特点:量化支持好、体积小、推理快
- 运行环境:Android、iOS、微控制器(如 ESP32)
✅ 手机端部署必选
✅ 支持 INT8、FP16 量化,显著降低资源消耗
5. .pb
(Protocol Buffer,冻结图)
- TensorFlow 经典格式,表示“冻结权重”的计算图
- 曾用于 TensorFlow 1.x 的生产部署
- 现已被
SavedModel
取代
⚠️ 已逐渐淘汰,建议新项目使用 SavedModel
6. .ckpt
(Checkpoint 文件)
- 非完整模型文件,仅保存某一轮训练的权重
- 通常配合代码中的模型结构一起使用
- 多用于训练中断恢复
❗ 注意:单独一个 .ckpt
文件无法独立加载模型
7. SavedModel(无后缀目录)
- TensorFlow 官方推荐格式(TF 2.x)
- 是一个包含
variables/
、saved_model.pb
的文件夹 - 支持签名、版本管理、跨语言调用(via TensorFlow Serving)
✅ 生产环境标准格式
✅ 支持 REST/gRPC 接口部署
8. .bin
(二进制权重文件)
- 常见于 Hugging Face Transformers 或 C++ 推理引擎
- 有时是 ONNX 或 PyTorch 导出的权重片段
- 需结合配置文件(如 config.json)使用
🔄 多见于 NLP 模型分发
9. .safetensors
(安全张量格式)
- Hugging Face 推出的替代
.bin
的新格式 - 不执行反序列化代码,避免 pickle 安全漏洞
- 加载更快、更安全
✅ 推荐用于模型共享与部署
🔐 安全性优于 .bin
10. .json + .bin
(TensorFlow.js)
- 用于浏览器端运行模型
.json
描述结构,.bin
存储权重- 可通过
tfjs-converter
从 TF/Keras 转换而来
✅ Web 前端 AI 应用首选
11. .ncnn
(腾讯开源推理框架)
- 专为移动端优化的格式
- 支持 Android/iOS,C++ 接口友好
- 从 ONNX 或 Caffe 转换而来
✅ 国内 App 内嵌 AI 功能常用
12. .mnn
(阿里开源模型压缩与推理引擎)
- 轻量级、高性能,适用于手机、IoT 设备
- 支持从 ONNX、TensorFlow、PyTorch 转换
✅ 高并发移动端推理场景优选
三、什么时候该用哪种格式?一张图说清楚
四、模型转换实战:代码示例
1. PyTorch → ONNX
import torch
import torch.onnx
# 假设 model 是已训练好的模型
model.eval()
dummy_input = torch.randn(1, 3, 224, 224)
torch.onnx.export(
model,
dummy_input,
"model.onnx",
export_params=True,
opset_version=13,
do_constant_folding=True,
input_names=['input'],
output_names=['output'],
dynamic_axes={
'input': {0: 'batch_size'},
'output': {0: 'batch_size'}
}
)
2. Keras → TensorFlow Lite
import tensorflow as tf
# 加载 Keras 模型
model = tf.keras.models.load_model('model.h5')
# 转换为 TFLite
converter = tf.lite.TFLiteConverter.from_keras_model(model)
# 可选:量化
# converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_model = converter.convert()
# 保存
with open('model.tflite', 'wb') as f:
f.write(tflite_model)
3. ONNX → TensorFlow.js(命令行)
# 先安装转换工具
pip install onnx-tf
npm install -g @tensorflow/tfjs-converter
# ONNX → TensorFlow SavedModel
python -m onnx_tf.cli convert -i model.onnx -o saved_model/
# SavedModel → tfjs
tfjs-converter --input_format=tf_saved_model saved_model/ tfjs_model/
五、模型格式选择建议表
使用场景 |
推荐格式 |
理由 |
Keras 快速实验 |
|
简单直接,支持完整模型保存 |
PyTorch 训练 |
|
保存模型和训练状态 |
跨平台推理 |
|
支持多后端,生态丰富 |
手机 App 集成 |
|
轻量、高效、支持量化 |
Web 浏览器运行 |
|
tf.js 原生支持 |
安全模型分发 |
|
防止反序列化攻击 |
生产服务部署 |
SavedModel |
支持版本、签名、Serving |
六、总结:别再被后缀名吓住
模型文件格式不是玄学,而是工具链的一环。关键在于:
- 训练阶段:用框架原生格式(
.h5
,.pt
)快速迭代; - 部署前:统一转换为中间格式(如
.onnx
); - 目标平台决定最终格式:服务器用 ONNX Runtime,手机用 TFLite/MNN,网页用 tf.js。
记住一句话:
“训练自由,部署规范”
掌握格式转换,你就掌握了从实验室到生产线的钥匙。
如果你觉得这篇文章有帮助,欢迎点赞、转发,让更多人看懂AI背后的逻辑