Open
Description
Hi,
I am trying to implement autendoer in pytorch and I did write the model which I suppose is excatly what is present in this repo.
Model in pytorch
class PCAutoEncoder(nn.Module):
def __init__(self, point_dim, num_points):
super(PCAutoEncoder, self).__init__()
self.conv1 = nn.Conv1d(in_channels=point_dim, out_channels=64, kernel_size=1)
self.conv2 = nn.Conv1d(in_channels=64, out_channels=64, kernel_size=1)
self.conv3 = nn.Conv1d(in_channels=64, out_channels=64, kernel_size=1)
self.conv4 = nn.Conv1d(in_channels=64, out_channels=128, kernel_size=1)
self.conv5 = nn.Conv1d(in_channels=128, out_channels=1024, kernel_size=1)
self.fc1 = nn.Linear(in_features=1024, out_features=1024)
self.fc2 = nn.Linear(in_features=1024, out_features=1024)
self.fc3 = nn.Linear(in_features=1024, out_features=num_points*3)
#batch norm
self.bn1 = nn.BatchNorm1d(64)
self.bn2 = nn.BatchNorm1d(128)
self.bn3 = nn.BatchNorm1d(1024)
def forward(self, x):
batch_size = x.shape[0]
point_dim = x.shape[1]
num_points = x.shape[2]
#encoder
x = F.relu(self.bn1(self.conv1(x)))
x = F.relu(self.bn1(self.conv2(x)))
x = F.relu(self.bn1(self.conv3(x)))
x = F.relu(self.bn2(self.conv4(x)))
x = F.relu(self.bn3(self.conv5(x)))
# do max pooling
x = torch.max(x, 2, keepdim=True)[0]
x = x.view(-1, 1024)
# get the global embedding
global_feat = x
#decoder
x = F.relu(self.bn3(self.fc1(x)))
x = F.relu(self.bn3(self.fc2(x)))
reconstructed_points = self.fc3(x)
#do reshaping
reconstructed_points = reconstructed_points.reshape(batch_size, point_dim, num_points)
return reconstructed_points, global_feat
However, after training this model for 200 ephocs, when I try to generate the output point cloud all i can generate if scatterd points as shown below -
Any direction to figure out the problem would be helpful.
Metadata
Metadata
Assignees
Labels
No labels