class_docstr: Generalized Intersection over Union, see https://arxiv.org/abs/1902.09630
  Args:
      loss_weight (float): giou loss weight, default as 1
      eps (float): epsilon to avoid divide by zero, default as 1e-10
      reduction (string): Options are "none", "mean" and "sum". default as none
code: def __call__(self, pbox, gbox, iou_weight=1.0, loc_reweight=None):
      x1, y1, x2, y2 = paddle.split(pbox, num_or_sections=4, axis=-1)
      x1g, y1g, x2g, y2g = paddle.split(
          gbox, num_or_sections=4, axis=-1
      )
      box1 = [x1, y1, x2, y2]
      box2 = [x1g, y1g, x2g, y2g]
      iou, overlap, union = self.bbox_overlap(box1, box2, self.eps)
      xc1 = paddle.minimum(x1, x1g)
      yc1 = paddle.minimum(y1, y1g)
      xc2 = paddle.maximum(x2, x2g)
      yc2 = paddle.maximum(y2, y2g)
  
      area_c = (xc2 - xc1) * (yc2 - yc1) + self.eps
      miou = iou - ((area_c - union) / area_c)
      if loc_reweight is not None:
          loc_reweight = paddle.reshape(loc_reweight, shape=(-1, 1))
          loc_thresh = 0.9
          giou = (
              1
              - (1 - loc_thresh) * miou
              - loc_thresh * miou * loc_reweight
          )
      else:
          giou = 1 - miou
      if self.reduction == "none":
          loss = giou
      elif self.reduction == "sum":
          loss = paddle.sum(giou * iou_weight)
      else:
          loss = paddle.mean(giou * iou_weight)
      return loss * self.loss_weight
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import numpy
  import math
  import paddle
  from ppdet.core.workspace import register, serializable
  from ..bbox_utils import bbox_iou
label_desc: Use image node_id 3 for calling the GIoULoss obj's underlying member method code with example usage: obj.__call__(pbox, gbox, iou_weight, loc_reweight) and returns: unknown