機械学習は、「学習」と「テスト」の2つのフェーズに分けて行います。
ここまではKinectの人物姿勢推定手法のうち「テスト」時の動作を見てきました。これ以降の後半では、「学習」時にどのような処理を行っているのかを紹介していきます。まずは、その説明に入るまえに、準備として「機械学習における学習」の一般的な手順を「人検出器」を通して紹介します。これにより、Kinectでのパーツ識別器(学習)の仕組みが理解しやすくなると思います。
人検出器の学習の例を通して学ぶ、教師あり学習のイメージ
Kinectの姿勢推定で用いられているRandom Decision Forestsのような、教師あり学習によるパターン識別器では、テストを行うまえに、モデルのパラメータを計算するための「学習」という計算をまず行います。入力ベクトルと出力の変数の関係性を、自分の目的に沿った各種の「モデル」に学習しておくことで、テスト時に新しい入力ベクトルが入って来た場合に、精度よく結果を推定するという手順を踏みます。例えば、以前に紹介した「人検出器」をSupport Vector Machine(SVM:サポートベクターマシーン)というモデルを通して、典型的な学習の様子を具体的に見てみましょう。
約10年前に提案された、SVMを用いた人検出器の手法では、入力ベクトルにはHOG(Histogram-of-Oriented Gradients)特徴量という値を、固定サイズの窓領域画像(例えば64×128ピクセル)から計算し、出力としては「人である(ラベルの値は1)」「人ではない(ラベルの値0)」という2クラスの識別を行うための離散的なラベルを仮定します。学習データには、千枚から数千枚程度の画像(人の画像と人ではない画像)を、対応するラベルの値(1 もしくは0)とセットで用意しておきます。基本的には、手作業でラベルの値をつけてラベルを用意していきます。こうして作成された、入力ベクトルを作るための画像データとそのラベルの値のセットの集合を、機械学習では「データセット」と呼びます。そして、ラベルを付けて人部分の画像を切り出す事で作成したデータセットを用いてSupport Vector Machineの学習を行うと、Support Vector Machineのパラメータが自動的に算出されます(※各識別器には、パラメータを学習するためのアルゴリズムがあらかじめ用意されていて、それを実行することになります)。
SVMの学習が終わると、晴れてその学習済みのSVMを用いてテストを行うことができるようになります。テスト時には、特定の窓領域が人領域であるかどうかを、その領域の画像からHOG特徴量を計算してSupport Vector Machineに入力するとラベルの値が1もしくは0で出力されて、自動的に人かどうかを識別することができるようになります(コンピュータビジョンにおける機械学習モデルの実践的なプログラミング方法の解説や、機械学習を応用した最新の研究例の紹介は、拙ブログのメルマガ別館でも取り上げています)。
機械学習全般において言える話ですが、「テスト」時には、学習済みのモデルを用いて、新しい入力に対してパターン認識を用いることで、「学習データの分布に最も適した(誤り認識の少ない)パターン認識」が実現できるという仕組みになっています。つまり、モデルが識別を行いたい入力ベクトルのパターンを、学習データでなるべく多くをカバーしていればいるほど、推定で失敗をしない、精度の良いモデルを学習さえることができます。これは裏返すと、テストの時の画像のパターンをうまく捉えていない学習データでモデルを学習させた場合、うまく意図した出力を得る事ができません。それでは機械学習の一般論の紹介により準備ができたところで、ここからはKinectの場合の学習の手順を見て行きましょう。
林 昌希(はやし まさき)
慶應義塾大学大学院 理工学研究科、博士課程。
動画からのチームスポーツ映像解析プロジェクトにおいて、選手の姿勢の推定、およびその姿勢情報を用いた選手の行動認識の研究に取り組み中。人の振る舞いや属性を理解する「ヒューマンセンシング技術」全般が専門。
有料メルマガ「DERiVE メルマガ 別館」では、コンピュータビジョンの初~中級者のエンジニア向けへの情報を発信中。Point Cloud Libraryについてのセミナーも行うなど、コンピュータビジョン技術の普及やコミュニティ拡大に取り組んでいる。
翻訳書に「コンピュータビジョン アルゴリズムと応用 (3章前半担当)」。