diff --git a/src/cvcuda/priv/OpNonMaximumSuppression.cu b/src/cvcuda/priv/OpNonMaximumSuppression.cu index 7d1ae495..ccedef74 100644 --- a/src/cvcuda/priv/OpNonMaximumSuppression.cu +++ b/src/cvcuda/priv/OpNonMaximumSuppression.cu @@ -99,11 +99,24 @@ __global__ void NonMaximumSuppression(cuda::Tensor2DWrap i const int2 coordY{bboxY, batchIdx}; const T srcY = inBBoxes[coordY]; - if (ComputeIoU(srcX, srcY) > iouThreshold) + if (ComputeIoU(srcX, srcY) <= iouThreshold) { - const float scoreY = inScores[coordY]; + continue; + } + + const float scoreY = inScores[coordY]; + + if (scoreX < scoreY) + { + discard = true; + break; + } + else if (scoreX == scoreY) + { + const float areaX = ComputeArea(srcX); + const float areaY = ComputeArea(srcY); - if (scoreX < scoreY || (scoreX == scoreY && ComputeArea(srcX) < ComputeArea(srcY))) + if (areaX < areaY || (areaX == areaY && bboxX > bboxY)) { discard = true; break;