Biblioteca Python con redes neuronales para imágenes
Segmentación basada en PyTorch.
Las principales características de esta biblioteca son:
Visite la página del proyecto Read The Docs o lea el siguiente archivo README para saber más sobre la biblioteca de modelos de segmentación Pytorch (SMP para abreviar)
El modelo de segmentación es solo un torch.nn.Module
de PyTorch, que se puede crear tan fácilmente como:
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)
)
Todos los codificadores tienen pesos previamente entrenados. Preparar sus datos de la misma manera que durante el entrenamiento previo con pesas puede brindarle mejores resultados (puntuación métrica más alta y convergencia más rápida). No es necesario en caso de que entrenes todo el modelo, no sólo el decodificador.
from segmentation_models_pytorch . encoders import get_preprocessing_fn
preprocess_input = get_preprocessing_fn ( 'resnet18' , pretrained = 'imagenet' )
¡Felicidades! ¡Ya terminaste! ¡Ahora puedes entrenar tu modelo con tu marco favorito!
La siguiente es una lista de codificadores admitidos en SMP. Seleccione la familia adecuada de codificadores y haga clic para expandir la tabla y seleccionar un codificador específico y sus pesos previamente entrenados (parámetros encoder_name
y encoder_weights
).
Codificador | Pesos | Params, M. |
---|---|---|
resnet18 | imagenet/ssl/swsl | 11M |
resnet34 | imagenet | 21M |
resnet50 | imagenet/ssl/swsl | 23M |
resnet101 | imagenet | 42M |
resnet152 | imagenet | 58M |
Codificador | Pesos | 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 |
Codificador | Pesos | 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 |
Codificador | Pesos | 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 |
Codificador | Pesos | 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 |
Codificador | Pesos | Params, M. |
---|---|---|
timm-gernet_s | imagenet | 6M |
timm-gernet_m | imagenet | 18M |
timm-gernet_l | imagenet | 28M |
Codificador | Pesos | 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 |
Codificador | Pesos | Params, M. |
---|---|---|
timm-skresnet18 | imagenet | 11M |
timm-skresnet34 | imagenet | 21M |
timm-skresnext50_32x4d | imagenet | 25M |
Codificador | Pesos | Params, M. |
---|---|---|
densanet121 | imagenet | 6M |
densanet169 | imagenet | 12M |
densanet201 | imagenet | 18M |
densanet161 | imagenet | 26M |
Codificador | Pesos | Params, M. |
---|---|---|
inicioresnetv2 | imagenet / imagenet+fondo | 54M |
iniciov4 | imagenet / imagenet+fondo | 41M |
excepción | imagenet | 22M |
Codificador | Pesos | Params, M. |
---|---|---|
eficientenet-b0 | imagenet | 4M |
eficientenet-b1 | imagenet | 6M |
eficientenet-b2 | imagenet | 7M |
eficientenet-b3 | imagenet | 10M |
eficientenet-b4 | imagenet | 17M |
eficientenet-b5 | imagenet | 28M |
eficientenet-b6 | imagenet | 40M |
eficientenet-b7 | imagenet | 63M |
timm-eficientenet-b0 | imagenet / advprop / estudiante-ruidoso | 4M |
timm-eficientenet-b1 | imagenet / advprop / estudiante-ruidoso | 6M |
timm-eficientenet-b2 | imagenet / advprop / estudiante-ruidoso | 7M |
timm-eficientenet-b3 | imagenet / advprop / estudiante-ruidoso | 10M |
timm-eficientenet-b4 | imagenet / advprop / estudiante-ruidoso | 17M |
timm-eficientenet-b5 | imagenet / advprop / estudiante-ruidoso | 28M |
timm-eficientenet-b6 | imagenet / advprop / estudiante-ruidoso | 40M |
timm-eficientenet-b7 | imagenet / advprop / estudiante-ruidoso | 63M |
timm-eficientenet-b8 | imagenet/advprop | 84M |
timm-eficientenet-l2 | estudiante ruidoso | 474M |
timm-eficientenet-lite0 | imagenet | 4M |
timm-eficientenet-lite1 | imagenet | 5M |
timm-eficientenet-lite2 | imagenet | 6M |
timm-eficientenet-lite3 | imagenet | 8M |
timm-eficientenet-lite4 | imagenet | 13M |
Codificador | Pesos | Params, M. |
---|---|---|
móvilnet_v2 | imagenet | 2M |
timm-mobilenetv3_large_075 | imagenet | 1,78 millones |
timm-mobilenetv3_large_100 | imagenet | 2,97 millones |
timm-mobilenetv3_large_minimal_100 | imagenet | 1,41 millones |
timm-mobilenetv3_small_075 | imagenet | 0,57 millones |
timm-mobilenetv3_small_100 | imagenet | 0,93 millones |
timm-mobilenetv3_small_minimal_100 | imagenet | 0,43 millones |
Codificador | Pesos | Params, M. |
---|---|---|
dpn68 | imagenet | 11M |
dpn68b | imagen+5k | 11M |
dpn92 | imagen+5k | 34M |
dpn98 | imagenet | 58M |
dpn107 | imagen+5k | 84M |
dpn131 | imagenet | 76M |
Codificador | Pesos | 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 de SegFormer previamente entrenado en Imagenet! Se puede utilizar con otros decodificadores del paquete, ¡puedes combinar Mix Vision Transformer con Unet, FPN y otros!
Limitaciones:
Codificador | Pesos | 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 |
¡La columna vertebral "sub-one-ms" de Apple está preentrenada en Imagenet! Se puede utilizar con todos los decodificadores.
Nota: En el repositorio oficial de github, la variante s0 tiene num_conv_branches adicionales, lo que genera más parámetros que s1.
Codificador | Pesos | Params, M. |
---|---|---|
móvilone_s0 | imagenet | 4,6 millones |
móvilone_s1 | imagenet | 4,0 millones |
móvilone_s2 | imagenet | 6,5 millones |
móvilone_s3 | imagenet | 8,8 millones |
móvilone_s4 | imagenet | 13,6 millones |
* ssl
, swsl
: aprendizaje semisupervisado y débilmente supervisado en ImageNet (repositorio).
documentos
Pytorch Image Models (también conocido como timm) tiene muchos modelos previamente entrenados y una interfaz que permite usar estos modelos como codificadores en smp; sin embargo, no todos los modelos son compatibles.
features_only
que se requiere para el codificador.Número total de codificadores compatibles: 549
model.encoder
: columna vertebral previamente entrenada para extraer características de diferente resolución espacialmodel.decoder
: depende de la arquitectura del modelo ( Unet
/ Linknet
/ PSPNet
/ FPN
)model.segmentation_head
: último bloque para producir la cantidad requerida de canales de máscara (incluye también muestreo ascendente y activación opcionales)model.classification_head
: bloque opcional que crea un cabezal de clasificación encima del codificadormodel.forward(x)
: pasa x
secuencialmente a través del codificador, decodificador y cabezal de segmentación del modelo (y el cabezal de clasificación si se especifica) El parámetro de canales de entrada le permite crear modelos que procesan tensores con un número arbitrario de canales. Si utiliza pesos previamente entrenados de imagenet, se reutilizarán los pesos de la primera convolución. Para el caso de 1 canal, sería una suma de pesos de la primera capa de convolución; de lo contrario, los canales se rellenarían con pesos como new_weight[:, i] = pretrained_weight[:, i % 3]
y luego se escalarían con new_weight * 3 / new_in_channels
.
model = smp . FPN ( 'resnet34' , in_channels = 1 )
mask = model ( torch . ones ([ 1 , 1 , 64 , 64 ]))
Todos los modelos admiten los parámetros aux_params
, que están configurados de forma predeterminada en None
. Si aux_params = None
, entonces no se crea la salida auxiliar de clasificación; de lo contrario, el modelo no solo produce mask
, sino también una salida label
con forma NC
. El encabezado de clasificación consta de capas GlobalPooling->Dropout(opcional)->Lineal->Activation(opcional), que se pueden configurar mediante aux_params
de la siguiente manera:
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 )
El parámetro de profundidad especifica una cantidad de operaciones de reducción de resolución en el codificador, por lo que puede hacer que su modelo sea más claro si especifica depth
más pequeña.
model = smp . Unet ( 'resnet34' , encoder_depth = 4 )
Versión PyPI:
$ pip install segmentation-models-pytorch
Última versión de la fuente:
$ pip install git+https://github.com/qubvel/segmentation_models.pytorch
El paquete Segmentation Models
se utiliza ampliamente en las competiciones de segmentación de imágenes. Aquí puede encontrar concursos, nombres de los ganadores y enlaces a sus soluciones.
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}}
}
El proyecto se distribuye bajo Licencia MIT.