LoginSignup
32
39

More than 5 years have passed since last update.

PYNQについて調査中  - Pythonを使ってFPGAでDeep Learningをしよう -

Last updated at Posted at 2017-05-08

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について調査中。

  ここまでだと、RaspberryPiに慣れている人だったら、同じように起動できることでしょう。

  • FPGAの部屋PYNQボード3(Jupyter Notebook)      PYNQ ボード用に予め用意された例題をupyter Notebook 環境を使いながら実行する例題のようです。

FPGAの部屋のサイトの著者の方は、他にも有用な記事を多数書き続けています。

手書き数字認識用畳み込みニューラルネットワーク回路の製作1(概要)

PYNQボードで BNN-PYNQを使う例: 既に学習済みの Cifar10 例題があって, Jupyter notebook 環境から実行しています。

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言語すら書けなくていい。

この記事での、ディープラーニング(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 に最適化してある。

GoogLeNet
SSD
FCN-AlexNet
AlexNet
VGG

の回路を生成するための情報が入手できるようだ。


次の方もFPGA関係で多数の記事を書かれています。
最近はCQ出版の雑誌の記事も書かれています。
Hidemi's Idea Note
Github Hidemi Ishihara

32
39
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
39