Explanation on Detectnet_v2's `deadzone_radius` hyperparameter

We are training networks with Detectnet_v2 and are in the tuning process. We would like some clarification on the hyperparameter deadzone_radius. Per this documentation, deadzone_radius is

The area to be considered dormant (or area of no bbox) around the ellipse of an object. This is particularly useful in cases of overlapping objects so that foreground objects and background objects are not confused.

If I understand correctly, each detection is actually an ellipse with a box ideally circumscribing it. For example, say you want to detect a ball, the ellipse should be the same shape as the ball (since the object of interest is an ellipse itself). Then, the deadzone “around the ellipse of an object” (in our example) would be the area in red below:

If this is correct, then it would be best to set deadzone_radius: 1.0 since 100% of the area around the ellipse of the object is not part of the object (even though it is included in the bbox)? And, since not all objects are perfectly elliptical like a car for example:


The deadzone_radius would not be 1.0.

The deadzone_radius is a hyperparameter that defines an area around the detected object where no bounding box (bbox) should be considered. This parameter is particularly useful in scenarios involving overlapping objects, as it helps to differentiate between foreground and background objects.

Purpose: The deadzone_radius creates a “dormant” area around the predicted ellipse of an object. This means that within this radius, the model will ignore any potential bounding boxes to prevent confusion between closely positioned objects.

Application: For example, if you are detecting spherical objects like balls, the detection algorithm will ideally represent these objects as ellipses. The deadzone_radius would then define an area around this ellipse where other objects (or parts of the same object) should not trigger additional detections. This helps in improving detection accuracy by reducing false positives in cluttered scenes.

Setting the Value: The value of deadzone_radius can vary based on the shape and size of the objects being detected. A value of 1.0 might be appropriate for perfectly circular or spherical objects, indicating that the entire surrounding area is non-object space. However, for irregularly shaped objects (like cars), a smaller radius might be more suitable to avoid excluding relevant parts of the object while still maintaining separation from other nearby objects.

The deadzone_radius is crucial for fine-tuning object detection models to enhance their accuracy, especially in environments where multiple objects may overlap or be in close proximity. Adjusting this parameter allows for better management of detection boundaries and improves overall model performance in complex scenes.

Thanks for the explanation. A few follow up questions:

  1. In our images, there will only ever be one ball (object) to detect. In this case, would deadzone_radius be obsolete?
  2. As a follow-up to Question 1: In the same scenario, if there were to be a background object “touching” the ball that could be confused with the ball (same color), then could lowering the deadzone_radius help prevent the bbox to maintain separation from this background object as per:

Setting the Value: … a smaller radius might be more suitable to avoid excluding relevant parts of the object while still maintaining separation from other nearby objects.

  1. Is the deadzone_radius value a percent of the detected object’s ellipse radius? such that deadzone_radius: 1.0 would be a deadzone in the size of100% of the radius of the detected object’s ellipse (i.e. double the size)?

No. It is needed to set it in the training spec file.

e value of deadzone_radius can vary based on the shape and size of the objects being detected. A value of 1.0 might be appropriate for perfectly circular or spherical objects, indicating that the entire surrounding area is non-object space.

It is the radius of the deadzone to be drawn in between overlapping coverage regions.
You can refer to tao_tensorflow1_backend/nvidia_tao_tf1/cv/detectnet_v2/rasterizers/bbox_rasterizer_config.py at 2ec95cbbe0d74d6a180ea6e989f64d2d97d97712 · NVIDIA/tao_tensorflow1_backend · GitHub as well.

No. It is needed to set it in the training spec file.

I understand it has to exist in the config file. But if the image only contains one object, then the value of the deadzone_radius would not have much affect since there should be no other objects in the image? Or does it still help to “differentiate between foreground and background objects” (even if those foreground/background objects are not detected in the network)?

No, it still helps to differentiate between foreground and background objects, and prevent confusion between closely positioned objects.