class_docstr: Basic Neck of ACAR-Net
  
  Args:
      - aug_threshold (`float`):
          threshold on preserved ratio of bboxes after cropping augmentation.
      - num_classes (`int`):
          Number of classes.
      - multi_class (`bool`):
          Whether to use multiple classes.
code: def forward(self, data):
      (
          rois,
          roi_ids,
          targets,
          sizes_before_padding,
          filenames,
          mid_times,
      ) = ([], [0], [], [], [], [])
      bboxes, bbox_ids = [], []  # used for multi-crop fusion
  
      cur_bbox_id = -1  # record current bbox no.
      for idx in range(len(data["aug_info"])):
          aug_info = data["aug_info"][idx]
          pad_ratio = aug_info["pad_ratio"]
          sizes_before_padding.append(
              [1.0 / pad_ratio[0], 1.0 / pad_ratio[1]]
          )
  
          for label in data["labels"][idx]:
              cur_bbox_id += 1
              bbox_list = [label["bounding_box"]]
  
              for b in bbox_list:
                  bbox = get_bbox_after_aug(
                      aug_info, b, self.aug_threshold
                  )
                  if bbox is None:
                      continue
                  rois.append([idx] + bbox)
  
                  filenames.append(data["filenames"][idx])
                  mid_times.append(data["mid_times"][idx])
                  bboxes.append(label["bounding_box"])
                  bbox_ids.append(cur_bbox_id)
  
                  if self.multi_class:
                      ret = torch.zeros(self.num_classes)
                      ret.put_(
                          torch.LongTensor(label["label"]),
                          torch.ones(len(label["label"])),
                      )
                  else:
                      ret = torch.LongTensor(label["label"])
                  targets.append(ret)
  
          roi_ids.append(len(rois))
  
      num_rois = len(rois)
      if num_rois == 0:
          return {
              "num_rois": 0,
              "rois": None,
              "roi_ids": roi_ids,
              "targets": None,
              "sizes_before_padding": sizes_before_padding,
              "filenames": filenames,
              "mid_times": mid_times,
              "bboxes": bboxes,
              "bbox_ids": bbox_ids,
          }
  
      rois = torch.FloatTensor(rois).cpu()
      targets = torch.stack(targets, dim=0).cpu()
      return {
          "num_rois": num_rois,
          "rois": rois,
          "roi_ids": roi_ids,
          "targets": targets,
          "sizes_before_padding": sizes_before_padding,
          "filenames": filenames,
          "mid_times": mid_times,
          "bboxes": bboxes,
          "bbox_ids": bbox_ids,
      }
  
imports: import torch
  from torch import nn
  from towhee.models.acar_net.utils import get_bbox_after_aug
label_desc: Use image node_id 2 for calling the BasicNeck obj's underlying member method code with example usage: obj.forward(data) and returns: dict, dict