Posts Tagged with "DNNDK"

既に発行済みのブログであっても適宜修正・追加することがあります。
We may make changes and additions to blogs already published.

FPGAで機械学習 (3)

posted by sakurai on February 25, 2019 #89

ブート

Ultra96にはMiniDPケーブル経由でディスプレイを接続し、またUSB経由でキーボードとマウスを接続しておきます。前回焼きこんだSDカードをUltra96に差し込み、電源を入れ、リセットスイッチを押すとLinuxがブートします。

ライブラリインストール

プログラムを展開します。文字が小さくて見づらかったのですが、なんとかターミナルを立ち上げられました。

root@ultra96:~# cd /home/linaro/
root@ultra96:/home/linaro# tar xvzf xlnx_dnndk_2.08_1901.tar.gz

これにより各種プログラムが展開されます。次にUltra96のディレクトリに移り、

root@ultra96:/home/linaro# cd xilinx_dnndk_v2.08/Ultra96
root@ultra96:/home/linaro/xilinx_dnndk_v2.08/Ultra96# bash install.sh Ultra96

により、必要なDNNライブラリをインストールします。ここで評価ボードの再起動が必要となります。

コンパイル&ラン

各種デモプログラムはコンパイルしてランするだけで全て動作しました。

図89.1
図89.1 ADAS認識デモ(SSD)

静止画の画像認識はResnet50やMobileNetを用いており、それぞれ25FPS、116FPSとかなり性能差があります。 また動画の画像認識は、face detectionはDenseBox、adas_detectionはYOLO-V3、video analisysはSSDを用いていることがわかりました。以下の性能表によればそれぞれ133FPS、30FPS、33FPSとなっています。ほぼリアルタイムで認識していることがわかります。

図89.2
図89.2 各デモの性能

認識ソフトウェアは、様々な動画フォーマットに対応しており、調べた限りではMOV, AVI, MP4に対して動作しました。また、解像度も柔軟に対応しています。ただしFPSは解像度により上下するため、比較する際には解像度を合わせないと、正しいネットワーク性能比較になりません。例えばデモ動画では、adas_detectionの動画は512x256の15FPS(640kbps)、video_analisysの動画は480x360の12FPS(954kbps)と微妙に異なっています。

認識率に関しては、YOLO-3はあまり問題を感じませんでしたが、SSDはかなりfalse positiveがあり、(バグかもしれません)このままでは使用できないと感じました。


左矢前のブログ 次のブログ右矢

FPGAで機械学習 (2)

posted by sakurai on February 20, 2019 #88

資料やデータの入手

まずXilinxのアカウントは所持しているものとします。次にXilinxのエッジAI開発者ハブのページに行き、以下に示すデータをダウンロードします。ここで対象の評価ボードは、過去記事でインベーダーゲームを搭載したUltra96ボードを使用します。

SDカードへブートイメージの焼きこみ

基本的には上記ユーザーズガイドに基づいて実施します。まずSD焼きソフトであるEtcherを入手します。次に上記評価ボードのブートイメージファイルを、zipは解凍しなくても大丈夫なので、そのままEtcherでSDに焼きます。

図88.1
図88.1 Etcher

デモプログラム類の書き込み

デモプログラムやデータを評価ボードに移さなければなりません。ユーザーズガイドではネットワークでscpすると記述されていますが、Ultra96の無線LANがうまくつながらなかったため、SDにあらかじめ移しておくことにしました。

VirtualBox等のVMを用いたLinuxでSDをマウントしてコピーします。USBインタフェースを持つSDカードリーダを使用しました。VMにおいてはUSBをVM側で見えるように設定しておく必要があります。

上記イメージを書き込んだSDは、図88.2のように第1パーティションがFAT32、第2パーティションがext4となっています。第2パーティションをGpartedで拡張しておきます。

図88.2
図88.2 Gpartedでext4を拡張

デモプログラムは800MB以上あるため第1パーティションには入らないので、第2パーティションにコピーします。

virtaul_machine # cp xlnx_dnndk_2.08_1901.tar.gz /run/media/user/ROOTFS/home/linaro/
virtual_machine # sync


左矢前のブログ 次のブログ右矢

FPGAで機械学習

posted by sakurai on February 16, 2019 #87

機械学習

そもそもFPGAボードを購入したのは機械学習(以降ML)をさせたかったのですが、その前に設計フローの勉強としてインベーダーゲームを作成しました。作成途中では拡張ボードが必要になり、急遽Pt板設計CADを勉強したりPt板を発注したりという作業が発生しましたが、今回からMLの話題に移ります。

エッジAI

AIもMLも同様な意味で使われていますが、本命はエッジAIです。現状は良いモデルの探求や膨大な学習の必要性から、クラウド側でGPUが多用されています。ただ、一旦学習が完了すればそれを多数の端末にデプロイします。せいぜい数十個のGPUがセンター側で必要なのに対し、車載ADAS/ADでは数百万台出荷されるため、半導体ビジネスからみると圧倒的にエッジAIのほうが魅力的です。

エッジAIの部品

エッジAIにおいては何より低電力、低コストが求められるので、一台10万円もするようなGPUは、コスト、電力、発熱共に使用できません。従来はFPGAも高価でしたが、近年のXilinx Zynq UltraScale+等のようなチップであれば価格はGPUの1/100のオーダーです。ということでFPGAでMLすることを考えます。

エッジAIのフレームワークDNNDK

フレームワークとはAIの業界ではTensorFlowやChainerを意味することが多いのですが、ここではエッジAIのソフトウェア基盤の意味で用いています。具体的にはDeePHiの作成した以下に示すDNNDKフレームワークを使用します。DeePHiはXilinxによって昨年買収されました。

図87.1
図87.1 DNNDKスタック

左矢前のブログ 次のブログ右矢