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 creates 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.

Available ImageNet models

Name

Class

Top-1 error

Top-5 error

Trained by/with

ResNet-18

ResNet18

30.28

10.90

Neural Network Console

ResNet-34

ResNet34

26.72

8.89

Neural Network Console

ResNet-50

ResNet50

24.59

7.48

Neural Network Console

ResNet-101

ResNet101

23.81

7.01

Neural Network Console

ResNet-152

ResNet152

23.48

7.09

Neural Network Console

MobileNet

MobileNet

29.51

10.34

Neural Network Console

MobileNetV2

MobileNetV2

29.94

10.82

Neural Network Console

SENet-154

SENet

22.04

6.29

Neural Network Console

SqueezeNet v1.0

SqueezeNetV10

42.71

20.12

Neural Network Console

SqueezeNet v1.1

SqueezeNetV11

41.23

19.18

Neural Network Console

VGG-11

VGG11

30.85

11.38

Neural Network Console

VGG-13

VGG13

29.51

10.46

Neural Network Console

VGG-16

VGG16

29.03

10.07

Neural Network Console

NIN

NIN

42.91

20.66

Neural Network Console

DenseNet-161

DenseNet

23.82

7.02

Neural Network Console

InceptionV3

InceptionV3

21.82

5.88

Neural Network Console

Xception

Xception

23.59

6.91

Neural Network Console

GoogLeNet

GoogLeNet

31.22

11.34

Neural Network Console

ResNeXt-50

ResNeXt50

22.95

6.73

Neural Network Console

ResNeXt-101

ResNeXt101

22.80

6.74

Neural Network Console

ShuffleNet

ShuffleNet10

34.15

13.85

Neural Network Console

ShuffleNet-0.5x

ShuffleNet05

41.99

19.64

Neural Network Console

ShuffleNet-2.0x

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_stat option in batch normalization is turned True, and need_grad attribute in trainable variables (conv weights and gamma and beta of bn etc.) is turned True. The default is False.

  • 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 is True. Use False when user want to do the pooling with the trained stride (7, 7) regardless the input spatial size.

  • returns_net (bool) – When True, it returns a NnpNetwork object. Otherwise, It only returns the last variable of the constructed network. The default is False.

  • 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.ResNet18[source]

An alias of ResNet (18).

class nnabla.models.imagenet.ResNet34[source]

An alias of ResNet (34).

class nnabla.models.imagenet.ResNet50[source]

An alias of ResNet (50).

class nnabla.models.imagenet.ResNet101[source]

An alias of ResNet (101).

class nnabla.models.imagenet.ResNet152[source]

An alias of ResNet (152).

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_to option 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_to option 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_to option 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_to option 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_to option 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.VGG11[source]

An alias of VGG (11).

class nnabla.models.imagenet.VGG13[source]

An alias of VGG (13).

class nnabla.models.imagenet.VGG16[source]

An alias of VGG (16).

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_to option 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_to option 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_to option 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_to option 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_to option 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_to option 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.ResNeXt50[source]

An alias of ResNeXt (50).

class nnabla.models.imagenet.ResNeXt101[source]

An alias of ResNeXt (101).

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_to option 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_to option 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