OpenCV CVAT (アノテーションツール)
OpenCV CVAT (アノテーションツール)
- 作成日: 2020/07/13
- 更新日: 2020/07/27
アノテーションツールの機能要件
画像分析プロジェクトのトレーニング向けに大量に蓄積された画像データに対して、効率的にアノテーションを進めることができるツールが存在するか調査しました。私が定義したアノテーションツールの機能要件は次の通りです。
- マルチユーザ での利用が可能
- ブラウザー で利用することが可能
- 豊富な出力フォーマットをサポート
- 自動アノテーション をサポート
これらの全ての条件を満たすアノテーションツールが OpenCV CVATです。このツールを発見するまでに多くのツールを調査し、最後まで候補に残ったのが以下のツールです。
比較したアノテーションツール
インストール方法
特徴
- Dockerを利用しCVATの環境を構築することができます
Dockerfile
,docker-compose.yml
が提供されているので、以下の通りコマンドを実行するだけでcvat
を起動することができます
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
冒頭で私が定義したアノテーションツールの機能要件をCVATは全て満たしています。
- ブラウザー で利用することが可能
- マルチユーザ での利用が可能
- 事前にユーザの作成と ユーザ権限を設定する必要がある
- 豊富な出力フォーマット
- 自動アノテーション をサポートしている
- Tensorflow物体検出 - RCNN Object Detector
- OpenVINOフォーマットの深層学習による自動アノテーション => 未試行 (2020/07/21現在)
- Deep Extreme Cutによる半自動アノテーション => 未試行 (2020/07/21現在)
アノテーション (マニュアル)
マニュアル・アノテーション、オート・アノテーションのいずれの方法を選択したとしても、まず最初にタスクを作成する必要があります。
タスク作成
- アノテーション対象の画像ファイルを取り込む OR 共有ドライブを指定 OR リモートソースの指定(URL)
- アノテーション (ラベル) の定義
- ラベル と 属性の定義
- アノテーション情報の設定
- タスク名
- Z-order 利用する/しない
- 画像品質%
- Dataset repository URL (Option)
- Use LFS (Large File Support) 利用する/しない
利用方法
マニュアル アノテーションの実行
- オブジェクト選択:
- 矩形
- ポリゴン
- ポリライン (複数線 => ポリゴン)
- ポイント
- Cuboid (立方体)
- 操作
- マージ
- 分割
- グループ
タスク作成のステップで "ラベル と 属性の定義" を事前に行うことで オブジェクト選択後、ラベルを選択し、必要があれば属性を設定します (例えば、"Person" ラベル + 属性 "歩いている", "男性" と設定することができる)
利用方法 (動画コンテンツ)
アノテーション情報出力
- アノテーション後、アノテーションファイルをダウンロードする
- アノテーションファイルのフォーマットは以下の通りです
- COCO 1.0
- Datamaro 1.0
- LabelMe 3.0
- MOT 1.0
- PASCAL VOC 1.1
- Segmentation mask 1.1
- TFRecord 1.0
- YOLO 1.1
- LabelMe 3.0形式のアノテーションファイルを取り込む (インポート) ことが可能
- メニュー -
Export as a dataset
>COCO 1.0
を選択することで COCO 1.0 フォーマットのデータセットをダウンロードすることができます - CVATでCOCO 1.0 フォーマットのデータセットの作成に成功すると、自動的にダウンロードが開始され、ファイル名 -
task_test-person-movie-auto-annotation-{DATE_TIME}-coco 1.0
がローカルディスクに保存されます
COCO 1.0出力結果
ダウンロードファイル
- ダウンロードしたファイルを確認します
1 2 |
|
COCO 1.0フォーマット ファイルの確認
- 次に 正しく COCO 1.0フォーマットのデータセットが作成されているか確認します
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
- 2つのディレクトリ -
annotations
とimages
が存在します annotations
ディレクトリ内にinstances_default.json
これが COCO 1.0 データセット JSONフォーマット ファイルです
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
|
images
ディレクトリを確認すると、アノテーションを行なった画像ファイルが存在します- アノテーション元ファイルが動画ファイルの時、CVATは自動的に 各フレームを画像ファイルに変換します
自動アノテーション
NOTE: Masterブランチの開発版では動作しないので、 Tag: v1.0.0 を指定してチェックアウトする必要があります
Tensorflow Object Detection Auto Annotation
Tensorflow + Faster RCNN Inception Resnet v2 Atrous Coco Model モデルを使った自動アノテーション機能です
Dockerイメージ作成
1 2 3 4 5 6 7 8 9 10 11 12 |
|
外部公開するときは docker-compose.yml
の以下の箇所を修正します。以下は、 IP-Address 10.0.1.55
のホストで稼働する CVATを外部公開する例です
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Dockerコンテナ作成, 起動
1 2 3 4 5 6 7 8 9 10 11 12 |
|
自動アノテーション実行
- タスクを作成し、アノテーション対象のファイル (この例では画像ファイル。動画ファイルも可能) のアップロードと、各種設定を行い、保存します
Fig. Auto-annotation 1
- タスク一覧画面に戻った後に、自動アノテーション対象のタスク内にある
Actions
を選択します
Fig. Auto-annotation 2
- サブウィンドウ Automatic annotationの Model ドロップダウンリスト内から モデル - Mask RCNN Object Detector を選択し、実行します
Fig. Auto-annotation 3
- 進捗状況は、Fig. Auto-annotation 2 の Automatic annotation で確認することができます。重い処理になるのでCPUコア数が多くかつRAMの容量が多いワークステーション OR サーバで実行することをお勧めします
Fig. 自動アノテーション実行時 htop
- アノテーション終了後、タスクを開き自動アノテーションの結果を確認します
Fig. アノテーション画面
- アノテーション画面の中にあるメニュー (画面左上) から
Export As a dataset > Segmentation mask 1.1
を選択することでSegmentationClass
とSegmentationObject
が生成されます。また各種フォーマットでデータセットをダウンロードすることが可能です
Fig. Segmentation Class
Fig. Segmentation Object
まとめ
OpenCV CVAT は、1.マルチユーザ での利用が可能、2.ブラウザー で利用することが可能、3.豊富な出力フォーマットをサポート、4.自動アノテーションをサポート の4つの機能がすでに実装されている非常に優れたアノテーションツールです。その中でも自動アノテーション機能を利用することで、画像分析プロジェクトの学習データを作成するコストを大幅に削減することが可能になります。このツールを使うことで以下のワークフローを構築することが可能です。
- 大量の画像を蓄積する
- 大量の画像に対して 自動アノテーションを実行する
- 自動アノテーション結果を 担当者がブラウザで確認しアノテーションが正しく行われたか確認する
- アノテーションに失敗している、もしくは修正が必要な場合は、マニュアルで補正するか、対象の画像をデータセットから削除する
- 学習用データセットをダウンロードし、学習を実行する
実は、OpenCV CVAT には RESTful API が実装されているので、使い方次第ではアノテーションをシステマチックに行うことが可能です
近日、今回試すことができなかった カスタムモデルを使ったオートアノテーションと RESTful API を試す予定です