Biblioteca Python com Redes Neurais para Imagem
Segmentação baseada em PyTorch.
As principais características desta biblioteca são:
Visite a página do projeto Read The Docs ou leia o README a seguir para saber mais sobre a biblioteca Segmentation Models Pytorch (SMP, abreviadamente)
O modelo de segmentação é apenas um PyTorch torch.nn.Module
, que pode ser criado tão facilmente quanto:
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 os codificadores possuem pesos pré-treinados. Preparar seus dados da mesma forma que durante o pré-treinamento de pesos pode fornecer melhores resultados (pontuação de métrica mais alta e convergência mais rápida). Não é necessário caso você treine todo o modelo, não apenas o decodificador.
from segmentation_models_pytorch . encoders import get_preprocessing_fn
preprocess_input = get_preprocessing_fn ( 'resnet18' , pretrained = 'imagenet' )
Parabéns! Você terminou! Agora você pode treinar seu modelo com sua estrutura favorita!
A seguir está uma lista de codificadores suportados no SMP. Selecione a família apropriada de codificadores e clique para expandir a tabela e selecionar um codificador específico e seus pesos pré-treinados (parâmetros encoder_name
e encoder_weights
).
Codificador | Pesos | Params, M |
---|---|---|
resnet18 | imagenet/ssl/ssl | 11 milhões |
resnet34 | imagemnet | 21 milhões |
resnet50 | imagenet/ssl/ssl | 23 milhões |
resnet101 | imagemnet | 42 milhões |
resnet152 | imagemnet | 58 milhões |
Codificador | Pesos | Params, M |
---|---|---|
respróximo50_32x4d | imagenet/ssl/ssl | 22 milhões |
resnext101_32x4d | ssl/ssl | 42 milhões |
resnext101_32x8d | imagenet / instagram / ssl / swsl | 86 milhões |
resnext101_32x16d | instagram / ssl / swsl | 191 milhões |
resnext101_32x32d | 466 milhões | |
resnext101_32x48d | 826 milhões |
Codificador | Pesos | Params, M |
---|---|---|
timm-resnest14d | imagemnet | 8 milhões |
timm-resnest26d | imagemnet | 15 milhões |
timm-resnest50d | imagemnet | 25 milhões |
timm-resnest101e | imagemnet | 46 milhões |
timm-resnest200e | imagemnet | 68 milhões |
timm-resnest269e | imagemnet | 108 milhões |
timm-resnest50d_4s2x40d | imagemnet | 28 milhões |
timm-resnest50d_1s4x24d | imagemnet | 23 milhões |
Codificador | Pesos | Params, M |
---|---|---|
timm-res2net50_26w_4s | imagemnet | 23 milhões |
timm-res2net101_26w_4s | imagemnet | 43 milhões |
timm-res2net50_26w_6s | imagemnet | 35 milhões |
timm-res2net50_26w_8s | imagemnet | 46 milhões |
timm-res2net50_48w_2s | imagemnet | 23 milhões |
timm-res2net50_14w_8s | imagemnet | 23 milhões |
timm-res2next50 | imagemnet | 22 milhões |
Codificador | Pesos | Params, M |
---|---|---|
timm-regnetx_002 | imagemnet | 2 milhões |
timm-regnetx_004 | imagemnet | 4M |
timm-regnetx_006 | imagemnet | 5 milhões |
timm-regnetx_008 | imagemnet | 6 milhões |
timm-regnetx_016 | imagemnet | 8 milhões |
timm-regnetx_032 | imagemnet | 14 milhões |
timm-regnetx_040 | imagemnet | 20 milhões |
timm-regnetx_064 | imagemnet | 24 milhões |
timm-regnetx_080 | imagemnet | 37 milhões |
timm-regnetx_120 | imagemnet | 43 milhões |
timm-regnetx_160 | imagemnet | 52 milhões |
timm-regnetx_320 | imagemnet | 105 milhões |
timm-regnety_002 | imagemnet | 2 milhões |
timm-regnety_004 | imagemnet | 3M |
timm-regnety_006 | imagemnet | 5 milhões |
timm-regnety_008 | imagemnet | 5 milhões |
timm-regnety_016 | imagemnet | 10 milhões |
timm-regnety_032 | imagemnet | 17 milhões |
timm-regnety_040 | imagemnet | 19M |
timm-regnety_064 | imagemnet | 29 milhões |
timm-regnety_080 | imagemnet | 37 milhões |
timm-regnety_120 | imagemnet | 49 milhões |
timm-regnety_160 | imagemnet | 80 milhões |
timm-regnety_320 | imagemnet | 141 milhões |
Codificador | Pesos | Params, M |
---|---|---|
timm-gernet_s | imagemnet | 6 milhões |
timm-gernet_m | imagemnet | 18 milhões |
timm-gernet_l | imagemnet | 28 milhões |
Codificador | Pesos | Params, M |
---|---|---|
senet154 | imagemnet | 113 milhões |
se_resnet50 | imagemnet | 26 milhões |
se_resnet101 | imagemnet | 47 milhões |
se_resnet152 | imagemnet | 64 milhões |
se_resnext50_32x4d | imagemnet | 25 milhões |
se_resnext101_32x4d | imagemnet | 46 milhões |
Codificador | Pesos | Params, M |
---|---|---|
Timm-skresnet18 | imagemnet | 11 milhões |
Timm-skresnet34 | imagemnet | 21 milhões |
timm-skresnext50_32x4d | imagemnet | 25 milhões |
Codificador | Pesos | Params, M |
---|---|---|
densanet121 | imagemnet | 6 milhões |
densanet169 | imagemnet | 12 milhões |
Densenet201 | imagemnet | 18 milhões |
densanet161 | imagemnet | 26 milhões |
Codificador | Pesos | Params, M |
---|---|---|
inícioresnetv2 | imagenet / imagenet+fundo | 54 milhões |
iníciov4 | imagenet / imagenet+fundo | 41 milhões |
exceção | imagemnet | 22 milhões |
Codificador | Pesos | Params, M |
---|---|---|
eficientenet-b0 | imagemnet | 4M |
eficientenet-b1 | imagemnet | 6 milhões |
eficientenet-b2 | imagemnet | 7 milhões |
eficientenet-b3 | imagemnet | 10 milhões |
eficientenet-b4 | imagemnet | 17 milhões |
eficientenet-b5 | imagemnet | 28 milhões |
eficientenet-b6 | imagemnet | 40 milhões |
eficientenet-b7 | imagemnet | 63 milhões |
timm-eficientenet-b0 | imagenet / advprop / estudante barulhento | 4M |
timm-eficientenet-b1 | imagenet / advprop / estudante barulhento | 6 milhões |
timm-eficientenet-b2 | imagenet / advprop / estudante barulhento | 7 milhões |
timm-eficientenet-b3 | imagenet / advprop / estudante barulhento | 10 milhões |
timm-eficientenet-b4 | imagenet / advprop / estudante barulhento | 17 milhões |
timm-eficientenet-b5 | imagenet / advprop / estudante barulhento | 28 milhões |
timm-eficientenet-b6 | imagenet / advprop / estudante barulhento | 40 milhões |
timm-eficientenet-b7 | imagenet / advprop / estudante barulhento | 63 milhões |
timm-eficientenet-b8 | imagenet/advprop | 84 milhões |
timm-eficientenet-l2 | estudante barulhento | 474 milhões |
timm-eficientenet-lite0 | imagemnet | 4M |
timm-eficientenet-lite1 | imagemnet | 5 milhões |
timm-eficientenet-lite2 | imagemnet | 6 milhões |
timm-eficientenet-lite3 | imagemnet | 8 milhões |
timm-eficientenet-lite4 | imagemnet | 13 milhões |
Codificador | Pesos | Params, M |
---|---|---|
rede móvel_v2 | imagemnet | 2 milhões |
timm-mobilenetv3_large_075 | imagemnet | 1,78 milhão |
timm-mobilenetv3_large_100 | imagemnet | 2,97 milhões |
timm-mobilenetv3_large_minimal_100 | imagemnet | 1,41 milhão |
timm-mobilenetv3_small_075 | imagemnet | 0,57 milhões |
timm-mobilenetv3_small_100 | imagemnet | 0,93 milhões |
timm-mobilenetv3_small_minimal_100 | imagemnet | 0,43 milhões |
Codificador | Pesos | Params, M |
---|---|---|
dpn68 | imagemnet | 11 milhões |
dpn68b | imagemnet+5k | 11 milhões |
dpn92 | imagemnet+5k | 34 milhões |
dpn98 | imagemnet | 58 milhões |
dpn107 | imagemnet+5k | 84 milhões |
dpn131 | imagemnet | 76 milhões |
Codificador | Pesos | Params, M |
---|---|---|
vgg11 | imagemnet | 9 milhões |
vgg11_bn | imagemnet | 9 milhões |
vgg13 | imagemnet | 9 milhões |
vgg13_bn | imagemnet | 9 milhões |
vgg16 | imagemnet | 14 milhões |
vgg16_bn | imagemnet | 14 milhões |
vgg19 | imagemnet | 20 milhões |
vgg19_bn | imagemnet | 20 milhões |
Backbone do SegFormer pré-treinado no Imagenet! Pode ser usado com outros decodificadores do pacote, você pode combinar Mix Vision Transformer com Unet, FPN e outros!
Limitações:
Codificador | Pesos | Params, M |
---|---|---|
mit_b0 | imagemnet | 3M |
mit_b1 | imagemnet | 13 milhões |
mit_b2 | imagemnet | 24 milhões |
mit_b3 | imagemnet | 44 milhões |
mit_b4 | imagemnet | 60 milhões |
mit_b5 | imagemnet | 81 milhões |
Backbone "sub-one-ms" da Apple pré-treinado no Imagenet! Pode ser usado com todos os decodificadores.
Nota: No repositório oficial do github, a variante s0 possui num_conv_branches adicionais, levando a mais parâmetros do que s1.
Codificador | Pesos | Params, M |
---|---|---|
mobileone_s0 | imagemnet | 4,6 milhões |
mobileone_s1 | imagemnet | 4,0 milhões |
celular_s2 | imagemnet | 6,5 milhões |
mobileone_s3 | imagemnet | 8,8 milhões |
mobileone_s4 | imagemnet | 13,6 milhões |
* ssl
, swsl
- aprendizagem semissupervisionada e fracamente supervisionada no ImageNet (repo).
documentos
Pytorch Image Models (também conhecido como timm) possui vários modelos pré-treinados e interface que permite usar esses modelos como codificadores em smp, porém, nem todos os modelos são suportados
features_only
implementada, necessária para o codificadorNúmero total de codificadores suportados: 549
model.encoder
- backbone pré-treinado para extrair recursos de diferentes resoluções espaciaismodel.decoder
- depende da arquitetura dos modelos ( Unet
/ Linknet
/ PSPNet
/ FPN
)model.segmentation_head
- último bloco para produzir o número necessário de canais de máscara (inclui também upsampling e ativação opcionais)model.classification_head
- bloco opcional que cria um cabeçalho de classificação no topo do codificadormodel.forward(x)
- passa x
sequencialmente pelo codificador, decodificador e cabeçote de segmentação do modelo (e cabeçote de classificação, se especificado) O parâmetro canais de entrada permite criar modelos que processam tensores com número arbitrário de canais. Se você usar pesos pré-treinados do imagenet - os pesos da primeira convolução serão reutilizados. Para o caso de 1 canal, seria uma soma dos pesos da primeira camada de convolução, caso contrário, os canais seriam preenchidos com pesos como new_weight[:, i] = pretrained_weight[:, i % 3]
e então dimensionados com new_weight * 3 / new_in_channels
.
model = smp . FPN ( 'resnet34' , in_channels = 1 )
mask = model ( torch . ones ([ 1 , 1 , 64 , 64 ]))
Todos os modelos suportam parâmetros aux_params
, cujo padrão é definido como None
. Se aux_params = None
então a saída auxiliar de classificação não é criada, caso contrário o modelo produz não apenas mask
, mas também saída label
com formato NC
. O cabeçalho de classificação consiste em camadas GlobalPooling->Dropout(opcional)->Linear->Activation(opcional), que podem ser configuradas por aux_params
da seguinte forma:
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 )
O parâmetro Depth especifica uma série de operações de redução da resolução no codificador, para que você possa tornar seu modelo mais leve se especificar depth
menor.
model = smp . Unet ( 'resnet34' , encoder_depth = 4 )
Versão PyPI:
$ pip install segmentation-models-pytorch
Versão mais recente da fonte:
$ pip install git+https://github.com/qubvel/segmentation_models.pytorch
O pacote Segmentation Models
é amplamente utilizado em competições de segmentação de imagens. Aqui você encontra concursos, nomes dos vencedores e links para suas soluções.
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}}
}
O projeto é distribuído sob licença MIT