|
|
|
@ -95,8 +95,7 @@ class ResidualBlock(nn.Cell):
|
|
|
|
|
def __init__(self,
|
|
|
|
|
in_channels,
|
|
|
|
|
out_channels,
|
|
|
|
|
stride=1,
|
|
|
|
|
down_sample=False):
|
|
|
|
|
stride=1):
|
|
|
|
|
super(ResidualBlock, self).__init__()
|
|
|
|
|
|
|
|
|
|
out_chls = out_channels // self.expansion
|
|
|
|
@ -184,7 +183,7 @@ class ResidualBlockWithDown(nn.Cell):
|
|
|
|
|
|
|
|
|
|
class MakeLayer0(nn.Cell):
|
|
|
|
|
|
|
|
|
|
def __init__(self, block, layer_num, in_channels, out_channels, stride):
|
|
|
|
|
def __init__(self, block, in_channels, out_channels, stride):
|
|
|
|
|
super(MakeLayer0, self).__init__()
|
|
|
|
|
self.a = ResidualBlockWithDown(in_channels, out_channels, stride=1, down_sample=True)
|
|
|
|
|
self.b = block(out_channels, out_channels, stride=stride)
|
|
|
|
@ -200,7 +199,7 @@ class MakeLayer0(nn.Cell):
|
|
|
|
|
|
|
|
|
|
class MakeLayer1(nn.Cell):
|
|
|
|
|
|
|
|
|
|
def __init__(self, block, layer_num, in_channels, out_channels, stride):
|
|
|
|
|
def __init__(self, block, in_channels, out_channels, stride):
|
|
|
|
|
super(MakeLayer1, self).__init__()
|
|
|
|
|
self.a = ResidualBlockWithDown(in_channels, out_channels, stride=stride, down_sample=True)
|
|
|
|
|
self.b = block(out_channels, out_channels, stride=1)
|
|
|
|
@ -218,7 +217,7 @@ class MakeLayer1(nn.Cell):
|
|
|
|
|
|
|
|
|
|
class MakeLayer2(nn.Cell):
|
|
|
|
|
|
|
|
|
|
def __init__(self, block, layer_num, in_channels, out_channels, stride):
|
|
|
|
|
def __init__(self, block, in_channels, out_channels, stride):
|
|
|
|
|
super(MakeLayer2, self).__init__()
|
|
|
|
|
self.a = ResidualBlockWithDown(in_channels, out_channels, stride=stride, down_sample=True)
|
|
|
|
|
self.b = block(out_channels, out_channels, stride=1)
|
|
|
|
@ -240,7 +239,7 @@ class MakeLayer2(nn.Cell):
|
|
|
|
|
|
|
|
|
|
class MakeLayer3(nn.Cell):
|
|
|
|
|
|
|
|
|
|
def __init__(self, block, layer_num, in_channels, out_channels, stride):
|
|
|
|
|
def __init__(self, block, in_channels, out_channels, stride):
|
|
|
|
|
super(MakeLayer3, self).__init__()
|
|
|
|
|
self.a = ResidualBlockWithDown(in_channels, out_channels, stride=stride, down_sample=True)
|
|
|
|
|
self.b = block(out_channels, out_channels, stride=1)
|
|
|
|
@ -256,7 +255,7 @@ class MakeLayer3(nn.Cell):
|
|
|
|
|
|
|
|
|
|
class ResNet(nn.Cell):
|
|
|
|
|
|
|
|
|
|
def __init__(self, block, layer_num, num_classes=100, batch_size=32):
|
|
|
|
|
def __init__(self, block, num_classes=100, batch_size=32):
|
|
|
|
|
super(ResNet, self).__init__()
|
|
|
|
|
self.batch_size = batch_size
|
|
|
|
|
self.num_classes = num_classes
|
|
|
|
@ -267,14 +266,10 @@ class ResNet(nn.Cell):
|
|
|
|
|
self.relu = P.ReLU()
|
|
|
|
|
self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, pad_mode="SAME")
|
|
|
|
|
|
|
|
|
|
self.layer1 = MakeLayer0(
|
|
|
|
|
block, layer_num[0], in_channels=64, out_channels=256, stride=1)
|
|
|
|
|
self.layer2 = MakeLayer1(
|
|
|
|
|
block, layer_num[1], in_channels=256, out_channels=512, stride=2)
|
|
|
|
|
self.layer3 = MakeLayer2(
|
|
|
|
|
block, layer_num[2], in_channels=512, out_channels=1024, stride=2)
|
|
|
|
|
self.layer4 = MakeLayer3(
|
|
|
|
|
block, layer_num[3], in_channels=1024, out_channels=2048, stride=2)
|
|
|
|
|
self.layer1 = MakeLayer0(block, in_channels=64, out_channels=256, stride=1)
|
|
|
|
|
self.layer2 = MakeLayer1(block, in_channels=256, out_channels=512, stride=2)
|
|
|
|
|
self.layer3 = MakeLayer2(block, in_channels=512, out_channels=1024, stride=2)
|
|
|
|
|
self.layer4 = MakeLayer3(block, in_channels=1024, out_channels=2048, stride=2)
|
|
|
|
|
|
|
|
|
|
self.pool = P.ReduceMean(keep_dims=True)
|
|
|
|
|
self.fc = fc_with_initialize(512 * block.expansion, num_classes)
|
|
|
|
@ -298,4 +293,4 @@ class ResNet(nn.Cell):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def resnet50(batch_size, num_classes):
|
|
|
|
|
return ResNet(ResidualBlock, [3, 4, 6, 3], num_classes, batch_size)
|
|
|
|
|
return ResNet(ResidualBlock, num_classes, batch_size)
|
|
|
|
|