详解COCO数据格式的json文件内容
coco标注格式的json文件详解
# coco_json结构示意
{'info':info,'licenses':[licenses],'images':[image],'annotations':[annotation]
}
1. **`images`**:这个部分包含了所有图像的信息。每个图像都表示为一个字典,包含以下字段:
- `id`:唯一标识图像的ID。
- `file_name`:图像文件的文件名。
- `width`:图像宽度(以像素为单位)。
- `height`:图像高度(以像素为单位)。
- `license`:图像的许可证信息(可选)。
2. **`annotations`**:这个部分包含了与图像中对象实例分割相关的注释信息。每个注释表示为一个字典,包含以下字段:
- `id`:唯一标识注释的ID。
- `image_id`:与注释相关联的图像的ID。
- `category_id`:对象的类别ID,对应于`categories`部分中的类别。
- `segmentation`:对象的分割掩码。通常表示为多边形或掩码的像素坐标。
- `area`:对象的像素面积。
- `bbox`:对象的边界框,格式为`[x, y, width, height]`。
- `iscrowd`:标志位,指示对象是否是“杂乱”(例如,一群对象被视为单个对象)。
3. **`categories`**:这个部分包含了对象类别的信息。每个类别表示为一个字典,包含以下字段:
- `id`:唯一标识类别的ID。
- `name`:类别的名称。
- `supercategory`:类别的超类别,用于组织相关类别。
4. **`info`**:这个部分包含了关于数据集的一般信息,如数据集名称、描述、版本等。
5. **`licenses`**:这个部分包含了与数据集许可相关的信息,如许可证名称、ID、URL等。
以下是一个简化的coco格式json示例:
{"images": [{"id": 1,"file_name": "image1.jpg","width": 640,"height": 480},{"id": 2,"file_name": "image2.jpg","width": 800,"height": 600}],"annotations": [{"id": 1,"image_id": 1,"category_id": 1,"segmentation": [[x1, y1, x2, y2, ...]],"area": 1234,"bbox": [x, y, width, height],"iscrowd": 0},{"id": 2,"image_id": 1,"category_id": 2,"segmentation": [[x1, y1, x2, y2, ...]],"area": 567,"bbox": [x, y, width, height],"iscrowd": 0}],"categories": [{"id": 1,"name": "person","supercategory": "human"},{"id": 2,"name": "car","supercategory": "vehicle"}],"info": {"description": "COCO 2017 dataset","version": "1.0","year": 2017,"contributor": "Microsoft COCO group","url": "http://cocodataset.org"},"licenses": [{"id": 1,"name": "CC BY-SA 2.0","url": "https://creativecommons.org/licenses/by-sa/2.0/"}]
}
在COCO数据集的`annotations`字段中,`segmentation`字段用于描述对象实例的分割信息。`segmentation`字段的内容可以是多边形(polygon)或二进制掩码(mask),具体格式取决于数据集的标注方式。以下是关于`segmentation`字段的详细介绍:
1. **多边形表示(Polygon Representation)**:
在COCO数据集中,`segmentation`字段通常以多边形的形式来表示对象实例的分割区域。多边形表示是一个列表,其中包含一系列坐标点,这些点按照顺序连接以形成多边形边界。坐标点的顺序是按照顺时针或逆时针方向排列的。
例如,`segmentation`字段的内容可以如下所示:
```
"segmentation": [[x1, y1, x2, y2, x3, y3, ...]]
```
其中,每对(x, y)表示一个多边形边界上的点坐标。这些坐标点按照顺时针或逆时针的顺序排列。
2. **二进制掩码表示(Binary Mask Representation)**:
在某些情况下,COCO数据集也可以使用二进制掩码来表示对象实例的分割区域。二进制掩码是一个二维矩阵,其中每个像素都标识为前景(对象)或背景。通常,前景像素用1表示,背景像素用0表示。
例如,`segmentation`字段的内容可以如下所示:
```
"segmentation": {
"size": [height, width],
"counts": "binary_mask_encoded"
}
```
其中,`size`字段包含掩码的高度和宽度,`counts`字段包含了用一种编码方式表示的二进制掩码。
在实例分割的coco-json中,annotations--segmentation以counts形式存储分割信息,且用到了RLE编码,因此利用segmentation存储的分割信息还需要进行RLE解码操作,这里可以利用pycocotools中的方法进行解码:
import pycocotools.mask as mask_utils
from pycocotools.coco import COCO# 读取json
coco = COCO(json_path)
images_ids = coco.getImgIds()# 逐图像处理
for img_id in images_ids:img_info = coco.loadImgs(img_id)[0]ann_ids = coco.getAnnIds(imgIds=img_id)anns = coco.loadAnns(ann_ids)# 逐实例处理for ann in anns:rle = coco.annToRLE(ann) # 解码mask = mask_utils.decode(rle) # 生成原图maskmask[mask == 1] = 255 # 调整灰度值便于显示
相关文章:

