Laboro

エンジニアコラム

広い技術領域をカバーする当社の機械学習エンジニアが、アカデミア発のAI&機械学習技術を紹介&解説いたします。

対象は人だけじゃない。「非人体キーポイント検出」の可能性と実例

2020.12.15
株式会社Laboro.AI リード機械学習エンジニア 濱本 雅史

概 要

姿勢推定や骨格検出に利用されるキーポイント検出について、その全体像と代表的なアプローチをご紹介した前回。その際、キーポイント検出が人体だけでなく「非人体」にも応用できることに触れました。今回のコラムでは、人体に比べて行われることが少ない「非人体キーポイント検出」を実際に行った例をご紹介するとともに、その特有の課題について考えていきたいと思います。

目 次

非人体キーポイント検出の難しさ
 ・データ準備の難しさ
 ・アノテーションの難しさ
  ・①アノテーションツールは何を使えばいいのか?
  ・②キーポイントの定義はどう設定すべきなのか?
  ・③どこにアノテーションするのか?
 ・モデル学習と精度評価の難しさ
  ・モデルの選択
  ・評価値の算出
非人体キーポイント検出の具体例
 ・データセットとキーポイント定義
 ・モデルの学習
 ・推論結果
まとめ

非人体キーポイント検出の難しさ

前回のコラムで、人体のキーポイント検出は、特徴的な「点」を見つけることがターゲットで、実は、人体以外にも応用できることに触れました。しかし、実際には非人体に対する応用は非常に限られています。非人体キーポイント検出の難しさは、一体どこにあるのでしょうか。まずはその特有の課題について見てきましょう。

データ準備の難しさ

人体であれば、COCOMPIIといった研究開発用のアノテーション済み大規模データが(研究用途限定も含めて)公開されています。一方、非人体の場合にはそのようなベンチマークとなるデータセットが存在せず、また存在したとしても自分たちの目的とマッチするかはわかりません。この点が非人体のキーポイントの応用例が少ない一つの原因と考えられます。そのため、非人体キーポイント検出では特に学習・評価用データの準備とアノテーション作業が重要になります。

アノテーションの難しさ

そうは言っても、COCOやMPIIは数万枚のアノテーション済み画像から構築されているため、匹敵するほどのデータを準備するのは容易ではありません。また、アノテーション業者へ依頼するとしてもニッチな要望にならざるを得ず、様々な面で苦労すると思われます。そのため、まずは小規模のデータに対し自前でアノテーションを行い、どれだけの事ができるのかを確かめるのが良さそうです。

とはいえアノテーションを行う場合、次の3点の疑問が出てきます。

①アノテーションツールは何を使えばいいのか?
②キーポイントの定義はどう設定すべきなのか?
③どこにアノテーションするのか?

①アノテーションツールは何を使えばいいのか?

物体検出などと比較すると、アノテーションツールは非常に限られているのが現状です。筆者が調査した限りだと、唯一COCO Annotatorというツールのみが無償のオープンソースソフトウェアで、かつ比較的実用に耐えうるものだと感じました。一方でユーザー管理はあまり高機能とは言えず、動作が不安定な面もあります。未検証ではありますが、より大規模で安定したアノテーション環境が必要な場合にはCOCO AnnotatorをベースとしたDataTorchというSaaS型商用サービスを検討してみてもよいと思われます。

COCO Annotatorのインストール・基本的な利用方法については、こちらのブログ記事にわかりやすくまとまっています。ただし実際にアノテーションを行ってみると、細かな多数のノウハウが必要になってきます。一例としてアノテーション結果のエクスポート仕様があり、ここをよく理解していないとモデル学習時に思わぬ落とし穴にはまることになります。

②キーポイントの定義はどう設定すべきなのか?

2点目のキーポイントの定義ですが、(画像のパターンとして)客観的にわかる特徴的な点であることがまず重要です。ただし人体でもデータセットによって「頭を1つの点で表現するのか、両目と両耳と鼻の5点で表現するのか」「臀部を中央のみ1点で表現するのか、左右の2点で表現するのか」などが異なっており、具体的にどれだけの数を設定するのかは用途次第です。

また非人体で特有の問題として、左右・表裏が対称であり、厳密な位置の定義ができない場合があることです。この点は人体ではあまり考慮されず、写真を反転しても通常右目と左目は一意に定まります。このことは特に学習時における水平方向の反転による水増し(augmentation)に影響が出てきます。一案としてはあえて学習時に水平方向の反転は行わず、写真の位置だけで左右を判別する、といったことが考えられます。

③どこにアノテーションするのか?

