頭と尻尾はくれてやる!

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


TensorFlowを1.2へアップデート

ずっと1.0のまま使ってたんだけど、ここいらで1.2へアップデートすることに。

Installing TensorFlow on Mac OS X  |  TensorFlow
↑本家を参考に。1.0へのアップデートと同じく Installing with native pip でやってみた。

まずはpipのバージョン確認。ターミナルから
pip3 -V とした結果、
pip 9.0.1 from /Users/yamaguchitatsuya/.pyenv/versions/anaconda3-4.1.1/lib/python3.5/site-packages (python 3.5)
で8.1以上なのでOK。

次に
pip3 install tensorflow
でインストールするも、
Requirement already satisfied
とかがいっぱい出て、ダウンロードしない。

これがダメなら、、、と本家ページにあるのでその通りにやってみたのが↓これ。
sudo pip3 install --upgrade https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.2.0-py3-none-any.whl

するとダウンロード開始し、無事終了。

print(“version “+str(tf.__version__))
↑これでバージョンを確認すると1.0.0→1.2.0になった〜!
1.1で大きな変更があったとか聞いた気がするんだけど、1.0で動いてたMNISTを試しに動かしたら普通に動いた。



memo
macOS Sierra 10.12.5
Python 3.5.2 :: Anaconda 4.1.1 (x86_64)


機械学習で人体頭部の姿勢を得る(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 ← ええかげんアップデートせにゃ!


SwitchのARMSはJoy-Con一台で遊べるのか?

購入前に色々調べたんだけど、ARMSってJoy-Conを追加購入せずに家族で対戦したり出来んのかな?ってのがよくわからなかった。
ほら、いろんなサイト見ても大抵は左右の手にJoy-Conを一つずつ手にして(「いいね持ち」と言うらしいよ)パンチ!とかしてるじゃない?こんな感じでさ↓

ARMS対戦

ってことは家族で対戦しようとするとJoy-Conセットを購入せんとあかんの?と思っていたんだけど、、、

いざARMSを買って遊んでみたところ、、、できるじゃないか!

「Joy-Con横持ち」ってのがあって、1台で移動やパンチなど全部の操作ができる。これだとデフォで2台あるから家族や友達などと一緒に対戦や協力して遊べる。

操作方法 - ARMS(アームズ) 攻略
↑持ち方についてはこの辺りに詳しく載ってる。

ただやっぱり「いいね持ち」が楽しいし、「横持ち」だと誤操作で何度も一時停止やスクショ撮影とか押しちゃったりしてしまう。やっぱりJoy-Conセット欲しい!ってなっちゃう。まさに任天堂の思う壺だよ。

ともかく息子と対戦してなかなか盛り上がったよ!


あと、一番最初に戸惑ったのがストラップを付けずにソフトを起動して進めていったせいか、「横持ち」を前提にチュートリアルが進んでわけわからず、何かさせるのにいろいろ試すだけという状態になった(こちらは「いいね持ち」で構えていたわけで)。両手でやるなら最初からストラップつけとかないとダメみたい。



Nintendo Switch販売ページをスクレイピング?

なんとかNintendo Switch本体を購入しようとお店に電話で在庫確認したりマイニンテンドーストアなどをチェックしてたんだけど、なかなか買えない。
この前はマイニンテンドーストアでカートに入れることはできたけど支払いまでに完売してしまったらしくダメだった。もう少し気付くのが早ければ、、、待てよ、webサイトのチェックならスクレイピングでできるんじゃね?と思って調べてみた。

ターゲットは本家My Nintendo Storeとトイザらスオンラインストア。

トイザらスオンラインストア

↑トイザらスだとこんな風に”入荷予定あり”と表記があるのでついつい期待しちゃうんだよね。

で、スクレイピングできるのかな?とhtmlの中身を見てみた。

マイニンテンドーストア

↑My Nintendo Store → 何故かSOLD OUTの文字はない(サイトとしては画像でもなくテキストなのにね、俺には理解できん)。検出する文字列が見つからないんじゃどうしようもないのであきらめた。

トイザらスのソース

↑トイザらス オンラインストア → 在庫に関していくつかの文字列を動的に表示を切り替えてるみたいで、単に「在庫あり」もしくは「在庫わずか」の文字列を探したら常に検出しちゃってダメだった。

ちなみに PythonのBeautiful Soup でやってた。
Python Webスクレイピング 実践入門 - Qiita
↑この辺りがとても参考になった。一定時間経過後に処理するとかもあるし。

動的なのが必要なのか?ということで Selenium なるものを使おうとChromedriverもインストール、してやってみたけど結果はダメだった。

ところがこのSeleniumってのはスクショも撮れるんだわ。さすがにスクショなら該当するSOLD OUTとか捕まえられるんじゃね?と思ってまずはスクショを撮れるか試してみた。

Seleniumによるスクショ1
Seleniumによるスクショ2

↑指定のとこまでスクロールさせてスクショ撮影、保存。いけるやん、Seleniumやるやん!
ここに「SOLD OUT」や「在庫なし」がなければPythonからMacへ通知(通知関連は↓この辺りを参考に前にやったな)。
Macの通知センターにPythonから通知する - Qiita

問題はスクショ画像から在庫有無を判断する方法なんだけど、、、OpenCVでなんか使えそうなのあんのかな?日本語OCRとかで評価?せっかくなので機械学習で該当文字画像の有無を検出するNNを作るか?データセットはどんなのが必要になるんかな?とか色々考えてたところ、、、



へへへへへ!買えちゃったんです!日課の電話問い合わせをしたら「在庫ありますよ」と言われて大急ぎで自転車飛ばしてトイザらスへ。本命のネオンブルー/ネオンレッドは無くなってた(電話時には1台ありと言ってたが)けどグレーをゲット。

そんなわけで、もうスクレイピングやらんですみました。


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

機械学習で人体頭部の姿勢を得る(2)
↑この続き。
もう一つうまくいかないのはもしかして教師データが甘かったんじゃなかろうか?と。
例えば正面をゼロとして-15°から+15°までの画像をランダムに作成してデータセットを作成した場合、+45°の画像を入力とした時に正解を推論できるのか?そりゃ無理なんじゃ、、、?

そんなわけで従来より大きく動くようにしてデータセットを作成してみた。
データ数で30,000。従来の100,000は”穏やかな”データに加えて合計130,000個。
これで最初からやった方がいいのかよくわからないので、従来の続きでぶん回してみた。

TensorFlowの途中経過

↑そりゃ、そうなるわなってくらい損失関数の値が跳ね上がった。ここから学習していくのか?って思ってたんだが、なんとか学習は進んでるみたい。

ところが、テキトウな画像に対して推論すると相変わらずよろしくない結果に。こりゃダメだ、、、




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

FC2Ad