ไลบรารี Python พร้อมโครงข่ายประสาทเทียมสำหรับรูปภาพ
การแบ่งส่วนตาม PyTorch
คุณสมบัติหลักของห้องสมุดนี้คือ:
เยี่ยมชมอ่านหน้าโครงการ Docs หรืออ่าน README ต่อไปนี้เพื่อทราบข้อมูลเพิ่มเติมเกี่ยวกับไลบรารี Segmentation Models Pytorch (เรียกสั้น ๆ ว่า SMP)
โมเดลการแบ่งส่วนเป็นเพียง PyTorch torch.nn.Module
ซึ่งสามารถสร้างได้ง่ายเพียง:
import segmentation_models_pytorch as smp
model = smp . Unet (
encoder_name = "resnet34" , # choose encoder, e.g. mobilenet_v2 or efficientnet-b7
encoder_weights = "imagenet" , # use `imagenet` pre-trained weights for encoder initialization
in_channels = 1 , # model input channels (1 for gray-scale images, 3 for RGB, etc.)
classes = 3 , # model output channels (number of classes in your dataset)
)
ตัวเข้ารหัสทั้งหมดมีน้ำหนักที่ฝึกไว้ล่วงหน้า การเตรียมข้อมูลของคุณในลักษณะเดียวกับในระหว่างการฝึกตุ้มน้ำหนักล่วงหน้าอาจให้ผลลัพธ์ที่ดีกว่า (คะแนนเมตริกที่สูงขึ้นและการบรรจบกันที่เร็วขึ้น) ไม่จำเป็น ในกรณีที่คุณฝึกทั้งโมเดล ไม่ใช่แค่ตัวถอดรหัสเท่านั้น
from segmentation_models_pytorch . encoders import get_preprocessing_fn
preprocess_input = get_preprocessing_fn ( 'resnet18' , pretrained = 'imagenet' )
ยินดีด้วย! คุณทำเสร็จแล้ว! ตอนนี้คุณสามารถฝึกโมเดลของคุณด้วยเฟรมเวิร์กที่คุณชื่นชอบได้แล้ว!
ต่อไปนี้เป็นรายการตัวเข้ารหัสที่รองรับใน SMP เลือกกลุ่มตัวเข้ารหัสที่เหมาะสม และคลิกเพื่อขยายตาราง และเลือกตัวเข้ารหัสเฉพาะและน้ำหนักที่ได้รับการฝึกล่วงหน้า (พารามิเตอร์ encoder_name
และ encoder_weights
)
ตัวเข้ารหัส | ตุ้มน้ำหนัก | ปารัม, เอ็ม |
---|---|---|
รีเซ็ต18 | อิมเมจเน็ต / ssl / swsl | 11ม |
รีเซ็ต34 | อิมเมจเน็ต | 21ม |
รีเซ็ต50 | อิมเมจเน็ต / ssl / swsl | 23ม |
เรสเน็ต101 | อิมเมจเน็ต | 42ม |
รีเซ็ต152 | อิมเมจเน็ต | 58ม |
ตัวเข้ารหัส | ตุ้มน้ำหนัก | ปารัม, เอ็ม |
---|---|---|
resnext50_32x4d | อิมเมจเน็ต / ssl / swsl | 22ม |
resnext101_32x4d | ssl/ssl | 42ม |
resnext101_32x8d | อิมเมจเน็ต / อินสตาแกรม / ssl / swsl | 86ม |
resnext101_32x16d | อินสตาแกรม / ssl / swsl | 191ม |
resnext101_32x32d | อินสตาแกรม | 466ม |
resnext101_32x48d | อินสตาแกรม | 826ม |
ตัวเข้ารหัส | ตุ้มน้ำหนัก | ปารัม, เอ็ม |
---|---|---|
timm-resnest14d | อิมเมจเน็ต | 8ม |
timm-resnest26d | อิมเมจเน็ต | 15ม |
timm-resnest50d | อิมเมจเน็ต | 25ม |
timm-resnest101e | อิมเมจเน็ต | 46ม |
timm-resnest200e | อิมเมจเน็ต | 68ม |
timm-resnest269e | อิมเมจเน็ต | 108ม |
timm-resnest50d_4s2x40d | อิมเมจเน็ต | 28ม |
timm-resnest50d_1s4x24d | อิมเมจเน็ต | 23ม |
ตัวเข้ารหัส | ตุ้มน้ำหนัก | ปารัม, เอ็ม |
---|---|---|
timm-res2net50_26w_4s | อิมเมจเน็ต | 23ม |
timm-res2net101_26w_4s | อิมเมจเน็ต | 43ม |
timm-res2net50_26w_6s | อิมเมจเน็ต | 35ม |
timm-res2net50_26w_8s | อิมเมจเน็ต | 46ม |
timm-res2net50_48w_2s | อิมเมจเน็ต | 23ม |
timm-res2net50_14w_8s | อิมเมจเน็ต | 23ม |
timm-res2next50 | อิมเมจเน็ต | 22ม |
ตัวเข้ารหัส | ตุ้มน้ำหนัก | ปารัม, เอ็ม |
---|---|---|
timm-regnetx_002 | อิมเมจเน็ต | 2ม |
timm-regnetx_004 | อิมเมจเน็ต | 4M |
timm-regnetx_006 | อิมเมจเน็ต | 5ม |
timm-regnetx_008 | อิมเมจเน็ต | 6ม |
timm-regnetx_016 | อิมเมจเน็ต | 8ม |
timm-regnetx_032 | อิมเมจเน็ต | 14ม |
timm-regnetx_040 | อิมเมจเน็ต | 20ม |
timm-regnetx_064 | อิมเมจเน็ต | 24ม |
timm-regnetx_080 | อิมเมจเน็ต | 37ม |
timm-regnetx_120 | อิมเมจเน็ต | 43ม |
timm-regnetx_160 | อิมเมจเน็ต | 52ม |
timm-regnetx_320 | อิมเมจเน็ต | 105ม |
timm-regnety_002 | อิมเมจเน็ต | 2ม |
timm-regnety_004 | อิมเมจเน็ต | 3เอ็ม |
timm-regnety_006 | อิมเมจเน็ต | 5ม |
timm-regnety_008 | อิมเมจเน็ต | 5ม |
timm-regnety_016 | อิมเมจเน็ต | 10ม |
timm-regnety_032 | อิมเมจเน็ต | 17ม |
timm-regnety_040 | อิมเมจเน็ต | 19ม |
timm-regnety_064 | อิมเมจเน็ต | 29ม |
timm-regnety_080 | อิมเมจเน็ต | 37ม |
timm-regnety_120 | อิมเมจเน็ต | 49ม |
timm-regnety_160 | อิมเมจเน็ต | 80ม |
timm-regnety_320 | อิมเมจเน็ต | 141ม |
ตัวเข้ารหัส | ตุ้มน้ำหนัก | ปารัม, เอ็ม |
---|---|---|
timm-gernet_s | อิมเมจเน็ต | 6ม |
timm-gernet_m | อิมเมจเน็ต | 18ม |
timm-gernet_l | อิมเมจเน็ต | 28ม |
ตัวเข้ารหัส | ตุ้มน้ำหนัก | ปารัม, เอ็ม |
---|---|---|
เซเน็ต154 | อิมเมจเน็ต | 113ม |
se_resnet50 | อิมเมจเน็ต | 26ม |
se_resnet101 | อิมเมจเน็ต | 47ม |
se_resnet152 | อิมเมจเน็ต | 64ม |
se_resnext50_32x4d | อิมเมจเน็ต | 25ม |
se_resnext101_32x4d | อิมเมจเน็ต | 46ม |
ตัวเข้ารหัส | ตุ้มน้ำหนัก | ปารัม, เอ็ม |
---|---|---|
timm-skresnet18 | อิมเมจเน็ต | 11ม |
timm-skresnet34 | อิมเมจเน็ต | 21ม |
timm-skresnext50_32x4d | อิมเมจเน็ต | 25ม |
ตัวเข้ารหัส | ตุ้มน้ำหนัก | ปารัม, เอ็ม |
---|---|---|
หนาแน่นเน็ต121 | อิมเมจเน็ต | 6ม |
หนาแน่นเน็ต169 | อิมเมจเน็ต | 12ม |
หนาแน่นเน็ต201 | อิมเมจเน็ต | 18ม |
หนาแน่นเน็ต161 | อิมเมจเน็ต | 26ม |
ตัวเข้ารหัส | ตุ้มน้ำหนัก | ปารัม, เอ็ม |
---|---|---|
การเริ่มต้นresnetv2 | อิมเมจเน็ต / อิมเมจเน็ต+พื้นหลัง | 54ม |
การเริ่มต้นv4 | อิมเมจเน็ต / อิมเมจเน็ต+พื้นหลัง | 41ม |
ข้อยกเว้น | อิมเมจเน็ต | 22ม |
ตัวเข้ารหัส | ตุ้มน้ำหนัก | ปารัม, เอ็ม |
---|---|---|
มีประสิทธิภาพnet-b0 | อิมเมจเน็ต | 4M |
มีประสิทธิภาพnet-b1 | อิมเมจเน็ต | 6ม |
มีประสิทธิภาพnet-b2 | อิมเมจเน็ต | 7ม |
มีประสิทธิภาพnet-b3 | อิมเมจเน็ต | 10ม |
มีประสิทธิภาพnet-b4 | อิมเมจเน็ต | 17ม |
มีประสิทธิภาพnet-b5 | อิมเมจเน็ต | 28ม |
มีประสิทธิภาพnet-b6 | อิมเมจเน็ต | 40ม |
มีประสิทธิภาพnet-b7 | อิมเมจเน็ต | 63ม |
timm-effienet-b0 | imagenet / advprop / เสียงดัง-นักเรียน | 4M |
timm-effienet-b1 | imagenet / advprop / เสียงดัง-นักเรียน | 6ม |
timm-effienet-b2 | imagenet / advprop / เสียงดัง-นักเรียน | 7ม |
timm-effienet-b3 | imagenet / advprop / เสียงดัง-นักเรียน | 10ม |
timm-effienet-b4 | imagenet / advprop / เสียงดัง-นักเรียน | 17ม |
timm-effienet-b5 | imagenet / advprop / เสียงดัง-นักเรียน | 28ม |
timm-effienet-b6 | imagenet / advprop / เสียงดัง-นักเรียน | 40ม |
timm-effienet-b7 | imagenet / advprop / เสียงดัง-นักเรียน | 63ม |
timm-effienet-b8 | อิมเมจเน็ต / advprop | 84ม |
timm-effienet-l2 | เสียงดัง-นักเรียน | 474ม |
timm-effienet-lite0 | อิมเมจเน็ต | 4M |
timm-effienet-lite1 | อิมเมจเน็ต | 5ม |
timm-effienet-lite2 | อิมเมจเน็ต | 6ม |
timm-effienet-lite3 | อิมเมจเน็ต | 8ม |
timm-effienet-lite4 | อิมเมจเน็ต | 13ม |
ตัวเข้ารหัส | ตุ้มน้ำหนัก | ปารัม, เอ็ม |
---|---|---|
โมบายเน็ต_v2 | อิมเมจเน็ต | 2ม |
timm-mobilenetv3_large_075 | อิมเมจเน็ต | 1.78ล้าน |
timm-mobilenetv3_large_100 | อิมเมจเน็ต | 2.97ล้าน |
timm-mobilenetv3_large_minimal_100 | อิมเมจเน็ต | 1.41M |
timm-mobilenetv3_small_075 | อิมเมจเน็ต | 0.57ม |
timm-mobilenetv3_small_100 | อิมเมจเน็ต | 0.93ม |
timm-mobilenetv3_small_minimal_100 | อิมเมจเน็ต | 0.43ม |
ตัวเข้ารหัส | ตุ้มน้ำหนัก | ปารัม, เอ็ม |
---|---|---|
dpn68 | อิมเมจเน็ต | 11ม |
dpn68b | อิมเมจเน็ต+5k | 11ม |
dpn92 | อิมเมจเน็ต+5k | 34ม |
dpn98 | อิมเมจเน็ต | 58ม |
dpn107 | อิมเมจเน็ต+5k | 84ม |
dpn131 | อิมเมจเน็ต | 76ม |
ตัวเข้ารหัส | ตุ้มน้ำหนัก | ปารัม, เอ็ม |
---|---|---|
vgg11 | อิมเมจเน็ต | 9ม |
vgg11_bn | อิมเมจเน็ต | 9ม |
vgg13 | อิมเมจเน็ต | 9ม |
vgg13_bn | อิมเมจเน็ต | 9ม |
vgg16 | อิมเมจเน็ต | 14ม |
vgg16_bn | อิมเมจเน็ต | 14ม |
vgg19 | อิมเมจเน็ต | 20ม |
vgg19_bn | อิมเมจเน็ต | 20ม |
Backbone จาก SegFormer ได้รับการฝึกฝนบน Imagenet! สามารถใช้กับตัวถอดรหัสอื่นๆ จากแพ็คเกจ คุณสามารถรวม Mix Vision Transformer เข้ากับ Unet, FPN และอื่นๆ ได้!
ข้อจำกัด:
ตัวเข้ารหัส | ตุ้มน้ำหนัก | ปารัม, เอ็ม |
---|---|---|
mit_b0 | อิมเมจเน็ต | 3เอ็ม |
mit_b1 | อิมเมจเน็ต | 13ม |
mit_b2 | อิมเมจเน็ต | 24ม |
mit_b3 | อิมเมจเน็ต | 44ม |
mit_b4 | อิมเมจเน็ต | 60ม |
mit_b5 | อิมเมจเน็ต | 81ม |
Backbone "sub-one-ms" ของ Apple ได้รับการฝึกฝนบน Imagenet! สามารถใช้ได้กับตัวถอดรหัสทั้งหมด
หมายเหตุ: ใน repo github อย่างเป็นทางการ ตัวแปร s0 มี num_conv_branches เพิ่มเติม ส่งผลให้มีพารามิเตอร์มากกว่า s1
ตัวเข้ารหัส | ตุ้มน้ำหนัก | ปารัม, เอ็ม |
---|---|---|
โมบายโลน_s0 | อิมเมจเน็ต | 4.6ล้าน |
mobileone_s1 | อิมเมจเน็ต | 4.0M |
mobileone_s2 | อิมเมจเน็ต | 6.5ม |
mobileone_s3 | อิมเมจเน็ต | 8.8M |
mobileone_s4 | อิมเมจเน็ต | 13.6M |
* ssl
, swsl
- การเรียนรู้แบบกึ่งกำกับดูแลและแบบมีผู้ดูแลน้อยบน ImageNet (repo)
เอกสาร
Pytorch Image Models (aka timm) มีโมเดลและอินเทอร์เฟซที่ได้รับการฝึกไว้ล่วงหน้าจำนวนมาก ซึ่งอนุญาตให้ใช้โมเดลเหล่านี้เป็นตัวเข้ารหัสใน smp อย่างไรก็ตาม ไม่รองรับทุกรุ่น
features_only
ที่จำเป็นสำหรับตัวเข้ารหัสจำนวนตัวเข้ารหัสที่รองรับทั้งหมด: 549
model.encoder
- กระดูกสันหลังที่ได้รับการฝึกมาล่วงหน้าเพื่อแยกคุณสมบัติที่มีความละเอียดเชิงพื้นที่ที่แตกต่างกันmodel.decoder
- ขึ้นอยู่กับสถาปัตยกรรมรุ่น ( Unet
/ Linknet
/ PSPNet
/ FPN
)model.segmentation_head
- บล็อกสุดท้ายในการสร้างช่องสัญญาณมาส์กตามจำนวนที่ต้องการ (รวมถึงการอัปแซมปลิงและการเปิดใช้งานเพิ่มเติมด้วย)model.classification_head
- บล็อกเสริมซึ่งสร้างส่วนหัวการจำแนกประเภทไว้ด้านบนของตัวเข้ารหัสmodel.forward(x)
- ส่งผ่าน x
ตามลำดับผ่านตัวเข้ารหัส ตัวถอดรหัส และส่วนหัวของการแบ่งส่วน (และส่วนหัวของการจัดหมวดหมู่ หากระบุ) พารามิเตอร์ช่องอินพุตช่วยให้คุณสร้างแบบจำลองซึ่งประมวลผลเทนเซอร์ด้วยจำนวนช่องที่ต้องการ หากคุณใช้ตุ้มน้ำหนักที่ฝึกไว้ล่วงหน้าจาก imagenet - ตุ้มน้ำหนักของการบิดครั้งแรกจะถูกนำมาใช้ซ้ำ สำหรับกรณีแบบ 1 แชนเนล มันจะเป็นผลรวมของน้ำหนักของเลเยอร์การบิดครั้งแรก มิฉะนั้นแชนเนลจะถูกเติมด้วยน้ำหนักเช่น new_weight[:, i] = pretrained_weight[:, i % 3]
และมากกว่าการปรับขนาดด้วย new_weight * 3 / new_in_channels
model = smp . FPN ( 'resnet34' , in_channels = 1 )
mask = model ( torch . ones ([ 1 , 1 , 64 , 64 ]))
ทุกรุ่นรองรับพารามิเตอร์ aux_params
ซึ่งตั้งค่าเริ่มต้นเป็น None
หาก aux_params = None
จะไม่มีการสร้างเอาต์พุตเสริมการจำแนกประเภท โมเดลอื่นไม่เพียงสร้าง mask
แต่ยังสร้างเอาต์พุต label
ที่มีรูปร่าง NC
ด้วย ส่วนหัวการจำแนกประเภทประกอบด้วยเลเยอร์ GlobalPooling->Dropout(เป็นทางเลือก)->Linear->Activation(เป็นทางเลือก) ซึ่งสามารถกำหนดค่าได้โดย aux_params
ดังนี้:
aux_params = dict (
pooling = 'avg' , # one of 'avg', 'max'
dropout = 0.5 , # dropout ratio, default is None
activation = 'sigmoid' , # activation function, default is None
classes = 4 , # define number of output labels
)
model = smp . Unet ( 'resnet34' , classes = 4 , aux_params = aux_params )
mask , label = model ( x )
พารามิเตอร์ความลึกจะระบุจำนวนการดำเนินการลดขนาดลงในโปรแกรมเปลี่ยนไฟล์ ดังนั้นคุณจึงสามารถทำให้โมเดลของคุณเบาขึ้นได้หากระบุ depth
ที่น้อยลง
model = smp . Unet ( 'resnet34' , encoder_depth = 4 )
เวอร์ชัน PyPI:
$ pip install segmentation-models-pytorch
เวอร์ชันล่าสุดจากแหล่งที่มา:
$ pip install git+https://github.com/qubvel/segmentation_models.pytorch
แพ็คเกจ Segmentation Models
ใช้กันอย่างแพร่หลายในการแข่งขันการแบ่งส่วนภาพ ที่นี่คุณจะพบกับการแข่งขัน ชื่อของผู้ชนะ และลิงก์ไปยังวิธีแก้ปัญหาของพวกเขา
make install_dev # create .venv, install SMP in dev mode
make fixup # Ruff for formatting and lint checks
make table # generate a table with encoders and print to stdout
@misc{Iakubovskii:2019,
Author = {Pavel Iakubovskii},
Title = {Segmentation Models Pytorch},
Year = {2019},
Publisher = {GitHub},
Journal = {GitHub repository},
Howpublished = {url{https://github.com/qubvel/segmentation_models.pytorch}}
}
โครงการนี้เผยแพร่ภายใต้ใบอนุญาต MIT