ImageNet Models¶
This subpackage provides a variety of pre-trained state-of-the-art models which is trained on ImageNet dataset.
The pre-trained models can be used for both inference and training as following:
# Create ResNet-50 for inference
import nnabla as nn
import nnabla.functions as F
import nnabla.parametric_functions as PF
import numpy as np
from nnabla.models.imagenet import ResNet50
model = ResNet50()
batch_size = 1
# model.input_shape returns (3, 224, 224) when ResNet-50
x = nn.Variable((batch_size,) + model.input_shape)
y = model(x, training=False)
# Execute inference
# Load input image as uint8 array with shape of (3, 224, 224)
from nnabla.utils.image_utils import imread
img = imread('example.jpg', size=model.input_shape[1:], channel_first=True)
x.d[0] = img
y.forward()
predicted_label = np.argmax(y.d[0])
print('Predicted label:', model.category_names[predicted_label])
# Create ResNet-50 for fine-tuning
batch_size=32
x = nn.Variable((batch_size,) + model.input_shape)
# * By training=True, it sets batch normalization mode for training
# and gives trainable attributes to parameters.
# * By use_up_to='pool', it creats a network up to the output of
# the final global average pooling.
pool = model(x, training=True, use_up_to='pool')
# Add a classification layer for another 10 category dataset
# and loss function
num_classes = 10
y = PF.affine(pool, num_classes, name='classifier10')
t = nn.Variable((batch_size, 1))
loss = F.sum(F.softmax_cross_entropy(y, t))
# Training...
Available models are summarized in the following table. Error rates are calculated using single center crop.
Name |
Class |
Top-1 error |
Top-5 error |
Trained by/with |
|---|---|---|---|---|
ResNet18 |
30.28 |
10.90 |
Neural Network Console |
|
ResNet34 |
26.72 |
8.89 |
Neural Network Console |
|
ResNet50 |
24.59 |
7.48 |
Neural Network Console |
|
ResNet101 |
23.81 |
7.01 |
Neural Network Console |
|
ResNet152 |
23.48 |
7.09 |
Neural Network Console |
|
MobileNet |
29.51 |
10.34 |
Neural Network Console |
|
MobileNetV2 |
29.94 |
10.82 |
Neural Network Console |
|
SENet |
22.04 |
6.29 |
Neural Network Console |
|
SqueezeNetV10 |
42.71 |
20.12 |
Neural Network Console |
|
SqueezeNetV11 |
41.23 |
19.18 |
Neural Network Console |
|
VGG11 |
30.85 |
11.38 |
Neural Network Console |
|
VGG13 |
29.51 |
10.46 |
Neural Network Console |
|
VGG16 |
29.03 |
10.07 |
Neural Network Console |
|
NIN |
42.91 |
20.66 |
Neural Network Console |
|
DenseNet |
23.82 |
7.02 |
Neural Network Console |
|
InceptionV3 |
21.82 |
5.88 |
Neural Network Console |
|
Xception |
23.59 |
6.91 |
Neural Network Console |
|
GoogLeNet |
31.22 |
11.34 |
Neural Network Console |
|
ResNeXt50 |
22.95 |
6.73 |
Neural Network Console |
|
ResNeXt101 |
22.80 |
6.74 |
Neural Network Console |
|
ShuffleNet10 |
34.15 |
13.85 |
Neural Network Console |
|
ShuffleNet05 |
41.99 |
19.64 |
Neural Network Console |
|
ShuffleNet20 |
30.34 |
11.12 |
Neural Network Console |
Common interfaces¶
- class nnabla.models.imagenet.base.ImageNetBase[source]¶
Most of ImageNet pretrained models are inherited from this class so that it provides some common interfaces.
- __call__(input_var=None, use_from=None, use_up_to='classifier', training=False, force_global_pooling=False, check_global_pooling=True, returns_net=False, verbose=0)[source]¶
Create a network (computation graph) from a loaded model.
- Parameters
input_var (Variable, optional) – If given, input variable is replaced with the given variable and a network is constructed on top of the variable. Otherwise, a variable with batch size as 1 and a default shape from
self.input_shape.use_up_to (str) – Network is constructed up to a variable specified by a string. A list of string-variable correspondences in a model is described in documentation for each model class.
training (bool) – This option enables additional training (fine-tuning, transfer learning etc.) for the constructed network. If True, the
batch_statoption in batch normalization is turnedTrue, andneed_gradattribute in trainable variables (conv weights and gamma and beta of bn etc.) is turnedTrue. The default isFalse.force_global_pooling (bool) – Regardless the input image size, the final average pooling before classification layer will be automatically transformed to a global average pooling. The default is
False.check_global_pooling (bool) – If
True, and if the stride configuration of the final average pooling is not for global pooling, it raises an exception. The default isTrue. UseFalsewhen user want to do the pooling with the trained stride(7, 7)regardless the input spatial size.returns_net (bool) – When
True, it returns aNnpNetworkobject. Otherwise, It only returns the last variable of the constructed network. The default isFalse.verbose (bool, or int) – Verbose level. With
0, it says nothing during network construction.
- property category_names¶
Returns category names of 1000 ImageNet classes.
- property input_shape¶
Should returns default image size (channel, height, width) as a tuple.
List of models¶
- class nnabla.models.imagenet.ResNet(num_layers=18)[source]¶
ResNet architectures for 18, 34, 50, 101, and 152 of number of layers.
- Parameters
num_layers (int) – Number of layers chosen from 18, 34, 50, 101, and 152.
The following is a list of string that can be specified to
use_up_tooption in__call__method;'classifier'(default): The output of the final affine layer for classification.'pool': The output of the final global average pooling.'lastconv': The input of the final global average pooling without ReLU activation.'lastconv+relu': Network up to'lastconv'followed by ReLU activation.
References
- class nnabla.models.imagenet.MobileNet[source]¶
MobileNet architecture.
The following is a list of string that can be specified to
use_up_tooption in__call__method;'classifier'(default): The output of the final affine layer for classification.'pool': The output of the final global average pooling.'lastconv': The input of the final global average pooling without ReLU activation.'lastconv+relu': Network up to'lastconv'followed by ReLU activation.
References
- class nnabla.models.imagenet.MobileNetV2[source]¶
MobileNetV2 architecture.
The following is a list of string that can be specified to
use_up_tooption in__call__method;'classifier'(default): The output of the final affine layer for classification.'pool': The output of the final global average pooling.'lastconv': The input of the final global average pooling without ReLU activation.'lastconv+relu': Network up to'lastconv'followed by ReLU activation.
References
- class nnabla.models.imagenet.SENet[source]¶
SENet-154 model which integrates SE blocks with a modified ResNeXt architecture.
The following is a list of string that can be specified to
use_up_tooption in__call__method;'classifier'(default): The output of the final affine layer for classification.'pool': The output of the final global average pooling.'lastconv': The input of the final global average pooling without ReLU activation.'lastconv+relu': Network up to'lastconv'followed by ReLU activation.
References
- class nnabla.models.imagenet.SqueezeNetV10[source]¶
SquezeNetV10 An alias of
SqueezeNet('v1.0').
- class nnabla.models.imagenet.SqueezeNetV11[source]¶
SquezeNetV11 An alias of
SqueezeNet('v1.1').
- class nnabla.models.imagenet.SqueezeNet(version='v1.1')[source]¶
SqueezeNet model for architecture-v1.0 and v1.1 .
- Parameters
version (str) – Version chosen from ‘v1.0’ and ‘v1.1’.
The following is a list of string that can be specified to
use_up_tooption in__call__method;'classifier'(default): The output of the final affine layer for classification.'pool': The output of the final global average pooling.'lastconv': The input of the final global average pooling without ReLU activation.'lastconv+relu': Network up to'lastconv'followed by ReLU activation.
References
- class nnabla.models.imagenet.VGG(num_layers=11)[source]¶
VGG architectures for 11, 13, 16 layers.
- Parameters
num_layers (int) – Number of layers chosen from 11, 13, 16.
The following is a list of string that can be specified to
use_up_tooption in__call__method;'classifier'(default): The output of the final affine layer for classification.'pool': The output of the final global average pooling.'lastconv': The input of the final global average pooling without ReLU activation.'lastconv+relu': Network up to'lastconv'followed by ReLU activation.'lastfeature': Network up to one layer before'classifier', but without activation.
References
- class nnabla.models.imagenet.NIN[source]¶
NIN(Network In Network) architecture.
The following is a list of string that can be specified to
use_up_tooption in__call__method;'classifier'(default): The output of the final affine layer for classification.'pool': The output of the final global average pooling.'lastconv': The input of the final global average pooling without ReLU activation.'lastconv+relu': Network up to'lastconv'followed by ReLU activation.
References
- class nnabla.models.imagenet.DenseNet[source]¶
The following is a list of string that can be specified to
use_up_tooption in__call__method;'classifier'(default): The output of the final affine layer for classification.'pool': The output of the final global average pooling.'lastconv': The output from last denseblock.'lastconv+relu': Network up to'lastconv'followed by ReLU activation.
References
- class nnabla.models.imagenet.InceptionV3[source]¶
InceptionV3 architecture.
The following is a list of string that can be specified to
use_up_tooption in__call__method;'classifier'(default): The output of the final affine layer for classification.'pool': The output of the final global average pooling.'prepool': The input of the final global average pooling, i.e. the output of the final inception block.
References
- class nnabla.models.imagenet.Xception[source]¶
Xception model.
The following is a list of string that can be specified to
use_up_tooption in__call__method;'classifier'(default): The output of the final affine layer for classification.'pool': The output of the final global average pooling.'lastconv': The input of the final global average pooling without ReLU activation.'lastconv+relu': Network up to'lastconv'followed by ReLU activation.
References
- class nnabla.models.imagenet.GoogLeNet[source]¶
GoogLeNet model.
The following is a list of string that can be specified to
use_up_tooption in__call__method;'classifier'(default): The output of the final affine layer for classification.'pool': The output of the final global average pooling.'prepool': The input of the final global average pooling, i.e. the output of the final inception block.
References
- class nnabla.models.imagenet.ResNeXt(num_layers=50)[source]¶
ResNeXt architectures for 50 and 101 of number of layers.
- Parameters
num_layers (int) – Number of layers chosen from 50 and 101.
The following is a list of string that can be specified to
use_up_tooption in__call__method;'classifier'(default): The output of the final affine layer for classification.'pool': The output of the final global average pooling.'lastconv': The input of the final global average pooling without ReLU activation.'lastconv+relu': Network up to'lastconv'followed by ReLU activation.
References
- class nnabla.models.imagenet.ShuffleNet10[source]¶
An alias of
ShuffleNet(10).
- class nnabla.models.imagenet.ShuffleNet05[source]¶
An alias of
ShuffleNet(5).
- class nnabla.models.imagenet.ShuffleNet20[source]¶
An alias of
ShuffleNet(20).
- class nnabla.models.imagenet.ShuffleNet(scaling_factor=10)[source]¶
Model for architecture ShuffleNet, ShuffleNet-0.5x and ShufffleNet-2.0x.
- Parameters
Factor (Scaling) – To customize the network to a desired complexity, we can simply apply a scale factor on the number of channnels. This can be chosen from ‘10’, ‘5’ and ‘20’.
The following is a list of string that can be specified to
use_up_tooption in__call__method;'classifier'(default): The output of the final affine layer for classification.'pool': The output of the final global average pooling.'lastconv': The input of the final global average pooling without ReLU activation.'lastconv+relu': Network up to'lastconv'followed by ReLU activation.
References