人工智能学习:Microsoft COCO数据集读取(7)

news2025/7/21 6:05:29

Microsoft COCO(Common Objects in Context)是微软研发维护的一个大型的数据集。包含了30多万张图片和91个目标分类。可用于目标识别(Object Detection)、场景感知(Penoptic Segmentation)、语义分割(Stuff Segmentation)、标题生成(Image Captioning)等任务。

1 数据集下载
MS COCO数据集可以通过官方网站下载
https://cocodataset.org/#home

进入下载页面
https://cocodataset.org/#download

2017相关的为最新发布的数据集
在这里插入图片描述
包含三个图像数据文件(Train、Val、Test)和系列标注文件,针对不同的识别任务。

数据下载后解压,产生四个子目录,分别train2017、val2017、test2017和annotations。其中前面三个为训练、评估、测试的图像数据,annotations目录为这些图像的标注信息。包含针对多种任务类型的标注。目录结构如下

train2017			#训练图像目录
val2017				#评估图像目录
test2017			#测试图像目录
annotations 		#标注文件夹
	├── captions_train2017.json				#图像标题标注(训练集)
	├── captions_val2017.json				#图像标题标注(评估集)
	├── instances_train2017.json			#目标检测、语义分割标注(训练集)
	├── instances_val2017.json				#目标检测、语义分割标注(评估集)
	├── panoptic_train2017.json				#全景感知标注(训练集)
	├── panoptic_val2017.json				#全景感知标注(评估集)
	├── person_keypoints_train2017.json		#人体关键点检测标注(训练集)
	├── person_keypoints_val2017.json		#人体关键点检测标注(评估集)
	├── stuff_train2017.json				#目标检测、语义分割标注(训练集)
	└── stuff_val2017.json					#目标检测、语义分割标注(评估集)

2 数据读取
通过annotations中的文件可以提取图片以及对应的标注信息,以图像标题标注文件为例。
首先,载入需要的模块

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

import json
import random

其中matplotlib用于显示数据集中的图片,以及对应的标注。json用于载入标注文件。random用于从数据中随机选择样本显示。

指定数据目录

# specify paths
data_path = '../data/COCO'
anno_path = f'{data_path}/annotations'
train_path = f'{data_path}/train2017'

然后读取图像标题标注文件

# load json file, caption annotations
json_file = f'{anno_path}/captions_train2017.json'

with open(json_file, 'r') as f:
    json_data = json.load(f)
    
images = json_data['images']
annotations = json_data['annotations']

载入的json数据包含多个成员变量。运行

json_data.keys()

显示

dict_keys(['info', 'licenses', 'images', 'annotations'])

包含info、license、images、annotations四个变量,其中images为图像信息,包含图像的大小、文件名等信息,annotations为标注信息

然后绘制2x2四张图片以及它们所对应的标题标注,代码如下

# lines and columns of subplots
m = 2
n = 2
num = m*n

# size of figure
plt.figure(figsize=(12,12))

# randomly choose images and plot
for i in range(num):
    # randomly choose image
    image_item = random.choice(images)
    
    image_id = image_item['id']
    image_file = f'{train_path}/{image_item["file_name"]}'
    
    captions = [anno['caption'] for anno in annotations if anno['image_id']==image_id]

    # subplot
    plt.subplot(m,n,i+1)

    img = mpimg.imread(image_file)
    plt.imshow(img)
    
    plt.xticks([])
    plt.yticks([])
   
    plt.xlabel('\n'.join(captions), fontsize=12)

plt.show()

首先在图像列表images中随机选择4张图片,对于每一张图片,读取它们的id信息,然后在annotations中查找与这个图片相关的标注。最后绘制图片,并在图片下方显示图片的标题,多个标题以每一行进行分开。

显示结果如下
在这里插入图片描述

随机列出4张图片,每一张图片包含5个标题的标注。

参考链接:
https://blog.csdn.net/qq_44554428/article/details/122597358
https://blog.csdn.net/qq_52053775/article/details/126196060

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

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

相关文章

【数据结构】——单链表

目录 1.链表 1.1 链表的概念及结构 1.2 链表的分类 1. 单向或者双向 2. 带头或者不带头 3. 循环或者非循环 1.3实现一个单链表(无头单项非循环链表增删查改的实现) 1.链表结构的创建 2.创建一个节点 3.创建一个链表 4.打印链表 5…

解读JVM级别本地缓存Caffeine青出于蓝的要诀 —— 缘何会更强、如何去上手

大家好,又见面了。 在前面的几篇文章中,我们一起聊了下本地缓存的动手实现、本地缓存相关的规范等,也聊了下Google的Guava Cache的相关原理与使用方式。比较心急的小伙伴已经坐不住了,提到本地缓存,怎么能不提一下“地…

软考 - 程序语言设计

程序设计语言基本概述 程序设计语言是为了书写计算机程序而人为设计的符号语言,用于对计算过程进行 描述、组织和推导。 低级语言:机器语言(计算机硬件只能识别0和1的指令序列),汇编语言。 高级语言:功能…

从http请求过程分析为何不同业务的http请求都可以使用默认的缺省端口80,8080等

问题: http上传请求时url地址中一般无显示指定端口号,这时会使用默认的80端口;但是可能不止一个业务需要用到http请求,技术上web服务端那边肯定无法根据业务逻辑的数据格式去分别解析区分它们;因为业务是事先无法预知的&#xff…

