class_docstr: This class computes the loss for DETR.
  The process happens in two steps:
      1) we compute hungarian assignment between ground truth boxes and the outputs of the model
      2) we supervise each pair of matched ground-truth / prediction (supervise class and box)
class_docstr_tok: ["This","class","computes","the","loss","for","DETR",".","The","process","happens","in","two","steps",":","1",")","we","compute","hungarian","assignment","between","ground","truth","boxes","and","the","outputs","of","the","model","2",")","we","supervise","each","pair","of","matched","ground-truth","\/","prediction","(","supervise","class","and","box",")"]
docstr: Classification loss (NLL)
  targets dicts must contain the key "labels" containing a tensor of dim [nb_target_boxes]
docstr_tok: ["Classification","loss","(","NLL",")","targets","dicts","must","contain","the","key","``","labels","''","containing","a","tensor","of","dim","[","nb_target_boxes","]"]
code: def loss_labels(self, outputs, targets, indices, num_boxes, log=True):
      """Classification loss (NLL)
      targets dicts must contain the key "labels" containing a tensor of dim [nb_target_boxes]
      """
      assert "pred_logits" in outputs
      src_logits = outputs["pred_logits"]
  
      idx = self._get_src_permutation_idx(indices)
      target_classes_o = torch.cat(
          [t["labels"][J] for t, (_, J) in zip(targets, indices)]
      )
      target_classes = torch.full(
          src_logits.shape[:2],
          self.num_classes,
          dtype=torch.int64,
          device=src_logits.device,
      )
      target_classes[idx] = target_classes_o
  
      loss_ce = F.cross_entropy(
          src_logits.transpose(1, 2), target_classes, self.empty_weight
      )
      losses = {"loss_ce": loss_ce}
  
      if log:
          # TODO this should probably be a separate loss, not hacked in this one here
          losses["class_error"] = (
              100 - accuracy(src_logits[idx], target_classes_o)[0]
          )
      return losses
  
imports: from collections import OrderedDict
  import torch
  from torch import nn
  from torch.jit.annotations import Dict
  from torch.nn import functional
label_desc: Use image node_id 2 for calling the SetCriterion obj's underlying member method code with example usage: obj.loss_labels(outputs, targets, indices, num_boxes, log) and returns: losses