VoTT2.2.0を使ったローカルファイルでのアノテーションデータ作成

## はじめに

Microsoft が公開しているアノテーションツール [VoTT][vott-github] について、備忘録を兼ねて使い方を整理しました。
クラウドストレージを活用する[オンライン版][vott-online]もあるようですが、今回はローカルファイルでのアノテーションを対象にしています。

## アノテーションとは

直訳すると「注釈」と表現されることが多いですが、本記事では「機械学習の学習データ用に、画像にタグ付けを行う作業」を指します。

## 環境

- macOS Big Sur 11.4
- Microsoft VoTT 2.2.0

## インストール

1. [GitHub の releases][vott-releases]からのインストールが recommended らしいので、その通りに進めていく

2. Assets から自分のプラットフォームに合ったインストーラをダウンロードする
   ![download installer](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1649366/58890525-8206-a90f-b023-379250107bec.png)

3. ダウンロードしたファイルからインストール実行。一本道なので特に迷うポイントもありません
   ![installer image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1649366/a01ad135-5a57-71cf-7dbf-aba4d7ee4dc6.png)

## 準備作業

VoTTでは学習データのまとまりを「プロジェクト」として管理します。

「プロジェクト」には作業対象となるフォルダやクラウドサービスを指定する必要があり、これを
「接続（コネクション）」と呼びます。


アノテーション作業に入る前の事前準備として、この「接続」と「プロジェクト」を作成します。

### 接続（コネクション）の作成

VoTT でのアノテーション作業にあたり、必要なのは以下 2 つの接続です。

- ソース：アノテーション対象の画像や動画が保存されたフォルダ
- ターゲット：作成されたアノテーション情報をエクスポートするためのフォルダ

今回は以下の 2 つのコネクションを作ります。

- ソースフォルダ ：annotation-source
- ターゲットフォルダ：annotation-target

1. VoTTを起動したら、画面左側のアイコンから一番下のプラグマークをクリック
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1649366/1c2f903b-e999-9e23-ef60-d7975b7a8532.png)

2. コネクションの一覧画面が表示されたら、最上段にある「＋」のボタンからコネクションを作成
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1649366/87b1e711-af2f-fe6a-a9b9-03722b5a3603.png)

3. 接続設定の画面で表示名と説明（任意）を入力
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1649366/991c6c5f-e370-2f31-1a7d-2a83df1cc355.png)

4. プロバイダーには「ローカル ファイル システム」を選択
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1649366/aeb93f8a-0c0f-744b-733d-a5297f5ace77.png)

5. フォルダパスは直接入力できないので、「フォルダーを選択」ボタンから対象となるディレクトリを指定
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1649366/596d94e9-51d1-24e6-9a8a-fd640f92a80b.png)

6. フォルダの指定が完了したら「接続を保存」ボタンで保存
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1649366/748d3049-bc10-4745-a0f1-569d76465105.png)

7. 今回作成した接続は以下の２つ
  - ソースフォルダ ：annotation-source
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1649366/627afada-094c-c309-167e-a47672e7b612.png)
  - ターゲットフォルダ：annotation-target
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1649366/6805ebc3-76a0-fbed-38f6-644d030e77cc.png)

### プロジェクトの作成

接続が準備できたら、プロジェクトを作成します。

1. 「新規プロジェクト」を選択
![add new project](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1649366/c8f4f0dc-b666-c43e-4c0c-90f8fdec0ef3.png)

2. プロジェクト情報を入力

    今回は以下のように設定
    - 表示名 `Annotation　Example`
    - セキュリティトークン `<Generate New Security Token>を選択`
    - ソース接続 `<前項で作成したannotation-source>を選択`
    - ターゲット接続 `<前項で作成したannotation-target>を選択`
    - 説明 `アノテーションデータ作成の例`
    - ビデオ設定
      - フレーム抽出率 `15`
    - タグ `<空のまま（後で作成する）>`

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1649366/23d6ba27-2020-c2f0-8ab0-88196e04a031.png)

3. 一通り入力したら「プロジェクトを保存」ボタンを押して作成完了

  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1649366/b2861038-1b88-d9c0-f824-b243a1530cde.png)


## タグエディター画面の見方

メイン画面(タグエディター)は以下のような構成になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1649366/abb64cb5-cae7-f809-98f4-44074b856c66.png)

1. メニュー選択
   
    上から順に説明
   - Home（プロジェクト選択）
   - タグ エディター（上のスクリーンショットの画面）
   - プロジェクト設定
   - エクスポート（出力設定）
   - アクティブラーニング（学習済みモデルによる自動タグ付けの設定）
   - 接続(接続設定)

2. 画像選択
   ソースに指定したディレクトリ内の画像が一覧表示されます[^1]。
   閲覧済み（一度でもエディタ上で表示した画像）にはオレンジの目のアイコンが付きます。
   また、タグ付が付与された画像には緑色のタグアイコンが付きます。


