頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


機械学習で人体頭部の姿勢を得る(4)

機械学習で人体頭部の姿勢を得る(3)
↑の続き。全然あかん、こうなったらヤケクソや!何がなんでもデータセットに含まれる顔の種類を増やすんやあ!ってことでなんとか楽に増やす方法を検討した。

今まではMakeHumanで出力したdaeファイル及びテクスチャ画像をBlenderで再設定してdaeファイルを出力、それをXcodeに持ってきて使ってた。Blenderで設定するのが面倒だったので、以前はあきらめたBlenderを介さない方法を再検討。

1) MakeHumanでのdae出力のオプションでBone orientationをLocal=Globalってのに変更、OrientationはY up, face Z(デフォ)で出力。
2) SceneKitではScene assetsのSettingsでAlways use the Y-up axisのチェックを外す

この状態だとテクスチャが設定されていないのでそこはコードでやる。
髪形や眉毛の形もdaeファイル内の文字列を調べれば設定すべきpngファイルはわかる。

そんなわけでMHでランダムに顔を作成、できたデータから差し替えていった。最終的には140種類の顔でそれぞれ1,000枚で14万のデータセットとなった。
そしてぶん回した。175kあたりで跳ね上がってるあたりからできたデータから順に差し替えてる。

TensorBoardの結果

↑データ差し替えからでもざっくり700時間くらい動かしてる。
その結果がこちら。↓



微妙だ。汎用性を求めるならやはり相当工夫してデータセットを作成する必要があるのか、、、

さらに、iPhone 7 Plusのフロントカメラで自分の顔の姿勢を把握できるか試してみたのが下の動画。むしろこれだけでもできれば、と思ってたが、やっぱり微妙。普通の光源、背景だとグタグタでそれっぽく動く状態にして撮影してこれだからなあ、、、



こういうのができたら自分専用モーションキャプチャーとか作れんじゃね?と思っていたけど、、、

今後はNNの構成を変更するとかカラー化するとかそもそものデータセットに工夫するとか色々手はあるかもしれないけど、機械学習は時間がかかるなあ。さて、どうするかな。



なお、iOSでのMetal Performance Shaderで推論するのに1画像あたり13〜21msec程度なので60FPSは微妙かもしれないけど1秒に数コマなんてことでもない感じ。今は実装してないけどカメラからの画像をMetal(GPU)使って欲しいサイズのデータを得てそのままMPSへ渡せばもっと早くできるんだろうな。



memo
iOS 10.3.2
MakeHuman 1.1.0
Python 3.5.2 :: Anaconda 4.1.1 (x86_64)
TensorFlow 1.0 ← ええかげんアップデートせにゃ!

<< TensorFlowを1.2へアップデート  TopPage  SwitchのARMSはJoy-Con一台で遊べるのか? >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/1064-b6f5fe09




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad