|
|
@@ -93,7 +93,14 @@ class YOLOv7(nn.Module):
|
|
|
all_bboxes = []
|
|
|
|
|
|
for obj_pred_i, cls_pred_i, box_pred_i in zip(obj_preds, cls_preds, box_preds):
|
|
|
- # (H x W x KA x C,)
|
|
|
+ conf_i = obj_pred_i[..., 0].sigmoid()
|
|
|
+ conf_keep_i = conf_i > self.conf_thresh
|
|
|
+
|
|
|
+ obj_pred_i = obj_pred_i[conf_keep_i]
|
|
|
+ cls_pred_i = cls_pred_i[conf_keep_i]
|
|
|
+ box_pred_i = box_pred_i[conf_keep_i]
|
|
|
+
|
|
|
+ # (H x W x C,)
|
|
|
scores_i = (torch.sqrt(obj_pred_i.sigmoid() * cls_pred_i.sigmoid())).flatten()
|
|
|
|
|
|
# Keep top k top scoring indices only.
|
|
|
@@ -101,13 +108,13 @@ class YOLOv7(nn.Module):
|
|
|
|
|
|
# torch.sort is actually faster than .topk (at least on GPUs)
|
|
|
predicted_prob, topk_idxs = scores_i.sort(descending=True)
|
|
|
- topk_scores = predicted_prob[:num_topk]
|
|
|
+ scores = predicted_prob[:num_topk]
|
|
|
topk_idxs = topk_idxs[:num_topk]
|
|
|
|
|
|
- # filter out the proposals with low confidence score
|
|
|
- keep_idxs = topk_scores > self.conf_thresh
|
|
|
- scores = topk_scores[keep_idxs]
|
|
|
- topk_idxs = topk_idxs[keep_idxs]
|
|
|
+ # # filter out the proposals with low confidence score
|
|
|
+ # keep_idxs = scores > self.conf_thresh
|
|
|
+ # scores = scores[keep_idxs]
|
|
|
+ # topk_idxs = topk_idxs[keep_idxs]
|
|
|
|
|
|
anchor_idxs = torch.div(topk_idxs, self.num_classes, rounding_mode='floor')
|
|
|
labels = topk_idxs % self.num_classes
|