Skip to content

modules.resnet.EncoderNet3d

Class · nn.Module · Source

net = mdnc.modules.resnet.EncoderNet3d(
    channel, layers, block='bottleneck',
    kernel_size=3, in_planes=1, out_length=2
)

This moule is a built-in model for 3D residual encoder network. This network could be used as a part of the auto-encoder, or just a network for down-sampling data.

The network would down-sample the input data according to the network depth. The depth is given by the length of the argument layers. The network structure is shown in the following chart:

flowchart TB
    b1["Block 1<br>Stack of layers[0] blocks"]
    b2["Block 2<br>Stack of layers[1] blocks"]
    bi["Block ...<br>Stack of ... layers"]
    bn["Block n<br>Stack of layers[n-1] blocks"]
    optional:::blockoptional
    subgraph optional [Optional]
       fc["FC layer"]
    end
    b1 -->|down<br>sampling| b2 -->|down<br>sampling| bi -->|down<br>sampling| bn
    bn -.->|flatten| fc
    linkStyle 0,1,2 stroke-width:4px, stroke:#800 ;
    classDef blockoptional fill:none, stroke-dasharray:10,10, stroke:#9370DB, width:100;

The argument layers is a sequence of int. For each block \(i\), it contains layers[i-1] repeated residual blocks (see mdnc.modules.resnet.BlockPlain3d and mdnc.modules.resnet.BlockBottleneck3d). Each down-sampling or up-sampling is configured by stride=2. The channel number would be doubled in the down-sampling route. An optional flattener and fully-connected layer could be appended to the last layer when the argument out_length != None.

Arguments

Requries

Argument Type Description
channel int The channel number of the first hidden block (layer). After each down-sampling, the channel number would be doubled.
layers (int,) A sequence of layer numbers for each block. Each number represents the number of residual blocks of a stage (block). The stage numer, i.e. the depth of the network is the length of this list.
block str The residual block type, could be:
kernel_size int or
(int, int, int)
The kernel size of each residual block.
in_planes int The channel number of the input data.
out_length int The length of the output vector, if not set, the output would not be flattened.

Operators

__call__

y = net(x)

The forward operator implemented by the forward() method. The input is a 3D tensor, and the output is the final output of this network.

Requries

Argument Type Description
x torch.Tensor A 3D tensor, the size should be (B, C, L1, L2, L3), where B is the batch size, C is the input channel number, and (L1, L2, L3) is the input data size.

Returns

Argument Description
y A tensor,
  • When out_length is None: the size should be (B, L), where B is the batch size, and L is out_length.
  • When out_length != None: the size should be (B, C, L1, L2, L3), where B is the batch size, C and (L1, L2, L3) are the channel number and the size of the last output stage (block) respectively.

Properties

nlayers

net.nlayers

The total number of convolutional layers along the depth of the network. This value would not take the fully-connected layer into consideration.

Examples

Example 1
1
2
3
4
5
import mdnc

net = mdnc.modules.resnet.EncoderNet3d(64, [2, 2, 2, 2, 2], in_planes=3, out_length=32)
print('The number of convolutional layers along the depth is {0}.'.format(net.nlayers))
mdnc.contribs.torchsummary.summary(net, (3, 31, 32, 30), device='cpu')
The number of convolutional layers along the depth is 32.
----------------------------------------------------------------
        Layer (type)               Output Shape         Param #
================================================================
            Conv3d-1       [-1, 64, 31, 32, 30]          24,000
    InstanceNorm3d-2       [-1, 64, 31, 32, 30]             128
             PReLU-3       [-1, 64, 31, 32, 30]              64
            Conv3d-4       [-1, 64, 31, 32, 30]           4,096
    InstanceNorm3d-5       [-1, 64, 31, 32, 30]             128
             PReLU-6       [-1, 64, 31, 32, 30]              64
            Conv3d-7       [-1, 64, 31, 32, 30]         110,592
    InstanceNorm3d-8       [-1, 64, 31, 32, 30]             128
             PReLU-9       [-1, 64, 31, 32, 30]              64
           Conv3d-10       [-1, 64, 31, 32, 30]           4,096
