详解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)
关系型数据库需要使用设计范式: 第一范式:遵从原子性,属性不可再分,数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值。 例如:需要创建一张地址表,存储地址信息。将地址信息划…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
