Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Pretrained ConvNets for pytorch: NASNet, ResNeXt, ResNet, InceptionV4, InceptionResnetV2, Xception, DPN, etc.

License

NotificationsYou must be signed in to change notification settings

Cadene/pretrained-models.pytorch

Repository files navigation

The goal of this repo is:

  • to help to reproduce research papers results (transfer learning setups for instance),
  • to access pretrained ConvNets with a unique interface/API inspired by torchvision.

News:

  • 27/10/2018: Fix compatibility issues, Add tests, Add travis
  • 04/06/2018:PolyNet andPNASNet-5-Large thanks toAlex Parinov
  • 16/04/2018:SE-ResNet* and SE-ResNeXt* thanks toAlex Parinov
  • 09/04/2018:SENet154 thanks toAlex Parinov
  • 22/03/2018: CaffeResNet101 (good for localization with FasterRCNN)
  • 21/03/2018: NASNet Mobile thanks toVeronika Yurchuk andAnastasiia
  • 25/01/2018: DualPathNetworks thanks toRoss Wightman, Xception thanks toT Standley, improved TransformImage API
  • 13/01/2018:pip install pretrainedmodels,pretrainedmodels.model_names,pretrainedmodels.pretrained_settings
  • 12/01/2018:python setup.py install
  • 08/12/2017: update data url (/!\git pull is needed)
  • 30/11/2017: improve API (model.features(input),model.logits(features),model.forward(input),model.last_linear)
  • 16/11/2017: nasnet-a-large pretrained model ported by T. Durand and R. Cadene
  • 22/07/2017: torchvision pretrained models
  • 22/07/2017: momentum in inceptionv4 and inceptionresnetv2 to 0.1
  • 17/07/2017: model.input_range attribut
  • 17/07/2017: BNInception pretrained on Imagenet

Summary

Installation

  1. python3 with anaconda
  2. pytorch with/out CUDA

Install from pip

  1. pip install pretrainedmodels

Install from repo

  1. git clone https://github.com/Cadene/pretrained-models.pytorch.git
  2. cd pretrained-models.pytorch
  3. python setup.py install

Quick examples

  • To importpretrainedmodels:
importpretrainedmodels
  • To print the available pretrained models:
print(pretrainedmodels.model_names)> ['fbresnet152','bninception','resnext101_32x4d','resnext101_64x4d','inceptionv4','inceptionresnetv2','alexnet','densenet121','densenet169','densenet201','densenet161','resnet18','resnet34','resnet50','resnet101','resnet152','inceptionv3','squeezenet1_0','squeezenet1_1','vgg11','vgg11_bn','vgg13','vgg13_bn','vgg16','vgg16_bn','vgg19_bn','vgg19','nasnetalarge','nasnetamobile','cafferesnet101','senet154','se_resnet50','se_resnet101','se_resnet152','se_resnext50_32x4d','se_resnext101_32x4d','cafferesnet101','polynet','pnasnet5large']
  • To print the available pretrained settings for a chosen model:
print(pretrainedmodels.pretrained_settings['nasnetalarge'])> {'imagenet': {'url':'http://data.lip6.fr/cadene/pretrainedmodels/nasnetalarge-a1897284.pth','input_space':'RGB','input_size': [3,331,331],'input_range': [0,1],'mean': [0.5,0.5,0.5],'std': [0.5,0.5,0.5],'num_classes':1000},'imagenet+background': {'url':'http://data.lip6.fr/cadene/pretrainedmodels/nasnetalarge-a1897284.pth','input_space':'RGB','input_size': [3,331,331],'input_range': [0,1],'mean': [0.5,0.5,0.5],'std': [0.5,0.5,0.5],'num_classes':1001}}
  • To load a pretrained models from imagenet:
model_name='nasnetalarge'# could be fbresnet152 or inceptionresnetv2model=pretrainedmodels.__dict__[model_name](num_classes=1000,pretrained='imagenet')model.eval()

Note: By default, models will be downloaded to your$HOME/.torch folder. You can modify this behavior using the$TORCH_HOME variable as follow:export TORCH_HOME="/local/pretrainedmodels"

  • To load an image and do a complete forward pass:
