news 2026/9/24 16:50:06

Inception v1(GoogLeNet)ONNX 图像分类模型实战指南:模型矩阵、ONNX Runtime 推理与 INT8/QDQ 量化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Inception v1(GoogLeNet)ONNX 图像分类模型实战指南:模型矩阵、ONNX Runtime 推理与 INT8/QDQ 量化
  • 人工智能
  • 大模型
  • 计算机视觉
  • NLP
  • 模型评测

【免费下载链接】models

A collection of pre-trained, state-of-the-art models in the ONNX format

项目地址:https://gitcode.com/gh_mirrors/model/models
点击查看免费下载

本篇技术指南以 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-128 MB29 MB1.13
Inception-128 MB29 MB1.1.26
Inception-128 MB29 MB1.27
Inception-128 MB29 MB1.38
Inception-128 MB29 MB1.49
Inception-127 MB25 MB1.91267.23
Inception-1-int810 MB9 MB1.91267.24
Inception-1-qdq7 MB5 MB1.121267.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.npztest_data_1.npztest_data_2.npz
  • test_data_set_0test_data_set_1test_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-int867.24准确率下降 -0.01%,性能提升 1.26x
Inception-1-qdq67.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_pathImageNet 数据集路径/path/to/imagenet
--label_pathImageNet 标签文件路径/path/to/imagenet/label
--output_model量化后模型的保存路径/path/to/save

该流程属于典型的后训练量化(PTQ):以校准数据集统计激活值分布,计算量化 scale/zero-point,最终产出 int8 或 QDQ 两种格式的量化模型,对应仓库中inception-v1-12-int8.onnxinception-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

项目地址:https://gitcode.com/gh_mirrors/model/models
点击查看免费下载

相关推荐

上一篇:hyperframes 组件解析:particle-text-dissolve 确定性粒子文字聚合与消散效果实战指南
下一篇:GoFound:Go语言打造的毫秒级全文检索引擎,让数据查询快如闪电

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/24 16:47:26

Netty 4.1 使用 Protobuf 传输数据:itstack-demo-netty 中级拓展篇二实战解析

文档教程后端 【免费下载链接】CodeGuide :books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总,旨在为大家提供一个清晰详细的学习教程,侧重点更倾向编写Java核心内容。如果本仓库能为您提供帮助,请给予支持(关注、…

作者头像 李华