概述
这里写自定义目录标题
- 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=(x2−x1)(y2−y1)
也就是说我们的标注除了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的格式是能够对上的。
最后
以上就是开心蜡烛为你收集整理的COCO数据集Keypoint标注格式梳理和使用COCO-Annotator在自有数据集上进行标注COCO数据集Keypoint标注格式使用COCO-Annotator标注自有数据集的全部内容,希望文章能够帮你解决COCO数据集Keypoint标注格式梳理和使用COCO-Annotator在自有数据集上进行标注COCO数据集Keypoint标注格式使用COCO-Annotator标注自有数据集所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复