importtorchimportpretrainedmodels.utilsasutilsload_img=utils.LoadImage()# transformations depending on the model# rescale, center crop, normalize, and others (ex: ToBGR, ToRange255)tf_img=utils.TransformImage(model)path_img='data/cat.jpg'input_img=load_img(path_img)input_tensor=tf_img(input_img)# 3x400x225 -> 3x299x299 size may differinput_tensor=input_tensor.unsqueeze(0)# 3x299x299 -> 1x3x299x299input=torch.autograd.Variable(input_tensor,requires_grad=False)output_logits=model(input)# 1x1000
  • To extract features (beware this API is not available for all networks):
output_features=model.features(input)# 1x14x14x2048 size may differoutput_logits=model.logits(output_features)# 1x1000

Few use cases

Compute imagenet logits

$ python examples/imagenet_logits.py -h> nasnetalarge, resnet152, inceptionresnetv2, inceptionv4, ...
$ python examples/imagenet_logits.py -a nasnetalarge --path_img data/cat.jpg> 'nasnetalarge': data/cat.jpg' is a 'tiger cat'

Compute imagenet evaluation metrics

$ python examples/imagenet_eval.py /local/common-data/imagenet_2012/images -a nasnetalarge -b 20 -e> * Acc@1 82.693, Acc@5 96.13

Evaluation on imagenet

Accuracy on validation set (single model)

Results were obtained using (center cropped) images of the same size than during the training process.

ModelVersionAcc@1Acc@5
PNASNet-5-LargeTensorflow82.85896.182
PNASNet-5-LargeOur porting82.73695.992
NASNet-A-LargeTensorflow82.69396.163
NASNet-A-LargeOur porting82.56696.086
SENet154Caffe81.3295.53
SENet154Our porting81.30495.498
PolyNetCaffe81.2995.75
PolyNetOur porting81.00295.624
InceptionResNetV2Tensorflow80.495.3
InceptionV4Tensorflow80.295.3
SE-ResNeXt101_32x4dOur porting80.23695.028
SE-ResNeXt101_32x4dCaffe80.1995.04
InceptionResNetV2Our porting80.17095.234
InceptionV4Our porting80.06294.926
DualPathNet107_5kOur porting79.74694.684
ResNeXt101_64x4dTorch779.694.7
DualPathNet131Our porting79.43294.574
DualPathNet92_5kOur porting79.40094.620
DualPathNet98Our porting79.22494.488
SE-ResNeXt50_32x4dOur porting79.07694.434
SE-ResNeXt50_32x4dCaffe79.0394.46
XceptionKeras79.00094.500
ResNeXt101_64x4dOur porting78.95694.252
XceptionOur porting78.88894.292
ResNeXt101_32x4dTorch778.894.4
SE-ResNet152Caffe78.6694.46
SE-ResNet152Our porting78.65894.374
ResNet152Pytorch78.42894.110
SE-ResNet101Our porting78.39694.258
SE-ResNet101Caffe78.2594.28
ResNeXt101_32x4dOur porting78.18893.886
FBResNet152Torch777.8493.84
SE-ResNet50Caffe77.6393.64
SE-ResNet50Our porting77.63693.752
DenseNet161Pytorch77.56093.798
ResNet101Pytorch77.43893.672
FBResNet152Our porting77.38693.594
InceptionV3Pytorch77.29493.454
DenseNet201Pytorch77.15293.548
DualPathNet68b_5kOur porting77.03493.590
CaffeResnet101Caffe76.40092.900
CaffeResnet101Our porting76.20092.766
DenseNet169Pytorch76.02692.992
ResNet50Pytorch76.00292.980
DualPathNet68Our porting75.86892.774
DenseNet121Pytorch74.64692.136
VGG19_BNPytorch74.26692.066
NASNet-A-MobileTensorflow74.091.6
NASNet-A-MobileOur porting74.08091.740
ResNet34Pytorch73.55491.456
BNInceptionOur porting73.52491.562
VGG16_BNPytorch73.51891.608
VGG19Pytorch72.08090.822
VGG16Pytorch71.63690.354
VGG13_BNPytorch71.50890.494
VGG11_BNPytorch70.45289.818
ResNet18Pytorch70.14289.274
VGG13Pytorch69.66289.264
VGG11Pytorch68.97088.746
SqueezeNet1_1Pytorch58.25080.800
SqueezeNet1_0Pytorch58.10880.428
AlexnetPytorch56.43279.194

