【Pytorch】目标检测数据集

csdn推荐

目标检测 Object Detection :检测,不仅要找到图片上的所关心的目标 位置 ,同时还要识别出这个目标是什么 类别。主流的目标检测都是以 矩阵框 的形式进行输出的,而语义分割比目标检测的精度更高。

voc数据集

很多优秀的计算机视觉模型比如分类,定位,检测,分割,动作识别等模型都是基于PASCAL VOC挑战赛及其数据集上推出的,尤其是一些目标检测模型(比如大名鼎鼎的R CNN系列,以及后面的YOLO,SSD等)。

在 ImageNet挑战赛上涌现了一大批优秀的分类模型,而PASCAL挑战赛上则是涌现了一大批优秀的目标检测和分割模型

官网

目前广大研究者们普遍使用的是 VOC2007和VOC2012数据集,因为二者是互斥的,不相容的。

数据集下载

直接在官网下载(通过迅雷可以下载的很快)

pytorch内置了voc数据集

数据集使用

论文中针对 VOC2007和VOC2012 的具体用法有以下几种:

1、只用VOC2007的trainval 训练,使用VOC2007的test测试

2、只用VOC2012的trainval 训练,使用VOC2012的test测试,这种用法很少使用,因为大家都会结合VOC2007使用

3、使用 VOC2007 的 train+val 和 VOC2012的 train+val 训练,然后使用 VOC2007的test测试,这个用法是论文中经常看到的 07+12 ,研究者可以自己测试在VOC2007上的结果,因为VOC2007的test是公开的。

4、使用 VOC2007 的 train+val+test 和 VOC2012的 train+val训练,然后使用 VOC2012的test测试,这个用法是论文中经常看到的 07++12 ,这种方法需提交到VOC官方服务器上评估结果,因为VOC2012 test没有公布。

5、先在 MS COCO 的 trainval 上预训练,再使用 VOC2007 的 train+val、 VOC2012的 train+val 微调训练,然后使用 VOC2007的test测试,这个用法是论文中经常看到的 07+12+COCO 。

6、先在 MS COCO 的 trainval 上预训练,再使用 VOC2007 的 train+val+test 、 VOC2012的 train+val 微调训练,然后使用 VOC2012的test测试 ,这个用法是论文中经常看到的 07++12+COCO,这种方法需提交到VOC官方服务器上评估结果,因为VOC2012 test没有公布。

VOC 2007数据集标注

PASCAL VOC 2007 数据集分为两部分:训练和验证集trainval,测试集test ,两部分各占数据总量的约 50%。其中trainval 又分为训练集和测试集,二者分别各占trainval的50%。

每张图片中有可能包含不只一个目标object。

标注文件如下

注意xy坐标轴位置

coco数据集

#home

VOC 数据集和 COCO 数据集是使用较多的数据集,COCO 数据集比 VOC 数据集大,适用于大型项目。

常用的是COCO2017

├── coco2017
       ├── train2017所有训练图像文件夹(118287)
       ├── val2017 所有验证图像文件夹(5000)
       ├── annotations:标注文件夹
                  ├── istances_train2017.json:对应目标检测、分割任务的训练集标注文件
                  ├── instances_val2017.json: 对应目标检测、分割任务的验证集标注文件
                  ├── captions_train2017.json: 对应图像描述的训练集标注文件
                  ├── captions_val2017.json: 对应图像描述的验证集标注文件
                  ├── person_keypoints_train2017.json: 对应人体关键点检测的训练集标注文件
                  ├── person_keypoints_val2017.json: 对应人体关键点检测的验证集标注文件

json是一个大字典,读取出json标注格式文件,实际上是一个dict,如下所示

{
    "info": info,
    "licenses": [license],
    "images": [image],
    "annotations": [annotation],
    "categories": [category]
}

其中image和annotations如下

image{
    "id": int,# 图片的ID编号(每张图片ID是唯一的)
    "width": int,#宽
    "height": int,#高
    "file_name": str,# 图片名
    "license": int,
    "flickr_url": str,# flickr网路地址
    "coco_url": str,# 网路地址路径
    "date_captured": datetime # 数据获取日期
}

annotations字段是包含多个annotation实例的一个列表,annotation类型本身又包含了一系列的字段,如这个目标的category id和segmentation mask。segmentation格式取决于这个实例是一个单个的对象(即iscrowd=0,将使用polygons格式)还是一组对象(即iscrowd=1,将使用RLE格式)。

annotation{
    "id": int, # 对象ID,因为每一个图像有不止一个对象,所以要对每一个对象编号(每个对象的ID是唯一的)
    "image_id": int,# 对应的图片ID(与images中的ID对应)
    "category_id": int,# 类别ID(与categories中的ID对应)
    "segmentation": RLE or [polygon],# 对象的边界点(边界多边形,此时iscrowd=0)。
    #segmentation格式取决于这个实例是一个单个的对象(即iscrowd=0,将使用polygons格式)还是一组对象(即iscrowd=1,将使用RLE格式)
    "area": float,# 区域面积
    "bbox": [x,y,width,height], # 定位边框 [x,y,w,h]
    "iscrowd": 0 or 1 #见下
}

标注自己的数据集

在线工具:、

本地标注:精灵标注助手

pytorch加载数据集

#torchvision.datasets.CocoCaptions

import torchvision
from PIL import ImageDraw
COCO_dataset=torchvision.datasets.CocoDetection(root="D:\目标检测数据集\val2017\val2017",
                                                annFile="D:\目标检测数据集\annotations_trainval2017\annotations\instances_val2017.json",
                                                )
image,info=COCO_dataset[0]
image_handler=ImageDraw.ImageDraw(image)
#取出info中的所有bbox  在info里面循环取出bbox
for annotation in info:
    x_min,y_min,width,height=annotation['bbox']
    image_handler.rectangle(((x_min,y_min),(x_min+width,y_min+height)))
image.show()

文章来源:https://blog.csdn.net/qq_55675216/article/details/139048503



微信扫描下方的二维码阅读本文

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容