深層学習を用いたコンピュータビジョン
技術とスマートショップの実現
AIシステム部 AI研究開発グループ
西野 剛平 李 天琦
AGENDA
• 前半 (李)
– コンピュータビジョンの技術紹介
– 姿勢推定の技術解説
• 後半 (西野)
– スマートショッププロジェクトの取り組み
– 姿勢推定技術の応用
1
自己紹介
• 名前:李 天琦 (り てんき)
• Twitter: @Leetenki
• Facebook: Leetenki
• 経歴:
– ~2016年3月 : 深層強化学習の研究
– 2016年4月~ : DeNA 入社
– 2016年6月~ : ゲーム事業本部 (サーバ開発)
– 2016年10月~: AIシステム部 (コンピュータビジョン研究)
2
学生時代
• 深層強化学習の研究
• 得意言語:WebGL
• 卒論:深層強化学習を用いた自動運転シミュレータ
3
コンピュータビジョン
コンピュータビジョン
• コンピュータに視覚能力を与える研究分野
• 画像処理技術全般
– 画像分類
– 物体検出
– 物体トラッキング
– 行動認識
– 超解像
– 画風変換
– 画像生成
– etc…
5
画像分類
• 画像全体から映っているものの種類(ラベル)を推測する
• ILSVRC2015以降、洗練された人間の視覚精度を超越
6
Cat : 99.2%
Tiger : 0.79%
Dog : 0.01%
物体検出
• 画像に映った複数の物体を検出
• 種類だけでなく物体の位置と大きさまで特定する
• 自動運転やロボットの分野で応用
7
セグメンテーション
8
• 画像をピクセル単位でグルーピング
• ピクセルレベルでラベル付けを行う
• 自動運転分野でリアルタイムセグメンテーションが使われる
姿勢推定
9
• 画像に映っている人の基幹点及びポーズを推定
• 身体全体だけでなく、顔な手の細かい基幹点も推定可能
• 2Dから3Dポーズに変換して3Dモデル再構成
トラッキング
10
• 一連のシーンの中で同一物体を追跡し続ける
• 物体検出 + 画像間差分
• 防犯用途、自動運転等で使われる
超解像
11
• 解像度の低い画像から解像度の高い画像への復元
• ハイビジョンテレビ等の解像度補完用途に使われる
引用2 [Christian Ledig, et al., 2016]
画風変換
12
• 画像のコンテンツ(映っている物体等)をそのままに画風のみを変換
• アーティストの画風を再現したり、新しいデザインを生み出せる
画像生成
13
• GAN (Generative Adversarial Networks)
• 画像群の表現空間を学習して、全く新しい画像を生成する
引用3 [Tero Karras FI, 2017]
Deep Learning
Deep Learning
15
• 人間の脳細胞の仕組みをニューロンと呼ばれる数値ユニットで表現
• 数値ユニット間の線形結合及び活性化関数で神経伝達の仕組みを再現
Σ
・
・
・
a1
a2
an
w1
w2
wn
b
z aout
Deep Learning
16
• 数値ユニットの数を増やし、多層化する事で表現力を向上
• 複雑な神経伝達を再現
ai
wij
Σ a
j wjk
Σ ak
Deep Learning
17
• 計算結果が不適切だった場合は誤差逆伝播&勾配法でエラー修正
• 次回から間違わないようネットワークを最適化
ai
wij
Σ a
j wjk
Σ ak
E
∂k
∂j
Convolutional Neural Networks
18
• Neural Networkの仕組みをコンピュータビジョンに応用したもの
• 画像の各ピクセルをそのままネットワークに入力
引用4 [Kunihiko Fukushima, et al., 1980]
Convolutional Neural Networks
19
• 画像の局所的な周波数を抽出する畳込み層 (単純型細胞)
• 画像の位置ずれを吸収するプーリング層 (複雑型細胞)
引用4 [Kunihiko Fukushima, et al., 1980]
Convolutional Neural Networks
20
• 画像の特徴抽出を学習
• Neocognitron = 脳の視覚野に関する知見を元に考案
引用4 [Kunihiko Fukushima, et al., 1980]
VGGNet
21
• 代表的な画像分類用CNNモデル
• 2014年にILSVRCで2位入賞
• 3 × 3 の畳込み層とpooling層のみで構成されたシンプルなモデル
• 今でも多くのCVタスクの特徴抽出器として使用される
引用5 [Zhe Cao, et al., 2016]
姿勢推定
(Pose Estimation)
Realtime Multi-Person Pose Estimation
23
• CVPR2017でCMUが発表した論文
• arXiv:1611.08050[cs.CV]
• 画像に映った複数人物をリアルタイムかつ高精度に姿勢推定する技術
Realtime Multi-Person Pose Estimation
24
• OpenPose (CMUが公開しているCaffe実装のライブラリ)
• https://github.com/CMU-Perceptual-Computing-Lab/openpose
引用5 [Zhe Cao, et al., 2016]
Realtime Multi-Person Pose Estimation
25
• 畳込み層とプーリング層のみで構成
• VGG19を特徴抽出器として利用
• Multi-branch構造のモデル
引用5 [Zhe Cao, et al., 2016]
Realtime Multi-Person Pose Estimation
26
• Confidence-Maps
• 身体のkey pointをheatmap形式で予測する
• key pointごとに1チャンネルの出力
Realtime Multi-Person Pose Estimation
27
• Part Affinity Fields
• key point同士の繋がりうる可能性を示すベクトルマップ
• key point同士のconnnectionごとにxとyの2チャンネル
Realtime Multi-Person Pose Estimation
28
• Multi-Stage構造
• StageごとにFeature mapsとConfidence mapsとPAFsを結合
• ステージが進むごとに精度が上がる
引用5 [Zhe Cao, et al., 2016]
Realtime Multi-Person Pose Estimation
29
• Chainer実装のオープンソースライブラリ
• https://github.com/DeNA/chainer_Realtime_Multi-Person_Pose_Estimation
自己紹介
• 名前
– 西野 剛平
• 経歴
– プリンタメーカーにて研究開発
• 不動産間取り図の校正
• 文章構成やレイアウトの認識
– 起業
• モバイルゲーム開発
– DeNA入社
• 大型IPのゲームタイトル立ち上げ
• 2013年 新卒エンジニアの研修担当
• Unityの内製タイトル「戦魂」のリードエンジニア
• 2016年10月 〜 定点カメラ映像の認識など
30
スマートショッププロジェクト
スマートショッププロジェクトとは
32
• 一人一人のお客様に合わせた接客
• リアルタイムの商品推奨
同一人物の再認識技術の概要
33
• スマートショップ実現に向け
• 店内でのお客様の状況を把握する技術の確立は不可欠
• 第一ステップとして、定点カメラからの映像を元に、姿勢推定技術を
活用した同一人物の再認識技術の開発を行う
• 技術の概要
• 人物の検出と検出された人物の同定を繰り返し行う
• 人物の検出タスク
• 姿勢推定技術を利用して高精度とロバスト性の両立
• 人物の同定タスク
• 姿勢推定から得られた情報を使って行う
弊社sakuraCafeのリアルタイムデモ映像
34
トラッキングにおける問題点
35
• 粒子フィルタをベースとした一般的なトラッキング手法
• フレーム間の画像変化を基に追跡
• フレーム間隔が長い(フレームレートが小さい)場合、フレーム間の画像変化量が大きくなり、追跡は極め
て困難
トラッキングにおける問題点
36
• 正確な検出器を前提として考えた場合
• ある時刻tで検出された人と次のフレーム時刻t+1で検出された人の対応付けを行う事で同一人物判定が
できる。
• 例えば、Intersection over Union の結果を利用して、各フレームで検出された人の矩形同士、各々
の組みでIoUを求め、その値が大きいもの同士を同一の人物とみなす。
トラッキングにおける問題点
37
• フレーム間での人の移動量が大きい場合には、IoUの値が0となってしまい追
跡が破綻
• 低いフレームレートやオクルージョンに対してロバストな設計が要求される
全体の構成
38
• 本手法は下記の要素で構成
1. フレーム画像から人物の器官点の検出
2. 1つ前のフレームで検出された人物と今回検出された人物の同じ器
官点同士で色の照合
3. 1つ前のフレームで検出された人物と今回検出された人物の位置
の照合
4. 2と3の結果から総合的に判断し、人物の同定
• 1から4の手順を動画の各フレームに対して逐次行っていくことで、連続的
に同一人物の再認識を実現しています。
人物の器官点の検出
39
• フレーム画像中から人物、および器官点の検出する
• 器官点は複数人数の器官点を同時に検出
• 検出された器官点はどの人物のどの体の部分に対応しているかを認識
右の写真は検出された、鼻、首、左肩、左
手、右肩、右手、左腰、左足、右腰、右足の
10個の器官点になります。
色差の計測
40
• 各器官点の色を取得
• 各器官点位置を中心とした局所領域からピクセルのRGB値を取得
• L*a*b*色空間に変換後、CIE2000で色差を計測
色差を類似度に変換
41
• 色差を色の類似度として扱いたい
• 色差dを1.0 〜 0 の定義域に射影する関数を導入し、それを類似度とする。
• シグモイド関数を使って、パラメータ値はおおよそ下記の要件に合うように調整
色差と類似度の関係
色の類似度の計算
42
• 色の類似度計算の具体的な例
• 時刻tのフレームでPersonAという人を検出、時刻t+1でPersonBという人を検出した場合
色差の表
位置の尤度
43
• 追跡中の人物は最初の検出フレームからその移動の軌跡をすべて保持して
いる。
• したがって、これまでの移動情報を基にその人物が次のフレームにいる
位置をガウス分布でモデル化し、これを尤度関数とする。
• 実際に次のフレームで人が検出されたら、その位置情報をそれぞれの尤度
関数にあてはめることにより、尤もらしさを求める事ができます。
• 実際のデモ映像では人に対して相対的にブレが少ない首の器官点位置を利
用しています。
位置の尤度
44
• 追跡中の3人の軌跡情報を基にガウス分布でモデル化したイメージ図
• 次のフレームでの各人の予測位置は赤色で書かれている部分で、これまでの移動量
が大きいほど次フレームでの予測位置は遠くに、分散は大きくなります。
尤度イメージ図
総合尤度の算出
45
• 色の類似度、および位置の尤度から総合尤度を計算し、その値から同一人物の判定を行う。
• 例えば、前のフレームでPersonAとPersonBの2人を追跡しており、現在のフレームで
PersonCとPersonDとPersonEの3人を検出した場合について考えてみる。
尤度イメージ図
総合尤度の算出
46
• 前のフレームと現在のフレームで検出された全ての人の組み合わせに対し、色の類似度および位置の尤度を計
算し、その積を総合尤度とします。この例では下記のようになります。
• これを総合尤度の高い順で並べ替え、ある閾値以下(ここでは0.02を利用)のものを除外すると下記のようになり
ます。
表
総合尤度の算出
47
• 上から順に人物同定していきます。「前フレーム」欄か「現在のフレーム」欄のどちらかに既出の人物が
含まれる場合、その行は無視します。これを最後の行まで行い最終的な結論を出します。
• この例においては下記のような結果となる。
• 上記の作業を動画の各フレームに対して繰り返し行っていく事で、連続的な同一人物の再認識を実現
デジタルサイネージ
48
• 弊社内SakuraCafeにデジタルイネージを設置し、リアルタイムで姿勢推定および人物
同定の技術を体験できる
姿勢推定技術の応用
3D姿勢推定
50
• 2Dの姿勢推定の精度が高くなった
• 自分自身のオクルージョンがあるようなポーズでも正確な予測が可能と
なった事
• 2D姿勢推定結果から3Dの姿勢推定を行う研究も活発化
• 単一・単眼のRGB画像から人の3D姿勢推定が可能
• 3DモーションキャプチャなどのBigデータをすぐに活用可能
• 今年のCVトップカンファレンスで発表された2つを再現実装
• 3D Human Pose Estimation = 2D Pose Estimation + Matching CVPR ’17
• A simple yet effective baseline for 3d human pose estimation ICCV ’17
3D姿勢推定1
51
• 3D Human Pose Estimation = 2D Pose Estimation + Matching
• 入力画像を与える
• 2D姿勢推定
• 3Dライブラリから検索
• 検索結果を歪ませる
• 3Dポーズ推定
引用6 [Ching-Hang Chen et al., In CVPR, 2017]
3D姿勢推定1
52
• 3D姿勢Xが2D姿勢xを与えた画像Iと条件的に独立していると仮定し、ノンパラメトリック
最近傍法でP(X|x)をモデル化
• 検索結果のXiをそのまま使わず、より一致させるために標本Xiを歪ませる。
• 3D標本座標Xiから奥行きの深度座標を、2Dの姿勢情報から(x、y)座標を使用
歪ませた例
引用6 [Ching-Hang Chen et al., In CVPR, 2017]
3D姿勢推定2
53
• A simple yet effective baseline for 3d human pose estimation
• 単眼・単一のRGB画像から人の3D姿勢推定
• 2D姿勢情報を入力とし3D姿勢情報を出力とするニューラルネットを使ったRegression
タスク
• Residual コネクションやBatch normalizationやドロップアウトを駆使して、軽量ながらも
効率よく学習できるネットワークを追求
• ネットワーク構成
• 入力は16個の2次元の点、出力は16個の3次元の点、ロス関数は平均2乗誤差
• パラメータの数は400万 – 500万の間
図
引用7 [Julieta Martinez et al., In ICCV, 2017.]
実験結果
54
実験結果
55
• 3Dの姿勢推定結果を基に実際にアバターにあてはめてみる
• 3Dの姿勢推定された結果は、モデルと大きさが違ったり、各パーツのBoneの大きさの比率も違うため単
純に頂点をあてはめてもうまくはいかない。
• また、Boneの位置はわかるが、Joint部の回転角の情報までは取れていないので、正確に再現する事は
不可能。(一意にならない)
アバターとボーン
3D姿勢のアバター適用
56
3D姿勢のアバター適用
57
• 各Jointを木構造に捉えて、体の中心の腰をルート、手や足など端にある器官点をリーフと
して、ルートから順に回転角を求めて曲げていく。
• 回転角は人間の各Joint部分の可動域を考慮しながら、フォーワードキネマティクスの要領
でアバターにあてはめていく
アバターとボーン
3D姿勢推定のアプリケショーン
58
• アバターによるライブ配信
• 自分の好きなキャラクターをアバターとして配信するようなサービス。
• スマートショッププロジェクトで取得された姿勢情報を3D化
• 例えば、定点カメラの映像をパブリックに配信したいという事を考え
た場合、映っている人のプライバシー問題が発生してしまう。それを
防ぐため人の部分をアバターに置き換える。但し、適当にランダムに
アバター化するのではなく、できるだけその人を象徴したアバターに
置き換える。
ご静聴ありがとうございました
参考文献
60
• [1] Khurram Soomro and Amir Roshan Zamir. Action Recognition in Realistic Sports Videos, 2015
https://cs.stanford.edu/~amirz/index_files/Springer2015_action_chapter.pdf
• [2] Christian Ledig, et al. Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network, 2016
https://arxiv.org/abs/1609.04802
• [3] Tero Karras (Tero Karras FI). Progressive Growing of GANs for Improved Quality, Stability, and Variation. 2017.
https://arxiv.org/pdf/1710.10196.pdf
• [4] Kunihiko Fukushima, Neocognitron: A Self-organizing Neural Network Model for a Mechanism of Pattern
Recognition Unaffected by Shift in Position, 1980
http://www.cs.princeton.edu/courses/archive/spr08/cos598B/Readings/Fukushima1980.pdf
• [5] Zhe Cao, et al. Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields, 2016
https://arxiv.org/pdf/1611.08050.pdf
• [6] Ching-Hang Chen et al. 3D Human Pose Estimation = 2D Pose Estimation + Matching. In CVPR, 2017.
http://openaccess.thecvf.com/content_cvpr_2017/papers/Chen_3D_Human_Pose_CVPR_2017_paper.pdf
• [7] Julieta Martinez et al. A simple yet effective baseline for 3d human pose estimation. In ICCV, 2017.
http://openaccess.thecvf.com/content_ICCV_2017/papers/Martinez_A_Simple_yet_ICCV_2017_paper.pdf

