アノテーションツール「CVAT version1.0」試してみた

# (いつもの)あらまし

近年、我々は、創造的な仕事の時間を奪われ、AIのためにひたすら「アノテーション※」という儀式を繰り返していた・・・。
そして、思考は、簡単にアノテーションできないかと考える日々に流れるのであった。

※アノテーション（英語：annotation）
　あるデータに対して関連する情報（メタデータ）を注釈として付与すること。
　XML等の記述形式を用いてメタデータをタグ付けする場合が多い（Wikipediaより）。

# CAVT

今回は、CVATというアノテーションツールを使用します。
このアノテーションツールはポイントのアノテーションから３Dの矩形のアノテーション、トラッキングなど
様々なアノテーション機能があります。
さらに、事前にアノテーションする物体を認識する学習済みのモデルを読み込むことで、自動アノテーション（※）が可能です。
今回は、その自動アノテーション機能を使用してみたいと思います。
※完全に自動ではなく、データによっては結果を確認して、修正するような作業が必要になります。

まずは、インストールします。インストール環境は以下のとおりです。

+ OS: Ubuntu 18.04 STL
+ Docker : 19.03.11
+ docker-compose: 1.26.0
+ cvat: 1.0.0

### nvidia-container-toolsの設定

自動アノテーションをする際に、GPUを使用したいので、以下の設定をします。

[CVATのREADME](https://github.com/opencv/cvat/blob/develop/components/cuda/README.md)では、`docker info | grep 'Runtimes'`でRuntimeを確認すると`Runtime: nvidia`と表示されると書いてありますが、私のPCでは、以下のように表示されました。

```bash
$ docker info | grep Runtime
 Runtimes: runc
WARNING: No swap limit support
```

なので、以下のJsonフィアイルを作成して、設定を変更しました。

```bash
$ sudo gedit /etc/docker/daemon.json
```

以下のようにjsonファイル内に記載します。

```json:daemon.json
{
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}
```

Dockerを再起動して、再度確認すると、`nvidia`が設定されていました。

```bash
$ systemctl restart docker
$ docker info | grep Runtime
 Runtimes: nvidia runc
 Default Runtime: runc
```

### CVAT install

CVATのリポジトリは、Developブランチがデフォルトになっているため、
ブランチをちゃんと指定して

```bash
$ cd ~
$ git -b 1.0.0 clone https://github.com/opencv/cvat.git
$ cd cvat
```


#### OpenVINO

[OpenVINOの公式サイト](https://registrationcenter.intel.com/en/products/postregistration/?sn=CCBP-GDBZBRJ2&EmailID=wakaba%40gmail.com&Sequence=2759124&dnld=t)からOpenVINOのtgzファイルをダウンロードしてきます。

ダウンロードしたtgzファイルをcvatの以下のディレクトリに移動します。

```bash
$ mv (ダウンロードしたディレクトリ)/l_openvino_toolkit_p_2020.4.287.tgz ~/cvat/components/openvino/
```

さて、やっとbuildです。
公式には、`docker-compose build`することが書いてありますが、
それでは、アノテーション機能のみがビルドされます。
Auto Annotationの機能が使用したい場合は、以下のようにBuild設定します。

```bash
$ docker-compose -f docker-compose.yml -f components/cuda/docker-compose.cuda.yml \
  -f components/auto_segmentation/docker-compose.auto_segmentation.yml \
  -f components/analytics/docker-compose.analytics.yml \
  -f components/tf_annotation/docker-compose.tf_annotation.yml \
  -f components/openvino/docker-compose.openvino.yml build
```

ビルドが完了したら、以下のように起動します。

```bash
$ docker-compose -f docker-compose.yml -f components/cuda/docker-compose.cuda.yml \
  -f components/auto_segmentation/docker-compose.auto_segmentation.yml \
  -f components/analytics/docker-compose.analytics.yml \
  -f components/tf_annotation/docker-compose.tf_annotation.yml \
  -f components/openvino/docker-compose.openvino.yml up -d
```

初回は管理者アカウントを作成します。管理者の権限がないアカウントでは、
アノテーションのTaskを作成できません。

```bash
$ docker exec -it cvat bash -ic '/usr/bin/python3 ~/manage.py createsuperuser'
$ Username (leave blank to use 'django'): [管理者権限ユーザー名]
$ Email address: 
$ Password: 
$ Password (again): 
$ Bypass password validation and create user anyway? [y/N]: y
$ Superuser created successfully.
```

下記のURLで管理者サイトに入れば、ユーザー管理ができます。

[Django administration panel](http://localhost:8080/admin/login/?next=/admin/)

# Automatic Annotationの使い方

Chromeブラウザを開いて、http://localhost:8080/ にアクセスします。
すると、CVATのログインページが表示されるので、先程の管理者権限のユーザーアカウントでログインします。

公式の[User's guide](https://github.com/opencv/cvat/blob/release-1.1.0/cvat/apps/documentation/user_guide.md)を参考にアノテーションのプロジェクトを作成します。

作成したプロジェクトの「・・・」の箇所をクリック（下図の赤枠箇所）
「Automatic annotation」をクリックして、使用したいモデルを選択して[Submit]するを押すと処理が開始されます。

![Screenshot from 2020-07-16 00-03-30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104675/0eafd62d-ea6d-ea52-2a93-b8b3f94a4beb.png)

処理が終われば、矩形やマスクが自動的に付与されています。
あとは微調整や未検出、誤検出を手作業で修正していくことで、アノテーションが完了します。

# 自分のモデルを読み込む

私はまだ試せていませんが、自分で学習させたモデルを使用することも可能です。

[CVAT Auto annotation](https://github.com/opencv/cvat/blob/develop/cvat/apps/auto_annotation/README.md)


# 参考サイト

[学習データ作成ツールCVATによるオートアノテーションとトラッキング](https://qiita.com/code_440/items/0a668e79e932c5f3f71c)
[can`t build CUDA #668](https://github.com/opencv/cvat/issues/668)
[OpenVINO：インストールメモ](https://demura.net/deeplearning/16879.html)
[CVAT: 追加コンポーネントのインストール](https://demura.net/deeplearning/16938.html)