COCO Annotatorを使って骨格検知用のデータセットを作ってみる
せーのでございます。
世の中にはアノテーションツールが有料、無料共に沢山あるわけですが、その中でも今回は「COCO Annotator」というツールを使って骨格検知のデータセットを作ってみます。
ピンポイントでいいツールが見つかった
私が欲しかったツールの条件は
- 無料
- 骨格検知用にキーポイント(体の各部所をポイントで示し、線でつなげる)をつけられる
- 結果をCOCO形式で保存する
というものでした。これがなかなか見つからない。たどり着いたツールがCOCO Annotatorでした。
方法はとてもカンタンなので、備忘録として書いておきます。
やってみる
では早速やってみます。
まずはCOCO AnnotatorをCloneします。
HL00340:annotation_tool seinotsuyoshi$ git clone https://github.com/jsbroks/coco-annotator.git Cloning into 'coco-annotator'... remote: Enumerating objects: 61, done. remote: Counting objects: 100% (61/61), done. remote: Compressing objects: 100% (51/51), done. remote: Total 3016 (delta 23), reused 23 (delta 10), pack-reused 2955 Receiving objects: 100% (3016/3016), 1.37 MiB | 1.64 MiB/s, done. Resolving deltas: 100% (2123/2123), done. HL00340:coco-annotator seinotsuyoshi$ ls CONTRIBUTING.md db Dockerfile docker-compose.build.yml LICENSE.md docker-compose.dev.yml README.md docker-compose.gpu.yml backend docker-compose.yml build_gpu.sh models client pytest.ini datasets
docker composeファイルが入っていますので、これを使って環境を構築します。
HL00340:coco-annotator seinotsuyoshi$ sudo docker-compose up Password: Creating network "coco-annotator_cocoannotator" with the default driver Creating volume "coco-annotator_mongodb_data" with default driver Pulling messageq (rabbitmq:3)... 3: Pulling from library/rabbitmq d7c3167c320d: Pull complete 131f805ec7fd: Pull complete 322ed380e680: Pull complete ........ ........ annotator_webclient | [2020-06-30 18:28:34 +0000] [10] [DEBUG] GET / annotator_webclient | [2020-06-30 18:28:34 +0000] [10] [DEBUG] GET /css/app.7bd0b7a4.css annotator_webclient | [2020-06-30 18:28:34 +0000] [10] [DEBUG] GET /css/chunk-vendors.9dfc9b77.css annotator_webclient | [2020-06-30 18:28:34 +0000] [10] [DEBUG] GET /js/app.6a177efd.js annotator_webclient | [2020-06-30 18:28:35 +0000] [10] [DEBUG] GET /js/chunk-vendors.1277c01d.js annotator_webclient | [2020-06-30 18:28:35 +0000] [10] [DEBUG] GET /socket.io/ annotator_webclient | [2020-06-30 18:28:35 +0000] [10] [INFO] Socket connection created with anonymous annotator_message_q | 2020-06-30 18:28:35.385 [info] <0.2061.0> accepting AMQP connection <0.2061.0> (172.18.0.5:50678 -> 172.18.0.3:5672) annotator_message_q | 2020-06-30 18:28:35.389 [info] <0.2061.0> connection <0.2061.0> (172.18.0.5:50678 -> 172.18.0.3:5672): user 'user' authenticated and granted access to vhost '/' annotator_webclient | [2020-06-30 18:28:35 +0000] [10] [DEBUG] GET /api/user/ annotator_webclient | [2020-06-30 18:28:35 +0000] [10] [DEBUG] GET /api/info/ annotator_webclient | [2020-06-30 18:28:35 +0000] [10] [DEBUG] GET /api/dataset/data annotator_webclient | [2020-06-30 18:28:35 +0000] [10] [DEBUG] GET /socket.io/ annotator_webclient | [2020-06-30 18:28:35 +0000] [10] [DEBUG] GET /socket.io/ annotator_webclient | [2020-06-30 18:28:35 +0000] [10] [DEBUG] GET /favicon.ico
必要なコンテナが次々に立ち上がりました。
ブラウザを開き、localhostを5000ポートでアクセスすると、COCO Annotatorの画面が開きます。
ユーザの登録を済ませたらメイン画面が出てきます。
まずはカテゴリを登録しますので「Category」メニューにアクセスします。
Createボタンをクリックします。
カテゴリ名を「Person」にし、+ボタンをクリックします。
左側にキーポイント名、右側にそのキーポイントとつながるキーポイントが入ります。
今回は上半身のキーポイントをつけてみます。キーポイント名はそれぞれ「head」「right_shoulder」「right_elbow」「right_wrist」「left_shoulder」「left_elbow」「left_wrist」になります。
キーポイント名を入力したら右側にはそれぞれ候補として下の方にキーポイントが出ますので、headを中心に左右につなげていけばOKです。
出来上がりはこのようになります。
「Create Category」ボタンでカテゴリを作成します。次のカテゴリ作成ウィンドウが表示されるので、それはCloseで閉じます。
datasetメニューに戻り、Createボタンをクリックします。
データセット名を入力し、先程作ったカテゴリを選択して「Create Dataset」ボタンをクリックします。
Datasetの枠ができました。Cloneしたディレクトリ内の「dataset」の下にデータセットの名前でディレクトリが作成されています。
HL00340:coco-annotator seinotsuyoshi$ cd datasets/ HL00340:datasets seinotsuyoshi$ ls test
このディレクトリの中にデータセットを作る対象となる画像を直接入れます。
COCO Annotatorをリフレッシュすると、入れた画像が表示されます。
画像をクリックすると実際のアノテーション作業に入ります。
まずは右側のカテゴリ一覧よりPersonをクリックします。
左側のアイコンより「polygon」を選択し、人の周りをクリックして囲みます。囲んだ部分の色が変わります。
再び右側のカテゴリを見ると、Personの下に「1(id:1)」の表示が見えます。このリンクをクリックすると先程作成したキーポイント一覧が出てきますので、いい感じの位置にポイントしていきます。
全てのキーポイントが設定し終わると自動的に次の画面にいきます。今回は一枚のみ入れているのでこれで終了となります。datasetのメニューに戻るとアノテーションが完了したメッセージが表示されています。
アノテーションが終わったデータセットの右側にあるオプションアイコンをクリックするとその中に「COCO download」のボタンがあるのでクリックすると、COCO形式のjsonファイルがダウンロードできます。
中身を見てみると、COCO形式のキーポイントに変換されていることが確認できます。
....... ....... "annotations": [ { "id": 1, "image_id": 1, "category_id": 1, "dataset_id": 1, "segmentation": [], "area": 0, "bbox": [ 0, 0, 0, 0 ], "iscrowd": false, "isbbox": false, "creator": "chao2suke", "width": 2456, "height": 3680, "color": "#e9c855", "keypoints": [ 1239, 422, 2, 516, 1680, 2, 505, 2860, 2, 588, 3655, 2, 1873, 1597, 2, 2050, 2634, 2, 2171, 3539, 2 ], "metadata": {}, "milliseconds": 1286123, ....... .......
まとめ
以上、アノテーションツール「COCO Annotator」を使って骨格検知のデータセットを作ってみました。
何千枚のデータセットを作るとすると結構な時間はかかるかな、と思いますが、COCO Annotatorには1枚のアノテーションにかかった時間なども計測されていますので、作業の目安になるかと思います。
骨格検知のデータセット作成は意外と手こずるところかと思います。こちらのツールを使ってみることをおすすめします。