COCO数据集Keypoint标注格式梳理和使用COCO-Annotator在自有数据集上进行标注

article/2025/9/9 14:10:52

这里写自定义目录标题

  • COCO数据集Keypoint标注格式
    • COCO数据集官网
    • Keypoint Detection关键点检测
      • 统一数据格式
      • Keypoint标注
  • 使用COCO-Annotator标注自有数据集
    • 在Ubuntu 18.04上安装COCO-Annotator
      • 安装Docker和Docker-Compose
      • 安装COCO Annotator
      • 启动COCO Annotator
      • 使用COCO Annotator在自有数据集上进行Keypoint标注
        • 创建数据集
        • 标注
        • 关键点标注
        • 设置关键点可见性
        • 查看保存的keypoint标注

COCO数据集Keypoint标注格式

COCO数据集官网

COCO全程是Common Object in COntext,是CV里很常用的一个数据集。
COCO官网:https://cocodataset.org/#home

Keypoint Detection关键点检测

COCO官方关于数据格式的说明:https://cocodataset.org/#format-data

统一数据格式

在这里插入图片描述
根据COCO官网的说明,COCO数据集的多种标注object detection, keypoint detection, stuff segmentation, panoptic segmentation, dense pose, 和 image captioning都是已JSON格式存储,且数据存储结构都如上图所示。

其中,『info』中存储的是关于整个数据集的信息。如果是构建自己的数据集,可以按照自己的需求填写。『licenses』是图像证书,如果是要共享数据集或者售卖数据集,则要确保证书和版权均填写正确。『images』是数据集中所有图片的信息列表。所以,不同列别的标注,区别仅在『annotations』部分。

Keypoint标注

我们来看Keypoint这一种标注的『annotations』。目前,COCO数据中仅对『人』这一类别标注了Keypoints。
在这里插入图片描述
其中:annotation中的"keypoints"是长度为3k的array,k代表某一类别定义的关键点总数。每一个关键点的标识包含坐标x,y和一个是否可见标识符v。v=0:代表未标注,这种情况下x=y=0;v=1:标注了,但此关键点不可见;v=2:标注且可见。"num_keypoints"表示某一Object标注的关键点(v>0)的总数。categories中的"keypoints"是长度为k的array,代表每一个关键点的名称;"skeleton"定义了各关键点的连接关系,方便后续可视化。

摘出一个categories的实例:

{"supercategory": "person","id": 1,"name": "person","keypoints": ["nose","left_eye","right_eye","left_ear","right_ear","left_shoulder","right_shoulder","left_elbow","right_elbow","left_wrist","right_wrist","left_hip","right_hip","left_knee","right_knee","left_ankle","right_ankle"],"skeleton": [[16,14],[14,12],[17,15],[15,13],[12,13],[6,12],[7,13],[6,7],[6,8],[7,9],[8,10],[9,11],[2,3],[1,2],[1,3],[2,4],[3,5],[4,6],[5,7]]
}

使用COCO-Annotator标注自有数据集

在Ubuntu 18.04上安装COCO-Annotator

安装Docker和Docker-Compose

COCO-Annotator安装之前需要先安装Docker。参考了CSDN文章:地址

sudo apt update #更新apt包索引# 通过HTTPS使用仓库(repository)安装
sudo apt install apt-transport-https ca-certificates curl software-properties-common

这里需要编辑一下/etc/apt/sources.list.d/docker.list文件

sudo vim /etc/apt/sources.list.d/docker.list

在docker.list文件中添加

deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stablead

添加Docker官方的GPG密钥

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

安装

sudo apt update #需要再更新一次apt包索引,否则会提示不存在docker-ce
sudo apt install docker-ce

查看docker服务是否启动:

systemctl status docker

在这里插入图片描述若不是activate状态,则启动:

sudo systemctl start docker

测试一下docker能否正常启动

docker run hello-world

如果遇到如下报错

docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create": dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

在上面的指令前加上sudo:

sudo docker run hello-world

看到一下信息则说明Docker安装成功:
在这里插入图片描述

接着需要安装docker-compose:

sudo apt install docker-compose

安装COCO Annotator

git clone https://github.com/jsbroks/coco-annotator
cd coco-annotator

