6/3の9時から6/4の20時半まで2日がかりのxrjamに参加してきました。
僕が担当して実装したこととか、思ったこととかをメモ
このXRJAMはXR、つまりMRとVRとARを使ったjamnで1~5人ほどのグループに別れて2日間夜通しでグループごとに作りたいものを作っていくというものでした。
僕は共同開発自体が人生初でslackを用いた開発に憧れていたので、これだけでも良い経験になったと思います。
周りを見渡せばエンジニア、エンジニア、エンジニア。
至る場所でパソコン触ってて、HoloLenzかけて奇妙に指を動かしている人がいる。
こういう環境の中で作業しているとワクワクが止まりませんでした。
開発時間自体は30時間くらいあったのですが、どこのグループもろくに寝ることなく延々作業をしていました。
シャワーも着いていたのですが、シャンプーとかなかったので結局浴びなかった。まぁ冷房ガンガンで汗かいてないしいいかなみたいな。
あとはその参加費の500円とか、スポンサーさんから頂いた食べ物とかが沢山あって、お菓子とかカップ麺とかジュース、レッドブルも用意されてて本当快適な環境で開発をすすめることができました。感謝感激です。
それと人生初めてHoloLenzをかけてみました。
視野角は少し狭いのですが、指を使って操作するMRの特異な感覚にずっとうわーすげえええwwwって言いてながら敵を倒したり穴をほったりしていました。
33万。
買うには少し高いかな..。
参加した理由
開発はしていませんがもともとXRに興味があったので、触れられる良い機会だと思ったのと、何より安い。
2日間で参加費500円という安さ。
行くしかねえと思い参加してみました。
作ったものの概要
僕のグループでは始めの構想と成果物が多少異なったのですが、最終的に実装したものは以下のような感じです。
・魔法陣が書かれた紙をスマホカメラで写すとスマホ画面上にユニティちゃんとゾンビが現れる。
・ゾンビはランダムな場所で出現し直進する
・アプリ起動時はユニティちゃんはランダムに移動する
・ユニティちゃんはゾンビとぶつかると死に、再び生き還る
・ユニティちゃんは一つのアクションごとに学習をしていき、どうすればゾンビから逃れるか随時学習していく
・スマホから得られたデータを随時サーバーに送り、サーバーにある強化学習ファイルで学習を行わせ、ユニティちゃんに次のアクションの指示を与える
と言った感じです。
以下のリンクの動画はまだ学習していない時のものです。
うちのグループが作ってたやつ#xrjam pic.twitter.com/gflXjwYGNS
— はろーまーるど (@marutakuesou) June 4, 2017
上にも書いたように僕は今まで一切UnityもUE4も触ったことがなく、C#も書けないので、Unityは完全にパスして強化学習プログラミングにフルコミットしました。
なので、チームの大まかな役割は
・Unity開発係
・サーバー設定係
・強化学習係
・上3つの仲介&サンドバック係
・スライド作成係など
で、一人一役ずつで一人でも欠けていたら今回の成果物はできていなかったように思います。
自分がしたこと
ディープラーニングの勉強は少し前から初めてはいたのですが、強化学習の勉強&実装は一度もしたことがなかったので大きなチャレンジではありました。
強化学習の理論と実装についてWeb資料を漁りながらpythonコードとひたすらにらめっこして編集をし続けました。
もちろん僕のPC側では「ユニティちゃん」などのGUIはいないので黒い2つの■を「ユニティちゃん」と「ゾンビ」に見立てて、
・ぶつかると減点
・生き延びると加点
というルールで報酬を与えていき学習させるというものを作っていきました。
学習前はこんな感じで、ランダムに動いているだけなので適度に負けています。一番右のカッコ内の数字は勝率を表しています。
これを学習させます。
下の画像では100エポック学習させています。
学習後の様子です。画面が切り替わるごとに中央に出てくるのがユニティちゃん、上から降ってくるのがゾンビです。
ギリギリなところもありますがぶつかっていないことがわかります。
説明が大分アバウトなので違うところも多々ありますがイメージはこんな感じです。
上では100エポック(*11アクション)を一気に学習させていますが、Unity側と通信させるときは1アクションごとに学習させていくように書き換えます。
なんでかというと、(今回は実装しきれませんでしたが)スマホ画面に映る範囲に例えばペットボトルなどを置くとユニティちゃんがぶつかって動けない!となるので、リアルタイムで学習する必要性が出てくるからです。
そもそもpython自体の知識、matplotlibなどのライブラリの知識、DQN(Deep Q Learning)の知識、DQNの実装の知識、あらゆる面でまだまだ勉強不足だなということを痛感させられました。
得られたことなど
実装を進めていく上で躓くところは本当にたくさん合って、まずはグループ内で話し合い、それでも解決できなければ主催者さんたちにアドバイスをいただきました。
その時に、エラー内容などを口頭で説明し、コードを少し見せるだけで、パパっと的確な回答を導いて、わかりやすく図示や説明をしてくださる姿を見たり、
主催者さん自身のPCにクローンしてきたコードを巧みなコマンドラインと手足のように操るエディタ操作には圧巻されました。
こんなスピードで画面が切り替わるような作業をできる人がいるんだ、こんなスピードでコードを頭にいれてロジックを理解できる人がいるんだと、すごすぎて笑ってしまうくらい感動しました。
自分の中で「このくらいできたら上等だろう」みたいなことがあらゆる面であると思うんですけど、その目標なるものが何次元がアップし、もっと高みを目指して日々努力をしていこうって気持ちにさせられました。
この2日間だけでとてもとても成長できた気がします。
また機会があればこういった素晴らしいイベントに参加してみたいと思います。
ここに参加者のツイートがまとめられています。
風呂入る癖は付けた方がいいですよ!!