🧠 核心思想:Omni-Scale Feature Learning
传统 ReID 网络可能在不同层捕捉不同尺度(如局部细节 vs 整体结构),但 OSNet 尝试在每一层同时捕捉小尺度和大尺度的信息。
OSNet-AIN-x1.0:Omni-Scale Network with Adaptive Instance Normalization(自适应实例归一化)
特点解析
1. ✅ 多尺度特征学习(OSNet 核心)
- OSBlock 模块引入多个不同感受野的卷积分支。
实现:局部细节与全局上下文同时建模。
相比传统 ResNet,有更强的判别性和更少的参数。
2. 🔄 AIN:自适应实例归一化
- Adaptive Instance Normalization 是一种可以调节风格的归一化方法,常用于领域自适应。
- 在 ReID 中,行人图像来自不同摄像头或环境,AIN 可以自适应不同图像风格,减轻 域偏移(domain shift) 的影响。
提升跨摄像头、跨数据集的识别能力。
源码导出ONNX
克隆代码仓库
克隆代码仓库的master分支。
之后按照官方指导搭建好环境。
下载预训练权重
使用Multi-source domain generalization章节osnet_ain_x1_0的MS+D+C->M权重osnet_ain_ms_d_c.pth.tar。

导出onnx
将osnet_ain_ms_d_c.pth.tar权重文件存放到项目根目录,编写并运行onnx导出脚本。
检查onnx和pytorch一致性
如果多次运行,相似度打印均为1,且最大差值均在e-5以内,则可认为onnx和pytorch的输出保持一致。
PTQ量化
生成校准数据
可以从官方数据集(Market-1501-v15.09.15)中选择数百张jpg图片用来生成校准数据。
在生成校准数据前,需要明确预处理参数,在源码deep-person-reid-master/torchreid/data/transforms.py中,可以得知训练时会将图片直接resize成模型输入尺寸,并使用imagenet数据集的标准归一化参数,即:
且由归一化参数可知,模型训练时使用的色彩通道顺序是rgb。
此时可以基于horizon_model_convert_sample提供的脚本生成校准数据,只需基于02_preprocess.sh和preprocess.py脚本做如下改动:
由于归一化计算会集成到PTQ生成模型的预处理节点中,因此校准数据无需做归一化处理。
量化编译
推荐使用如下YAML配置:
这里使用nv12作为板端模型的输入,mean_value和scale_value由归一化参数计算得到。同时,考虑到InstanceNormalization算子的量化风险较高,因此为模型中的前两个InstanceNormalization配置浮点计算精度,YAML中run_on_cpu配置的算子较多是因为InstanceNormalization会被PTQ拆分成多个算子。
可以使用以下命令编译:
编译完成后,日志打印的相似度如下(quantized.onnx对比optimized.onnx):
余弦相似度>0.99,可初步认为量化精度满足需求。
验证PTQ生成onnx的输出相似度
在编译流程结束后,可以手动验证各PTQ生成物和原始onnx的输出相似度,及时发现可能的精度问题。
*请根据不同的计算平台修改代码。
PTQ各阶段生成的onnx和原始onnx的相似度打印结果如下:
余弦相似度均>0.99,可进一步认为量化精度满足需求。
精度评测
评测结果
测试数据集:Market-1501-v15.09.15
距离度量方式:cosine
测试模型 | mAP | Rank-1 | Rank-5 | Rank-10 | |
预训练权重 | osnet_ain_ms_d_c.pth.tar | 45.8% | 73.1% | 86.5% | 90.4% |
导出的onnx | osnet_ain_x1_0.onnx | 45.8% | 73.0% | 86.6% | 90.5% |
PTQ量化onnx | reid_quantized_model.onnx | 45.5% | 73.3% | 86.3% | 90.3% |
量化精度损失 | 0.6% | -0.4% | 0.3% | 0.2% | |
距离度量方式:euclidean
测试模型 | mAP | Rank-1 | Rank-5 | Rank-10 | |
预训练权重 | osnet_ain_ms_d_c.pth.tar | 43.8% | 72.4% | 85.8% | 89.7% |
导出的onnx | osnet_ain_x1_0.onnx | 43.8% | 72.4% | 85.9% | 89.7% |
PTQ量化onnx | reid_quantized_model.onnx | 43.4% | 72.1% | 86.0% | 89.9% |
量化精度损失 | 0.8% | 0.4% | -0.1% | -0.3% | |
评测方法
预训练权重
在第一章配置好的官方运行环境中,使用代码仓库的现有方法对预训练权重做精度评测。
导出的onnx
需要基于第一章配置好的官方运行环境,额外安装onnxruntime和tqdm模块。
测试时,datamanager参数需要和configs/im_osnet_ain_x1_0_softmax_256x128_amsgrad_cosine.yaml对齐。
PTQ量化onnx
需要基于第一章配置好的官方运行环境,额外安装onnxruntime和tqdm模块,并安装horizon-nn/hmct和horizon-tc-ui。
测试时,datamanager参数需要和configs/im_osnet_ain_x1_0_softmax_256x128_amsgrad_cosine.yaml对齐,且需要把输入数据处理成yuv444类型。
性能评测
评测结果
以X5为例,该模型的单线程推理延时为51.4ms,对应FPS为19.4
Latency是指单流程推理模型所耗费的平均时间,重在表示在资源充足的情况下推理一帧的平均耗时,体现在上板运行是单核单线程统计。
FPS是指多流程同时进行模型推理平均一秒推理的帧数,重在表示充分使用资源情况下模型的吞吐,体现在上板运行为单核多线程;统计方法是同时起多个线程进行模型推理,计算平均1s推理的总帧数。
评测方法
可板端使用hrt_model_exec工具获取模型的实测性能数据,测试命令如下:

