目标检测数据集 - MS COCO

文章目录

    • 1. 数据集介绍
    • 2. 使用pycocotools读取数据
    • 3. 验证mAP

在这里插入图片描述

论文:Microsoft COCO: Common Objects in Context

网址:https://arxiv.org/abs/1405.0312

官网:https://cocodataset.org/

1. 数据集介绍

MS COCO是一个非常大型,且常用的数据集,其中包括了目标检测、分割、图像描述等,其主要特征如下:

  • Object segmentation:目标集分割
  • Recognition in context:图像情景识别
  • Superpixel stuff segmentation:超像素分割
  • 330K image(>200K labeled):超过33万张图像,标注过的图像超过20万张
  • 1.5 million object instances:150万个对象实例
  • 80 object categories:80个目标类别
  • 91 stuff categories:91个材料类别
  • 5 captions per image:每张图像有5段情景描述
  • 250000 people with keypoints:对25万个人进行了关键点标注

什么是stuff类别?

  • stuff中包含没有明确边界的材料和对象

object的80类与stuff中的91类的区别在哪?

  • 简单的理解就是object80类是stuff91类的子集。如果仅仅是做目标检测,基本只用object80类即可。

与PASCAL VOC对比

在这里插入图片描述

与训练效果好,但是更费时。

数据集下载

进入MS COCO官网,点击Dataset->download

对于目标检测,主要下载三个文件:

  • 2017 Train images [118K/18GB]:训练过程中,使用到的所有图像文件
  • 2017 Val images [5K/1GB]:验证过程中使用到的所有图像文件
  • 2017 Train/Val annotations [241MB]:对于训练集和验证集的标注json文件

将下载好的文件都解压到同一文件夹下,可得到如下文件结构:

在这里插入图片描述

官方有给出一个关于标注文件的格式说明:https://cocodataset.org/#format-data

在instances_train2017.json中

在这里插入图片描述

注意:这里的category_id对应的是在stuff91类中的索引。

在这里插入图片描述

在类别中,有一个supercategory超类,为一些类别的统称。这里的id也是对应的stuff91种的索引。这里共80个类别,但是id并不是从1到80。所以,如果我们要去训练80个类别的目标检测网络的话,是需要做一个映射的,将这些类别的索引映射到1到80上。


2. 使用pycocotools读取数据

pycocotools,即python api tools of COCO。

COCO是一个大型的图像数据集,用于目标检测、分割、人的关键点检测、素材分割和标题生成。这个包提供了Matlab、Python和LuaAPI,这些api有助于在COCO中加载、解析和可视化注释。Matlab和PythonAPI是完整的,LuaAPI只提供基本功能。

安装pycocotools

pip install pycocotools

使用pycocotools

import os.pathimport matplotlib.pyplot as plt
from pycocotools.coco import COCO
from PIL import Image, ImageDraw, ImageFontjson_file = "/Volumes/zt/dataset/MS COCO2017/annotations/instances_val2017.json"
img_path = "/Volumes/zt/dataset/MS COCO2017/val2017"# 加载coco json文件
coco = COCO(annotation_file=json_file)# 获取json文件中所有图像的索引 并且进行排序
ids = list(sorted(coco.imgs.keys()))
print("number of images: {}".format(len(ids)))# 获取所有coco类别标签
coco_classes = dict([(v["id"],v["name"]) for k,v in coco.cats.items()])# 遍历前3张图像
for img_id in ids[:3]:# 获取对应图像id的所有标注目标的索引 annotations idx信息ann_ids = coco.getAnnIds(imgIds=img_id)# 根据标注目标的索引 annotations idx信息获取所有标注信息targets = coco.loadAnns(ann_ids)# 获取图像文件名称img_name = coco.loadImgs(img_id)[0]['file_name']# 读取图像 转为RGB格式img = Image.open(os.path.join(img_path,img_name)).convert("RGB")draw = ImageDraw.Draw(img)# 画出标注框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),width=3,outline="red")font = ImageFont.truetype('/System/Library/Fonts/Times.ttc', 24)draw.text((x1,y1),coco_classes[target["category_id"]],fill="red",font=font)plt.imshow(img)plt.show()