Notes:

  • the Pytorch version of ResNet152 is not a porting of the Torch7 but has been retrained by facebook.
  • For the PolyNet evaluation each image was resized to 378x378 without preserving the aspect ratio and then the central 331×331 patch from the resulting image was used.

Beware, the accuracy reported here is not always representative of the transferable capacity of the network on other tasks and datasets. You must try them all! :P

Reproducing results

Please seeCompute imagenet validation metrics

Documentation

Available models

NASNet*

Source:TensorFlow Slim repo

  • nasnetalarge(num_classes=1000, pretrained='imagenet')
  • nasnetalarge(num_classes=1001, pretrained='imagenet+background')
  • nasnetamobile(num_classes=1000, pretrained='imagenet')

FaceBook ResNet*

Source:Torch7 repo of FaceBook

There are a bit different from the ResNet* of torchvision. ResNet152 is currently the only one available.

  • fbresnet152(num_classes=1000, pretrained='imagenet')

Caffe ResNet*

Source:Caffe repo of KaimingHe

  • cafferesnet101(num_classes=1000, pretrained='imagenet')

Inception*

Source:TensorFlow Slim repo andPytorch/Vision repo forinceptionv3

  • inceptionresnetv2(num_classes=1000, pretrained='imagenet')
  • inceptionresnetv2(num_classes=1001, pretrained='imagenet+background')
  • inceptionv4(num_classes=1000, pretrained='imagenet')
  • inceptionv4(num_classes=1001, pretrained='imagenet+background')
  • inceptionv3(num_classes=1000, pretrained='imagenet')

BNInception

Source:Trained with Caffe byXiong Yuanjun

  • bninception(num_classes=1000, pretrained='imagenet')

ResNeXt*

Source:ResNeXt repo of FaceBook

  • resnext101_32x4d(num_classes=1000, pretrained='imagenet')
  • resnext101_62x4d(num_classes=1000, pretrained='imagenet')

DualPathNetworks

Source:MXNET repo of Chen Yunpeng

The porting has been made possible byRoss Wightman in hisPyTorch repo.

As you can seehere DualPathNetworks allows you to try different scales. The default one in this repo is 0.875 meaning that the original input size is 256 before croping to 224.

  • dpn68(num_classes=1000, pretrained='imagenet')
  • dpn98(num_classes=1000, pretrained='imagenet')
  • dpn131(num_classes=1000, pretrained='imagenet')
  • dpn68b(num_classes=1000, pretrained='imagenet+5k')
  • dpn92(num_classes=1000, pretrained='imagenet+5k')
  • dpn107(num_classes=1000, pretrained='imagenet+5k')

'imagenet+5k' means that the network has been pretrained on imagenet5k before being finetuned on imagenet1k.

Xception

Source:Keras repo

The porting has been made possible byT Standley.

  • xception(num_classes=1000, pretrained='imagenet')

SENet*

Source:Caffe repo of Jie Hu

  • senet154(num_classes=1000, pretrained='imagenet')
  • se_resnet50(num_classes=1000, pretrained='imagenet')
  • se_resnet101(num_classes=1000, pretrained='imagenet')
  • se_resnet152(num_classes=1000, pretrained='imagenet')
  • se_resnext50_32x4d(num_classes=1000, pretrained='imagenet')
  • se_resnext101_32x4d(num_classes=1000, pretrained='imagenet')

PNASNet*

Source:TensorFlow Slim repo

  • pnasnet5large(num_classes=1000, pretrained='imagenet')
  • pnasnet5large(num_classes=1001, pretrained='imagenet+background')

PolyNet

Source:Caffe repo of the CUHK Multimedia Lab

  • polynet(num_classes=1000, pretrained='imagenet')

TorchVision

Source:Pytorch/Vision repo

(inceptionv3 included inInception*)

  • resnet18(num_classes=1000, pretrained='imagenet')
  • resnet34(num_classes=1000, pretrained='imagenet')
  • resnet50(num_classes=1000, pretrained='imagenet')
  • resnet101(num_classes=1000, pretrained='imagenet')
  • resnet152(num_classes=1000, pretrained='imagenet')
  • densenet121(num_classes=1000, pretrained='imagenet')
  • densenet161(num_classes=1000, pretrained='imagenet')
  • densenet169(num_classes=1000, pretrained='imagenet')
  • densenet201(num_classes=1000, pretrained='imagenet')
  • squeezenet1_0(num_classes=1000, pretrained='imagenet')
  • squeezenet1_1(num_classes=1000, pretrained='imagenet')
  • alexnet(num_classes=1000, pretrained='imagenet')
  • vgg11(num_classes=1000, pretrained='imagenet')
  • vgg13(num_classes=1000, pretrained='imagenet')
  • vgg16(num_classes=1000, pretrained='imagenet')
  • vgg19(num_classes=1000, pretrained='imagenet')
  • vgg11_bn(num_classes=1000, pretrained='imagenet')
  • vgg13_bn(num_classes=1000, pretrained='imagenet')
  • vgg16_bn(num_classes=1000, pretrained='imagenet')
  • vgg19_bn(num_classes=1000, pretrained='imagenet')

