FC2カウンター FPGAの部屋 2017年のFPGAの部屋のブログのまとめ(7月 ~ 12月)
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

2017年のFPGAの部屋のブログのまとめ(7月 ~ 12月)

”2017年のFPGAの部屋のブログのまとめ(1月 ~ 6月)”の続き。

7月
手書き数字認識用畳み込みニューラルネットワーク回路の製作3(畳み込みNN) 四角枠の中の手書き数字を認識する畳み込みニューラルネットワークを作成しよう。
手書き数字認識用畳み込みニューラルネットワーク回路の製作6(PYNQボードで動作確認)
・SDKのベアメタル・アプリケーションで時間を計測する方法(Zynq)
手書き数字認識用畳み込みニューラルネットワーク回路の製作7(ハードとソフトの比較) ハードウェアのMNISTの手書き数字を認識する時間とソフトウェアでMNISTの手書き数字を認識する時間を比較してみようと思う。
aws/aws-fpgaをやってみた1
手書き数字認識用畳み込みニューラルネットワーク回路の製作8(Linuxでの動作1) ハードウェアでのMNIST手書き数字認識とソフトウェアでのMNIST手書き数字認識の実行時間を比較した。今回は、それをLinuxのアプリケーションソフトを作成してやってみようと思う。まずは、カメラ画像の表示を目指す。
Bash on Windows 10にVivado WebPACK 2017.2をインストールした
ルンバ622を買いました
白線追従走行用畳み込みニューラルネットワークの製作1(概要) MNIST手書き数字認識用ニューラルネットワークが完成したので、今度は本命のミニ・ロボットカーを白線間を走らせるための白線追従走行用畳み込みニューラルネットワーク(白線追従走行用CNN)を製作しよう。
HLS ビデオライブラリの hls::LineBuffer のVivado HLS 2015.4 以前とその後での変更点1(メモリ・ライン・バッファー) Vivado HLS 2016.1 から hls::LineBuffer と hls::Window のクラス・メソッドが大きく変更になった。Vivado HLS 2015.4 までは、 hls::LineBuffer と hls::Window の配列の並びは、列はインデックス 0 からなのだが、行はインデックス「行の配列の最大数」になっていた。
Ubuntu 16.04 にOpenCV 3.3.0 rc をインストールした Ubuntu 16.04 にOpenCV 3.1.0 をインストールしようとしたのだが、make でエラーになってしまった。どうやらCUDA 8.0 が悪さしているようだというのがわかった。dandelion さんからOpenCV 3.2 だったら大丈夫と教えていただいたので、OpenCV 3.2 以降をインストールすることにした。
Ubuntu 16.04 上のVivado HLS 2017.2 でOpenCV を使用したプロジェクトでエラー発生 Ubuntu 16.04 上のVivado HLS 2017.2 でOpenCV を使用したプロジェクトで libjpeg.so.62 と libtiff.so.3 が無いと言われてコンパイルできなかったので、解決方法を書いておく。
Pmod Shield: Adapter Board for Uno R3 Standard to Pmod

8月
白線追従走行用畳み込みニューラルネットワークの製作2(画像縮小、切り出し) 
MNIST手書き数字のデータフォーマット
白線追従走行用畳み込みニューラルネットワークの製作3(トレーニング、ラベル・ファイルの作成) 本格的に56 x 10 ピクセルの白線の画像を切り出すとともに、MNISTデータセットと同じフォーマットでトレーニング・ファイルとラベル・ファイルを生成しよう。
白線追従走行用畳み込みニューラルネットワークの製作5(テストデータの作成)
MFT2017 に行って来ました
白線追従走行用畳み込みニューラルネットワークの製作7(学習2) テストデータの正解率が 71 % になってしまう。もう一度、やり直した方が良いかもしれない。
Vivado シミュレータのDPI-C その1 Vivado シミュレータでDPI (Direct Programming Interface)をやってみることにした。
Vivado シミュレータでDPI-C を使用してZynq VIPを使う1
ソニーのNeural Network Console をやってみた1 「Neural Network Console」という学習・評価だけでなく、ニューラルネットワークの設計までも可能なディープラーニング・ツールをソニーが無償提供したので、やってみることにした。
白線追従走行用畳み込みニューラルネットワークの製作8(再度トレーニング、ラベル・ファイルの作成) ”白線追従走行用畳み込みニューラルネットワークの製作7(学習2)”で、精度が 71 % だったので、もう一度、白線追従直進走行用の画像データをもう一度取得して、再度トレーニング・ファイルとラベル・ファイルを作成することにした。しかし、やはり、精度は 70 % 程度だった。
白線追従走行用畳み込みニューラルネットワークの製作10(画像を増やす) 精度が上がらなかったので、画像を増やしてトレーニングしてみようということになった。今回はimagemagic を使って画像を増やしてみよう。9,075 枚に増やすことができた。
白線追従走行用畳み込みニューラルネットワークの製作13(9075枚のトレーニング用画像データで学習) 9075 個のトレーニング用画像データを使用して、学習したところ、フィルタ数が 2 でも、93 % 程度の精度が確保できた。
白線追従走行用畳み込みニューラルネットワークの製作14(固定小数点用に量子化) 9075 個のトレーニング用画像データと4125 個のテスト用画像データを使用して学習を行った。その結果、CONV数が 2 の畳み込みニューラルネットワークで、93.1 % の精度を得ることができた。今回は、その畳み込みニューラルネットワークを固定小数点用に量子化し、Vivado HLS に使用する重みやバイアスのヘッダファイルを生成しよう。
白線追従走行用畳み込みニューラルネットワークの製作16(白線追従走行用の画像データをCの配列に出力)
白線追従走行用畳み込みニューラルネットワークの製作19(Cコードの合成、IP化) Cコードの合成を行って、レイテンシやリソース使用量を確認する。
・白線追従走行用畳み込みニューラルネットワークの製作20(CNN IPの戦略を考える) 直進のみだけど白線追従走行用畳み込みニューラルネットワークの推論用Vivado HLSのプロジェクトは完成した。ただしまだ畳み込みニューラルネットワークを固定小数点数で作って性能を確認しただけで、どのようにFPGA上の回路にするかの検討はまだしていない。今回は、どのようにFPGA上の回路にするかの検討を行っていこう。

