Deep-Architecture Blog

ディープラーニング勉強中の建築学生のブログです.

画像における物体検出用のアノテーションデータ作成に便利なツール

先日,VATIC(Video Annotation Tool from Irvine, California)という動画アノテーションツールの紹介をしましたが,今回はVIA(VGG Image Annotator)という画像アノテーションツールの紹介をしたいと思います. 公式サイトはこちら:
VGG Image Annotator (VIA)

何に使うの?

用途としては,前回と同じく,ディープラーニングによる一般物体検出アルゴリズムの教師データ作成などが挙げられます.一般物体検出アルゴリズムの例としてはFast R-CNN, YOLO(You Only Look Once), SSD(Single Shot MultiBox Detector)などがあります.実際にこれらのアルゴリズムで学習を行うためには,どの画像にどのオブジェクトがどの位置にあるかの3要素(画像,タグ名,座標)の一覧を作成することができます.

VIAの特徴

アノテーションツール自体はとてもたくさんの種類があります. Wikipediaの一覧だけでも13種類あります.
List of Manual Image Annotation Tools - Wikipedia

これらのアノテーションツールを使うためには,ほとんどのツールでは環境構築をする必要があります.しかし,このVIAでは環境構築は一切必要ありません.
ダウンロードしてhtmlを開くだけで作業可能です.

また,私がVIAをおすすめする理由として,

  1. 複数枚同紙に作業可能
  2. 複雑な形のバウンディングボックスを作成可能
  3. 画像に紐づいたアノテーション情報をjson形式かcsv形式で出力可能
  4. 2017年4月に作られたばかりで,まだまだアップデートの余地がある

があります.

VIAの導入方法

公式サイトから最新バージョン(2017/09/26時点ではv1.03)のzipファイルをダウンロードしてください.
その後解凍すれば,導入完了です.

VIAの使い方

こちらが作業画面です. f:id:tsuchiya050505:20170926001805p:plain 左のサイドバーでは,バウンディングボックスの種類,画像を選択することができます."Region Attributes"をクリックするとボトムバーが現れ,バウンディングボックスにタグ名などの要素を追加することができます. 作業が完了したら,トップバーの"Annotation"から"Save as json"か"Save as csv"を選択することでアノテーション結果をまとめてダウンロードすることができます. 一度作業を終了したり,後日修正したいときはアノテーション結果をインポートすることで作業を継続することができます.

出力例(json):

{"swan_in_geneve.jpg62201":{"fileref":"","size":62201,"filename":"swan_in_geneve.jpg","base64_img_data":"","file_attributes":{"caption":"Swan in a lake"},
  "regions":{"0":{"shape_attributes":{"name":"polygon","all_points_x":[119,102,196,406,395,433,413,336,332,247,164,119],"all_points_y":[175,218,285,288,232,227,140,138,210,182,195,175]},
  "region_attributes":{"name":"Swan","color":"white"}}}},

"death_of_socrates_by_david.jpg71862":{"fileref":"","size":71862,"filename":"death_of_socrates_by_david.jpg","base64_img_data":"","file_attributes":{"caption":"The painting \"Death of Socrates\". Image source: https://commons.wikimedia.org/wiki/File:David_-_The_Death_of_Socrates.jpg"},
  "regions":{"0":{"shape_attributes":{"name":"rect","x":187,"y":141,"width":126,"height":253},
  "region_attributes":{"name":"Plato","color":"orange"}},"1":{"shape_attributes":{"name":"rect","x":358,"y":111,"width":104,"height":242},
  "region_attributes":{"name":"Socrates","color":"white"}}}},

"various_shapes.jpg21513":{"fileref":"","size":21513,"filename":"various_shapes.jpg","base64_img_data":"","file_attributes":{"caption":"Various geometric shapes"},
  "regions":{"0":{"shape_attributes":{"name":"polygon","all_points_x":[128,23,69,221,256,128],"all_points_y":[60,143,272,264,120,60]},
  "region_attributes":{"name":"pentagon","color":"blue"}},"1":{"shape_attributes":{"name":"circle","cx":476,"cy":529,"r":48},
  "region_attributes":{"name":"circle","color":"cyan"}},"2":{"shape_attributes":{"name":"ellipse","cx":351,"cy":315,"rx":46,"ry":88},
  "region_attributes":{"name":"ellipse","color":"yellow"}},"3":{"shape_attributes":{"name":"point","cx":115,"cy":365},
  "region_attributes":{"name":"triangle vertex","color":"pink"}},"4":{"shape_attributes":{"name":"point","cx":121,"cy":575},
  "region_attributes":{"name":"triangle vertex","color":"pink"}},"5":{"shape_attributes":{"name":"point","cx":300,"cy":467},
  "region_attributes":{"name":"triangle vertex","color":"pink"}}}}}

