Appearance embedding
OSNet-AIN x1.0 (MSMT17)
Embed a pedestrian crop into a 512-dim vector for tracking across frames.
About this model
TorchReID OSNet with Instance Adaptive Normalization, trained on MSMT17. Input is a 256x128 pedestrian crop; output is a 512-dim L2-normalized appearance embedding. Cosine similarity between two embeddings scores whether they are the same person.
About 2.2M parameters, 1 MB graph plus 8.6 MB external weights. CPU warm runs land at 20 ms per crop, leaving budget for the detector and tracker in a live pipeline.
What you can build
- Maintain track IDs across frames in a multi-camera retail counter.
- Re-identify a person who left and re-entered the camera view.
- Score whether two detections in different frames match by appearance.
- Drive a DeepSort-style tracker that survives bbox drift and brief occlusion.
Variants & downloads
Choose the build for your appModel files are being prepared.
Explore the model’s examples, source links, and integration notes while download variants are added.
Example inference
Performance
Results depend on the device, runtime, and test conditions. Each measurement keeps its own context.
M1 Max, macOS 15, ONNX Runtime 1.17
See original catalog hardware notes · CPU
19.9 ms
Warm inference
Reference result from the existing catalog; conversion variant and measurement date were not recorded.
M1 Max, macOS 15, ONNX Runtime 1.17
See original catalog hardware notes · CoreML
19.9 ms
Warm inference
Reference result from the existing catalog; conversion variant and measurement date were not recorded.
RTX 2060, Ubuntu 24.04, ONNX Runtime 1.24.3
See original catalog hardware notes · CUDA
5.1 ms
Warm inference
Reference result from the existing catalog; conversion variant and measurement date were not recorded.
Integration examples
Vision SDK integration
cpp
#include "imaged/sdk.hpp"
#include "imaged/families/reid/reid_family.hpp"
imaged::SDK::AI ai;
auto& config = ai.getOptions();
config.set("reid.model", "weights/osnet_ain_x1_0_msmt17.onnx");
config.set("reid.inputHeight", 256);
config.set("reid.inputWidth", 128);
imaged::SDK::ReIDFamily family;
family.load(config);
imaged::SDK::Image personCrop;
personCrop.load("crop.jpg");
auto result = std::get<imaged::SDK::EmbeddingResult>(family.run({&personCrop}));
auto& features = result.features; // 512-dim unit vector