【coco-annotaror】アノテーションツール


➊はじめに

AIで画像認識等をさせる場合、画像に注釈情報を付けて学習することがあります。この注釈情報を付ける作業をアノテーション(翻訳:注釈)と呼びます。アノテーションは、XML、JSON等を使用し、メタデータとして保存することが多いです。このアノテーションのフォーマットは様々ですが、有力なアノテーション方法の一つとして、「COCOフォーマット」があります。

➋やること

今回は、その「COCOフォーマット」について、フォーマットを意識せずに、簡単に作成・管理することができる「coco-annotator」というアプリを使用してみたいと思います。

ちなみに、「coco-annotator」は、webアプリとなっていますので、ローカルサーバを立ち上げ、ブラウザからアクセスすることになります。ローカルサーバの立ち上げが難しそうだなと思いますが、dockerが全部やってくれますので、何も難しいことはないです。

ありがたいことに、ライセンスはMIT Licenseです。
それでは、Try it now!

➌coco-annotatorインストール

今回実施する環境は、「Win10, WLS2(Ubuntu20), DockerDesktop」で実施します。

ただ、環境はあまり重要ではありません。「coco-annotator」は、gitdockerdocker-composeコマンドが使えれば、簡単に実行可能です。

■準備

まずは、dockerdocker-composeコマンドが使えるか確認します。
バージョンが確認できれば準備はOKです。

初心者と一緒にハンズオンしながらwebサーバを立ち上げよう」で、win10にWLS2(Ubuntu20)Docker Desktopをインストールする方法を簡単に解説しています。分からない方は、こちらをどうぞご参照ください。Dockerの基礎勉強もできるよ😊👍⤴

bash
$ docker -v
Docker version 20.10.5, build 55c4c88
$ docker-compose -v
docker-compose version 1.29.0, build 07737305

下記の様に、Win10で「Docker Desktopをインストールしているのにコマンドが動かないよ」という方は、Docker Desktopが起動していることを確認するか、Docker Desktopを再インストールにて「WSL2コンポーネント」をインストールしてください。

bash
$ docker -v

The command 'docker' could not be found in this WSL 2 distro.
We recommend to activate the WSL integration in Docker Desktop settings.

■git clone

アプリをインストールしたいディレクトリに移動します。
今回は、「/home/username」配下に「coco-annotator」をインストールしたいと思います。

bash
$pwd
/home/{username}

git cloneコマンドでクローンを作成。

bash
$git clone https://github.com/jsbroks/coco-annotator
Cloning into 'coco-annotator'...
remote: Enumerating objects: 3099, done.
remote: Counting objects: 100% (56/56), done.
remote: Compressing objects: 100% (29/29), done.
remote: Total 3099 (delta 33), reused 42 (delta 27), pack-reused 3043
Receiving objects: 100% (3099/3099), 1.43 MiB | 940.00 KiB/s, done.
Resolving deltas: 100% (2201/2201), done.
Updating files: 100% (183/183), done.

カレントディレクトリをcoco-annotatorへ移動。

$cd coco-annotator/
$ls
CONTRIBUTING.md  README.md     client    docker-compose.build.yml  docker-compose.yml
Dockerfile       backend       datasets  docker-compose.dev.yml    models
LICENSE.md       build_gpu.sh  db        docker-compose.gpu.yml    pytest.ini

■docker-compose

docker-composeコマンドで、コンテナをまとめて立ち上げます。
初回はダウンロード等の処理が発生しますので、時間が少々かかります。

bash
$sudo docker-compose up
Creating network "coco-annotator_cocoannotator" with the default driver
Creating annotator_message_q ... done
Creating annotator_mongodb   ... done
Creating annotator_workers   ... done
Creating annotator_webclient ... done
︙
annotator_workers | [2021-06-03 04:55:34,624: INFO/MainProcess] celery@ac9f6f54fbd8 ready.

ちなみにDocker Desktopアプリで確認するとこんな感じにコンテナが4個起動されていることが分かります。

➌coco-annotator起動

■ローカルホスト:5000へ接続!

