目标检测数据集The Object Detection Dataset

在目标检测领域,没有像MNIST或Fashion MNIST这样的小数据集。为了快速测试模型,我们将组装一个小数据集。首先,我们使用一个开源的3D Pikachu模型生成1000张不同角度和大小的Pikachu图像。然后,我们收集一系列背景图像,并在每个图像上随机放置一个Pikachu图像。我们使用MXNet提供的im2rec工具将图像转换为二进制RecordIO格式[1]。这种格式可以减少数据集在磁盘上的存储开销,提高读取效率。如果您想了解有关如何读取图像的更多信息,请参阅GluonCV工具包的文档。

1. Downloading the Dataset

可以直接从互联网上下载RecordIO格式的Pikachu数据集。

%matplotlib inline

from d2l import mxnet as d2l

from mxnet import gluon, image, np, npx

import os

npx.set_np()

#@save

d2l.DATA_HUB['pikachu'] = (d2l.DATA_URL + 'pikachu.zip',

'68ab1bd42143c5966785eb0d7b2839df8d570190')

2. Reading the Dataset

我们将通过创建实例imageDediter来读取对象检测数据集。名称中的“Det”是指检测。我们将随机读取训练数据集。因为数据集的格式是RecordIO,所以我们需要图像索引文件'train.idx'读取随机的小批量。此外,对于训练集的每个图像,我们将使用随机裁剪,并要求裁剪后的图像至少覆盖每个对象的95%。由于裁剪是随机的,这一要求并不总是满足的。我们将随机裁剪尝试的最大次数设置为200次。如果它们都不符合要求,图像将不会被裁剪。为了确保输出的确定性,我们不会随机裁剪测试数据集中的图像。我们也不需要随机读取测试数据集。

#@save

def load_data_pikachu(batch_size, edge_size=256):

"""Load the pikachu dataset."""

data_dir = d2l.download_extract('pikachu')

train_iter = image.ImageDetIter(

path_imgrec=os.path.join(data_dir, 'train.rec'),

path_imgidx=os.path.join(data_dir, 'train.idx'),

batch_size=batch_size,

data_shape=(3, edge_size, edge_size),  # The shape of the output image

shuffle=True# Read the dataset in random order

rand_crop=1,  # The probability of random cropping is 1

min_object_covered=0.95, max_attempts=200)

val_iter = image.ImageDetIter(

path_imgrec=os.path.join(data_dir, 'val.rec'), batch_size=batch_size,

data_shape=(3, edge_size, edge_size), shuffle=False)

return train_iter, val_iter

下面,我们阅读一个小批量,并打印图像和标签的形状。图像的形状与前一个实验中相同(批量大小、通道数、高度、宽度)(batch size, number of channels, height, width)。标签的形状是(批量大小,m,5)(batch size, mm, 5),其中m等于数据集中单个图像中包含的最大边界框数。虽然小批量的计算非常高效,但它要求每个图像包含相同数量的边界框,以便将它们放置在同一批中。因为每个图像可能有不同数量的边界框,我们可以添加非法的边界框到少于m边界框,直到每个图像包含m边界框。因此,我们每次都可以读取一小批图像。图像中每个边界框的标签由长度为5的数组表示。数组中的第一个元素是边界框中包含的对象的类别。当值为-1时,边界框是非法的填充边界框。数组的其余四个元素表示x、y、边界框左上角和 边界框右下角的轴坐标(值范围在0和1之间)。这里的Pikachu数据集每个图像只有一个边界框,因此m=1。

batch_size, edge_size = 32, 256

train_iter, _ = load_data_pikachu(batch_size, edge_size)

batch = train_iter.next()

batch.data[0].shape, batch.label[0].shape

Downloading ../data/pikachu.zip from http://d2l-data.s3-accelerate.amazonaws.com/pikachu.zip...

((32, 3, 256, 256), (32, 1, 5))

3. Demonstration

我们有十张图片,上面有边框。我们可以看到Pikachu的角度、大小和位置在每个图像中都是不同的。当然,这是一个简单的人工数据集。在实际操作中,数据通常要复杂得多。

imgs = (batch.data[0][0:10].transpose(0, 2, 3, 1)) / 255

axes = d2l.show_images(imgs, 2, 5, scale=2)

for ax, label in zip(axes, batch.label[0][0:10]):

d2l.show_bboxes(ax, [label[0][1:5] * edge_size], colors=['w'])

4. Summary

  • The Pikachu dataset we synthesized can be used to test object detection models.
  • The data reading for object detection is similar to that for image classification. However, after we introduce bounding boxes, the label shape and image augmentation (e.g., random cropping) are changed.

目标检测数据集The Object Detection Dataset的更多相关文章

  1. 第三十四节,目标检测之谷歌Object Detection API源码解析

    我们在第三十二节,使用谷歌Object Detection API进行目标检测.训练新的模型(使用VOC 2012数据集)那一节我们介绍了如何使用谷歌Object Detection API进行目标检 ...

  2. 项目总结三:目标检测项目(Car detection with YOLOv2)

    1. the YOLO model (YOLO ,you only look once) (1)We will use 5 anchor boxes. So you can think of the ...

  3. faster-rcnn 目标检测 数据集制作

    本文的目标是制作目标检测的数据集 使用的工具是 python + opencv 实现目标 1.批量图片重命名,手动框选图片中的目标,将目标框按照一定格式保存到txt中 图片名格式(批量) .jpg . ...

  4. 第三十二节,使用谷歌Object Detection API进行目标检测、训练新的模型(使用VOC 2012数据集)

    前面已经介绍了几种经典的目标检测算法,光学习理论不实践的效果并不大,这里我们使用谷歌的开源框架来实现目标检测.至于为什么不去自己实现呢?主要是因为自己实现比较麻烦,而且调参比较麻烦,我们直接利用别人的 ...

  5. ILSVRC2016目标检测任务回顾——视频目标检测(VID)

    转自知乎<深度学习大讲堂> 雷锋网(公众号:雷锋网)按:本文作者王斌,中科院计算所前瞻研究实验室跨媒体计算组博士生,导师张勇东研究员.2016年在唐胜副研究员的带领下,作为计算所MCG-I ...

  6. AI佳作解读系列(五) - 目标检测二十年技术综述

    计算机视觉中的目标检测,因其在真实世界的大量应用需求,比如自动驾驶.视频监控.机器人视觉等,而被研究学者广泛关注.   上周四,arXiv新出一篇目标检测文献<Object Detection ...

  7. ICCV2021 | TOOD:任务对齐的单阶段目标检测

    ​前言  单阶段目标检测通常通过优化目标分类和定位两个子任务来实现,使用具有两个平行分支的头部,这可能会导致两个任务之间的预测出现一定程度的空间错位.本文提出了一种任务对齐的一阶段目标检测(TOOD) ...

  8. CVPR2020论文解读:3D Object Detection三维目标检测

    CVPR2020论文解读:3D Object Detection三维目标检测 PV-RCNN:Point-Voxel Feature Se tAbstraction for 3D Object Det ...

  9. ICCV2019论文点评:3D Object Detect疏密度点云三维目标检测

    ICCV2019论文点评:3D Object Detect疏密度点云三维目标检测 STD: Sparse-to-Dense 3D Object Detector for Point Cloud 论文链 ...

随机推荐

  1. DexExtractor的原理分析和使用说明

    本文博客链接:http://blog.csdn.net/qq1084283172/article/details/53557894 周末有空就写下博客了,今天来扯一扯Android平台的脱壳工具Dex ...

  2. UVA11054Gergovia的酒交易

    题意:       有n个村庄,每个村庄要么买酒要么买酒,负数是买酒,整数是买酒,题目保证所有的数字想加和为0,保证有解,然后每一个村庄往相邻的村庄运k坛酒的花费是k,问满足所有的村庄的最小花费是多少 ...

  3. 栈(Stack) --- C# 自定义和微软官方的区别

    最近在学习算法基础,本篇文章作为一个记录,也算是一次实践和总结.(顺便也深入C#运行时学习一下) 目录 1. 栈是什么 2. Stack 自定义实现 3. Stack C#官方实现 4. 区别 5. ...

  4. PHP中文转拼音扩展

    Pinyin 基于 CC-CEDICT 词典的中文转拼音工具,更准确的支持多音字的汉字转拼音解决方案. 安装 使用 Composer 安装: $ composer require "over ...

  5. python之xlwt

    python写excel----xlwt 写excel的拿点不在构造一个workbook的本身,二是填充的数据,不过这不在范围内,在写excel的操作中也有棘手的问题, 比如写入合并的单元格就是比较麻 ...

  6. 【Web前端HTML5&CSS3】03-字符实体与语义标签

    笔记来源:尚硅谷Web前端HTML5&CSS3初学者零基础入门全套完整版 目录 字符实体与语义标签 1. 字符实体 2. meta标签 3. 语义标签 4. 块元素与行内元素 块元素(bloc ...

  7. Vue | 指令实现自动翻译填充英文名功能

    背景:应用系统中存在多个创建实体表单,表单填写时,在填写中文名称后,要填写对应的英文名作为标识或数据库查询索引. 需求:填写中文名的同时,系统自动生成英文名并填充到表单中,辅助用户操作,节约操作时间. ...

  8. Envoy:开启访问日志,access_log

    access_log: - name: envoy.listener.accesslog typed_config: "@type": type.googleapis.com/en ...

  9. 【转载】认识SSD的SATA、mSATA 、PCIe和M.2四种主流接口

    认识SSD的SATA.mSATA .PCIe和M.2四种主流接口 2018-09-25 • 工具 • 评论关闭 认识SSD的SATA.mSATA .PCIe和M.2四种主流接口

  10. centos下如何查看命令由哪个包提供

    今天在使用centos进行端口查看的时候发现系统没有netstat命令 yum安装发现并没有同名的包 经过一番查阅 学习到了 yum whatprovides/provides [commandNam ...