code: def __call__(self, predicts, batch):
      if isinstance(predicts, (list, tuple)):
          predicts = predicts[-1]
  
      B, N = predicts.shape[:2]
      div = paddle.to_tensor([N]).astype("float32")
  
      predicts = nn.functional.softmax(predicts, axis=-1)
      aggregation_preds = paddle.sum(predicts, axis=1)
      aggregation_preds = paddle.divide(aggregation_preds, div)
  
      length = batch[2].astype("float32")
      batch = batch[3].astype("float32")
      batch[:, 0] = paddle.subtract(div, length)
      batch = paddle.divide(batch, div)
  
      loss = self.loss_func(aggregation_preds, batch)
      return {"loss_ace": loss}
  
file_path: PaddleOCR/ppocr/losses/ace_loss.py
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import paddle
  import paddle.nn
label_desc: Use image node_id 2 for calling the ACELoss obj's underlying member method code with example usage: obj.__call__(predicts, batch) and returns: dict