如何下载Coco数据集的特定部分?

时间:2018-06-29 10:58:42

标签: computer-vision dataset object-detection yolo

我正在开发一种对象检测模型,以使用YOLO检测船只。我想使用COCO数据集。有没有办法只下载带有注释的图像?

2 个答案:

答案 0 :(得分:4)

要下载特定类别的图像,可以使用COCO API。这是一本demo笔记本,正在处理此用法和其他用法。整个过程如下:

下面是一个示例,说明如何下载包含person的图像子集并将其保存在本地文件中:

from pycocotools.coco import COCO
import requests

# instantiate COCO specifying the annotations json path
coco = COCO('...path_to_annotations/instances_train2014.json')
# Specify a list of category names of interest
catIds = coco.getCatIds(catNms=['person'])
# Get the corresponding image ids and images using loadImgs
imgIds = coco.getImgIds(catIds=catIds)
images = coco.loadImgs(imgIds)

哪个返回字典列表,其中包含有关图像及其URL的基本信息。现在,我们可以使用requestsGET并将图像写入本地文件夹:

# Save the images into a local folder
for im in images:
    img_data = requests.get(im['coco_url']).content
    with open('...path_saved_ims/coco_person/' + im['file_name'], 'wb') as handler:
        handler.write(img_data)

请注意,这将保存指定类别的所有个图像。因此,您可能想将images列表切成第一个n

答案 1 :(得分:2)

据我个人所知,如果仅是在谈论COCO数据集,我认为它们没有“船舶”的类别。他们拥有的最接近的类别是“船”。这是检查可用类别的链接: http://cocodataset.org/#overview

顺便说一句,船只类别中也有船只。

如果您只想选择特定COCO类别的图像,则可能需要执行以下操作(摘自COCO的官方演示并进行编辑):

# display COCO categories
cats = coco.loadCats(coco.getCatIds())
nms=[cat['name'] for cat in cats]
print('COCO categories: \n{}\n'.format(' '.join(nms)))

# get all images containing given categories (I'm selecting the "bird")
catIds = coco.getCatIds(catNms=['bird']);
imgIds = coco.getImgIds(catIds=catIds);