MCPcopy Create free account
hub / github.com/csxmli2016/MARCONetPlusPlus / PSPEncoder

Class PSPEncoder

networks/psp_encoder_arch.py:44–250  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

42
43
44class PSPEncoder(nn.Module):
45 def __init__(self, block=BasicBlock, layers=[3, 4, 6, 6, 3], strides=[(2,2),(1,2),(2,2),(1,2),(2,2)]):
46 self.inplanes = 32
47 super(PSPEncoder, self).__init__()
48 self.conv1 = nn.Conv2d(3, 32, kernel_size=3, stride=1, padding=1,
49 bias=False)
50 self.relu = nn.LeakyReLU(0.2)
51
52 feature_out_dim = 256
53 self.layer1 = self._make_layer(block, 32, layers[0], stride=strides[0])
54 self.layer2 = self._make_layer(block, 64, layers[1], stride=strides[1])
55 self.layer3 = self._make_layer(block, 128, layers[2], stride=strides[2])
56 self.layer4 = self._make_layer(block, 256, layers[3], stride=strides[3])
57 self.layer5 = self._make_layer(block, 512, layers[4], stride=strides[4])
58
59 self.layer512_to_outdim = nn.Sequential(
60 nn.Conv2d(512, feature_out_dim, kernel_size=1, stride=1, bias=False),
61 nn.LeakyReLU(0.2)
62 )
63 self.layer256_to_512 = nn.Sequential(
64 nn.Conv2d(256, 512, kernel_size=1, stride=1, bias=False),
65 nn.LeakyReLU(0.2)
66 )
67
68
69 self.down_h = 1
70 for stride in strides:
71 self.down_h *= stride[0]
72 self.size_h = 32 // self.down_h * 2
73
74
75 self.feature2w = nn.Sequential(
76 PixelNorm(),
77 EqualLinear(self.size_h*self.size_h*feature_out_dim, 512, bias=True, bias_init_val=0, lr_mul=1, activation='fused_lrelu'),
78 EqualLinear(512, 512, bias=True, bias_init_val=0, lr_mul=1, activation='fused_lrelu'),
79 )
80
81 for m in self.modules():
82 if isinstance(m, nn.Conv2d):
83 n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels
84 m.weight.data.normal_(0, math.sqrt(2. / n))
85
86
87 def _make_layer(self, block, planes, blocks, stride=1):
88 downsample = None
89 if stride != 1 or self.inplanes != planes:
90 downsample = nn.Sequential(
91 nn.Conv2d(self.inplanes, planes,
92 kernel_size=1, stride=stride, bias=False),
93 nn.LeakyReLU(0.2)
94 )
95 # GroupNorm(planes),
96 layers = []
97 layers.append(block(self.inplanes, planes, stride, downsample))
98 self.inplanes = planes
99 for i in range(1, blocks):
100 layers.append(block(self.inplanes, planes))
101 return nn.Sequential(*layers)

Callers 1

__init__Method · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected