- 人工智能
- 大模型
- 计算机视觉
- NLP
- 模型评测
【免费下载链接】models
A collection of pre-trained, state-of-the-art models in the ONNX format
本篇技术指南以 validated/vision/classification/inception_and_googlenet/inception_v1/README.md 为主体,围绕该 ONNX 模型仓库中 Inception v1(GoogLeNet 复现)的 8 个 Opset 变体与 3 种量化形态(fp32 / int8 / QDQ),讲解模型下载与校验、输入输出规范、完整预处理/后处理流程、基于 ONNX Runtime 的推理实战,以及使用 Intel® Neural Compressor 复现 INT8 量化的完整命令。读完本文,你将能够在本地使用该仓库中的 Inception v1 ONNX 模型完成 ImageNet 1000 类图像分类推理,并复现其精度与性能评测。
模型概览与下载矩阵
Inception v1 是 GoogLeNet 的复现模型(Caffe2 Inception v1 转换而来),在本仓库中以 ONNX 格式提供多个 Opset 版本,同时提供含随机测试数据的压缩包,便于开箱验证。完整模型文件位于 model/ 目录下,以下是原文档中的完整下载矩阵(链接已转换为仓库根目录相对路径):
| 模型 | ONNX 模型文件 | 含示例测试数据 | ONNX 版本 | Opset 版本 | Top-1 准确率 (%) |
|---|---|---|---|---|---|
| Inception-1 | 28 MB | 29 MB | 1.1 | 3 | — |
| Inception-1 | 28 MB | 29 MB | 1.1.2 | 6 | — |
| Inception-1 | 28 MB | 29 MB | 1.2 | 7 | — |
| Inception-1 | 28 MB | 29 MB | 1.3 | 8 | — |
| Inception-1 | 28 MB | 29 MB | 1.4 | 9 | — |
| Inception-1 | 27 MB | 25 MB | 1.9 | 12 | 67.23 |
| Inception-1-int8 | 10 MB | 9 MB | 1.9 | 12 | 67.24 |
| Inception-1-qdq | 7 MB | 5 MB | 1.12 | 12 | 67.21 |
对比结论(原文档原文语义):与 fp32 版 Inception-1 相比,int8 版 Inception-1 的 Top-1 准确率下降比仅为 -0.01%,而性能提升为 1.26x。
注意:性能表现取决于测试硬件。原文档中的性能数据采集环境为:Intel® Xeon® Platinum 8280 处理器,每个实例 1 插槽 4 核,CentOS Linux 8.3,数据 batch size 为 1。
文件精确大小与完整性校验
仓库根目录的 ONNX_HUB_MANIFEST.json 为每个模型记录了精确字节数与 SHA-256 校验值,可用于下载后完整性校验。以 Opset 12 的三个文件为例(L2935-L3075):
inception-v1-12.onnx:28,021,958 字节,SHA-256 为814b31a6316873bd03d2d808415ce1f40a7bf48ad88eab5ecc3cdc8dc6cf38ec,随附数据包inception-v1-12.tar.gz的 SHA-256 为c4198ed3415d59dacab2f6fa90c81f1a3aa9f3623b66e2d9653f16d06a5cc68c;inception-v1-12-int8.onnx:10,191,535 字节,SHA-256 为7d25f0bfa7a92e9a67d8049facd4454911ca4388a303fc61ee14664b1010c717;inception-v1-12-qdq.onnx:7,135,424 字节,SHA-256 为c6a8e07c53ea417a0001ebba885a3a623f1c3c51fac105485aca638e2f3de25d。
模型来源与训练数据
- 描述:Inception v1 是 GoogLeNet 的复现("Inception v1 is a reproduction of GoogLeNet")。
- 数据集:ILSVRC2012(ImageNet 大规模视觉识别挑战赛 2012),包含 1000 个类别,与模型输出维度
[1, 1000]对应。 - 转换链路:Caffe2 Inception v1 → ONNX Inception v1 → Quantized ONNX Inception v1。即 fp32 模型由 Caffe2 转换而来,量化模型由 ONNX fp32 模型继续量化得到。
模型输入与输出规范
原文档对输入输出给出了明确的张量定义,这也是使用任何推理框架时都必须遵守的接口契约:
输入
data_0: float[1, 3, 224, 224]- 名称
data_0,类型 float32; - 形状 NCHW:batch=1、通道数=3(RGB)、高度=224、宽度=224。
输出
prob_1: float[1, 1000]- 名称
prob_1,类型 float32; - 形状
[1, 1000],即 ImageNet 1000 类的分类置信度分数。
该接口定义与 ONNX_HUB_MANIFEST.json 中io_ports字段完全一致(inputs 为data_0,outputs 为prob_1)。此外,manifest 还记录了 fp32 与部分版本模型的extra_ports特征输出pool5/7x7_s1_2(形状[1, 1024, 1, 1],L3059-L3071),这是网络末端全局平均池化前的特征图,可满足特征提取类下游任务(如迁移学习、特征检索)的需求——这一点在原文档中未展开,属于本仓库的补充信息。
样本测试数据
模型包内附带随机生成的样本测试数据,用于验证推理链路是否打通:
test_data_0.npz、test_data_1.npz、test_data_2.npztest_data_set_0、test_data_set_1、test_data_set_2
预处理与后处理步骤
原文档为 Pre-processing / Post-processing 预留了章节标题但内容为空。本仓库 validated/vision/classification/onnxrt_inference.ipynb 提供了可供该系列分类模型直接套用的标准实现,可作为 Inception v1 的官方参考流程:
预处理(preprocess)
处理管线为:缩放到 0~1 → resize 到 256×256 → 取中心 224×224 裁剪 → 按 ImageNet 均值/方差归一化 → 转置为 NCHW → 转 float32 → 增加 batch 维度:
def preprocess(img): img = img / 255. img = cv2.resize(img, (256, 256)) h, w = img.shape[0], img.shape[1] y0 = (h - 224) // 2 x0 = (w - 224) // 2 img = img[y0: y0 + 224, x0: x0 + 224, :] img = (img - [0.485, 0.456, 0.406]) / [0.229, 0.224, 0.225] img = np.transpose(img, axes=[2, 0, 1]) img = img.astype(np.float32) img = np.expand_dims(img, axis=0) return img后处理(postprocess)
输出prob_1为原始分数向量,通过np.squeeze去掉 batch 维后按分数降序argsort,取 top-1 类别索引并结合 ImageNet 标签文件(如synset.txt,每行一个类别名)输出类别与概率:
preds = np.squeeze(preds) a = np.argsort(preds)[::-1] print('class=%s ; probability=%f' % (labels[a[0]], preds[a[0]]))基于 ONNX Runtime 的推理实战
以 Opset 12 的 fp32 模型为例,完整的推理流程如下(参考 onnxrt_inference.ipynb 的依赖说明,需要先pip install onnxruntime):
import numpy as np import cv2 import onnxruntime as ort from PIL import Image # 1. 加载模型 session = ort.InferenceSession( 'validated/vision/classification/inception_and_googlenet/inception_v1/model/inception-v1-12.onnx' ) # 2. 读取图片并转 RGB 数组 def get_image(path): with Image.open(path) as img: return np.array(img.convert('RGB')) # 3. 预处理(见上文 preprocess) img = preprocess(get_image('kitten.jpg')) # 4. 推理:以模型声明的输入名 data_0 喂入 ort_inputs = {session.get_inputs()[0].name: img} preds = session.run(None, ort_inputs)[0] # 5. 后处理:取 top-1 preds = np.squeeze(preds) a = np.argsort(preds)[::-1] print('class=%s ; probability=%f' % (labels[a[0]], preds[a[0]]))实现要点:
session.get_inputs()[0].name会返回data_0,因此不必硬编码输入名,可直接从会话对象动态获取,保证与模型接口契约一致;- 若希望使用 GPU,可按 onnxruntime 官方方式显式指定执行提供方,例如
ort.InferenceSession(model_path, providers=['CUDAExecutionProvider']); - 若使用 int8 / qdq 量化模型,接口(输入名、形状、输出名)与 fp32 版本保持一致,可直接替换模型路径运行。
量化模型:INT8 与 QDQ 两种形态
原文档说明:Inception-1-int8 与 Inception-1-qdq 均由 fp32 Inception-1 模型量化得到,量化工具为 Intel® Neural Compressor,后端为 onnxruntime。从 ONNX 量化的通用机制看,两者差异在于量化表示方式:
- int8 形态:算子本身被替换为 INT8 量化算子,权重以 int8 存储,模型体积最小(本仓库中约 10 MB);
- QDQ 形态:在计算图中插入 QuantizeLinear / DequantizeLinear 节点,保持算子为浮点实现、由运行时进行量化/反量化调度,更便于不同推理引擎的兼容优化(本仓库中约 7 MB)。
量化带来的收益在精度/体积数据上有直观体现:
| 模型 | Top-1 准确率 (%) | 与 fp32 相比 |
|---|---|---|
| Inception-1(fp32, opset 12) | 67.23 | 基准 |
| Inception-1-int8 | 67.24 | 准确率下降 -0.01%,性能提升 1.26x |
| Inception-1-qdq | 67.21 | 准确率基本持平 |
量化后准确率几乎无损(int8 甚至略高 0.01 个百分点,属于评测噪声范围),而推理性能提升 1.26 倍,同时模型体积从约 28 MB 压缩至 10 MB / 7 MB,非常适合对延迟与存储敏感的部署场景。
量化复现:环境与命令
若希望在自己的模型上复现上述量化流程,原文档给出了完整的环境要求与操作步骤。
环境依赖
- onnx: 1.9.0
- onnxruntime: 1.8.0
准备模型
原文档通过wget从外部下载 fp32 模型。在本仓库中,该文件已就位,可直接使用仓库相对路径,无需网络下载:
# 仓库内路径:模型已包含在本仓库中 validated/vision/classification/inception_and_googlenet/inception_v1/model/inception-v1-12.onnx # 如需单独取出,可解压随附压缩包: # tar -xzf validated/vision/classification/inception_and_googlenet/inception_v1/model/inception-v1-12.tar.gz模型量化
运行 Intel® Neural Compressor 的run_tuning.sh调优脚本,注意在配置文件中指定正确的数据集路径:
bash run_tuning.sh --input_model=path/to/model \ # 模型路径,格式为 *.onnx --config=inception_v1.yaml \ --data_path=/path/to/imagenet \ --label_path=/path/to/imagenet/label \ --output_model=path/to/save参数说明:
| 参数 | 含义 | 取值示例 |
|---|---|---|
--input_model | 待量化的 fp32 ONNX 模型路径 | 上述inception-v1-12.onnx的本地路径 |
--config | 量化配置文件(YAML),在其中指定数据集路径等量化参数 | inception_v1.yaml |
--data_path | ImageNet 数据集路径 | /path/to/imagenet |
--label_path | ImageNet 标签文件路径 | /path/to/imagenet/label |
--output_model | 量化后模型的保存路径 | /path/to/save |
该流程属于典型的后训练量化(PTQ):以校准数据集统计激活值分布,计算量化 scale/zero-point,最终产出 int8 或 QDQ 两种格式的量化模型,对应仓库中inception-v1-12-int8.onnx与inception-v1-12-qdq.onnx两个产物。
在仓库中的定位与进一步阅读
- 模型文件目录:validated/vision/classification/inception_and_googlenet/inception_v1/model/(包含 Opset 3/6/7/8/9/12 的 fp32 与 int8/qdq 共 16 个文件);
- 同目录姊妹模型:本仓库还收录了 googlenet 与 inception_v2 等同一系列模型,便于横向对比不同版本结构;
- 通用推理示例:validated/vision/classification/onnxrt_inference.ipynb,涵盖本文所用的读取、预处理、推理、后处理全流程代码;
- 模型元数据(SHA、体积、IO 端口、特征输出):ONNX_HUB_MANIFEST.json。
参考与许可
- 原文档引用的核心论文为《Going deeper with convolutions》(GoogLeNet 原始论文);
- 量化工具为 Intel® Neural Compressor;
- 本模型及其文档遵循 MIT 许可(见 README.md 末尾及仓库根目录 LICENSE)。
- 人工智能
- 大模型
- 计算机视觉
- NLP
- 模型评测
【免费下载链接】models
A collection of pre-trained, state-of-the-art models in the ONNX format
相关推荐
GoogLeNet(Inception v1)ONNX 模型全解析:从模型下载、图像预处理到 int8/qdq 量化推理实战
GoogLeNet(Inception v1)ONNX 模型全解析:从模型下载、图像预处理到 int8/qdq 量化推理实战 本篇技术指南以 ONNX Mode
人工智能大模型计算机视觉NLP模型评测ONNX 模型仓库实战指南:EfficientNet-Lite4 图像分类模型的推理、预处理与 INT8 量化
ONNX 模型仓库实战指南:EfficientNet Lite4 图像分类模型的推理、预处理与 INT8 量化 本篇技术指南以 ONNX 模型仓库中 Effic
人工智能大模型计算机视觉NLP模型评测CNTK GoogLeNet 系列图像分类模型实战:BN-Inception、Inception V3 与 Inception-ResNet-V1 的训练与评估
CNTK GoogLeNet 系列图像分类模型实战:BN Inception、Inception V3 与 Inception ResNet V1 的训练与评估
深度学习机器学习人工智能
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考