Библиотека Python с нейронными сетями для изображений
Сегментация на основе PyTorch.
Основные особенности этой библиотеки:
Посетите страницу Read The Docs Project или прочитайте следующий файл README, чтобы узнать больше о библиотеке 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
).
Кодер | Веса | Парамс, М |
---|---|---|
resnet18 | imagenet/ssl/ssl | 11М |
resnet34 | имиджевая сеть | 21М |
resnet50 | imagenet/ssl/ssl | 23М |
resnet101 | имиджевая сеть | 42М |
resnet152 | имиджевая сеть | 58М |
Кодер | Веса | Парамс, М |
---|---|---|
resnext50_32x4d | imagenet/ssl/ssl | 22М |
resnext101_32x4d | SSL/SSL | 42М |
resnext101_32x8d | imagenet/instagram/ssl/ssl | 86М |
resnext101_32x16d | инстаграм/ssl/ssl | 191М |
resnext101_32x32d | инстаграм | 466М |
resnext101_32x48d | инстаграм | 826М |
Кодер | Веса | Парамс, М |
---|---|---|
Тимм-resnest14d | имиджевая сеть | 8М |
Тимм-resnest26d | имиджевая сеть | 15М |
Тимм-resnest50d | имиджевая сеть | 25М |
Тимм-resnest101e | имиджевая сеть | 46М |
Тимм-resnest200e | имиджевая сеть | 68М |
Тимм-resnest269e | имиджевая сеть | 108М |
Тимм-resnest50d_4s2x40d | имиджевая сеть | 28М |
Тимм-resnest50d_1s4x24d | имиджевая сеть | 23М |
Кодер | Веса | Парамс, М |
---|---|---|
Тимм-res2net50_26w_4s | имиджевая сеть | 23М |
Тимм-res2net101_26w_4s | имиджевая сеть | 43М |
Тимм-res2net50_26w_6s | имиджевая сеть | 35М |
Тимм-res2net50_26w_8s | имиджевая сеть | 46М |
Тимм-res2net50_48w_2s | имиджевая сеть | 23М |
Тимм-res2net50_14w_8s | имиджевая сеть | 23М |
Тимм-res2next50 | имиджевая сеть | 22М |
Кодер | Веса | Парамс, М |
---|---|---|
Тимм-regnetx_002 | имиджевая сеть | 2М |
Тимм-regnetx_004 | имиджевая сеть | 4М |
Тимм-regnetx_006 | имиджевая сеть | 5М |
Тимм-regnetx_008 | имиджевая сеть | 6М |
Тимм-regnetx_016 | имиджевая сеть | 8М |
Тимм-regnetx_032 | имиджевая сеть | 14М |
Тимм-regnetx_040 | имиджевая сеть | 20М |
Тимм-regnetx_064 | имиджевая сеть | 24М |
Тимм-regnetx_080 | имиджевая сеть | 37М |
Тимм-regnetx_120 | имиджевая сеть | 43М |
Тимм-regnetx_160 | имиджевая сеть | 52М |
Тимм-regnetx_320 | имиджевая сеть | 105М |
Тимм-regnety_002 | имиджевая сеть | 2М |
Тимм-regnety_004 | имиджевая сеть | 3М |
timm-regnety_006 | имиджевая сеть | 5М |
timm-regnety_008 | имиджевая сеть | 5М |
Тимм-regnety_016 | имиджевая сеть | 10М |
Тимм-regnety_032 | имиджевая сеть | 17М |
Тимм-regnety_040 | имиджевая сеть | 19М |
Тимм-regnety_064 | имиджевая сеть | 29М |
Тимм-regnety_080 | имиджевая сеть | 37М |
Тимм-regnety_120 | имиджевая сеть | 49М |
Тимм-regnety_160 | имиджевая сеть | 80М |
Тимм-regnety_320 | имиджевая сеть | 141М |
Кодер | Веса | Парамс, М |
---|---|---|
Тимм-gernet_s | имиджевая сеть | 6М |
Тимм-gernet_m | имиджевая сеть | 18М |
Тимм-gernet_l | имиджевая сеть | 28М |
Кодер | Веса | Парамс, М |
---|---|---|
Сенет154 | имиджевая сеть | 113М |
se_resnet50 | имиджевая сеть | 26М |
se_resnet101 | имиджевая сеть | 47М |
se_resnet152 | имиджевая сеть | 64М |
se_resnext50_32x4d | имиджевая сеть | 25М |
se_resnext101_32x4d | имиджевая сеть | 46М |
Кодер | Веса | Парамс, М |
---|---|---|
Тимм-skresnet18 | имиджевая сеть | 11М |
Тимм-skresnet34 | имиджевая сеть | 21М |
Тимм-skresnext50_32x4d | имиджевая сеть | 25М |
Кодер | Веса | Парамс, М |
---|---|---|
Densnet121 | имиджевая сеть | 6М |
Densnet169 | имиджевая сеть | 12М |
Densnet201 | имиджевая сеть | 18М |
Densnet161 | имиджевая сеть | 26М |
Кодер | Веса | Парамс, М |
---|---|---|
началоresnetv2 | imagenet / imagenet+фон | 54М |
началоv4 | imagenet / imagenet+фон | 41М |
исключение | имиджевая сеть | 22М |
Кодер | Веса | Парамс, М |
---|---|---|
effectnet-b0 | имиджевая сеть | 4М |
effectnet-b1 | имиджевая сеть | 6М |
effectnet-b2 | имиджевая сеть | 7М |
effectnet-b3 | имиджевая сеть | 10М |
effectnet-b4 | имиджевая сеть | 17М |
effectnet-b5 | имиджевая сеть | 28М |
effectnet-b6 | имиджевая сеть | 40М |
effectnet-b7 | имиджевая сеть | 63М |
Тимм-эффективныйnet-b0 | imagenet/advprop/шумный студент | 4М |
Тимм-эффективныйnet-b1 | imagenet/advprop/шумный студент | 6М |
Тимм-эффективныйnet-b2 | imagenet/advprop/шумный студент | 7М |
Тимм-эффективныйnet-b3 | imagenet/advprop/шумный студент | 10М |
Тимм-эффективныйnet-b4 | imagenet/advprop/шумный студент | 17М |
Тимм-эффективныйnet-b5 | imagenet/advprop/шумный студент | 28М |
Тимм-эффективныйnet-b6 | imagenet/advprop/шумный студент | 40М |
Тимм-эффективныйnet-b7 | imagenet/advprop/шумный студент | 63М |
Тимм-эффективныйnet-b8 | imagenet/advprop | 84М |
Тимм-эффективныйnet-l2 | шумный студент | 474М |
Тимм-эффективныйnet-lite0 | имиджевая сеть | 4М |
Тимм-эффективныйnet-lite1 | имиджевая сеть | 5М |
Тимм-эффективныйnet-lite2 | имиджевая сеть | 6М |
Тимм-эффективныйnet-lite3 | имиджевая сеть | 8М |
Тимм-эффективныйnet-lite4 | имиджевая сеть | 13М |
Кодер | Веса | Парамс, М |
---|---|---|
mobilenet_v2 | имиджевая сеть | 2М |
timm-mobilenetv3_large_075 | имиджевая сеть | 1,78 млн. |
timm-mobilenetv3_large_100 | имиджевая сеть | 2,97 млн. |
timm-mobilenetv3_large_minimal_100 | имиджевая сеть | 1,41 млн. |
timm-mobilenetv3_small_075 | имиджевая сеть | 0,57М |
тимм-mobilenetv3_small_100 | имиджевая сеть | 0,93М |
timm-mobilenetv3_small_minimal_100 | имиджевая сеть | 0,43М |
Кодер | Веса | Парамс, М |
---|---|---|
dpn68 | имиджевая сеть | 11М |
dpn68b | имидженет+5к | 11М |
dpn92 | имидженет+5к | 34М |
dpn98 | имиджевая сеть | 58М |
dpn107 | имидженет+5к | 84М |
dpn131 | имиджевая сеть | 76М |
Кодер | Веса | Парамс, М |
---|---|---|
vgg11 | имиджевая сеть | 9М |
vgg11_bn | имиджевая сеть | 9М |
vgg13 | имиджевая сеть | 9М |
vgg13_bn | имиджевая сеть | 9М |
vgg16 | имиджевая сеть | 14М |
vgg16_bn | имиджевая сеть | 14М |
vgg19 | имиджевая сеть | 20М |
vgg19_bn | имиджевая сеть | 20М |
Магистраль от 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 Apple «менее одной миллисекунды», предварительно обученный в Imagenet! Может использоваться со всеми декодерами.
Примечание. В официальном репозитории GitHub вариант s0 имеет дополнительные num_conv_branches, что приводит к большему количеству параметров, чем s1.
Кодер | Веса | Парамс, М |
---|---|---|
mobileone_s0 | имиджевая сеть | 4,6 млн. |
mobileone_s1 | имиджевая сеть | 4.0М |
mobileone_s2 | имиджевая сеть | 6,5 млн. |
mobileone_s3 | имиджевая сеть | 8,8 млн. |
mobileone_s4 | имиджевая сеть | 13,6 млн. |
* ssl
, swsl
— полуконтролируемое и слабоконтролируемое обучение в ImageNet (репо).
документы
Pytorch Image Models (также известный как 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 определяет количество операций понижающей дискретизации в кодировщике, поэтому вы можете сделать свою модель легче, если укажете меньшую 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.