【Spring Cloud实战】Consul服务注册与发现

个人博客上有很多干货,欢迎访问:https://javaxiaobear.gitee.io/ 1、简介 https://www.consul.io/docs/intro Consul is a service mesh solution providing a full featured control plane with service discovery, configuration, and segmentation f…

Flink-经典案例WordCount快速上手以及安装部署

2 Flink快速上手 2.1 批处理api 经典案例WordCount public class BatchWordCount {public static void main(String[] args) throws Exception {//1.创建一个执行环境ExecutionEnvironment env ExecutionEnvironment.getExecutionEnvironment();//2.从文件中读取数据//得到…

[附源码]java毕业设计基于Web留学管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Linux下C++开发笔记--编译静态链接库和动态链接库

目录 1--前言 2--生成静态链接库 3--生成动态链接库 1--前言 承接上一篇Linux下C开发笔记(g命令的使用笔记),依据教程记录学习笔记。 2--生成静态链接库 ①回顾项目结构: ​ ②汇编,生成swap.o文件 cd srcg sw…

基于simulink的牛鞭效应模型建模与仿真

欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》 目录 一、理论基础 二、核心程序 三、测试结果 一、理论基础 牛鞭效应,是经济学中的一个术语,它也被称为需求放大效应。牛鞭效应指的是当信息流从最终客户端传输到原始供应商时&…

9.行为建模(Behavioral modeling)

9.1行为模型概述 Verilog行为模型包含控制模拟和操纵先前描述的数据类型变量的过程语句。这些语句包含在程序中。每个过程都有一个与其关联的活动流。活动开始于initial和always语句。每个initial语句和每个always语句都会启动一个单独的活动流。所有活动流都是并发的&…

【机器学习】线性分类【上】广义线性模型

主要参考了B站UP主“shuhuai008”,包含自己的理解。 有任何的书写错误、排版错误、概念错误等,希望大家包含指正。 由于字数限制,分成两篇博客。 【机器学习】线性分类【上】广义线性模型 【机器学习】线性分类【下】经典线性分类算法 1. 线…

C语言实现线索化二叉树(先序、中序、后序)

》》如何用C语言构建一颗二叉树? 第一种方法: ThreadTree A = (ThreadTree)malloc(sizeof(ThreadNode));A->data = { A };A->ltag = 0;A->rtag = 0;A->lchild = NULL;A->rchild = NULL;ThreadTree B = (ThreadTree)malloc(sizeof(ThreadNode));B->data =…

【python自动化】使用关键字驱动实现appium自动化

在写app自动化用例时,尝试用了关键字驱动的框架 记录一下自己对关键字驱动的理解: 1 关键字驱动指将用例步骤的操作封装为关键字,比如定位元素、点击元素、获取元素属性值、断言,这些都是操作关键字 2 在excel中按照用例执行过程&…

Java8方法引用和Lambda表达式实例源码+笔记分享

前言 Java8的lambda表达式,通过lambda表达式可以替代我们之前写的匿名内部类来实现接口。lambda表达式本质是一个匿名函数。 1、lambda表达式本质是一个匿名函数。 1 package com.demo.main;2 3 public class LambdaMain {4 5 public static void main(String[…

环辛炔衍生物DBCO-NH2,amine,Acid,NHS,Maleimide无铜点击反应

DBCO对叠氮化物具有非常高的反应选择性,可用于修饰生物分子,包括肽、蛋白质、酶、活细胞、整个生物体等。在生理温度和pH值范围内,DBCO基团不与胺或羟基反应,DBCO也与叠氮化物基团发生反应DBCO也称为ADIBO(氮杂二苯并环…

2022.11.15-二分图专练

目录 50 years, 50 colors(HDU-1498) Uncle Toms Inherited Land*(HDU-1507) Matrix(HDU-2119) Arbiter(HDU-3118) [ZJOI2007]矩阵游戏(黑暗爆炸1059) Jimmy’s Assignment(HDU-1845) 50 years, 50 colors(HDU-1498) 原题链接:传送门 题意:一个n*n的矩阵中,…

第四章. Pandas进阶—数据格式化

第四章. Pandas进阶 4.1 数据格式化 1.设置小数位数(round函数) DataFrame.round(decimals0,*args,**kwargs)参数说明: decimals:用于设置保留的小数位数 args,kwargs:附加关键字的参数 返回值:返回DataFrame对象 1).示例&#…

HTML常用标签的使用

HTML常用标签的使用 文章目录HTML常用标签的使用1.排版标签1.1 标题标签(h)1.2 段落标签(p)1.3 换行标签(br)1.4 水平线标签(hr)2.文本格式化标签(strong、ins、em、del&…

Vue(七)——Vue中的Ajax

目录 Vue脚手架配置代理 插槽 默认插槽 具名插槽 作用域插槽 Vue脚手架配置代理 本案例需要下载axios库:npm install axios 1.配置类方式(实现WebMvcConfigurer) 2.使用CrossOrigin注解 3.使用nginx反向代理解决跨域 4.Vue中配置代理服务器 代理服务器怎…

懒人的法宝——办公自动化!

没错!办公自动化他来了!果然,代码都是懒人发明出来的。接下来让我们一起来看看这个批改作业的自动化脚本吧!学会了这种思想可以帮助我们高效解决许多重复性的工作,比如说批量修改文件的名称、类型、位置等等&#xff0…