Esempio n. 1
0
 def _make_layers(self, cfg, quantize_bit=32):
     layers = []
     in_channels = 3
     for x in cfg:
         # [64, 'M', 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M']
         if type(x) is tuple:
             layers += [
                 nn.Conv2d(x[0],
                           x[1],
                           kernel_size=2,
                           stride=2,
                           bias=self.bias,
                           groups=x[1]),
                 catSNN.Clamp(max=self.clamp_max)
             ]
             #layers += [nn.Conv2d(x[0], x[1], kernel_size=2, stride = 2, bias=self.bias, groups = x[1]),catSNN.Clamp(max = self.clamp_max),nn.Dropout2d(0.2)]
         else:
             layers += [
                 catSNN.QuantizedConv2d(in_channels,
                                        x,
                                        kernel_size=3,
                                        padding=1,
                                        bias=self.bias,
                                        quantize_bit=quantize_bit),
                 catSNN.Clamp(max=self.clamp_max)
             ]
             #layers += [catSNN.QuantizedConv2d(in_channels, x, kernel_size=3, padding=1, bias=self.bias, quantize_bit=quantize_bit),catSNN.Clamp(max = self.clamp_max),nn.Dropout2d(0.2)]
             if self.quantize_factor != -1:
                 layers += [catSNN.Quantize(self.quantize_factor)]
             in_channels = x
     layers += [nn.AvgPool2d(kernel_size=1, stride=1)]
     return nn.Sequential(*layers)
Esempio n. 2
0
    def _make_layers(self):
        layers = []
        cfg = [(64, 1), (128, 1), (256, 1), (256, 2), (256, 1), (512, 1),
               (512, 2), 'M']

        layers += [nn.Conv2d(3, 32, 3, 1, 1, bias=True), catSNN.Clamp(max=1)]
        in_channels = 32
        for x in cfg:
            if x == 'M':
                layers += [nn.AvgPool2d(kernel_size=8, stride=8)]
            else:
                layers += [
                    nn.Conv2d(in_channels, 2 * in_channels, 1, 1, 0,
                              bias=True),
                    catSNN.Clamp(max=1)
                ]
                layers += [
                    nn.Conv2d(2 * in_channels,
                              2 * in_channels,
                              3,
                              x[1],
                              1,
                              bias=True,
                              groups=2 * in_channels),
                    catSNN.Clamp(max=1)
                ]
                layers += [
                    nn.Conv2d(2 * in_channels, x[0], 1, 1, 0, bias=True),
                    catSNN.Clamp(max=1)
                ]
                in_channels = x[0]
        return nn.Sequential(*layers)
Esempio n. 3
0
    def _make_layers(self, cfg):
        layers = []
        in_channels = 3

        for x in cfg:
            if x == 'M':
                layers += [
                    nn.AvgPool2d(kernel_size=2, stride=2),
                    nn.Dropout2d(0.15)
                ]
            else:
                padding = x[1] if isinstance(x, tuple) else 1
                out_channels = x[0] if isinstance(x, tuple) else x
                layers += [
                    catSNN.QuantizedConv2d(in_channels,
                                           out_channels,
                                           kernel_size=3,
                                           padding=padding,
                                           bias=self.bias),
                    nn.BatchNorm2d(out_channels),
                    catSNN.Clamp(max=self.clamp_max),
                    nn.Dropout2d(0.15)
                ]
                in_channels = out_channels

        layers += [nn.AvgPool2d(kernel_size=1, stride=1)]
        return nn.Sequential(*layers)
Esempio n. 4
0
 def _make_layers(self, cfg, quantize_bit=32):
     layers = []
     in_channels = 3
     for x in cfg:
         # [64, 'M', 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M']
         if x == 'M':
             layers += [nn.AvgPool2d(kernel_size=2, stride=2)]
         else:
             layers += [catSNN.QuantizedConv2d(in_channels, x, kernel_size=3, padding=1, bias=self.bias, quantize_bit=quantize_bit),
                        catSNN.Clamp(max = self.clamp_max)]#catSNN.Clamp(max = self.clamp_max)
             if self.quantize_factor!=-1:
                 layers += [catSNN.Quantize(self.quantize_factor)]
             in_channels = x
     layers += [nn.AvgPool2d(kernel_size=1, stride=1)]
     return nn.Sequential(*layers)