深層学習を用いたコンピュータビジョン技術とスマートショップの実現

Editor's Notes

  • #3 今日のagendaですが、まず前半は、わたくし李のほうから、 最近のコンピュータビジョンの技術紹介、から その中でも私たちのチームでメインに使っている、Pose Estimationというコア技術の解説を行います。 後半は、私たちスマートショッププロジェクトの取組について、西野のほうから説明いたします。 よろしくお願いします。
  • #4 まずは自己紹介ですが、 私、李 てんきと言います。 DeNAに入社したのは2016年の4月で、まだ入社2年目の新人です。 元々学生時代は、深層強化学習の研究をしていたのですが、 DeNAに入ってから最初はゲーム事業部というところで、サーバ開発をしていました。 その後2016年6月から、AIシステム部のほうに異動しまして、いまはコンピュータビジョンまわりの研究開発をしています。よろしくお願いします。
  • #5 で、自分学生時代は深層強化学習を研究していましたが、 自分WebGLというグラフィカルプログラミング言語が非常に得意でして、 論文の時に、深層強化学習を用いた自動運転シミュレータというのを開発していましたが、 それもこちらのように、論文そのものよりも、こちらのシミュレータを、 WebGLを使っていかにかっこよく見せるかというところに、無駄に全力を注いておりました。
  • #6  では、本日のテーマであるコンピュータビジョンについて、ですが、 あまりコンピュータビジョンという言葉を聞きなれない方もいらっしゃるかと思いますので、簡単に説明させていただきます。
  • #7 まず、コンピュータビジョンというのは、簡単に言うと、 コンピュータに視覚能力を与える研究分野全般を指します。 ここに挙げてるような、 画像分類、物体検出、物体トラッキング、行動認識、超解像、画風変換、画像生成 といったような、画像処理技術全般をひっくるめて、コンピュータビジョンという風に定義しています。
  • #8 では、この各技術について、ざっと説明致します。 まず、画像分類について、 これは、もっとも有名な昔からある技術で、 ある1枚の画像が与えられた時に、その画像全体から、映っているものがなんであるかのラベルを推測する技術です。 こちら、画像分類の技術の精度というのは、実は、ILSVRCというImageNetと呼ばれる、世界的な技術コンテストにて、 2015年の時点で、既に洗練された人間の視覚の認識精度を超えた精度に達しています。
  • #9 で、次は物体検出の技術について、 こちらは、画像に映っているものの種類だけでなく、その位置や大きさまで含めて特定する技術になります。 こちらの例のように、映像内に映っているバナナやオレンジ、コップやコンピュータといった物体の位置や大きさまで、細かく検出できている事が確認できます。 で、こちらの物体検出の技術は、後ほどの午後のセッションでも詳細が紹介されますが、 自動運転やオートモーティブの文脈で非常によく応用されている技術で、我々DeNAのほうでも、取り組んでいます。
  • #10 次に、セグメンテーションの技術について、 これは、先程の物体検出技術とは異なるアプローチで、 画像内にある物体を、ピクセル単位でグルーピングを行う技術です。 すなわち、各ピクセルについて、ラベル付けを行っていく技術になります。 こちらも、自動運転の分野で、リアルタイムなセグメンテーション技術がよく応用がなされています。
  • #11 次に、姿勢推定技術について、 こちらは我々スマートショッププロジェクトで、重点的に扱っている技術の一つで、 画像内に映っている人の目や、鼻、首、肩といった、細かい基幹点や、実際にとっているポーズ等を細かく推定する技術です。 で、これの派生で、身体のポーズだけでなく、顔や、手の基幹点といった、派生技術もあります。 更に、最近では研究が進んで、2Dのポーズだけでなく、そこから3Dのモデルを再構築する技術も登場していて、 これについては、後ほど後半で詳しく説明があります。
  • #12 次に、トラッキング技術について、 これは、ある一連のシーンが与えられた前提で、その動画内の各フレームにおいて、同一の物体や人物を追跡し続けるという技術になります。 この構成要素としては、まず、1枚1枚の画像に対して、物体検出を行います。更に、検出できた物体や人物を、画像間の差分を利用して追跡し続ける というのが一般的な手法になります。 こちらのトラッキングの技術も、主に防犯用途や自動運転の分野で使われています。
  • #13 次に、超解像技術について、 こちらは、ある解像度の低い画像が与えられた時に、 そこから、その画像が本来あるべき高い解像度の状態を、推測して、復元する技術になります。 ここの例のように、左が復元前の画像で、これを超解像した後が右のような画像になります。 こちらの超解像の技術は、主に、ハイビジョンテレビ等の解像度補完用途に使われます。
  • #14 はい、次は画風変換の技術です。 こちらは、少し特殊な技術になっていて、 画像に映っているもの等、コンテンツをそのままの状態で、 画風、いわゆる画像のスタイルのみを変換する技術です。 こちらの例にあるように、アーティストの画風を再現したり、組み合わせる事で、全く新しいデザインを生み出す事が可能な、 クリエイティブな技術になります。
  • #15 で、最後は画像生成ですね、 こちらは、ここ2年で凄く話題のGANという技術で、Generative Adversarial Networksと呼ばれる、生成技術です。 ある教師のない画像群が与えられた時に、GANというは、その画像群の表現空間というのを学習して、その表現空間にマッチした、全く新しい画像というのを生成する事ができます。 ここの例では、人の顔の表現空間というの学習して、現実には実在しないような、全く新しい顔画像というのをここで生成しています。 非常にリアルで、人が見ても見分けのつかないくらい、リアルの画像が生成されている事が確認できるんじゃないかなと思います。
  • #16 はい、でここまでいくつか代表的なコンピュータビジョンの技術を紹介してきましたが、 実は、その全てに、Deep LearningのAI技術が使われています。 Deep Learningというのをここで、簡単におさらいしておきますと、
  • #17 はい、Deep Learningというのは、人間の脳細胞の仕組みを数値ユニットで表現したものです。 脳の細胞をこのような、1個1個の数値ユニットで表現をして、数値ユニット間の、線形結合及び活性化関数によって、 脳の神経伝達の仕組みを再現しています。
  • #18 で、この数値ユニットの数を増加させて、ネットワークを多層化する事によって、 人間の脳と同じように、複雑な神経伝達のの仕組みというのを再現する事ができます。
  • #19 で、人間の脳というのは、なにか 間違った認識をした時に、 次回から間違わないように、脳の神経結合を組み替えて、環境に最適化していく機能が備わっていますが、 Deep Learningのニューラルネットワークでも、何か間違った計算をした時に、誤差逆伝播 と 勾配法の仕組みによって、ネットワークを最適化する事ができます。 これによって、人間の脳と同じように、新しい事象を効率良く学習していく事が可能になります。
  • #20 で、このDeep Neural Networkの仕組みを、コンピュータビジョンに特化させたものが、いわゆるCNN Convolutional Neural Netwokrsというものになります。 このCNNでは、画像の各ピクセルの値をそのままネットワークの入力として利用します。
  • #21 で、入力された各ピクセルに対して、局所的な空間的な周波数を抽出する畳み込み層、 及び、画像のいちズレを吸収するためにプーリング層を交互に重ねていく事によって、
  • #22 画像の特徴抽出というのを自動で学習する事ができます。 平たく言えば、ある猫の画像が入力された時に、 猫らしさとは何か、という事を自動で学習できるようになります。 ちなみに、この畳込み処理及びプーリングの仕組みというのは、もともと1980年に、ネオコグニトロンという、脳の視覚野に関する研究論文が発表されていて、 その知見をもとに考案されたものです。
  • #23 で、このConvolutional NeuralNetの代表的なモデルとして、VGGNetというモデルがあります。 このVGGというのは、2014年の時点での、ILSVRC、すなわちImageNetコンテストにおいて、2位の成績を収めたモデルです。 その特徴としては、3×3の非常に小さい畳み込みそうと、プーリング層のみで構成されたシンプルなモデルです。 そのシンプルさゆえに、今でも多くのコンピュータビジョンのタスクで、ベースネットワークの特徴抽出器として利用されています。
  • #24 はい、ここまで、コンピュータビジョンやDeep Learningの簡単な解説を行ってきましたが、 ここからは、私たちのスマートショッププロジェクトで、メインに研究開発を行っている、 姿勢推定、ポーズエスティメーション技術について、解説していこうと思います。
  • #25 姿勢推定技術が話題になりはじめたのは、今からやく1年前で、 CVPR2017という国際的なカンファレンス、カーネギメロン大学が発表して、Realtime Multi Person Pose Estimationという論文が元になっています。 こちらの論文では、画像や映像に複数の人物が映っている状況においても、その各々のポーズ情報を、リアルタイムで、かつ高精度に検出する事ができる というのを提唱しています。
  • #26 はい、でカーネギメロン大学自体も、OpenPoseという、C言語で書かれたライブラリ実装を公開していて、 こちら、アカデミック用途であれば、オープソースで利用可能なライセンスとなっています。 で、こちらのモデルについて、Chainerバージョンというのを、我々DeNAのほうでも再現実装をしておりますので、 その解説を簡単にさせて頂きます。
  • #27 まずはそのモデル構造についてですが、非常にシンプルです。 余計なレイヤーが一切なく、先程説明したconvolution、いわゆる畳込み層と、プーリング層のみで構成されたシンプルなネットワークです。 で、ネットワークの前半部分では、先程説明したVGGNetの19層のバージョンである、VGG19というのを、特徴抽出器に利用しています。 で、このVGG19によって抽出された特徴を、後段でブランチ分岐を行って、2つのブランチで、それぞれで別々にタスク処理を行います。
  • #28 で、2つのブランチを別々に見ていきますと、 1つのブランチが、confidence mapを予測するネットワークになります。 これは何かというと、 身体の基幹点、キーポイントというのを、heatmap形式で予測するものです。 Key pointごとに、1チャンネルの出力を行って、keypointの数ごとに、1枚のheatmapを予測する仕組みになります。 CMUオリジナルのモデルは人の身体のkey pointを18点と定義しているので、 それぞれのkey pointごとに、1枚のheatmapを予測するモデルです。 例えば、肩の場所のみを予測するheatmap、首の場所のみを予測するheatmap、などなどです。
  • #29 はい、でもう一方のブランチというのは、Part Affinity Fieldという、keypoint同士が繋がりうる可能性を示すベクトルマップを予測するネットワークです。 Keypoint同士のconnectionごとに、xとyの2チャンネルを持っていて、すなわちconnectionの数×2枚のheatmapを出力します。 例えば、肩からひじへ向かうベクトルや、ひじから、手首に向かうベクトルといった、ベクトルマップを予測します。
  • #30 で、もう一度モデル図を出しますと、 最初にVGGNetで特徴抽出を行ったあと、 2つのブランチに分けて処理をします、で1つはconfidencemapで、もう一つはPart Affinity Fieldを予測する構造です。 で、ここの2つのブランチで予測した結果というのを、一度結合して、更に、最初のVGGNetの部分で抽出した特徴マップというのも全部がっちゃんこして、 全てが結合された状態で、ネットワークの先に入力しています。 でネットワークの先というのも、全く同じように2つのブランチに分かれていて、Confidence mapとPart Affinity Fieldsをそれぞれ予測するネットワークになっています。 この同じような、分岐処理の繰り返すの事を、ここではstageという風に定義していて、stageが進むごとに、予測精度が精錬されていく、という仕組みですね。 なので、Stage1よりはstage2、stage2よりはstage3というふうに、ステージが進むごとに精度が上がっていく仕組みなります。
  • #31 以上が、姿勢推定技術の仕組みの簡単な解説でしたが、 詳細につきましては、Chainer版の実装をオープンソースで公開していますので、 ソースコードと解説両方ともこちらに載せていますので、 みなさんもし興味がありましたら、ぜひこちらを見てみて、良かったら使って頂けると幸いです。
  • #33 それでは、スマートショッププロジェクトに関して説明させて頂きます。
  • #34 スマートショッププロジェクトとは、 インターネット上にしかないようなサービスを、リアルな店舗でも提供出来るようにする事を、ミッションとしたプロジェクトになります。 インターネット上のサービスでは、 ユーザーに合わせた最適なコンテンツの配信や、ログ情報から行動を解析し、迷わないように導線を配置するなど、これらは当然のように行われています。 ですが、リアルな店舗においては、このような最適化はまだほとんど行われていません。 私たちは、AI技術を活用することで、リアルな店舗においても、お客様の状況に合わせた接客、またはリアルタイムの商品推奨といった、今までにないショップ体験の提供ができないかを考え、将来のスマートショップの実現を見据えた研究開発を行っています。 このプロジェクトで利用しているAIの要素技術としては、人検出、人物トラッキング、年齢推定、性別推定などがあります。
  • #35 そのスマートショップ実現のためには、店内でのお客様の状況を把握する技術の確立は不可欠です。 私たちは、その第一ステップとして、定点カメラからの映像を元に、姿勢推定技術を活用した、同一人物の再認識技術の開発を行いました。 技術の概要ですが、人物の検出と検出された人物の同定を繰り返し行っていくというのが、大枠の流れとなっています。 この人物の検出部分に姿勢推定技術を利用しているのは、高精度であるというのが一番の理由ですが、その他に将来性を考慮したいという意図もあります。 一般的な検出器の場合だと、人の領域を示す矩形情報が得られるだけです。 ですが、姿勢推定を検出器として利用すれば、人の矩形情報だけでなく、体の各パーツを表す器官点情報も同時に取得できます。しかも、正確に取れます。 したがって、将来、機能の拡張や新しいタスクに対応する事を考える場合、この器官点は有益な情報となる可能性が高いと考えています。 事実、今回紹介する人物同定の技術においても、器官点情報を利用する事で、高精度でリアルタイムに同一人物の再認識を実現しています。
  • #36 こちらは弊社にあるsakuracafeの、リアルタイムデモ映像になります。 姿勢推定で検出した人物を矩形で囲っています。人の上に表示されている番号はその人物を識別するためのIDで、同じ番号の場合は同一人物と認識されています。 また、今回技術の詳細は紹介しませんが入店と退店のタイミングや、年齢および性別の推定もリアルタイムに行っています。 赤色の線が入店、青色の線が退店を表していて、顔が正面を向いた時に表示される矩形に、年齢と性別の推定値を表示しています。 このデモはAWSのP2.xlargeのインスタンス1台で、リアルタイムに処理しており、約1.7fps程となっています。 実サービスでは、運用時のコスト面も意識しなければいけないため、ある程度低いfpsでもきちんと動作する必要があります。 特にfpsが低くなるとトラッキングがうまく動かないケースが多くなるので、よく起こりやすい問題に関して説明します。
  • #37 例えば、粒子フィルタをベースとしたような一般的な物体追跡は、フレーム間の画像変化を基に追跡を行うため、 フレーム間隔が長い場合は、フレーム間の画像変化量が大きくなってしまい、追跡は極めて困難になってしまいます。
  • #38 また、正確な検出器を前提として考えた場合には、ある時刻tで検出された人と、次のフレーム時刻t+1で検出された人で対応付けを行う事で、同一人物判定ができます。 例えば、その場合、簡易に対応付けを実現する方法として、Intersection over Union (IoU) の結果を利用するというものが考えられます。 これは、各フレームで検出された人の矩形同士、各々の組みでIoUを求め、その値が大きいもの同士を同一の人物とします。 上の写真の例の場合は、aとcでIOUを求め、aとdでIOUを求め、大きい方が同一の人物であるとします。
  • #39 ただし、この場合もフレーム間での人の移動量が大きい場合には、IoUの値が0となってしまい追跡が破綻してしまいます。 実サービスを見据えた場合、運用コストの面からも、ある程度限られた計算リソースで実行を想定する必要があるので、 低いフレームレートやオクルージョンに対してロバストな設計が要求されます。 今回紹介する手法は、その点を特に意識していて、姿勢推定によって得られた器官点情報を上手く活用することで、そのような状況下においてもロバストに同一人物の再認識を行えるなるような手法になっています。
  • #40 まず、全体の構成を説明します。 1. フレーム画像から人物の器官点の検出 2. 1つ前のフレームで検出された人物と今回検出された人物の同じ器官点同士で色の照合 3. 1つ前のフレームで検出された人物と今回検出された人物の位置の照合 4. 2と3の結果から総合的に判断し、人物の同定 1から4の手順を動画の各フレームに対して逐次行っていくことで、連続的に同一人物の再認識を実現しています。
  • #41 最初の工程にあたる人物の器官点検出ですが、 まずは、姿勢推定技術を使って、フレーム画像の中から人物と器官点の検出を行います。 器官点は複数人数の器官点を同時に検出し、検出されたそれぞれの器官点はどの人物のどの体の部分に対応しているかが認識できている状態となります。 この写真は、鼻、首、左肩、左手、右肩、右手、左腰、左足、右腰、右足の10個の器官点が検出されている状態を表しています。
  • #42 次に、先ほど取得された各器官点の色を取得します。 器官点の色はその座標位置を中心とした(10x10や30x30pixelといった)局所領域からピクセルのRGB値を取得し、それをL*a*b*色空間に変換した後、CIE2000で色差を計測します。 色差の計測は、1つ前のフレームと今回のフレームの人物の同じ器官点同士での計測になります。 ちなみに、ここで利用しているCIE2000という色差に関しての補足になりますが、 この色差は値が大きいほど色の違いを大きく感じるという人間の感覚に基づいた数値となっています。 例えば、この2つの色をそれぞれRGBで単純にユークリッド距離計算すると同じになってしまいます。 ですが、実際には左側は単に暗くなっただけで、右側は色相自体が変わってしまっているので、色差は右側の方が大きくなるのが都合がよくなります。 CIE2000色差はこのような違いも、ちゃんと考慮された数値になります。
  • #43 次に、色差を扱いやすい形、色の類似度に変換します。 色差をdとした場合、その値を1.0 〜 0 の定義域に射影したいので、このような関数を導入し、それを類似度S(d)とします。 関数の横にあるグラフは、横軸が色差dで、縦軸が類似度S(d)になります。 このグラフからもわかる通り、関数S(d)を使う事で、すべての色差dは 1.0 〜 0の範囲に変換されます。 ちなみに、この関数自体はただのシグモイド関数で、係数αやバイアスΒの定数パラメータ値は、要件に合うように適当な値に調整しています。 実際には、  色差10の時は類似度88%  色差27.5の時は類似度50%  色差45の時は類似度12% としています。
  • #44 ここまで、色差の計算方法、およびそれを類似度に変換する式を説明しましたが、もう少し具体的に説明したいと思います。 時刻tのフレームでPersonAという人を検出、時刻t+1でPersonBという人を検出したと仮定し、これらに対し「色の類似度」を求める手順になります。 まず、各器官点毎にL*a*b*色空間に変換した後、CIE2000色差を計算し、類似度を求めます。 この表の例では、PersonAとPersonBの鼻の色差は8、類似度は92%。首の色差は17で、類似度63%となっています。 このようにして、各器官点毎の類似度が全て求まったら、それらの平均を取り、最終的にその値をPersonAとPersonBの「色の類似度」とします。 ちなみに、見切れや隠れなどにより検出されなかった器官点がどちらか一方にでもある場合は、類似度50%となるようにしています。 この表では、右肩、左腰、右足がそれに相当します。 (これは、その器官点を使用しない場合に比べ、器官点1つあたりの類似度への寄与率が高くなり過ぎないようにするための措置です。)
  • #45 次に位置に関する照合を行います。 このシステムでは、追跡中の人物は最初の検出フレームからその移動位置の軌跡をすべて保持しています。 したがって、これまでの移動情報からその人物が次のフレームにいる位置をガウス分布でモデル化する事ができます。 これを尤度関数として、実際に次のフレームで人が検出されたら、その位置情報をそれぞれの尤度関数にあてはめて、尤もらしさを求める事ができます。 ちなみに、実際のデモ映像では人に対して相対的にブレが少ない首の器官点位置を利用しています。
  • #46 追跡中の3人の軌跡情報を基にガウス分布でモデル化したイメージ図になります。 次のフレームでの各人の予測位置は赤色で書かれている部分で、これまでの移動量が大きいほど次フレームでの予測位置は遠くに、そして分散は大きくなります。
  • #47 最後に、これまでの工程で計算した色の類似度と、位置の尤度から、総合尤度を計算し、その値から同一人物の判定を行っていきます。 例えば、前のフレームでPersonAとPersonBの2人を追跡していて、現在のフレームでPersonCとPersonDとPersonEの3人を検出した場合について考えてみます。
  • #48 前のフレームと現在のフレームで検出された全ての人の組み合わせに対し、色の類似度および位置の尤度を計算し、その積を総合尤度とします。 この例では、前フレームで2人、現在フレームで3人検出されているので、6パターンの組み合わせができます。 これを総合尤度の高い順で並べ替えてから、ある閾値(ここでは0.02を使用していますが)、それ以下の組み合わせを除外します。 この例では、下3つの組み(灰色の部分)は尤度が低いため、除外対象となっています。
  • #49 次に、この表を上から順に人物同定していきます。 「前フレーム」欄か「現在のフレーム」欄のどちらかに既出の人物が含まれる場合、その行は無視します。これを最後の行まで行い最終的な結論を出します。 この例の場合は、上から同定していくので、まずPersonAとPersonDは同一人物となります。 次に、PersonBとPersonEも同一人物となり、 次の、PersonAとPersonEは既に紐づけられているので、飛ばします。 その下は、閾値より小いため、ここで同定作業が終了となります。 したがって、この例においては、 ・PersonAとPersonDは同一人物 ・PersonBとPersonEは同一人物 ・PersonCは新たに検出された人物 と結論づけられます。 この作業を、動画の各フレームに対して繰り返して行っていく事で、連続的な同一人物の再認識を実現しています。
  • #50 こちらの映像ですが、 現在、弊社内のSakuraCafeにデジタルイネージを設置しており、そこでリアルタイムの姿勢推定技術と人物同定の技術が体験できるようになっています。
  • #51 次に、姿勢推定技術の応用について説明したいと思います。
  • #52 前半の説明でも触れていましたが、2D姿勢推定の精度は一昨年あたりから飛躍的に高くなってきています。 特に、自分自身のオクルージョンがあるようなポーズに対しても正確な推定が可能となったのは大きな前進で、それにより2D姿勢推定結果の応用範囲も広がってきました。 特に最近は、2D姿勢推定結果から3Dの姿勢推定を行う研究も活発化しています。 その背景には、 ・単一・単眼のRGB画像だけから、姿勢推定が可能で、特殊なセンサーやデバイスなどは必要ない、という事や ・モーションキャプチャなどの普及により、市販の3Dのデータなども比較的簡単手に入りやすく、そのデータさえあれば、3D姿勢推定にすぐ利用できる。といった事があります。 今年のCVトップカンファレンスでも2D姿勢推定から3D姿勢推定を行うものがいくつか発表されており、そのうち2つの論文に関して、実際に再現実装を行なったので、この2つをご紹介したいと思います。
  • #53 まず、1つ目の 3D Human Pose Estimation = 2D Pose Estimation + Matching という論文ですが、 これは、名前の通りで、2Dの姿勢推定結果と検索によって、3Dの姿勢推定を行うといった構成になっています。 大枠の流れですが、まず、入力画像に対して2D姿勢推定を行います。 次に、その結果に近いものを、3Dの姿勢情報ライブラリの内から検索します。 最後に、その検索された結果を、より近づけるために、少し値を歪ませて、それを3Dポーズ推定結果としています。
  • #54 3Dの姿勢をX、2Dの姿勢をx、入力画像をIとした場合に、式(2)のように定式化できます。 式からも分かる通り、画像Iから2Dの姿勢を推定しているCNNの部分と、2Dの姿勢から3Dの姿勢を推定している Nearest Neighbor の部分に分かれています。 これは、つまり、3D姿勢Xが画像Iと条件的に独立しているという仮定をおいていて、3D姿勢推定は、2D姿勢推定結果のみに依存する、ということを意味しています。 また、この手法の特徴的な所としては、Nearest Neighborで検索した結果をそのまま使わず、より一致させるためにその値を歪ませるというのがあります。 実際には、検索結果からは、奥行きを表す深度座標のみを使い、横と縦の情報は2D姿勢の値をそのまま使っています。 ここれは、弱いパースペクティブ。つまり、人の奥行きの変化量が、カメラから焦点距離に対して十分小さい場合においては、合理的な近似となります。 実際、Conditional Random Fieldなどの複雑なエネルギー最小化法と比べても、さほど精度は変わらないという結果がでているようです。
  • #55 次は、A simple yet effective baseline for 3d human pose estimation という論文を紹介します。 こちらも 単眼・単一のRGB画像から3D姿勢推定 を行います。 3D姿勢推定と画像を条件的に独立と仮定しているのも、前の手法と同じなのですが、こちらはニューラルネットワークを用いて推定します。 全体像は、2D姿勢情報を入力として、3D姿勢情報を出力するRegressionタスクのニューラルネットワークとなっていて、 Residual コネクションや Batch normalizationやドロップアウトを駆使して、軽量ながらも効率よく学習できるネットワークを追求した形となっています。 この図にある通り、 Linear1024 - BatchNorm - Relu - Dropout(0.5) 、これを2回繰り返したものをresidualモジュールとして、モジュール間にスキップコネクションを設けたネットワークで、 実際に試してみると、Mac Book Pro 15インチのCPU実行でも、forwardが2.2msで完了しました。 パラメータの数も400万〜500万で、VGG16が約1.4億個のパラメータ数がある事を考えると、とても軽量という事がわかります。
  • #56 こちらは、実験した結果になります。 精度も高く再現されているのが分かるかと思います。
  • #57 これは、弊社女性社員にダンスをしてもらった映像に対して、姿勢推定を行なった結果になります。 Frame By Frameで推定した結果で、動画を再再作成しているだけなので、多少左右のぶれがありますが、手振りなどうまく認識されているのがわかるかと思います。
  • #58 さらに、3Dの推定結果を、アバターにあてはめるという事を考えてみます。 3Dの姿勢推定された結果というのは、画像の人によって、各パーツのBoneの大きさや比率が、人によって違うため、単純にアバターの頂点座標にあてはめてもうまくはいきません。 また、それぞれのBoneの位置はわかるが、Joint部分の回転角の情報までは得られないため、そもそも完全に再現することは不可能となってしまいます。 したがって、少し工夫する必要があります。
  • #59 それで、実際どのようにアバターへの適用を実施したかというと、 まず、各Jointを木構造に捉えて、体の中心の腰をルート、手や足といった端にある器官点をリーフとして、ルートから順に回転角を求めて曲げていきます。 その際、人間の各Jointの可動域というのを考慮しつつ、フォワードキネマティクスの要領でアバターにあてはめます。 その結果、このように各ボーンの大きさや比率が異なる場合においても、違和感なくアバターに適用する事ができます。 ちなみに、そもそもアバター適用する事を前提とするのであれば、3D姿勢推定の結果として、各器官点の座標位置を取得するのではなく、各器官点の回転角を予測するようにした方が、直接的で再現性も高くなるのではないかと思います。
  • #60 こういった、3D姿勢推定の技術を、活かせそうなアプリケーションですが、 例えば、アバターによるライブ配信などがあるかと思います。 自分の好きなキャラクタを自身のアバターに設定し、身振り手振りをしながら、なりきった配信ができます。 または、先ほど説明したスマートショッププロジェクトでの応用として、 例えば、定点カメラの映像をパブリックに配信したいという事を考えた場合、映っている人のプライバシー問題が発生してしまいます。 それを防ぐために人の部分をアバターに置き換えて配信を行うというのが考えられます。それも、ただ置き換えるのではなく、できればその人の特徴をつかんだアバターにするなどです。 そうする事で、プライバシーに配慮した形で、店内の混雑具合などの様子をリアルタイムに見る事ができます。 これらは、あくまで一例ですが、姿勢推定技術の活用の場は、これからも増えていくのではないかと思います。