Help us understand the problem. What is going on with this article?

AnnoFabハンズオン ~機械学習名古屋 第22回勉強会~

More than 1 year has passed since last update.

AnnoFabハンズオン ~機械学習名古屋 第22回勉強会~

by yuji38kwmt
1 / 148

はじめに


機械学習名古屋 第22回勉強会の発表資料です

https://machine-learning.connpass.com/event/148266/


自己紹介

来栖川電算のyuji38kmwtです。

  • not 機械学習エンジニア
  • not データサイエンティスト
  • not Web開発者
  • not アノテータ(教師データ作成者)
  • アノテーションの効率化などを考えるエンジニア?
    • アノテーションの生産性や品質
    • アノテーションルール
    • アノテーションツール

機械学習ではデータセットが重要

来栖川電算で考えている機械学習の工程と、その重要度

image.png

https://image.slidesharecdn.com/jawsfesta20191102-191102014200/95/jaws-festa-20191102-24-638.jpg?cb=1572659048 引用


アノテーションとは?

画像などのデータに「意味付け」することです。
たとえば、画像に映っている自動車の部分を囲って、「この部分は自動車です」と意味付けすることです。


AnnoFabとは?

  • 来栖川電算の開発・提供しているクラウド型のアノテーションツール
  • チーム作業の効率化や品質管理の機能を備え、カンタンにカスタマイズができる
  • 無料で利用可能

https://annofab.com/


AnnoFabハンズオンの概要


AnnoFabハンズオンを実施するために必要なこと

以下の条件を満たしていないと、ハンズオンを実施できません。

AnnoFab組織にアクセスできない方は、AnnoFabハンズオンの事前準備に従って、作業してください。


AnnoFabハンズオンの内容

  • 説明:ハンズオンで利用するデータセットとアノテーションルール
  • ハンズオン
    • ハンズオン1:簡単なアノテーションを実施
    • ハンズオン2:様々なアノテーションを実施
    • ハンズオン3:AnnoFabプロジェクトを作成
  • 説明:ハンズオンで説明しなかったAnnoFabの機能
  • 最後に

タイムスケジュール

13:00-13:15 はじめに、AnnoFabハンズオンの事前準備
13:15-13:25 ハンズオンで利用するデータセットとアノテーションルール
13:25-14:00 ハンズオン1(自由時間10分)
14:00-14:30 ハンズオン2,3
14:30-15:00 自由時間&休憩
15:00-15:25 ハンズオンで説明しなかった機能
15:25-15:45 機械学習プロジェクトの話 @n_kats_ 

ハンズオンで利用するデータセットとアノテーションルール


ハンズオンで利用するデータセット BDD100K


BDD100Kの概要

ハンズオンでは、BDD100K(Berkley DeepDrive 100K Dataset)を使います。
自動運転用のオープンなデータセットです。

image.png


BDD100Kの詳細情報

  • 前方車載カメラの映像のデータセット
  • 1本約40秒の動画が100,000本
  • HD動画(1280x720)
  • アノテーションの種類
    • 物体検出
    • セグメンテーション
    • 走行エリア
    • レーンマーキング

BDD100K:物体検出(Object detection)

image.png

https://medium.com/@karol_majek/bdd100k-dataset-25e83e09ebf8 引用


BDD100K:セグメンテーション(Segmentation)

image.png

https://medium.com/@karol_majek/bdd100k-dataset-25e83e09ebf8 引用


BDD100K:走行エリア(Driving Area)

image.png

https://medium.com/@karol_majek/bdd100k-dataset-25e83e09ebf8 引用


ハンズオンで使うアノテーションルール


アノテーションルールを考える前にロールプレイング

あなたは自動運転プロジェクトの開発者です。
前方の車載カメラの情報から、いくつかの課題を解決していきます。

image.png


課題と目標

あなたは自動運転プロジェクトの開発者として2つの課題を挙げました。
それぞれの課題を解決するために達成すべき目標は以下の通りです。

  • 課題1:前方の自動車にぶつからないよう運転する
    • 目標:前方にいる車を認識する。
  • 課題2:自車レーンの区画線(白線/黄色線)に沿って運転する
    • 目標:自車レーンの区画線を認識する

image.png


目標を達成するために必要なアノテーション

