Bird
Raised Fist0
PyTorchml~5 mins

Bounding box handling in PyTorch

Choose your learning style10 modes available
Introduction
Bounding boxes help computers find and locate objects in images by drawing rectangles around them.
When you want to detect objects like cars or people in photos.
When you need to crop parts of an image based on object location.
When training a model to recognize and locate multiple objects.
When evaluating how well a model predicts object positions.
When visualizing detected objects on images.
Syntax
PyTorch
import torch

# Bounding box format: [x_min, y_min, x_max, y_max]
boxes = torch.tensor([[10, 20, 50, 60], [30, 40, 70, 80]])

# Example: compute area of bounding boxes
def box_area(boxes):
    return (boxes[:, 2] - boxes[:, 0]) * (boxes[:, 3] - boxes[:, 1])
Bounding boxes are usually stored as four numbers: left, top, right, bottom coordinates.
Coordinates are often in pixels relative to the image size.
Examples
Calculate the area of one bounding box.
PyTorch
boxes = torch.tensor([[15, 25, 55, 65]])
area = (boxes[:, 2] - boxes[:, 0]) * (boxes[:, 3] - boxes[:, 1])
print(area)
Get widths and heights of multiple bounding boxes.
PyTorch
boxes = torch.tensor([[10, 20, 50, 60], [30, 40, 70, 80]])
widths = boxes[:, 2] - boxes[:, 0]
heights = boxes[:, 3] - boxes[:, 1]
print(widths, heights)
Find the center point of a bounding box.
PyTorch
boxes = torch.tensor([[10, 20, 50, 60]])
center_x = (boxes[:, 0] + boxes[:, 2]) / 2
center_y = (boxes[:, 1] + boxes[:, 3]) / 2
print(center_x, center_y)
Sample Model
This program calculates the area of two bounding boxes and checks if a point is inside each box.
PyTorch
import torch

# Define bounding boxes: [x_min, y_min, x_max, y_max]
boxes = torch.tensor([[10, 20, 50, 60], [30, 40, 70, 80]])

# Function to compute area of bounding boxes
def box_area(boxes):
    widths = boxes[:, 2] - boxes[:, 0]
    heights = boxes[:, 3] - boxes[:, 1]
    return widths * heights

# Compute areas
areas = box_area(boxes)
print(f"Areas of bounding boxes: {areas.tolist()}")

# Function to check if a point is inside a bounding box
# point: (x, y), box: [x_min, y_min, x_max, y_max]
def is_point_in_box(point, box):
    x, y = point
    return (box[0] <= x <= box[2]) and (box[1] <= y <= box[3])

# Test point
point = (35, 50)
inside_results = [is_point_in_box(point, box) for box in boxes]
print(f"Is point {point} inside each box? {inside_results}")
OutputSuccess
Important Notes
Bounding box coordinates must be consistent (x_min < x_max and y_min < y_max).
When working with images, remember coordinates start at the top-left corner.
You can convert bounding boxes to other formats like center coordinates plus width and height if needed.
Summary
Bounding boxes mark object locations with four numbers: left, top, right, bottom.
You can calculate box area, width, height, or check if points lie inside boxes.
Handling bounding boxes correctly helps train and evaluate object detection models.

Practice

(1/5)
1. What do the four numbers in a bounding box usually represent in PyTorch object detection tasks?
easy
A. Width, height, depth, and color
B. Center x, center y, width, height
C. Top-left corner x and y, width, height
D. Left, top, right, bottom coordinates of the box

Solution

  1. Step 1: Understand bounding box format

    Bounding boxes in PyTorch detection models are often represented by four numbers indicating the edges: left (x_min), top (y_min), right (x_max), and bottom (y_max).
  2. Step 2: Compare options with standard format

    Left, top, right, bottom coordinates of the box matches this format exactly, while others describe different formats or unrelated values.
  3. Final Answer:

    Left, top, right, bottom coordinates of the box -> Option D
  4. Quick Check:

    Bounding box = left, top, right, bottom [OK]
Hint: Remember bounding box edges are left, top, right, bottom [OK]
Common Mistakes:
  • Confusing center coordinates with edges
  • Mixing width and height with coordinates
  • Assuming depth or color are part of bounding box
2. Which PyTorch tensor shape correctly represents a batch of 5 bounding boxes, each with 4 coordinates?
easy
A. torch.Size([5, 4])
B. torch.Size([4, 5])
C. torch.Size([5])
D. torch.Size([4])

Solution

  1. Step 1: Identify bounding box tensor shape

    Each bounding box has 4 coordinates. For 5 boxes, the tensor shape should be (5, 4), meaning 5 rows (boxes) and 4 columns (coordinates).
  2. Step 2: Match options with correct shape

    torch.Size([5, 4]) matches (5, 4). torch.Size([4, 5]) reverses dimensions, and C and D are one-dimensional, which is incorrect.
  3. Final Answer:

    torch.Size([5, 4]) -> Option A
  4. Quick Check:

    Batch size 5 and 4 coords = (5, 4) [OK]
