mirror of
https://github.com/blakeblackshear/frigate.git
synced 2024-11-21 19:07:46 +01:00
Nms optimize for stationary cars (#9684)
* Use different nms values for different object types * Add tests * Format tests
This commit is contained in:
parent
97a619eaf0
commit
50563eef8d
@ -26,6 +26,10 @@ LABEL_CONSOLIDATION_MAP = {
|
|||||||
"face": 0.5,
|
"face": 0.5,
|
||||||
}
|
}
|
||||||
LABEL_CONSOLIDATION_DEFAULT = 0.9
|
LABEL_CONSOLIDATION_DEFAULT = 0.9
|
||||||
|
LABEL_NMS_MAP = {
|
||||||
|
"car": 0.6,
|
||||||
|
}
|
||||||
|
LABEL_NMS_DEFAULT = 0.4
|
||||||
|
|
||||||
# Audio Consts
|
# Audio Consts
|
||||||
|
|
||||||
|
@ -287,6 +287,15 @@ class TestObjectBoundingBoxes(unittest.TestCase):
|
|||||||
consolidated_detections = reduce_detections(frame_shape, detections)
|
consolidated_detections = reduce_detections(frame_shape, detections)
|
||||||
assert len(consolidated_detections) == len(detections)
|
assert len(consolidated_detections) == len(detections)
|
||||||
|
|
||||||
|
def test_vert_stacked_cars_not_reduced(self):
|
||||||
|
detections = [
|
||||||
|
("car", 0.8, (954, 312, 1247, 475), 498512, 1.48, (800, 200, 1400, 600)),
|
||||||
|
("car", 0.85, (970, 380, 1273, 610), 698752, 1.56, (800, 200, 1400, 700)),
|
||||||
|
]
|
||||||
|
frame_shape = (720, 1280)
|
||||||
|
consolidated_detections = reduce_detections(frame_shape, detections)
|
||||||
|
assert len(consolidated_detections) == len(detections)
|
||||||
|
|
||||||
|
|
||||||
class TestRegionGrid(unittest.TestCase):
|
class TestRegionGrid(unittest.TestCase):
|
||||||
def setUp(self) -> None:
|
def setUp(self) -> None:
|
||||||
|
@ -10,7 +10,12 @@ import numpy as np
|
|||||||
from peewee import DoesNotExist
|
from peewee import DoesNotExist
|
||||||
|
|
||||||
from frigate.config import DetectConfig, ModelConfig
|
from frigate.config import DetectConfig, ModelConfig
|
||||||
from frigate.const import LABEL_CONSOLIDATION_DEFAULT, LABEL_CONSOLIDATION_MAP
|
from frigate.const import (
|
||||||
|
LABEL_CONSOLIDATION_DEFAULT,
|
||||||
|
LABEL_CONSOLIDATION_MAP,
|
||||||
|
LABEL_NMS_DEFAULT,
|
||||||
|
LABEL_NMS_MAP,
|
||||||
|
)
|
||||||
from frigate.detectors.detector_config import PixelFormatEnum
|
from frigate.detectors.detector_config import PixelFormatEnum
|
||||||
from frigate.models import Event, Regions, Timeline
|
from frigate.models import Event, Regions, Timeline
|
||||||
from frigate.util.image import (
|
from frigate.util.image import (
|
||||||
@ -466,6 +471,7 @@ def reduce_detections(
|
|||||||
|
|
||||||
selected_objects = []
|
selected_objects = []
|
||||||
for group in detected_object_groups.values():
|
for group in detected_object_groups.values():
|
||||||
|
label = group[0][0]
|
||||||
# o[2] is the box of the object: xmin, ymin, xmax, ymax
|
# o[2] is the box of the object: xmin, ymin, xmax, ymax
|
||||||
# apply max/min to ensure values do not exceed the known frame size
|
# apply max/min to ensure values do not exceed the known frame size
|
||||||
boxes = [
|
boxes = [
|
||||||
@ -483,7 +489,9 @@ def reduce_detections(
|
|||||||
# due to min score requirement of NMSBoxes
|
# due to min score requirement of NMSBoxes
|
||||||
confidences = [0.6 if clipped(o, frame_shape) else o[1] for o in group]
|
confidences = [0.6 if clipped(o, frame_shape) else o[1] for o in group]
|
||||||
|
|
||||||
idxs = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4)
|
idxs = cv2.dnn.NMSBoxes(
|
||||||
|
boxes, confidences, 0.5, LABEL_NMS_MAP.get(label, LABEL_NMS_DEFAULT)
|
||||||
|
)
|
||||||
|
|
||||||
# add objects
|
# add objects
|
||||||
for index in idxs:
|
for index in idxs:
|
||||||
|
Loading…
Reference in New Issue
Block a user