Bibliothèque Python avec réseaux de neurones pour l'image
Segmentation basée sur PyTorch.
Les principales fonctionnalités de cette bibliothèque sont :
Visitez la page du projet Read The Docs ou lisez le README suivant pour en savoir plus sur la bibliothèque Pytorch (SMP en abrégé) de modèles de segmentation.
Le modèle de segmentation n'est qu'un PyTorch torch.nn.Module
, qui peut être créé aussi simplement que :
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)
)
Tous les encodeurs ont des poids pré-entraînés. Préparer vos données de la même manière que lors du pré-entraînement aux poids peut vous donner de meilleurs résultats (score métrique plus élevé et convergence plus rapide). Ce n'est pas nécessaire si vous entraînez l'ensemble du modèle, pas seulement le décodeur.
from segmentation_models_pytorch . encoders import get_preprocessing_fn
preprocess_input = get_preprocessing_fn ( 'resnet18' , pretrained = 'imagenet' )
Félicitations! Vous avez terminé ! Vous pouvez désormais entraîner votre modèle avec votre framework préféré !
Voici une liste des encodeurs pris en charge dans le SMP. Sélectionnez la famille d'encodeurs appropriée et cliquez pour développer le tableau et sélectionner un encodeur spécifique et ses poids pré-entraînés (paramètres encoder_name
et encoder_weights
).
Encodeur | Poids | Paramètres, M |
---|---|---|
resnet18 | imagenet / ssl / swsl | 11M |
resnet34 | imagenet | 21M |
resnet50 | imagenet / ssl / swsl | 23M |
resnet101 | imagenet | 42M |
resnet152 | imagenet | 58M |
Encodeur | Poids | Paramètres, 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 |
Encodeur | Poids | Paramètres, 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 |
Encodeur | Poids | Paramètres, 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 |
Encodeur | Poids | Paramètres, 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 | 24 M |
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 |
Encodeur | Poids | Paramètres, M |
---|---|---|
timm-gernet_s | imagenet | 6M |
timm-gernet_m | imagenet | 18M |
timm-gernet_l | imagenet | 28M |
Encodeur | Poids | Paramètres, M |
---|---|---|
senet154 | imagenet | 113M |
se_resnet50 | imagenet | 26M |
se_resnet101 | imagenet | 47M |
se_resnet152 | imagenet | 64 M |
se_resnext50_32x4d | imagenet | 25M |
se_resnext101_32x4d | imagenet | 46M |
Encodeur | Poids | Paramètres, M |
---|---|---|
Timm-skresnet18 | imagenet | 11M |
Timm-skresnet34 | imagenet | 21M |
timm-skresnext50_32x4d | imagenet | 25M |
Encodeur | Poids | Paramètres, M |
---|---|---|
densenet121 | imagenet | 6M |
densenet169 | imagenet | 12M |
densenet201 | imagenet | 18M |
densenet161 | imagenet | 26M |
Encodeur | Poids | Paramètres, M |
---|---|---|
créationresnetv2 | imagenet / imagenet+arrière-plan | 54M |
créationv4 | imagenet / imagenet+arrière-plan | 41M |
exception | imagenet | 22M |
Encodeur | Poids | Paramètres, M |
---|---|---|
efficacenet-b0 | imagenet | 4M |
efficacenet-b1 | imagenet | 6M |
efficacenet-b2 | imagenet | 7M |
efficacenet-b3 | imagenet | 10M |
efficacenet-b4 | imagenet | 17M |
efficacenet-b5 | imagenet | 28M |
efficacenet-b6 | imagenet | 40M |
efficacenet-b7 | imagenet | 63M |
timm-efficacenet-b0 | imagenet / advprop / étudiant bruyant | 4M |
timm-efficacenet-b1 | imagenet / advprop / étudiant bruyant | 6M |
timm-efficacenet-b2 | imagenet / advprop / étudiant bruyant | 7M |
timm-efficacenet-b3 | imagenet / advprop / étudiant bruyant | 10M |
timm-efficacenet-b4 | imagenet / advprop / étudiant bruyant | 17M |
timm-efficacenet-b5 | imagenet / advprop / étudiant bruyant | 28M |
timm-efficacenet-b6 | imagenet / advprop / étudiant bruyant | 40M |
timm-efficacenet-b7 | imagenet / advprop / étudiant bruyant | 63M |
timm-efficacenet-b8 | imagenet / advprop | 84M |
timm-efficacenet-l2 | étudiant bruyant | 474M |
timm-efficacenet-lite0 | imagenet | 4M |
timm-efficacenet-lite1 | imagenet | 5M |
timm-efficacenet-lite2 | imagenet | 6M |
timm-efficacenet-lite3 | imagenet | 8M |
timm-efficacenet-lite4 | imagenet | 13M |
Encodeur | Poids | Paramètres, M |
---|---|---|
mobilenet_v2 | imagenet | 2M |
timm-mobilenetv3_large_075 | imagenet | 1,78M |
timm-mobilenetv3_large_100 | imagenet | 2,97 millions |
timm-mobilenetv3_large_minimal_100 | imagenet | 1,41M |
timm-mobilenetv3_small_075 | imagenet | 0,57M |
timm-mobilenetv3_small_100 | imagenet | 0,93 M |
timm-mobilenetv3_small_minimal_100 | imagenet | 0,43M |
Encodeur | Poids | Paramètres, M |
---|---|---|
dpn68 | imagenet | 11M |
dpn68b | imagenet+5k | 11M |
dpn92 | imagenet+5k | 34M |
dpn98 | imagenet | 58M |
dpn107 | imagenet+5k | 84M |
dpn131 | imagenet | 76M |
Encodeur | Poids | Paramètres, 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 de SegFormer pré-entraîné sur Imagenet ! Peut être utilisé avec d'autres décodeurs du package, vous pouvez combiner Mix Vision Transformer avec Unet, FPN et autres !
Limites:
Encodeur | Poids | Paramètres, M |
---|---|---|
mit_b0 | imagenet | 3M |
mit_b1 | imagenet | 13M |
mit_b2 | imagenet | 24 M |
mit_b3 | imagenet | 44M |
mit_b4 | imagenet | 60M |
mit_b5 | imagenet | 81M |
Le Backbone « sub-one-ms » d'Apple pré-entraîné sur Imagenet ! Peut être utilisé avec tous les décodeurs.
Remarque : dans le dépôt officiel de github, la variante s0 a des num_conv_branches supplémentaires, ce qui conduit à plus de paramètres que s1.
Encodeur | Poids | Paramètres, M |
---|---|---|
mobileone_s0 | imagenet | 4,6 millions |
mobileone_s1 | imagenet | 4,0M |
mobileone_s2 | imagenet | 6,5 millions |
mobileone_s3 | imagenet | 8,8 millions |
mobileone_s4 | imagenet | 13,6 millions |
* ssl
, swsl
- apprentissage semi-supervisé et faiblement supervisé sur ImageNet (repo).
documents
Pytorch Image Models (alias timm) possède de nombreux modèles et interfaces pré-entraînés qui permettent d'utiliser ces modèles comme encodeurs dans smp. Cependant, tous les modèles ne sont pas pris en charge.
features_only
requise pour l'encodeurNombre total d'encodeurs pris en charge : 549
model.encoder
- colonne vertébrale pré-entraînée pour extraire des caractéristiques de différentes résolutions spatialesmodel.decoder
- dépend de l'architecture des modèles ( Unet
/ Linknet
/ PSPNet
/ FPN
)model.segmentation_head
- dernier bloc pour produire le nombre requis de canaux de masque (inclut également le suréchantillonnage et l'activation en option)model.classification_head
- bloc facultatif qui crée une tête de classification au-dessus de l'encodeurmodel.forward(x)
- passe séquentiellement x
via l'encodeur, le décodeur et la tête de segmentation du modèle (et la tête de classification si spécifié) Le paramètre Canaux d'entrée vous permet de créer des modèles qui traitent des tenseurs avec un nombre arbitraire de canaux. Si vous utilisez des poids pré-entraînés à partir d'imagenet, les poids de la première convolution seront réutilisés. Pour le cas à 1 canal, ce serait une somme des poids de la première couche de convolution, sinon les canaux seraient remplis avec des poids comme new_weight[:, i] = pretrained_weight[:, i % 3]
et ensuite mis à l'échelle avec new_weight * 3 / new_in_channels
.
model = smp . FPN ( 'resnet34' , in_channels = 1 )
mask = model ( torch . ones ([ 1 , 1 , 64 , 64 ]))
Tous les modèles prennent en charge les paramètres aux_params
, qui sont définis par défaut sur None
. Si aux_params = None
, la sortie auxiliaire de classification n'est pas créée, sinon le modèle produit non seulement mask
, mais également une sortie label
avec la forme NC
. La tête de classification se compose de couches GlobalPooling->Dropout (facultatif) -> Linéaire-> Activation (facultatif), qui peuvent être configurées par aux_params
comme suit :
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 )
Le paramètre Depth spécifie un certain nombre d'opérations de sous-échantillonnage dans l'encodeur, vous pouvez donc rendre votre modèle plus léger si vous spécifiez depth
plus petite.
model = smp . Unet ( 'resnet34' , encoder_depth = 4 )
Version Python :
$ pip install segmentation-models-pytorch
Dernière version depuis la source :
$ pip install git+https://github.com/qubvel/segmentation_models.pytorch
Le package Segmentation Models
est largement utilisé dans les concours de segmentation d’images. Vous trouverez ici les concours, les noms des gagnants et des liens vers leurs solutions.
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}}
}
Le projet est distribué sous licence MIT