缩小COCO数据集

在运行YOLOS模型的过程中,需要使用到COCO2017这个数据集,但从实验运行来看,其所需时间无疑是相当漫长,预计可能需要近几十天才能完成,因此便考虑缩小COCO数据集大小,即尽可能在遵循其分布的情况下,将数据集中的图片数量缩小。博主这里将数据集缩小了16倍。

下面是缩小代码:

# coding:utf8
import json
import time
import shutil
import os
from collections import defaultdict
import json
from pathlib import Path


class COCO:
    def __init__(self, annotation_file=None, origin_img_dir=""):
        """
        Constructor of Microsoft COCO helper class for reading and visualizing annotations.
        :param annotation_file (str): location of annotation file
        :param image_folder (str): location to the folder that hosts images.
        :return:
        """
        # load dataset
        self.origin_dir = origin_img_dir
        self.dataset, self.anns, self.cats, self.imgs = dict(), dict(), dict(), dict()  # imgToAnns 一个图片对应多个注解(mask) 一个类别对应多个图片
        self.imgToAnns, self.catToImgs = defaultdict(list), defaultdict(list)
        if not annotation_file == None:
            print('loading annotations into memory...')
            tic = time.time()
            dataset = json.load(open(annotation_file, 'r'))
            assert type(dataset) == dict, 'annotation file format {} not supported'.format(type(dataset))
            print('Done (t={:0.2f}s)'.format(time.time() - tic))
            self.dataset = dataset
            self.createIndex()

    def createIndex(self):
        # create index    给图片->注解,类别->图片建立索引
        print('creating index...')
        anns, cats, imgs = {}, {}, {}
        imgToAnns, catToImgs = defaultdict(list), defaultdict(list)
        if 'annotations' in self.dataset:
            for ann in self.dataset['annotations']:
                imgToAnns[ann['image_id']].append(ann)
                anns[ann['id']] = ann

        if 'images' in self.dataset:
            for img in self.dataset['images']:
                imgs[img['id']] = img

        if 'categories' in self.dataset:
            for cat in self.dataset['categories']:
                cats[cat['id']] = cat

        if 'annotations' in self.dataset and 'categories' in self.dataset:
            for ann in self.dataset['annotations']:
                catToImgs[ann['category_id']].append(ann['image_id'])

        print('index created!')

        # create class members
        self.anns = anns
        self.imgToAnns = imgToAnns
        self.catToImgs = catToImgs
        self.imgs = imgs
        self.cats = cats

    def build(self, tarDir=None, tarFile='./new.json', N=1000):

        load_json = {'images': [], 'annotations': [], 'categories': [], 'type': 'instances', "info": {"description": "This is stable 1.0 version of the 2014 MS COCO dataset.", "url": "http:\/\/mscoco.org", "version": "1.0", "year": 2014, "contributor": "Microsoft COCO group", "date_created": "2015-01-27 09:11:52.357475"}, "licenses": [{"url": "http:\/\/creativecommons.org\/licenses\/by-nc-sa\/2.0\/", "id": 1, "name": "Attribution-NonCommercial-ShareAlike License"}, {"url": "http:\/\/creativecommons.org\/licenses\/by-nc\/2.0\/", "id": 2, "name": "Attribution-NonCommercial License"}, {"url": "http:\/\/creativecommons.org\/licenses\/by-nc-nd\/2.0\/",
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              "id": 3, "name": "Attribution-NonCommercial-NoDerivs License"}, {"url": "http:\/\/creativecommons.org\/licenses\/by\/2.0\/", "id": 4, "name": "Attribution License"}, {"url": "http:\/\/creativecommons.org\/licenses\/by-sa\/2.0\/", "id": 5, "name": "Attribution-ShareAlike License"}, {"url": "http:\/\/creativecommons.org\/licenses\/by-nd\/2.0\/", "id": 6, "name": "Attribution-NoDerivs License"}, {"url": "http:\/\/flickr.com\/commons\/usage\/", "id": 7, "name": "No known copyright restrictions"}, {"url": "http:\/\/www.usa.gov\/copyright.shtml", "id": 8, "name": "United States Government Work"}]}
        if not Path(tarDir).exists():
            Path(tarDir).mkdir()

        for i in self.imgs:
            if(N == 0):
                break
            tic = time.time()
            img = self.imgs[i]
            load_json['images'].append(img)
            fname = os.path.join(tarDir, img['file_name'])
            anns = self.imgToAnns[img['id']]
            for ann in anns:
                load_json['annotations'].append(ann)
            if not os.path.exists(fname):
                shutil.copy(self.origin_dir+'/'+img['file_name'], tarDir)
            print('copy {}/{} images (t={:0.1f}s)'.format(i, N, time.time() - tic))
            N -= 1
        for i in self.cats:
            load_json['categories'].append(self.cats[i])
        with open(tarFile, 'w+') as f:
            json.dump(load_json, f, indent=4)


