Random Decision Forestsによるパーツの識別

Microsoftの姿勢推定手法の説明にもどります。「Random Decision Forests」により対象の人の各画素がどのパーツに属するかを識別した時点では、まだノイズ(誤ったパーツ番号に識別された画素)が多い状態です。そこで、各パーツの境界を綺麗に区切って同一パーツにラベル付けされた画素を綺麗にグループ化するために、「クラスタリング」を行います。このクラスタリング処理により、各パーツの範囲が綺麗にグループ化され、その中心座標も求まります。この中心座標が各パーツの3D位置という出力となります。

最後の処理として、各フレームでのパーツの中心座標群に、骨格モデルにより「人間のボーンモデル」の関節配置の拘束を満たすようにモデルあてはめを行い、時系列的に追跡を行って滑らかな座標値にすることで、各パーツの最終的な中心位置、すなわち姿勢推定結果を出力します。人間のパーツのスケルトンモデルの追跡に相当しているので、この一連の処理を「スケルトントラッキング」と呼びます。(※コンピュータサイエンスでは、ある対象の値の後ろに物体の動きや変動のモデルを仮定し予測し、その予測値の正しさを観測値で確かめて、予測値と観測値を両方考慮した最終的な値を時系列的に更新していく処理を「追跡(トラッキング)」と呼びます。例:「人物追跡」など)。

KinectはRandom Decision Forestsの入力として用いる特徴量として「距離画像上の対象画素の深度値と、その座標から学習時にランダムに決定したオフセットだけ離れた画素の深度値の差」という、距離画像中の2点の画素値(=距離画像なので距離値)の差を取るだけの、非常に計算コストが低い特徴量が用いられています。Random Decision Forests内の決定木の各ノードには、この特徴量を用いてどちらのノードに向かって降りるかを判定する分割関数がそれぞれ配置されています。学習時に(識別性能が最もよくなるように)ランダムに決まったオフセット値が各ノードで個別に決定される仕組みになっており、テスト時には各ノードで2方向のどちら側に進むかの分岐を木の最上ノードから順番に数回だけ判定します。つまりは、決定木の深さ分だけ、各深さレベルで分割関数により分岐が起こり、木の一番下のリーフノードに達するまでその分岐判定が行われ、リーフノードに学習時に割当てられてある答えのクラスラベル分布(どのパーツの確率であるのが高いかの確率分布)が推定されるという流れです(次回に説明する「学習」において、大量の学習データから、各分割関数のオフセットがランダムに決定(学習)されます)。古いタイプの識別器だと画像全体の値を特徴量として与える必要があるのに対して、Random Decision Forestsでは、学習時に適応的に決定した少数部分の特徴だけをランダムに(分岐関数の降り方を変えて)用いることで、高い識別精度を達成できるで、リアルタイム処理を目指すような動画処理には非常に利点が出ることとなります。

このあとさらに、N個の決定木でそれぞれどの確率分布を推定し、その平均の確率分布で一番確率が高かったクラスを、最終的な出力クラスとして出力します。ここで、各決定木の処理はお互いに独立した処理なので「並列化」が可能であり、実際Kinectではこの処理が並列処理化されているそうです。こうしてRandom Decision Forestsにより、非常に計算コストの低くてかつ精度の高いパーツ識別計算を行うことができ、リアルタイム姿勢推定の実現が達成されています。

林 昌希(はやし まさき)

慶應義塾大学大学院 理工学研究科、博士課程。
動画からのチームスポーツ映像解析プロジェクトにおいて、選手の姿勢の推定、およびその姿勢情報を用いた選手の行動認識の研究に取り組み中。人の振る舞いや属性を理解する「ヒューマンセンシング技術」全般が専門。

有料メルマガ「DERiVE メルマガ 別館」では、コンピュータビジョンの初~中級者のエンジニア向けへの情報を発信中。Point Cloud Libraryについてのセミナーも行うなど、コンピュータビジョン技術の普及やコミュニティ拡大に取り組んでいる。

翻訳書に「コンピュータビジョン アルゴリズムと応用 (3章前半担当)」。