Spaces:
Running
on
Zero
Running
on
Zero
import torch.nn as nn | |
import torchvision.models as models | |
""" VGG_16 Architecture | |
VGG( | |
(features): Sequential( | |
(0): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) | |
(1): ReLU(inplace=True) | |
(2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) | |
(3): ReLU(inplace=True) | |
(4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) | |
(5): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) | |
(6): ReLU(inplace=True) | |
(7): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) | |
(8): ReLU(inplace=True) | |
(9): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) | |
(10): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) | |
(11): ReLU(inplace=True) | |
(12): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) | |
(13): ReLU(inplace=True) | |
(14): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) | |
(15): ReLU(inplace=True) | |
(16): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) | |
(17): Conv2d(256, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) | |
(18): ReLU(inplace=True) | |
(19): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) | |
(20): ReLU(inplace=True) | |
(21): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) | |
(22): ReLU(inplace=True) | |
(23): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) | |
(24): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) | |
(25): ReLU(inplace=True) | |
(26): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) | |
(27): ReLU(inplace=True) | |
(28): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) | |
(29): ReLU(inplace=True) | |
(30): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) | |
) | |
(avgpool): AdaptiveAvgPool2d(output_size=(7, 7)) | |
(classifier): Sequential( | |
(0): Linear(in_features=25088, out_features=4096, bias=True) | |
(1): ReLU(inplace=True) | |
(2): Dropout(p=0.5, inplace=False) | |
(3): Linear(in_features=4096, out_features=4096, bias=True) | |
(4): ReLU(inplace=True) | |
(5): Dropout(p=0.5, inplace=False) | |
(6): Linear(in_features=4096, out_features=1000, bias=True) | |
) | |
) | |
""" | |
class VGG_16(nn.Module): | |
def __init__(self): | |
super(VGG_16, self).__init__() | |
self.model = models.vgg16(weights=models.VGG16_Weights.IMAGENET1K_V1).features[:30] | |
for i, _ in enumerate(self.model): | |
if i in [4, 9, 16, 23]: | |
self.model[i] = nn.AvgPool2d(kernel_size=2, stride=2, padding=0) | |
def forward(self, x): | |
features = [] | |
for i, layer in enumerate(self.model): | |
x = layer(x) | |
if i in [0, 5, 10, 17, 24]: | |
features.append(x) | |
return features | |
if __name__ == '__main__': | |
model = VGG_16() | |
print(model) |