이미지용 신경망이 포함된 Python 라이브러리
PyTorch를 기반으로 한 세분화.
이 라이브러리의 주요 기능은 다음과 같습니다.
Segmentation Models Pytorch(간단히 SMP) 라이브러리에 대해 자세히 알아보려면 Docs 프로젝트 페이지 읽기를 방문하거나 다음 README를 읽어보세요.
분할 모델은 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 | 이미지넷/ssl/swsl | 11M |
resnet34 | 이미지넷 | 21M |
resnet50 | 이미지넷/ssl/swsl | 23M |
resnet101 | 이미지넷 | 42M |
resnet152 | 이미지넷 | 58M |
인코더 | 가중치 | 파람스, M |
---|---|---|
resnext50_32x4d | 이미지넷/ssl/swsl | 22M |
resnext101_32x4d | SSL / SWSL | 42M |
resnext101_32x8d | 이미지넷/인스타그램/ssl/swsl | 86M |
resnext101_32x16d | 인스타그램/ssl/swsl | 191M |
resnext101_32x32d | 인스타그램 | 466M |
resnext101_32x48d | 인스타그램 | 826M |
인코더 | 가중치 | 파람스, 엠 |
---|---|---|
timm-restest14d | 이미지넷 | 8M |
timm-resnest26d | 이미지넷 | 15M |
timm-restest50d | 이미지넷 | 25M |
timm-resnest101e | 이미지넷 | 46M |
timm-resnest200e | 이미지넷 | 68M |
timm-resnest269e | 이미지넷 | 1억8백만 |
timm-resnest50d_4s2x40d | 이미지넷 | 28M |
timm-resnest50d_1s4x24d | 이미지넷 | 23M |
인코더 | 가중치 | 파람스, M |
---|---|---|
timm-res2net50_26w_4s | 이미지넷 | 23M |
timm-res2net101_26w_4s | 이미지넷 | 43M |
timm-res2net50_26w_6s | 이미지넷 | 35M |
timm-res2net50_26w_8s | 이미지넷 | 46M |
timm-res2net50_48w_2s | 이미지넷 | 23M |
timm-res2net50_14w_8s | 이미지넷 | 23M |
timm-res2next50 | 이미지넷 | 22M |
인코더 | 가중치 | 파람스, 엠 |
---|---|---|
timm-regnetx_002 | 이미지넷 | 2M |
timm-regnetx_004 | 이미지넷 | 4M |
timm-regnetx_006 | 이미지넷 | 5M |
timm-regnetx_008 | 이미지넷 | 6M |
timm-regnetx_016 | 이미지넷 | 8M |
timm-regnetx_032 | 이미지넷 | 14M |
timm-regnetx_040 | 이미지넷 | 20M |
timm-regnetx_064 | 이미지넷 | 24M |
timm-regnetx_080 | 이미지넷 | 37M |
timm-regnetx_120 | 이미지넷 | 43M |
timm-regnetx_160 | 이미지넷 | 52M |
timm-regnetx_320 | 이미지넷 | 1억 5백만 |
timm-regnety_002 | 이미지넷 | 2M |
timm-regnety_004 | 이미지넷 | 3M |
timm-regnety_006 | 이미지넷 | 5M |
timm-regnety_008 | 이미지넷 | 5M |
timm-regnety_016 | 이미지넷 | 10M |
timm-regnety_032 | 이미지넷 | 17M |
timm-regnety_040 | 이미지넷 | 19M |
timm-regnety_064 | 이미지넷 | 29M |
timm-regnety_080 | 이미지넷 | 37M |
timm-regnety_120 | 이미지넷 | 49M |
timm-regnety_160 | 이미지넷 | 80M |
timm-regnety_320 | 이미지넷 | 141M |
인코더 | 가중치 | 파람스, 엠 |
---|---|---|
timm-gernet_s | 이미지넷 | 6M |
timm-gernet_m | 이미지넷 | 18M |
timm-gernet_l | 이미지넷 | 28M |
인코더 | 가중치 | 파람스, M |
---|---|---|
senet154 | 이미지넷 | 113M |
se_resnet50 | 이미지넷 | 26M |
se_resnet101 | 이미지넷 | 47M |
se_resnet152 | 이미지넷 | 64M |
se_resnext50_32x4d | 이미지넷 | 25M |
se_resnext101_32x4d | 이미지넷 | 46M |
인코더 | 가중치 | 파람스, 엠 |
---|---|---|
timm-skresnet18 | 이미지넷 | 11M |
timm-skresnet34 | 이미지넷 | 21M |
timm-skresnext50_32x4d | 이미지넷 | 25M |
인코더 | 가중치 | 파람스, M |
---|---|---|
덴스넷121 | 이미지넷 | 6M |
덴스넷169 | 이미지넷 | 12M |
덴스넷201 | 이미지넷 | 18M |
덴스넷161 | 이미지넷 | 26M |
인코더 | 가중치 | 파람스, 엠 |
---|---|---|
처음resnetv2 | 이미지넷 / 이미지넷+배경 | 54M |
시작v4 | 이미지넷 / 이미지넷+배경 | 41M |
예외 | 이미지넷 | 22M |
인코더 | 가중치 | 파람스, M |
---|---|---|
효율적인net-b0 | 이미지넷 | 4M |
효율적넷-b1 | 이미지넷 | 6M |
효율적인net-b2 | 이미지넷 | 700만 |
효율적넷-b3 | 이미지넷 | 10M |
효율적인net-b4 | 이미지넷 | 17M |
효율적넷-b5 | 이미지넷 | 28M |
효율적넷-b6 | 이미지넷 | 40M |
효율적인넷-b7 | 이미지넷 | 63M |
timm-효율적net-b0 | imagenet/advprop/noisy-student | 4M |
timm-효율적넷-b1 | imagenet/advprop/noisy-student | 6M |
timm-효율적인net-b2 | imagenet/advprop/noisy-student | 700만 |
timm-효율적인net-b3 | imagenet/advprop/noisy-student | 10M |
timm-효율적인net-b4 | imagenet/advprop/noisy-student | 17M |
timm-효율적인net-b5 | imagenet/advprop/noisy-student | 28M |
timm-효율적인net-b6 | imagenet/advprop/noisy-student | 40M |
timm-효율적인net-b7 | imagenet/advprop/noisy-student | 63M |
timm-효율적인net-b8 | 이미지넷/advprop | 84M |
timm-효율적net-l2 | 시끄러운 학생 | 474M |
timm-효율적인net-lite0 | 이미지넷 | 4M |
timm-효율적인net-lite1 | 이미지넷 | 5M |
timm-효율적인net-lite2 | 이미지넷 | 6M |
timm-효율적인net-lite3 | 이미지넷 | 8M |
timm-효율적인net-lite4 | 이미지넷 | 13M |
인코더 | 가중치 | 파람스, M |
---|---|---|
mobilenet_v2 | 이미지넷 | 2M |
timm-mobilenetv3_large_075 | 이미지넷 | 178만 |
timm-mobilenetv3_large_100 | 이미지넷 | 297만 |
timm-mobilenetv3_large_minimal_100 | 이미지넷 | 141만 |
timm-mobilenetv3_small_075 | 이미지넷 | 0.57M |
timm-mobilenetv3_small_100 | 이미지넷 | 0.93M |
timm-mobilenetv3_small_minimal_100 | 이미지넷 | 0.43M |
인코더 | 가중치 | 파람스, M |
---|---|---|
dpn68 | 이미지넷 | 11M |
dpn68b | 이미지넷+5k | 11M |
dpn92 | 이미지넷+5k | 34M |
dpn98 | 이미지넷 | 58M |
dpn107 | 이미지넷+5k | 84M |
dpn131 | 이미지넷 | 76M |
인코더 | 가중치 | 파람스, 엠 |
---|---|---|
vgg11 | 이미지넷 | 9M |
vgg11_bn | 이미지넷 | 9M |
vgg13 | 이미지넷 | 9M |
vgg13_bn | 이미지넷 | 9M |
vgg16 | 이미지넷 | 14M |
vgg16_bn | 이미지넷 | 14M |
vgg19 | 이미지넷 | 20M |
vgg19_bn | 이미지넷 | 20M |
Imagenet에서 사전 훈련된 SegFormer의 백본! 패키지의 다른 디코더와 함께 사용할 수 있으며 Mix Vision Transformer를 Unet, FPN 등과 결합할 수 있습니다!
제한사항:
인코더 | 가중치 | 파람스, M |
---|---|---|
mit_b0 | 이미지넷 | 3M |
mit_b1 | 이미지넷 | 13M |
mit_b2 | 이미지넷 | 24M |
mit_b3 | 이미지넷 | 44M |
mit_b4 | 이미지넷 | 60M |
mit_b5 | 이미지넷 | 81M |
Imagenet에서 사전 훈련된 Apple의 "sub-one-ms" 백본! 모든 디코더와 함께 사용할 수 있습니다.
참고: 공식 github 저장소에서 s0 변형에는 추가 num_conv_branches가 있어 s1보다 더 많은 매개변수가 발생합니다.
인코더 | 가중치 | 파람스, 엠 |
---|---|---|
mobileone_s0 | 이미지넷 | 460만 |
mobileone_s1 | 이미지넷 | 4.0M |
mobileone_s2 | 이미지넷 | 6.5M |
mobileone_s3 | 이미지넷 | 880만 |
mobileone_s4 | 이미지넷 | 13.6M |
* ssl
, swsl
- ImageNet(repo)의 준지도 및 약한 지도 학습.
문서
Pytorch 이미지 모델(일명 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 ]))
모든 모델은 기본적으로 None
으로 설정된 aux_params
매개변수를 지원합니다. aux_params = None
이면 분류 보조 출력이 생성되지 않습니다. 그렇지 않으면 모델은 mask
뿐만 아니라 NC
모양의 label
출력도 생성합니다. 분류 헤드는 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
더 작게 지정하면 모델을 더 가볍게 만들 수 있습니다.
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 라이선스에 따라 배포됩니다.