在coco-annotator中运行

docker-compose up

这时候会遇到报错:

ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?

按照下面方式跑一遍:

sudo groupadd docker
sudo gpasswd -a ${USER} docker
sudo service docker restart
newgrp - docker

确保进入到coco-annotator文件夹,再次执行

docker-compose up

会开始下载非常多东西,此时就等着下载完成就行。

启动COCO Annotator

如果是在COCO Annotator是安装在本地,只需要在浏览器打开localhost:5000。

如果跟我一样是ssh远程,那还需要现在本地的terminal运行一下以下代码:

ssh -L username@remot_address 127.0.0.1:5000:127.0.0.1:5000

然后再在本地的浏览器打开localhost:5000。

使用COCO Annotator在自有数据集上进行Keypoint标注

关于COCO Annotator的标注Keypoint的使用说明,网上能找到的资料太少了,只能靠自己摸索。

创建数据集

在主页面点击"Create"即可创建数据集。
在这里插入图片描述
根据以下指引输入数据集相关信息。注意这个“Folder Directory”,这个路径的根目录是/coco-annotator,找到这个文件夹并将需要标注的图像放入这个文件夹即可实现导入数据集。默认类别中,我创建了一个“person”的默认类别。
在这里插入图片描述导入之后,点击上面主页面的“Refresh”或者进入创建的数据集中,点击左侧的“Scan”就可以看到导入的图片了。

标注

点击一张图片进入标注页面。页面左侧为工具面板,右侧为标注面板。在当前情况中,可以看到左侧的工具按钮都是灰色非激活的状态。要开始标注,要选择待标注的对象的类别,在这一示例中,我们点击右侧标注面板“person”右侧的加号代表即将进行“person”类别的标注。
在这里插入图片描述

关键点标注

为了对应COCO数据集中的keypoint点的标注,我们需要先对person这个大类别做一些设置。点击右侧标注面板“person”右侧的齿轮图片,将出现以下设置页面。
在这里插入图片描述
踩坑里了!!!!
已经把自有数据集都标了一遍才发现!因为COCO对关键点检测的评估指标OKS(Object Keypoint Similarity)

OKS = ∑ i exp ⁡ ( − d i 2 / 2 S 2 k i 2 ) δ ( v i > 0 ) ∑ i δ ( v i > 0 ) \textrm{OKS} =\frac{ \sum_i \exp{(-d_i^2/2S^2 k_i^2)\delta(v_i>0)}}{ \sum_i \delta(v_i>0)} OKS=iδ(vi>0)iexp(di2/2S2ki2)δ(vi>0)
其中 S S S表示这个人所占的面积大小平方根,根据annotation中的Bounding Box计算所得。
S = ( x 2 − x 1 ) ( y 2 − y 1 ) S = \sqrt{(x_2-x_1)(y_2-y_1)} S=(x2x1)(y2y1)
也就是说我们的标注除了keypoints,还必须通过bounding box把object框出来。

COCO-Annotator中很神奇的是,先对一个object把需要标的关键点标注之后,就无法添加bbox;反之则可。

在这个页面中,我们可以设置各个Keypoint的名字。每个Keypoint右侧的“Add connected label”可以先不管,点击"Update"确认。此时,点击右侧标注面板“person”右侧的加号,就可以看到刚刚添加的各个关键点的名字了。添加完所有关键点后,我突然悟了“Add connected label”对应的就是COCO标注中的skeleton,根据需要填进去就好啦。我们现在点击“nose”并进行keypoint标注。
在这里插入图片描述
在人像的鼻子部位放置一个keypoint。点击这个keypoint会看到相关的信息,比如keypoint名字,所属的类别,是不是可见等。在这里插入图片描述

设置关键点可见性

可见性可以在以下位置设置
在这里插入图片描述

查看保存的keypoint标注

仅以上图,标注了人bbox和所有关键点为列子。

在这里插入图片描述

完整Json文件内容

