はじめに
画像・動画のアノテーションツール「CVAT」を使用してみたのでメモ。
全体概要
- ブラウザで使用できるGUIアプリ。データプラットフォームとしても活用可能。
- デプロイはdocker-composeを使用。
- 画像をバルクで、動画は1ファイル単位でアップロードし、
Taskとして登録する。 -
TaskはProjectという単位に所属させることが出来る。ProjectとTaskは一対多の関係(ディレクトリと同じ感じ)。 - アノテーション対象は
rectangle、polygon、polyline、points、cuboid。polygonはopencvによるサポートツールがあり、インスタンスの境界に沿ってpolygonの点をサジェストしてくれる。 - 動画の場合はsemi auto annotation機能を使って、自動で中割を作成してくれる。ただし、実用的なのは
rectangleくらいか。(参考 https://www.youtube.com/watch?v=Hc3oudNuDsY) - 学習モデルをデプロイできるサーバーを含んだコンテナもあり、それを使用すると学習済みモデルをデプロイ、Web APIとして利用可能になる。アノテーションツールから呼び出してアノテーションの自動化に活用可能。
- アノテーションラベルは様々な形式でダウンロード可能。登録した生画像(動画)、フレームに分割された画像もダウンロード可能。
- 動画の場合はフレーム単位で分割され、画像(PNG)としてダウンロードできる。
- 認証機能有り。ただしユーザー管理機能は貧弱。
-
kibanaが含まれており、作業時間などの統計が見れる。
タスク作成について
-
Subsetはtrain/val/testの区分分け。 - 動画の場合はフレームに分解され、指定した圧縮率で圧縮される(疎視化)。圧縮された画像はアノテーションツールで使用される。
- データは
docker-compose.ymlのvolumesに定義されているcvat_dataに格納される。名前付きボリュームは/var/lib/docker/volumesに作成されるので、データは/var/lib/docker/volumes/cvat_cvat_data/に格納される。 - タスク単位で、
raw,original,compressedのファルダが生成され、それぞれ元のファイル、分解されたファイル、圧縮されたファイルが格納されている。zip chunksを有効化しない場合は、compressed内のファイルがzipにならない。実用上問題があるかは不明。 -
segment sizeを指定すると、ビデオをsegment sizeのフレーム数に分割してjobを複数生成する。 - 同時に
overlap sizeを指定すると、連続するsegmentでフレームがoverlap size分だけ重複する。重複したアノテーションは自動でマージされて全体で一つのアノテーションになる。 - 100MBの動画(1280x720, 8620frame, 圧縮無し)の場合、登録直後、ディスクを4GB消費。フレームのDL時に6GB消費。これらの消費が永続化temporalかは不明。
バグ?
- フレーム画像がJPEGになる。
再現不可能。同時に複数アップロードなどして失敗、圧縮のリトライをしたときに起こる?