mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-07-15 00:11:15 +03:00
fix: drop degenerate YOLO boxes before NMS in post_process_nms_yolo
When a YOLO model predicts w=0 or h=0, the cx±w/2 conversion in __post_process_nms_yolo produces boxes where x2<=x1 or y2<=y1. These pass through NMS unchanged and reach the norfair distance function, where they trigger a divide-by-zero producing NaN. Add a vectorised validity mask immediately after the xyxy conversion to drop any box with non-positive width or height before NMS runs. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
adc8c2a6e8
commit
8786ad0466
@ -205,6 +205,15 @@ def __post_process_nms_yolo(predictions: np.ndarray, width, height) -> np.ndarra
|
|||||||
boxes_xyxy[:, 3] = boxes[:, 1] + boxes[:, 3] / 2
|
boxes_xyxy[:, 3] = boxes[:, 1] + boxes[:, 3] / 2
|
||||||
boxes = boxes_xyxy
|
boxes = boxes_xyxy
|
||||||
|
|
||||||
|
# Drop degenerate boxes (zero or negative width/height). These arise when
|
||||||
|
# a YOLO prediction has w=0 or h=0, which after cx±w/2 conversion gives
|
||||||
|
# x2<=x1 or y2<=y1. They pass through NMS unchanged and then cause a
|
||||||
|
# divide-by-zero NaN in the norfair distance function (see norfair_tracker.py).
|
||||||
|
valid = (boxes[:, 2] > boxes[:, 0]) & (boxes[:, 3] > boxes[:, 1])
|
||||||
|
boxes = boxes[valid]
|
||||||
|
scores = scores[valid]
|
||||||
|
class_ids = class_ids[valid]
|
||||||
|
|
||||||
# run NMS
|
# run NMS
|
||||||
indices = cv2.dnn.NMSBoxes(boxes, scores, score_threshold=0.4, nms_threshold=0.4)
|
indices = cv2.dnn.NMSBoxes(boxes, scores, score_threshold=0.4, nms_threshold=0.4)
|
||||||
detections = np.zeros((20, 6), np.float32)
|
detections = np.zeros((20, 6), np.float32)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user