เป้าหมายของ repo นี้คือ:
ข่าว:
pip install pretrainedmodels , pretrainedmodels.model_names , pretrainedmodels.pretrained_settingspython setup.py installgit pull )model.features(input) model.logits(features) model.forward(input) model.last_linearpip 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 () หมายเหตุ : โดยค่าเริ่มต้นรุ่นจะถูกดาวน์โหลดไปยังโฟลเดอร์ $HOME/.torch ของคุณ คุณสามารถแก้ไขพฤติกรรมนี้โดยใช้ตัวแปร $TORCH_HOME ดังนี้: 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
ได้ผลลัพธ์โดยใช้ภาพ (กึ่งกลางครอบตัด) ขนาดเท่ากันมากกว่าในระหว่างกระบวนการฝึกอบรม
| แบบอย่าง | รุ่น | acc@1 | acc@5 |
|---|---|---|---|
| PNASNET-5 ขนาดใหญ่ | เทนเซอร์โฟลว์ | 82.858 | 96.182 |
| PNASNET-5 ขนาดใหญ่ | การพอร์ตของเรา | 82.736 | 95.992 |
| Nasnet-a-large | เทนเซอร์โฟลว์ | 82.693 | 96.163 |
| Nasnet-a-large | การพอร์ตของเรา | 82.566 | 96.086 |
| Senet154 | คาเฟอีน | 81.32 | 95.53 |
| Senet154 | การพอร์ตของเรา | 81.304 | 95.498 |
| โพลีเน็ต | คาเฟอีน | 81.29 | 95.75 |
| โพลีเน็ต | การพอร์ตของเรา | 81.002 | 95.624 |
| InceptionResNetv2 | เทนเซอร์โฟลว์ | 80.4 | 95.3 |
| inceptionv4 | เทนเซอร์โฟลว์ | 80.2 | 95.3 |
| SE-RESNEXT101_32X4D | การพอร์ตของเรา | 80.236 | 95.028 |
| SE-RESNEXT101_32X4D | คาเฟอีน | 80.19 | 95.04 |
| InceptionResNetv2 | การพอร์ตของเรา | 80.170 | 95.234 |
| inceptionv4 | การพอร์ตของเรา | 80.062 | 94.926 |
| DualPathNet107_5K | การพอร์ตของเรา | 79.746 | 94.684 |
| resnext101_64x4d | TORCH7 | 79.6 | 94.7 |
| DualPathNet131 | การพอร์ตของเรา | 79.432 | 94.574 |
| DualPathNet92_5K | การพอร์ตของเรา | 79.400 | 94.620 |
| dualpathnet98 | การพอร์ตของเรา | 79.224 | 94.488 |
| SE-RESNEXT50_32X4D | การพอร์ตของเรา | 79.076 | 94.434 |
| SE-RESNEXT50_32X4D | คาเฟอีน | 79.03 | 94.46 |
| Xception | เครส | 79.000 | 94.500 |
| resnext101_64x4d | การพอร์ตของเรา | 78.956 | 94.252 |
| Xception | การพอร์ตของเรา | 78.888 | 94.292 |
| resnext101_32x4d | TORCH7 | 78.8 | 94.4 |
| SE-RESNET152 | คาเฟอีน | 78.66 | 94.46 |
| SE-RESNET152 | การพอร์ตของเรา | 78.658 | 94.374 |
| Resnet152 | pytorch | 78.428 | 94.110 |
| SE-RESNET101 | การพอร์ตของเรา | 78.396 | 94.258 |
| SE-RESNET101 | คาเฟอีน | 78.25 | 94.28 |
| resnext101_32x4d | การพอร์ตของเรา | 78.188 | 93.886 |
| fbresnet152 | TORCH7 | 77.84 | 93.84 |
| SE-RESNET50 | คาเฟอีน | 77.63 | 93.64 |
| SE-RESNET50 | การพอร์ตของเรา | 77.636 | 93.752 |
| Densenet161 | pytorch | 77.560 | 93.798 |
| resnet101 | pytorch | 77.438 | 93.672 |
| fbresnet152 | การพอร์ตของเรา | 77.386 | 93.594 |
| inceptionv3 | pytorch | 77.294 | 93.454 |
| Densenet201 | pytorch | 77.152 | 93.548 |
| DualPathNet68b_5k | การพอร์ตของเรา | 77.034 | 93.590 |
| CafferesNet101 | คาเฟอีน | 76.400 | 92.900 |
| CafferesNet101 | การพอร์ตของเรา | 76.200 | 92.766 |
| Densenet169 | pytorch | 76.026 | 92.992 |
| resnet50 | pytorch | 76.002 | 92.980 |
| DualPathNet68 | การพอร์ตของเรา | 75.868 | 92.774 |
| Densenet121 | pytorch | 74.646 | 92.136 |
| vgg19_bn | pytorch | 74.266 | 92.066 |
| nasnet-a-mobile | เทนเซอร์โฟลว์ | 74.0 | 91.6 |
| nasnet-a-mobile | การพอร์ตของเรา | 74.080 | 91.740 |
| resnet34 | pytorch | 73.554 | 91.456 |
| การรับรู้ | การพอร์ตของเรา | 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 |
หมายเหตุ:
ระวังความถูกต้องที่รายงานที่นี่ไม่ได้เป็นตัวแทนของความสามารถในการถ่ายโอนของเครือข่ายในงานและชุดข้อมูลอื่น ๆ เสมอไป คุณต้องลองทั้งหมด! : P
โปรดดูตัวชี้วัดการตรวจสอบ Imagenet Compute
ที่มา: tensorflow slim repo
nasnetalarge(num_classes=1000, pretrained='imagenet')nasnetalarge(num_classes=1001, pretrained='imagenet+background')nasnetamobile(num_classes=1000, pretrained='imagenet') ที่มา: Torch7 repo ของ Facebook
มีความแตกต่างเล็กน้อยจาก Resnet* ของ Torchvision Resnet152 ปัจจุบันเป็นเพียงหนึ่งเดียวที่มีอยู่
fbresnet152(num_classes=1000, pretrained='imagenet') ที่มา: คาเฟอีน repo ของ Kaiminghe
cafferesnet101(num_classes=1000, pretrained='imagenet') ที่มา: Tensorflow Slim Repo และ Pytorch/Vision Repo สำหรับ 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') ที่มา: ได้รับการฝึกฝนด้วยคาเฟอีนโดย Xiong Yuanjun
bninception(num_classes=1000, pretrained='imagenet') ที่มา: resnext repo ของ Facebook
resnext101_32x4d(num_classes=1000, pretrained='imagenet')resnext101_62x4d(num_classes=1000, pretrained='imagenet') ที่มา: mxNet repo ของ Chen Yunpeng
Ross Wightman เป็นไปได้ในการพอร์ต
อย่างที่คุณเห็นที่นี่ DualPathNetWorks ช่วยให้คุณลองเครื่องชั่งที่แตกต่างกัน ค่าเริ่มต้นใน repo นี้คือ 0.875 หมายความว่าขนาดอินพุตดั้งเดิมคือ 256 ก่อนการครอบตัดเป็น 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' หมายความว่าเครือข่ายได้รับการปรับแต่งบน ImageNet5K ก่อนที่จะถูก finetuned บน imageNet1K
ที่มา: keras repo
T Standley เป็นไปได้
xception(num_classes=1000, pretrained='imagenet') ที่มา: คาเฟอีน 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') ที่มา: tensorflow slim repo
pnasnet5large(num_classes=1000, pretrained='imagenet')pnasnet5large(num_classes=1001, pretrained='imagenet+background') ที่มา: คาเฟอีน repo ของห้องปฏิบัติการมัลติมีเดีย Cuhk
polynet(num_classes=1000, pretrained='imagenet') ที่มา: Pytorch/Vision Repo
( inceptionv3 รวมอยู่ใน 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')เมื่อมีการโหลดแบบจำลองก่อนหน้านี้คุณสามารถใช้มันได้
หมายเหตุสำคัญ : ภาพทั้งหมดจะต้องโหลดโดยใช้ PIL ซึ่งปรับค่าพิกเซลระหว่าง 0 ถึง 1
model.input_size การรวมกันของ list ประเภทประกอบด้วย 3 ตัวเลข:
ตัวอย่าง:
[3, 299, 299] สำหรับการลงทะเบียนเรียน* เครือข่าย[3, 224, 224] สำหรับเครือข่าย resnet* model.input_space การรวมกันของประเภท str แสดงพื้นที่สีของภาพ สามารถเป็น RGB หรือ BGR
model.input_range การระบุประเภทของ list ประเภทประกอบด้วย 2 ตัวเลข:
ตัวอย่าง:
[0, 1] สำหรับ Resnet* และ Inception* เครือข่าย[0, 255] สำหรับเครือข่าย Bninception model.mean การรวมกันของ list ประเภทประกอบด้วย 3 ตัวเลขที่ใช้ในการทำให้ภาพอินพุตเป็นปกติ
ตัวอย่าง:
[0.5, 0.5, 0.5] สำหรับการเริ่มต้น* เครือข่าย[0.485, 0.456, 0.406] สำหรับเครือข่าย resnet* model.std การรวมกันของ list ประเภทประกอบด้วย 3 ตัวเลขที่ใช้ในการทำให้ภาพอินพุตเป็นปกติ (หาร "ช่องสี-ช่องสี"))
ตัวอย่าง:
[0.5, 0.5, 0.5] สำหรับการเริ่มต้น* เครือข่าย[0.229, 0.224, 0.225] สำหรับเครือข่าย resnet* model.features/! กำลังดำเนินการอยู่ (อาจไม่สามารถใช้ได้)
วิธีการที่ใช้ในการแยกคุณสมบัติจากภาพ
ตัวอย่างเมื่อโมเดลถูกโหลดโดยใช้ 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/! กำลังดำเนินการอยู่ (อาจไม่สามารถใช้ได้)
วิธีการที่ใช้ในการจำแนกคุณสมบัติจากภาพ
ตัวอย่างเมื่อโมเดลถูกโหลดโดยใช้ fbresnet152 :
output = model . features ( input_224 )
print ( output . size ()) # (1,2048, 1, 1)
output = model . logits ( output )
print ( output . size ()) # (1,1000) model.forward วิธีที่ใช้ในการเรียก model.features และ model.logits มันสามารถเขียนทับได้ตามที่ต้องการ
หมายเหตุ : แนวทางปฏิบัติที่ดีคือการใช้ model.__call__ เป็นฟังก์ชั่นที่คุณเลือกเพื่อส่งต่ออินพุตไปยังโมเดลของคุณ ดูตัวอย่างตะโกน
# 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 การระบุประเภทของ nn.Linear โมดูลนี้เป็นโมดูลสุดท้ายที่จะถูกเรียกในระหว่างการส่งต่อ
nn.Linear ที่ดัดแปลงสำหรับการปรับแต่งpretrained.utils.Identity สำหรับการสกัดคุณสมบัติ ตัวอย่างเมื่อโมเดลถูกโหลดโดยใช้ 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
ต้องขอบคุณชุมชนการเรียนรู้ลึกและโดยเฉพาะอย่างยิ่งกับผู้มีส่วนร่วมของระบบนิเวศ Pytorch