以下のデータがあれば前方の自動車と区画線を認識できそうですね。

  • 前方の自動車を矩形で囲ったアノテーション
  • 自車レーンの区画線を線で引いたアノテーション

前方の自動車を矩形で囲ったアノテーション

image.png


自車レーンの区画線を線で引いたアノテーション

image.png


評価用の情報

以下の情報はモデル訓練時には利用しませんが、認識結果を評価するときに利用できそうですね。

  • 自動車が他の物体によって隠れているかどうか
  • 自動車が画像端で見切れているかどうか
  • 区画線の色が白か黄色か

image.png

image.png


アノテーションルール

というわけで、以下のルールに従ってアノテーションします。

  • 前方の自動車を矩形で囲う
  • 自車レーンの区画線の中心を線で引く
  • 以下の属性を付与する
    • 自動車が他の物体によって隠れているかどうか
    • 自動車が画像端で見切れているかどうか
    • 区画線の色が白か黄色か

ハンズオン1: 簡単なアノテーションを実施


「1-BDD100K-画像」プロジェクト画面に遷移


AnnoFabにログインして、プロジェクト一覧画面に遷移する

AnnoFabにログインして、https://annofab.com/projects にアクセスしてください。
参加しているプロジェクトの一覧が表示されます。

image.png


【説明】ハンズオン用のAnnoFabプロジェクト[5分]

ハンズオンでは以下のプロジェクトを使用または参照します。
プロジェクト一覧に以下のプロジェクトが表示されていない場合は、ハンズオン担当者にお伝えださい。

  • 1-BDD100K-画像:「ハンズオン1: 簡単なアノテーションを実施」で使います
  • 2-BDD100K-画像-全種類:「様々なアノテーションを実施」で使います
  • 3-BDD100K-動画:「様々なアノテーションを実施」で使います
  • 4-BDD100K-アノテーション済:「説明:ハンズオンで説明しなかった機能」で参照します

「1-BDD100K-画像」プロジェクトにアクセスする

プロジェクト一覧の「1-BDD100K-画像」を選択してください。以下のページに遷移します。
https://annofab.com/projects/cd45639f-695e-45f6-9a7c-bd73f393f1f8

image.png


アノテーションするタスクを自分に割り当てる


タスク一覧画面に遷移する

ヘッダメニュの「タスク」を選択してください。
image.png

タスク(作業を行う単位)の一覧が表示されます。

image.png


【説明】AnnoFabの用語の整理

  • 入力データ:アノテーション対象の画像または動画
  • タスク:作業を行う単位。複数の入力データで構成されている。
イメージ
├── タスク1
│   ├── 入力データ1
│   ├── 入力データ2
│   ├── ...
│   └── 入力データ10
├── タスク2
│   ├── 入力データ11
│   ├── 入力データ12
│   ├── ...
│   └── 入力データ20
├── ...


教師付けするタスクの担当を自分に割り当てる

「教師付けタスクを取得」ボタンを押してください。ランダムに選ばれたタスクが自分に割り当てられます。
さらに「{task_id}を開いて、一覧に戻る」ボタンを押すと、アノテーションエディタ画面に遷移します。
アノテーションを削除したときの動き.gif


アノテーションエディタ画面でアノテーションする


【説明】アノテーションエディタ画面のタブ

アノテーションエディタ画面の各機能は「タブ」で整理されています。
タブはドラッグ&ドロップでドッキングできます。

アノテーションエディタ画面-タブのドッキング.gif

タブの配置をデフォルトに戻すには、「表示」タブの「初期化」ボタンを押してください。
image.png


自動車を矩形で囲う

「アノテーション」タブの「自動車」を選択してから、「編集」タブの「作図」ボタンを押してください。画像上に矩形を作図できるようになります。
画像上で左クリックすると矩形の作図が開始し、右クリックで作図が確定します。作図が確定すると、「アノテーション」タブの「自動車」配下に項目が追加されます。

矩形アノテーション.gif


自動車の属性を付ける

以下のアノテーションルールに従って、「属性」タブのチェックボックスを操作してください。

  • 隠れているチェックボックス:囲った自動車が他の物体によって隠れている場合、チェックボックスをONにする
  • 見切れているチェックボックス:囲った自動車が画像端で見切れている場合、チェックボックスをONにする

image.png


区画線をポリラインで引く

