def __init__(self,
                 input_shape,
                 num_classes=10,
                 filters=96,
                 pool_rotations=True):
        super(GroupAllConvolutional, self).__init__()
        h, w, c = input_shape
        self.pool_rotations = pool_rotations
        self.name = "AllGConvolutional"
        filters2 = filters * 2
        self.conv1 = P4ConvZ2(c, filters, kernel_size=3, padding=1)
        self.conv2 = P4ConvP4(filters, filters, kernel_size=3, padding=1)
        self.conv2 = P4ConvP4(filters,
                              filters,
                              kernel_size=3,
                              padding=1,
                              stride=2)
        self.conv3 = P4ConvP4(filters, filters2, kernel_size=3, padding=1)
        self.conv4 = P4ConvP4(filters2, filters2, kernel_size=3, padding=1)

        self.conv5 = P4ConvP4(filters2, filters2, kernel_size=3, padding=1)
        self.conv6 = P4ConvP4(filters2,
                              filters2,
                              kernel_size=3,
                              padding=1,
                              stride=2)
        self.conv7 = P4ConvP4(filters2, filters2, kernel_size=3, padding=1)
        self.conv8 = P4ConvP4(filters2, filters2, kernel_size=1)

        if self.pool_rotations:
            final_filters = filters2
        else:
            final_filters = filters2 * 4

        self.class_conv = nn.Conv2d(final_filters, num_classes, 1)
示例#2
0
 def __init__(self, in_channel, out_channel):
     super().__init__()
     self.conv0 = P4ConvZ2(in_channel,
                           out_channel,
                           kernel_size=5,
                           padding=2)
     self.relu = nn.LeakyReLU(0.2, inplace=True)
    def __init__(self,
                 input_shape,
                 num_classes,
                 filters=16,
                 fc_filters=32,
                 pool_rotations=True):
        super(SimpleGConv, self).__init__()
        self.name = "SimpleGConv"
        h, w, channels = input_shape
        self.pool_rotations = pool_rotations

        self.conv1 = P4ConvZ2(channels, filters, kernel_size=3, padding=1)
        self.conv2 = P4ConvP4(filters, filters, kernel_size=3, padding=1)
        self.conv3 = P4ConvP4(filters, filters, kernel_size=3, padding=1)
        self.conv4 = P4ConvP4(filters, filters * 2, kernel_size=3, padding=1)
        self.conv5 = P4ConvP4(filters * 2,
                              filters * 4,
                              kernel_size=3,
                              padding=1)
        linear_size = (h // 4) * (w // 4) * filters * 4
        if not self.pool_rotations:
            linear_size *= 4
        self.fc1 = nn.Linear(linear_size, fc_filters)
        self.bn1 = nn.BatchNorm1d(fc_filters)
        self.fc2 = nn.Linear(fc_filters, num_classes)
 def __init__(self, *args, **kwargs):
     super(Net, self).__init__()
     self.conv1 = P4ConvZ2(1, 10, kernel_size=3)
     self.conv2 = P4ConvP4(10, 10, kernel_size=3)
     self.conv3 = P4ConvP4(10, 20, kernel_size=3)
     self.conv4 = P4ConvP4(20, 20, kernel_size=3)
     self.fc1 = nn.Linear(5*5*20*4, 50)
     self.fc2 = nn.Linear(50, 10)
示例#5
0
def test_p4_net_equivariance():
    from groupy.gfunc import Z2FuncArray, P4FuncArray
    import groupy.garray.C4_array as c4a

    im = np.random.randn(1, 1, 11, 11).astype('float32')
    check_equivariance(
        im=im,
        layers=[
            P4ConvZ2(in_channels=1, out_channels=2, kernel_size=3),
            P4ConvP4(in_channels=2, out_channels=3, kernel_size=3)
        ],
        input_array=Z2FuncArray,
        output_array=P4FuncArray,
        point_group=c4a,
    )
    def __init__(self,
                 input_shape,
                 num_classes,
                 filters=96,
                 pool_rotations=True):
        super(AllGConv, self).__init__()
        self.name = "AllGConvolutional"
        filters2 = filters * 2
        h, w, channels = input_shape
        self.pool_rotations = pool_rotations

        # self.conv1 = nn.Sequential(
        #         P4MConvZ2(channels, filters, kernel_size=3,padding=1),
        #         nn.BatchNorm2d(filters),
        #         nn.ReLU()
        #         )
        # self.conv2 = ConvBNAct(filters,filters)
        # self.conv3 = ConvBNAct(filters, filters,stride=2)
        # self.conv4 = ConvBNAct(filters, filters2, stride=2)
        # self.conv5 = ConvBNAct(filters2, filters2)
        # self.conv6 = ConvBNAct(filters2, filters2,  stride=2)
        # self.conv7 = ConvBNAct(filters2, filters2)
        # self.conv8 = ConvBNAct(filters2, filters2, kernel_size=1)
        self.conv = nn.Sequential(
            P4ConvZ2(channels, filters, kernel_size=3, padding=1),
            #nn.BatchNorm2d(filters),
            nn.ReLU(),
            ConvBNAct(filters, filters),
            ConvBNAct(filters, filters, stride=2),
            ConvBNAct(
                filters,
                filters2,
            ),
            ConvBNAct(filters2, filters2),
            ConvBNAct(filters2, filters2, stride=2),
            ConvBNAct(filters2, filters2),
            ConvBNAct(filters2, filters2, kernel_size=1),
        )
        final_channels = filters2
        if not self.pool_rotations:
            final_channels *= 4

        self.class_conv = nn.Conv2d(final_channels, num_classes, 1)
示例#7
0
def test_g_z2_conv_equivariance():
    from groupy.gfunc import Z2FuncArray, P4FuncArray, P4MFuncArray
    import groupy.garray.C4_array as c4a
    import groupy.garray.D4_array as d4a

    im = np.random.randn(1, 1, 11, 11).astype('float32')
    check_equivariance(
        im=im,
        layers=[P4ConvZ2(1, 2, 3)],
        input_array=Z2FuncArray,
        output_array=P4FuncArray,
        point_group=c4a,
    )

    check_equivariance(
        im=im,
        layers=[P4MConvZ2(1, 2, 3)],
        input_array=Z2FuncArray,
        output_array=P4MFuncArray,
        point_group=d4a,
    )