Exemple #1
0
    def __init__(self, block, layers, num_classes=10):
        super(ResNet, self).__init__()
        self.inplanes = 16
        # self.proc = ['conv1', 'bn1', 'relu']
        self.proc = [
            'conv1', 'bn1', 'relu', 'layer1', 'layer2', 'layer3', 'avgpool',
            'fc', 'bn2'
        ]
        self.conv1 = nn.Conv2d(3,
                               16,
                               kernel_size=3,
                               stride=1,
                               padding=1,
                               bias=False)
        self.bn1 = nn.BatchNorm2d(16)
        self.relu = nn.ReLU(inplace=True)
        self.layer1 = self._make_layer(block, 16, layers[0])
        self.layer2 = self._make_layer(block, 32, layers[1], stride=2)
        self.layer3 = self._make_layer(block, 64, layers[2], stride=2)
        self.avgpool = nn.AvgPool2d(8, stride=1)
        self.fc = nn.Conv2d(64 * block.expansion, num_classes, 1, bias=False)
        self.bn2 = nn.BatchNorm2d(num_classes)

        for m in self.modules():
            if isinstance(m, nn.BatchNorm2d):
                m.weight.data.fill_(1)
                m.bias.data.zero_()
Exemple #2
0
 def __init__(self, inplanes, planes, stride=1, downsample=None):
     super(BasicBlock, self).__init__()
     self.proc = ['conv1', 'bn1', 'relu', 'conv2', 'bn2']
     self.conv1 = conv3x3(inplanes, planes, stride=stride)
     self.bn1 = nn.BatchNorm2d(planes)
     self.relu = nn.ReLU(inplace=True)
     self.conv2 = conv3x3(planes, planes)
     self.bn2 = nn.BatchNorm2d(planes)
     self.downsample = downsample
     self.stride = stride
 def __init__(self, inplanes, planes, stride=1, downsample=None):
     super(BasicBlock, self).__init__()
     self.conv1 = conv3x3(inplanes, planes, stride=stride)
     self.bn1 = nn.BatchNorm2d(planes)
     self.relu1 = nn.ReLU(inplace=True)
     self.conv2 = conv3x3(planes, planes)
     self.bn2 = nn.BatchNorm2d(planes)
     self.downsample = downsample
     self.share1 = tqt.fold.ShareQuant()
     self.share2 = tqt.fold.ShareQuant()
     self.relu2 = nn.ReLU(inplace=True)
     self.stride = stride
    def _make_layer(self, block, planes, blocks, stride=1):
        downsample = None
        if stride != 1 or self.inplanes != planes * block.expansion:
            downsample = nn.Sequential(
                SEConv2d(self.inplanes,
                         planes * block.expansion,
                         kernel_size=1,
                         stride=stride,
                         bias=False),  # shift
                Adder2D(planes * block.expansion,
                        planes * block.expansion,
                        kernel_size=1,
                        stride=1),  # add
                nn.BatchNorm2d(planes * block.expansion))

        layers = []
        layers.append(
            block(inplanes=self.inplanes,
                  planes=planes,
                  stride=stride,
                  downsample=downsample))
        self.inplanes = planes * block.expansion
        for _ in range(1, blocks):
            layers.append(block(inplanes=self.inplanes, planes=planes))

        return nn.Sequential(*layers)