CVATはオープンソースで使える画像のアノテーションツールです。様々な形式のアノテーションデータを出力することができます。自分でサーバーを立てると全ての機能を無料で使えるので自前のサーバーで運用するのがオススメです。もちろん、有料ですがCVAT側に全てを管理してもらう場合は安心感があります。今回は、CVATの自前での立ち上げ方について解説していきます。
Dockerのインストール
以下のサイトからインストーラをダウンロードしてDocker Desktopをインストールします。
以下のようなウィンドウが出てくればOKです。ちなみにサインインする必要はありません。
Windowsの方はDokcerをインストトールする前にWSLを設定してください。
CVATのインストール
CVATをインストールする前にgitがまだインストールされていない方はインストールしてください。
まず、Terminalを開いてCVATをダウンロードしたいフォルダまで移動します。
cd <フォルダのパス>
GitHubリポジトリからCVATをダウンロードします。この時、タグを指定しないとデフォルトではdevブランチのものを使うことになってしまうので、Tags
にあるバージョンを指定します。今回はv2.12.1
を使用します。また、フォルダを軽くするために、ダウンロードするコミットの深さを1にしています。
git clone https://github.com/cvat-ai/cvat -b <タグ> --depth 1
クローンが終わったら、バージョンをわかりやすくするためにフォルダ名を変えておきます。
mv cvat cvat_v2.12.1
次にCVATフォルダに移動します。
cd cvat_v2.12.1
サーバーとして運用したい場合は先に環境変数CVAT_HOST
にサーバーのIPアドレスをセットします。
export CVAT_HOST=<IPアドレス>
CVATフォルダ内で以下のコマンドを実行するとコンテナが立ち上がります。
docker compose up -d
ブラウザで
または、
http://<サーバーのIPアドレス>:8080
にアクセスすると次の画面が表示されます。
左上の「Create an account」を押して適当なアカウントを作成します。
これで準備完了です。DockerDesktopを使っている場合は、ポチポチとコンテナのオンオフができるので、使いたい時はコンテナを立ち上げて、終わったらストップさせます。
本格的にサーバーとして運用する場合はスーパーユーザーを以下のコマンドを走らせて作成し、それでまずはログインします。
docker exec -it cvat_server bash -ic 'python3 ~/manage.py createsuperuser'
自動アノテーションのセットアップ
CVATはYOLOなどを読み込んで自動でアノテーションしてくれる機能があります。以下ではそのセットアップ方法について解説します。
さまざまなOSで試行したところ、Linux以外では今のところ上手く行きませんでした。Windows、Macの方はご注意ください。
nuctlのセットアップ
まず、コンテナを落としておきます。
docker compose down
続いて、以下のファイルを開いて4行目を確認します。
components/serverless/docker-compose.serverless.yml
services:
nuclio:
container_name: nuclio
image: quay.io/nuclio/dashboard:1.11.24-amd64
(以下省略)
1.11.24-amd64
となっているのでこれにあうバージョン(1.11.24)のnuctl
をダウンロードします。
wget https://github.com/nuclio/nuclio/releases/download/<バージョン>/nuctl-<バージョン>-linux-amd64
ダウンロードが完了したら/usr/local/bin/nuctl
に移動させます。
sudo mv nuctl-<バージョン>-linux-amd64 /usr/local/bin/nuctl
sudo chmod +x /usr/local/bin/nuctl
以下のコマンドでエラーが出なければOKです。
nuctl
AIモデルのセットアップ
デフォルトでアノテーションに使えるのモデルのリストは以下に記載されています。
今回はYOLOv7をセットアップするので、上記のリストの「YOLOv7」をクリックすると、
に飛びます。
これのURLのserveless
からnuclio
の前までを切り出して(ここYOLOv7
では:serverless/onnx/WongKinYiu/yolov7
)(SAM
の場合はserverless/pytorch/facebookresearch/sam
)
CPUでアノテーションする場合は
./serverless/deploy_cpu.sh <切り出したURL>
GPUを活用する場合は
./serverless/deploy_gpu.sh <切り出したURL>
を実行するとAIモデルのセットアップが完了します。(終了するまで時間がかかります)
GPUを使用したい場合は以下のようにセットアップすると良いみたいですが、私の環境ではエラーを吐かずに正常に設定完了するものの、GPUが使われている感じがしませんでした。
nuctl create project cvat
nuctl deploy --project-name cvat \
--path serverless/onnx/WongKinYiu/yolov7/nuclio \
--triggers '{"myHttpTrigger": {"maxWorkers": 1}}' \
--resource-limit nvidia.com/gpu=1
コンテナの起動
続いて、以下のコマンドでコンテナを起動します。
docker compose -f docker-compose.yml -f components/serverless/docker-compose.serverless.yml up -d
コンテナを落としたい場合は以下のコマンドを使用します。
docker compose -f docker-compose.yml -f components/serverless/docker-compose.serverless.yml down
テスト
この動画でどんな感じに検出されるのか最後に試してみました。
Jobの右下の「Actions」から「Automatic annotation」を選択して、
人と乗り物を検出するように設定して、
自動アノテーションを走らせると、
以下のような感じになりました。
オリジナルのAIモデルを載せたい場合については次の記事に書いています。