DataSet
COCO json–person_keypoints
person_keypoins.json 結構
“info”, “licenses”,"categories"全局通用
“images”跟“annotations”放着圖片跟label信息,用image id匹配。
具體結構請看下文:
one image
person_keypoint.json
{
"categories": [
{
"skeleton": [
[16,14],
[14,12],
[17, 5],
[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]
],
"name": "person", # 子類(具體類別)
"supercategory": "person", # 主類
"id": 1, # class id
"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"
]
}
],
"licenses": [
{
"id": 1,
"name": "Attribution-NonCommercial-ShareAlike License",
"url": "http://creativecommons.org/licenses/by-nc-sa/2.0/"
},
{
"id": 2,
"name": "Attribution-NonCommercial License",
"url": "http://creativecommons.org/licenses/by-nc/2.0/"
},
{
"id": 3,
"name": "Attribution-NonCommercial-NoDerivs License",
"url": "http://creativecommons.org/licenses/by-nc-nd/2.0/"
},
{
"id": 4,
"name": "Attribution License",
"url": "http://creativecommons.org/licenses/by/2.0/"
},
{
"id": 5,
"name": "Attribution-ShareAlike License",
"url": "http://creativecommons.org/licenses/by-sa/2.0/"
},
{
"id": 6,
"name": "Attribution-NoDerivs License",
"url": "http://creativecommons.org/licenses/by-nd/2.0/"
},
{
"id": 7,
"name": "No known copyright restrictions",
"url": "http://flickr.com/commons/usage/"
},
{
"id": 8,
"name": "United States Government Work",
"url": "http://www.usa.gov/copyright.shtml"
}
],
"annotations": [
{
"iscrowd": 0,
"bbox": [
339.88, 22.16, 153.88, 300.73 # [x,y,w,h] 對象定位框
],
"image_id": 391895, # match the images: "id"
"segmentation": [
[
352.55, 146.82, # 多邊形(對象mask)第一個點 x,y, 如果對象被遮擋,對象被分成多個區域
353.61, 137.66,
356.07, 112.66,
......
353.61, 152.25,
353.26, 149.43
],
[
450.45, 196.54,
461.71, 195.13,
466.29, 209.22,
......
449.04, 229.57,
448.33, 199.29
]
],
"num_keypoints": 14,
"id": 202758,
"category_id": 1,
"keypoints": [
# 如果關鍵點在物體segment內,則認爲可見.
# v=0 表示這個關鍵點沒有標註(這種情況下x=y=v=0)
# v=1 表示這個關鍵點標註了但是不可見(被遮擋了)
# v=2 表示這個關鍵點標註了同時也可見
368, 61, 1,
369, 52, 2,
0, 0, 0,
382, 48, 2,
0, 0, 0,
368, 84, 2,
435, 81, 2,
362, 125, 2,
446, 125, 2,
360, 153, 2,
0, 0, 0,
397, 167, 1,
439, 166, 1,
369, 193, 2,
461, 234, 2,
361, 246, 2,
474, 287, 2
],
"area": 14107.2713
},
{
"iscrowd": 0,
"bbox": [
471.64,
172.82,
35.92,
48.1
],
"image_id": 391895,
"segmentation": [
[
477.41, 217.71,
475.06, 212.15,
......
478.27, 218.57
]
],
"num_keypoints": 0,
"id": 1260346,
"category_id": 1,
"keypoints": [
0,0,0,
0,0,0,
0,0,0,
0,0,0,
0,0,0,
0,0,0,
0,0,0,
0,0,0,
0,0,0,
0,0,0,
0,0,0,
0,0,0,
0,0,0,
0,0,0,
0,0,0,
0,0,0,
0,0,0
],
"area": 708.26055
}
],
"images": [
{
"id": 391895, # match the annotations: "image_id"
"date_captured": "2013-11-14 11:18:45",
"coco_url": "http://images.cocodataset.org/val2014/COCO_val2014_000000391895.jpg",
"height": 360,
"flickr_url": "http://farm9.staticflickr.com/8186/8119368305_4e622c8349_z.jpg",
"file_name": "COCO_val2014_000000391895.jpg",
"license": 3,
"width": 640
}
],
"info": {
"version": "1.0",
"description": "COCO 2014 Dataset",
"year": 2014,
"contributor": "COCO Consortium",
"url": "http://cocodataset.org",
"date_created": "2017/09/01"
}
}
keypoint
“keypoints”是長度爲3K的數組,K是對某類定義的關鍵點總數,這裏人體的keypoint就是17個.位置爲[x,y],關鍵點可見性v.
(1-‘nose’ 2-‘left_eye’ 3-‘right_eye’ 4-‘left_ear’ 5-‘right_ear’ 6-‘left_shoulder’ 7-‘right_shoulder’ 8-‘left_elbow’ -‘right_elbow’ 10-‘left_wrist’ 11-‘right_wrist’ 12-‘left_hip’ 13-‘right_hip’ 14-‘left_knee’ 15-‘right_knee’ 16-‘left_ankle’ 17-‘right_ankle’ )
OpenPose的姿態識別用了COCO數據庫,coco有17個keypoint, OpenPose增加了一個, 用兩側肩膀生成一箇中心點代表脖子,就是如下圖openpose編號爲1的人體中心點.
Display above image(ID=391895) label
# -*- coding:utf-8 -*-
from __future__ import print_function
from pycocotools.coco import COCO
import os, sys, zipfile
import shutil
import numpy as np
import skimage.io as io
import matplotlib.pyplot as plt
import pylab
pylab.rcParams['figure.figsize'] = (8.0, 10.0)
annFile='./pickOne_person_keypoints_2014_.json'
coco=COCO(annFile)
# display COCO categories and supercategories
cats = coco.loadCats(coco.getCatIds())
nms=[cat['name'] for cat in cats]
print('COCO categories: \n{}\n'.format(' '.join(nms)))
nms = set([cat['supercategory'] for cat in cats])
print('COCO supercategories: \n{}'.format(' '.join(nms)))
imgIds = coco.getImgIds(imgIds = [391895])
# imgIds = coco.getImgIds()
img = coco.loadImgs(imgIds[0])[0]
dataDir = '../data/mscoco2014'
dataType = 'val2014'
I = io.imread('%s/%s/%s'%(dataDir,dataType,img['file_name']))
plt.axis('off')
plt.imshow(I)
plt.show()
# load and display instance annotations
# 加載實例掩膜
# catIds = coco.getCatIds(catNms=['person','dog','skateboard']);
# catIds=coco.getCatIds()
catIds=[]
for ann in coco.dataset['annotations']:
if ann['image_id']==imgIds[0]:
catIds.append(ann['category_id'])
plt.imshow(I); plt.axis('off')
annIds = coco.getAnnIds(imgIds=img['id'], catIds=catIds, iscrowd=None)
anns = coco.loadAnns(annIds)
coco.showAnns(anns)
# initialize COCO api for person keypoints annotations
annFile = '{}/annotations/person_keypoints_{}.json'.format(dataDir,dataType)
coco_kps=COCO(annFile)
# load and display keypoints annotations
# 加載肢體關鍵點
plt.imshow(I); plt.axis('off')
ax = plt.gca()
annIds = coco_kps.getAnnIds(imgIds=img['id'], catIds=catIds, iscrowd=None)
anns = coco_kps.loadAnns(annIds)
coco_kps.showAnns(anns)
# initialize COCO api for caption annotations
annFile = '{}/annotations/captions_{}.json'.format(dataDir,dataType)
coco_caps=COCO(annFile)
# load and display caption annotations
# 加載文本描述
annIds = coco_caps.getAnnIds(imgIds=img['id']);
anns = coco_caps.loadAnns(annIds)
coco_caps.showAnns(anns)
plt.imshow(I); plt.axis('off'); plt.show()
original image
segment & kepoints
caption annotations
A man with a red helmet on a small moped on a dirt road.
Man riding a motor bike on a dirt road on the countryside.
A man riding on the back of a motorcycle.
A dirt path with a young person on a motor bike rests to the foreground of a verdant area with a bridge and a background of cloud-wreathed mountains.
A man in a red shirt and a red hat is on a motorcycle on a hill side.