Dive into Deep Learning
Table Of Contents
Dive into Deep Learning
Table Of Contents

9.3. Object Detection and Bounding Box

In the previous section, we introduced many models for image classification. In image classification tasks, we assume that there is only one main target in the image and we only focus on how to identify the target category. However, in many situations, there are multiple targets in the image that we are interested in. We not only want to classify them, but also want to obtain their specific positions in the image. In computer vision, we refer to such tasks as object detection (or object detection).

Object detection is widely used in many fields. For example, in self-driving technology, we need to plan routes by identifying the locations of vehicles, pedestrians, roads, and obstacles in the captured video image. Robots often perform this type of task to detect targets of interest. Systems in the security field need to detect abnormal targets, such as intruders or bombs.

In the next few sections, we will introduce multiple deep learning models used for object detection. Before that, we should discuss the concept of target location. First, import the packages and modules required for the experiment.

In [1]:
%matplotlib inline
import d2l
from mxnet import image

Next, we will load the sample images that will be used in this section. We can see there is a dog on the left side of the image and a cat on the right. They are the two main targets in this image.

In [2]:
img = image.imread('../img/catdog.jpg').asnumpy()
d2l.plt.imshow(img);  # Add a semicolon to only display the image.

9.3.1. Bounding Box

In object detection, we usually use a bounding box to describe the target location. The bounding box is a rectangular box that can be determined by the \(x\) and \(y\) axis coordinates in the upper-left corner and the \(x\) and \(y\) axis coordinates in the lower-right corner of the rectangle. We will define the bounding boxes of the dog and the cat in the image based on the coordinate information in the above image. The origin of the coordinates in the above image is the upper left corner of the image, and to the right and down are the positive directions of the \(x\) axis and the \(y\) axis, respectively.

In [3]:
# bbox is the abbreviation for bounding box.
dog_bbox, cat_bbox = [60, 45, 378, 516], [400, 112, 655, 493]

We can draw the bounding box in the image to check if it is accurate. Before drawing the box, we will define a helper function bbox_to_rect. It represents the bounding box in the bounding box format of matplotlib.

In [4]:
def bbox_to_rect(bbox, color):  # This function is saved in the d2l package for future use.
    # Convert the bounding box (top-left x, top-left y, bottom-right x, bottom-right y) format to matplotlib format:
    # ((upper-left x, upper-left y), width, height).
    return d2l.plt.Rectangle(
        xy=(bbox[0], bbox[1]), width=bbox[2]-bbox[0], height=bbox[3]-bbox[1],
        fill=False, edgecolor=color, linewidth=2)

After loading the bounding box on the image, we can see that the main outline of the target is basically inside the box.

In [5]:
fig = d2l.plt.imshow(img)
fig.axes.add_patch(bbox_to_rect(dog_bbox, 'blue'))
fig.axes.add_patch(bbox_to_rect(cat_bbox, 'red'));

9.3.2. Summary

  • In object detection, we not only need to identify all the objects of interest in the image, but also their positions. The positions are generally represented by a rectangular bounding box.

9.3.3. Problems

  • Find some images and try to label a bounding box that contains the target. Compare the difference between the time it takes to label the bounding box and label the category.

9.3.4. Discuss on our Forum