Microsoft COCO数据集

本文介绍了在目标检测中如何利用MSCOCO数据集进行预训练,特别关注了Stuff91和Object80类别的转换,以及如何处理PASCALVOC中的空图、坏图和标注错误。提到使用Python和COCOAPI进行图像标注和筛选过程。
摘要由CSDN通过智能技术生成

目标类别,材料类别的区别

stuff 91类包括了 object80类 如果仅仅做目标检测,基本只用object80 ,如果做图像分割(Mask R-cnn)的任务用stuff91类的 其中stuff91比object80 多出来的11类 是帽子,鞋,眼镜(太多的例子) 镜子,窗户,门,路标(含糊不清 难以标注)盘子 桌子(容易与碗和餐桌进行混淆),还有搅拌机,发刷(太少的例子) 一般是指没有明确边界的对象.

与PASCAL VOC进行对比

MS COCO 包含了 PASCAL VOC 的所有类别 并且每种类别所标注的目标个数都比PASCAL VOC 多,比较建议在MS COCO数据集上进行一个预训练,之后再基于迁移学习的办法再PASCAL VOC上进行一个再训练或者建议在MS COCO数据集上训练好的权重迁移到自己的模型上

 如果仅仅针对于 目标检测 object80而言 会有一些空图.坏图,没有标注信息或者标注信息是错误的

要筛选出有问题的图片

从python中读取图片,

import json
json_path = "./instance_val2017.json"
json_lables = json.load(open(json_path,'r'))


# json_lables 是一个字典格式 其中有一个key annotations
# 他存储每个对象的信息,当然一个图片有若干个对象
# 其属性 bbox 对应的信息 左上角 x的位置 y的位置 一起宽度 和 高度
# 他们的类别索引都是针对于 stuff91的类别 当我们目标检测用的是object80的类别 需要映射一下 
# 1-91~1-80

使用pycocotools 读取我们的标注文件

对于每个图片,先拿到里面有多少个对象,对每个对象,挨个读取标注文件,知道每个对象的位置(xml文件size节点),最后画出矩形框即可

import os
from pycocotools.coco import COCO
from PIL import Image, ImageDraw
import matplotlib.pyplot as plt

json_path = "../annotations_trainval2017/annotations/instances_val2017.json"
img_path = "../val2017/"
# os.path.exists(json_path) os.getcwd()
# load coco data
coco = COCO(annotation_file=json_path)

# get all image index info
# ids是图片的序号 coco.img.keys() 返回所有图片的索引
ids = list(sorted(coco.imgs.keys()))
print("number of images: {}".format(len(ids)))

# get all coco class labels
# for id, name in coco.cats.items():
#     coco_classes = dict(name["id"], name["name"])
# coco.cats : 每一项 1 : {'supercategory': 'person', 'id': 1, 'name': 'person'}
coco_classes = dict([(v["id"], v["name"]) for k, v in coco.cats.items()])

# 遍历前三张图像
for img_id in ids[:3]:
    # 获取对应图像id的所有annotations idx信息 获取目标索引
    ann_ids = coco.getAnnIds(imgIds=img_id)

    # 根据annotations idx信息获取所有标注信息
    targets = coco.loadAnns(ann_ids)

    # get image file name
    # coco.loadImgs(img_id) 返回字典对象的列表
    path = coco.loadImgs(img_id)[0]['file_name']

    # read image
    img = Image.open(os.path.join(img_path, path)).convert('RGB')
    draw = ImageDraw.Draw(img)
    # draw box to image
    for target in targets:
        x, y, w, h = target["bbox"]
        x1, y1, x2, y2 = x, y, int(x + w), int(y + h)
        # 把左上点 和右下点 标注好
        draw.rectangle((x1, y1, x2, y2))
        # 在左上角标注好类别
        draw.text((x1, y1), coco_classes[target["category_id"]], fill='red')

    # show image
    plt.imshow(img)
    plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值