3点目については、人体も含むキーポイント検出特有の課題です。物体検出やセマンティックセグメンテーションと異なり、目や手などは画像の領域であるため、特定の1ピクセルを正解と定めることができません。このことは次節の検出結果の評価で詳しく述べますが、「アノテーションする点のブレは一定許容できるため、厳密さはあまり気にしない」というのが結論になります。

モデル学習と精度評価の難しさ

無事にアノテーションが完了しデータセットができると、いよいよモデル学習に移ることができます。モデル学習については他のタスク同様に「どのようなモデルを使うべきか」という大きな課題点があります。また、選択したモデルを独自データセットにより学習しようとすると、実はモデルの精度評価値の算出で一つ独特な課題が発生します。

モデルの選択

前回のコラムでもいくつかのモデルを紹介しました。いざそれらを試そうと思っても、次のような課題が立ちはだかります。(キーポイント検出には限った話ではないですが)

・公開されている実装は信頼できるか?
・独自データセットに対して容易に適用できるのか?

1点目は、TensorFlowやPyTorchなどのフレームワーク実装済みモデルを作る場合や、自らでモデルを構築する場合は別ですが、OSSとして公開されている最新のモデル実装を利用する際に問題となります。各モデルを提案した著者の実装が公開されており、それを利用するのが通常は一番信頼できるものの、公開されている著者実装で論文の精度が再現できない場合があります。こちらのエンジニアコラムで紹介したM2Detもそのひとつです。再現性は度々機械学習の国際会議でも話題になっており、気を付ける必要があります。

もし公式著者実装の再現性が確認できても、2点目については見落とされがちです。ほとんどの機械学習モデルは特定の公開データセットによるベンチマークと共に学術論文で公表されます。アカデミアの世界では、基本的にそのデータセットに対する精度の再現が保証されるところまでしかチェックされません。そのため、特定データセットのためにコーディングされている場合が多く、独自データセットの利用のためにはソースコードを解析して拡張実装しないとならないこともままあります。前回コラムで紹介し、後ほどの具体例でも使用しているHigherHRNetはまさにこの例です。

評価値の算出

モデルの学習が出来たあとは、学習されたモデルの性能を定量的な評価値で表すことが通常求められます。

キーポイント検出の場合、物体検出と同じ平均適合率(mAP: mean Average Precision)が使われることが多く、他に正解キーポイント率(PCK: Percentage of Correct Keypoints)や多物体追跡精度(MOTA: multi-object tracking accuracy)といった評価値も使われる場合があります。今回は主要な論文でよく利用される、平均適合率のみを紹介します。

平均適合率は物体検出でも使われますが、キーポイント検出の定義は若干異なります。物体検出の場合にはIoU(Intersection over Union)により、正解領域とモデルの出力領域の重なり度合いを用います。例えば半分以上重なっていれば正解領域の検出に成功したとみなす、というように直感的にもわかりやすいかと思います。

一方でキーポイント検出は正解(アノテーションされた位置)・モデル出力結果ともに「点」であるため、正解かどうかを判別することが容易ではありません。また、一つの物体に対して複数キーポイントが存在するという構造のため、それらをトータルで評価したいというニーズがあります。そこでIoUと対応するOKS(Object Keypoint Similarity)という値を定義して、物体単位で全正解点と検出点の近さの度合いを0〜1の実数値で表現します。OKSが定まれば、あとは物体検出のIoUをOKSに置き換えるのみで同じように平均適合率を計算できます。

OKSは式1のように表現されます。パッと見は複雑ですが、各物体中において正解点と対応する検出結果の全てが近ければ1、遠ければ0に近づくという定義になっています。なお式中に現れるvisibilityラベルとは、0がラベル付けなし、1が人の影になるなどで推測できる場合などラベル付けされているが見えない、2はラベル付けされていてハッキリ見える、というような見え方を表現したものです。前述のCOCO Annotatorでも後者2つを区別してアノテーションすることが可能です。

式1:OKSの定義

\(OKS=\sum_{i}[exp(-d_{i}^{2}/2s^{2}\kappa_{i}^{2})\delta(v_i>0)]/\sum_i[\delta(v_i>0)] \)

\(d_i \) : \(i \)番目のキーポイントに対応する検出点とground-truthのユークリッド距離
\(s \) : ground-truthで定められた物体の矩形領域面積
\(\kappa_i \) : キーポイントごとに設定される定数
\(v_i \) : visibiityラベル\((0, 1, 2)\)
\(\delta(v_i>0)\) : \(v_i>0\)ならば\(1\), それ以外なら\(0\)となる関数