_BlockBo...neckNd-11       [-1, 64, 31, 32, 30]               0
   InstanceNorm3d-12       [-1, 64, 31, 32, 30]             128
            PReLU-13       [-1, 64, 31, 32, 30]              64
           Conv3d-14       [-1, 64, 31, 32, 30]           4,096
   InstanceNorm3d-15       [-1, 64, 31, 32, 30]             128
            PReLU-16       [-1, 64, 31, 32, 30]              64
           Conv3d-17       [-1, 64, 16, 16, 15]         110,592
   InstanceNorm3d-18       [-1, 64, 16, 16, 15]             128
            PReLU-19       [-1, 64, 16, 16, 15]              64
           Conv3d-20       [-1, 64, 16, 16, 15]           4,096
           Conv3d-21       [-1, 64, 16, 16, 15]           4,096
   InstanceNorm3d-22       [-1, 64, 16, 16, 15]             128
_BlockBo...neckNd-23       [-1, 64, 16, 16, 15]               0
   _BlockResStkNd-24       [-1, 64, 16, 16, 15]               0
   InstanceNorm3d-25       [-1, 64, 16, 16, 15]             128
            PReLU-26       [-1, 64, 16, 16, 15]              64
           Conv3d-27       [-1, 64, 16, 16, 15]           4,096
   InstanceNorm3d-28       [-1, 64, 16, 16, 15]             128
            PReLU-29       [-1, 64, 16, 16, 15]              64
           Conv3d-30       [-1, 64, 16, 16, 15]         110,592
   InstanceNorm3d-31       [-1, 64, 16, 16, 15]             128
            PReLU-32       [-1, 64, 16, 16, 15]              64
           Conv3d-33      [-1, 128, 16, 16, 15]           8,192
           Conv3d-34      [-1, 128, 16, 16, 15]           8,192
   InstanceNorm3d-35      [-1, 128, 16, 16, 15]             256
_BlockBo...neckNd-36      [-1, 128, 16, 16, 15]               0
   InstanceNorm3d-37      [-1, 128, 16, 16, 15]             256
            PReLU-38      [-1, 128, 16, 16, 15]             128
           Conv3d-39      [-1, 128, 16, 16, 15]          16,384
   InstanceNorm3d-40      [-1, 128, 16, 16, 15]             256
            PReLU-41      [-1, 128, 16, 16, 15]             128
           Conv3d-42         [-1, 128, 8, 8, 8]         442,368
   InstanceNorm3d-43         [-1, 128, 8, 8, 8]             256
            PReLU-44         [-1, 128, 8, 8, 8]             128
           Conv3d-45         [-1, 128, 8, 8, 8]          16,384
           Conv3d-46         [-1, 128, 8, 8, 8]          16,384
   InstanceNorm3d-47         [-1, 128, 8, 8, 8]             256
_BlockBo...neckNd-48         [-1, 128, 8, 8, 8]               0
   _BlockResStkNd-49         [-1, 128, 8, 8, 8]               0
   InstanceNorm3d-50         [-1, 128, 8, 8, 8]             256
            PReLU-51         [-1, 128, 8, 8, 8]             128
           Conv3d-52         [-1, 128, 8, 8, 8]          16,384
   InstanceNorm3d-53         [-1, 128, 8, 8, 8]             256
            PReLU-54         [-1, 128, 8, 8, 8]             128
           Conv3d-55         [-1, 128, 8, 8, 8]         442,368
   InstanceNorm3d-56         [-1, 128, 8, 8, 8]             256
            PReLU-57         [-1, 128, 8, 8, 8]             128
           Conv3d-58         [-1, 256, 8, 8, 8]          32,768
           Conv3d-59         [-1, 256, 8, 8, 8]          32,768
   InstanceNorm3d-60         [-1, 256, 8, 8, 8]             512
