活動報告 No.143 結果はっぴょー
カテゴリ: 未分類

どうも、おはこんばんにちは。最近個人ブログを立ち上げた2年のマエダです。


ヒュー研のブログを見ている人ハード屋さんが多いんじゃないかと思うので、ソフト屋の私はヒュー研らしいブログを書けない…(これからFPGAというハードウェアに手を付けるけどね!)
というわけでサーバを借りて、個人ブログをソースコードレベルから構築し、そこでソフト系(人工知能中心)の記事をバシバシ上げておりまする。


サーバがマイナーだし検索ランキングで上位にするSEO対策なんて何も施していないので、Google検索で全く引っかかりません(笑)



この記事について


ROBO-ONE autoにてディープラーニングを用いたロボットの自動認識を実現させるために、今までやってきたことと、その結果、今後すべきことをタラタラ話していきます。
別にROBO-ONE autoなんかに限らず、IoT機器などにも転用できると思うので、いろんな人に見てもらえたらと思います。



結論


ロボットの機体に載せられるマシンを用いた、ディープラーニングでのリアルタイム物体検出は難しい。


ヒュー研が製作している3 kg級のロボットにコンピュータを搭載する上で考えなければならないことは、以下の通りです。


・省電力
・高性能
・軽量
・高精度な検出能力


これらを満たすマシンを搭載した3~5 kg級の機体を製作するのは、ARMやCPUなどの汎用プロセッサでは極めて困難と感じました。


5 kgならいけるかも、と思うかもしれないですが、そうしたら脚にかかる負担が大きすぎて、ROBO-ONE autoで格闘競技ができないと思います。もっとも、K社の最上位ハイトルクサーボをダブルサーボにしてブルジョワ機体をつくれば実現可能かもですが、制御、電源、金銭的な意味で現実味はないです。



なぜそう結論づけられるのか


まずディープラーニングをするには、機械学習フレームワークというものを使うのが王道だと思います。イチから畳み込み層やらプーリング層やら全結合層やらを重ねて正規化して損失出して誤差逆伝播させて学習率から重み調整してさらに一連の作業をミニバッチで処理とかやってられないです。そんな機械学習フレームワーク(と、併せて用いられる物体検出アルゴリズム)はCPUなどの汎用プロセッサかGPUを計算資源として用いる場合が全てです。


これを頭に入れた上で先ほどの条件を当てはめると、ラズパイなどのARMプロセッサ搭載の小型シングルボードが候補として出てきます。逆にこれ以外何があるのかよくわからないです。処理速度を重視ってことで、物体検出の試験マシンとして、Raspberry Pi 3 model B の約 1.8倍の処理速度を誇ると謳われている、ASUSの Tinker Board というシングルボードを使用しました。


結果、640×480pxの画像一枚に対して出力までに50〜65秒もの時間を要しました。
うん、、ロボワンで使うには遅すぎる。。1試合180秒だから、うまくいって相手を3回攻撃できるかどうかってところですね。


色々やって汎用プロセッサに限界を感じたのでありました。



今後すべきこと


別のアプローチで行くしかありません。考えているのは、汎用プロセッサがだめなら専用プロセッサを使うしかないんじゃないかと。具体名をだすならFPGA。今はPythonコードで記述したものを高位合成というのをつかってそれに落とし込めるらしいので、情報資源は乏しいですが、学習コストはあまり高くないんじゃないかと踏んでいます。Pythonの抽象性からハードウェア言語へはあまり信用できないので、C++でネットワーク組んでやるのが無難だと思われます。

いざとなれば研究室にいる先生に助けを求めるかもなあ。。


並列が得意なFPGAを使えばサーボを同時制御できますが、モーション練度と難易度的に4HVを挟んだ方が楽だと思うので、ARMも搭載しているZYNQボードを選択する予定です。


CNNの畳み込み層やプーリング層ではFPGAが得意な並列処理に流せると思うので、物体検出の際にR-CNNのような何回もCNNを通す物体検出アルゴリズムでも扱えるのではないか...?と思ったけど検出だけでなく全体の特徴点から測域したりオドメトリすることになってしまったらすぐリソースの限界がきてしまうと思うので、現状もっとも検出速度と精度のバランスが良いと思われるYOLOv2の実装を目指すべきだろうと思っています。もしもYOLOv2なら、本領発揮するのは学習過程(FCN)が繊細に関わってくるようなので、そこらへんも勉強しなきゃですね。


というわけで、C++でネットワーク組んで重みファイル自作して、高位合成ツールに頼りながらこれまたC++で物体検出のプログラムをFPGAに適用するしかなさそうです。



おまけー(上と内容が一部かぶるよ!)




夏休みの20日間くらいを使ってやったこと


