Python-Bibliothek mit neuronalen Netzen für Bilder
Segmentierung basierend auf PyTorch.
Die Hauptmerkmale dieser Bibliothek sind:
Besuchen Sie die Seite „Read The Docs Project“ oder lesen Sie die folgende README-Datei, um mehr über die Segmentation Models Pytorch-Bibliothek (kurz SMP) zu erfahren
Das Segmentierungsmodell ist lediglich ein PyTorch- torch.nn.Module
, das so einfach erstellt werden kann:
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)
)
Alle Encoder verfügen über vorab trainierte Gewichte. Wenn Sie Ihre Daten auf die gleiche Weise wie beim Vortraining mit Gewichten vorbereiten, erhalten Sie möglicherweise bessere Ergebnisse (höhere Metrikbewertung und schnellere Konvergenz). Dies ist nicht erforderlich , wenn Sie das gesamte Modell trainieren, nicht nur den Decoder.
from segmentation_models_pytorch . encoders import get_preprocessing_fn
preprocess_input = get_preprocessing_fn ( 'resnet18' , pretrained = 'imagenet' )
Glückwunsch! Du bist fertig! Jetzt können Sie Ihr Modell mit Ihrem Lieblings-Framework trainieren!
Im Folgenden finden Sie eine Liste der unterstützten Encoder im SMP. Wählen Sie die entsprechende Encoderfamilie aus und klicken Sie, um die Tabelle zu erweitern und einen bestimmten Encoder und seine vorab trainierten Gewichte auszuwählen (Parameter encoder_name
und encoder_weights
).
Encoder | Gewichte | Params, M |
---|---|---|
resnet18 | imagenet / ssl / swsl | 11M |
resnet34 | imagenet | 21M |
resnet50 | imagenet / ssl / swsl | 23M |
resnet101 | imagenet | 42M |
resnet152 | imagenet | 58M |
Encoder | Gewichte | Params, M |
---|---|---|
resnext50_32x4d | imagenet / ssl / swsl | 22M |
resnext101_32x4d | ssl / swsl | 42M |
resnext101_32x8d | imagenet / instagram / ssl / swsl | 86M |
resnext101_32x16d | Instagram / SSL / SWSL | 191M |
resnext101_32x32d | 466M | |
resnext101_32x48d | 826M |
Encoder | Gewichte | Params, M |
---|---|---|
timm-resnest14d | imagenet | 8M |
timm-resnest26d | imagenet | 15M |
timm-resnest50d | imagenet | 25M |
timm-resnest101e | imagenet | 46M |
timm-resnest200e | imagenet | 68M |
timm-resnest269e | imagenet | 108M |
timm-resnest50d_4s2x40d | imagenet | 28M |
timm-resnest50d_1s4x24d | imagenet | 23M |
Encoder | Gewichte | Params, M |
---|---|---|
timm-res2net50_26w_4s | imagenet | 23M |
timm-res2net101_26w_4s | imagenet | 43M |
timm-res2net50_26w_6s | imagenet | 35M |
timm-res2net50_26w_8s | imagenet | 46M |
timm-res2net50_48w_2s | imagenet | 23M |
timm-res2net50_14w_8s | imagenet | 23M |
timm-res2next50 | imagenet | 22M |
Encoder | Gewichte | Params, M |
---|---|---|
timm-regnetx_002 | imagenet | 2M |
timm-regnetx_004 | imagenet | 4M |
timm-regnetx_006 | imagenet | 5M |
timm-regnetx_008 | imagenet | 6M |
timm-regnetx_016 | imagenet | 8M |
timm-regnetx_032 | imagenet | 14M |
timm-regnetx_040 | imagenet | 20M |
timm-regnetx_064 | imagenet | 24M |
timm-regnetx_080 | imagenet | 37M |
timm-regnetx_120 | imagenet | 43M |
timm-regnetx_160 | imagenet | 52M |
timm-regnetx_320 | imagenet | 105M |
timm-regnety_002 | imagenet | 2M |
timm-regnety_004 | imagenet | 3M |
timm-regnety_006 | imagenet | 5M |
timm-regnety_008 | imagenet | 5M |
timm-regnety_016 | imagenet | 10M |
timm-regnety_032 | imagenet | 17M |
timm-regnety_040 | imagenet | 19M |
timm-regnety_064 | imagenet | 29M |
timm-regnety_080 | imagenet | 37M |
timm-regnety_120 | imagenet | 49M |
timm-regnety_160 | imagenet | 80M |
timm-regnety_320 | imagenet | 141M |
Encoder | Gewichte | Params, M |
---|---|---|
timm-gernet_s | imagenet | 6M |
timm-gernet_m | imagenet | 18M |
timm-gernet_l | imagenet | 28M |
Encoder | Gewichte | Params, M |
---|---|---|
senet154 | imagenet | 113M |
se_resnet50 | imagenet | 26M |
se_resnet101 | imagenet | 47M |
se_resnet152 | imagenet | 64M |
se_resnext50_32x4d | imagenet | 25M |
se_resnext101_32x4d | imagenet | 46M |
Encoder | Gewichte | Params, M |
---|---|---|
timm-skresnet18 | imagenet | 11M |
timm-skresnet34 | imagenet | 21M |
timm-skresnext50_32x4d | imagenet | 25M |
Encoder | Gewichte | Params, M |
---|---|---|
dichtennet121 | imagenet | 6M |
dichtennet169 | imagenet | 12M |
dichtennet201 | imagenet | 18M |
dichtennet161 | imagenet | 26M |
Encoder | Gewichte | Params, M |
---|---|---|
inceptionresnetv2 | imagenet / imagenet+hintergrund | 54M |
Inceptionv4 | imagenet / imagenet+hintergrund | 41M |
Ausnahme | imagenet | 22M |
Encoder | Gewichte | Params, M |
---|---|---|
effizientnet-b0 | imagenet | 4M |
effizientnet-b1 | imagenet | 6M |
effizientnet-b2 | imagenet | 7M |
effizientnet-b3 | imagenet | 10M |
effizientnet-b4 | imagenet | 17M |
effizientnet-b5 | imagenet | 28M |
effizientes Netz-b6 | imagenet | 40M |
effizientnet-b7 | imagenet | 63M |
timm-efficientnet-b0 | imagenet / advprop / noisy-student | 4M |
timm-efficientnet-b1 | imagenet / advprop / noisy-student | 6M |
timm-efficientnet-b2 | imagenet / advprop / noisy-student | 7M |
timm-efficientnet-b3 | imagenet / advprop / noisy-student | 10M |
timm-efficientnet-b4 | imagenet / advprop / noisy-student | 17M |
timm-efficientnet-b5 | imagenet / advprop / noisy-student | 28M |
timm-efficientnet-b6 | imagenet / advprop / noisy-student | 40M |
timm-efficientnet-b7 | imagenet / advprop / noisy-student | 63M |
timm-efficientnet-b8 | imagenet / advprop | 84M |
timm-efficientnet-l2 | lauter Student | 474M |
timm-efficientnet-lite0 | imagenet | 4M |
timm-efficientnet-lite1 | imagenet | 5M |
timm-efficientnet-lite2 | imagenet | 6M |
timm-efficientnet-lite3 | imagenet | 8M |
timm-efficientnet-lite4 | imagenet | 13M |
Encoder | Gewichte | Params, M |
---|---|---|
mobilenet_v2 | imagenet | 2M |
timm-mobilenetv3_large_075 | imagenet | 1,78 Mio |
timm-mobilenetv3_large_100 | imagenet | 2,97 Mio |
timm-mobilenetv3_large_minimal_100 | imagenet | 1,41 Mio |
timm-mobilenetv3_small_075 | imagenet | 0,57 Mio |
timm-mobilenetv3_small_100 | imagenet | 0,93 Mio |
timm-mobilenetv3_small_minimal_100 | imagenet | 0,43 Mio |
Encoder | Gewichte | Params, M |
---|---|---|
dpn68 | imagenet | 11M |
dpn68b | imagenet+5k | 11M |
dpn92 | imagenet+5k | 34M |
dpn98 | imagenet | 58M |
dpn107 | imagenet+5k | 84M |
dpn131 | imagenet | 76M |
Encoder | Gewichte | Params, M |
---|---|---|
vgg11 | imagenet | 9M |
vgg11_bn | imagenet | 9M |
vgg13 | imagenet | 9M |
vgg13_bn | imagenet | 9M |
vgg16 | imagenet | 14M |
vgg16_bn | imagenet | 14M |
vgg19 | imagenet | 20M |
vgg19_bn | imagenet | 20M |
Backbone von SegFormer, vorab auf Imagenet trainiert! Kann mit anderen Decodern aus dem Paket verwendet werden, Sie können Mix Vision Transformer mit Unet, FPN und anderen kombinieren!
Einschränkungen:
Encoder | Gewichte | Params, M |
---|---|---|
mit_b0 | imagenet | 3M |
mit_b1 | imagenet | 13M |
mit_b2 | imagenet | 24M |
mit_b3 | imagenet | 44M |
mit_b4 | imagenet | 60M |
mit_b5 | imagenet | 81M |
Apples „Sub-One-ms“-Backbone auf Imagenet vorab trainiert! Kann mit allen Decodern verwendet werden.
Hinweis: Im offiziellen Github-Repo verfügt die s0-Variante über zusätzliche num_conv_branches, was zu mehr Parametern als s1 führt.
Encoder | Gewichte | Params, M |
---|---|---|
mobileone_s0 | imagenet | 4,6 Mio |
mobileone_s1 | imagenet | 4,0 Mio |
mobileone_s2 | imagenet | 6,5 Mio |
mobileone_s3 | imagenet | 8,8 Mio |
mobileone_s4 | imagenet | 13,6 Mio |
* ssl
, swsl
– halbüberwachtes und schwach überwachtes Lernen auf ImageNet (Repo).
Dokumente
Pytorch Image Models (auch bekannt als Timm) verfügt über viele vorab trainierte Modelle und Schnittstellen, die die Verwendung dieser Modelle als Encoder in SMP ermöglichen. Allerdings werden nicht alle Modelle unterstützt
features_only
Gesamtzahl der unterstützten Encoder: 549
model.encoder
– vortrainiertes Backbone zum Extrahieren von Merkmalen unterschiedlicher räumlicher Auflösungmodel.decoder
– hängt von der Architektur des Modells ab ( Unet
/ Linknet
/ PSPNet
/ FPN
)model.segmentation_head
– letzter Block zur Erzeugung der erforderlichen Anzahl an Maskenkanälen (einschließlich optionalem Upsampling und Aktivierung)model.classification_head
– optionaler Block, der einen Klassifizierungskopf über dem Encoder erstelltmodel.forward(x)
– leiten Sie x
nacheinander durch den Encoder, den Decoder und den Segmentierungskopf des Modells (und den Klassifizierungskopf, falls angegeben) Mit dem Parameter „Eingabekanäle“ können Sie Modelle erstellen, die Tensoren mit einer beliebigen Anzahl von Kanälen verarbeiten. Wenn Sie vorab trainierte Gewichte aus Imagenet verwenden, werden die Gewichte der ersten Faltung wiederverwendet. Im 1-Kanal-Fall wäre es eine Summe der Gewichte der ersten Faltungsschicht, andernfalls würden die Kanäle mit Gewichten wie new_weight[:, i] = pretrained_weight[:, i % 3]
gefüllt und dann mit new_weight * 3 / new_in_channels
skaliert.
model = smp . FPN ( 'resnet34' , in_channels = 1 )
mask = model ( torch . ones ([ 1 , 1 , 64 , 64 ]))
Alle Modelle unterstützen aux_params
Parameter, die standardmäßig auf None
eingestellt sind. Wenn aux_params = None
, wird keine Klassifizierungs-Hilfsausgabe erstellt, andernfalls erzeugt das Modell nicht nur mask
, sondern auch label
mit der Form NC
. Der Klassifizierungskopf besteht aus den Schichten GlobalPooling->Dropout(optional)->Linear->Activation(optional), die von aux_params
wie folgt konfiguriert werden können:
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 )
Der Tiefenparameter gibt eine Anzahl von Downsampling-Vorgängen im Encoder an, sodass Sie Ihr Modell leichter machen können, wenn Sie eine kleinere depth
angeben.
model = smp . Unet ( 'resnet34' , encoder_depth = 4 )
PyPI-Version:
$ pip install segmentation-models-pytorch
Neueste Version aus der Quelle:
$ pip install git+https://github.com/qubvel/segmentation_models.pytorch
Das Paket Segmentation Models
wird häufig in Bildsegmentierungswettbewerben verwendet. Hier finden Sie Wettbewerbe, Namen der Gewinner und Links zu ihren Lösungen.
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}}
}
Das Projekt wird unter MIT-Lizenz vertrieben