見出し画像

AWS EC2上のUbuntuにCVATをデプロイして、yoloでsemi-auto annotationする

AWS EC2 instanceに ubuntu20.04をデプロイしていることを前提とする。
AMIは「Deep Learning AMI GPU PyTorch 1.13.1 (Ubuntu 20.04) 20230315」を使用。

CVATのインストール

以下の本家documentを元にインストールする。

youtubeも充実。

dockerは入っているので割愛。cvatを持ってくる。

git clone https://github.com/opencv/cvat
cd cvat

今回の場合、クラウド上にデプロイするので以下のコマンドは必須。EC2のpublic IPを入れる。

export CVAT_HOST=your-ip-address

以下で簡単に立ち上がる。

docker compose up -d

dockerのバージョンによってdocker-composeだったり、docker composeだったりする。やめてほしい。以下でsuperuserを作って入れる。

docker exec -it cvat_server bash -ic 'python3 ~/manage.py createsuperuser'
project 画面

AWS S3 Bucketのマウント

クラウドストレージをマウントして、大規模データセットを使用可能にする。
CVATのtabからCloud Storages→"+"と移動して、Display nameに名前をつけて、ProviderはAWSを選択。Bucket nameを設定する。
ACCESS KEY ID、SECRET ACCESS KEY IDはIAM userで発行できるいつものやつを入れる。重要なのはmanifestファイルを作ること。

Cloud strage 設定画面

cvat/utilsにツールが用意されているが、

今回はAWS上にCVATをデプロイしたので、そこまでデータを持っていってmanifest作るのが面倒。探した結果以下を発掘。

pipでインストールして、pythonでローカルで組んで、各データのmanifestを作成。AWSにアップロードする。

これでCVAT上からアクセス可能。フォルダごとアップロードするなら、パスの情報もmanifestファイルに入れないと表示されないので注意。

Cloud strageの画面

nuclioを使ってAIをインストール

serverlessでyoloなどが動くというdocker containerが用意されていて、以下を打ち込めば立ち上がる。

docker compose -f docker-compose.yml -f components/serverless/docker-compose.serverless.yml up -d

nuclioを持ってきて、色々やる。

wget https://github.com/nuclio/nuclio/releases/download/<version>/nuctl-<version>-linux-amd64
sudo chmod +x nuctl-<version>-linux-amd64
sudo ln -sf $(pwd)/nuctl-<version>-linux-amd64 /usr/local/bin/nuctl

nuclioを立ち上げる

nuctl create project cvat

<ec2のpublic ip:8070>をブラウザで叩けばnuclioが見える

nuclio初期画面

以下でdextrとyolov3が使用可能になる。

nuctl deploy --project-name cvat \
  --path serverless/openvino/dextr/nuclio \
  --volume `pwd`/serverless/common:/opt/nuclio/common \
  --platform local
nuctl deploy --project-name cvat \
  --path serverless/openvino/omz/public/yolo-v3-tf/nuclio \
  --volume `pwd`/serverless/common:/opt/nuclio/common \
  --platform local
nuclio function画面

このインテルのおじさまもわかりやすい。

CVATに戻ればModelタブが追加されていて、semi-auto annotationが可能になる。

yolov5のインストール

こちらを参考に進める。

一発これやればいいという話。何かdockerfileをいじった場合は --buildをつけるのを忘れずに。

docker compose -f docker-compose.yml -f docker-compose.dev.yml -f components/serverless/docker-compose.serverless.yml up -d

deploy_cpu.shとdeploy_gpu.shが用意されて入れこれらを使えば、長いコマンドを打ち込まなくて済む。

serverless/deploy_cpu.sh serverless/pytorch/ultralytics/yolov5/nuclio/

nuclio上にyolov5があることが確認できる。ただしyolo5の挙動が不安定で上記コマンドを打ってもうまくデプロイできるときとできない時があった。これに関してはfunction.ymlファイルにportを指定して解決。

新しいTaskを作成し、yolo5を使ってplayerとpersonを対応させて自動アノテーションさせると以下のようになった。

dockerを止めたい時には以下のコマンド。--remove-orphansでネットワーク設定も消すことができる。

docker compose down --remove-orphans

customモデルを指定すれば、自身で学習させたモデルでautomatic annotationができる。

いいなと思ったら応援しよう!