具有影像神經網路的 Python 函式庫
基於PyTorch的分割。
該庫的主要特點是:
造訪閱讀文件項目頁面或閱讀以下 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
參數)。
編碼器 | 重量 | 帕拉姆斯,M |
---|---|---|
資源網18 | 影像網 / ssl / swsl | 11M |
資源網34 | 影像網 | 21M |
resnet50 | 影像網 / ssl / swsl | 23M |
資源網101 | 影像網 | 42M |
資源網152 | 影像網 | 58M |
編碼器 | 重量 | 帕拉姆斯,M |
---|---|---|
resnext50_32x4d | 影像網 / 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 |
編碼器 | 重量 | 帕拉姆斯,M |
---|---|---|
蒂姆-resnest14d | 影像網 | 8M |
蒂姆-resnest26d | 影像網 | 15M |
蒂姆-雷斯內斯特50d | 影像網 | 25M |
蒂姆-resnest101e | 影像網 | 46M |
蒂姆-resnest200e | 影像網 | 68M |
蒂姆-resnest269e | 影像網 | 108M |
蒂姆-resnest50d_4s2x40d | 影像網 | 28M |
蒂姆-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 |
---|---|---|
蒂姆-regnetx_002 | 影像網 | 2M |
蒂姆-regnetx_004 | 影像網 | 4M |
蒂姆-regnetx_006 | 影像網 | 5M |
蒂姆-regnetx_008 | 影像網 | 6M |
蒂姆-regnetx_016 | 影像網 | 8M |
蒂姆-regnetx_032 | 影像網 | 14M |
蒂姆-regnetx_040 | 影像網 | 20M |
蒂姆-regnetx_064 | 影像網 | 24M |
蒂姆-regnetx_080 | 影像網 | 37M |
蒂姆-regnetx_120 | 影像網 | 43M |
蒂姆-regnetx_160 | 影像網 | 52M |
蒂姆-regnetx_320 | 影像網 | 105M |
提姆-regnety_002 | 影像網 | 2M |
提姆-regnety_004 | 影像網 | 3M |
提姆-regnety_006 | 影像網 | 5M |
蒂姆-regnety_008 | 影像網 | 5M |
蒂姆-regnety_016 | 影像網 | 10M |
蒂姆-regnety_032 | 影像網 | 17M |
蒂姆-regnety_040 | 影像網 | 19M |
提姆-regnety_064 | 影像網 | 29M |
蒂姆-regnety_080 | 影像網 | 37M |
蒂姆-regnety_120 | 影像網 | 49M |
提姆-regnety_160 | 影像網 | 80M |
蒂姆-regnety_320 | 影像網 | 141M |
編碼器 | 重量 | 帕拉姆斯,M |
---|---|---|
蒂姆-gernet_s | 影像網 | 6M |
蒂姆-gernet_m | 影像網 | 18M |
蒂姆-gernet_l | 影像網 | 28M |
編碼器 | 重量 | 帕拉姆斯,M |
---|---|---|
塞內特154 | 影像網 | 113M |
se_resnet50 | 影像網 | 26M |
se_resnet101 | 影像網 | 47M |
se_resnet152 | 影像網 | 64M |
se_resnext50_32x4d | 影像網 | 25M |
se_resnext101_32x4d | 影像網 | 46M |
編碼器 | 重量 | 帕拉姆斯,M |
---|---|---|
蒂姆-skresnet18 | 影像網 | 11M |
蒂姆-skresnet34 | 影像網 | 21M |
蒂姆-skresnext50_32x4d | 影像網 | 25M |
編碼器 | 重量 | 帕拉姆斯,M |
---|---|---|
密集網121 | 影像網 | 6M |
密集網169 | 影像網 | 12M |
密集網201 | 影像網 | 18M |
密集網161 | 影像網 | 26M |
編碼器 | 重量 | 帕拉姆斯,M |
---|---|---|
盜夢空間resnetv2 | imagenet / imagenet+背景 | 54M |
初始v4 | imagenet / imagenet+背景 | 41M |
異象 | 影像網 | 22M |
編碼器 | 重量 | 帕拉姆斯,M |
---|---|---|
高效網-b0 | 影像網 | 4M |
高效網-b1 | 影像網 | 6M |
高效網-b2 | 影像網 | 7M |
高效網-b3 | 影像網 | 10M |
高效率網路-b4 | 影像網 | 17M |
高效網-b5 | 影像網 | 28M |
高效網-b6 | 影像網 | 40M |
高效網-b7 | 影像網 | 63M |
timm-efficientnet-b0 | imagenet / advprop / 吵雜的學生 | 4M |
timm-efficientnet-b1 | imagenet / advprop / 吵雜的學生 | 6M |
timm-efficientnet-b2 | imagenet / advprop / 吵雜的學生 | 7M |
timm-efficientnet-b3 | imagenet / advprop / 吵雜的學生 | 10M |
timm-efficientnet-b4 | imagenet / advprop / 吵雜的學生 | 17M |
timm-efficientnet-b5 | imagenet / advprop / 吵雜的學生 | 28M |
timm-efficientnet-b6 | imagenet / advprop / 吵雜的學生 | 40M |
timm-efficientnet-b7 | imagenet / advprop / 吵雜的學生 | 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 | 影像網 | 1.78M |
timm-mobilenetv3_large_100 | 影像網 | 2.97M |
timm-mobilenetv3_large_minimal_100 | 影像網 | 1.41M |
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 |
---|---|---|
VG11 | 影像網 | 9M |
vgg11_bn | 影像網 | 9M |
VG13 | 影像網 | 9M |
vgg13_bn | 影像網 | 9M |
VG16 | 影像網 | 14M |
vgg16_bn | 影像網 | 14M |
VG19 | 影像網 | 20M |
vgg19_bn | 影像網 | 20M |
來自 SegFormer 的骨幹在 Imagenet 上進行了預訓練!可以與套件中的其他解碼器一起使用,您可以將 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 的「亞一毫秒」Backbone 在 Imagenet 上進行了預訓練!可與所有解碼器一起使用。
注意:在官方 github 儲存庫中,s0 變體具有額外的 num_conv_branches,導致參數比 s1 更多。
編碼器 | 重量 | 帕拉姆斯,M |
---|---|---|
mobileone_s0 | 影像網 | 4.6M |
mobileone_s1 | 影像網 | 4.0M |
mobileone_s2 | 影像網 | 6.5M |
mobileone_s3 | 影像網 | 8.8M |
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 ]))
所有模型都支援aux_params
參數,預設為None
。如果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 許可證分發