def __init__(self, option, model_type, dataset, modules): super(PointGroup, self).__init__(option) backbone_options = option.get("backbone", {"architecture": "unet"}) self.Backbone = Minkowski( backbone_options.architecture, input_nc=dataset.feature_dimension, num_layers=4, config=backbone_options.config, ) self.BackboneHead = Seq().append(FastBatchNorm1d(self.Backbone.output_nc)).append(torch.nn.ReLU()) self._scorer_is_encoder = option.scorer.architecture == "encoder" self._activate_scorer = option.scorer.activate self.Scorer = Minkowski( option.scorer.architecture, input_nc=self.Backbone.output_nc, num_layers=option.scorer.depth ) self.ScorerHead = Seq().append(torch.nn.Linear(self.Scorer.output_nc, 1)).append(torch.nn.Sigmoid()) self.Offset = Seq().append(MLP([self.Backbone.output_nc, self.Backbone.output_nc], bias=False)) self.Offset.append(torch.nn.Linear(self.Backbone.output_nc, 3)) self.Semantic = ( Seq() .append(MLP([self.Backbone.output_nc, self.Backbone.output_nc], bias=False)) .append(torch.nn.Linear(self.Backbone.output_nc, dataset.num_classes)) .append(torch.nn.LogSoftmax()) ) self.loss_names = ["loss", "offset_norm_loss", "offset_dir_loss", "semantic_loss", "score_loss"] stuff_classes = dataset.stuff_classes if is_list(stuff_classes): stuff_classes = torch.Tensor(stuff_classes).long() self._stuff_classes = torch.cat([torch.tensor([IGNORE_LABEL]), stuff_classes])
def __init__(self, option, model_type, dataset, modules): super(PointGroup, self).__init__(option) backbone_options = option.get("backbone", {"architecture": "unet"}) self.Backbone = Minkowski( backbone_options.get("architecture", "unet"), input_nc=dataset.feature_dimension, num_layers=4, config=backbone_options.get("config", {}), ) self._scorer_type = option.get("scorer_type", "encoder") cluster_voxel_size = option.get("cluster_voxel_size", 0.05) if cluster_voxel_size: self._voxelizer = GridSampling3D(cluster_voxel_size, quantize_coords=True, mode="mean") else: self._voxelizer = None self.ScorerUnet = Minkowski("unet", input_nc=self.Backbone.output_nc, num_layers=4, config=option.scorer_unet) self.ScorerEncoder = Minkowski("encoder", input_nc=self.Backbone.output_nc, num_layers=4, config=option.scorer_encoder) self.ScorerMLP = MLP([ self.Backbone.output_nc, self.Backbone.output_nc, self.ScorerUnet.output_nc ]) self.ScorerHead = Seq().append( torch.nn.Linear(self.ScorerUnet.output_nc, 1)).append(torch.nn.Sigmoid()) self.Offset = Seq().append( MLP([self.Backbone.output_nc, self.Backbone.output_nc], bias=False)) self.Offset.append(torch.nn.Linear(self.Backbone.output_nc, 3)) self.Semantic = (Seq().append( MLP([self.Backbone.output_nc, self.Backbone.output_nc], bias=False)).append( torch.nn.Linear(self.Backbone.output_nc, dataset.num_classes)).append( torch.nn.LogSoftmax(dim=-1))) self.loss_names = [ "loss", "offset_norm_loss", "offset_dir_loss", "semantic_loss", "score_loss" ] stuff_classes = dataset.stuff_classes if is_list(stuff_classes): stuff_classes = torch.Tensor(stuff_classes).long() self._stuff_classes = torch.cat( [torch.tensor([IGNORE_LABEL]), stuff_classes])
def __init__(self, dataset_opt): super().__init__(dataset_opt) forward_category = dataset_opt.forward_category if not isinstance(forward_category, str): raise ValueError( "dataset_opt.forward_category is not set or is not a string. Current value: {}" .format(dataset_opt.forward_category)) self._train_categories = dataset_opt.category if not is_list(self._train_categories): self._train_categories = [self._train_categories] # Sets the index of the category with respect to the categories in the trained model self._cat_idx = None for i, train_category in enumerate(self._train_categories): if forward_category.lower() == train_category.lower(): self._cat_idx = i break if self._cat_idx is None: raise ValueError( "Cannot run an inference on category {} with a network trained on {}" .format(forward_category, self._train_categories)) log.info( "Running an inference on category {} with a network trained on {}". format(forward_category, self._train_categories)) self._data_path = dataset_opt.dataroot # include_normals = dataset_opt.include_normals if dataset_opt.include_normals else True include_normals = dataset_opt.get('include_normals', True) # Update to OmegaConf 2.0 transforms = SaveOriginalPosId() for t in [self.pre_transform, self.test_transform]: if t: transforms = T.Compose([transforms, t]) self.test_dataset = _ForwardShapenet(self._data_path, self._cat_idx, transforms=transforms, include_normals=include_normals)