頭と尻尾はくれてやる!

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


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

3Dのボーン付き人体モデルをSceneKitで使う
↑iOS上でこんな感じでリアルな人体の頭部を動かしてその画像(白黒、64x64)と姿勢データ(neck boneの座標x,y,z、クォータニオンx,z,w、head boneのクォータニオンx,y,z,w)の10個の値(どれも-1から1)を持つデータセットを作成。データ数は40,000個。

頭部のbone構成

↑こんな感じで接続してる。neck boneは軸周りの回転はなしとしてたのでy成分はゼロで実質x,z,wの3個。

損失関数は単に正解との差の絶対値の総和からの平均、という誰でも最初に思い付きそうなモノ。


PythonでTensorFlow使って学習を進めた。
まだ試行錯誤の途中だけど、現時点でのNNの構成は
畳み込み→プーリング→lrn→畳み込み→畳み込み→lrn→プーリング→全結合→ドロップアウト→全結合
てな感じ。Cifar-10のサンプルコードをめっちゃ参考にしてる。

その結果がこんな感じ↓


画面下の小さい画像から白黒の画像データを得て、予測、その結果を人体モデルに反映(画面上部)。
最初の10枚は(訓練用ではなく)テスト用画像のもの。そこそこ姿勢は得られている感じ。
と言っても訓練用もテスト用もたった一人の人体モデルからデータセットを作ってるので、他の人の画像を入力したらどうよ?ってのが後半の10枚。

なんとなくいけてそうなのもあるし、南野陽子さんや岡崎体育さんみたいに反対向いてるのもある。
岡崎体育どっち向いてるねん?!とネタにしたいとこだけど元データがハゲのおじさんデータだけなので仕方ないんだろう。いや、実は頭髪や性別など関係なく目、鼻、口の位置から予測してたらいけるのかも?!なんて期待してたんだけどね。
そんなわけで今後は元データ人体の種類を増やしてみるかなあ。

とりあえずMNISTやCifar-10などのように分類するのと違って出力で複数の値を得る、ということができそうということがわかった、ってとこがここまでの成果か。

<< 機械学習で人体頭部の姿勢を得る(2)  TopPage  TensorFlowのlrn層ってMPSではどう記述するの? >>

コメント


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

トラックバック

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




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

FC2Ad