|
|
|
@ -56,18 +56,16 @@ class RTDETRPredictor(BasePredictor): |
|
|
|
|
orig_imgs = ops.convert_torch2numpy_batch(orig_imgs) |
|
|
|
|
|
|
|
|
|
results = [] |
|
|
|
|
for i, bbox in enumerate(bboxes): # (300, 4) |
|
|
|
|
for bbox, score, orig_img, img_path in zip(bboxes, scores, orig_imgs, self.batch[0]): # (300, 4) |
|
|
|
|
bbox = ops.xywh2xyxy(bbox) |
|
|
|
|
score, cls = scores[i].max(-1, keepdim=True) # (300, 1) |
|
|
|
|
idx = score.squeeze(-1) > self.args.conf # (300, ) |
|
|
|
|
max_score, cls = score.max(-1, keepdim=True) # (300, 1) |
|
|
|
|
idx = max_score.squeeze(-1) > self.args.conf # (300, ) |
|
|
|
|
if self.args.classes is not None: |
|
|
|
|
idx = (cls == torch.tensor(self.args.classes, device=cls.device)).any(1) & idx |
|
|
|
|
pred = torch.cat([bbox, score, cls], dim=-1)[idx] # filter |
|
|
|
|
orig_img = orig_imgs[i] |
|
|
|
|
pred = torch.cat([bbox, max_score, cls], dim=-1)[idx] # filter |
|
|
|
|
oh, ow = orig_img.shape[:2] |
|
|
|
|
pred[..., [0, 2]] *= ow |
|
|
|
|
pred[..., [1, 3]] *= oh |
|
|
|
|
img_path = self.batch[0][i] |
|
|
|
|
results.append(Results(orig_img, path=img_path, names=self.model.names, boxes=pred)) |
|
|
|
|
return results |
|
|
|
|
|
|
|
|
|