全部淡々と話すと分量がやばいことになるので、端的にまとめると、


1、学習に必要なアノテーション生成GUIソフトウェアを作成した
2、機械学習フレムワークDarknetで学習させた
3、YOLOv2で物体検出した
4、シングルボードで実行速度等観察した


です。



結果


個人ブログでめっちゃ詳しく解説して力尽きたので結構適当な文章です。用語がある程度わかるなら容易い。


1、アノテーション生成GUIソフトウェア


自作してGitHubにあげました。クローンするかZIPで落として使ってください。READMEを読めばソフトの扱い方はわかると思います。
Python?なにそれおいしいの?って人は、、頑張りましょう。

ソフト:

https://github.com/ShimizuMizu/BB-Engine-forDarknet


2、Darknetで学習


Linuxではリポジトリをクローンしてきてビルドするだけなんですが、Windowsでやろうとすると厄介です。専用のリポジトリを使ってvisual studioとOpenCV(pipとかじゃなくてインストールファイルから入れるパターン)を使ってビルドしなくてはなりません。英文ですが、専用のリポジトリのREADMEの通りにやって、、、行くのも結構辛い。
ちなみに約350アノテーションを2000エポックかけて学習させて(バッチ不明)、260 MBの重みファイルが生成されました。


3、YOLOv2で物体検出


実行後の様子は以下。




4、ジングルボードで試す


今回はGeekベンチマークでラズパイ3 Model Bの約1.8倍の処理速度を誇る、ASUSのTinker Boardを使いました。


 ◆ 処理速度
一枚50秒は下らない。60秒以上かかることもしばしば。YOLOv2にはtiny-YOLOという精度は落ちるけど実行速度を上げることのできるパラーメタもありますが、それでも30数秒です。ならいいじゃないかって思うかもですが、とにかく精度が悪い、悪すぎる。実用性を考えると使えないですね。ちなみに通常版(?)では損失関数が0.04あたりまできたのに、tiny版は0.55でした。tiny版は1000エポックしか学習させていないですが、600エポック過ぎたあたりからもう0.5の壁を越えられない感じだったので、現状これが限界かと。


 ◆ 発熱
やばい。焼肉ができるよ!やったね!(使用率30%)
てな訳で、もしもこのマシンで物体検出付き監視カメラっぽいことなどやりたいのなら、マシンの形状がラズパイと同じなので、ラズパイ用の金属ケースを買って、ARMから金属ケースの天板までを金属の四角柱で繋いで伝熱、ケースにはこれでもかってくらいのヒートシンクをハリネズミのごとくビンビンに装着し、必要であればUSB(5V)から電源の取れるファンを付ける必要あり。

 ◆ メモリ
最大でシステム含めて600 MBくらい。今回使ったマシンは2GBもあるけどそんなに要らない。ちなみにOSはASUS公式で配布されているDebianベースのTinker OSというやつ。しかしデスクトップ画面はがっつりDebianのマークが。

 ◆ メモリの発熱
個人的に「CPU、GPU、メモリ、電源」が発熱四天王だと思っています。今回の場合は5V/3AのACからとるタイプだったので、四天王の一人である電源くんはクビですね。
同じメモリ使用量でもTinker Boardの方が余裕があるからなのか?メモリの発熱はラズパイより軽症だと思います。



余談


ASUSのTinker Boardくんは実稼働時間6時間程度で物体検出用マシンの前線から退いたわけですが、コイツ結構お高いんだぞ...¥8,500もしたし。
さて、どうにか酷使してやらないと気が済まないので、ゲームサーバに使おうかなと思っています。腐っても中身はDebian、Red Hat系をほとんど使わない私はUbuntuと同じような感覚でコマンド打てるのがなかなかに良いのです!
メモリ2 GBの恩恵を生かして、旧友にマイクラのサーバでも提供しようかな。消費電力は低いしファンレスにできるしスクリプトの自動実行でバックアップしたりFTP転送で使用率共有したりできるしサスペンド、ハイバネートが簡単にできるしで使い道あるぞこれ。


スポンサーサイト
編集 / 2017.09.22 / コメント: 0 / トラックバック: 0 / PageTop↑
コメント
 
Title
 
 
 
 
 
 
Secret 


Pagetop↑
トラックバック
Pagetop↑
プロフィール

ヒュー研の中の人

Author:ヒュー研の人
このブログは東京電機大学理工学部ヒューマノイド研究部の公式ブログです。2012年から部に昇格しました!
その日の活動や大会の記録をできるだけ更新していきたいです!!

☆だいたい金曜日前後に更新します☆

FC2カウンター
カレンダー
10 | 2017/11 | 12
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -
リンク
ブロとも申請フォーム
携帯でみるには↓
QR