结果:

在这里插入图片描述


3. 验证mAP

首先要弄清楚cocoapi指定的数据格式(训练网络预测的结果),在官网的Evaluate下拉框中选择Results Format,可以看到每种任务的指定数据格式要求。

在这里插入图片描述

根据官方文档给的预测结果格式可以看到,我们需要以列表的形式保存结果,列表中的每个元素对应一个检测目标(每个元素都是字典类型),每个目标记录了四个信息:

  • image_id记录该目标所属图像的id(int类型)
  • category_id记录预测该目标的类别索引,注意这里索引是对应stuff中91个类别的索引信息(int类型)
  • bbox记录预测该目标的边界框信息,注意对应目标的[xmin,ymin,width,height](list[float]类型)
  • score记录预测该目标的概率(float类型)

计算mAP,代码实现:

from pycocotools.coco import COCO
from pycocotools.cocoeval import COCOeval# 载入coco2017验证集标注文件
# accumulate predictions from all iamges
coco_true = COCO(annotation_file='./instances_train2017.json')
# 载入网络在coco2017验证集上的预测结果
coco_pred = COCO(annotation_file='./predict_result.json')coco_evaluator = COCOeval(cocoGt=coco_true, cocoDt=coco_pred,iouType='bbox')
coco_evaluator.evaluate()
coco_evaluator.accumulate()
coco_evaluator.summarize()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/646897.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

音频特效SDK,满足内容生产的音频处理需求

美摄科技,作为音频处理技术的佼佼者,推出的音频特效SDK,旨在满足企业内容生产中的音频处理需求。这款SDK内置多种常见音频处理功能,如音频变声、均衡器、淡入淡出、音频变调等,帮助企业轻松应对各种音频处理挑战。 一…

网安培训第二期——sql注入+中间件+工具

文章目录 宽字节注入插入注入二次注入PDO模式(动态靶机!!!!!!!)sql注入读取文件sql注入导出文件linux命令 10.12笔记sqlmapsqlmap参数 10.13笔记sqlmap 文件读写前后缀常用tamper及适用场景 10.…

【Java】SpringMVC路径写法

