docstr: compute the loss separating the miner and the loss
  each point correspond to a labels
docstr_tok: ["compute","the","loss","separating","the","miner","and","the","loss","each","point","correspond","to","a","labels"]
code: def compute_loss_label(self):
      """
      compute the loss separating the miner and the loss
      each point correspond to a labels
      """
      output = torch.cat(
          [
              self.output[self.match[:, 0]],
              self.output_target[self.match[:, 1]],
          ],
          0,
      )
      rang = torch.arange(
          0, len(self.match), dtype=torch.long, device=self.match.device
      )
      labels = torch.cat([rang, rang], 0)
      hard_pairs = None
      if self.miner_module is not None:
          hard_pairs = self.miner_module(output, labels)
      # loss
      loss_reg = self.metric_loss_module(output, labels, hard_pairs)
      return loss_reg
  
imports: import logging
  import torch
  import torch.nn.functional
  from typing import Any
  from torch_points3d.datasets.multiscale_data import MultiScaleBatch
  from torch_points3d.models.base_architectures import BackboneBasedModel
  from torch_points3d.models.base_model import BaseModel
  from torch_points3d.core.common_modules.dense_modules import Conv1D
  from torch_points3d.core.common_modules.base_modules import Seq
label_desc: Use image node_id 4 for calling the FragmentBaseModel obj's underlying member method code with example usage: obj.compute_loss_label() and returns: loss_reg