Tujuan repo ini adalah:
Berita:
pip install pretrainedmodels , pretrainedmodels.model_names , pretrainedmodels.pretrained_settingspython setup.py installgit pull diperlukan)model.features(input) , model.logits(features) , model.forward(input) , model.last_linear )pip install pretrainedmodelsgit clone https://github.com/Cadene/pretrained-models.pytorch.gitcd pretrained-models.pytorchpython setup.py install pretrainedmodels : import pretrainedmodels 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' ] 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 }} model_name = 'nasnetalarge' # could be fbresnet152 or inceptionresnetv2
model = pretrainedmodels . __dict__ [ model_name ]( num_classes = 1000 , pretrained = 'imagenet' )
model . eval () Catatan : Secara default, model akan diunduh ke folder $HOME/.torch Anda. Anda dapat memodifikasi perilaku ini menggunakan variabel $TORCH_HOME sebagai berikut: export TORCH_HOME="/local/pretrainedmodels"
import torch
import pretrainedmodels . utils as utils
load_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 differ
input_tensor = input_tensor . unsqueeze ( 0 ) # 3x299x299 -> 1x3x299x299
input = torch . autograd . Variable ( input_tensor ,
requires_grad = False )
output_logits = model ( input ) # 1x1000 output_features = model . features ( input ) # 1x14x14x2048 size may differ
output_logits = model . logits ( output_features ) # 1x1000 $ 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'
$ python examples/imagenet_eval.py /local/common-data/imagenet_2012/images -a nasnetalarge -b 20 -e
> * Acc@1 82.693, Acc@5 96.13
Hasil diperoleh dengan menggunakan gambar (cropped tengah) dengan ukuran yang sama daripada selama proses pelatihan.
| Model | Versi | ACC@1 | ACC@5 |
|---|---|---|---|
| PNASNET-5-Large | Tensorflow | 82.858 | 96.182 |
| PNASNET-5-Large | Porting kami | 82.736 | 95.992 |
| Nasnet-A-Large | Tensorflow | 82.693 | 96.163 |
| Nasnet-A-Large | Porting kami | 82.566 | 96.086 |
| Senet154 | Caffe | 81.32 | 95.53 |
| Senet154 | Porting kami | 81.304 | 95.498 |
| Polynet | Caffe | 81.29 | 95.75 |
| Polynet | Porting kami | 81.002 | 95.624 |
| InceptionResNetv2 | Tensorflow | 80.4 | 95.3 |
| Inceptionv4 | Tensorflow | 80.2 | 95.3 |
| SE-RESNEXT101_32X4D | Porting kami | 80.236 | 95.028 |
| SE-RESNEXT101_32X4D | Caffe | 80.19 | 95.04 |
| InceptionResNetv2 | Porting kami | 80.170 | 95.234 |
| Inceptionv4 | Porting kami | 80.062 | 94.926 |
| Dualpathnet107_5k | Porting kami | 79.746 | 94.684 |
| Resnext101_64x4d | Torch7 | 79.6 | 94.7 |
| Dualpathnet131 | Porting kami | 79.432 | 94.574 |
| Dualpathnet92_5k | Porting kami | 79.400 | 94.620 |
| Dualpathnet98 | Porting kami | 79.224 | 94.488 |
| SE-RESNEXT50_32X4D | Porting kami | 79.076 | 94.434 |
| SE-RESNEXT50_32X4D | Caffe | 79.03 | 94.46 |
| Xception | Keras | 79.000 | 94.500 |
| Resnext101_64x4d | Porting kami | 78.956 | 94.252 |
| Xception | Porting kami | 78.888 | 94.292 |
| Resnext101_32x4d | Torch7 | 78.8 | 94.4 |
| SE-RESNET152 | Caffe | 78.66 | 94.46 |
| SE-RESNET152 | Porting kami | 78.658 | 94.374 |
| Resnet152 | Pytorch | 78.428 | 94.110 |
| SE-RESNET101 | Porting kami | 78.396 | 94.258 |
| SE-RESNET101 | Caffe | 78.25 | 94.28 |
| Resnext101_32x4d | Porting kami | 78.188 | 93.886 |
| Fbresnet152 | Torch7 | 77.84 | 93.84 |
| SE-RESNET50 | Caffe | 77.63 | 93.64 |
| SE-RESNET50 | Porting kami | 77.636 | 93.752 |
| Densenet161 | Pytorch | 77.560 | 93.798 |
| Resnet101 | Pytorch | 77.438 | 93.672 |
| Fbresnet152 | Porting kami | 77.386 | 93.594 |
| Inceptionv3 | Pytorch | 77.294 | 93.454 |
| Densenet201 | Pytorch | 77.152 | 93.548 |
| Dualpathnet68b_5k | Porting kami | 77.034 | 93.590 |
| Cafferesnet101 | Caffe | 76.400 | 92.900 |
| Cafferesnet101 | Porting kami | 76.200 | 92.766 |
| Densenet169 | Pytorch | 76.026 | 92.992 |
| Resnet50 | Pytorch | 76.002 | 92.980 |
| Dualpathnet68 | Porting kami | 75.868 | 92.774 |
| Densenet121 | Pytorch | 74.646 | 92.136 |
| VGG19_BN | Pytorch | 74.266 | 92.066 |
| NASNET-A-Mobile | Tensorflow | 74.0 | 91.6 |
| NASNET-A-Mobile | Porting kami | 74.080 | 91.740 |
| Resnet34 | Pytorch | 73.554 | 91.456 |
| BnInception | Porting kami | 73.524 | 91.562 |
| VGG16_BN | Pytorch | 73.518 | 91.608 |
| VGG19 | Pytorch | 72.080 | 90.822 |
| VGG16 | Pytorch | 71.636 | 90.354 |
| VGG13_BN | Pytorch | 71.508 | 90.494 |
| Vgg11_bn | Pytorch | 70.452 | 89.818 |
| Resnet18 | Pytorch | 70.142 | 89.274 |
| VGG13 | Pytorch | 69.662 | 89.264 |
| VGG11 | Pytorch | 68.970 | 88.746 |
| Squeezenet1_1 | Pytorch | 58.250 | 80.800 |
| Squeezenet1_0 | Pytorch | 58.108 | 80.428 |
| Alexnet | Pytorch | 56.432 | 79.194 |
Catatan:
Waspadalah, akurasi yang dilaporkan di sini tidak selalu mewakili kapasitas jaringan yang dapat ditransfer pada tugas dan dataset lain. Anda harus mencoba semuanya! :P
Silakan lihat metrik validasi komputasi imagenet
Sumber: TensorFlow Slim Repo
nasnetalarge(num_classes=1000, pretrained='imagenet')nasnetalarge(num_classes=1001, pretrained='imagenet+background')nasnetamobile(num_classes=1000, pretrained='imagenet') Sumber: Torch7 Repo dari Facebook
Ada sedikit berbeda dari resnet* torchvision. ResNet152 saat ini satu -satunya yang tersedia.
fbresnet152(num_classes=1000, pretrained='imagenet') Sumber: CAFFE REPO KAIMINGHE
cafferesnet101(num_classes=1000, pretrained='imagenet') Sumber: TensorFlow Slim Repo dan Pytorch/Vision Repo untuk inceptionv3
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') Sumber: Dilatih dengan Caffe oleh Xiong Yuanjun
bninception(num_classes=1000, pretrained='imagenet') Sumber: Repo Resnext dari Facebook
resnext101_32x4d(num_classes=1000, pretrained='imagenet')resnext101_62x4d(num_classes=1000, pretrained='imagenet') Sumber: MXNET REPO dari Chen Yunpeng
Porting telah dimungkinkan oleh Ross Wightman dalam repo Pytorch -nya.
Seperti yang Anda lihat di sini DualPathNetWorks memungkinkan Anda untuk mencoba skala yang berbeda. Yang default dalam repo ini adalah 0,875 yang berarti bahwa ukuran input asli adalah 256 sebelum dipangkas hingga 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' berarti bahwa jaringan telah diprediksi di ImageNet5K sebelum di -finetuned di ImageNet1k.
Sumber: Keras repo
Porting telah dimungkinkan oleh T Standley.
xception(num_classes=1000, pretrained='imagenet') Sumber: Caffe Repo 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') Sumber: TensorFlow Slim Repo
pnasnet5large(num_classes=1000, pretrained='imagenet')pnasnet5large(num_classes=1001, pretrained='imagenet+background') Sumber: Caffe Repo dari CUHK Multimedia Lab
polynet(num_classes=1000, pretrained='imagenet') Sumber: Pytorch/Vision Repo
( inceptionv3 termasuk dalam Inception*)
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')Setelah model pretrained dimuat, Anda dapat menggunakannya seperti itu.
Catatan Penting : Semua gambar harus dimuat menggunakan PIL yang menskala nilai piksel antara 0 dan 1.
model.input_size Atribut list Jenis yang terdiri dari 3 angka:
Contoh:
[3, 299, 299] untuk Inception* Networks,[3, 224, 224] untuk jaringan resnet*. model.input_space Atribut tipe str yang mewakili ruang warna gambar. Dapat berupa RGB atau BGR .
model.input_range Atribut list Jenis yang terdiri dari 2 angka:
Contoh:
[0, 1] Untuk Resnet* dan Inception* Networks,[0, 255] untuk jaringan BnInception. model.mean Atribut list Jenis yang terdiri dari 3 angka yang digunakan untuk menormalkan gambar input (substitusi "Color-Channel-Wise").
Contoh:
[0.5, 0.5, 0.5] untuk Inception* Networks,[0.485, 0.456, 0.406] untuk jaringan resnet*. model.std Atribut list Jenis yang terdiri dari 3 angka yang digunakan untuk menormalkan gambar input (membagi "saluran warna-bijaksana").
Contoh:
[0.5, 0.5, 0.5] untuk Inception* Networks,[0.229, 0.224, 0.225] untuk jaringan resnet*. model.features/! Bekerja dalam proses (mungkin tidak tersedia)
Metode yang digunakan untuk mengekstrak fitur dari gambar.
Contoh Saat model dimuat menggunakan fbresnet152 :
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/! Bekerja dalam proses (mungkin tidak tersedia)
Metode yang digunakan untuk mengklasifikasikan fitur dari gambar.
Contoh Saat model dimuat menggunakan fbresnet152 :
output = model . features ( input_224 )
print ( output . size ()) # (1,2048, 1, 1)
output = model . logits ( output )
print ( output . size ()) # (1,1000) model.forward Metode yang digunakan untuk memanggil model.features dan model.logits . Itu bisa ditimpa seperti yang diinginkan.
Catatan : Praktik yang baik adalah menggunakan model.__call__ sebagai fungsi pilihan Anda untuk meneruskan input ke model Anda. Lihat contoh di bawahnya.
# 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 Atribut tipe nn.Linear . Modul ini adalah yang terakhir yang dipanggil selama umpan maju.
nn.Linear yang diadaptasi untuk fine tuning.pretrained.utils.Identity untuk ekstraksi fitur. Contoh Saat model dimuat menggunakan fbresnet152 :
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 tuning
dim_feats = model . last_linear . in_features # =2048
nb_classes = 4
model . last_linear = nn . Linear ( dim_feats , nb_classes )
output = model ( input_224 )
print ( output . size ()) # (1,4)
# features extraction
model . last_linear = pretrained . utils . Identity ()
output = model ( input_224 )
print ( output . size ()) # (1,2048) th pretrainedmodels/fbresnet/resnet152_dump.lua
python pretrainedmodels/fbresnet/resnet152_load.py
https://github.com/clcarwin/convert_torch_to_pytorch
https://github.com/cadene/tensorflow-model-zoo.torch
Berkat komunitas pembelajaran yang mendalam dan terutama kepada para penyumbang ekosistem Pytorch.