「アノテーション」タブの「右側の区画線」(or 左側の区画線)を選択してから、「編集」タブの「作図」ボタンを押してください。
左クリックで作図を開始、右クリックで作図を確定します。
※下の動画では、"Ctrl+マウスホイール"で、ズームイン/ズームアウトを行っています
※区画線が見つからない場合は、適当な箇所に線を引いてください。

区画線の作成.gif


区画線の属性を付ける

以下のアノテーションルールに従って、「属性」タブのチェックボックスを操作してください。

  • 色ラジオボタン:白か黄色か選択する

image.png


2枚目の画像に移動する

このプロジェクトではタスクに2枚の画像が含まれています。
1枚目の画像のアノテーションが終わったものとして、次に2枚目の画像をアノテーションしましょう。
「タスク」タブの「2」を選択してください。2枚目の画像に移動します。

image.png


タスクの提出


アノテーション作業が完了したらタスクを提出する

アノテーション作業が終わったら、「タスク」タブの「提出」ボタンを押して、さらにモーダルウィンドウの「提出」ボタンを押してください。
提出が完了したら、アノテーションエディタ画面のタブを閉じてください。

image.png

タスクの提出.gif


タスクのフェーズを確認(教師付け⇒受入)

提出ボタンを押すと、タスクのフェーズが「教師付」から「受入」に変わります。
タスク一覧画面で確認しましょう。
タスク一覧画面を開き、「過去の担当者」セレクトボックスで「自分」を選択してください。
過去に自分自身が担当したタスクの一覧が表示されます。
image.png

一覧に表示されたタスクのフェーズが「受入」になっています。
image.png


【説明】タスクのフェーズの説明

このプロジェクトでは、タスクのフェーズは2つあります。

  • 教師付け: 画像にアノテーションを付与する作業のこと
  • 受入: 教師付が完了したタスクが品質基準を満たしているか判断すること。品質基準を満たしていない部分を指摘することができる。

受入作業を実施することで、アノテーションの品質を保証することができます。
※受入作業は後述参照


【説明】Annofabでのアノテーション作業のフロー

  1. 教師付作業者が、タスクXに対して教師付を行う
  2. 受入作業者が、教師付されたタスクXを受入する
  3. 品質基準を満たしていなければ、その旨を指摘して、教師付作業者にタスクXを差し戻す。ステップ1へ。
  4. 品質基準を満たしていれば、受入作業は終了し、タスクXは受入完了になる。

image.png


タスクの確認方法


【説明】タスクの中身を確認する

タスク一覧の「タスクID」リンクを選択すると、閲覧モードでアノテーションエディタ画面が開きます。
タスク内の画像やアノテーションを確認できます。

image.png


【説明】タスクにかかった作業時間の詳細を確認する

タスク一覧の「累積実作業時間」を選択すると、タスク履歴画面に遷移します。
各フェーズの開始日時、完了日時、作業時間を確認できます。

image.png

image.png


自由時間[10分]


いろいろ触ってみてください。

以下のスライドも参考にして、AnnoFabをいろいろ触ってみてください。

※ タスクはたくさんあるので、「教師付けタスクを取得」ボタンを何回押してもOKです


【説明】ショートカットキーの確認

アノテーションエディタ画面の「ヘルプ」タブで確認、または各ボタンのツールチップで確認できます。
image.png

image.png

以下の機能をショートカットキーを使うと、素早くアノテーションできます。

  • アノテーション(矩形)の移動:矢印キー
  • 矩形のリサイズ:Shift+矢印キー
  • ズームイン/ズームアウト:Ctrl+マウスホイール

【説明】アンドゥ/リドゥ

「編集」タブの「元に戻す」ボタン、「やり直し」ボタンで、アンドゥ/リドゥができます。

image.png


【説明】アノテーションの表示方法

以下の設定を変更すると、アノテーションの表示方法が変わります。

  • アノテーションラジオボタン
  • 十字カーソルチェックボックス
  • 図形塗りつぶしチェックボックス

image.png


ハンズオン2:様々なアノテーションを実施


AnnoFabで作成できるアノテーション


ハンズオン2の概要

ハンズオン1では矩形、ポリラインアノテーションを使いました。
AnnoFabは矩形やポリライン以外にも、ポリゴンや塗りつぶしアノテーションが利用できます。
ハンズオン2では様々なアノテーションを試して、どんなアノテーションを作成できるか試してみましょう。