以上,画像アノテーションツールの紹介でした.


動画アノテーションツール VATIC(Video Annotation Tool from Irvine, California)を簡単にインストールする方法

VATIC(Video Annotation Tool from Irvine, California)という動画アノテーションツールを簡単にインストールする方法と使い方を紹介します.

VATICとは?

VATIC(Video Annotation Tool from Irvine, California)はコンピュータビジョン研究のための無料でオープンソースの動画注釈ツールです。
公式サイト:vatic - Video Annotation Tool - UC Irvine

VATICを使えば,何フレーム目にオブジェクトがどの枠内にいたかの要素(フレーム番号,タグ名,座標)の一覧を作成することができます.

応用すれば,このような動画も作ることができるそうです. www.youtube.com

何に使うの?

用途としては,ディープラーニングによる動画の一般物体検出アルゴリズムの教師データ作成などが挙げられます.一般物体検出アルゴリズムの例としてはFast R-CNN, YOLO(You Only Look Once), SSD(Single Shot MultiBox Detector)などがあります.
動画の教師データを1フレームごとに手作業で作成するのは非常に手間であるため,VATICを使うのはとても意義のあることだと考えられます.

なぜこの記事を書いたか?

何よりもVATICのインストール方法が書かれた記事が少なかったことが理由の1つです.また,普通にインストールしようとすると環境構築をするのに非常に手間と時間がかかってしまうが,英語のブログで簡単にVATICをインストールできる方法を見つけたので日本語でまとめようと思いました.
参考としてVATICの通常のインストール方法が書かれている記事です.
qiita.com

簡単なVATICのインストール方法

自分の環境 : Ubuntu 16.04 (Windows10 VirtualBox上)
参考にさせて頂いたサイトはこちら:

glentimemaker.github.io github.com

Step 1. Dockerをインストール

Dockerというコンテナ型のアプリケーション実行環境をインストールします.
すでにインストールされている方は飛ばしてください.
私はDocker CEをインストールしました.
インストール方法 : Redirecting…

Step 2. フォルダ,テキストファイル,動画ファイルを用意

  1. 作業を行いたい場所に"data"という名前のフォルダを作成します.
  2. "data"フォルダ内に “labels.txt”というテキストデータを作成します.
    “labels.txt”の1行目に使用したいタグを追加します.タグ同士は半角スペースで区切ってください.
    例:people car dog cat
  3. "data"フォルダ内に "videos_in"という名前のフォルダを作成し,その中に動画ファイルを用意してください.動画の拡張子は"avi"か"mp4"が望ましいです.

Step 3. コンテナ作成

コマンドプロンプトで"data"フォルダがあるディレクトリまで移動し,以下のコマンドを実行してください.
$ sudo docker run -it -p 8111:80 -v $PWD/data:/root/vatic/data npsvisionlab/vatic-docker
8111はポート番号です.数字は自由に変えても構いません.
実行すると自動的にDockerコンテナのbashにアクセスします.

Step 4. 設定ファイル書き換え

既存の設定だと約300フレーム(約8秒)ごとに動画が区切られてしまうため,設定ファイルの書き換えを行います.
以下の操作はコンテナのbashで行います.

まず,# vi ./root/vatic/example.shを実行し設定ファイルの書き換えを行ってください.設定に関する変数はTURKOPSです.
例えば,
TURKOPS="--offline --title HelloTurk!"

TURKOPS="--offline --title HelloTurk! --length 10000"
に変更すると10000フレームまとめてアノテーションを行うことができるようになります.

保存して終了したら, # sh ./root/vatic/example.sh を実行すれば,アノテーションを行うための準備が完了します.

補足として,設定の一覧を以下に示します.

MTurk Options
    --title         The title that MTurk workers see
    --description   The description that MTurk workers see
    --duration      Time in seconds that a worker has to complete the task
    --lifetime      Time in seconds that the task is online
    --keywords      Keywords that MTurk workers can search on
    --offline       Disable MTurk and use for self annotation only

Compensation Options
    --cost                  The price advertised to MTurk workers
    --per-object-bonus      A bonus in dollars paid for each object
    --completion-bonus      A bonus in dollars paid for completing the task

Qualification Options
    --min-approved-percent  Minimum percent of tasks the worker must have
                            approved before they can work for you
    --min-approved-amount   Minimum number of tasks that the worker must
                            have completed before they can work for you