9月
Vivado HLS で画像のサイズを縮小して白黒変換(resize_gray)
画像をリサイズするためにDMA Read IPをVivado HLSで製作した1(dmar4resize_gray)
AXI4 Stream版白線追従走行用畳み込みニューラルネットワークIPその1(C シミュレーション) ”白線追従走行用畳み込みニューラルネットワークの製作19(Cコードの合成、IP化)”
で作成した白線追従走行用畳み込みニューラルネットワークをAXI4 Streamで入力するように変更した。これは、”Vivado HLS で画像のサイズを縮小して白黒変換2(resize_gray)”のAXI4 Stream 入力を受けて、白線追従走行用畳み込みニューラルネットワークにそのAXI4 Stream データを入力して処理する。
CNNのVivado HLS実装のstraight_conv_nn2 の演算精度を変更する straight_conv_nn2 の精度が良かったのは画像が良かったからという結論が出たので、精度の悪そうな画像でもう一度、straight_conv_nn2 のC シミュレーションを行った。そうすると、ハードウェアの精度は56.7 % だった。これでは精度が悪すぎるので、演算の精度、つまりビット幅を見直すことにした。演算のビット幅を変えながら誤差を見ていこう。
dmar4resize_gray, resize_gray, straight_conv_nn2_axis2 をVivado HLS 2017.2 で IP化
白線追従走行用畳み込みニューラルネットワーク・システムの製作1 白線追従走行用畳み込みニューラルネットワークを搭載して、カメラ画像から進む方向(左旋回、直進、右旋回)を決定し、モーターを駆動して、ミニ・ロボットカーに白線間を走行させるシステムである。
白線追従走行用畳み込みニューラルネットワーク・システムの製作7(白線間を走行) ZYBO のUbuntu 14.04 上でアプリケーションソフトを作り、白線間を走行させた。白線間を走行できた。動画あり。
Xilinx reVISION、xfOpenCV のExampleをやってみた1(of2) Xilinx 社から機械学習やコンピュータ・ビジョン・ツールの reVision と、OpenCVをハードウェア化する xfOpenCV が出た。これらのExample をやってみることにした。
・「RTLを語る会(14) ~FPGAの現実~」で発表してきました 「RTLを語る会(14) ~FPGAの現実~」で「「ゼロから作るDeep Learning」の畳み込みニューラルネットワークのハードウェア化」という題で1時間発表してきました。
ZYBO Z7-20 が届きました
ZYBO Z7-20 のボードファイルをVivado 2017.2 にインストールする
ZYBO Z7-20 の u-boot.elf と devicetree.dtb を作る