_BlockBo...neckNd-61         [-1, 256, 8, 8, 8]               0
   InstanceNorm3d-62         [-1, 256, 8, 8, 8]             512
            PReLU-63         [-1, 256, 8, 8, 8]             256
           Conv3d-64         [-1, 256, 8, 8, 8]          65,536
   InstanceNorm3d-65         [-1, 256, 8, 8, 8]             512
            PReLU-66         [-1, 256, 8, 8, 8]             256
           Conv3d-67         [-1, 256, 4, 4, 4]       1,769,472
   InstanceNorm3d-68         [-1, 256, 4, 4, 4]             512
            PReLU-69         [-1, 256, 4, 4, 4]             256
           Conv3d-70         [-1, 256, 4, 4, 4]          65,536
           Conv3d-71         [-1, 256, 4, 4, 4]          65,536
   InstanceNorm3d-72         [-1, 256, 4, 4, 4]             512
_BlockBo...neckNd-73         [-1, 256, 4, 4, 4]               0
   _BlockResStkNd-74         [-1, 256, 4, 4, 4]               0
   InstanceNorm3d-75         [-1, 256, 4, 4, 4]             512
            PReLU-76         [-1, 256, 4, 4, 4]             256
           Conv3d-77         [-1, 256, 4, 4, 4]          65,536
   InstanceNorm3d-78         [-1, 256, 4, 4, 4]             512
            PReLU-79         [-1, 256, 4, 4, 4]             256
           Conv3d-80         [-1, 256, 4, 4, 4]       1,769,472
   InstanceNorm3d-81         [-1, 256, 4, 4, 4]             512
            PReLU-82         [-1, 256, 4, 4, 4]             256
           Conv3d-83         [-1, 512, 4, 4, 4]         131,072
           Conv3d-84         [-1, 512, 4, 4, 4]         131,072
   InstanceNorm3d-85         [-1, 512, 4, 4, 4]           1,024
_BlockBo...neckNd-86         [-1, 512, 4, 4, 4]               0
   InstanceNorm3d-87         [-1, 512, 4, 4, 4]           1,024
            PReLU-88         [-1, 512, 4, 4, 4]             512
           Conv3d-89         [-1, 512, 4, 4, 4]         262,144
   InstanceNorm3d-90         [-1, 512, 4, 4, 4]           1,024
            PReLU-91         [-1, 512, 4, 4, 4]             512
           Conv3d-92         [-1, 512, 2, 2, 2]       7,077,888
   InstanceNorm3d-93         [-1, 512, 2, 2, 2]           1,024
            PReLU-94         [-1, 512, 2, 2, 2]             512
           Conv3d-95         [-1, 512, 2, 2, 2]         262,144
           Conv3d-96         [-1, 512, 2, 2, 2]         262,144
   InstanceNorm3d-97         [-1, 512, 2, 2, 2]           1,024
_BlockBo...neckNd-98         [-1, 512, 2, 2, 2]               0
   _BlockResStkNd-99         [-1, 512, 2, 2, 2]               0
  InstanceNorm3d-100         [-1, 512, 2, 2, 2]           1,024
           PReLU-101         [-1, 512, 2, 2, 2]             512
          Conv3d-102         [-1, 512, 2, 2, 2]         262,144
  InstanceNorm3d-103         [-1, 512, 2, 2, 2]           1,024
           PReLU-104         [-1, 512, 2, 2, 2]             512
          Conv3d-105         [-1, 512, 2, 2, 2]       7,077,888
  InstanceNorm3d-106         [-1, 512, 2, 2, 2]           1,024
           PReLU-107         [-1, 512, 2, 2, 2]             512
          Conv3d-108        [-1, 1024, 2, 2, 2]         524,288
          Conv3d-109        [-1, 1024, 2, 2, 2]         524,288
  InstanceNorm3d-110        [-1, 1024, 2, 2, 2]           2,048
