Computer_Vision/Chapter05/VGG_architecture.ipynb

11 KiB

Open In Colab

import torchvision
import torch.nn as nn
import torch
import torch.nn.functional as F
from torchvision import transforms,models,datasets
!pip install torch_summary
from torchsummary import summary
device = 'cuda' if torch.cuda.is_available() else 'cpu'
Requirement already satisfied: torch_summary in /usr/local/lib/python3.6/dist-packages (1.4.3)
model = models.vgg16(pretrained=True).to(device)
summary(model, torch.zeros(1,3,224,224));
==========================================================================================
Layer (type:depth-idx)                   Output Shape              Param #
==========================================================================================
├─Sequential: 1-1                        [-1, 512, 7, 7]           --
|    └─Conv2d: 2-1                       [-1, 64, 224, 224]        1,792
|    └─ReLU: 2-2                         [-1, 64, 224, 224]        --
|    └─Conv2d: 2-3                       [-1, 64, 224, 224]        36,928
|    └─ReLU: 2-4                         [-1, 64, 224, 224]        --
|    └─MaxPool2d: 2-5                    [-1, 64, 112, 112]        --
|    └─Conv2d: 2-6                       [-1, 128, 112, 112]       73,856
|    └─ReLU: 2-7                         [-1, 128, 112, 112]       --
|    └─Conv2d: 2-8                       [-1, 128, 112, 112]       147,584
|    └─ReLU: 2-9                         [-1, 128, 112, 112]       --
|    └─MaxPool2d: 2-10                   [-1, 128, 56, 56]         --
|    └─Conv2d: 2-11                      [-1, 256, 56, 56]         295,168
|    └─ReLU: 2-12                        [-1, 256, 56, 56]         --
|    └─Conv2d: 2-13                      [-1, 256, 56, 56]         590,080
|    └─ReLU: 2-14                        [-1, 256, 56, 56]         --
|    └─Conv2d: 2-15                      [-1, 256, 56, 56]         590,080
|    └─ReLU: 2-16                        [-1, 256, 56, 56]         --
|    └─MaxPool2d: 2-17                   [-1, 256, 28, 28]         --
|    └─Conv2d: 2-18                      [-1, 512, 28, 28]         1,180,160
|    └─ReLU: 2-19                        [-1, 512, 28, 28]         --
|    └─Conv2d: 2-20                      [-1, 512, 28, 28]         2,359,808
|    └─ReLU: 2-21                        [-1, 512, 28, 28]         --
|    └─Conv2d: 2-22                      [-1, 512, 28, 28]         2,359,808
|    └─ReLU: 2-23                        [-1, 512, 28, 28]         --
|    └─MaxPool2d: 2-24                   [-1, 512, 14, 14]         --
|    └─Conv2d: 2-25                      [-1, 512, 14, 14]         2,359,808
|    └─ReLU: 2-26                        [-1, 512, 14, 14]         --
|    └─Conv2d: 2-27                      [-1, 512, 14, 14]         2,359,808
|    └─ReLU: 2-28                        [-1, 512, 14, 14]         --
|    └─Conv2d: 2-29                      [-1, 512, 14, 14]         2,359,808
|    └─ReLU: 2-30                        [-1, 512, 14, 14]         --
|    └─MaxPool2d: 2-31                   [-1, 512, 7, 7]           --
├─AdaptiveAvgPool2d: 1-2                 [-1, 512, 7, 7]           --
├─Sequential: 1-3                        [-1, 1000]                --
|    └─Linear: 2-32                      [-1, 4096]                102,764,544
|    └─ReLU: 2-33                        [-1, 4096]                --
|    └─Dropout: 2-34                     [-1, 4096]                --
|    └─Linear: 2-35                      [-1, 4096]                16,781,312
|    └─ReLU: 2-36                        [-1, 4096]                --
|    └─Dropout: 2-37                     [-1, 4096]                --
|    └─Linear: 2-38                      [-1, 1000]                4,097,000
==========================================================================================
Total params: 138,357,544
Trainable params: 138,357,544
Non-trainable params: 0
Total mult-adds (G): 15.61
==========================================================================================
Input size (MB): 0.57
Forward/backward pass size (MB): 103.43
Params size (MB): 527.79
Estimated Total Size (MB): 631.80
==========================================================================================
model
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)
  )
)