OK … Here it is :
> Unet(
> (encoder): MobileNetV2Encoder(
> (features): Sequential(
> (0): ConvBNReLU(
> (0): Conv2d(3, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)
> (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (1): InvertedResidual(
> (conv): Sequential(
> (0): ConvBNReLU(
> (0): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=32, bias=False)
> (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (1): Conv2d(32, 16, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (2): BatchNorm2d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> )
> )
> (2): InvertedResidual(
> (conv): Sequential(
> (0): ConvBNReLU(
> (0): Conv2d(16, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (1): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (1): ConvBNReLU(
> (0): Conv2d(96, 96, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=96, bias=False)
> (1): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (2): Conv2d(96, 24, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (3): BatchNorm2d(24, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> )
> )
> (3): InvertedResidual(
> (conv): Sequential(
> (0): ConvBNReLU(
> (0): Conv2d(24, 144, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (1): BatchNorm2d(144, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (1): ConvBNReLU(
> (0): Conv2d(144, 144, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=144, bias=False)
> (1): BatchNorm2d(144, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (2): Conv2d(144, 24, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (3): BatchNorm2d(24, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> )
> )
> (4): InvertedResidual(
> (conv): Sequential(
> (0): ConvBNReLU(
> (0): Conv2d(24, 144, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (1): BatchNorm2d(144, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (1): ConvBNReLU(
> (0): Conv2d(144, 144, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=144, bias=False)
> (1): BatchNorm2d(144, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (2): Conv2d(144, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (3): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> )
> )
> (5): InvertedResidual(
> (conv): Sequential(
> (0): ConvBNReLU(
> (0): Conv2d(32, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (1): ConvBNReLU(
> (0): Conv2d(192, 192, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=192, bias=False)
> (1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (2): Conv2d(192, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (3): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> )
> )
> (6): InvertedResidual(
> (conv): Sequential(
> (0): ConvBNReLU(
> (0): Conv2d(32, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (1): ConvBNReLU(
> (0): Conv2d(192, 192, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=192, bias=False)
> (1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (2): Conv2d(192, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (3): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> )
> )
> (7): InvertedResidual(
> (conv): Sequential(
> (0): ConvBNReLU(
> (0): Conv2d(32, 192, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (1): ConvBNReLU(
> (0): Conv2d(192, 192, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=192, bias=False)
> (1): BatchNorm2d(192, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (2): Conv2d(192, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> )
> )
> (8): InvertedResidual(
> (conv): Sequential(
> (0): ConvBNReLU(
> (0): Conv2d(64, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (1): ConvBNReLU(
> (0): Conv2d(384, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=384, bias=False)
> (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (2): Conv2d(384, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> )
> )
> (9): InvertedResidual(
> (conv): Sequential(
> (0): ConvBNReLU(
> (0): Conv2d(64, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (1): ConvBNReLU(
> (0): Conv2d(384, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=384, bias=False)
> (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (2): Conv2d(384, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> )
> )
> (10): InvertedResidual(
> (conv): Sequential(
> (0): ConvBNReLU(
> (0): Conv2d(64, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (1): ConvBNReLU(
> (0): Conv2d(384, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=384, bias=False)
> (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (2): Conv2d(384, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> )
> )
> (11): InvertedResidual(
> (conv): Sequential(
> (0): ConvBNReLU(
> (0): Conv2d(64, 384, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (1): ConvBNReLU(
> (0): Conv2d(384, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=384, bias=False)
> (1): BatchNorm2d(384, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (2): Conv2d(384, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (3): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> )
> )
> (12): InvertedResidual(
> (conv): Sequential(
> (0): ConvBNReLU(
> (0): Conv2d(96, 576, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (1): BatchNorm2d(576, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (1): ConvBNReLU(
> (0): Conv2d(576, 576, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=576, bias=False)
> (1): BatchNorm2d(576, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (2): Conv2d(576, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (3): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> )
> )
> (13): InvertedResidual(
> (conv): Sequential(
> (0): ConvBNReLU(
> (0): Conv2d(96, 576, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (1): BatchNorm2d(576, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (1): ConvBNReLU(
> (0): Conv2d(576, 576, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=576, bias=False)
> (1): BatchNorm2d(576, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (2): Conv2d(576, 96, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (3): BatchNorm2d(96, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> )
> )
> (14): InvertedResidual(
> (conv): Sequential(
> (0): ConvBNReLU(
> (0): Conv2d(96, 576, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (1): BatchNorm2d(576, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (1): ConvBNReLU(
> (0): Conv2d(576, 576, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), groups=576, bias=False)
> (1): BatchNorm2d(576, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (2): Conv2d(576, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (3): BatchNorm2d(160, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> )
> )
> (15): InvertedResidual(
> (conv): Sequential(
> (0): ConvBNReLU(
> (0): Conv2d(160, 960, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (1): BatchNorm2d(960, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (1): ConvBNReLU(
> (0): Conv2d(960, 960, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=960, bias=False)
> (1): BatchNorm2d(960, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (2): Conv2d(960, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (3): BatchNorm2d(160, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> )
> )
> (16): InvertedResidual(
> (conv): Sequential(
> (0): ConvBNReLU(
> (0): Conv2d(160, 960, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (1): BatchNorm2d(960, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (1): ConvBNReLU(
> (0): Conv2d(960, 960, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=960, bias=False)
> (1): BatchNorm2d(960, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (2): Conv2d(960, 160, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (3): BatchNorm2d(160, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> )
> )
> (17): InvertedResidual(
> (conv): Sequential(
> (0): ConvBNReLU(
> (0): Conv2d(160, 960, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (1): BatchNorm2d(960, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (1): ConvBNReLU(
> (0): Conv2d(960, 960, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), groups=960, bias=False)
> (1): BatchNorm2d(960, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> (2): Conv2d(960, 320, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (3): BatchNorm2d(320, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> )
> )
> (18): ConvBNReLU(
> (0): Conv2d(320, 1280, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (1): BatchNorm2d(1280, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU6(inplace=True)
> )
> )
> )
> (decoder): UnetDecoder(
> (center): Identity()
> (blocks): ModuleList(
> (0): DecoderBlock(
> (conv1): Conv2dReLU(
> (0): Conv2d(1376, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
> (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU(inplace=True)
> )
> (attention1): Attention(
> (attention): Identity()
> )
> (conv2): Conv2dReLU(
> (0): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
> (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU(inplace=True)
> )
> (attention2): Attention(
> (attention): Identity()
> )
> )
> (1): DecoderBlock(
> (conv1): Conv2dReLU(
> (0): Conv2d(288, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
> (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU(inplace=True)
> )
> (attention1): Attention(
> (attention): Identity()
> )
> (conv2): Conv2dReLU(
> (0): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
> (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU(inplace=True)
> )
> (attention2): Attention(
> (attention): Identity()
> )
> )
> (2): DecoderBlock(
> (conv1): Conv2dReLU(
> (0): Conv2d(152, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
> (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU(inplace=True)
> )
> (attention1): Attention(
> (attention): Identity()
> )
> (conv2): Conv2dReLU(
> (0): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
> (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU(inplace=True)
> )
> (attention2): Attention(
> (attention): Identity()
> )
> )
> (3): DecoderBlock(
> (conv1): Conv2dReLU(
> (0): Conv2d(80, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
> (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU(inplace=True)
> )
> (attention1): Attention(
> (attention): Identity()
> )
> (conv2): Conv2dReLU(
> (0): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
> (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU(inplace=True)
> )
> (attention2): Attention(
> (attention): Identity()
> )
> )
> (4): DecoderBlock(
> (conv1): Conv2dReLU(
> (0): Conv2d(32, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
> (1): BatchNorm2d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU(inplace=True)
> )
> (attention1): Attention(
> (attention): Identity()
> )
> (conv2): Conv2dReLU(
> (0): Conv2d(16, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
> (1): BatchNorm2d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
> (2): ReLU(inplace=True)
> )
> (attention2): Attention(
> (attention): Identity()
> )
> )
> )
> )
> (segmentation_head): SegmentationHead(
> (0): Conv2d(16, 1, kernel_size=(1, 1), stride=(1, 1), bias=False)
> (1): Identity()
> (2): Activation(
> (activation): Sigmoid()
> )
> )
> )