_BlockBo...eckNd-111        [-1, 1024, 2, 2, 2]               0
  InstanceNorm3d-112        [-1, 1024, 2, 2, 2]           2,048
           PReLU-113        [-1, 1024, 2, 2, 2]           1,024
          Conv3d-114        [-1, 1024, 2, 2, 2]       1,048,576
  InstanceNorm3d-115        [-1, 1024, 2, 2, 2]           2,048
           PReLU-116        [-1, 1024, 2, 2, 2]           1,024
          Conv3d-117        [-1, 1024, 1, 1, 1]      28,311,552
  InstanceNorm3d-118        [-1, 1024, 1, 1, 1]           2,048
           PReLU-119        [-1, 1024, 1, 1, 1]           1,024
          Conv3d-120        [-1, 1024, 1, 1, 1]       1,048,576
          Conv3d-121        [-1, 1024, 1, 1, 1]       1,048,576
  InstanceNorm3d-122        [-1, 1024, 1, 1, 1]           2,048
_BlockBo...eckNd-123        [-1, 1024, 1, 1, 1]               0
  _BlockResStkNd-124        [-1, 1024, 1, 1, 1]               0
          Conv3d-125        [-1, 1024, 1, 1, 1]      28,312,576
Adaptive...ool3d-126        [-1, 1024, 1, 1, 1]               0
          Linear-127                   [-1, 32]          32,800
    EncoderNet3d-128                   [-1, 32]               0
================================================================
Total params: 81,566,240
Trainable params: 81,566,240
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.34
Forward/backward pass size (MB): 318.64
Params size (MB): 311.15
Estimated Total Size (MB): 630.13
----------------------------------------------------------------
Example 2
1
2
3
4
5
import mdnc

net = mdnc.modules.resnet.EncoderNet3d(64, [2, 2, 2, 2, 2], in_planes=3, out_length=None)
print('The number of convolutional layers along the depth is {0}.'.format(net.nlayers))
mdnc.contribs.torchsummary.summary(net, (3, 31, 32, 30), device='cpu')
The number of convolutional layers along the depth is 32.
----------------------------------------------------------------
        Layer (type)               Output Shape         Param #
================================================================
            Conv3d-1       [-1, 64, 31, 32, 30]          24,000
    InstanceNorm3d-2       [-1, 64, 31, 32, 30]             128
             PReLU-3       [-1, 64, 31, 32, 30]              64
            Conv3d-4       [-1, 64, 31, 32, 30]           4,096
    InstanceNorm3d-5       [-1, 64, 31, 32, 30]             128
             PReLU-6       [-1, 64, 31, 32, 30]              64
            Conv3d-7       [-1, 64, 31, 32, 30]         110,592
    InstanceNorm3d-8       [-1, 64, 31, 32, 30]             128
             PReLU-9       [-1, 64, 31, 32, 30]              64
           Conv3d-10       [-1, 64, 31, 32, 30]           4,096
_BlockBo...neckNd-11       [-1, 64, 31, 32, 30]               0
   InstanceNorm3d-12       [-1, 64, 31, 32, 30]             128
            PReLU-13       [-1, 64, 31, 32, 30]              64
           Conv3d-14       [-1, 64, 31, 32, 30]           4,096
   InstanceNorm3d-15       [-1, 64, 31, 32, 30]             128
            PReLU-16       [-1, 64, 31, 32, 30]              64
           Conv3d-17       [-1, 64, 16, 16, 15]         110,592
   InstanceNorm3d-18       [-1, 64, 16, 16, 15]             128
            PReLU-19       [-1, 64, 16, 16, 15]              64
           Conv3d-20       [-1, 64, 16, 16, 15]           4,096
           Conv3d-21       [-1, 64, 16, 16, 15]           4,096
   InstanceNorm3d-22       [-1, 64, 16, 16, 15]             128
