SqueezeNet models perform image classification - they take images as input and classify the major object in the image into a set of pre-defined classes. They are trained on ImageNet dataset which contains images from 1000 classes. SqueezeNet models are highly efficient in terms of size and speed while providing good accuracies. This makes them ideal for platforms with strict constraints on size.
SqueezeNet is a small CNN which achieves AlexNet level accuracy on ImageNet with 50x fewer parameters. SqueezeNet requires less communication across servers during distributed training, less bandwidth to export a new model from the cloud to an autonomous car and more feasible to deploy on FPGAs and other hardware with limited memory.
Squeezenet 1.0 gives AlexNet level of accuracy with 50X fewer parameters. Run SqueezeNet 1.0 in browser - implemented by ONNX.js. SqueezeNet 1.1 has 2.4x less computation and slightly fewer parameters than SqueezeNet 1.0, without sacrificing accuracy.
Model | Download | Download (with sample test data) | ONNX version | Opset version | Top-1 accuracy (%) | Top-5 accuracy (%) |
---|---|---|---|---|---|---|
SqueezeNet 1.1 | 9 MB | 6 MB | 1.2.1 | 7 | 56.34 | 79.12 |
SqueezeNet 1.0 | 5 MB | 6 MB | 1.1 | 3 | ||
SqueezeNet 1.0 | 5 MB | 6 MB | 1.1.2 | 6 | ||
SqueezeNet 1.0 | 5 MB | 11 MB | 1.2 | 7 | ||
SqueezeNet 1.0 | 5 MB | 11 MB | 1.3 | 8 | ||
SqueezeNet 1.0 | 5 MB | 11 MB | 1.4 | 9 | ||
SqueezeNet 1.0 | 5 MB | 5 MB | 1.9 | 12 | 56.85 | 79.87 |
SqueezeNet 1.0-int8 | 2 MB | 2 MB | 1.9 | 12 | 56.48 | 79.76 |
Compared with the fp32 SqueezeNet 1.0, int8 SqueezeNet 1.0's Top-1 accuracy drop ratio is 0.65%, Top-5 accuracy drop ratio is 0.14% and performance improvement is 1.31x.
Note
The performance depends on the test hardware. Performance data here is collected with Intel® Xeon® Platinum 8280 Processor, 1s 4c per instance, CentOS Linux 8.3, data batch size is 1.
We used MXNet as framework with gluon APIs to perform inference for SqueezeNet 1.1. View the notebook imagenet_inference to understand how to use above models for doing inference. Make sure to specify the appropriate model name in the notebook.
SqueezeNet 1.0 is converted from Caffe2 -> ONNX.
All pre-trained models expect input images normalized in the same way, i.e. mini-batches of 3-channel RGB images of shape (N x 3 x H x W), where N is the batch size, and H and W are expected to be at least 224. The inference was done using a jpeg image.
float[1, 3, 224, 224]
The images have to be loaded in to a range of [0, 1] and then normalized using mean = [0.485, 0.456, 0.406] and std = [0.229, 0.224, 0.225]. The transformation should preferrably happen at preprocessing. Check imagenet_preprocess.py for code.
The model outputs image scores for each of the 1000 classes of ImageNet.
softmaxout_1: float[1, 1000, 1, 1]
The post-processing involves calculating the softmax probablility scores for each class and sorting them to report the most probable classes. Check imagenet_postprocess.py for code.
To do quick inference with the model, check out Model Server.
Dataset used for train and validation: ImageNet (ILSVRC2012). Check imagenet_prep for guidelines on preparing the dataset.
The accuracies obtained by the model on the validation set are mentioned above. The accuracies have been calculated on center cropped images with a maximum deviation of 1.2% (top-5 accuracy) from the paper.
We used MXNet as framework with gluon APIs to perform training. View the training notebook to understand details for parameters and network for each of the above variants of SqueezeNet.
We used MXNet as framework with gluon APIs to perform validation. Use the notebook imagenet_validation to verify the accuracy of the model on the validation set. Make sure to specify the appropriate model name in the notebook.
SqueezeNet 1.0-int8 is obtained by quantizing fp32 SqueezeNet 1.0 model. We use Intel® Neural Compressor with onnxruntime backend to perform quantization. View the instructions to understand how to use Intel® Neural Compressor for quantization.
onnx: 1.9.0 onnxruntime: 1.8.0
wget https://github.com/onnx/models/raw/main/vision/classification/squeezenet/model/squeezenet1.0-12.onnx
Make sure to specify the appropriate dataset path in the configuration file.
bash run_tuning.sh --input_model=path/to/model \ # model path as *.onnx
--config=squeezenet.yaml \
--data_path=/path/to/imagenet \
--label_path=/path/to/imagenet/label \
--output_model=path/to/save
-
SqueezeNet1.1 SqueezeNet1.1 presented in the Official SqueezeNet repo is an improved version of SqueezeNet1.0 from the paper SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size
- abhinavs95 (Amazon AI)
- ankkhedia (Amazon AI)
- mengniwang95 (Intel)
- airMeng (Intel)
- ftian1 (Intel)
- hshen14 (Intel)
Apache 2.0