-
Notifications
You must be signed in to change notification settings - Fork 245
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
45c4ca3
commit 2ec77af
Showing
3 changed files
with
99 additions
and
1 deletion.
There are no files selected for viewing
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
--- | ||
layout: hub_detail | ||
background-class: hub-background | ||
body-class: hub | ||
title: MobileNet v3 | ||
summary: Highly Efficient networks optimized for speed and memory, with residual blocks | ||
category: researchers | ||
image: mobilenet_v3_1.png | ||
author: Pytorch Team | ||
tags: [vision, scriptable] | ||
github-link: https://github.com/pytorch/vision/blob/main/torchvision/models/mobilenetv3.py | ||
github-id: pytorch/vision | ||
featured_image_1: mobilenet_v3_1.png | ||
featured_image_2: no-image | ||
accelerator: cuda-optional | ||
order: 10 | ||
--- | ||
|
||
```python | ||
import torch | ||
model = torch.hub.load('pytorch/vision:v0.10.0', 'mobilenet_v3_small', pretrained=True) | ||
# or | ||
# model = torch.hub.load('pytorch/vision:v0.10.0', 'mobilenet_v3_large', pretrained=True) | ||
model.eval() | ||
``` | ||
|
||
All pre-trained models expect input images normalized in the same way, | ||
i.e. mini-batches of 3-channel RGB images of shape `(3 x H x W)`, where `H` and `W` are expected to be at least `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]`. | ||
|
||
Here's a sample execution. | ||
|
||
```python | ||
# Download an example image from the pytorch website | ||
import urllib | ||
url, filename = ("https://github.com/pytorch/hub/raw/master/images/dog.jpg", "dog.jpg") | ||
try: urllib.URLopener().retrieve(url, filename) | ||
except: urllib.request.urlretrieve(url, filename) | ||
``` | ||
|
||
```python | ||
# sample execution (requires torchvision) | ||
from PIL import Image | ||
from torchvision import transforms | ||
input_image = Image.open(filename) | ||
preprocess = transforms.Compose([ | ||
transforms.Resize(256), | ||
transforms.CenterCrop(224), | ||
transforms.ToTensor(), | ||
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), | ||
]) | ||
input_tensor = preprocess(input_image) | ||
input_batch = input_tensor.unsqueeze(0) # create a mini-batch as expected by the model | ||
|
||
# move the input and model to GPU for speed if available | ||
if torch.cuda.is_available(): | ||
input_batch = input_batch.to('cuda') | ||
model.to('cuda') | ||
|
||
with torch.no_grad(): | ||
output = model(input_batch) | ||
# Tensor of shape 1000, with confidence scores over Imagenet's 1000 classes | ||
print(output[0]) | ||
# The output has unnormalized scores. To get probabilities, you can run a softmax on it. | ||
probabilities = torch.nn.functional.softmax(output[0], dim=0) | ||
print(probabilities) | ||
``` | ||
|
||
``` | ||
# Download ImageNet labels | ||
!wget https://raw.githubusercontent.com/pytorch/hub/master/imagenet_classes.txt | ||
``` | ||
|
||
``` | ||
# Read the categories | ||
with open("imagenet_classes.txt", "r") as f: | ||
categories = [s.strip() for s in f.readlines()] | ||
# Show top categories per image | ||
top5_prob, top5_catid = torch.topk(probabilities, 5) | ||
for i in range(top5_prob.size(0)): | ||
print(categories[top5_catid[i]], top5_prob[i].item()) | ||
``` | ||
|
||
### Model Description | ||
|
||
The MobileNet v3 architecture is based some stuff. | ||
|
||
| Model structure | Top-1 error | Top-5 error | | ||
| ------------------ | ----------- | ----------- | | ||
| mobilenet_v3_large | 25.95 | 8.66 | | ||
| mobilenet_v3_small | 32.33 | 12.59 | | ||
|
||
|
||
### References | ||
|
||
- [Searching for MobileNetV3](https://arxiv.org/abs/1905.02244) | ||
- [PyTorch Blog on Training MobileNetV3](https://pytorch.org/blog/torchvision-mobilenet-v3-implementation) |