_BlockBo...neckNd-23       [-1, 64, 16, 16, 15]               0
   _BlockResStkNd-24       [-1, 64, 16, 16, 15]               0
   InstanceNorm3d-25       [-1, 64, 16, 16, 15]             128
            PReLU-26       [-1, 64, 16, 16, 15]              64
           Conv3d-27       [-1, 64, 16, 16, 15]           4,096
   InstanceNorm3d-28       [-1, 64, 16, 16, 15]             128
            PReLU-29       [-1, 64, 16, 16, 15]              64
           Conv3d-30       [-1, 64, 16, 16, 15]         110,592
   InstanceNorm3d-31       [-1, 64, 16, 16, 15]             128
            PReLU-32       [-1, 64, 16, 16, 15]              64
           Conv3d-33      [-1, 128, 16, 16, 15]           8,192
           Conv3d-34      [-1, 128, 16, 16, 15]           8,192
   InstanceNorm3d-35      [-1, 128, 16, 16, 15]             256
_BlockBo...neckNd-36      [-1, 128, 16, 16, 15]               0
   InstanceNorm3d-37      [-1, 128, 16, 16, 15]             256
            PReLU-38      [-1, 128, 16, 16, 15]             128
           Conv3d-39      [-1, 128, 16, 16, 15]          16,384
   InstanceNorm3d-40      [-1, 128, 16, 16, 15]             256
            PReLU-41      [-1, 128, 16, 16, 15]             128
           Conv3d-42         [-1, 128, 8, 8, 8]         442,368
   InstanceNorm3d-43         [-1, 128, 8, 8, 8]             256
            PReLU-44         [-1, 128, 8, 8, 8]             128
           Conv3d-45         [-1, 128, 8, 8, 8]          16,384
           Conv3d-46         [-1, 128, 8, 8, 8]          16,384
   InstanceNorm3d-47         [-1, 128, 8, 8, 8]             256
_BlockBo...neckNd-48         [-1, 128, 8, 8, 8]               0
   _BlockResStkNd-49         [-1, 128, 8, 8, 8]               0
   InstanceNorm3d-50         [-1, 128, 8, 8, 8]             256
            PReLU-51         [-1, 128, 8, 8, 8]             128
           Conv3d-52         [-1, 128, 8, 8, 8]          16,384
   InstanceNorm3d-53         [-1, 128, 8, 8, 8]             256
            PReLU-54         [-1, 128, 8, 8, 8]             128
           Conv3d-55         [-1, 128, 8, 8, 8]         442,368
   InstanceNorm3d-56         [-1, 128, 8, 8, 8]             256
            PReLU-57         [-1, 128, 8, 8, 8]             128
           Conv3d-58         [-1, 256, 8, 8, 8]          32,768
           Conv3d-59         [-1, 256, 8, 8, 8]          32,768
   InstanceNorm3d-60         [-1, 256, 8, 8, 8]             512
_BlockBo...neckNd-61         [-1, 256, 8, 8, 8]               0
   InstanceNorm3d-62         [-1, 256, 8, 8, 8]             512
            PReLU-63         [-1, 256, 8, 8, 8]             256
           Conv3d-64         [-1, 256, 8, 8, 8]          65,536
   InstanceNorm3d-65         [-1, 256, 8, 8, 8]             512
            PReLU-66         [-1, 256, 8, 8, 8]             256
           Conv3d-67         [-1, 256, 4, 4, 4]       1,769,472
   InstanceNorm3d-68         [-1, 256, 4, 4, 4]             512
            PReLU-69         [-1, 256, 4, 4, 4]             256
           Conv3d-70         [-1, 256, 4, 4, 4]          65,536
           Conv3d-71         [-1, 256, 4, 4, 4]          65,536
   InstanceNorm3d-72         [-1, 256, 4, 4, 4]             512
_BlockBo...neckNd-73         [-1, 256, 4, 4, 4]               0
   _BlockResStkNd-74         [-1, 256, 4, 4, 4]               0
   InstanceNorm3d-75         [-1, 256, 4, 4, 4]             512
            PReLU-76         [-1, 256, 4, 4, 4]             256
           Conv3d-77         [-1, 256, 4, 4, 4]          65,536
   InstanceNorm3d-78         [-1, 256, 4, 4, 4]             512
            PReLU-79         [-1, 256, 4, 4, 4]             256
           Conv3d-80         [-1, 256, 4, 4, 4]       1,769,472
   InstanceNorm3d-81         [-1, 256, 4, 4, 4]             512
            PReLU-82         [-1, 256, 4, 4, 4]             256
           Conv3d-83         [-1, 512, 4, 4, 4]         131,072
           Conv3d-84         [-1, 512, 4, 4, 4]         131,072
   InstanceNorm3d-85         [-1, 512, 4, 4, 4]           1,024
