summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--python-efficientnet-pytorch.spec876
-rw-r--r--sources1
3 files changed, 878 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..8053496 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/efficientnet_pytorch-0.7.1.tar.gz
diff --git a/python-efficientnet-pytorch.spec b/python-efficientnet-pytorch.spec
new file mode 100644
index 0000000..6c60f3e
--- /dev/null
+++ b/python-efficientnet-pytorch.spec
@@ -0,0 +1,876 @@
+%global _empty_manifest_terminate_build 0
+Name: python-efficientnet-pytorch
+Version: 0.7.1
+Release: 1
+Summary: EfficientNet implemented in PyTorch.
+License: Apache
+URL: https://github.com/lukemelas/EfficientNet-PyTorch
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/2e/a0/dd40b50aebf0028054b6b35062948da01123d7be38d08b6b1e5435df6363/efficientnet_pytorch-0.7.1.tar.gz
+BuildArch: noarch
+
+
+%description
+# EfficientNet PyTorch
+
+### Quickstart
+
+Install with `pip install efficientnet_pytorch` and load a pretrained EfficientNet with:
+```python
+from efficientnet_pytorch import EfficientNet
+model = EfficientNet.from_pretrained('efficientnet-b0')
+```
+
+### Updates
+
+#### Update (April 2, 2021)
+
+The [EfficientNetV2 paper](https://arxiv.org/abs/2104.00298) has been released! I am working on implementing it as you read this :)
+
+About EfficientNetV2:
+> EfficientNetV2 is a new family of convolutional networks that have faster training speed and better parameter efficiency than previous models. To develop this family of models, we use a combination of training-aware neural architecture search and scaling, to jointly optimize training speed and parameter efficiency. The models were searched from the search space enriched with new ops such as Fused-MBConv.
+
+Here is a comparison:
+> <img src="https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnetv2-image.png" width="100%" />
+
+
+#### Update (Aug 25, 2020)
+
+This update adds:
+ * A new `include_top` (default: `True`) option ([#208](https://github.com/lukemelas/EfficientNet-PyTorch/pull/208))
+ * Continuous testing with [sotabench](https://sotabench.com/)
+ * Code quality improvements and fixes ([#215](https://github.com/lukemelas/EfficientNet-PyTorch/pull/215) [#223](https://github.com/lukemelas/EfficientNet-PyTorch/pull/223))
+
+#### Update (May 14, 2020)
+
+This update adds comprehensive comments and documentation (thanks to @workingcoder).
+
+#### Update (January 23, 2020)
+
+This update adds a new category of pre-trained model based on adversarial training, called _advprop_. It is important to note that the preprocessing required for the advprop pretrained models is slightly different from normal ImageNet preprocessing. As a result, by default, advprop models are not used. To load a model with advprop, use:
+```python
+model = EfficientNet.from_pretrained("efficientnet-b0", advprop=True)
+```
+There is also a new, large `efficientnet-b8` pretrained model that is only available in advprop form. When using these models, replace ImageNet preprocessing code as follows:
+```python
+if advprop: # for models using advprop pretrained weights
+ normalize = transforms.Lambda(lambda img: img * 2.0 - 1.0)
+else:
+ normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406],
+ std=[0.229, 0.224, 0.225])
+```
+This update also addresses multiple other issues ([#115](https://github.com/lukemelas/EfficientNet-PyTorch/issues/115), [#128](https://github.com/lukemelas/EfficientNet-PyTorch/issues/128)).
+
+#### Update (October 15, 2019)
+
+This update allows you to choose whether to use a memory-efficient Swish activation. The memory-efficient version is chosen by default, but it cannot be used when exporting using PyTorch JIT. For this purpose, we have also included a standard (export-friendly) swish activation function. To switch to the export-friendly version, simply call `model.set_swish(memory_efficient=False)` after loading your desired model. This update addresses issues [#88](https://github.com/lukemelas/EfficientNet-PyTorch/pull/88) and [#89](https://github.com/lukemelas/EfficientNet-PyTorch/pull/89).
+
+#### Update (October 12, 2019)
+
+This update makes the Swish activation function more memory-efficient. It also addresses pull requests [#72](https://github.com/lukemelas/EfficientNet-PyTorch/pull/72), [#73](https://github.com/lukemelas/EfficientNet-PyTorch/pull/73), [#85](https://github.com/lukemelas/EfficientNet-PyTorch/pull/85), and [#86](https://github.com/lukemelas/EfficientNet-PyTorch/pull/86). Thanks to the authors of all the pull requests!
+
+#### Update (July 31, 2019)
+
+_Upgrade the pip package with_ `pip install --upgrade efficientnet-pytorch`
+
+The B6 and B7 models are now available. Additionally, _all_ pretrained models have been updated to use AutoAugment preprocessing, which translates to better performance across the board. Usage is the same as before:
+```python
+from efficientnet_pytorch import EfficientNet
+model = EfficientNet.from_pretrained('efficientnet-b7')
+```
+
+#### Update (June 29, 2019)
+
+This update adds easy model exporting ([#20](https://github.com/lukemelas/EfficientNet-PyTorch/issues/20)) and feature extraction ([#38](https://github.com/lukemelas/EfficientNet-PyTorch/issues/38)).
+
+ * [Example: Export to ONNX](#example-export)
+ * [Example: Extract features](#example-feature-extraction)
+ * Also: fixed a CUDA/CPU bug ([#32](https://github.com/lukemelas/EfficientNet-PyTorch/issues/32))
+
+It is also now incredibly simple to load a pretrained model with a new number of classes for transfer learning:
+```python
+model = EfficientNet.from_pretrained('efficientnet-b1', num_classes=23)
+```
+
+
+#### Update (June 23, 2019)
+
+The B4 and B5 models are now available. Their usage is identical to the other models:
+```python
+from efficientnet_pytorch import EfficientNet
+model = EfficientNet.from_pretrained('efficientnet-b4')
+```
+
+### Overview
+This repository contains an op-for-op PyTorch reimplementation of [EfficientNet](https://arxiv.org/abs/1905.11946), along with pre-trained models and examples.
+
+The goal of this implementation is to be simple, highly extensible, and easy to integrate into your own projects. This implementation is a work in progress -- new features are currently being implemented.
+
+At the moment, you can easily:
+ * Load pretrained EfficientNet models
+ * Use EfficientNet models for classification or feature extraction
+ * Evaluate EfficientNet models on ImageNet or your own images
+
+_Upcoming features_: In the next few days, you will be able to:
+ * Train new models from scratch on ImageNet with a simple command
+ * Quickly finetune an EfficientNet on your own dataset
+ * Export EfficientNet models for production
+
+### Table of contents
+1. [About EfficientNet](#about-efficientnet)
+2. [About EfficientNet-PyTorch](#about-efficientnet-pytorch)
+3. [Installation](#installation)
+4. [Usage](#usage)
+ * [Load pretrained models](#loading-pretrained-models)
+ * [Example: Classify](#example-classification)
+ * [Example: Extract features](#example-feature-extraction)
+ * [Example: Export to ONNX](#example-export)
+6. [Contributing](#contributing)
+
+### About EfficientNet
+
+If you're new to EfficientNets, here is an explanation straight from the official TensorFlow implementation:
+
+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 Mobile framework](https://ai.googleblog.com/2018/08/mnasnet-towards-automating-design-of.html) 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.
+
+<table border="0">
+<tr>
+ <td>
+ <img src="https://raw.githubusercontent.com/tensorflow/tpu/master/models/official/efficientnet/g3doc/params.png" width="100%" />
+ </td>
+ <td>
+ <img src="https://raw.githubusercontent.com/tensorflow/tpu/master/models/official/efficientnet/g3doc/flops.png", width="90%" />
+ </td>
+</tr>
+</table>
+
+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](https://arxiv.org/abs/1811.06965).
+
+* In middle-accuracy regime, our EfficientNet-B1 is 7.6x smaller and 5.7x faster on CPU inference than [ResNet-152](https://arxiv.org/abs/1512.03385), with similar ImageNet accuracy.
+
+* Compared with the widely used [ResNet-50](https://arxiv.org/abs/1512.03385), our EfficientNet-B4 improves the top-1 accuracy from 76.3% of ResNet-50 to 82.6% (+6.3%), under similar FLOPS constraint.
+
+### About EfficientNet PyTorch
+
+EfficientNet PyTorch is a PyTorch re-implementation of EfficientNet. It is consistent with the [original TensorFlow implementation](https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet), such that it is easy to load weights from a TensorFlow checkpoint. At the same time, we aim to make our PyTorch implementation as simple, flexible, and extensible as possible.
+
+If you have any feature requests or questions, feel free to leave them as GitHub issues!
+
+### Installation
+
+Install via pip:
+```bash
+pip install efficientnet_pytorch
+```
+
+Or install from source:
+```bash
+git clone https://github.com/lukemelas/EfficientNet-PyTorch
+cd EfficientNet-Pytorch
+pip install -e .
+```
+
+### Usage
+
+#### Loading pretrained models
+
+Load an EfficientNet:
+```python
+from efficientnet_pytorch import EfficientNet
+model = EfficientNet.from_name('efficientnet-b0')
+```
+
+Load a pretrained EfficientNet:
+```python
+from efficientnet_pytorch import EfficientNet
+model = EfficientNet.from_pretrained('efficientnet-b0')
+```
+
+Details about the models are below:
+
+| *Name* |*# Params*|*Top-1 Acc.*|*Pretrained?*|
+|:-----------------:|:--------:|:----------:|:-----------:|
+| `efficientnet-b0` | 5.3M | 76.3 | ✓ |
+| `efficientnet-b1` | 7.8M | 78.8 | ✓ |
+| `efficientnet-b2` | 9.2M | 79.8 | ✓ |
+| `efficientnet-b3` | 12M | 81.1 | ✓ |
+| `efficientnet-b4` | 19M | 82.6 | ✓ |
+| `efficientnet-b5` | 30M | 83.3 | ✓ |
+| `efficientnet-b6` | 43M | 84.0 | ✓ |
+| `efficientnet-b7` | 66M | 84.4 | ✓ |
+
+
+#### Example: Classification
+
+Below is a simple, complete example. It may also be found as a jupyter notebook in `examples/simple` or as a [Colab Notebook](https://colab.research.google.com/drive/1Jw28xZ1NJq4Cja4jLe6tJ6_F5lCzElb4).
+
+We assume that in your current directory, there is a `img.jpg` file and a `labels_map.txt` file (ImageNet class names). These are both included in `examples/simple`.
+
+```python
+import json
+from PIL import Image
+import torch
+from torchvision import transforms
+
+from efficientnet_pytorch import EfficientNet
+model = EfficientNet.from_pretrained('efficientnet-b0')
+
+# Preprocess image
+tfms = transforms.Compose([transforms.Resize(224), transforms.ToTensor(),
+ transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]),])
+img = tfms(Image.open('img.jpg')).unsqueeze(0)
+print(img.shape) # torch.Size([1, 3, 224, 224])
+
+# Load ImageNet class names
+labels_map = json.load(open('labels_map.txt'))
+labels_map = [labels_map[str(i)] for i in range(1000)]
+
+# Classify
+model.eval()
+with torch.no_grad():
+ outputs = model(img)
+
+# Print predictions
+print('-----')
+for idx in torch.topk(outputs, k=5).indices.squeeze(0).tolist():
+ prob = torch.softmax(outputs, dim=1)[0, idx].item()
+ print('{label:<75} ({p:.2f}%)'.format(label=labels_map[idx], p=prob*100))
+```
+
+#### Example: Feature Extraction
+
+You can easily extract features with `model.extract_features`:
+```python
+from efficientnet_pytorch import EfficientNet
+model = EfficientNet.from_pretrained('efficientnet-b0')
+
+# ... image preprocessing as in the classification example ...
+print(img.shape) # torch.Size([1, 3, 224, 224])
+
+features = model.extract_features(img)
+print(features.shape) # torch.Size([1, 1280, 7, 7])
+```
+
+#### Example: Export to ONNX
+
+Exporting to ONNX for deploying to production is now simple:
+```python
+import torch
+from efficientnet_pytorch import EfficientNet
+
+model = EfficientNet.from_pretrained('efficientnet-b1')
+dummy_input = torch.randn(10, 3, 240, 240)
+
+model.set_swish(memory_efficient=False)
+torch.onnx.export(model, dummy_input, "test-b1.onnx", verbose=True)
+```
+
+[Here](https://colab.research.google.com/drive/1rOAEXeXHaA8uo3aG2YcFDHItlRJMV0VP) is a Colab example.
+
+
+#### ImageNet
+
+See `examples/imagenet` for details about evaluating on ImageNet.
+
+### Contributing
+
+If you find a bug, create a GitHub issue, or even better, submit a pull request. Similarly, if you have questions, simply post them as GitHub issues.
+
+I look forward to seeing what the community does with these models!
+
+%package -n python3-efficientnet-pytorch
+Summary: EfficientNet implemented in PyTorch.
+Provides: python-efficientnet-pytorch
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-efficientnet-pytorch
+# EfficientNet PyTorch
+
+### Quickstart
+
+Install with `pip install efficientnet_pytorch` and load a pretrained EfficientNet with:
+```python
+from efficientnet_pytorch import EfficientNet
+model = EfficientNet.from_pretrained('efficientnet-b0')
+```
+
+### Updates
+
+#### Update (April 2, 2021)
+
+The [EfficientNetV2 paper](https://arxiv.org/abs/2104.00298) has been released! I am working on implementing it as you read this :)
+
+About EfficientNetV2:
+> EfficientNetV2 is a new family of convolutional networks that have faster training speed and better parameter efficiency than previous models. To develop this family of models, we use a combination of training-aware neural architecture search and scaling, to jointly optimize training speed and parameter efficiency. The models were searched from the search space enriched with new ops such as Fused-MBConv.
+
+Here is a comparison:
+> <img src="https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnetv2-image.png" width="100%" />
+
+
+#### Update (Aug 25, 2020)
+
+This update adds:
+ * A new `include_top` (default: `True`) option ([#208](https://github.com/lukemelas/EfficientNet-PyTorch/pull/208))
+ * Continuous testing with [sotabench](https://sotabench.com/)
+ * Code quality improvements and fixes ([#215](https://github.com/lukemelas/EfficientNet-PyTorch/pull/215) [#223](https://github.com/lukemelas/EfficientNet-PyTorch/pull/223))
+
+#### Update (May 14, 2020)
+
+This update adds comprehensive comments and documentation (thanks to @workingcoder).
+
+#### Update (January 23, 2020)
+
+This update adds a new category of pre-trained model based on adversarial training, called _advprop_. It is important to note that the preprocessing required for the advprop pretrained models is slightly different from normal ImageNet preprocessing. As a result, by default, advprop models are not used. To load a model with advprop, use:
+```python
+model = EfficientNet.from_pretrained("efficientnet-b0", advprop=True)
+```
+There is also a new, large `efficientnet-b8` pretrained model that is only available in advprop form. When using these models, replace ImageNet preprocessing code as follows:
+```python
+if advprop: # for models using advprop pretrained weights
+ normalize = transforms.Lambda(lambda img: img * 2.0 - 1.0)
+else:
+ normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406],
+ std=[0.229, 0.224, 0.225])
+```
+This update also addresses multiple other issues ([#115](https://github.com/lukemelas/EfficientNet-PyTorch/issues/115), [#128](https://github.com/lukemelas/EfficientNet-PyTorch/issues/128)).
+
+#### Update (October 15, 2019)
+
+This update allows you to choose whether to use a memory-efficient Swish activation. The memory-efficient version is chosen by default, but it cannot be used when exporting using PyTorch JIT. For this purpose, we have also included a standard (export-friendly) swish activation function. To switch to the export-friendly version, simply call `model.set_swish(memory_efficient=False)` after loading your desired model. This update addresses issues [#88](https://github.com/lukemelas/EfficientNet-PyTorch/pull/88) and [#89](https://github.com/lukemelas/EfficientNet-PyTorch/pull/89).
+
+#### Update (October 12, 2019)
+
+This update makes the Swish activation function more memory-efficient. It also addresses pull requests [#72](https://github.com/lukemelas/EfficientNet-PyTorch/pull/72), [#73](https://github.com/lukemelas/EfficientNet-PyTorch/pull/73), [#85](https://github.com/lukemelas/EfficientNet-PyTorch/pull/85), and [#86](https://github.com/lukemelas/EfficientNet-PyTorch/pull/86). Thanks to the authors of all the pull requests!
+
+#### Update (July 31, 2019)
+
+_Upgrade the pip package with_ `pip install --upgrade efficientnet-pytorch`
+
+The B6 and B7 models are now available. Additionally, _all_ pretrained models have been updated to use AutoAugment preprocessing, which translates to better performance across the board. Usage is the same as before:
+```python
+from efficientnet_pytorch import EfficientNet
+model = EfficientNet.from_pretrained('efficientnet-b7')
+```
+
+#### Update (June 29, 2019)
+
+This update adds easy model exporting ([#20](https://github.com/lukemelas/EfficientNet-PyTorch/issues/20)) and feature extraction ([#38](https://github.com/lukemelas/EfficientNet-PyTorch/issues/38)).
+
+ * [Example: Export to ONNX](#example-export)
+ * [Example: Extract features](#example-feature-extraction)
+ * Also: fixed a CUDA/CPU bug ([#32](https://github.com/lukemelas/EfficientNet-PyTorch/issues/32))
+
+It is also now incredibly simple to load a pretrained model with a new number of classes for transfer learning:
+```python
+model = EfficientNet.from_pretrained('efficientnet-b1', num_classes=23)
+```
+
+
+#### Update (June 23, 2019)
+
+The B4 and B5 models are now available. Their usage is identical to the other models:
+```python
+from efficientnet_pytorch import EfficientNet
+model = EfficientNet.from_pretrained('efficientnet-b4')
+```
+
+### Overview
+This repository contains an op-for-op PyTorch reimplementation of [EfficientNet](https://arxiv.org/abs/1905.11946), along with pre-trained models and examples.
+
+The goal of this implementation is to be simple, highly extensible, and easy to integrate into your own projects. This implementation is a work in progress -- new features are currently being implemented.
+
+At the moment, you can easily:
+ * Load pretrained EfficientNet models
+ * Use EfficientNet models for classification or feature extraction
+ * Evaluate EfficientNet models on ImageNet or your own images
+
+_Upcoming features_: In the next few days, you will be able to:
+ * Train new models from scratch on ImageNet with a simple command
+ * Quickly finetune an EfficientNet on your own dataset
+ * Export EfficientNet models for production
+
+### Table of contents
+1. [About EfficientNet](#about-efficientnet)
+2. [About EfficientNet-PyTorch](#about-efficientnet-pytorch)
+3. [Installation](#installation)
+4. [Usage](#usage)
+ * [Load pretrained models](#loading-pretrained-models)
+ * [Example: Classify](#example-classification)
+ * [Example: Extract features](#example-feature-extraction)
+ * [Example: Export to ONNX](#example-export)
+6. [Contributing](#contributing)
+
+### About EfficientNet
+
+If you're new to EfficientNets, here is an explanation straight from the official TensorFlow implementation:
+
+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 Mobile framework](https://ai.googleblog.com/2018/08/mnasnet-towards-automating-design-of.html) 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.
+
+<table border="0">
+<tr>
+ <td>
+ <img src="https://raw.githubusercontent.com/tensorflow/tpu/master/models/official/efficientnet/g3doc/params.png" width="100%" />
+ </td>
+ <td>
+ <img src="https://raw.githubusercontent.com/tensorflow/tpu/master/models/official/efficientnet/g3doc/flops.png", width="90%" />
+ </td>
+</tr>
+</table>
+
+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](https://arxiv.org/abs/1811.06965).
+
+* In middle-accuracy regime, our EfficientNet-B1 is 7.6x smaller and 5.7x faster on CPU inference than [ResNet-152](https://arxiv.org/abs/1512.03385), with similar ImageNet accuracy.
+
+* Compared with the widely used [ResNet-50](https://arxiv.org/abs/1512.03385), our EfficientNet-B4 improves the top-1 accuracy from 76.3% of ResNet-50 to 82.6% (+6.3%), under similar FLOPS constraint.
+
+### About EfficientNet PyTorch
+
+EfficientNet PyTorch is a PyTorch re-implementation of EfficientNet. It is consistent with the [original TensorFlow implementation](https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet), such that it is easy to load weights from a TensorFlow checkpoint. At the same time, we aim to make our PyTorch implementation as simple, flexible, and extensible as possible.
+
+If you have any feature requests or questions, feel free to leave them as GitHub issues!
+
+### Installation
+
+Install via pip:
+```bash
+pip install efficientnet_pytorch
+```
+
+Or install from source:
+```bash
+git clone https://github.com/lukemelas/EfficientNet-PyTorch
+cd EfficientNet-Pytorch
+pip install -e .
+```
+
+### Usage
+
+#### Loading pretrained models
+
+Load an EfficientNet:
+```python
+from efficientnet_pytorch import EfficientNet
+model = EfficientNet.from_name('efficientnet-b0')
+```
+
+Load a pretrained EfficientNet:
+```python
+from efficientnet_pytorch import EfficientNet
+model = EfficientNet.from_pretrained('efficientnet-b0')
+```
+
+Details about the models are below:
+
+| *Name* |*# Params*|*Top-1 Acc.*|*Pretrained?*|
+|:-----------------:|:--------:|:----------:|:-----------:|
+| `efficientnet-b0` | 5.3M | 76.3 | ✓ |
+| `efficientnet-b1` | 7.8M | 78.8 | ✓ |
+| `efficientnet-b2` | 9.2M | 79.8 | ✓ |
+| `efficientnet-b3` | 12M | 81.1 | ✓ |
+| `efficientnet-b4` | 19M | 82.6 | ✓ |
+| `efficientnet-b5` | 30M | 83.3 | ✓ |
+| `efficientnet-b6` | 43M | 84.0 | ✓ |
+| `efficientnet-b7` | 66M | 84.4 | ✓ |
+
+
+#### Example: Classification
+
+Below is a simple, complete example. It may also be found as a jupyter notebook in `examples/simple` or as a [Colab Notebook](https://colab.research.google.com/drive/1Jw28xZ1NJq4Cja4jLe6tJ6_F5lCzElb4).
+
+We assume that in your current directory, there is a `img.jpg` file and a `labels_map.txt` file (ImageNet class names). These are both included in `examples/simple`.
+
+```python
+import json
+from PIL import Image
+import torch
+from torchvision import transforms
+
+from efficientnet_pytorch import EfficientNet
+model = EfficientNet.from_pretrained('efficientnet-b0')
+
+# Preprocess image
+tfms = transforms.Compose([transforms.Resize(224), transforms.ToTensor(),
+ transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]),])
+img = tfms(Image.open('img.jpg')).unsqueeze(0)
+print(img.shape) # torch.Size([1, 3, 224, 224])
+
+# Load ImageNet class names
+labels_map = json.load(open('labels_map.txt'))
+labels_map = [labels_map[str(i)] for i in range(1000)]
+
+# Classify
+model.eval()
+with torch.no_grad():
+ outputs = model(img)
+
+# Print predictions
+print('-----')
+for idx in torch.topk(outputs, k=5).indices.squeeze(0).tolist():
+ prob = torch.softmax(outputs, dim=1)[0, idx].item()
+ print('{label:<75} ({p:.2f}%)'.format(label=labels_map[idx], p=prob*100))
+```
+
+#### Example: Feature Extraction
+
+You can easily extract features with `model.extract_features`:
+```python
+from efficientnet_pytorch import EfficientNet
+model = EfficientNet.from_pretrained('efficientnet-b0')
+
+# ... image preprocessing as in the classification example ...
+print(img.shape) # torch.Size([1, 3, 224, 224])
+
+features = model.extract_features(img)
+print(features.shape) # torch.Size([1, 1280, 7, 7])
+```
+
+#### Example: Export to ONNX
+
+Exporting to ONNX for deploying to production is now simple:
+```python
+import torch
+from efficientnet_pytorch import EfficientNet
+
+model = EfficientNet.from_pretrained('efficientnet-b1')
+dummy_input = torch.randn(10, 3, 240, 240)
+
+model.set_swish(memory_efficient=False)
+torch.onnx.export(model, dummy_input, "test-b1.onnx", verbose=True)
+```
+
+[Here](https://colab.research.google.com/drive/1rOAEXeXHaA8uo3aG2YcFDHItlRJMV0VP) is a Colab example.
+
+
+#### ImageNet
+
+See `examples/imagenet` for details about evaluating on ImageNet.
+
+### Contributing
+
+If you find a bug, create a GitHub issue, or even better, submit a pull request. Similarly, if you have questions, simply post them as GitHub issues.
+
+I look forward to seeing what the community does with these models!
+
+%package help
+Summary: Development documents and examples for efficientnet-pytorch
+Provides: python3-efficientnet-pytorch-doc
+%description help
+# EfficientNet PyTorch
+
+### Quickstart
+
+Install with `pip install efficientnet_pytorch` and load a pretrained EfficientNet with:
+```python
+from efficientnet_pytorch import EfficientNet
+model = EfficientNet.from_pretrained('efficientnet-b0')
+```
+
+### Updates
+
+#### Update (April 2, 2021)
+
+The [EfficientNetV2 paper](https://arxiv.org/abs/2104.00298) has been released! I am working on implementing it as you read this :)
+
+About EfficientNetV2:
+> EfficientNetV2 is a new family of convolutional networks that have faster training speed and better parameter efficiency than previous models. To develop this family of models, we use a combination of training-aware neural architecture search and scaling, to jointly optimize training speed and parameter efficiency. The models were searched from the search space enriched with new ops such as Fused-MBConv.
+
+Here is a comparison:
+> <img src="https://github.com/lukemelas/EfficientNet-PyTorch/releases/download/1.0/efficientnetv2-image.png" width="100%" />
+
+
+#### Update (Aug 25, 2020)
+
+This update adds:
+ * A new `include_top` (default: `True`) option ([#208](https://github.com/lukemelas/EfficientNet-PyTorch/pull/208))
+ * Continuous testing with [sotabench](https://sotabench.com/)
+ * Code quality improvements and fixes ([#215](https://github.com/lukemelas/EfficientNet-PyTorch/pull/215) [#223](https://github.com/lukemelas/EfficientNet-PyTorch/pull/223))
+
+#### Update (May 14, 2020)
+
+This update adds comprehensive comments and documentation (thanks to @workingcoder).
+
+#### Update (January 23, 2020)
+
+This update adds a new category of pre-trained model based on adversarial training, called _advprop_. It is important to note that the preprocessing required for the advprop pretrained models is slightly different from normal ImageNet preprocessing. As a result, by default, advprop models are not used. To load a model with advprop, use:
+```python
+model = EfficientNet.from_pretrained("efficientnet-b0", advprop=True)
+```
+There is also a new, large `efficientnet-b8` pretrained model that is only available in advprop form. When using these models, replace ImageNet preprocessing code as follows:
+```python
+if advprop: # for models using advprop pretrained weights
+ normalize = transforms.Lambda(lambda img: img * 2.0 - 1.0)
+else:
+ normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406],
+ std=[0.229, 0.224, 0.225])
+```
+This update also addresses multiple other issues ([#115](https://github.com/lukemelas/EfficientNet-PyTorch/issues/115), [#128](https://github.com/lukemelas/EfficientNet-PyTorch/issues/128)).
+
+#### Update (October 15, 2019)
+
+This update allows you to choose whether to use a memory-efficient Swish activation. The memory-efficient version is chosen by default, but it cannot be used when exporting using PyTorch JIT. For this purpose, we have also included a standard (export-friendly) swish activation function. To switch to the export-friendly version, simply call `model.set_swish(memory_efficient=False)` after loading your desired model. This update addresses issues [#88](https://github.com/lukemelas/EfficientNet-PyTorch/pull/88) and [#89](https://github.com/lukemelas/EfficientNet-PyTorch/pull/89).
+
+#### Update (October 12, 2019)
+
+This update makes the Swish activation function more memory-efficient. It also addresses pull requests [#72](https://github.com/lukemelas/EfficientNet-PyTorch/pull/72), [#73](https://github.com/lukemelas/EfficientNet-PyTorch/pull/73), [#85](https://github.com/lukemelas/EfficientNet-PyTorch/pull/85), and [#86](https://github.com/lukemelas/EfficientNet-PyTorch/pull/86). Thanks to the authors of all the pull requests!
+
+#### Update (July 31, 2019)
+
+_Upgrade the pip package with_ `pip install --upgrade efficientnet-pytorch`
+
+The B6 and B7 models are now available. Additionally, _all_ pretrained models have been updated to use AutoAugment preprocessing, which translates to better performance across the board. Usage is the same as before:
+```python
+from efficientnet_pytorch import EfficientNet
+model = EfficientNet.from_pretrained('efficientnet-b7')
+```
+
+#### Update (June 29, 2019)
+
+This update adds easy model exporting ([#20](https://github.com/lukemelas/EfficientNet-PyTorch/issues/20)) and feature extraction ([#38](https://github.com/lukemelas/EfficientNet-PyTorch/issues/38)).
+
+ * [Example: Export to ONNX](#example-export)
+ * [Example: Extract features](#example-feature-extraction)
+ * Also: fixed a CUDA/CPU bug ([#32](https://github.com/lukemelas/EfficientNet-PyTorch/issues/32))
+
+It is also now incredibly simple to load a pretrained model with a new number of classes for transfer learning:
+```python
+model = EfficientNet.from_pretrained('efficientnet-b1', num_classes=23)
+```
+
+
+#### Update (June 23, 2019)
+
+The B4 and B5 models are now available. Their usage is identical to the other models:
+```python
+from efficientnet_pytorch import EfficientNet
+model = EfficientNet.from_pretrained('efficientnet-b4')
+```
+
+### Overview
+This repository contains an op-for-op PyTorch reimplementation of [EfficientNet](https://arxiv.org/abs/1905.11946), along with pre-trained models and examples.
+
+The goal of this implementation is to be simple, highly extensible, and easy to integrate into your own projects. This implementation is a work in progress -- new features are currently being implemented.
+
+At the moment, you can easily:
+ * Load pretrained EfficientNet models
+ * Use EfficientNet models for classification or feature extraction
+ * Evaluate EfficientNet models on ImageNet or your own images
+
+_Upcoming features_: In the next few days, you will be able to:
+ * Train new models from scratch on ImageNet with a simple command
+ * Quickly finetune an EfficientNet on your own dataset
+ * Export EfficientNet models for production
+
+### Table of contents
+1. [About EfficientNet](#about-efficientnet)
+2. [About EfficientNet-PyTorch](#about-efficientnet-pytorch)
+3. [Installation](#installation)
+4. [Usage](#usage)
+ * [Load pretrained models](#loading-pretrained-models)
+ * [Example: Classify](#example-classification)
+ * [Example: Extract features](#example-feature-extraction)
+ * [Example: Export to ONNX](#example-export)
+6. [Contributing](#contributing)
+
+### About EfficientNet
+
+If you're new to EfficientNets, here is an explanation straight from the official TensorFlow implementation:
+
+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 Mobile framework](https://ai.googleblog.com/2018/08/mnasnet-towards-automating-design-of.html) 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.
+
+<table border="0">
+<tr>
+ <td>
+ <img src="https://raw.githubusercontent.com/tensorflow/tpu/master/models/official/efficientnet/g3doc/params.png" width="100%" />
+ </td>
+ <td>
+ <img src="https://raw.githubusercontent.com/tensorflow/tpu/master/models/official/efficientnet/g3doc/flops.png", width="90%" />
+ </td>
+</tr>
+</table>
+
+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](https://arxiv.org/abs/1811.06965).
+
+* In middle-accuracy regime, our EfficientNet-B1 is 7.6x smaller and 5.7x faster on CPU inference than [ResNet-152](https://arxiv.org/abs/1512.03385), with similar ImageNet accuracy.
+
+* Compared with the widely used [ResNet-50](https://arxiv.org/abs/1512.03385), our EfficientNet-B4 improves the top-1 accuracy from 76.3% of ResNet-50 to 82.6% (+6.3%), under similar FLOPS constraint.
+
+### About EfficientNet PyTorch
+
+EfficientNet PyTorch is a PyTorch re-implementation of EfficientNet. It is consistent with the [original TensorFlow implementation](https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet), such that it is easy to load weights from a TensorFlow checkpoint. At the same time, we aim to make our PyTorch implementation as simple, flexible, and extensible as possible.
+
+If you have any feature requests or questions, feel free to leave them as GitHub issues!
+
+### Installation
+
+Install via pip:
+```bash
+pip install efficientnet_pytorch
+```
+
+Or install from source:
+```bash
+git clone https://github.com/lukemelas/EfficientNet-PyTorch
+cd EfficientNet-Pytorch
+pip install -e .
+```
+
+### Usage
+
+#### Loading pretrained models
+
+Load an EfficientNet:
+```python
+from efficientnet_pytorch import EfficientNet
+model = EfficientNet.from_name('efficientnet-b0')
+```
+
+Load a pretrained EfficientNet:
+```python
+from efficientnet_pytorch import EfficientNet
+model = EfficientNet.from_pretrained('efficientnet-b0')
+```
+
+Details about the models are below:
+
+| *Name* |*# Params*|*Top-1 Acc.*|*Pretrained?*|
+|:-----------------:|:--------:|:----------:|:-----------:|
+| `efficientnet-b0` | 5.3M | 76.3 | ✓ |
+| `efficientnet-b1` | 7.8M | 78.8 | ✓ |
+| `efficientnet-b2` | 9.2M | 79.8 | ✓ |
+| `efficientnet-b3` | 12M | 81.1 | ✓ |
+| `efficientnet-b4` | 19M | 82.6 | ✓ |
+| `efficientnet-b5` | 30M | 83.3 | ✓ |
+| `efficientnet-b6` | 43M | 84.0 | ✓ |
+| `efficientnet-b7` | 66M | 84.4 | ✓ |
+
+
+#### Example: Classification
+
+Below is a simple, complete example. It may also be found as a jupyter notebook in `examples/simple` or as a [Colab Notebook](https://colab.research.google.com/drive/1Jw28xZ1NJq4Cja4jLe6tJ6_F5lCzElb4).
+
+We assume that in your current directory, there is a `img.jpg` file and a `labels_map.txt` file (ImageNet class names). These are both included in `examples/simple`.
+
+```python
+import json
+from PIL import Image
+import torch
+from torchvision import transforms
+
+from efficientnet_pytorch import EfficientNet
+model = EfficientNet.from_pretrained('efficientnet-b0')
+
+# Preprocess image
+tfms = transforms.Compose([transforms.Resize(224), transforms.ToTensor(),
+ transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]),])
+img = tfms(Image.open('img.jpg')).unsqueeze(0)
+print(img.shape) # torch.Size([1, 3, 224, 224])
+
+# Load ImageNet class names
+labels_map = json.load(open('labels_map.txt'))
+labels_map = [labels_map[str(i)] for i in range(1000)]
+
+# Classify
+model.eval()
+with torch.no_grad():
+ outputs = model(img)
+
+# Print predictions
+print('-----')
+for idx in torch.topk(outputs, k=5).indices.squeeze(0).tolist():
+ prob = torch.softmax(outputs, dim=1)[0, idx].item()
+ print('{label:<75} ({p:.2f}%)'.format(label=labels_map[idx], p=prob*100))
+```
+
+#### Example: Feature Extraction
+
+You can easily extract features with `model.extract_features`:
+```python
+from efficientnet_pytorch import EfficientNet
+model = EfficientNet.from_pretrained('efficientnet-b0')
+
+# ... image preprocessing as in the classification example ...
+print(img.shape) # torch.Size([1, 3, 224, 224])
+
+features = model.extract_features(img)
+print(features.shape) # torch.Size([1, 1280, 7, 7])
+```
+
+#### Example: Export to ONNX
+
+Exporting to ONNX for deploying to production is now simple:
+```python
+import torch
+from efficientnet_pytorch import EfficientNet
+
+model = EfficientNet.from_pretrained('efficientnet-b1')
+dummy_input = torch.randn(10, 3, 240, 240)
+
+model.set_swish(memory_efficient=False)
+torch.onnx.export(model, dummy_input, "test-b1.onnx", verbose=True)
+```
+
+[Here](https://colab.research.google.com/drive/1rOAEXeXHaA8uo3aG2YcFDHItlRJMV0VP) is a Colab example.
+
+
+#### ImageNet
+
+See `examples/imagenet` for details about evaluating on ImageNet.
+
+### Contributing
+
+If you find a bug, create a GitHub issue, or even better, submit a pull request. Similarly, if you have questions, simply post them as GitHub issues.
+
+I look forward to seeing what the community does with these models!
+
+%prep
+%autosetup -n efficientnet-pytorch-0.7.1
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-efficientnet-pytorch -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Mon Apr 10 2023 Python_Bot <Python_Bot@openeuler.org> - 0.7.1-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..2eb01eb
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+f2b12999687e14cbd757ce24229be85e efficientnet_pytorch-0.7.1.tar.gz