R3PM-Net / thirdparty /learning3d /models /segmentation.py
YasiiKB's picture
initial commit
97aa5af verified
import torch
import torch.nn as nn
import torch.nn.functional as F
class Segmentation(nn.Module):
def __init__(self, feature_model, num_classes=40):
super(Segmentation, self).__init__()
self.feature_model = feature_model
self.num_classes = num_classes
self.conv1 = torch.nn.Conv1d(self.feature_model.emb_dims+64, 512, 1)
self.conv2 = torch.nn.Conv1d(512, 256, 1)
self.conv3 = torch.nn.Conv1d(256, 128, 1)
self.conv4 = torch.nn.Conv1d(128, self.num_classes, 1)
self.bn1 = nn.BatchNorm1d(512)
self.bn2 = nn.BatchNorm1d(256)
self.bn3 = nn.BatchNorm1d(128)
def forward(self, input_data):
output = self.feature_model(input_data)
output = F.relu(self.bn1(self.conv1(output)))
output = F.relu(self.bn2(self.conv2(output)))
output = F.relu(self.bn3(self.conv3(output)))
output = self.conv4(output)
output = output.permute(0, 2, 1) # B x N x num_classes
return output
if __name__ == '__main__':
from pointnet import PointNet
x = torch.rand(10,1024,3)
pn = PointNet(global_feat=False)
seg = Segmentation(pn)
seg_result = seg(x)
print('Input Shape: {}\n Segmentation Output Shape: {}'
.format(x.shape, seg_result.shape))