Ejemplo n.º 1
0
    def __init__(self, D=3):
        super(STN3d, self).__init__()

        k = self.KERNEL_SIZES
        s = self.STRIDES
        c = self.CONV_CHANNELS

        self.block1 = nn.Sequential(
            ME.MinkowskiConvolution(3,
                                    c[0],
                                    kernel_size=k[0],
                                    stride=s[0],
                                    has_bias=False,
                                    dimension=3),
            ME.MinkowskiInstanceNorm(c[0]), ME.MinkowskiReLU())
        self.block2 = nn.Sequential(
            ME.MinkowskiConvolution(c[0],
                                    c[1],
                                    kernel_size=k[1],
                                    stride=s[1],
                                    has_bias=False,
                                    dimension=3),
            ME.MinkowskiInstanceNorm(c[1]), ME.MinkowskiReLU())
        self.block3 = nn.Sequential(
            ME.MinkowskiConvolution(c[1],
                                    c[2],
                                    kernel_size=k[2],
                                    stride=s[2],
                                    has_bias=False,
                                    dimension=3),
            ME.MinkowskiInstanceNorm(c[2]), ME.MinkowskiReLU())

        # Use the kernelsize 1 convolution for linear layers. If kernel size ==
        # 1, minkowski engine internally uses a linear function.
        self.block4 = nn.Sequential(
            ME.MinkowskiConvolution(c[2],
                                    c[3],
                                    kernel_size=1,
                                    has_bias=False,
                                    dimension=3),
            ME.MinkowskiInstanceNorm(c[3]), ME.MinkowskiReLU())
        self.block5 = nn.Sequential(
            ME.MinkowskiConvolution(c[3],
                                    c[4],
                                    kernel_size=1,
                                    has_bias=False,
                                    dimension=3),
            ME.MinkowskiInstanceNorm(c[4]), ME.MinkowskiReLU())
        self.fc6 = ME.MinkowskiConvolution(c[4],
                                           9,
                                           kernel_size=1,
                                           has_bias=True,
                                           dimension=3)

        self.avgpool = ME.MinkowskiGlobalPooling()
        self.broadcast = ME.MinkowskiBroadcast()
Ejemplo n.º 2
0
 def __init__(self, in_channels):
     super(PointNetfeat, self).__init__()
     self.pool = ME.MinkowskiGlobalPooling()
     self.broadcast = ME.MinkowskiBroadcast()
     self.stn = STN3d(D=3)
     self.conv1 = nn.Conv1d(in_channels + 3, 128, 1, bias=False)
     self.conv2 = nn.Conv1d(128, 256, 1, bias=False)
     self.bn1 = nn.BatchNorm1d(128)
     self.bn2 = nn.BatchNorm1d(256)
     self.relu = nn.ReLU()
Ejemplo n.º 3
0
    def __init__(self, D=3):
        super(STN3d, self).__init__()

        k = self.KERNEL_SIZES
        s = self.STRIDES
        c = self.CONV_CHANNELS

        self.conv1 = ME.MinkowskiConvolution(3,
                                             c[0],
                                             kernel_size=k[0],
                                             stride=s[0],
                                             has_bias=False,
                                             dimension=3)
        self.conv2 = ME.MinkowskiConvolution(c[0],
                                             c[1],
                                             kernel_size=k[1],
                                             stride=s[1],
                                             has_bias=False,
                                             dimension=3)
        self.conv3 = ME.MinkowskiConvolution(c[1],
                                             c[2],
                                             kernel_size=k[2],
                                             stride=s[2],
                                             has_bias=False,
                                             dimension=3)

        # Use the kernelsize 1 convolution for linear layers. If kernel size ==
        # 1, minkowski engine internally uses a linear function.
        self.fc4 = ME.MinkowskiConvolution(c[2],
                                           c[3],
                                           kernel_size=1,
                                           has_bias=False,
                                           dimension=3)
        self.fc5 = ME.MinkowskiConvolution(c[3],
                                           c[4],
                                           kernel_size=1,
                                           has_bias=False,
                                           dimension=3)
        self.fc6 = ME.MinkowskiConvolution(c[4],
                                           9,
                                           kernel_size=1,
                                           has_bias=True,
                                           dimension=3)

        self.relu = ME.MinkowskiReLU(inplace=True)
        self.avgpool = ME.MinkowskiGlobalPooling()
        self.broadcast = ME.MinkowskiBroadcast()

        self.bn1 = ME.MinkowskiInstanceNorm(c[0], dimension=3)
        self.bn2 = ME.MinkowskiInstanceNorm(c[1], dimension=3)
        self.bn3 = ME.MinkowskiInstanceNorm(c[2], dimension=3)
        self.bn4 = ME.MinkowskiInstanceNorm(c[3], dimension=3)
        self.bn5 = ME.MinkowskiInstanceNorm(c[4], dimension=3)
