class_docstr: Arguments:
      threshold (float): Threshold for classifier confidence score
class_docstr_tok: ["Arguments",":","threshold","(","float",")",":","Threshold","for","classifier","confidence","score"]
docstr: Performs predictions on input frames
  Arguments:
      frames (np.ndarray): Frames on which predictions need
      to be performed
  Returns:
      tuple containing predicted_classes (List[List[str]]),
      predicted_boxes (List[List[BoundingBox]]),
      predicted_scores (List[List[float]])
docstr_tok: ["Performs","predictions","on","input","frames","Arguments",":","frames","(","np.ndarray",")",":","Frames","on","which","predictions","need","to","be","performed","Returns",":","tuple","containing","predicted_classes","(","List","[","List","[","str","]","]",")",",","predicted_boxes","(","List","[","List","[","BoundingBox","]","]",")",",","predicted_scores","(","List","[","List","[","float","]","]",")"]
code: def forward(self, frames: pd.DataFrame) -> pd.DataFrame:
      """
      Performs predictions on input frames
      Arguments:
          frames (np.ndarray): Frames on which predictions need
          to be performed
      Returns:
          tuple containing predicted_classes (List[List[str]]),
          predicted_boxes (List[List[BoundingBox]]),
          predicted_scores (List[List[float]])
      """
      outcome = []
      # Fix me: this should be taken care by decorators
      frames = np.ravel(frames.to_numpy())
      list_of_numpy_images = [its for its in frames]
      predictions = self.model.predict(
          list_of_numpy_images,
          device=self.device,
          conf=self.threshold,
          verbose=False,
      )
      for pred in predictions:
          single_result = pred.boxes
          pred_class = [
              self.model.names[i] for i in single_result.cls.tolist()
          ]
          pred_score = single_result.conf.tolist()
          pred_score = [
              round(conf, 2) for conf in single_result.conf.tolist()
          ]
          pred_boxes = single_result.xyxy.tolist()
          sorted_list = list(
              map(lambda i: i < self.threshold, pred_score)
          )
          t = (
              sorted_list.index(True)
              if True in sorted_list
              else len(sorted_list)
          )
          outcome.append(
              {
                  "labels": pred_class[:t],
                  "bboxes": pred_boxes[:t],
                  "scores": pred_score[:t],
              },
          )
      return pd.DataFrame(
          outcome,
          columns=[
              "labels",
              "bboxes",
              "scores",
          ],
      )
  
file_path: evadb/evadb/functions/yolo_object_detector.py
imports: import numpy
  import pandas
  from evadb.catalog.catalog_type import NdArrayType
  from evadb.functions.abstract.abstract_function import AbstractFunction
  from evadb.functions.decorators.decorators import forward, setup
  from evadb.functions.decorators.io_descriptors.data_types import PandasDataframe
  from evadb.functions.gpu_compatible import GPUCompatible
  from evadb.utils.generic_utils import try_to_import_ultralytics
label_desc: Use image node_id 3 for calling the Yolo obj's underlying member method code with example usage: obj.forward(frames) and returns: pd