我正在开发一种对象检测模型,以使用YOLO检测船只。我想使用COCO数据集。有没有办法只下载带有注释的图像?
答案 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的基本信息。现在,我们可以使用requests
来GET
并将图像写入本地文件夹:
# 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);