41 物体检测和目标检测数据集【李沐动手学深度学习v2课程笔记】

本文详细讲解了物体检测中的关键概念,如边界框表示法,并展示了如何使用香蕉数据集进行模型训练,强调了目标检测与图像分类数据加载的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1. 物体检测

2. 边缘框实现

3.数据集

4. 小结


1. 物体检测


2. 边缘框实现

%matplotlib inline
import torch
from d2l import torch as d2l

d2l.set_figsize()
img = d2l.plt.imread('../img/catdog.jpg')
d2l.plt.imshow(img);

#@save
def box_corner_to_center(boxes):
    """从(左上,右下)转换到(中间,宽度,高度)"""
    x1, y1, x2, y2 = boxes[:, 0], boxes[:, 1], boxes[:, 2], boxes[:, 3]
    cx = (x1 + x2) / 2
    cy = (y1 + y2) / 2
    w = x2 - x1
    h = y2 - y1
    boxes = torch.stack((cx, cy, w, h), axis=-1)
    return boxes

#@save
def box_center_to_corner(boxes):
    """从(中间,宽度,高度)转换到(左上,右下)"""
    cx, cy, w, h = boxes[:, 0], boxes[:, 1], boxes[:, 2], boxes[:, 3]
    x1 = cx - 0.5 * w
    y1 = cy - 0.5 * h
    x2 = cx + 0.5 * w
    y2 = cy + 0.5 * h
    boxes = torch.stack((x1, y1, x2, y2), axis=-1)
    return boxes

# bbox是边界框的英文缩写
dog_bbox, cat_bbox = [60.0, 45.0, 378.0, 516.0], [400.0, 112.0, 655.0, 493.0]

boxes = torch.tensor((dog_bbox, cat_bbox))
box_center_to_corner(box_corner_to_center(boxes)) == boxes

#@save
def bbox_to_rect(bbox, color):
    # 将边界框(左上x,左上y,右下x,右下y)格式转换成matplotlib格式:
    # ((左上x,左上y),宽,高)
    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)

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'));


3.数据集

%matplotlib inline
import os
import pandas as pd
import torch
import torchvision
from d2l import torch as d2l

#@save
d2l.DATA_HUB['banana-detection'] = (
    d2l.DATA_URL + 'banana-detection.zip',
    '5de26c8fce5ccdea9f91267273464dc968d20d72')

#@save
def read_data_bananas(is_train=True):
    """读取香蕉检测数据集中的图像和标签"""
    data_dir = d2l.download_extract('banana-detection')
    csv_fname = os.path.join(data_dir, 'bananas_train' if is_train
                             else 'bananas_val', 'label.csv')
    csv_data = pd.read_csv(csv_fname)
    csv_data = csv_data.set_index('img_name')
    images, targets = [], []
    for img_name, target in csv_data.iterrows():
        images.append(torchvision.io.read_image(
            os.path.join(data_dir, 'bananas_train' if is_train else
                         'bananas_val', 'images', f'{img_name}')))
        # 这里的target包含(类别,左上角x,左上角y,右下角x,右下角y),
        # 其中所有图像都具有相同的香蕉类(索引为0)
        targets.append(list(target))
    return images, torch.tensor(targets).unsqueeze(1) / 256

#@save
class BananasDataset(torch.utils.data.Dataset):
    """一个用于加载香蕉检测数据集的自定义数据集"""
    def __init__(self, is_train):
        self.features, self.labels = read_data_bananas(is_train)
        print('read ' + str(len(self.features)) + (f' training examples' if
              is_train else f' validation examples'))

    def __getitem__(self, idx):
        return (self.features[idx].float(), self.labels[idx])

    def __len__(self):
        return len(self.features)

#@save
def load_data_bananas(batch_size):
    """加载香蕉检测数据集"""
    train_iter = torch.utils.data.DataLoader(BananasDataset(is_train=True),
                                             batch_size, shuffle=True)
    val_iter = torch.utils.data.DataLoader(BananasDataset(is_train=False),
                                           batch_size)
    return train_iter, val_iter

batch_size, edge_size = 32, 256
train_iter, _ = load_data_bananas(batch_size)
batch = next(iter(train_iter))
batch[0].shape, batch[1].shape

imgs = (batch[0][0:10].permute(0, 2, 3, 1)) / 255
axes = d2l.show_images(imgs, 2, 5, scale=2)
for ax, label in zip(axes, batch[1][0:10]):
    d2l.show_bboxes(ax, [label[0][1:5] * edge_size], colors=['w'])


4. 小结

  • 目标检测不仅可以识别图像中所有感兴趣的物体,还能识别它们的位置,该位置通常由矩形边界框表示。

  • 我们可以在两种常用的边界框表示(中间,宽度,高度)和(左上,右下)坐标之间进行转换。

  • 我们收集的香蕉检测数据集可用于演示目标检测模型。

  • 用于目标检测的数据加载与图像分类的数据加载类似。但是,在目标检测中,标签还包含真实边界框的信息,它不出现在图像分类中。

<think>好的,用户需要下载李沐的《动手学深度学习》V2中的目标检测数据集。首先,我得确认这本书的官方资源在哪里。通常,李沐老师的课程相关资料会在Apache MXNet的GitHub仓库或者D2L的专门网站上。 我记得《动手学深度学习》的官方网站是d2l.ai,应该在那里能找到数据集的链接。用户提到的目标检测数据集,可能是指Pikachu数据集,这是书中常用的示例数据集,用于目标检测的教学。需要检查该数据集是否在D2L的GitHub仓库中提供。 接下来,访问D2L的GitHub仓库,查看对应的版本分支。V2版本可能对应的是pytorch分支,所以需要确认数据集的路径。通常,数据集可能存放在`d2l-data`仓库中,或者作为附加资源在代码目录里。例如,Pikachu数据集可能位于`d2l/pikachu`目录下,或者通过特定的下载脚本获取。 此外,用户可能需要安装D2L库,通过pip安装d2l包,然后使用内置的函数下载数据集。例如,在代码中调用`d2l.download_pikachu()`这样的函数。需要确认该函数是否存在,并指导用户如何正确使用。 另外,还要考虑数据集下载的备用链接,比如作者提供的AWS或其它云存储链接,以防GitHub访问受限。同时,检查是否有数据预处理步骤,确保用户下载后能正确加载使用数据。 最后,生成相关问题,帮助用户扩展了解目标检测的其他数据集、数据加载方法,以及数据增强技术,这些都是在实际应用中可能需要的知识。</think>要下载《动手学深度学习》V2中的目标检测数据集,可通过以下步骤实现: 1. **访问官方GitHub仓库** 李沐团队在GitHub维护了完整的代码数据资源,目标检测数据集位于: ```bash https://github.com/d2l-ai/d2l-pytorch/tree/master/data ``` 在该目录下可以找到`pikachu`目标检测数据集(含图片标注文件)[^1] 2. **使用D2L库自动下载** 安装Python库后可直接调用API: ```python import d2l data_dir = d2l.download_data('https://d2l-data.s3-accelerate.amazonaws.com/pikachu.zip') ``` 3. **手动下载地址** 直接访问AWS存储桶下载原始文件: ``` https://d2l-data.s3-accelerate.amazonaws.com/pikachu.zip ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值