A PyTorch 1.0 Implementation of Unet with EfficientNet as encoder
- Due to some rounding problem in the decoder path (not a bug, this is a feature 😏), the input shape should be divisible by 32.
e.g. 224x224 is a suitable size for input images, but 225x225 is not.
- Python >= 3.6
- PyTorch >= 1.0.0
Install efficientunet-pytorch:
pip install efficientunet-pytorche.g. say you want a pretrained efficientnet-b5 model with 5 classes:
from efficientunet import *
model = EfficientNet.from_name('efficientnet-b5', n_classes=5, pretrained=True)If you prefer to use a model with a custom head rather than just a simple change of the
output_channels of the last fully-connected layer, use:
from efficientunet import *
model = EfficientNet.custom_head('efficientnet-b5', n_classes=5, pretrained=True)The structure of model with custom head:
encoder->concatenation of [AvgPool2d, MaxPool2d]->Flatten->Dropout->Linear(512)->ReLU->Dropout->Linear(n_classes)
e.g. say you want a pretrained efficientunet-b0 model with 2 output channels:
from efficientunet import *
b0unet = get_efficientunet_b0(out_channels=2, concat_input=True, pretrained=True)The pretrained weights are directly borrowed from this repo.