详解COCO数据格式的json文件内容
coco标注格式的json文件详解 # coco_json结构示意 {info:info,licenses:[licenses],images:[image],annotations:[annotation] } 1. **images**:这个部分包含了所有图像的信息。每个图像都表示为一个字典,包含以下字段: - id:…...

2023.10.12
#include <iostream>using namespace std; //定义动物类 class Animal { private:string name; public:Animal(){}Animal(string name):name(name){}~Animal(){}//定义虚函数virtual void perform()0;//表演的节目void show(){cout << "Please enjoy the spec…...

antd Form shouldUpdate 关联展示 form 数组赋值
form 数组中嵌套数值更新 注意:数组是引用类型 项目需求,表单中包含多个产品信息,使用form.list 数组嵌套,提货方式如果是邮寄展示地址,如果是自提,需要在该条目中增加两项 代码如下:// An hi…...

vue实现一个简单导航栏
Vue之简单导航栏 在vue中,想要实现导航栏的功能,除了用传统的a标签以外,还可以使用路由——vue-router来实现,前端小白在此记录一下学习过程(默认已经搭建好vue的脚手架环境): 建立项目并安装…...

每日leetcode_LCP01猜数字
每日leetcode_LCP01猜数字 记录自己的成长,加油。 题目出处:LCP 01. 猜数字 - 力扣(LeetCode) 题目 解题 class Solution {public int game(int[] guess, int[] answer) {int count 0;for (int i 0 ; i< guess.length; i){…...

接口自动化测试_L1
目录: 接口自动化测试框架介绍 接口测试场景自动化测试场景接口测试在分层测试中的位置接口自动化测试与 Web/App 自动化测试对比接口自动化测试与 Web/App 自动化测试对比接口测试工具类型为什么推荐 RequestsRequests 优势Requests 环境准备接口请求方法接口请求…...

Windows提权
1. MySQL提权 1.1 UDF提权 udf ‘user defined function’,即’用户自定义函数’。是通过添加新函数,对MYSQL的功能进行扩充 1、如何获得udf文件 2、将文件放到哪才能让mysql承认这个函数 3、函数功能 4、为什么这东西能提权(自定义函数指令是直接…...

香港服务器的优势?
香港服务器作为近年来国内站长建站使用最为频繁的服务器之一,香港服务器是不需要备案的,而且相对于众多国内服务器 来说,的确是有诸多优势,下面就来具体说下选择香港服务器的优势: 1、访问速度快 搭建网站,…...

关于开展2023年度光明科学城出站博士后生活资助申报工作的通知
各相关单位: 根据《光明区关于实施光明科学城“人才高地计划”的若干措施》(深光发〔2022〕1号)和《光明科学城青年科技人才培育专项行动方案》(深光人才〔2022〕2号)有关规定,现就2023年度光明科学城出站博…...

“.NET视频总结:认识框架的结构和组件,掌握开发工具的奥妙“
目录 第一单元:二十一世纪程序执行 背景: 总结: 第二单元:对象导向与类别设计 背景: 总结: 第三单元:使用类别与基底类别库 背景: 总结: 第四单元:Windows开发程序 背景: 总结: 第五单元:防护式程序设计 背景: 总结…...

STM32 CubeMX PWM三种模式(互补,死区互补,普通)(HAL库)
STM32 CubeMX PWM两种模式(HAL库) STM32 CubeMX STM32 CubeMX PWM两种模式(HAL库)一、互补对称输出STM32 CubeMX设置代码部分 二、带死区互补模式STM32 CubeMX设置代码 三、普通模式STM32 CubeMX设置代码部分 总结 一、互补对称输…...

Linux系统导入导出docker容器的sql数据
Linux系统导入导出docker容器的sql数据 一 要从Docker容器中将数据库导出到本地 确保您已经安装了Docker,并且已经运行了包含数据库的Docker容器。 检查容器中运行的数据库服务的名称或容器ID。您可以使用命令 docker ps 来列出正在运行的容器和相关信息。 使用…...

SpringBoot之使用Redis和注解实现接口幂等性
文章目录 1 接口幂等性1.1 概念1.2 实现思路1.3 代码实现1.3.1 pom1.3.2 JedisUtil1.3.3 自定义注解ApiIdempotent1.3.4 ApiIdempotentInterceptor拦截器1.3.5 TokenServiceImpl1.3.6 TestApplication 1.4 测试验证1.4.1 获取token的控制器TokenController1.4.2 TestController…...

《3D 数学基础》几何检测-相交性检测
目录 1. 2D直线相交 2. 3D射线相交点 3. 射线和平面的交点 4. 3个平面的交点 5. 射线和圆或者球交点 6. 两个圆或者球是否相交 7. 球和平面的相交性检测 8. 射线和AABB的相交性(13.17) 9. 射线和三角形的相交性(13.16) …...

文字与视频结合效果
效果展示 CSS 知识点 mix-blend-mode 属性的运用 实现整体页面布局 <section class"sec"><video autoplay muted loop><source src"./video.mp4" type"video/mp4" /></video><h2>Run</h2><!-- 用于切…...

大数据Doris(九):配置BE步骤
文章目录 配置BE步骤 一、配置be节点...

BuyVM 纽约 VPS 测评
description: 发布于 2023-07-05 BuyVM 纽约 VPS 测评 产品链接:https://my.frantech.ca/cart.php?gid38 G口不限流量,抗一般投诉,不抗版权投诉。 CPU很快,硬盘不错。 无大陆优化,但大陆连通性很不错,…...

H3C交换机的40G堆叠线 ,可以插在普通光口做堆叠吗?
环境: S6520X-24ST-SI交换机 H3C LSWM1QSTK2万兆40G堆叠线QSFP 问题描述: H3C交换机的40G堆叠线 ,可以插在普通光口做堆叠吗? 解答: 1.H3C交换机的40G堆叠线通常是用于连接堆叠模块或堆叠端口的。这些堆叠线通常使…...

【Java 进阶篇】JavaScript三元运算符详解
JavaScript是一门广泛用于前端和后端开发的编程语言,具备强大的表达式和运算符。本篇博客将重点介绍JavaScript中的三元运算符,解释其语法、用法和示例。如果您是JavaScript初学者,或者希望更深入了解这门语言的运算符,那么这篇博…...

MySQL数据库技术笔记(4)
关系型数据库需要使用设计范式: 第一范式:遵从原子性,属性不可再分,数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值。 例如:需要创建一张地址表,存储地址信息。将地址信息划…...

批量图片转文字识别OCR身份证件信息提取软件
现在的OCR软件很多,有在线的也有本地的,单识别文字功能还行,不过能批量识别的好像不多,网上搜了几个都不怎么好用。尤其是识别身份证件之类的软件,并且还能提取出识别到的信息,比如姓名 名族地址等等更少。…...

Mac/Wins Matlab如何查看APPs源码
查看Apps方法一样,点击HOME-preferences-MATLAB-Apps查看你的Apps安装路径。 你的Apps文件就安装在该目录下,直接进入这个目录就可以看到你自己写的APPs文件,...

Web应用-Thinkphp框架-开发指南
Thinkphp框架 二级导航分类,模板继承,内置标签Public 修改MVC模块化 ——访问机制传参加载模版模版引入 分离Runtime 缓存文件管理员添加数据验证及验证场景 控制器 validate 在sql执行(敏感操作)之前验证数据模板 分页数据表连接…...

LeetCode【300】最长递增子序列
题目: 思路: 通常来说,子序列不要求连续,而子数组或子字符串必须连续;对于子序列问题,第一种动态规划方法是,定义 dp 数组,其中 dp[i] 表示以 i 结尾的子序列的性质。在处理好每个…...

JRebel在IDEA中实现热部署 (JRebel实用版)
JRebel简介: JRebel是与应用程序服务器集成的JVM Java代理,可使用现有的类加载器重新加载类。只有更改的类会重新编译并立即重新加载到正在运行的应用程序中,JRebel特别不依赖任何IDE或开发工具(除编译器外)。但是&…...

uniapp微信小程序之分包异步化之组件分包
一、组件分包异步化解决的问题 日渐增加的通用组件造成的主包空间不足; 提升小程序访问速度,降低白屏率; 二、开启组件分包异步化过程中遇到的问题 如何进行占位组件配置; 如何解决通过$refs访问异步组件报错; 如何判断所有异步组件都已加载完毕; 多分包组件之间互相调用…...

Nacos(替代Eureka)注册中心
Nacos初步学习 Nacos 是一个开源的服务注册和配置中心,它允许您注册、注销和发现服务实例,并提供了配置管理的功能。下面是Nacos的最基础用法: 1. 服务注册和发现: 首先,您需要将您的应用程序或服务注册到Nacos中。…...

FHRP首跳冗余的解析
首跳冗余的解析 个人简介 HSRP hot standby router protocol 热备份路由协议 思科设备上 HSRP VRRP 华为设备上 VRRP HSRP v1 version 1 HSRP v2 version 2 虚拟一个HSRP虚拟IP地址 192.168.1.1 开启HSRP的抢占功能 通过其他参数 人为调整谁是主 谁是从 &a…...

垂直分表为什么能够加快查询效率?
前言 垂直分表是分库分表中分表操作上一个重要的实现方式,利用垂直分表可以提高数据的处理效率和查询速度,本节主要围绕 垂直分表为什么能够加快查询速度 展开说明,以mysql查询的底层流程为例。 垂直分表是将一张表按列分为多张表,…...

Linux网络基础知识全面总结
文章目录 linux网络基础知识1.1 IP地址和子网掩码1.2 网关和路由1.3 域名系统 (DNS)1.4 端口和协议 Linux网络配置2.1 ifconfig命令2.2 网络接口配置文件2.3 DHCP自动获取IP地址2.4 静态IP地址配置2.5 网络重启和应用配置3. 网络工具和命令3.1 ping命令3.2 traceroute和mtr命令…...