coco = COCO('/data/programs/yolos/coco/annotations/instances_train2017.json',
            origin_img_dir='/data/programs/yolos/coco/train2017')               # 完整的coco数据集的图片和标注的路径
coco.build('/data/datasets/mincoco/train2017', '/data/datasets/mincoco/instances_train2017.json', 7392)  # 保存图片路径


coco = COCO('/data/programs/yolos/coco/annotations/instances_val2017.json',
            origin_img_dir='/data/programs/yolos/coco/val2017')                 # 完整的coco数据集的图片和标注的路径
coco.build('/data/datasets/mincoco/val2017', '/data/datasets/mincoco/instances_val2017.json', 312)       # 保存图片路径

# 在2017年数据集中,训练集118287张,验证5000张,测试集40670张.
# 118287/16 = 7392 5000/16 = 312

完成后的图像与标注文件:

在这里插入图片描述
随后我们就可以使用该数据集进行我们的训练操作了。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: minicoco数据集是一个常用的计算机视觉数据集,用于目标检测和场景理解的研究。该数据集是在COCO数据集的基础上进行了裁剪和压缩,以便于在资源有限的设备上使用。 minicoco数据集包含了一系列图像,每个图像都有对应的标注信息。这些标注信息包括对象类别、边界框和语义分割掩码。通过对这些图像进行标注,可以用于训练和评估目标检测模型和语义分割模型。 minicoco数据集的特点之一是其相对较小的规模。相比于原始的COCO数据集,minicoco数据集包含的图像数量更少,从而减少了数据集的存储和处理成本。这使得minicoco数据集成为在计算资源有限的情况下进行研究和开发的理想选择。 此外,minicoco数据集在保留了目标检测和语义分割任务所需的标注信息的同时,也可以较好地满足一些特定研究领域的需要。例如,在一些特定的目标检测任务中,只需要勾画出对象的大致边界,而不需要详细的像素级标注。minicoco数据集可以根据具体的需求进行裁剪和定制,以满足不同研究任务的要求。 综上所述,minicoco数据集是一个经过裁剪和压缩的计算机视觉数据集,用于目标检测和场景理解的研究。其规模较小,适合在资源有限的设备上使用,并可以根据需求进行定制。 ### 回答2: minicoco数据集是一个用于计算机视觉领域的图像数据集。它是COCO数据集的一个缩小版本,包含了COCO数据集的一部分图像和标注信息。 minicoco数据集主要用于研究和开发图像识别、目标检测和语义分割等任务。它包含了多个类别的物体图像,每个图像都有对应的标注信息,包括物体的边界框、类别标签和物体的分割掩码。 使用minicoco数据集,可以进行许多计算机视觉任务的研究和开发。例如,可以使用这个数据集来训练图像识别模型,使其能够准确地识别出图像中的物体。还可以利用minicoco数据集进行目标检测的研究,通过检测和定位感兴趣的物体。此外,还可以使用分割掩码信息,对图像中的物体进行像素级别的语义分割。 minicoco数据集相对于完整的COCO数据集而言,其规模较小,因此在计算资源和存储空间有限的情况下使用更加方便。同时,其包含的图像和标注信息仍然具有代表性,可以作为一个良好的基准测试集。 总之,minicoco数据集是一个用于计算机视觉领域的缩小COCO数据集,可用于图像识别、目标检测和语义分割等任务的研究和开发。它提供了一组图像和标注信息,方便研究人员在计算资源有限的情况下进行实验和算法的验证。 ### 回答3: minicoco数据集是一个用于计算机视觉任务的图像数据集。它是基于COCO数据集的一个精简版,旨在提供一个更小规模但包含多种物体类别和场景的数据集,以便于进行算法开发和测试。 minicoco数据集包含了1000张图像,以及这些图像中出现的80个物体类别的标注信息。这些物体类别涵盖了常见的人类、动物、交通工具、家具等物体。每个图像中可能包含多个物体,因此每个物体都有相应的边界框标注,以及类别标签。 除了包含物体类别和边界框信息外,minicoco数据集还提供了其他一些有用的注释信息,例如实例分割掩码和关键点标注。通过这些注释信息,研究人员可以开展更复杂的计算机视觉任务,如目标检测、实例分割和关键点检测等。 minicoco数据集的提供可以大大简化计算机视觉算法的开发过程,因为它规模较小、标注较全面,同时又保留了COCO数据集中丰富多样的物体类别和场景。研究人员可以利用minicoco数据集进行算法验证、调试和快速原型开发,从而更高效地推动计算机视觉领域的研究和应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彭祥.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值