openpose_person1

動画や写真からボーンが検出できる OpenPose を試してみた

どうも貴田です。今回は CMU-Perceptual-Computing-Lab の OpenPose というディープラーニングのライブラリを試してみた記事です。

OpenPose って何ができる?

写真・絵画・マンガや、動画から人物のボーンの2次元座標を抽出できます。

openpose_body_parts

以下、いくつか openposeのデフォルト設定でボーン検出してみた例を貼ります。

人物写真。

openpose_person1
openpose_person2
openpose_person3

※ 出典元 : PAKUTASO

古い写真や、風景写真。

openpose_oldjapan1
openpose_oldjapan2

西洋絵画。

openpose_picture1

「民衆を導く自由の女神」 ウジェーヌ・ドラクロワ

openpose_picture2

「アダムの創造」 ミケランジェロ

openpose_picture3

「アルプス越えのナポレオン」 ダヴィッド

例えば、イラスト。

openpose_illust1

openpose_illust2

※出典元 : いらすとや

浮世絵などの日本絵画。

openpose_japanart1
「三世大谷鬼次の奴江戸兵衛」 東洲斎写楽

openpose_japanart2
「鷹見泉石像」 渡辺崋山筆

漫画。

openpose_manga1

openpose_manga2

出典:ブラックジャックによろしく

OpenPose は実写の人間だけではなくて、写実的なイラストや、絵画にも効果を発揮することがわかっていただけたと思います。

OpenPose の論文によると、教師データは MPII Human Pose Dataset と、COCO 2016 keypoints challenge dataset であると書いてあります。このデータセット内に絵画がないように見受けられるので、実写の人物写真に対し最も効果的です。もし絵画に対してボーントラッキングしたいなら別途、漫画のデータセットを作るのが正攻法だと理解しつつ、OpenPose は抽象化された人間に近いかたちに対しても応用が可能な汎化能力の高さがあり、すごいなー、と感じました。

 

また、OpenPose は画像だけじゃなく、動画に対しても利用可能です。

リアルタイムではない過去の動画だったら、全フレームに対して、認識をすることができます。以下はインド映画の全フレームに対して OpenPose
をかけてみた動画です。


こちらの動画を解析させていただきました。

リアルタイムな動画の場合でも、このくらいの精度・速さで認識ができます。

僕がいつも使ってるディープラーニングマシン (NVIDIA Tesla K40C) だとリアルタイムのウェブカム映像(1080p)をそのまま認識させると、 3[fps] 程度でしたが、 github の demo_overview ページにあるように、--net_resolutionオプションをつけて、解析対象の画像の解像度を下げて実行すると、認識精度が下がりますが、FPSは早くなります。被写体が映像の中で大きく写っていれば、だいたい 7-10[fps] くらいで認識できます。

OpenPose はすでにあるポーズ推定技術と何が違うの?

一番商用でなじみのあるポーズ推定技術である Kinect V2 と比べたときの、OpenPose のメリット・デメリットについてです。

○ メリット:

  • 人物が写っていれば、古い動画でも対応可能。また、人物が描かれた写実的なイラスト、絵画にも対応可能な場合がある。
  • ふつうの単眼のビデオカメラや、ウェブカメラで撮影した映像でポーズ推定可能。(つまり、わざわざ Kinect で撮影したデータを使わずに、スマホでとったデータでも解析可能ということ)
  • センシング距離に制約がない(KinectV2 は 8[m] までとのこと)
  • 屋外の太陽光の有無に関係なく使える(KinectV2 は赤外線に影響を受けやすい)

× デメリット:

  • リアルタイムだとマシンスペックにもよるが、だいたい 3-10[fps] 程度と fps が遅め
  • 2 次元座標しかとれない。3 次元座標がとれない。
  • OpenPose の実行には性能のいい GPU を積んだマシンが必要。

ポーズ推定原理として、KinectV2は赤外線を使って TOF 方式という、光を照射して、戻ってくるまでの時間をもとに、3D デプスデータを取得し、そこからボーン推定をしていますが。OpenPose は 2 次元画像をもとに、「右手首」「左足首」などの体のパーツをディープラーニングで物体認識し、そこから体全体のボーン構成を推定するような手法をとっていることから、このような違いが生まれています。(※参考: Multi-Person Pose Estimation using Part Affinity Fields というプレゼン資料

 

OpenPose はどんな表現に使えそう?

ひとまずスノーボード動画に対して、プレイしている人が常に映像の中心に固定されるような映像を作ったら、プレイヤー中心視点の映像となり、新しい見え、にならないかぁー?という実験を Unity でしてみました。


こちらの動画を解析させていただきました。

最近、こんなかんじの実験をいろいろ試しており、OpenPose らしい表現が見つかり次第、この blog にまたあげようと思います!

OpenPose のライセンスについて

ここに書いてある通り、非商用利用の場合はフリーで使えるが、商用で利用する場合は、連絡をください、と書かれています。

OpenPose の今後について

五指のトラッキングが1,2ヶ月後、顔のランドマークのトラッキングが 2,3 ヶ月後に comming soon と書かれており、OpenPose の今後のアップデートに注目していこうと思っています!