def __init__(self, params, norm=None): super(RelSO3OutBlockR, self).__init__() c_in = params['dim_in'] mlp = params['mlp'] na = params['kanchor'] self.pointnet = sptk.PointnetSO3Conv(c_in, c_in, na) c_in = c_in * 2 self.linear = nn.ModuleList() self.temperature = params['temperature'] rp = params['representation'] if rp == 'quat': self.out_channel = 4 elif rp == 'ortho6d': self.out_channel = 6 else: raise KeyError("Unrecognized representation of rotation: %s" % rp) self.attention_layer = nn.Conv2d(mlp[-1], 1, (1, 1)) # out channel equals 4 for quaternion representation, 6 for ortho representation self.regressor_layer = nn.Conv2d(mlp[-1], self.out_channel, (1, 1)) # ------------------ uniary conv ---------------- for c in mlp: self.linear.append(nn.Conv2d(c_in, c, (1, 1))) c_in = c
def __init__(self, params, norm=None, debug=False): super(ClsOutBlockPointnet, self).__init__() c_in = params['dim_in'] mlp = params['mlp'] fc = params['fc'] k = params['k'] na = params['kanchor'] self.outDim = k self.linear = nn.ModuleList() self.norm = nn.ModuleList() # ------------------ uniary conv ---------------- for c in mlp: self.linear.append(nn.Conv2d(c_in, c, 1)) self.norm.append(nn.BatchNorm2d(c)) c_in = c # ----------------------------------------------- # ----------------- pooling --------------------- if 'pooling' not in params.keys(): self.pooling_method = 'max' else: self.pooling_method = params['pooling'] # BxCxA -> Bx1xA or BxCxA attention weights if self.pooling_method == 'attention': self.temperature = params['temperature'] self.attention_layer = nn.Conv1d(c_in, 1, 1) # ------------------------------------------------ # self.fc1 = nn.ModuleList() # for c in fc: # self.fc1.append(nn.Linear(c_in, c)) # # self.norm.append(nn.BatchNorm1d(c)) # c_in = c self.pointnet = sptk.PointnetSO3Conv(c_in, c_in, na) self.norm.append(nn.BatchNorm1d(c_in)) self.fc2 = nn.Linear(c_in, self.outDim) self.debug = debug
def __init__(self, params, norm=None): super(InvOutBlockMVD, self).__init__() c_in = params['dim_in'] mlp = params['mlp'] c_out = mlp[-1] na = params['kanchor'] # Attention layer self.temperature = params['temperature'] self.attention_layer = nn.Sequential(nn.Conv2d(c_in, c_in, 1), \ nn.ReLU(inplace=True), \ nn.Conv2d(c_in,c_in,1)) if 'pooling' not in params.keys(): self.pooling_method = 'max' else: self.pooling_method = params['pooling'] self.pointnet = sptk.PointnetSO3Conv(c_in, c_out, na)
def __init__(self, params, norm=None): super(InvOutBlockPointnet, self).__init__() c_in = params['dim_in'] mlp = params['mlp'] c_out = mlp[-1] na = params['kanchor'] if 'pooling' not in params.keys(): self.pooling_method = 'max' else: self.pooling_method = params['pooling'] self.pointnet = sptk.PointnetSO3Conv(c_in, c_out, na) # Attention layer if self.pooling_method == 'attention': self.temperature = params['temperature'] self.attention_layer = nn.Conv1d(c_out, 1, 1)