From 90d64ae7c71306f5b0f6a99a6dae0e755428c57b Mon Sep 17 00:00:00 2001 From: Jim Martens Date: Fri, 13 Sep 2019 11:47:18 +0200 Subject: [PATCH] Added use_nms config option Signed-off-by: Jim Martens --- src/twomartens/masterthesis/cli.py | 35 ++++++++++++++------------- src/twomartens/masterthesis/config.py | 1 + src/twomartens/masterthesis/ssd.py | 6 ++++- 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/src/twomartens/masterthesis/cli.py b/src/twomartens/masterthesis/cli.py index 8dbf5f8..42af198 100644 --- a/src/twomartens/masterthesis/cli.py +++ b/src/twomartens/masterthesis/cli.py @@ -266,23 +266,24 @@ def _ssd_test(args: argparse.Namespace) -> None: nr_digits = _get_nr_digits(generators.length, conf_obj.parameters.batch_size) steps_per_epoch = _get_nr_batches(generators.length, conf_obj.parameters.batch_size) - ssd.predict(generators.generator, - ssd_model, - steps_per_epoch, - conf_obj.parameters.ssd_image_size, - conf_obj.parameters.batch_size, - conf_obj.parameters.ssd_forward_passes_per_image, - conf_obj.parameters.ssd_use_entropy_threshold, - conf_obj.parameters.ssd_entropy_threshold_min, - conf_obj.parameters.ssd_entropy_threshold_max, - conf_obj.parameters.ssd_confidence_threshold, - conf_obj.parameters.ssd_iou_threshold, - conf_obj.parameters.ssd_top_k, - paths.output_path, - conf_obj.paths.coco, - use_dropout, - nr_digits, - conf_obj.parameters.nr_classes) + ssd.predict(generator=generators.generator, + model=ssd_model, + steps_per_epoch=steps_per_epoch, + image_size=conf_obj.parameters.ssd_image_size, + batch_size=conf_obj.parameters.batch_size, + forward_passes_per_image=conf_obj.parameters.ssd_forward_passes_per_image, + use_nms=conf_obj.parameters.ssd_use_nms, + use_entropy_threshold=conf_obj.parameters.ssd_use_entropy_threshold, + entropy_threshold_min=conf_obj.parameters.ssd_entropy_threshold_min, + entropy_threshold_max=conf_obj.parameters.ssd_entropy_threshold_max, + confidence_threshold=conf_obj.parameters.ssd_confidence_threshold, + iou_threshold=conf_obj.parameters.ssd_iou_threshold, + top_k=conf_obj.parameters.ssd_top_k, + output_path=paths.output_path, + coco_path=conf_obj.paths.coco, + use_dropout=use_dropout, + nr_digits=nr_digits, + nr_classes=conf_obj.parameters.nr_classes) def _ssd_evaluate(args: argparse.Namespace) -> None: diff --git a/src/twomartens/masterthesis/config.py b/src/twomartens/masterthesis/config.py index d728290..ef131e3 100644 --- a/src/twomartens/masterthesis/config.py +++ b/src/twomartens/masterthesis/config.py @@ -62,6 +62,7 @@ _CONFIG_PROPS = { "ssd_iou_threshold": (float, "0.45"), "ssd_top_k": (int, "200"), "ssd_dropout_rate": (float, "0.5"), + "ssd_use_nms": (bool, "True"), "ssd_use_entropy_threshold": (bool, "False"), "ssd_entropy_threshold_min": (float, "0.1"), "ssd_entropy_threshold_max": (float, "2.5"), diff --git a/src/twomartens/masterthesis/ssd.py b/src/twomartens/masterthesis/ssd.py index 738e7c7..46fab7a 100644 --- a/src/twomartens/masterthesis/ssd.py +++ b/src/twomartens/masterthesis/ssd.py @@ -150,6 +150,7 @@ def predict(generator: callable, image_size: int, batch_size: int, forward_passes_per_image: int, + use_nms: bool, use_entropy_threshold: bool, entropy_threshold_min: float, entropy_threshold_max: float, @@ -174,6 +175,7 @@ def predict(generator: callable, batch_size: number of items in every batch forward_passes_per_image: specifies number of forward passes per image used by DropoutSSD + use_nms: if True non-maximum suppression will be used for Bayesian SSD use_entropy_threshold: if True entropy thresholding is applied entropy_threshold_min: specifies the minimum threshold for the entropy entropy_threshold_max: specifies the maximum threshold for the entropy @@ -219,7 +221,8 @@ def predict(generator: callable, _apply_entropy_filtering, confidence_threshold=confidence_threshold, nr_classes=nr_classes, - iou_threshold=iou_threshold + iou_threshold=iou_threshold, + use_nms=use_nms ), apply_top_k_func=functools.partial( _apply_top_k, @@ -322,6 +325,7 @@ def _predict_loop(generator: Generator, use_dropout: bool, steps_per_epoch: int, if use_entropy_threshold: nr_steps = math.floor((entropy_threshold_max - entropy_threshold_min) * 10) entropy_thresholds = [round(i / 10 + entropy_threshold_min, 1) for i in range(nr_steps)] + # entropy_thresholds = [1.4] else: entropy_thresholds = [0]