人生初投稿!
初めてQiitaに投稿をします.もし間違い等あれば,ご指摘していただけると幸いです.
自動アノテーション(auto annotation)とは?
あらかじめ用意していたデータベースから,システムが画像におけるメタデータを自動で付与してくれる機能のことを指します.CVATではそれをAIで実現しており,yoloといったモデルを使用して,自動で画像や動画のアノテーションを行なってくれます.
なお、2021年8月時点での最新Releaseバージョン1.5を使用しています.ネット上の日本語での記事を検索したところ,バージョン1.2に関しての記事しかありませんでした.1.5と1.2ではCVATの起動方法が大幅に変更されているので,最新版を使用されたい方はこちらの記事をご参考ください.
記事の内容
- CVATの起動と使い方
- CVATの自動アノテーションを試す
- オンライン版お試しCVAT
環境
MacBook Pro Core i7
VS Code
Docker version 20.10.8
既にdockerがPCにインストールされていることを前提としています.もしまだの方はDocker Desktopをインストールしてください.
Dockerを使用するので、WindowsでもLinuxでも同様の手順でCVATを使用することができます.
後述しますが,何故かWindowsでは自動アノテーションがうまく起動しませんでした...
GitHubのレポジトリをクローンする
git clone https://github.com/openvinotoolkit/cvat/tree/release-1.5.0
GitHub Desktopを使用する場合は 「current repository ▼」 👉 「Add ▼」 👉 「Clone Repository」 👉 「URL」タブでhttps://github.com/openvinotoolkit/cvat/tree/release-1.5.0
を入力してcloneボタンをクリックしてください.
CVATの初期設定をする
vs codeでdocker-compose.ymlを以下のように変更してください.アノテーションしたい画像を入れたディレクトリ(フォルダ)をあらかじめ設定しておくことで作業がしやすくなるので.'/Users/○×□'
を自身の環境に合わせて設定してください.
Mac(おそらくLinuxも)
services:
...
cvat:
...
volumes:
- cvat_data:/home/django/data
- cvat_keys:/home/django/keys
- cvat_logs:/home/django/logs
- cvat_share:/home/django/share #追加
...
volumes:
...
cvat_share:
driver_opts:
type: none
device: '/Users/○×□' # マウントしたいディレクトリ
o: bind
Windows
services:
...
cvat:
...
volumes:
- cvat_data:/home/django/data
- cvat_keys:/home/django/keys
- cvat_logs:/home/django/logs
- C:\Users\○×□:/home/django/share #マウントしたいフォルダ
CVATの立ち上げ
フォルダを指定した後,CVATを起動します.
docker-compose -f docker-compose.yml -f components/serverless/docker-compose.serverless.yml up -d
CVATのセットアップ
以下のコードを入力してください.ここではDjangoのスーパユーザの作成を行なっています.email addressの登録はreturn(enter)を押してパスしてもらって大丈夫です.
入力したユーザ名とパスワードは後で使用するので,覚えておいてください.
docker exec -it cvat bash -ic 'python3 ~/manage.py createsuperuser'
これでセットアップは完了です.
CVATを触ってみる
タスク作成
http://localhost:8080/
にアクセスしてください.
以下のような画面が出てくるので,先ほど設定したユーザネームとパスワードでログインしてください.
ログインした後このようなトップページが出てくるので,
+ Create new task
をクリックしてタスクを作成します.
NameやLabelsを設定していきます.Labelの色はしっかりと設定しておいた方が後のアノテーションがしやすくなります.
また,アノテーションに使用する画像は先ほどマウントしたフォルダ(ディレクトリ)から取得するので,Connected file share
をクリックし,使用画像に☑を入れてください.
全ての項目を設定し終えた後,submit
ボタンをクリックします.
このポップアップが右側に出現すると,タスク作成は完了です.
アノテーションをしてみる
Jobsのjob#1
をクリックしてください.
この□にカーソルを持っていくと,下の画像のようなポップアップがでます.
ここでShape
をクリックすると,アノテーションモードになります.囲んでみると,以下のようにアノテーションをすることができます.
ですが,手動で全画像をアノテーションをするのはきつく,CVATの意味がありません!
では,本題の自動アノテーションを設定してみましょう.
CVATの自動アノテーション機能をオンにする
yolo-v3を使用して自動アノテーションを使用しました.
ローカルにnuclioを導入します.
https://github.com/nuclio/nuclio/releases/tag/1.5.16
からPCの環境に応じてダウンロードしてください.
なお,nuclioのバージョンは docker-compose.serverless.ymlのnuclioのバージョンと合わせてください.
nuctl-1.5.16-darwin-amd64 #Mac
nuctl-1.5.16-linux-amd64 #Windows
nuctl-1.5.16-windows-amd64 #Linux
Mac (Linux)
sudo chmod +x nuctl-1.5.16-linux-amd64
sudo ln -sf $(pwd)/nuctl-1.5.16-linux-amd64 /usr/local/bin/nuctl
Windows
色々試してみましたが,上手くいきませんでした.Windowsの方はWSL2でDockerを動かしており,Hyper-Vの方では試していません.GitHubのissueを探してみると,同様の問題が発生している方がいらっしゃいました...
ここでcvat
というプロジェクトを作ります.(cvat
という名前以外はCVATでは使用できませんでした)
nuctl create project cvat
もし上手くいかない場合は,http://localhost:8070/ にアクセスしてGUIでプロジェクトを作成してください.
ここでは,yolo-v3モデルをぶちこみます.
nuctl deploy --project-name cvat \
--path serverless/openvino/omz/public/yolo-v3-tf/nuclio \
--volume $(pwd)/serverless/common:/opt/nuclio/common \
--platform local
私の場合ここでエラーが発生し,コンテナの立ち上げができませんでした.原因を探ってみると,コンテナが0番ポートに割り当てられていたようなので,serverless/openvino/omz/public/yolo-v3-tf/nuclio/function.yaml
ファイルにポート番号を追加しました.ポート番号は任意の番号で大丈夫(?)だと思います.
(どうやらこれはバグらしく,nuclioの方では既に修正済みのようですが,CVATが旧バージョンを使用している事が起因して発生しているようです.早く修正バージョンがリリースされるといいですね...)
triggers:
myHttpTrigger:
maxWorkers: 2
kind: 'http'
workerAvailabilityTimeoutMilliseconds: 10000
attributes:
port: 55952 #追加
maxRequestBodySize: 33554432 # 32MB
すると,上手くいきました.
CVATを立ち上げ,リロードをしてみると Projects
Tasks
の横に Models
が出現しました.それをクリックしてみると,以下のように YOLO v3
が表示されています.
では,先程のアノテーション画面に戻ります.左のバーをみると,AI Toolsが追加されていることがわかります.
Detectors
からYOLO v3
を選択してください.
例ではマリトッツォを自動アノテーションで検出してみます.マリトッツォはどちらかというとケーキのような見た目なので,yoloのケーキ検出機能を使って,マリトッツォのアノテーションを行ってみます.
アノテーションを行うと,見事マリトッツォがアノテーションされていました!
この自動アノテーションは一枚ずつ行うこともできますが,まとめてアノテーションすることもできます.Tasks
を開いて,Actions
ボタンをクリック→Automatic annotation
をクリックするとそのタスク内の全画像の自動アノテーションが始まります.
オンライン版
CVATを一度お試しで使ってみたい,という方向けにオンラインdemo版が用意されています.環境構築が出来なかった! という方はこちらでCVATを体験できます.
最後に
CVATの自動アノテーションはとても楽ですね.物体検出の他にセグメンテーションも行うことができます.今までは全て手動でしなければいけなかったのですが,CVATで大幅に時間短縮ができます.特にセグメンテーションは何回もマウスをポチポチすることになるので,この手間が削減されるのはとても助かります.
この記事が面白いなと思ったらLGTMよろしくお願いします!
今後も記事を書いていきますので,そちらの方も見て頂ければ幸いです😄