Bird
Raised Fist0
PyTorchml~5 mins

Non-maximum suppression in PyTorch

Choose your learning style10 modes available
Introduction
Non-maximum suppression helps pick the best boxes when detecting objects, so we don't get many overlapping boxes for the same object.
When you have many overlapping boxes from an object detector and want to keep only the best ones.
To reduce duplicate detections in images with multiple objects.
When you want to clean up predictions from models like YOLO or Faster R-CNN.
To improve the clarity of object detection results before showing them to users.
Syntax
PyTorch
torchvision.ops.nms(boxes, scores, iou_threshold) -> indices
boxes: Tensor of shape [N, 4] with box coordinates in (x1, y1, x2, y2) format.
scores: Tensor of shape [N] with confidence scores for each box.
iou_threshold: float between 0 and 1 to decide when boxes overlap too much.
Examples
Keeps boxes with less than 0.5 overlap and removes others.
PyTorch
indices = torchvision.ops.nms(boxes, scores, 0.5)
Uses a stricter overlap threshold, removing more boxes.
PyTorch
indices = torchvision.ops.nms(boxes, scores, 0.3)
Allows more overlap, keeping more boxes.
PyTorch
indices = torchvision.ops.nms(boxes, scores, 0.7)
Sample Model
This code creates 4 boxes with scores. It uses NMS to keep only boxes that don't overlap too much. Boxes 0 and 2 are kept because boxes 1 and 3 overlap too much with them and have lower scores.
PyTorch
import torch
import torchvision.ops

# Define 4 boxes (x1, y1, x2, y2)
boxes = torch.tensor([
    [10, 10, 50, 50],
    [12, 12, 48, 48],
    [100, 100, 150, 150],
    [110, 110, 140, 140]
], dtype=torch.float32)

# Confidence scores for each box
scores = torch.tensor([0.9, 0.8, 0.75, 0.6])

# Apply Non-maximum suppression with IoU threshold 0.5
keep_indices = torchvision.ops.nms(boxes, scores, 0.5)

print("Boxes kept after NMS:")
for i in keep_indices:
    print(f"Box {i.item()}: {boxes[i].tolist()}, score: {scores[i].item()}")
OutputSuccess
Important Notes
NMS works by sorting boxes by score and removing boxes that overlap too much with higher scored boxes.
The IoU threshold controls how much overlap is allowed; lower means stricter filtering.
Make sure boxes are in (x1, y1, x2, y2) format before using NMS.
Summary
Non-maximum suppression removes overlapping boxes to keep only the best detections.
It uses box coordinates and scores to decide which boxes to keep.
The IoU threshold controls how strict the overlap filtering is.

Practice

(1/5)
1. What is the main purpose of Non-maximum Suppression (NMS) in object detection using PyTorch?
easy
A. To increase the number of detected boxes
B. To resize images before detection
C. To randomly select boxes for training
D. To remove overlapping bounding boxes and keep only the best ones

Solution

  1. Step 1: Understand the role of NMS

    Non-maximum suppression is used to filter out overlapping bounding boxes that represent the same object.
  2. Step 2: Identify the goal of NMS

    It keeps only the bounding box with the highest confidence score among overlapping boxes to avoid duplicate detections.
  3. Final Answer:

    To remove overlapping bounding boxes and keep only the best ones -> Option D
  4. Quick Check:

    NMS purpose = remove overlaps, keep best [OK]
Hint: NMS filters duplicates, keeping only top scoring boxes [OK]
Common Mistakes:
  • Thinking NMS increases detected boxes
  • Confusing NMS with image resizing
  • Assuming NMS randomly selects boxes
2. Which PyTorch function is commonly used to perform Non-maximum Suppression on bounding boxes and scores?
easy
A. torch.sort
B. torch.max
C. torch.ops.torchvision.nms
D. torch.argmax

Solution

  1. Step 1: Identify the PyTorch NMS function

    PyTorch provides a dedicated function called torch.ops.torchvision.nms to perform Non-maximum Suppression.
  2. Step 2: Differentiate from other functions

    torch.max, torch.sort, and torch.argmax do not perform NMS; they serve different purposes like finding max values or sorting tensors.
  3. Final Answer:

    torch.ops.torchvision.nms -> Option C
  4. Quick Check:

    PyTorch NMS function = torch.ops.torchvision.nms [OK]
