code: def probiou_loss(pred, target, eps=1e-3, mode="l1"):
      """
      pred    -> a matrix [N,5](x,y,w,h,angle - in radians) containing ours predicted box ;in case of HBB angle == 0
      target  -> a matrix [N,5](x,y,w,h,angle - in radians) containing ours target    box ;in case of HBB angle == 0
      eps     -> threshold to avoid infinite values
      mode    -> ('l1' in [0,1] or 'l2' in [0,inf]) metrics according our paper
  
      """
  
      gbboxes1 = gbb_form(pred)
      gbboxes2 = gbb_form(target)
  
      x1, y1, a1_, b1_, c1_ = (
          gbboxes1[:, 0],
          gbboxes1[:, 1],
          gbboxes1[:, 2],
          gbboxes1[:, 3],
          gbboxes1[:, 4],
      )
      x2, y2, a2_, b2_, c2_ = (
          gbboxes2[:, 0],
          gbboxes2[:, 1],
          gbboxes2[:, 2],
          gbboxes2[:, 3],
          gbboxes2[:, 4],
      )
  
      a1, b1, c1 = rotated_form(a1_, b1_, c1_)
      a2, b2, c2 = rotated_form(a2_, b2_, c2_)
  
      t1 = 0.25 * (
          (a1 + a2) * (paddle.pow(y1 - y2, 2))
          + (b1 + b2) * (paddle.pow(x1 - x2, 2))
      ) + 0.5 * ((c1 + c2) * (x2 - x1) * (y1 - y2))
      t2 = (a1 + a2) * (b1 + b2) - paddle.pow(c1 + c2, 2)
      t3_ = (a1 * b1 - c1 * c1) * (a2 * b2 - c2 * c2)
      t3 = 0.5 * paddle.log(t2 / (4 * paddle.sqrt(F.relu(t3_)) + eps))
  
      B_d = (t1 / t2) + t3
      # B_d = t1 + t2 + t3
  
      B_d = paddle.clip(B_d, min=eps, max=100.0)
      l1 = paddle.sqrt(1.0 - paddle.exp(-B_d) + eps)
      l_i = paddle.pow(l1, 2.0)
      l2 = -paddle.log(1.0 - l_i + eps)
  
      if mode == "l1":
          probiou = l1
      if mode == "l2":
          probiou = l2
  
      return probiou
  
file_path: PaddleDetection/ppdet/modeling/losses/probiou_loss.py
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import numpy
  import paddle
  import paddle.nn.functional
  from ppdet.core.workspace import register, serializable
label_desc: Use image node_id 3 for calling a global function with example usage: probiou_loss(pred, target, eps, mode) and returns: probiou