OKSは様々な方が解説されているものの、定数κについて詳しく触れられているものは少ないため、ここで軽く解説します。κはキーポイントごとに予め設定される値で、そのキーポイントのアノテーションがどれだけブレやすいのか、を表現しているものです。人体の「背中」や「臀部」などブレやすい場合は大きな値が与えられ、多少正解点からずれた点を検出結果としても高い評価値とします。逆に人体の「目」のような場合は小さな値が与えられ、少しのズレで評価値がすぐ減衰するようになります。COCO datasetでは複数人により同じ画像をアノテーションし、その結果から算出した値をκとして用いています。

したがって、COCOと異なる独自データセットで、画像ごとのアノテーションが一つのみの場合には妥当な定数κを定めることは難しいです。ただ、平均適合率はあくまでもそのデータセット内の相対的な精度を表すだけであるため、κはそれほど厳密な値でなくとも現実には問題ないというのが筆者の考えです。ただ、PCKなどの他の指標の方が独自データセットには向いているかもしれません。

非人体キーポイント検出の具体例

ここまでデータの準備からモデルの学習・評価までを説明してきました。次に、具体的に非人体へのキーポイント検出を行った例の一部ご紹介していきます。

データセットとキーポイント定義

今回は現実の業務でもありうる”動画のみ取得できる”状況を想定し、「RoboTurk」というスタンフォード大が公開しているロボットアームの操作データセットを使用しました。本来は強化学習等のタスクのために使われるものですが、今回はデータセットに同梱されているロボットアームの動作のRGB動画のみを使用しました。

キーポイントの定義は図1の通り設定しました。筆者はロボットアームについては全くの初心者であるため、適切な定義ではないかもしれませんがご容赦ください。

アノテーションについては90秒ほどの動画を2,697枚の静止画に分解し、このうちロボットアームが映っている2,564枚にアノテーションを行いました。またテストデータとして、アノテーションしていない30秒ほどの動画より分解した926枚の静止画を用いました。

図1 今回設定したキーポイント定義

モデルの学習

モデルについては前回コラムで紹介したもののうちMask R-CNNとHigherHRNetの2種類を試しました。実装については、前者は著者公式実装の流れを汲むDetectron2、後者は著者公式実装を用いています。

Detectron2はFacebook AI製であり、Mask R-CNNのみならず多数の画像認識モデルを切り替えて使えるシステムであることから、設定ファイルを適切に設定するのみで利用できます。一方でHigherHRNetは前述の通り研究用データセットに特化している実装となっており、容易に独自データセットには適用できない実装となっています。そのため入力データセットに対応するための拡張や推論画像の出力機能などに手を加えています。

学習にはアノテーションした画像中80%の2,052枚を使用し、残りは定量評価用としました。NVIDIA T4×2の環境で100エポックほど学習したところ、いずれのモデルも約4時間の学習時間となりました。独自データセットを使っていることもあり、細かな学習パラメータやモデルの定量評価結果については割愛させて頂きます。

推論結果

図2に推論結果を示します。図の左列がMask R-CNNによる出力結果、右列がHigherHRNetによる出力結果です。Mask R-CNNの場合はモデルの仕組み上物体検出も同時に行われるため、物体検出結果も表示しています。検出閾値のチューニング次第で改善の余地がありますが、主観的な評価をすると全体的にMask R-CNNは比較的検出誤りが目立ち、HigherHRNetは検出された結果はかなり妥当性が高いものの、検出漏れが多少目立つという結果になりました。

図2 Mask R-CNN(左)とHigherHRNet(右)による出力結果の一例

まとめ

このコラムではあまり応用例が公開されていない、非人体キーポイント検出について、最新モデルへの適用実例とともに紹介してきました。キーポイント検出の理論的な面だけを見ると人体と非人体では違いはほとんどないものの、いざ実際にデータセット作成から推論までを行ってみると様々な障壁にぶつかります。そのため、人体以上にスモールスタートによるノウハウ構築が重要になるはずです。

コラム執筆者

機械学習エンジニア 濱本 雅史

筑波大学大学院 システム情報工学研究科 博士後期課程修了。博士(工学)。在学中にデータマイニング・テキストマイニングの研究に従事。2008年よりエンジニアとして自然言語処理の研究開発を6年半経験。2015年よりBPM/EAIミドルウェアの製品導入コンサルタントを3年半経験。2018年10月よりLaboro.AIに参画。日本データベース学会 正会員。

その他の執筆コラム

“木を見て森を見る”ように。「キーポイント検出」を解説

カスタムAIの導入に関する
ご相談はこちらから

お名前(必須)
御社名(必須)
部署名(必須)
役職名(任意)
メールアドレス(必須)
電話番号(任意)
件名(必須)
本文(必須)

(プライバシーポリシーはこちら