【説明】AnnoFabで作成できるアノテーションの種類

画像だけでなく動画にもアノテーションできます。

  • 画像
    • ベクタ形式
      • 矩形
      • ポリライン
      • ポリゴン
    • ラスタ形式
      • 塗りつぶし
    • 全体
  • 動画
    • 区間
    • 全体

image.png

https://annofab.com/docs/faq/#jna0nm 参照


【説明】AnnoFabで付与できる属性の種類

  • チェックボックス
  • ラジオボタン
  • セレクトボックス
  • 数値
  • テキスト(1行)
  • テキスト(複数行)
  • アノテーションリンク
  • トラッキングID

https://annofab.com/docs/faq/#jna0nm 参照


ハンズオン2で試すアノテーション

  • 動画:区間
  • 画像:ポリゴン
  • 画像:塗りつぶし

区間アノテーション(動画)を試す


【説明】区間アノテーション(動画)

動画の区間に対して、何が起きているかをアノテーションできます。
大量の動画からアノテーション対象画像を選出するときなどに利用できます。

動画アノテーション.gif


【説明】動画アノテーションのルール(例)

  • 目的:前方の車載カメラの動画から、交差点付近を重点的にアノテーションするため、交差点部分の画像を抽出する
  • アノテーションルール:自車が交差点にいる間を「交差点」であると指定する

「3-BDD100K-動画」プロジェクトに遷移する

左上のAnnoFabアイコンを選択して、プロジェクト一覧に遷移してください。
image.png

そして「3-BDD100K-動画」を選択してください。

image.png


教師付け作業の開始

タスク一覧の「教師付けタスクを取得」ボタンを押して、教師付け作業を開始してください。
※前述参照

image.png


交差点区間をアノテーションする

「タスク」タブの「再生」ボタンを押してください。動画が再生されます。
「自車が交差点にいる」区間で、タイムラインタブの交差点チェックボックスをONにしてください。そして、交差点から抜けたらチェックボックスをOFFにしてください。
チェックボックスをONにしていた部分が、「交差点」区間のアノテーションということになりました。

BDD100K-動画 プロジェクトで試すことができます。

動画アノテーション.gif


ポリゴンアノテーション(画像)を試す


「2-BDD100K-画像-全種類」プロジェクトに遷移する

左上のAnnoFabアイコンを選択して、プロジェクト一覧に遷移してください。
image.png

そして「2-BDD100K-画像-全種類」を選択してください。このプロジェクトでは、すべてのアノテーション種類、すべての属性種類が利用できるようになっています。

image.png


教師付け作業の開始

タスク一覧の「教師付けタスクを取得」ボタンを押して、教師付け作業を開始してください。
※前述参照


【説明】ポリゴンアノテーションの概要

ポリゴンアノテーションは、矩形では表現できない物体/領域を囲うときに利用します。

image.png


ポリゴンアノテーションを試す

「アノテーション」タブの「ポリゴン」を選択してから、「編集」タブの「作図」ボタンを押してください。
作図ツールの「自由形状」ボタンを押せば、一般的なポリゴンを作成できます。
左クリックして作図を開始し、右クリックで作図が終了します。

ポリゴンの作図.gif


塗りつぶしアノテーション(画像)を試す


【説明】塗りつぶしアノテーションの概要

塗りつぶしアノテーションは、錆や傷などポリゴンでは表現できない細かい領域をアノテーションするときに利用します。

image.png

https://annofab.com/#case-examples 引用


塗りつぶしアノテーションを試す

「アノテーション」タブの「塗りつぶし」を選択、「編集」タブの「作図」ボタンを押してください。
作図ツールの「ポリゴン」ボタンを押せば、ポリゴン形状のラスタ形式でアノテーションを作成できます。
左クリックして作図を開始し、右クリックで作図が終了します。

「追記」を選択してから作図ツールの「フリーハンド」を押せば、塗りつぶしの微修正が可能です。

塗りつぶし3.gif


ハンズオン3:AnnoFabプロジェクトを作成


ハンズオン3の概要


ハンズオン3の概要

ハンズオン1,2では、あらかじめ用意してあるハンズオン用プロジェクトでアノテーションを実施しました。
ハンズオン3では、AnnoFabプロジェクトを作成して、アノテーションできる状態にしましょう。
今回は、「麻雀牌を認識するためのアノテーション」プロジェクトを作成します。

