Zynq のようにFPGAで高速化することについても関心を持っている。ソフトウェア屋としては、あまり余計なことを考えずにさっさと高速化できるアプローチをしたい。FPGAを使う場合でも、OpenCV相当の実装が予め用意されているような使い方を、まずはしてみたい。
しかし、試してみる機会はないままだ。
「Vivado HLS ビデオ ライブラリを使用して Zynq‐7000 All Programmable SoC でOpenCVアプリケーションを高速化」
Evaluating Vivado High-Level Synthesis on OpenCV Functions
http://www.idt.mdh.se/utbildning/exjobb/files/TR1803.pdf
FPGAの部屋 Vivado HLS 2015.4 で OpenCV を使ってみた1
今から使用する Vivado HLSのOpenCV の実装方法は、ハードウエアにする関数の入出力部分はAXI4 Stream で行うということだ。テストベンチでは、IplImage2AXIvideo() で IplImage から AXI4 Stream に直して、image_filter() に入れて、処理後には、AXIvideo2IplImage() で AXI4 Stream から IplImage に戻している。
FPGAの部屋 Vivado HLS 2015.4 で OpenCV を使ってみた7(FAST Corners Detection 1)
以下のようにhigh level synthesis 用にXilinxが提供しているコードを使っている。
hls::AXIvideo2Mat(INPUT_STREAM, img_0);
hls::Duplicate(img_0, img_1, img_1_);
hls::CvtColor(img_1, img_1g);
hls::FASTX(img_1g, mask, 20, true);
hls::Dilate(mask, dmask);
hls::PaintMask(img_1_, dmask, img_3, color);
hls::Mat2AXIvideo(img_3, OUTPUT_STREAM);
このような使い方をする限り、Verilog HDLについて知らずに、FPGAを使うことができる。
ソフトウェア屋が、さっさと結果を得る目的について言えば、Verilog HDLを書かなくて済むのが一番だ。
PYNQについて調査中。
- FPGAの部屋PYNQボード1
- FPGAの部屋PYNQボード2(Linux の起動)
ここまでだと、RaspberryPiに慣れている人だったら、同じように起動できることでしょう。
- FPGAの部屋PYNQボード3(Jupyter Notebook)
PYNQ ボード用に予め用意された例題をupyter Notebook 環境を使いながら実行する例題のようです。
FPGAの部屋のサイトの著者の方は、他にも有用な記事を多数書き続けています。
手書き数字認識用畳み込みニューラルネットワーク回路の製作1(概要)
-
Xilinx PYNQ-Z1
-
qiita FPGAでDeep Learningしてみる
PYNQボードで BNN-PYNQを使う例: 既に学習済みの Cifar10 例題があって, Jupyter notebook 環境から実行しています。
-
XilinxPYNQ 開発の背景と今後の方向性
-
qiita FPGAでDeep Learningしてみる - きゅうりを選果する
- PYNQボードをBNN-PYNQ を使った実装です。
- TensorFlowでディープラーニングによる『キュウリ』の仕分け から学習しています。
connpass FPGAエクストリーム・コンピューティング
connpass「PYNQ祭り」延長戦 : FPGAディープラーニング実践懇親会
Interface 2017年6月号目次 ハード計算の世界...GPU&FPGAを使った超高速Python
機械学習/Deep Learningの仕事が増える2017年、ソフトウェアエンジニアがFPGAを学ぶべき理由
最近は大学が忙しくてHDLを書く時間が取れず、2015年ごろから高位合成ばかりです。Xilinxの高位合成ツール「Vivado HLS」(High-Level Synthesis)だと一発で合成できる。「こんなに簡単なんだ」と思いました。大学では、(FPGAで通常使うハードウェア記述言語)Verilog HDLは使わず、高位合成しか教えていません。もうソフトウェアのコードを書く感覚でFPGAを使っている学生ばかりです。
──ディープラーニングのライブラリは何が使えますか?
中原 TensorFlow、それにCaffe、Chainerなどを使えます。それに会社や部署によっていろいろなフレームワークを使うので、複数のフレームワークに対応しています。Pythonでコードを書いて、ある工夫をしてC++に落とし込んで、Xilinxのツールに入れると動きます。
──FPGAでディープラーニングを手掛けるのに、Pythonが書ければOKなんですか?
中原 OKです。C言語すら書けなくていい。
-
SlideShare 機械学習に超入門したはずが・・・いつのまにかFPGAを触っていた話
-
qiita そろそろプログラマーもFPGAを触ってみよう!
この記事での、ディープラーニング(CNN)による手書き数字文字認識(MNIST)の動作例でもJupyter notebook が使われています。そのため、入出力のどちらかが画像であるよう内容で、その内容を確かめやすい。
-
SlideShare 中原先生のTensorFlow高位合成デモ 2値化CNNなDQNをFPGAで動かしてみた
-
東工大 中原先生の開発した検出器の実装は GUINNESSという名前で githubで公開されています。
github https://github.com/HirokiNakahara/GUINNESS
付記:
YouTubeでPYNQと検索して動画を見つけることができます。
Deep Learning ではかつてのNeural Network のようなsigmoid関数は使わない。そのため、飽和によって感度が乏しくなることがおきにくくなっている。そのことを利用して結合を示す重みをビット幅の少ないデータ型で表現することが可能になっている。INT8 の型をつかえば、浮動小数点を使うのよりも格段にデータの幅が少なくなるし、演算も単純になるので回路化が簡単になる。
線形代数のBLAS ライブラリが提供されており
標準的なライブラリで書かれたアルゴリズムを利用しやすくなっている。
この場合でも、16bit, 8bit のinteger に最適化してある。
-
Machine Learning Inference Solutions from Edge to Cloud
上記サイトから
Edge Networks
GoogLeNet
SSD
FCN-AlexNet
AlexNet
VGG
の回路を生成するための情報が入手できるようだ。
-
アルテラの記事CNN実装にFPGAが最適な理由
-
インテルのニュースリリースインテル、Microsoftの新しい高速ディープラーニング・プラットフォームの「リアルタイム AI」を実現
-
インテルの記事 2017年:ミッドレンジFPGAでディープラーニング、NVIDIA「Tesla M4」以上の効率を実現
次の方もFPGA関係で多数の記事を書かれています。
最近はCQ出版の雑誌の記事も書かれています。
Hidemi's Idea Note
Github Hidemi Ishihara