Ejemplo n.º 4
0
    def __init__(self,
                 in_features,
                 out_features,
                 kernel_sizes=None,
                 dilations=None,
                 mode='avg',
                 D=3):
        super(SPP, self).__init__()
        if mode == 'avg':
            self.pool_fn = ME.MinkowskiAvgPooling
        elif mode == 'max':
            self.pool_fn = ME.MinkowskiMaxPooling
        elif mode == 'sum':
            self.pool_fn = ME.MinkowskiSumPooling
        else:
            raise ValueError("Invalid pooling mode, must be one of \
                'sum', 'max' or 'average'")
        self.unpool_fn = ME.MinkowskiPoolingTranspose

        # Include global pooling as first modules.
        self.pool = [ME.MinkowskiGlobalPooling(dimension=D)]
        self.unpool = [ME.MinkowskiBroadcast(dimension=D)]
        multiplier = 1
        # Define subregion poolings
        self.spp = []
        if kernel_sizes is not None:
            if isinstance(dilations, int):
                dilations = [dilations for _ in range(len(kernel_sizes))]
            elif isinstance(dilations, list):
                assert len(kernel_sizes) == len(dilations)
            else:
                raise ValueError("Invalid input to dilations, must be either \
                    int or list of ints")
            multiplier = len(kernel_sizes) + 1  # Additional 1 for globalPool
            for k, d in zip(kernel_sizes, dilations):
                pooling_layer = self.pool_fn(kernel_size=k,
                                             dilation=d,
                                             stride=k,
                                             dimension=D)
                unpooling_layer = self.unpool_fn(kernel_size=k,
                                                 dilation=d,
                                                 stride=k,
                                                 dimension=D)
                self.pool.append(pooling_layer)
                self.unpool.append(unpooling_layer)
        self.pool = nn.Sequential(*self.pool)
        self.unpool = nn.Sequential(*self.unpool)
        self.linear = ME.MinkowskiLinear(in_features * multiplier,
                                         out_features)
Ejemplo n.º 5
0
    def __init__(self, D=3):
        super(STN3d, self).__init__()
        self.conv1 = nn.Conv1d(3, 64, 1, bias=False)
        self.conv2 = nn.Conv1d(64, 128, 1, bias=False)
        self.conv3 = nn.Conv1d(128, 256, 1, bias=False)
        self.fc1 = nn.Linear(256, 128, bias=False)
        self.fc2 = nn.Linear(128, 64, bias=False)
        self.fc3 = nn.Linear(64, 9)
        self.relu = nn.ReLU()
        self.pool = ME.MinkowskiGlobalPooling()

        self.bn1 = nn.BatchNorm1d(64)
        self.bn2 = nn.BatchNorm1d(128)
        self.bn3 = nn.BatchNorm1d(256)
        self.bn4 = nn.BatchNorm1d(128)
        self.bn5 = nn.BatchNorm1d(64)
        self.broadcast = ME.MinkowskiBroadcast()