From 39c20fc9535cedd0fb0b299a6173e678d0450137 Mon Sep 17 00:00:00 2001 From: Thomas Friedel Date: Sun, 26 May 2024 01:00:46 +0200 Subject: [PATCH] fix for predicting with batch_size > 1 --- ultralytics/models/yolov10/predict.py | 29 ++++++++++++++++----------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/ultralytics/models/yolov10/predict.py b/ultralytics/models/yolov10/predict.py index 98994f71..29f21a9c 100644 --- a/ultralytics/models/yolov10/predict.py +++ b/ultralytics/models/yolov10/predict.py @@ -11,28 +11,33 @@ class YOLOv10DetectionPredictor(DetectionPredictor): if isinstance(preds, (list, tuple)): preds = preds[0] - - if preds.shape[-1] == 6: - pass - else: + + if preds.shape[-1] != 6: preds = preds.transpose(-1, -2) - bboxes, scores, labels = ops.v10postprocess(preds, self.args.max_det, preds.shape[-1]-4) + bboxes, scores, labels = ops.v10postprocess( + preds, self.args.max_det, preds.shape[-1] - 4 + ) bboxes = ops.xywh2xyxy(bboxes) - preds = torch.cat([bboxes, scores.unsqueeze(-1), labels.unsqueeze(-1)], dim=-1) + preds = torch.cat( + [bboxes, scores.unsqueeze(-1), labels.unsqueeze(-1)], dim=-1 + ) mask = preds[..., 4] > self.args.conf - b, _, c = preds.shape - preds = preds.view(-1, preds.shape[-1])[mask.view(-1)] - preds = preds.view(b, -1, c) + # Filter predictions using the mask and keep batch dimension + filtered_preds = [p[mask[idx]] for idx, p in enumerate(preds)] - if not isinstance(orig_imgs, list): # input images are a torch.Tensor, not a list + if not isinstance( + orig_imgs, list + ): # input images are a torch.Tensor, not a list orig_imgs = ops.convert_torch2numpy_batch(orig_imgs) results = [] - for i, pred in enumerate(preds): + for i, pred in enumerate(filtered_preds): orig_img = orig_imgs[i] pred[:, :4] = ops.scale_boxes(img.shape[2:], pred[:, :4], orig_img.shape) img_path = self.batch[0][i] - results.append(Results(orig_img, path=img_path, names=self.model.names, boxes=pred)) + results.append( + Results(orig_img, path=img_path, names=self.model.names, boxes=pred) + ) return results