{"images":[{"id":4,"dataset_id":2,"path":"/datasets/test/man.jpg","width":4000,"height":6000,"file_name":"man.jpg"}],"categories":[{"id":1,"name":"person","supercategory":"person","color":"#a74ced","metadata":{},"keypoint_colors":["#bf5c4d","#9c73bf","#ff1a38","#bf3300","#736322","#bf5c4d","#d99100","#4d8068","#0d2b80","#9c73bf","#ff1a38","#bf3300","#736322","#33fff1","#3369ff","#9d13bf","#733941"],"keypoints":["nose","left_eye","right_eye","left_ear","right_ear","left_shoulder","right_shoulder","left_elbow","right_elbow","left_wrist","right_wrist","left_hip","right_hip","left_knee","right_knee","left_ankle","right_ankle"],"skeleton":[[1,2],[1,3],[2,4],[2,3],[3,5],[4,6],[5,7],[6,7],[6,8],[6,12],[7,9],[7,13],[8,10],[9,11],[12,14],[12,13],[13,15],[14,16],[15,17]]}],"annotations":[{"id":216,"image_id":4,"category_id":1,"segmentation":[[2520.9,1587.4,2520.9,4975.7,1411.2,4975.7,1411.2,1587.4]],"area":3761790,"bbox":[1411,1587,1110,3389],"iscrowd":false,"isbbox":true,"color":"#455dd2","keypoints":[2040,1977,2,2111,1923,2,1986,1919,2,2185,1973,2,1904,1970,2,2353,2352,2,1654,2297,2,2392,2855,2,1549,2820,2,2438,3296,2,1619,3253,2,2150,3298,2,1817,3307,2,2164,3846,2,1817,3897,2,2077,4549,2,1807,4536,2],"metadata":{},"num_keypoints":17}]}

可以在JSON在线解析中打开查看一下。跟COCO的格式是能够对上的。


http://chatgpt.dhexx.cn/article/B8SRtK9h.shtml

相关文章

OpenCV学习之KeyPoint

OpenCV中CV_EXPORTS类别KeyPoint与KeyPointsFilter头文件分析 用OpenCV一段时间了,说实话KeyPoint接触也算比较多,一直没有时间对其数据结构进行分析。今天打开源码对其keypoint.cpp文件进行简单分析一下:keypoint.cpp主要包含两个类KeyPoint…

ubuntu引导删除+win10引导修复

Windowsubuntu双系统,删除安装linux磁盘后没有删除其引导,删其引导的步骤为 使用快捷键winx,打开Windows PowerShell(管理员)(A),依次输入如下命令: 打开diskpart diskpart 列出系统中所有的磁盘 list disk 选择…

win10+ubuntu18.04 双系统修复ubuntu启动引导

win10ubuntu18.04 双系统修复ubuntu启动引导 因为windows是不能引导linux的,而每次win10升级或恢复都会将linux的启动引导覆盖掉,导致无法进入linux, 所以一直就禁止了win10更新.这几天win10出了点小毛病,所以就狠下心来恢复了系…

ubuntu 双系统启动引导修复

1、 准备一个安装U盘,插入电脑开机>选择U盘启动>选择试用Try ubuntu without install。 2、 进入系统后,用CtrlAltT快捷键打开终端,获取root权限,执行以下命令: sodu passwd sudo apt-get install s…

win10+ubuntu双系统,重装win10后修复ubuntu引导的方法

笔记本型号:联想拯救者Y7000P 2019版 操作系统:Windows 10Ubuntu 18.04 LTS 问题:重装系统后发现没办法进入到Ubuntu 解决办法: 首先,我们需要准备一个Ubuntu安装U盘,也就是我们之前进行Ubuntu系统安装…

Windows\Ubuntu修复UEFI引导

目录 1、修复Windows引导2、修复Ubuntu的引导 1、修复Windows引导 修复Windows的EFI引导需要使用到的工具为大白菜装机工具,官网是http://www.winbaicai.com/。使用大白菜制作好装机工具以后,重启选择U盘启动(一定要选“UEFI:你的…

Ubuntu boot-repair系统修复引导

Ubuntu系统修复引导 笔记本上本来已经有了一个ubuntu和一个windows,但是那天作死,想要在移动固态硬盘上安装一个ubuntu,方便使用,结果装完了之后必须要将移动固态插在笔记本上,才能够正常引导。 上网查了半天&#xf…