3. 操作アイコン
   - 選択(何も描画せず、描画済みの領域を選択する)
   - 長方形を描く
   - ポリゴンを描く
   - 長方形をコピー
   - アクティブラーニング実行
   - 領域をコピー
   - 領域をカット
   - 領域を貼り付け
   - 全てのリージョン（領域）を削除
   - 前のアセット（画像/動画）
   - 次のアセット（画像/動画）
   - プロジェクトの保存
   - エクスポート

4. アセット

    アノテーション対象の画像が表示されます。
    このエリアに長方形またはポリゴンを描画して、タグを追加していきます。

5. タグ
    - タグの追加
    - タグの絞り込み（タグの種類が多い場合に使用）
    - 選択中のタグのロック（ロックしたタグが領域作成時に自動で割り当てられます）
    - 選択中のタグの修正
    - 選択中のタグの並べ替え（上に移動）
    - 選択中のタグの並べ替え（下に移動）
    - 選択中のタグの削除[^2]

## アノテーション

いよいよアノテーションを始めていきます。
基本的には以下の作業の繰り返しです。

1. 上部メニューから「長方形を描く」を選択
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1649366/f7dc10a6-2cec-c212-d7ab-71f2aff93c72.png)

2. 領域を選択して、タグを指定
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1649366/d29f88b6-cfa4-0449-4c7c-313efd1d3589.png)

「領域を選択」→「タグ付け」の作業を、全ての画像に対して繰り返します。

## 学習用データのエクスポート

1. 左メニューの「エクスポート」を開いて設定を行う

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1649366/119fac50-0e61-aa93-fe71-427a4e88816f.png)
    今回は以下のように設定
     - プロバイダー `Pascal VOC`
     - アセットの状態 `<訪問済みのアセットのみ>を選択`
     - テスト/トレーニング分割 `100（分割しない）`
     - 未割り当てをエクスポート `<チェックなし>`
   
    「エクスポート設定を保存」を忘れずにクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1649366/e5560b88-2c33-74ff-188a-71dd2aae0545.png)

2. タグエディターに戻り、上段のエクスポートボタンをクリック
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1649366/a7a0d03b-de83-1039-6692-0a1ba95e8677.png)

3. ターゲットに指定したフォルダに「vott-json-export」というフォルダが作成され、その下に学習画像とアノテーションファイルが出力される


## その他メモ

- Macのデスクトップ版はUndo/Redoが効かない様子

- タグエディター上の便利なショートカット[^3]

  - 領域のコピー `command + c`
  - 領域のカット `command + c`
  - 領域のペースト `command + v`
  - 複数領域の選択[^4] `ctrl + クリック`
  - 選択領域を移動 `Up/Down/Left/Right`
  - 次の選択領域 `tab`

- 「四角形を描画」を選択したまま領域外をクリックすると下図のような領域ができてしまう
    - ↓の状態であればそのまま削除すれば良いが、選択解除してしまうとマウスでの再選択は非常に難しい
    - tab移動で領域を選択後、×ボタンで削除する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1649366/3d575ee3-21d7-8bff-8b42-8b400abcdc1b.png)


- エクスポートやプロジェクトの保存をすると右上に出てくるダイアログは下のインジケータが空になると消える
    - マウスを乗せると、その間だけインジケータが止まる
    - 処理完了のための待機時間というわけではないようなので、邪魔であれば×で閉じても問題ない
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1649366/8f439db1-80ad-31c2-17fd-9028b821fe39.png)

- 一つの領域に複数のタグを付けると、領域の上にタグと同じ色の四角が表示される
    - 領域が小さいと選択をミスって同じ領域に複数タグ付けしてしまうことがあるので注意
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1649366/a67a207d-32f7-44c1-e982-b81d54e89daf.png)

- タグの操作(編集、削除、並べ替えなど)をするときは、領域を選択していないか注意する
    - 領域選択中は何度クリックしてもタグ選択ではなくてタグ付けのON/OFF切り替えになってしまう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1649366/2229dd22-f728-d493-ff5f-f7ef2ffeabeb.png)


- プロジェクトに追加済みの画像を後から消す方法をご存知の方、ぜひご教示ください

[vott-github]: https://github.com/microsoft/VoTT/
[vott-issue]: https://github.com/microsoft/VoTT/issues
[vott-releases]: https://github.com/Microsoft/VoTT/releases
[vott-online]: https://vott.z22.web.core.windows.net/

[^1]: 一度読み込まれた画像は削除できないので注意
[^2]: タグが1つしか割り当てられていない場合、タグと一緒に領域も消えるので注意
[^3]: Macなのでcommandボタンで記載してますが多分ctrlでWindows版もいけます
[^4]: これはMacでもcommandボタン不可の様子