ハンズオン3を経験すれば、自分で用意した画像を自分でアノテーションできるようになるでしょう。


ハンズオン3の作業手順

以下の順に作業していきます。

  1. 組織を作成する
  2. プロジェクトを作成する
  3. アノテーション仕様を設定する
  4. 入力データを作成する
  5. タスクを作成する

組織を作成する


組織一覧画面に遷移する

右上の個人メニュを開き、「所属組織」を選択してください。所属組織一覧画面 に遷移します。
image.png


新しい組織を作成する

所属組織一覧画面の「新しい組織を作成」ボタンを押してください。
image.png


組織名、メールアドレスを入力して、「同意して組織を作成」ボタンを押してください。組織が作成されます。
※組織名は好きな名前(ただし重複しないこと)にしてください。
※組織名は後で変更できます

image.png


組織のプロジェクト一覧画面に遷移する

ヘッダメニュの「組織のプロジェクト」を選択してください。

image.png


プロジェクトを作成する


プロジェクトを作成する

組織配下のプロジェクト一覧画面で「プロジェクトを作成」ボタンを押してください。

image.png


プロジェクト名に好きな名前を入力して、「プロジェクトを作成」ボタンを押してください。プロジェクトが作成されると、プロジェクトトップ画面に遷移します。
※ハンズオンでは「画像」に対してアノテーションします。

image.png


入力データを作成する


入力データを作成する

アノテーション対象の画像をアップロードして、入力データを作成します。
ヘッダメニュの「入力データ」を選択して、入力データ一覧画面に遷移してください。
image.png


アノテーション対象画像をGitHubからダウンロード

GitHubから麻雀画像のzipファイルをダウンロードしてください。zipファイルには麻雀画像が3枚含まれています。

image.png


アノテーション対象画像のアップロード

GitHubからダウンロードしたzipファイルを、AnnoFabにアップロードします。
アップロードボタンを押してから入力データが登録されるまで、数分待ちます。
先にアノテーション仕様を設定しましょう。

image.png


アノテーション仕様を設定する


アノテーション仕様画面に遷移

ヘッダメニュの「仕様」を選択して、アノテーション仕様画面に遷移してください。
この画面で、どのようなアノテーションを作成するかを設定します。
image.png


旧アノテーション仕様画面に遷移

左下の「旧画面に戻る」ボタンを押して、旧アノテーション仕様画面に遷移してください。

v0.66.4(2019/11/13)時点では、アノテーション仕様画面が新旧2種類あります。
旧画面の方がプリミティブな方法で操作できること、新画面では一部使いにくい部分があるため、ハンズオンでは旧画面で操作します。

なお、旧アノテーション仕様画面は2019/12に刷新いたします。

image.png


アノテーションルール

数牌と字牌をそれぞれ矩形で囲います。
牌の種類は属性で指定します。

image.png


「数牌」ラベルを設定

「ラベル追加」ボタンを押して、アノテーション仕様を設定します。
以下の通りラベルを設定してください。

ラベル名en: numbers
ラベル名ja: 数牌
アノテーション種類: 矩形

image.png

image.png


「数牌」ラベルの「種類」属性を設定

「属性を追加」ボタンを押して、「種類」属性を設定します。
以下の通り属性を設定してください。

属性名en: type
属性名ja: 種類
属性種類: 排他選択:ラジオボタン

image.png


「数牌」ラベルの「種類」属性の選択肢を設定

「選択肢を追加」ボタンを押して、選択肢を以下の通り入力してください。

characters, 萬子
dots, 筒子
bamboo, 索子

image.png


「数牌」ラベルの「値」属性を設定

1~9を入力するための「値」属性を設定します。
「属性を追加」ボタンを押して、以下の通り属性を設定してください。

属性名en: value
属性名ja: 値
属性種類: 数値

image.png


アノテーション仕様を保存する

「数牌」のアノテーション仕様を入力したら、「アノテーション仕様を保存」ボタンを押してください。
ハンズオンでは時間の都合上「数牌」のアノテーション仕様だけを設定します。

image.png

※作成済のアノテーションがある状態でも、アノテーション仕様は変更できます。


【説明】「字牌」ラベルの設定

以下の通り設定しました。

