Image classification
ConvNeXt-Tiny
A modern CNN that closes most of the gap to ViT accuracy on CPU.
About this model
ConvNeXt-Tiny is a 2022 redesign of the convolutional stack inspired by transformer architectures. About 28M parameters. It returns top-K class probabilities over the 1000 ImageNet-1k classes.
The build is a fresh torchvision IMAGENET1K_V1 export with normalize baked into the graph. On M1 Max, CoreML hits 19 ms warm by offloading 327 of 328 nodes to the ANE.
What you can build
- Run a higher-accuracy classifier when CPU latency budget is generous.
- Compare convolutional and transformer backbones in the same pipeline.
- Use on Apple Silicon where the ANE makes the larger model fast.
- Tag photos with sharper top-1 confidence than ResNet-50.
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.
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
159.0 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
18.6 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
8.8 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/classifier/classifier_family.hpp"
imaged::SDK::AI ai;
auto& config = ai.getOptions();
config.set("classifier.model", "weights/convnext_tiny.onnx");
config.set("classifier.labels", "weights/labels.txt");
config.set("classifier.topK", 5);
imaged::SDK::ClassifierFamily family;
family.load(config);
imaged::SDK::Image image;
image.load("photo.jpg");
auto result = family.run(&image);
auto& classes = std::get<imaged::SDK::ClassificationResult>(result).classes;