クラウドエンジニアブログ

画像のデータセット作成が楽になる!Microsoft のアノテーションツール、VoTT のご紹介

八木 真理奈

八木 真理奈

はじめに

画像分類、物体検出、セグメンテーションなどの画像認識を行う際、避けては通れないのが、学習に使用する正解データセットの生成です。

機械学習全般に言えることですが、精度の高いモデルを構築するためには質の良い学習データを用意することが重要です。もちろん、単にモデルを作るだけであれば、公開されているデータセットの中から条件にあうものを使用する形でもかまいません。しかし、実務への応用を目指し、会社独自の機械学習モデルを構築する際には、自社で保有する動画・画像から学習用のデータセットを作成する必要があります。

ただ、画像に対してアノテーションを行い、学習用のデータセットを作成する工程では、多くの時間と人件費がかかってしまうことが課題でした(アノテーションとは、対象となるデータに対して正解ラベル(タグ)や対象物の座標等関連する情報を注釈として付与することを指します)。もちろん、クラウドソーシングサービスを利用したり、専門の外部業者に委託する選択肢もあるのですが、内部で試験的に実施したい時や予算が限られている時など、状況に応じては社内で実施せざるを得ないことも多いです。一般的なペイントツールでも行うことはできるのですが、できるかぎり早く簡単に自分たちの学習用データセットを準備したい…

そんなときに役に立つのが、アノテーションツール(タグ付け支援ツール)です。世の中には無償・有償含め、多くのアノテーションツールがありますが、今回は、Microsoft 製のアノテーションツール、VoTT の使い方をご紹介します。


VoTT とは

VoTT(Visual Object Tagging Tool)は、Microsoft が提供する、動画・画像に対してアノテーションをおこなう無償のアノテーションツールです。

  • 良い点
    • GUI 操作で誰でも早く簡単にタグ付けができる
    • Windows、Mac、Linux を問わずクロスプラットフォームで利用できる
    • 画像と動画に対してタグ付け可能
    • 特に動画に関してはトラッキングの機能があり、使いやすい
    • CNTK、Tensorflow(Pascal VOC)、YOLO のアルゴリズムを使用する場合は、そのまま使用できる形式で出力できる

  • 気を付ける点
    • 出力された json ファイルを画像切り出しに使う場合、ファイル名は格納されないため、別途ファイル名を取得する必要がある
    • CNTK、Tensorflow(Pascal VOC)、YOLO 以外のアルゴリズムで使用したい場合、別途データセットの加工が必要

以降の章では、動画をアノテーションする際の VoTT の簡単な使い方を、「設定」、「アノテーション」、「出力」の3ステップでご紹介します。
※ 以下 URL より、自分の OS にあった VoTT ファイルをダウンロードし、解凍しておきましょう
https://github.com/Microsoft/VoTT/releases

1. 設定

さっそく、アノテーションの設定を行っていきます。

VoTT 起動すると、[Select an Image Directory or Video for tagging.]というタグ付けする対象を選択する画面が表示されます。今回は、動画に対してアノテーションを行うので、右の動画の絵をクリックし、読み込む動画を選択します。ブログ執筆時点では、読み込める動画は mp4 形式、もしくは、ogg 形式となっているため、それ以外の動画は変換してから読み込みましょう。

Select an Image Directory or Video for tagging.


動画を読み込んだら、以下のアノテーションの設定を行います。

アノテーションの設定を行う



  • Frame Extraction Rate:フレーム抽出率
    タグ付けを行う、ビデオ1秒あたりのフレーム数

  • Region Type:タグ付けを行うバウンディングボックスの種類
    • Rectangle(長方形):長辺、短辺の長さが任意のバウンディングボックス
    • Square(正方形):正方形のバウンディングボックスのみ
      (バウンディングボックスとは、物体の位置と大きさを表す、物体を囲む矩形のことです。)
    ※ 特に制約などなければ、Rectangle でかまいません

  • Suggested Region Method:次のフレームの提案手法
    • Tracking:トラッキング
      Camshift tracking algorithm を使用して、バウンディングボックスをトラッキングする
    • Copy Last Frame:前フレームをコピー
      前のフレームでタグ付けしたバウンディングボックスを次のフレームにコピーする

  • Enable SCD(Enable Scene Change Detection:シーン変化検出を有効にする)
    シーン変化検出を有効にすると、トラッキング時の誤検出を防止することができる
    ※ 有効にした場合、速度がやや遅くなります

  • Labels:ラベル(使用するタグの名前)
    アノテーションしたいタグを入力する
    ※ カンマで区切ることで、複数のタグを用意することが可能です

2. アノテーション

設定が完了したので、さっそくアノテーションを始めましょう。

  • 主なタグ付けの手順としては、以下の3ステップを繰り返すだけです。

  1. マウスで対象となる物体を囲む
  2. タグを選択する
  3. 画像内のアノテーションがすべて終わったら、次に進むボタンをクリックする
    ※ タグは、フレームが変更されるたびに自動的に保存されます