1、多级路径 ✅类路径和方法路径都可以写成多级 ✅其中,类路径写在方法路径前面 ✅与Servlet不同,SpringMVC中写不写“/”都可以 RequestMapping("/hello/t1") RestController public class HelloSpring {RequestMapping( value "world…

不学前沿技术与朽木浮草何异 ?Java11新特性

不学前沿技术与朽木浮草何异 ?Java11新特性 于 2018 年 9 月 25 日正式发布,这是很重要的一个版本!Java 11 和 2017 年 9 月份发布的 Java 9 以及 2018 年 3 月份发布的 Java 10 相比,其最大的区别就是:在长期支持(Lo…

013:获取K线图,增加周期可选

改进《001:如何获取A股个股的前复权K线数据》,增加周期可选。 代码: import tkinter as tk from tkinter import messagebox from tkcalendar import Calendar import pandas as pd import requests from urllib.parse import urlencodedef gen_secid(…

Docker:6种网络配置详解浅介

在Docker中,网络配置是一个重要的主题,因为容器需要与其他容器或外部网络进行通信。Docker提供了多种网络模式和配置选项,以便在不同的场景下满足用户的需求。 本文介绍这些网络模式的区别以及配置,相信看完以后你能够掌握Docker网…

16、Kafka ------ SpringBoot 整合 Kafka (配置 Kafka 属性 及对应的 属性处理类 解析)

目录 配置 Kafka 及对应的 属性处理类配置KafkaKafka配置属性的约定代码演示生产者相关的配置消费者相关的配置 代码(配置文件)application.properties 配置 Kafka 及对应的 属性处理类 配置Kafka spring.kafka.* 开头的配置属性,这些属性将由…

写作的金字塔原则

起源 芭芭拉明托 (Barbara Minto) 是 20 世纪 70 年代麦肯锡公司培训主管,她创立了金字塔原则。1963 年从哈佛商学院毕业后,明托加入了麦肯锡公司。在前往该公司位于巴黎和杜塞尔多夫的办公室出差时,她遇到了与她在美国和英国见过的同样的写作…

用的到的linux-Day1

前言: 从入门IT开始我们知道Linux操作系统与其他操作系统不同,Linux因为其独特的优势,被广泛应用在服务器领域,而且是一个近乎完美的操作系统,运行稳定、功能强大、安全性高、开源、可定制等等。 因此我打算从24年开始…

爬虫(一)

1. HTTP协议与WEB开发 1. 什么是请求头请求体,响应头响应体 2. URL地址包括什么 3. get请求和post请求到底是什么 4. Content-Type是什么1.1 简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网(…

力扣面试题 16.24. 数对和(双指针)

Problem: 面试题 16.24. 数对和 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 若本题目直接双循环暴力求解会超时,可以利用排序 双指针进行优化,具体: 1.对原数组进行升序排序; 2.双指针指向排好序的数组的头尾(…

【方法】如何打开7Z格式压缩文件?

7Z是一种常见的压缩文件格式,那遇到7Z压缩文件,要如何打开呢? 想要打开7Z压缩包,需要用到解压缩软件,比如WinRAR、7-Zip等软件。安装软件后,只需要用鼠标双击7Z压缩包,就可以打开压缩包&#x…

基于SSM的蛋糕甜品店管理系统(有报告)。Javaee项目。ssm项目。

演示视频: 基于SSM的蛋糕甜品店管理系统(有报告)。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring…

支付宝推出新年“五福节”活动,新增四大AI玩法;大型语言模型综合指南

🦉 AI新闻 🚀 支付宝推出新年“五福节”活动,新增四大AI玩法 摘要:支付宝宣布今年的“集五福”活动升级为“五福节”,新增了四大AI玩法:飙戏小剧场、时空照相馆、会说话红包和大家来找福。用户可以通过拼…

RUST笔记 FireDBG| Rust 代码调试器

安装https://firedbg.sea-ql.org/blog/2023-12-12-introducing-firedbg/ 更新VSCODE sudo dpkg -i code_1.85.2-1705561292_amd64.deb 安装FireDBG binaries (base) pddpdd-Dell-G15-5511:~$ curl https://raw.githubusercontent.com/SeaQL/FireDBG.for.Rust/main/install.sh …

dataGrip连接数据库mysql和intersystems的iris

文章目录 前言创建新项目选择对应的数据库产品类型新建数据库资源连接sql命令窗体手动配置本地驱动 前言 intersystems公司的产品iris是cache的升级版本,目前绝大多数数据库工具都没法连接这个数据库 datagrip下载地址 https://download-cdn.jetbrains.com.cn/da…

初步认识并发编程的艺术

一、Java内存模型 JMM(Java Memory Model):Java 内存模型,是 Java 虚拟机规范中所定义的一种内存模型,Java 内存模型是标准化的,屏蔽掉了底层不同计算机的区别。也就是说,JMM 是 JVM 中定义的一…

Vue2 props组件通信

一、父组件向子组件传值 1、流程图 2、父组件代码 <template><div class"app"><UserInfo:usernameusername:ageage:isSingleisSingle:carcar:hobbyhobby></UserInfo></div> </template><script> import UserInfo from .…

查询排序(1)

Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 前面介绍了在 SQL 限定查询中 WHERE 子句的运行顺序优先于 SELECT 子句&#xff0c;WHERE 子句确定数据行&#xff0c;SELECT 子句确定数据列。 也分别讲述了在 WHERE 子句中常用的运算…

深度学习模型选择

作为机器学习科学家&#xff0c;我们的目标是发现模式&#xff08;pattern&#xff09;。 但是&#xff0c;我们如何才能确定模型是真正发现了一种泛化的模式&#xff0c; 而不是简单地记住了数据呢&#xff1f;接下来介绍几种模型选择时候需要注意的点 误差 训练误差 训练误…