_BlockBo...neckNd-86         [-1, 512, 4, 4, 4]               0
   InstanceNorm3d-87         [-1, 512, 4, 4, 4]           1,024
            PReLU-88         [-1, 512, 4, 4, 4]             512
           Conv3d-89         [-1, 512, 4, 4, 4]         262,144
   InstanceNorm3d-90         [-1, 512, 4, 4, 4]           1,024
            PReLU-91         [-1, 512, 4, 4, 4]             512
           Conv3d-92         [-1, 512, 2, 2, 2]       7,077,888
   InstanceNorm3d-93         [-1, 512, 2, 2, 2]           1,024
            PReLU-94         [-1, 512, 2, 2, 2]             512
           Conv3d-95         [-1, 512, 2, 2, 2]         262,144
           Conv3d-96         [-1, 512, 2, 2, 2]         262,144
   InstanceNorm3d-97         [-1, 512, 2, 2, 2]           1,024
_BlockBo...neckNd-98         [-1, 512, 2, 2, 2]               0
   _BlockResStkNd-99         [-1, 512, 2, 2, 2]               0
  InstanceNorm3d-100         [-1, 512, 2, 2, 2]           1,024
           PReLU-101         [-1, 512, 2, 2, 2]             512
          Conv3d-102         [-1, 512, 2, 2, 2]         262,144
  InstanceNorm3d-103         [-1, 512, 2, 2, 2]           1,024
           PReLU-104         [-1, 512, 2, 2, 2]             512
          Conv3d-105         [-1, 512, 2, 2, 2]       7,077,888
  InstanceNorm3d-106         [-1, 512, 2, 2, 2]           1,024
           PReLU-107         [-1, 512, 2, 2, 2]             512
          Conv3d-108        [-1, 1024, 2, 2, 2]         524,288
          Conv3d-109        [-1, 1024, 2, 2, 2]         524,288
  InstanceNorm3d-110        [-1, 1024, 2, 2, 2]           2,048
_BlockBo...eckNd-111        [-1, 1024, 2, 2, 2]               0
  InstanceNorm3d-112        [-1, 1024, 2, 2, 2]           2,048
           PReLU-113        [-1, 1024, 2, 2, 2]           1,024
          Conv3d-114        [-1, 1024, 2, 2, 2]       1,048,576
  InstanceNorm3d-115        [-1, 1024, 2, 2, 2]           2,048
           PReLU-116        [-1, 1024, 2, 2, 2]           1,024
          Conv3d-117        [-1, 1024, 1, 1, 1]      28,311,552
  InstanceNorm3d-118        [-1, 1024, 1, 1, 1]           2,048
           PReLU-119        [-1, 1024, 1, 1, 1]           1,024
          Conv3d-120        [-1, 1024, 1, 1, 1]       1,048,576
          Conv3d-121        [-1, 1024, 1, 1, 1]       1,048,576
  InstanceNorm3d-122        [-1, 1024, 1, 1, 1]           2,048
_BlockBo...eckNd-123        [-1, 1024, 1, 1, 1]               0
  _BlockResStkNd-124        [-1, 1024, 1, 1, 1]               0
          Conv3d-125        [-1, 1024, 1, 1, 1]      28,312,576
    EncoderNet3d-126        [-1, 1024, 1, 1, 1]               0
================================================================
Total params: 81,533,440
Trainable params: 81,533,440
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.34
Forward/backward pass size (MB): 318.64
Params size (MB): 311.03
Estimated Total Size (MB): 630.01
----------------------------------------------------------------

Last update: March 14, 2021

Comments