Custom BBOX NMS

Hi there,

I have made a custom object detector that can be translated/run on the hailo, but i’m wondering if its possible to add NMS. My model already has BBOX decoding aboard the hailo, so that does not need to happen. So i’m wondering what format does the output need to be for NMS?

The YOLO format?
[x1, y1, x2, y2, score, class_id]

Many thanks,
Piers

Hi @piers.turner
What is your model architecture? Can you elaborate what you mean by “My model already has BBOX decoding aboard the hailo”?

Hiya,

I’ve made a custom head for damoyolo, such that the output is boxes and scores (rather than an intermediate output that has to be post-processed). I’m interested in doing NMS aboard the hailo core, to make inference as fast a possible on an edge device where I want to also limit cpu cycles.

Best,
Piers

Hi @piers.turner
Thanks for the details. For this case, since it needs to be implemented on the Hailo device, Hailo team may provide instructions.

NMS on chip is only supported for CenterNet, SSD, and yolov5. If you can turn your output into yolov5 output format (the 3 output convs), then it is possible. Not sure how easy/possible this is deriving anchors from an anchor-less model.

Does the nms post processing not first rectify the boxes from the intermediate output convs before applying nms?

Hey @piers.turner,

Yes, it’s absolutely possible to run Non-Maximum Suppression (NMS) on Hailo hardware using post-processing, depending on your model.

This is the standard format used in Hailo Model Zoo detection models, including YOLOv5, SSD, and similar architectures.

What You Should Ensure:

  • The format must be preserved as-is after BBOX decoding if it occurs inside the model
  • The tensors passed to NMS should be float32 (or converted from uint8/INT8 if quantized)
  • Batch dimension is usually retained if you plan to post-process multiple frames per inference cycle

No, the Hailo NMS post-processing does not perform bounding box rectification.