Model API

Once a pretrained model has been loaded, you can use it that way.

Important note: All image must be loaded usingPIL which scales the pixel values between 0 and 1.

model.input_size

Attribut of typelist composed of 3 numbers:

  • number of color channels,
  • height of the input image,
  • width of the input image.

Example:

  • [3, 299, 299] for inception* networks,
  • [3, 224, 224] for resnet* networks.

model.input_space

Attribut of typestr representating the color space of the image. Can beRGB orBGR.

model.input_range

Attribut of typelist composed of 2 numbers:

  • min pixel value,
  • max pixel value.

Example:

  • [0, 1] for resnet* and inception* networks,
  • [0, 255] for bninception network.

model.mean

Attribut of typelist composed of 3 numbers which are used to normalize the input image (substract "color-channel-wise").

Example:

  • [0.5, 0.5, 0.5] for inception* networks,
  • [0.485, 0.456, 0.406] for resnet* networks.

model.std

Attribut of typelist composed of 3 numbers which are used to normalize the input image (divide "color-channel-wise").

Example:

  • [0.5, 0.5, 0.5] for inception* networks,
  • [0.229, 0.224, 0.225] for resnet* networks.

model.features

/!\ work in progress (may not be available)

Method which is used to extract the features from the image.

Example when the model is loaded usingfbresnet152:

print(input_224.size())# (1,3,224,224)output=model.features(input_224)print(output.size())# (1,2048,1,1)# print(input_448.size())          # (1,3,448,448)output=model.features(input_448)# print(output.size())             # (1,2048,7,7)

model.logits

/!\ work in progress (may not be available)

Method which is used to classify the features from the image.

Example when the model is loaded usingfbresnet152:

output=model.features(input_224)print(output.size())# (1,2048, 1, 1)output=model.logits(output)print(output.size())# (1,1000)

model.forward

Method used to callmodel.features andmodel.logits. It can be overwritten as desired.

Note: A good practice is to usemodel.__call__ as your function of choice to forward an input to your model. See the example bellow.

# Without model.__call__output=model.forward(input_224)print(output.size())# (1,1000)# With model.__call__output=model(input_224)print(output.size())# (1,1000)

model.last_linear

Attribut of typenn.Linear. This module is the last one to be called during the forward pass.

  • Can be replaced by an adaptednn.Linear for fine tuning.
  • Can be replaced bypretrained.utils.Identity for features extraction.

Example when the model is loaded usingfbresnet152:

print(input_224.size())# (1,3,224,224)output=model.features(input_224)print(output.size())# (1,2048,1,1)output=model.logits(output)print(output.size())# (1,1000)# fine tuningdim_feats=model.last_linear.in_features# =2048nb_classes=4model.last_linear=nn.Linear(dim_feats,nb_classes)output=model(input_224)print(output.size())# (1,4)# features extractionmodel.last_linear=pretrained.utils.Identity()output=model(input_224)print(output.size())# (1,2048)

Reproducing

Hand porting of ResNet152

th pretrainedmodels/fbresnet/resnet152_dump.luapython pretrainedmodels/fbresnet/resnet152_load.py

Automatic porting of ResNeXt

https://github.com/clcarwin/convert_torch_to_pytorch

Hand porting of NASNet, InceptionV4 and InceptionResNetV2

https://github.com/Cadene/tensorflow-model-zoo.torch

Acknowledgement

Thanks to the deep learning community and especially to the contributers of the pytorch ecosystem.

About

Pretrained ConvNets for pytorch: NASNet, ResNeXt, ResNet, InceptionV4, InceptionResnetV2, Xception, DPN, etc.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors19


[8]ページ先頭

©2009-2025 Movatter.jp