COCO datasetの使い方

konnyaku

(執筆途中)

概要

ある画像から人物を検出しその姿勢を推定することを”pose estimation”というが(そのまま)、 世の中にはこれに関するデータセットがいろいろある。 このうち”COCO”というのを使ってみる。

前準備

dataset 自体は公式サイトに置いてある。

  • train2017
  • val2017
  • annotations2017

ここでは以上の三つを使うのでダウンロードする。以下のような階層構造にしておく

dataset_coco
   |---annotations
         |---person_keypoints_train2017.json
         |---person_keypoints_val2017.json
   |---train2017
         |---*.jpg
   |---val2017
         |---*.jpg

この dataset を使いやすいデータにしてくれる COCOAPI なるものが github に存在する。 https://github.com/cocodataset/cocoapi

これを gitclone して使う。

構造の説明

ロード

アノテーションのデータをロード

from pycocotools.coco import COCO

train_annot_path = '../dataset_coco/annotations/person_keypoints_train2017.json'
val_annot_path = '../dataset_coco/annotations/person_keypoints_val2017.json'
train_coco = COCO(train_annot_path) # load annotations for training set
val_coco = COCO(val_annot_path) # load annotations for validation set

get_meta

coco からメタデータを取得する。 yield は全てのデータを確保せず一回ずつ返す。

def get_meta(coco):
    ids = list(coco.imgs.keys())
    for i, img_id in enumerate(ids):
        img_meta = coco.imgs[img_id]
        ann_ids = coco.getAnnIds(imgIds=img_id)
        # basic parameters of an image
        img_file_name = img_meta['file_name']
        w = img_meta['width']
        h = img_meta['height']
        # retrieve metadata for all persons in the current image
        anns = coco.loadAnns(ann_ids)

        yield [img_id, img_file_name, w, h, anns]