ブラウザから[http://localhost:5000]へ接続します。
起動したら、ユーザ名、パスワードを入力して、ユーザ登録[Registar]します。

➍じゃんけんアノテーション作成

今回は、じゃんけんの「goo」、「choki」、「par」を判別できるようなものを想定し、作業を進めます。

■アノテーションの作成

Datasetsにて、[Create]ボタンを押下します。

■データセット名、カテゴリ名の入力

Dataset Name:Jankenと入力します。
Default Categories:goochokiparと入力し、3つのカテゴリを作成します。
最後に[Create Dataset]ボタンを押下します。

Default Categories」の入力の仕方がちょっと変わっていて、カテゴリの入力は、「goo↲ (リターン)」、「choki↲ (リターン)」、「par↲ (リターン)」というように入力します。

こんな感じに1件登録されます。

Janken」をクリックすると以下の画面へ進みます。
まだ何もデータを置いていないので、「No images found in directory.」と表示されます。

■画像の配置

画像の登録は、エクスプローラから実施します。
画像の置き場所は、「/home/{username}/coco-annotator/datasets/Janken」配下となります。

念の為、「Janken」ホルダの権限をALL Writeに変えておきます。

bash
$ sudo chmod a+w datasets/Janken/

エクスプローラから以下のパスにアクセスし、画像をコピーしてください。

Explorer
¥¥wsl$¥Ubuntu¥home¥{username}¥coco-annotator¥datasets¥Janken

■ TIPS:以下、フォルダは同じ場所を参照しています。
[Ubuntu]
/home/{username}/coco-annotator/datasets/Janken
[Win10]
¥¥wsl$¥Ubuntu¥home¥{username}¥coco-annotator¥datasets¥Janken

■画像の読込み

coco-annotarorの「Scan」ボタン、もしくは「Janken」と書かれたところをクリックして、配置した画像データを読み込みます(リロードします)。

■アノテーション設定

画像を1つクリックし、編集する画像を選びます。

この画像は、「グー」なので「goo」の右にある「+」を押して、注釈を1つ追加します。
次に左側にあるツールで注釈を付けたい部分を囲っていきます。
最初は「Magic Wand」というツールで大体の箇所を選択してください。しきい値を変えると自動で認識する範囲が変わります。しきい値の変更は右下の「Threshold」で変更することができます。今回はデフォルトの「Threshold:30」で実施しました。

その後「Brush」、「Eraser」で形を整えるとやりやすいと思います。筆の大きさは、右下の「Radius」から変更することができます。「Radius:10」くらいが使いやすかったです。

こんな感じで次々にアノテーションを付けていきます。

■cocoダウンロード

画像にアノテーションを付け終えたら、「DataSets」に戻ります。
6 of 6 images annotated.」と表示されており、全部アノテーションを付けられたことが確認できます。
ここで、「」をクリックして、「Download COCO」を選択するとローカルPCにダウンロードすることができます。

ダウンロードしたjsonファイルJanken.json)は以下の様になっています。
自動的にCOCOフォーマットjsonファイルが出来上がるのはとても便利ですね!

Janken.json
{
    "images": [
        {
            "id": 1,
            "dataset_id": 1,
            "category_ids": [
                3
            ],
            "path": "/datasets/Janken/par1.jpg",
            "width": 640,
            "height": 480,
            "file_name": "par1.jpg",
            "annotated": true,
            "annotating": [],
            "num_annotations": 1,
            "metadata": {},
            "milliseconds": 317525,
            "events": [
   ︙ (省略)
}

➎以上

前回、「Dockerの勉強兼インストール」をしたのが活きました!
COCO-Annotatorは、Dockerを利用することで、簡単にアプリの起動ができ、COCOフォーマットを知らなくてもデータの出力までやってくれるのはとても簡単で便利だと思いました。

ただし、オブジェクト範囲を選択するときに、Magic Wand Toolというオブジェクトのエッジ検出機能を使用(しきい値は変更できます)していますが、やはりこの方法ではきちんとしたオブジェクト選択は難しいです。そのため、再度、ブラシを使ったり、消しゴムを使ったりと、オブジェクト範囲を編集し直すことが多いです…。つまりセグメンテーション方式でのアノテーション作業は、かなり面倒で時間がかかります。AIでは多くの画像枚数が必要となるため、個人趣味レベルではなく、組織立ってやるのがベストかもしれません…

COCO-Annotatorですが、今回紹介したカテゴリ検知だけでなく、姿勢推定や骨格検出に利用されるキーポイント検知のアノテーションも付けられるみたいです。

次回は、少ないデータですが、今回作ったCOCOデータYOLACTで、じゃんけん判定できるモデルを作成したいと思います。
👉こちらの記事へ続きます。

お疲れ様でした。