ubuntu修复启动引导

1. 解决步骤: 1:准备一个安装U盘,插入电脑->开机->选择试用Try ubuntu without install 2:打开终端(Open Terminal),获取root权限…

双系统Ubuntu 引导修复(Boot Repair)

安装完双系统,如果在使用过程中不小心删除了Ubuntu引导向,则会导致开机后无法选择进入Ubuntu系统。或者当我们重装了windows系统后,也会发现原来的Ubuntu引导不见了,当出现这两种情况之一时,最好的解决办法不是重新把U…

Win10+Ubuntu双系统修复Ubuntu系统引导

这两天笔者安装win10ubuntu16.04双系统,因为网络上能找到大量的资料,安装过程此处就不多讲。因为笔者电脑是华硕主板,bios默认设置为安全启动,笔者猜测会阻止加载ubuntu引导,导致双系统不能随意引导。先不管那么多&…

Ubuntu20.04 引导修复(亲测有效)

我电脑装了win10Ubuntu20.04。 Ubuntu的引导因为某种原因被我删了。ESP分区下的文件夹也删除了。 然后就想着怎么把Ubuntu的引导给整回来。 在网上搜索大多有几种 1.通过boot-repair来修复,然而我试过还是不行,提示找不到esp分区,我明明有e…

ubuntu启动盘修复grub引导

提示:点击关注作者,以获取其他的最新消息推送。 文章目录 ubuntu启动盘修复grub引导1.准备1个清空的U盘做系统启动盘2.查找本机的启动选项3.进入Ubuntu试用系统并打开终端4.插入网线确保能够正常访问网络5.添加更新下载源6.安装boot-repair7.点击Recomme…

win+ubuntu系统引导修复

windowsubuntu系统引导修复 0 前言1 新建ESP分区并修复windows引导2 Ubuntu系统引导修复3 问题总结4 参考 0 前言 之前由于启动项中有一个多余的ubuntu引导,看着不顺眼想要删除,结果失败,最终格式化了整个EFI分区,导致win10和ubu…

Ubuntu引导修复/Ubuntu的暴力安装方法

Linux操作系统拥有很多Windows系统所无法比拟的优势,并且深受专业人士的喜爱。在Linux的众多发行版中,Ubuntu是十分受欢迎一款。然而,很多朋友却因为无法正常安装Ubuntu而难以继续往下学习。当然我知道,装虚拟机是一个很不错的选择…

Ubuntu引导修复

转载自:https://blog.csdn.net/u012260238/article/details/52713724 安装完双系统,如果在使用过程中不小心删除了Ubuntu引导向,则会导致开机后无法选择进入Ubuntu系统。或者当我们重装了windows系统后,也会发现原来的Ubuntu引导不…

Ubuntu20.04.3引导修复(Boot Repair)

Ubuntu20.04引导修复(Boot Repair) 最近Ubuntu20.04时,出现了无法进入系统的问题。 第一时间用再生龙将系统盘备份,然后找一个新盘还原,发现还原后的硬盘是可以正常进入系统的。 现在对出问题的硬盘进行修复&#x…

修复ubuntu引导

1. 开机按F10或者向下箭头进入BIOS 2. 选择U盘引导,出现下面界面选择对应系统20.04 3.出现下面界面,选择try ubuntu 4. 出现下面界面,等待一段时间结束后进入ubuntu镜像系统 5. 打开终端,依次输入下面命令 sudo add-apt-reposit…

Ubuntu引导修复(Boot Repair)

第一步: 还是需要进入Ubuntu界面,但是并不需要安装(如果直接安装的话,以前在Ubuntu里面的文件可全部都没有了,所以万不得已,千万别这样做)。 如何进入Ubuntu界面呢,相信装过Ubuntu的…

多种ubuntu引导修复方法

引导异常 ubuntu经常由于各种原因导致系统引导异常,不能正常开机,不能进入到grub界面,或者不管选择任何一种内核和模式进入都出现error: attempt to read or write outside of disk hd0’错误。针对这个情况,我采取过两种方式。 …

Java设计模式之(十二)——观察者模式

1、什么是观察者模式? Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically. 观察者模式(Observer Design Pattern):在对象之间…