vgg16_bn.py
Go to the documentation of this file.
1 from collections import namedtuple
2 
3 import torch
4 import torch.nn as nn
5 import torch.nn.init as init
6 from torchvision import models
7 from torchvision.models.vgg import model_urls
8 
9 
10 def init_weights(modules):
11  for m in modules:
12  if isinstance(m, nn.Conv2d):
13  init.xavier_uniform_(m.weight.data)
14  if m.bias is not None:
15  m.bias.data.zero_()
16  elif isinstance(m, nn.BatchNorm2d):
17  m.weight.data.fill_(1)
18  m.bias.data.zero_()
19  elif isinstance(m, nn.Linear):
20  m.weight.data.normal_(0, 0.01)
21  m.bias.data.zero_()
22 
23 
24 class vgg16_bn(torch.nn.Module):
25  def __init__(self, pretrained=True, freeze=True):
26  super(vgg16_bn, self).__init__()
27  model_urls['vgg16_bn'] = model_urls['vgg16_bn'].replace(
28  'https://', 'http://')
29  vgg_pretrained_features = models.vgg16_bn(
30  pretrained=pretrained).features
31  self.slice1 = torch.nn.Sequential()
32  self.slice2 = torch.nn.Sequential()
33  self.slice3 = torch.nn.Sequential()
34  self.slice4 = torch.nn.Sequential()
35  self.slice5 = torch.nn.Sequential()
36  for x in range(12): # conv2_2
37  self.slice1.add_module(str(x), vgg_pretrained_features[x])
38  for x in range(12, 19): # conv3_3
39  self.slice2.add_module(str(x), vgg_pretrained_features[x])
40  for x in range(19, 29): # conv4_3
41  self.slice3.add_module(str(x), vgg_pretrained_features[x])
42  for x in range(29, 39): # conv5_3
43  self.slice4.add_module(str(x), vgg_pretrained_features[x])
44 
45  # fc6, fc7 without atrous conv
46  self.slice5 = torch.nn.Sequential(
47  nn.MaxPool2d(kernel_size=3, stride=1, padding=1),
48  nn.Conv2d(512, 1024, kernel_size=3, padding=6, dilation=6),
49  nn.Conv2d(1024, 1024, kernel_size=1)
50  )
51 
52  if not pretrained:
53  init_weights(self.slice1.modules())
54  init_weights(self.slice2.modules())
55  init_weights(self.slice3.modules())
56  init_weights(self.slice4.modules())
57 
58  # no pretrained model for fc6 and fc7
59  init_weights(self.slice5.modules())
60 
61  if freeze:
62  for param in self.slice1.parameters(): # only first conv
63  param.requires_grad = False
64 
65  def forward(self, X):
66  h = self.slice1(X)
67  h_relu2_2 = h
68  h = self.slice2(h)
69  h_relu3_2 = h
70  h = self.slice3(h)
71  h_relu4_3 = h
72  h = self.slice4(h)
73  h_relu5_3 = h
74  h = self.slice5(h)
75  h_fc7 = h
76  vgg_outputs = namedtuple(
77  "VggOutputs", [
78  'fc7', 'relu5_3', 'relu4_3', 'relu3_2', 'relu2_2'])
79  out = vgg_outputs(h_fc7, h_relu5_3, h_relu4_3, h_relu3_2, h_relu2_2)
80  return out
node_scripts.craft.basenet.vgg16_bn.vgg16_bn.slice2
slice2
Definition: vgg16_bn.py:32
ssd_train_dataset.str
str
Definition: ssd_train_dataset.py:178
node_scripts.craft.basenet.vgg16_bn.vgg16_bn.slice5
slice5
Definition: vgg16_bn.py:35
node_scripts.craft.basenet.vgg16_bn.vgg16_bn.__init__
def __init__(self, pretrained=True, freeze=True)
Definition: vgg16_bn.py:25
node_scripts.craft.basenet.vgg16_bn.vgg16_bn.slice4
slice4
Definition: vgg16_bn.py:34
node_scripts.craft.basenet.vgg16_bn.vgg16_bn
Definition: vgg16_bn.py:24
node_scripts.craft.basenet.vgg16_bn.vgg16_bn.slice1
slice1
Definition: vgg16_bn.py:31
node_scripts.craft.basenet.vgg16_bn.vgg16_bn.slice3
slice3
Definition: vgg16_bn.py:33
node_scripts.craft.basenet.vgg16_bn.init_weights
def init_weights(modules)
Definition: vgg16_bn.py:10
node_scripts.craft.basenet.vgg16_bn.vgg16_bn.forward
def forward(self, X)
Definition: vgg16_bn.py:65


jsk_perception
Author(s): Manabu Saito, Ryohei Ueda
autogenerated on Fri May 16 2025 03:11:17