* honors, 字牌
    * value, 値, ドロップダウン
        * east, 東
        * south, 南
        * west, 西
        * north, 北
        * white, 白
        * green, 発
        * red, 中

アップロードした画像の確認

入力データ画面で、アップロードした画像が入力データして作成されていることを確認します。

image.png


タスクを作成する


タスクの作成

入力データ画面の左上の「タスク作成」ボタンを押してください。

image.png


必要な項目を入力してタスクを作成する。

以下の通り入力して、「タスクを作成」ボタンを押してください。

  • タスクの作成方法:n個ずつ1タスクとする
  • 1タスクに割り当てる入力データ個数: 1
  • 生成するタスクIDにつけるプレフィックス:20191116

image.png


タスクが作成されたことを確認

タスク一覧画面に遷移してください。作成されたタスクが表示されます。
image.png
これで、アノテーションができる準備が整いました。


アノテーションエディタでアノテーションする

タスク一覧画面で「教師付けタスクを取得」ボタンを押して、教師付け作業を開始してください。
自分で登録した画像に対して、自分で設定したアノテーション仕様で、アノテーションすることができます。

麻雀牌をアノテーション3.gif


休憩&自由時間[30分]


いろいろ触ってみてください

  • 不明な点がありましたら、適宜ご質問ください
  • 「1-BDD100K-画像」、「2-BDD100K-画像-全種類」プロジェクトをいろいろ触って、遊んでみてください。

その他の機能の紹介


アノテーションデータのダウンロード


アノテーションデータのダウンロード

プロジェクトのトップ画面で、アノテーションデータをダウンロードできます。
※zipファイル

image.png


ダウンロードできるハンズオン用のプロジェクト

プロジェクト名 ダウンロードできるか 参加者のロール
1-BDD100K-画像 × チェッカー
2-BDD100K-画像-全種類 × チェッカー
3-BDD100K-動画 × チェッカー
4-BDD100K-アノテーション済 アノテーションデータ
自分自身で作成したプロジェクト オーナ

プロジェクトメンバロールが「アノテーションデータ」or「オーナ」でないと、アノテーションデータzipをダウンロードできません。


アノテーションデータのディレクトリ構成

ダウンロードしたアノテーションデータのディレクトリ構成です。

アノテーションデータのルートディレクトリ
├─{task_id}/
│   ├──{input_data_id}.json          (アノテーションJSON)
│   └──{input_data_id}/              (塗りつぶしアノテーションがあるときのみ)
│         └─{annotation_id}          (塗りつぶしのPNG画像)
アノテーションデータ
├── 20191116_0000
│   ├── 0c1be04d-8449-4266-b7b5-e6be23276919.json
│   └── a2b7cfd3-0578-4d93-8ed6-f9c497c321ee.json
├── 20191116_0001
│   ├── 1c523939-39ed-4699-8055-8bfab44e27f9.json
│   └── c2b1bb5d-1e13-414a-b278-c38fe67bfa64.json
│

アノテーションJSONの中身(全体像)

アノテーションデータの中身はdetailsキーに記載されています(後述参照)。
各キーの説明は https://annofab.com/docs/api/#section/Simple-Annotation-ZIP を参照してください。

20191116_0061/01a5faa3-9701-4801-ab8b-69e38de95b58.json
{
    "project_id": "cd45639f-695e-45f6-9a7c-bd73f393f1f8",
    "annotation_format_version": "1.2.0",
    "task_id": "20191116_0061",
    "task_phase": "acceptance",
    "task_phase_stage": 1,
    "task_status": "not_started",
    "input_data_id": "01a5faa3-9701-4801-ab8b-69e38de95b58",
    "input_data_name": "test.zip/test/b5050293-00000000.jpg",
    "details": [
        {
            "label": "right-line",
            "annotation_id": "2c1797d6-063b-4d5c-9d1a-b8c3ff5a926a",
            省略
        },
        {
            "label": "left-line",
            "annotation_id": "1514ad94-9eaa-4b8a-8aeb-65df63a045cb",
            省略
        },
        {
            "label": "car",
            "annotation_id": "d574b17f-2afd-4f52-af0c-6570dda5550f",
            省略
        }
    ],
    "updated_datetime": "2019-11-11T18:31:34.313+09:00"
}

上のJSONは、以下の画像に対するアノテーションJSONです。

