画像用ニューラル ネットワークを備えた Python ライブラリ
PyTorch に基づくセグメンテーション。
このライブラリの主な機能は次のとおりです。
セグメンテーション モデル Pytorch (略して SMP) ライブラリの詳細については、Read The 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
パラメーター) を選択します。
エンコーダ | 重み | パラムス、M |
---|---|---|
レスネット18 | イメージネット / ssl / SWSL | 11M |
レスネット34 | イメージネット | 21M |
レスネット50 | イメージネット / ssl / SWSL | 23M |
レスネット101 | イメージネット | 42M |
レスネット152 | イメージネット | 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 |
エンコーダ | 重み | パラムス、M |
---|---|---|
timm-resnest14d | イメージネット | 8M |
timm-resnest26d | イメージネット | 15M |
timm-resnest50d | イメージネット | 25M |
timm-resnest101e | イメージネット | 46M |
timm-resnest200e | イメージネット | 68M |
timm-resnest269e | イメージネット | 108M |
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 |
エンコーダ | 重み | パラムス、M |
---|---|---|
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 | イメージネット | 105M |
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 | イメージネット | 1億4100万 |
エンコーダ | 重み | パラムス、M |
---|---|---|
timm-gernet_s | イメージネット | 6M |
ティム-gernet_m | イメージネット | 18M |
timm-gernet_l | イメージネット | 28M |
エンコーダ | 重み | パラムス、M |
---|---|---|
セネット154 | イメージネット | 113M |
se_resnet50 | イメージネット | 26M |
se_resnet101 | イメージネット | 47M |
se_resnet152 | イメージネット | 64M |
se_resnext50_32x4d | イメージネット | 25M |
se_resnext101_32x4d | イメージネット | 46M |
エンコーダ | 重み | パラムス、M |
---|---|---|
timm-skresnet18 | イメージネット | 11M |
timm-skresnet34 | イメージネット | 21M |
timm-skresnext50_32x4d | イメージネット | 25M |
エンコーダ | 重み | パラムス、M |
---|---|---|
デンスネット121 | イメージネット | 6M |
デンスネット169 | イメージネット | 12M |
デンスネット201 | イメージネット | 18M |
デンスネット161 | イメージネット | 26M |
エンコーダ | 重み | パラムス、M |
---|---|---|
インセプションレスネットTV2 | イメージネット / イメージネット+背景 | 54M |
インセプションv4 | イメージネット / イメージネット+背景 | 41M |
例外 | イメージネット | 22M |
エンコーダ | 重み | パラムス、M |
---|---|---|
効率的なネット-b0 | イメージネット | 4M |
効率的なネット-B1 | イメージネット | 6M |
効率的なネット-B2 | イメージネット | 7M |
効率的なネット-B3 | イメージネット | 10M |
効率的なネット-B4 | イメージネット | 17M |
効率的なネット-B5 | イメージネット | 28M |
効率的なネット-B6 | イメージネット | 40M |
効率的なネット-b7 | イメージネット | 63M |
timm-efficientnet-b0 | imagenet / advprop / noisy-student | 4M |
timm-efficientnet-b1 | imagenet / advprop / noisy-student | 6M |
timm-efficientnet-b2 | imagenet / advprop / noisy-student | 7M |
timm-efficientnet-b3 | imagenet / advprop / noisy-student | 10M |
timm-efficientnet-b4 | imagenet / advprop / noisy-student | 17M |
timm-efficientnet-b5 | imagenet / advprop / noisy-student | 28M |
timm-efficientnet-b6 | imagenet / advprop / noisy-student | 40M |
timm-efficientnet-b7 | imagenet / advprop / noisy-student | 63M |
timm-efficientnet-b8 | イメージネット/advprop | 84M |
timm-efficientnet-l2 | 騒々しい学生 | 474M |
timm-efficientnet-lite0 | イメージネット | 4M |
timm-efficientnet-lite1 | イメージネット | 5M |
timm-efficientnet-lite2 | イメージネット | 6M |
timm-efficientnet-lite3 | イメージネット | 8M |
timm-efficientnet-lite4 | イメージネット | 13M |
エンコーダ | 重み | パラムス、M |
---|---|---|
モバイルネット_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 |
エンコーダ | 重み | パラムス、M |
---|---|---|
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 |
Apple の「sub-one-ms」バックボーンは Imagenet で事前トレーニングされています。すべてのデコーダで使用できます。
注: 公式 github リポジトリでは、s0 バリアントには追加の num_conv_branches があり、s1 よりも多くのパラメータが含まれています。
エンコーダ | 重み | パラムス、M |
---|---|---|
モバイルワン_s0 | イメージネット | 4.6M |
モバイルワン_s1 | イメージネット | 4.0M |
モバイルワン_s2 | イメージネット | 6.5M |
モバイルワン_s3 | イメージネット | 8.8M |
モバイルワン_s4 | イメージネット | 13.6M |
* 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
だけでなく、形状NC
のlabel
出力も生成します。分類ヘッドは、GlobalPooling->Dropout(optional)->Linear->Activation(optional) レイヤーで構成されており、次のように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 ライセンスに基づいて配布されています