LoginSignup
14
8

More than 1 year has passed since last update.

CVATの自動アノテーション機能を使ってみた

Last updated at Posted at 2021-08-28

人生初投稿!

初めて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

コンテナがすべて立ち上がれば成功です.
image.png

CVATのセットアップ

以下のコードを入力してください.ここではDjangoのスーパユーザの作成を行なっています.email addressの登録はreturn(enter)を押してパスしてもらって大丈夫です.

入力したユーザ名とパスワードは後で使用するので,覚えておいてください.

docker exec -it cvat bash -ic 'python3 ~/manage.py createsuperuser'

これでセットアップは完了です.

CVATを触ってみる

タスク作成

http://localhost:8080/
にアクセスしてください.
以下のような画面が出てくるので,先ほど設定したユーザネームとパスワードでログインしてください.

image.png

ログインした後このようなトップページが出てくるので,
image.png

+ Create new taskをクリックしてタスクを作成します.
NameやLabelsを設定していきます.Labelの色はしっかりと設定しておいた方が後のアノテーションがしやすくなります.

image.png

また,アノテーションに使用する画像は先ほどマウントしたフォルダ(ディレクトリ)から取得するので,Connected file shareをクリックし,使用画像に☑を入れてください.

image.png

全ての項目を設定し終えた後,submitボタンをクリックします.

このポップアップが右側に出現すると,タスク作成は完了です.
image.png

アノテーションをしてみる

では一度アノテーションを手動でしてみましょう.
image.png

Jobsのjob#1をクリックしてください.

この□にカーソルを持っていくと,下の画像のようなポップアップがでます.
image.png

ここでShapeをクリックすると,アノテーションモードになります.囲んでみると,以下のようにアノテーションをすることができます.

image.png

ですが,手動で全画像をアノテーションをするのはきつく,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 が表示されています.

image.png

では,先程のアノテーション画面に戻ります.左のバーをみると,AI Toolsが追加されていることがわかります.
DetectorsからYOLO v3を選択してください.
image.png

例ではマリトッツォを自動アノテーションで検出してみます.マリトッツォはどちらかというとケーキのような見た目なので,yoloのケーキ検出機能を使って,マリトッツォのアノテーションを行ってみます.
image.png

アノテーションを行うと,見事マリトッツォがアノテーションされていました!
image.png

この自動アノテーションは一枚ずつ行うこともできますが,まとめてアノテーションすることもできます.Tasksを開いて,Actionsボタンをクリック→Automatic annotationをクリックするとそのタスク内の全画像の自動アノテーションが始まります.

image.png

オンライン版

CVATを一度お試しで使ってみたい,という方向けにオンラインdemo版が用意されています.環境構築が出来なかった! という方はこちらでCVATを体験できます.

最後に

CVATの自動アノテーションはとても楽ですね.物体検出の他にセグメンテーションも行うことができます.今までは全て手動でしなければいけなかったのですが,CVATで大幅に時間短縮ができます.特にセグメンテーションは何回もマウスをポチポチすることになるので,この手間が削減されるのはとても助かります.

この記事が面白いなと思ったらLGTMよろしくお願いします!

今後も記事を書いていきますので,そちらの方も見て頂ければ幸いです😄

参照

CVAT
CVAT Docs

14
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
8