Hint: Use torch.ops.torchvision.nms for Non-maximum Suppression in PyTorch [OK]
Common Mistakes:
  • Using torch.max instead of torch.ops.torchvision.nms
  • Confusing sorting functions with NMS
  • Trying torch.argmax for NMS
3. Given the following PyTorch code snippet, what will be the output tensor of indices after applying NMS?
import torch
boxes = torch.tensor([[10, 10, 20, 20], [11, 11, 21, 21], [30, 30, 40, 40]], dtype=torch.float)
scores = torch.tensor([0.9, 0.8, 0.7])
iou_threshold = 0.5
indices = torch.ops.torchvision.nms(boxes, scores, iou_threshold)
print(indices.tolist())
medium
A. [0, 2]
B. [1, 2]
C. [0, 1, 2]
D. [2]

Solution

  1. Step 1: Analyze box overlaps and scores

    Boxes 0 and 1 overlap with IoU > 0.5, box 2 is separate. Box 0 has higher score (0.9) than box 1 (0.8).
  2. Step 2: Apply NMS logic

    NMS keeps box 0, removes box 1 due to overlap and lower score, and keeps box 2 as it does not overlap.
  3. Final Answer:

    [0, 2] -> Option A
  4. Quick Check:

    Keep highest score boxes without high overlap = [0, 2] [OK]
Hint: Keep highest score boxes, remove overlapping lower scores [OK]
Common Mistakes:
  • Keeping all boxes ignoring overlap
  • Removing box 0 instead of box 1
  • Keeping only one box
4. Identify the error in this PyTorch NMS usage and select the correct fix:
import torch
boxes = torch.tensor([[0, 0, 10, 10], [1, 1, 11, 11]], dtype=torch.float)
scores = torch.tensor([0.5, 0.6])
iou_threshold = 0.3
indices = torch.nms(boxes, scores, iou_threshold)
print(indices)
medium
A. Set iou_threshold to 1.0
B. Use torch.ops.torchvision.nms instead of torch.nms
C. Change boxes dtype to int
D. Sort scores before calling nms

Solution

  1. Step 1: Check function availability

    torch.nms is not a direct PyTorch function; NMS is accessed via torchvision ops as torch.ops.torchvision.nms.
  2. Step 2: Correct function call

    Replacing torch.nms with torch.ops.torchvision.nms fixes the error and runs NMS correctly.
  3. Final Answer:

    Use torch.ops.torchvision.nms instead of torch.nms -> Option B
  4. Quick Check:

    Correct NMS call = torch.ops.torchvision.nms [OK]
Hint: Use torchvision's nms via torch.ops.torchvision.nms [OK]
Common Mistakes:
  • Calling torch.nms directly
  • Changing box dtype unnecessarily
  • Adjusting IoU threshold without fixing function
5. You have detected multiple overlapping boxes with scores: [0.95, 0.9, 0.85, 0.6]. If you apply Non-maximum Suppression with a very low IoU threshold (e.g., 0.1), what is the expected effect on the number of boxes kept?
hard
A. Most boxes will be removed because even slight overlaps are suppressed
B. All boxes will be kept because the threshold is low
C. Only the box with the lowest score will be kept
D. Boxes will be randomly removed regardless of overlap

Solution

  1. Step 1: Understand IoU threshold meaning

    A low IoU threshold means boxes with even small overlaps are considered duplicates and suppressed.
  2. Step 2: Predict effect on boxes

    Because boxes overlap slightly, most will be removed except the highest scoring box, reducing the number kept.
  3. Final Answer:

    Most boxes will be removed because even slight overlaps are suppressed -> Option A
  4. Quick Check:

    Low IoU threshold = strict filtering = fewer boxes [OK]
Hint: Lower IoU threshold means stricter overlap removal [OK]
Common Mistakes:
  • Thinking low threshold keeps more boxes
  • Assuming random removal
  • Believing lowest score box is kept
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard