目标检测数据集The Object Detection Dataset
目标检测数据集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的更多相关文章
- 第三十四节,目标检测之谷歌Object Detection API源码解析
我们在第三十二节,使用谷歌Object Detection API进行目标检测.训练新的模型(使用VOC 2012数据集)那一节我们介绍了如何使用谷歌Object Detection API进行目标检 ...
- 项目总结三:目标检测项目(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 ...
- faster-rcnn 目标检测 数据集制作
本文的目标是制作目标检测的数据集 使用的工具是 python + opencv 实现目标 1.批量图片重命名,手动框选图片中的目标,将目标框按照一定格式保存到txt中 图片名格式(批量) .jpg . ...
- 第三十二节,使用谷歌Object Detection API进行目标检测、训练新的模型(使用VOC 2012数据集)
前面已经介绍了几种经典的目标检测算法,光学习理论不实践的效果并不大,这里我们使用谷歌的开源框架来实现目标检测.至于为什么不去自己实现呢?主要是因为自己实现比较麻烦,而且调参比较麻烦,我们直接利用别人的 ...
- ILSVRC2016目标检测任务回顾——视频目标检测(VID)
转自知乎<深度学习大讲堂> 雷锋网(公众号:雷锋网)按:本文作者王斌,中科院计算所前瞻研究实验室跨媒体计算组博士生,导师张勇东研究员.2016年在唐胜副研究员的带领下,作为计算所MCG-I ...
- AI佳作解读系列(五) - 目标检测二十年技术综述
计算机视觉中的目标检测,因其在真实世界的大量应用需求,比如自动驾驶.视频监控.机器人视觉等,而被研究学者广泛关注. 上周四,arXiv新出一篇目标检测文献<Object Detection ...
- ICCV2021 | TOOD:任务对齐的单阶段目标检测
前言 单阶段目标检测通常通过优化目标分类和定位两个子任务来实现,使用具有两个平行分支的头部,这可能会导致两个任务之间的预测出现一定程度的空间错位.本文提出了一种任务对齐的一阶段目标检测(TOOD) ...
- CVPR2020论文解读:3D Object Detection三维目标检测
CVPR2020论文解读:3D Object Detection三维目标检测 PV-RCNN:Point-Voxel Feature Se tAbstraction for 3D Object Det ...
- ICCV2019论文点评:3D Object Detect疏密度点云三维目标检测
ICCV2019论文点评:3D Object Detect疏密度点云三维目标检测 STD: Sparse-to-Dense 3D Object Detector for Point Cloud 论文链 ...
随机推荐
- hdu4829 带权并查集(题目不错)
题意: Information Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- POJ3322滚箱子游戏(不错)
题意: 讲的是一个游戏,就是在一个平面上滚动一个1*1*2的长方体的游戏,在本题里面的游戏规则是这样的: (1) 一开始给你箱子的状态,可能是横着也可能是竖着. (2) ...
- Mac/Win录屏工具推荐-LICEcap
轻小.便捷.操作简单 下载 LICEcap v1.30 for macOS LICEcap v1.28 for Windows 参考地址
- Codeforces Round #661 (Div. 3)
A. Remove Smallest 题意:数组是否满足任意i,j保证|ai-aj|<=1,如果都可以满足,输出YES,否则输出NO 思路:直接排序遍历即可 代码: 1 #include< ...
- Java_抽象
抽象的基本使用 抽象的关键字是abstract,可以用来修饰类(抽象类),还可以修饰方法(抽象方法). 1 //抽象类 2 public abstract class Animal{ 3 //抽象方法 ...
- Jenkins 基础篇 - 基础设置
站点设置 刚搭建好 Jenkins 环境,你还需要做一些简单设置,让我们的 Jenkins 看起来是这么一回事,特别是你要用于生产环境的时候.首先就是域名配置,如果你为 Jenkins 服务分配了一个 ...
- 转: inline关键字使用
1.inline用在函数声明时,还是函数定义时?还是两边都加? 首先,内联函数声明和定义最好在同一个文件中,其它的情况没有实用上的意义. 只要在同一个文件中,声明和定义至少其一加"inlin ...
- 【BUAA软工】Beta阶段事后分析
设想与目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 解决的问题 总体解决的问题:新手编程者配置编程环境难.本地编写的代码跨设备同步难.本地ide安装使用过程 ...
- java基础——简易计算器的实现
计算器: import java.util.Scanner;public class CalculateDemo { public static void main(String[] args ...
- [刷题] PTA 查验身份证
题目: 7-63 查验身份证 (15 分) 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5, ...