image.png
https://annofab.com/projects/cd45639f-695e-45f6-9a7c-bd73f393f1f8/tasks/20191116_0061/editor#01a5faa3-9701-4801-ab8b-69e38de95b58


アノテーションJSONデータの中身(自動車)

dataキーに、左上のxy座標(left_top)、右下(right_bottom)のXY座標が記載されています。
属性はattributesキーに記載されています。

        {
            "label": "car",
            "annotation_id": "d574b17f-2afd-4f52-af0c-6570dda5550f",
            "data": {
                "left_top": {
                    "x": 373,
                    "y": 378
                },
                "right_bottom": {
                    "x": 808,
                    "y": 634
                },
                "_type": "BoundingBox"
            },
            "attributes": {
                "occluded": false,
                "truncated": false
            }
        }

アノテーションJSONデータの中身(左側の区画線)

dataキーに、各頂点のxy座標記載されています。

        {
            "label": "left-line",
            "annotation_id": "1514ad94-9eaa-4b8a-8aeb-65df63a045cb",
            "data": {
                "points": [
                    {
                        "x": 145,
                        "y": 682
                    },
                    {
                        "x": 212,
                        "y": 566
                    },
                    {
                        "x": 305,
                        "y": 429
                    },
                    {
                        "x": 340,
                        "y": 389
                    }
                ],
                "_type": "Points"
            },
            "attributes": {
                "color": "white"
            }
        }

アノテーションデータzipをPythonで扱う

annofab-api-python-client ライブラリで、アノテーションデータJSONを読み込めます。

$ pip install annofabapi
$ pip list | grep annofabapi
annofabapi       0.21.1   
read-annotation.py
from pathlib import Path
from annofabapi.parser import SimpleAnnotationDirParser

def first_true(iterable, default=None, pred=None):
    return next(filter(pred, iterable), default)

# アノテーションデータJSONを読み込む
parser = SimpleAnnotationDirParser(Path("annotation/20191116_0061/01a5faa3-9701-4801-ab8b-69e38de95b58.json"))
annotation = parser.parse()
# 自動車アノテーションの座標値と属性を出力する    
car_detail = first_true(annotation.details, pred=lambda e: e.label == "car")
print(car_detail.data)
print(car_detail.attributes)

https://github.com/kurusugawa-computer/annofab-api-python-client#%E3%82%A2%E3%83%8E%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3zip%E3%81%AE%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF 参照


検査コメント

受入フェーズでは、間違っているアノテーションに対して「検査コメント」で指摘することができます。
検査コメントを使って、タスクを差し戻すまでの手順を簡単に説明します。


受入するタスクの担当を自分に割り当てる

タスク一覧画面の「受入タスクを取得」ボタンを押すと、受入作業ができます。

image.png


間違っているアノテーションに指摘する

「編集」タブの「検査」ボタンを選択して、画像上で間違っている部分をクリックすると、そこに対して指摘できるようになります。
「検査コメント」タブのテキストボックスに指摘内容を入力して、「確定」ボタンを押します。

検査コメントの付与.gif


タスクを差し戻す

間違っている部分に対して指摘し終えたら、「タスク」タブの「差戻」を選択して、タスクを教師付けフェーズに差し戻します。

タスクの差戻.gif


タスクのフェーズを確認(受入⇒教師付け)

差し戻すと、タスクのフェーズが「受入」から「教師付け(2回目)」に変わります。

image.png


アノテーション一覧画面


アノテーション一覧画面の概要

作成したアノテーションの一覧が表示されます。

image.png


アノテーション一覧画面で"BDD100K"の「列車」を確認する

BDD100Kの「列車」アノテーションに間違いが多いことが、BDD100K-アノテーション済 の アノテーション一覧画面 から確認できます。

image.png


統計画面


統計画面

タスクの進捗状況や作業時間などを確認できます。
予定通り作業が完了するか、期待通りの生産性を満たしているかなどを把握するのに利用できます。

image.png


作業ガイド画面


作業ガイド画面

アノテーションルールなど、作業するためにチームで共有すべき情報を、WYSIWYGで記述できます。
https://annofab.com/projects/cd45639f-695e-45f6-9a7c-bd73f393f1f8/instruction

image.png


AnnoFab Web API


AnnoFab Web API

