Hi ;
I am using a pretrained resnet 18. I would like to truncate the model to only have the first two convolution. I tried the following code, however I find that there is block called Basic block has been defined. Any ideas please
model = torchvision.models.resnet18(pretrained=True)
truncated_model = nn.Sequential(*list(model.children())[:1])
truncated model will have the first convolution i.e
(0): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False))
truncated_model = nn.Sequential(*list(model.children())[:2])
(0): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)
** (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True))**
Continuing this way
truncated_model = nn.Sequential(*list(model.children())[:5])
Sequential (
** (0): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)**
** (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True)**
** (2): ReLU (inplace)**
** (3): MaxPool2d (size=(3, 3), stride=(2, 2), padding=(1, 1), dilation=(1, 1))**
** (4): Sequential (**
** (0): BasicBlock (**
** (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)**
** (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True)**
** (relu): ReLU (inplace)**
** (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)**
** (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True)**
** )**
** (1): BasicBlock (**
** (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)**
** (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True)**
** (relu): ReLU (inplace)**
** (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)**
** (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True)**
** )**
** )**
)
I would to truncate my model with the first conv in the basic block. Any ideas?