10月
Zybo Z7-20でLinux を起動しようとしたが失敗 ”ZYBO Z7-20 の u-boot.elf と devicetree.dtb を作る”で作ったdevicetree.dtb と”ZYBO_Z7_0 のVivado 2017.2 プロジェクトでBOOT.bin を作成”で作ったBOOT.bin をZYBO Linux 用のMicro SD カードに入れてZybo Z7-20 で起動してみた。なお、LinuxカーネルはZYBO で使用してたものとした。結果は、TTYPS0 までは行くのだが、その後の文字が化け化けになってしまった。
Ultra-Zed-EGのデモをやってみた
Zybo Z7-20 上でUbuntu 14.04 が動作したがネットワークがつながらない
Zybo Z7-20 上でUbuntu 14.04 が動作し、ネットワークもつながった
ビットマップ・ディスプレイ・コントローラIPとカメラ・インタフェースIPのAXI4 Lite Slaveのバグをフィックス ”Zybo Z7-20上の白線間走行CNNシステムのプロジェクトが動作しないバグ”で、ビットマップ・ディスプレイ・コントローラIPとカメラ・インタフェースIPのAXI4 Lite Slave インターフェース回路にバグがあることが分かった。
Vivado 2017.3 をインストールした
ZYBO Z7-20上のUbuntu 14.04でカメラ画像を表示
Github で現在使用しているZYBO Z7-20用のBOOT.bin, devicetree.dtb, u-boot, uImage などを公開しました
ZYBO Z7-20上のUbuntu 14.04でカメラ画像にガボール・フィルタを動作させる
2017年度Zynq+Vivado HLS勉強会概要 全 8 回になってしまったので、まだ、1回分残っています。
ZYBO Z7-20上のUbuntu 14.04で白線間走行用畳み込みニューラルネットワークを動作させる
Vivado HLS 2015.4と2017.2の合成時の違い
Windows 10 fall creators update のWindows Subsystem for Linuxを試してみた

11月
ZYBOでのxfOpenCVライブラリの使用1
Vivado HLS 2017.3.1 における識別子の違いによる任意精度固定小数点データ型の動作の違い1
Vivado HLSで#define と プラグマ指示子の使用
intel HLS コンパイラを試してみる
intel HLS コンパイラを試してみる2(counterサンプルが動いた)
UltraZed-EG Starter Kit のチュートリアル1
intel HLS コンパイラのレポート
Windows 10 Fall Creators Update をかけるとVivado 2017.3 が起動しない
intel HLS コンパイラを試してみる11(mm_slave その1)
カーブ、直線用白線間走行用畳み込みニューラルネットワーク1(データ) ”白線追従走行用畳み込みニューラルネットワーク・システムの製作7(白線間を走行)”で、ミニ・ロボットカーが直線の白線を走行することができた。次はカーブを曲がれるようにしたい。そこで、曲がってい角度が 23 度のカーブと 48 度のカーブを用意して、曲がれるかどうかを試してみた。(注:カーブを曲がる学習はまだしていません。直線を走る学習のみです)
FPGA+SoC+Linux実践勉強会用のZYBO Z7用MicroSDカードの準備
PetaLinux 2017.3 をインストールする
UltraZed-EG Starter Kit でPetaLinux 2017.3 をブートする

12月
FPGA+SoC+Linux実践勉強会での課題をやってみた1(Vivado HLS編)
intel HLS の pointer_mm_master を試してみた1
Vivado HLS の合成でEstimated がTarget の制約を満たせなかったときの処置 Vivado HLS の合成でEstimated の値がTarget を満たせなかったときの処置を@hiyuh さんに教わったので書いておこう。
FPGA+SoC+Linux実践勉強会での課題をやってみた6(udmabuf、実機テスト)
カーブ、直線用白線間走行用畳み込みニューラルネットワーク5(トレーニング用データの生成)
カーブ、直線用白線間走行用畳み込みニューラルネットワーク11(Vivado HLS でCNN を実装)
ZYBOでUbuntu を起動したらネットワークがつながらない
カーブ、直線用白線間走行用畳み込みニューラルネットワーク13(AXI4 Stream版CNN IP 1) AXI4 Stream版白線追従走行用畳み込みニューラルネットワークIP と入れ替えるためにカーブと直線走行用のAXI4 Stream 版畳み込みニューラルネットワーク IP を作成しよう。
UltraZed-EG Starter Kit でDebian が起動した
カーブ、直線用白線間走行用畳み込みニューラルネットワーク18(ミニ・ロボットカーでの走行テスト) ミニ・ロボットカーがカーブを自動走行することができた。動画あり。
Pcam 5Cカメラが届きました

今年もいろいろな記事を書いたが、やはり「ゼロから作るDeep Learning」を読んで、Python コードを使わせてもらって、自分で、畳み込みニューラルネットワークを学習させて、ミニ・ロボットカーに実装して、白線間を自動走行したが嬉しかった。5月に「ゼロから作るDeep Learning」を読んで、6月からMNIST手書き数字認識をFPGA実装してから弾みついた気がする。

今年もたくさんの方に見て頂いたし、また、いろいろな方に助けられてブログ記事を書くことができた。本当にありがたい。また来年もよろしくお願いいたします。

それではよいお年をお迎えください。。。
  1. 2017年12月31日 04:56 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/4024-8e748fed
この記事にトラックバックする(FC2ブログユーザー)