Web APIを使ってAnnoFabを操作することも可能です。外部システムと連携するときなどに利用できます。
https://annofab.com/docs/api/

Pythonならば、 annofab-api-python-client ライブラリで簡単にWeb APIにアクセスできます。

image.png


アノテーションリンク


【説明】アノテーションリンクの概要

アノテーションリンク属性は、「頭と胴体」や「車両全体とナンバープレート」など複数のパーツから構成されて、関連付けたいときに使います。

image.png

AIのビジネス利用を加速する教師データ作成の戦略 引用


【説明】アノテーションリンクを試す

属性タブの「アノテーションリンク」の「変更」ボタンを押してから、他のアノテーションを選択すると、そのアノテーションと関連づきます。
※Escapeキーでリンクモードを解除できます

アノテーションリンク.gif


プロジェクトメンバ一覧画面


プロジェクトメンバのロール

プロジェクトメンバ一覧画面で、ロールの設定/閲覧ができます。

image.png

今回のハンズオンで使用/参照したプロジェクトでは、皆様を以下のロールで設定しました。

プロジェクト名 ダウンロードできるか 参加者のロール
1-BDD100K-画像 チェッカー
2-BDD100K-画像-全種類 チェッカー
3-BDD100K-動画 チェッカー
4-BDD100K-アノテーション済 アノテーションデータ
自分自身で作成したプロジェクト オーナ

プロジェクトメンバのロールの詳細

image.png

注意事項

  • チェッカー:
    • 入力データ一覧画面が閲覧できない
    • アノテーションzipをダウンロードできない
  • アノテーションユーザ:
    • 教師付け、受入など変更を伴う作業ができない。

最後に


AnnoFabでできること

  • アノテーション作業
    • 画像アノテーション
      • 矩形、ポリライン、ポリゴン、塗りつぶし
      • 属性
    • 動画アノテーション
      • 区間指定
      • 属性
  • アノテーション作業以外
    • 受入作業による品質チェック
    • 統計画面での生産性・品質、スケジュールの確認
    • 作業ガイド画面でアノテーションルールの管理
    • Web APIで外部ツールとの連携

AnnoFabは無料で利用できるので、趣味で機械学習用のデータを作成するときなどに利用できるかもしれません。


アノテーション業務で考えること

実際にアノテーション業務を実施すると、アノテーション作業以外のことも考える必要があります。

  • いつ、アノテーション作業が完了するか?
  • アノテーションコストはどれくらい?
  • アノテーションの品質をどう担保するか?
  • 作業者ごとの生産性・品質は期待通りか?

AnnoFabではアノテーション作業以外の機能もサポートしています!


AnnoFabの利用事例

  • 事例1. 道路標識や看板などの文字認識、車載カメラ写真や航空写真からの物体検出
  • 事例2. 汚れ、さび、傷など不良箇所の精密な塗り分け(セグメンテーション)
  • 事例3. 車載カメラや監視カメラの動画にアノテーション

https://annofab.com/#case-examples
image.png


アノテーションツールの比較

高度なアノテーションの量産を行う場合は、AnnoFabがよいかもしれません。

image.png

https://speakerdeck.com/exoego/annotation-strategy-to-accelerate-using-ai-for-business?slide=33 引用


備考


ハンズオン用のAnnoFabプロジェクト

ハンズオン用の以下のAnnoFabプロジェクトは、2020/12/31までご利用いただけます。ご自由にお使いください。
利用できなくなる1週間前にはアナウンスするようにいたします。

  • 1-BDD100K-画像
  • 2-BDD100K-画像-全種類
  • BDD100K-動画
  • BDD100K-アノテーション済

実行環境

  • AnnoFab v0.66.4
    • annofabapi v0.21
  • Python 3.7

参考サイト

AnnoFabの利用実績

[TRY] F-Zeroのアノテーションを見せる

AnnoFabの利用実績

アノテーションツール


ご清聴ありがとうございました。

yuji38kwmt
愛知のIT企業で修行しております。2018年4月に転職しました。 基本的に自分用のメモとして、記事を書いております。 所属先の見解とは一切関係ありません。 https://qiita.com/yuji38kwmt/items/a474ad97e0d86f6081a2
kurusugawa
「いいソフトウェアを楽に作る」技術を追求する企業。今は、機械学習、画像認識中心。
http://kurusugawa.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away