Hint: Batch size first, coordinates second in tensor shape [OK]
Common Mistakes:
  • Swapping batch and coordinate dimensions
  • Using 1D tensor for multiple boxes
  • Confusing number of boxes with number of coordinates
3. Given the following PyTorch code, what is the output?
import torch
boxes = torch.tensor([[1, 2, 4, 6], [0, 0, 3, 3]])
widths = boxes[:, 2] - boxes[:, 0]
heights = boxes[:, 3] - boxes[:, 1]
areas = widths * heights
print(areas.tolist())
medium
A. [10, 9]
B. [15, 9]
C. [12, 9]
D. [12, 6]

Solution

  1. Step 1: Calculate widths and heights

    For box 1: width = 4 - 1 = 3, height = 6 - 2 = 4. For box 2: width = 3 - 0 = 3, height = 3 - 0 = 3.
  2. Step 2: Calculate areas

    Area box 1 = 3 * 4 = 12, area box 2 = 3 * 3 = 9.
  3. Final Answer:

    [12, 9] -> Option C
  4. Quick Check:

    Area = width * height = [12, 9] [OK]
Hint: Area = (right-left) * (bottom-top) for each box [OK]
Common Mistakes:
  • Subtracting coordinates in wrong order
  • Mixing width with height values
  • Forgetting to multiply widths and heights
4. Identify the error in this PyTorch code snippet for checking if points lie inside bounding boxes:
import torch
boxes = torch.tensor([1, 1, 5, 5])
points = torch.tensor([[3, 3], [6, 6]])
inside = (points[:, 0] >= boxes[:, 0]) & (points[:, 0] <= boxes[:, 2]) & (points[:, 1] >= boxes[:, 1]) & (points[:, 1] <= boxes[:, 3])
print(inside)
medium
A. The comparison between points and boxes tensors will fail due to shape mismatch
B. The logical AND operator '&' cannot be used with tensors
C. The code should use .all() to combine conditions
D. Points coordinates are reversed in the comparisons

Solution

  1. Step 1: Check tensor shapes for broadcasting

    Boxes shape is (4,), points shape is (2,2). Comparing points[:, 0] (shape 2) with boxes[:, 0] causes shape mismatch as boxes is 1D.
  2. Step 2: Understand broadcasting rules

    Direct element-wise comparison fails because points and boxes dimensions don't align for broadcasting in this code.
  3. Final Answer:

    The comparison between points and boxes tensors will fail due to shape mismatch -> Option A
  4. Quick Check:

    Shape mismatch causes error in element-wise comparison [OK]
Hint: Check tensor shapes before element-wise comparisons [OK]
Common Mistakes:
  • Assuming PyTorch auto-broadcasts all shapes
  • Using bitwise operators incorrectly
  • Mixing coordinate order in comparisons
5. You want to convert bounding boxes from (left, top, right, bottom) format to (center_x, center_y, width, height) in PyTorch. Which code snippet correctly performs this conversion for a tensor boxes of shape (N, 4)?
hard
A. centers = boxes[:, :2] - boxes[:, 2:] sizes = boxes[:, 2:] + boxes[:, :2] converted = torch.cat([centers, sizes], dim=1)
B. centers = (boxes[:, :2] + boxes[:, 2:]) / 2 sizes = boxes[:, 2:] - boxes[:, :2] converted = torch.cat([centers, sizes], dim=1)
C. centers = boxes[:, 2:] - boxes[:, :2] sizes = (boxes[:, :2] + boxes[:, 2:]) / 2 converted = torch.cat([sizes, centers], dim=1)
D. centers = boxes[:, :2] * boxes[:, 2:] sizes = boxes[:, 2:] / boxes[:, :2] converted = torch.cat([centers, sizes], dim=1)

Solution

  1. Step 1: Calculate center coordinates

    Center x and y are the average of left and right, top and bottom: (left + right)/2, (top + bottom)/2, which is (boxes[:, :2] + boxes[:, 2:]) / 2.
  2. Step 2: Calculate width and height

    Width and height are right - left and bottom - top: boxes[:, 2:] - boxes[:, :2].
  3. Step 3: Concatenate centers and sizes

    Combine centers and sizes along dimension 1 to get (center_x, center_y, width, height).
  4. Final Answer:

    centers = (boxes[:, :2] + boxes[:, 2:]) / 2 sizes = boxes[:, 2:] - boxes[:, :2] converted = torch.cat([centers, sizes], dim=1) -> Option B
  5. Quick Check:

    Center = avg edges, size = difference edges [OK]
Hint: Center = average edges; size = difference edges [OK]
Common Mistakes:
  • Swapping center and size calculations
  • Using addition instead of subtraction for sizes
  • Concatenating in wrong order
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