エクサウィザーズ Engineer Blog

株式会社エクサウィザーズのエンジニアチームブログ

ディープラーニング初心者の僕がエクサウィザーズで6週間インターンして圧倒的成長した話

はじめに

はじめまして。エクサウィザーズでインターン生としてお世話になりました中野と申します。
このブログを通して、エクサウィザーズでのインターンの雰囲気やどんなことが学べるのかが伝わればと思います。

自己紹介

京都大学の修士一年生で、機械の制御について研究しています。
フィリピン旅行で力こそ正義だと気づき、最近ボクシングをはじめました。
インターン開始時、ディープラーニングを除く機械学習の経験は多少あったものの、ディープラーニング実装の経験はほとんどありませんでした。

やったこと①

概要

この、DonkeyCarというメカメカしいラジコンの自動運転に挑戦しました。
香港から輸入することで購入できます。日本円にしてだいたい35000円だそうです。

f:id:sonias:20190205135137p:plain

余談ですが、ドンキーというと某ゴリラを想像したのですが、ロバという意味らしいです。

組み立て

f:id:sonias:20190205151021p:plain

f:id:sonias:20190205151019p:plain

プラモデルの組み立てのようで楽しかったです。
ハンダ付けなどは不要でした
配線の解説ページが見つからず苦労しましたが、脳死して総当たりすることで無事通電させることができました。 その他にも、公式サイトが不親切なためデフォルトでないログインパスワードがわからないなど、ハマることが多々ありましたが、メンターの小野さんに相談し、何度も助けていただきました。

学習

教師データとして、DonkeyCar視点の画像を入力とし、その時のスロットルとタイヤの角度を出力としたデータを用い、DonkeyCar視点の画像からスロットルとタイヤの角度を算出するモデルを作成しました。 ネットワークはNVIDIAのPilotNetを参考に作成しました。 DonkeyCarにはシミュレーションソフトが存在するため、シミュレーション上でのデータでモデルを作成し、その後現実のデータで転移学習し、実機で自動運転を行う、という方針で学習を進めました。 以下、今回使用したネットワーク図です。

f:id:sonias:20190205173600p:plain

シミュレーション

教師データ作成

シミュレーションでの教師データは、道路の中心線に追従するPID制御で取得します。 PID制御の神パラメータを探し当て、教師データを作成しました。

自動運転

シミュレーション上のランダムに生成されたデータのみで学習したモデルで走行している様子が以下になります。 カーブなどにも対応しているのが見て取れます。

f:id:sonias:20190206122819g:plain

実運転

教師データ作成

転移学習のための実機で教師データを取得しました。 データ取得の際の操作はPS4コントローラーで行いました。データに関しては先程と同様に、カメラが取得した画像とその時のスロットルとタイヤの角度が紐ついて保存されます。 余計なデータが入らぬよう頑張るうちに、操作が熟練しました。

f:id:sonias:20190226150024p:plain

1本線上を走行

追従していることが見て取れます!!

2本線の間を走行

先程より難しいのか、最後にコースアウトしていますが、追従している様子が見て取れます!

考察・展望

  • シミュレーションではタイヤの角度を急に変化できるが、実機だと連続的にしか変化できないなどといった、実機とシミュレーションの違いを転移学習でうまく調整できました。
  • 2本線の場合だとコースアウトしたときのデータセットが必要そう。(1本線だとコースアウトが存在しないため)
  • RasberryPiの計算能力上げて画像処理を挟んだり、処理を複雑化してみたいです。

大変だったこと

マニュアル通りの環境だとプログラムが動かず、環境構築が大変でした。
メンターの小野さんに相談しまくることでなんとか解決しました。

やったこと②

概要

Dueling DQNという深層強化学習を用いた自動運転をシミュレーション上で実装して、挙動を検証しました。

学習

学習風景です。 報酬を、道路の中心ラインに近いほど大きく設定し、入力をDonkeyCar視点の画像に対して、タイヤの角度を学習しました。

f:id:sonias:20190205154512g:plain

以下、ネットワーク図になります。 f:id:sonias:20190205180539p:plain

結果

スムーズではありませんが、コースを示すラインに反応し動いています。

f:id:sonias:20190205174411g:plain

考察・展望

  • 道路の中心方向にタイヤの角度を向けても、短期的に見れば中心方向から離れていくことが起きているので、それを考慮できるアルゴリズムを適応すればどうなるか検証してみたいです。

タイムスケジュール

参考にですが、どのようなタイムスケジュールでおこなったかを記しておきます。
ほとんど進捗の無い週がありますが、サボっていたわけではなく、それだけ自由にシフトを組ませていただいたということですので、あしからず。

1週目

  • ディープラーニングの学習
  • ディープラーニングのネットワークの論文読み
  • WideResNetやLTSMをPytorchで実装

2週目

  • DonkeyCar組み立て

3週目

  • 走行コース作成
  • 走行モデル学習
  • RaspberryPi環境構築

4週目

  • 強化学習の学習
  • RaspberryPi環境構築

5週目

  • 強化学習実装
  • 実機データ収集

6週目以降

  • 実機自動運転

環境

内装

きれいで過ごしやすかったです。
おやつ、バリスタ使い放題でだったため、たくさん利用させていただきました。
バリスタで作るコーヒー美味しかったです。 f:id:sonias:20190205134641p:plain

就活相談

リクルート出身の半田さんが就活相談に乗ってくださりました。
就活を深く考えず進めようとしていた僕でしたが、半田さんへの相談により、軸や着眼点が明確になり、時間が無い中で就活を効率的に進める方法を理解しました。
また、僕の要望に応じて、外資金融や最大手SIer出身の社員の方とのミーティングを設定していただき、その点においてもキャリアを考えることにおいて大変参考になりました。

プログラミング環境

  • MacBookProメモリ16GB付与+社内GPU使い放題でした。
  • 無限に書籍買ってもらえました。
  • インターン生のためsudo権限が無いことで環境設定で少し詰まりました。

通勤・待遇

京都大学から徒歩1分。
シフトが柔軟に組めて、インターンが研究会やテストの阻害になることも一切ありませんでした。
給料をいただきながら勉強させてもらえるので、プログラミングに抵抗ない人はとりあえずインターン応募すべきだと思いました。夜勤で命削っていたころよりも給料が高くて衝撃でした。
もっと早く知りたかったなぁという気持ちがあります。 東京の学生は機会に恵まれていて羨ましい。。

最後に

2ヶ月という限られた時間でしたが、得られるのもが大きく濃密なインターンとなりました。
メンターの小野さんが実践と理論をいい感じに組み合わせてわかりやすく教えてくださり、ディープラーニングを学ぶ最短ルートを歩めたように思います。 そのおかげで、ディープラーニング初心者は脱することができたように感じます。
社員の皆さん、メンターの小野さん、2ヶ月間ありがとうございました。