アノテーションを始めましょう

  1. 前に戻る
  2. 次に進む
  3. 最初のタグ付けされていないフレームに移動する
  4. フレーム内のタグをクリア
  5. フレーム ID
  6. 現在の動画の時間
  7. 残りの動画の時間
  8. タグ
    ※ 選択した領域は赤色で表示され、選択していない領域は青色で表示されます

また、トラッキング機能を設定することで、対象物を一から囲む手間がなくなり修正のみで済むので、より楽になります。

トラッキング機能を設定


3. 出力

アノテーションが終わりましたら、VoTT でアノテーションした画像とその情報を出力します。方法としては、2つです。

1. json 形式で出力する(自動)

自動的にタグやバウンディングボックスの座標が json ファイルで保存されます。

json 形式で出力する


CNTK、Tensorflow(Pascal VOC)、YOLO 以外のアルゴリズムで使用したい場合、別途データセットの加工が必要になります。しかし、ここで出力される json ファイルでは、どのフレームにアノテーションしたかという情報が記載されないため活用しづらく、動画の場合は自分で画像を切り出す作業も必要です。よって、2つめの方法である「フォーマットを指定して、データセットとして出力する」を行ってから、使用するアルゴリズムにあった形式に変換する方が、場合によっては手間が少ないかもしれません。

2. フォーマットを指定して、データセットとして出力する

[Object Detection]から、[Export Tags]を選択し、指定したアルゴリズムのデータセットとしてアノテーションした画像とその情報をエクスポートします。

フォーマットを指定して、データセットとして出力する



  • Export Format
    データセットの出力形式を指定する
    ※ 現時点におけるフレームワークの形式は以下の通り
    • CNTK Fast-RCNN
    • Tensorflow(Pascal VOC)
    • YOLO
    ※ 全フレームの 20% をテスト用データセットとしてランダムに割り振ります

  • Export Until
    データセットとして出力する範囲を指定する
    • Last Tagged Region:タグ付けした最後のフレームまで
    • Last Visited Frame:ユーザーが訪問した最後のフレームまで
    • Last Frame:すべてのフレーム

  • Training Path
    データを出力するディレクトリのパスを入力
    (もしくは、Custom Vision Service の Training Key を入力することで、Custom Vision Service との連携も可能です。)

出力には少し時間がかかることがありますが、気長に待ちます。

出力を気長に待ちます


今回は、Tensorflow(Pascal VOC)形式を選択して出力しましたので、以下ファイルが出力されました。

  • Annotations
    • タグ付けを行った画像ごとの情報(xml):画像のパス、サイズ、バウンディングボックスの座標等
      ※ Pascal VOC のデータセットのフォーマットに準拠しています

  • ImageSets
    • 学習、評価に使用する、タグごとのフレーム名(txt)
      ※ duck_train.txt、duck_val.txt … といった形です

  • JPEGImages
    • フレームごとに切り出された画像(jpg)

  • pascal_label_map.pbtxt
    • タグ ID とタグ名(pbtxt)

Pascal VOC は公開されている学習用データセットがありますので、そのデータセット以外で独自に検出したいものがある場合等に、VoTT でのアノテーション結果を追加して、一緒に学習させるというのも一つの手段です。こうすることで早く簡単に自分たちの状況にあったモデルを構築し、画像認識を行うことができます。

Pascal VOC やそのデータセットに関しては、下記 URL をご覧ください。
http://host.robots.ox.ac.uk/pascal/VOC/

さいごに

今回は、Microsoft 製のアノテーションツール VoTT をご紹介しました。少しでも早く簡単に、そしてすぐ使えるデータセットとして出力できるので大変便利ですよね。その他、公式 HP では、Docker を使用した学習等も紹介されており、運用も見据えた使い方も広がってくるでしょう。VoTT の機能も今後拡張される予定で、すでに予定されている機能としては、主に以下があります。

  • タグ付けプロジェクトのマネジメント
  • セグメンテーション
  • ズームイン/ズームアウト

画像認識に取り組んでみたいけど、なかなか動きだせない…というご担当者の皆様。ぜひこういったツールを活用しながら、一歩踏み出してみてはいかがでしょうか。データを整理し、溜める段階を超え、活用して課題解決する段階へと移行していきましょう。

弊社では、画像分類、物体検出、セグメンテーション等、画像に関する機械学習モデル構築を承っております。動画・画像のデータを活用し課題解決を行いたいご担当者の方、ぜひお問い合わせください。

また、保有するデータ数が少なく、学習に使用できるデータが限られてしまう場合でも、転移学習という手法を用いることで、少ない枚数ながらも精度の良いモデルを構築できる場合もあります。お気軽にご相談いただければと思います。



次回予告
  • 風速計の IoT Edge デバイス化3



【総合】お問い合わせ

ソリューションに関する全般的なお問い合わせはお気軽にご相談ください。

ピックアップ

セミナー情報
クラウドエンジニアブログ
clouXion
メールマガジン登録