注意
点击这里下载完整示例代码
准备 PASCAL VOC 数据集¶
Pascal VOC 是一个用于目标检测的数据集集合。最常用的基准测试组合是使用 2007 trainval 和 2012 trainval 进行训练,使用 2007 test 进行验证。本教程将逐步指导您为 GluonCV 准备此数据集。

提示
您需要 8.4 GB 的磁盘空间来下载和解压此数据集。由于性能更好,建议使用 SSD 而非 HDD。
准备数据集的总时间取决于您的互联网速度和磁盘性能。例如,在 AWS EC2 上使用 EBS 通常需要 10 分钟。
准备数据集¶
我们需要 Pascal VOC 中的以下四个文件
文件名 |
大小 |
SHA-1 |
---|---|---|
439 MB |
34ed68851bce2a36e2a223fa52c661d592c66b3c |
|
430 MB |
41a8d6e12baa5ab18ee7f8f8029b9e11805b4ef1 |
|
1.9 GB |
4e443f8a2eca6b1dac8a6c57641b67dd40621a49 |
|
1.4 GB |
7129e0a480c2d6afb02b517bb18ac54283bfaa35 |
下载和解压这些文件的最简单方法是下载辅助脚本 pascal_voc.py
并运行以下命令
python pascal_voc.py
这将自动下载数据并解压到 ~/.mxnet/datasets/voc
。
如果您已经将上述文件保存在磁盘上,可以将 --download-dir
指向它们。例如,假设文件保存在 ~/VOCdevkit/
中,您可以运行
python pascal_voc.py --download-dir ~/VOCdevkit
使用 GluonCV 读取¶
使用 gluoncv.data.VOCDetection
加载图像和标签非常简单。
from gluoncv import data, utils
from matplotlib import pyplot as plt
train_dataset = data.VOCDetection(splits=[(2007, 'trainval'), (2012, 'trainval')])
val_dataset = data.VOCDetection(splits=[(2007, 'test')])
print('Num of training images:', len(train_dataset))
print('Num of validation images:', len(val_dataset))
输出
Num of training images: 16551
Num of validation images: 4952
现在让我们可视化一个示例。
train_image, train_label = train_dataset[5]
print('Image size (height, width, RGB):', train_image.shape)
输出
Image size (height, width, RGB): (364, 480, 3)
通过切片 0 到 4 列获取边界框
bounding_boxes = train_label[:, :4]
print('Num of objects:', bounding_boxes.shape[0])
print('Bounding boxes (num_boxes, x_min, y_min, x_max, y_max):\n',
bounding_boxes)
输出
Num of objects: 2
Bounding boxes (num_boxes, x_min, y_min, x_max, y_max):
[[184. 61. 278. 198.]
[ 89. 77. 402. 335.]]
通过切片第 5 列获取类别 ID
class_ids = train_label[:, 4:5]
print('Class IDs (num_boxes, ):\n', class_ids)
输出
Class IDs (num_boxes, ):
[[14.]
[12.]]
可视化图像、边界框
utils.viz.plot_bbox(train_image.asnumpy(), bounding_boxes, scores=None,
labels=class_ids, class_names=train_dataset.classes)
plt.show()

最后,要同时使用 train_dataset
和 val_dataset
进行训练,我们可以将它们通过数据转换并使用 mxnet.gluon.data.DataLoader
加载,更多信息请参见 train_ssd.py
。
脚本总运行时间: ( 1 分 52.250 秒)