[1] Mingxing Tan and Quoc V. Le. EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks. ICML 2019. Arxiv link: https://arxiv.org/abs/1905.11946.
Updates
-
[Aug 2019] Released EfficientNet-EdgeTPU models: README and blog post.
-
[Jul 2019] Released new EfficientNet checkpoints trained with AutoAugment (better accuracy than paper).
-
[May 2019] Released EfficientNets code and weights: blog post
EfficientNets are a family of image classification models, which achieve state-of-the-art accuracy, yet being an order-of-magnitude smaller and faster than previous models.
We develop EfficientNets based on AutoML and Compound Scaling. In particular, we first use AutoML MNAS Mobile framework to develop a mobile-size baseline network, named as EfficientNet-B0; Then, we use the compound scaling method to scale up this baseline to obtain EfficientNet-B1 to B7.
EfficientNets achieve state-of-the-art accuracy on ImageNet with an order of magnitude better efficiency:
-
In high-accuracy regime, our EfficientNet-B7 achieves state-of-the-art 84.4% top-1 / 97.1% top-5 accuracy on ImageNet with 66M parameters and 37B FLOPS, being 8.4x smaller and 6.1x faster on CPU inference than previous best Gpipe.
-
In middle-accuracy regime, our EfficientNet-B1 is 7.6x smaller and 5.7x faster on CPU inference than ResNet-152, with similar ImageNet accuracy.
-
Compared with the widely used ResNet-50, our EfficientNet-B4 improves the top-1 accuracy from 76.3% of ResNet-50 to 82.6% (+6.3%), under similar FLOPS constraint.
We have provided a list of EfficientNet checkpoints for EfficientNet checkpoints: both w/ and w/o AutoAugment.
- With standard ResNet preprocessing, we achieved similar accuracy as the original ICML paper.
- WIth AutoAugment preprocessing, we achieved higher accuracy than the original ICML paper.
B0 | B1 | B2 | B3 | B4 | B5 | B6 | B7 | |
---|---|---|---|---|---|---|---|---|
Standard preprocessing | 76.8% (ckpt) | 78.8% (ckpt) | 79.8% (ckpt) | 81.0% (ckpt) | 82.6% (ckpt) | 83.2% (ckpt) | ||
AutoAugment | 77.3% (ckpt) | 79.2% (ckpt) | 80.3% (ckpt) | 81.7% (ckpt) | 83.0% (ckpt) | 83.7% (ckpt) | 84.2% (ckpt) | 84.5% (ckpt) |
**To train EfficientNets with AutoAugment (code), simply add option "--autoaugment_name=v0". If you use these checkpoints, you can cite this paper.
A quick way to use these checkpoints is to run:
$ export MODEL=efficientnet-b0
$ wget https://storage.googleapis.com/cloud-tpu-checkpoints/efficientnet/ckpts/${MODEL}.tar.gz
$ tar xf ${MODEL}.tar.gz
$ wget https://upload.wikimedia.org/wikipedia/commons/f/fe/Giant_Panda_in_Beijing_Zoo_1.JPG -O panda.jpg
$ wget https://storage.googleapis.com/cloud-tpu-checkpoints/efficientnet/eval_data/labels_map.txt
$ python eval_ckpt_main.py --model_name=$MODEL --ckpt_dir=$MODEL --example_img=panda.jpg --labels_map_file=labels_map.txt
Please refer to the following colab for more instructions on how to obtain and use those checkpoints.
eval_ckpt_example.ipynb
: A colab example to load EfficientNet pretrained checkpoints files and use the restored model to classify images.
import efficientnet_builder
features, endpoints = efficientnet_builder.build_model_base(images, 'efficientnet-b0')
- Use
features
for classification finetuning. - Use
endpoints['reduction_i']
for detection/segmentation, as the last intermediate feature with reduction leveli
. For example, if input image has resolution 224x224, then:endpoints['reduction_1']
has resolution 112x112endpoints['reduction_2']
has resolution 56x56endpoints['reduction_3']
has resolution 28x28endpoints['reduction_4']
has resolution 14x14endpoints['reduction_5']
has resolution 7x7
To train this model on Cloud TPU, you will need:
- A GCE VM instance with an associated Cloud TPU resource
- A GCS bucket to store your training checkpoints (the "model directory")
- Install TensorFlow version >= 1.13 for both GCE VM and Cloud.
Then train the model:
$ export PYTHONPATH="$PYTHONPATH:/path/to/models"
$ python main.py --tpu=TPU_NAME --data_dir=DATA_DIR --model_dir=MODEL_DIR
# TPU_NAME is the name of the TPU node, the same name that appears when you run gcloud compute tpus list, or ctpu ls.
# MODEL_DIR is a GCS location (a URL starting with gs:// where both the GCE VM and the associated Cloud TPU have write access
# DATA_DIR is a GCS location to which both the GCE VM and associated Cloud TPU have read access.
For more instructions, please refer to our tutorial: https://cloud.google.com/tpu/docs/tutorials/efficientnet