docstr: Tests multi instance roi head loss when truth is empty and non-
  empty.
code: def test_standard_roi_head_loss(self):
      """Tests multi instance roi head loss when truth is empty and non-
      empty."""
      if not torch.cuda.is_available():
          # RoI pooling only support in GPU
          return unittest.skip("test requires GPU and torch+cuda")
      s = 256
      roi_head_cfg = _fake_roi_head()
      roi_head = MODELS.build(roi_head_cfg)
      roi_head = roi_head.cuda()
      feats = []
      for i in range(len(roi_head.bbox_roi_extractor.featmap_strides)):
          feats.append(
              torch.rand(
                  1, 1, s // (2 ** (i + 2)), s // (2 ** (i + 2))
              ).to(device="cuda")
          )
      feats = tuple(feats)
  
      # When truth is non-empty then emd loss should be nonzero for
      # random inputs
      image_shapes = [(3, s, s)]
      batch_data_samples = demo_mm_inputs(
          batch_size=1,
          image_shapes=image_shapes,
          num_items=[1],
          num_classes=4,
          with_mask=False,
          device="cuda",
      )["data_samples"]
      proposals_list = demo_mm_proposals(
          image_shapes=image_shapes, num_proposals=100, device="cuda"
      )
  
      out = roi_head.loss(feats, proposals_list, batch_data_samples)
      loss = out["loss_rcnn_emd"]
      self.assertGreater(loss.sum(), 0, "loss should be non-zero")
  
      # When there is no truth, the emd loss should be zero.
      batch_data_samples = demo_mm_inputs(
          batch_size=1,
          image_shapes=image_shapes,
          num_items=[0],
          num_classes=4,
          with_mask=True,
          device="cuda",
      )["data_samples"]
      proposals_list = demo_mm_proposals(
          image_shapes=image_shapes, num_proposals=100, device="cuda"
      )
      out = roi_head.loss(feats, proposals_list, batch_data_samples)
      empty_loss = out["loss_rcnn_emd"]
      self.assertEqual(
          empty_loss.sum(),
          0,
          "there should be no emd loss when there are no true boxes",
      )
  
file_path: mmdetection/tests/test_models/test_roi_heads/test_multi_instance_roi_head.py
imports: import unittest
  from unittest import TestCase
  import torch
  from mmengine.config import Config
  from mmdet.registry import MODELS
  from mmdet.testing import demo_mm_inputs, demo_mm_proposals
  from mmdet.utils import register_all_modules
label_desc: Use image node_id 2 for calling the TestMultiInstanceRoIHead obj's underlying member method code with example usage: obj.test_standard_roi_head_loss() and returns: unittest