Video Options
    --length        The length of each segment for this video in frames
    --overlap       The overlap between segments in frames
    --use-frames    When splitting into segments, only the frame intervals
                    specified in this file. Each line should contain a
                    start frame, followed by a space, then the stop frame.
                    Frames outside the intervals in this file will be
                    ignored.
    --skip          If specified, request annotations only every N frames.
    --blow-radius   When a user marks an annotation, blow away all other
                    annotations within this many frames. If you want to
                    allow the user to make fine-grained annotations, set
                    this number to a small integer, or 0 to disable. By
                    default, this is 5, which we recommend.

Step 6. アノテーション

ブラウザを開き,
localhost:8111/directory

にアクセスします.(ポート番号が8111の時)
"Video Segment"をクリックすることでアノテーションを開始することができます. 使い方は本家の動画がわかりやすいです.

www.youtube.com

Step 7. 出力

アノテーションが完了したら右下にある"Save Work"をクリックし作業を保存します.その後,トップページに戻り"Output Labels"をクリックします.
"Dumping video currentvideo"というメッセージが出れば成功です.
"data"フォルダに"output.xml"というデータが出力されているはずです.
このように出力されます.

<annotation>
    <folder>mylabels</folder>
    <filename>currentvideo.flv</filename>
    <source><type>video</type><sourceImage>vatic frames</sourceImage>
    <sourceAnnotation>vatic</sourceAnnotation></source>

    <object>
        <name>people</name>
        <moving>true</moving>
        <action/>
        <verified>0</verified>
        <id>0</id>
        <createdFrame>0</createdFrame>
        <startFrame>0</startFrame>
        <endFrame>999</endFrame>
        <polygon>
            <t>0</t>
            <pt><x>33</x><y>43</y><l>1</l></pt>
            <pt><x>33</x><y>113</y><l>1</l></pt>
            <pt><x>111</x><y>113</y><l>1</l></pt>
            <pt><x>111</x><y>43</y><l>1</l></pt>
        </polygon>

        .
        .
        .

        <polygon>
        <t>999</t>
            <pt><x>33</x><y>43</y><l>1</l></pt>
            <pt><x>33</x><y>113</y><l>1</l></pt>
            <pt><x>111</x><y>113</y><l>1</l></pt>
            <pt><x>111</x><y>43</y><l>1</l></pt>
        </polygon>
    </object>
</annotation>

Step 8. 終了方法

コンテナのbash上で# exitを実行すると,ローカルに戻ってくることができます.
その後,$ sudo docker ps -aを実行すると以下のような結果が出力されるので,CONTAINER IDを確認してください.

CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS              PORTS                           NAMES
xxxxxxxxxxxx        npsvisionlab/vatic-docker   "/bin/bash -C /roo..."   8 hours ago         Up 20 minutes       443/tcp, 0.0.0.0:8111->80/tcp   wonderful_elion

CONTAINER ID(この場合,xxxxxxxxxxxx)を確認したら,コマンドプロンプト$ sudo docker stop xxxxxxxxxxxxを実行すれば安全に終了することができます.

Step 9. 後日作業を続ける時

$ sudo docker start xxxxxxxxxxxxを実行した後,Step 4と同じようにlocalhost:8111/directoryにアクセスしてください.

以上,VATICのインストール方法でした.
アノテーションデータはxlm形式であるため,実際にPythonなどで実装するときの詳しい方法などは後日まとめようと思います.


ブログを始めるにあたって

始めまして,id:tsuchiya050505です.現在大学院の修士課程で建築学,特に都市解析の分野を学んでいます.
また,去年から趣味でPythonを使ってディープラーニングの勉強をしています.

なぜこのブログを始めたか?

このブログはディープラーニングの勉強を始めてちょうど1年目の節目として始めました.また,「建設とディープラーニング」という記事(例:建設機械を強化学習で動かす)はあっても,「建築とディープラーニング」という記事はほとんどなく,あっても建築家の対談だけという状況に痺れを切らし,ないなら自分で書こうと思い立ち,「Deep-Architecture Blog」というタイトルを付けました.

記事の内容は?

「建築とディープラーニング」をテーマにした技術系ブログにしていこうと考えています.具体的な内容としては,備忘録という意味を込めて,自分なりに勉強したことやプログラミングで実装してみた内容などを積極的に書いていきます.僕自身が興味のあるカテゴリーは建築デザインと都市計画なので,そのような内容の海外の記事からネタを引っ張ってきてまとめたり,海外の論文を読んでみたりすることもあるかもしれません.

読者様へのお願い

私はプログラミングの勉強を始めて1年程度の素人であるため,間違った内容を書いてしまうことや,先入観でものを言ってしまうことがあるかもしれません.そのときはどうか訂正箇所などのコメントを送ってくださると幸いです.