IkaLog_FPGAStartup1

Preview:

Citation preview

スプラトゥーン画像解析ツール「 IkaLog 」と FPGA の利用

Nov 6, 2016オープンソースカンファレンス 2016Tokyo/Fall

Takeshi Hasegawa (@hasegaw)

本スライド中に登場するスプラトゥーン関連画像は任天堂株式会社の著作物です。

2

@hasegaw について

長谷川 猛 (HASEGAWA Takeshi)twitter: @hasegaw

2004|

2011

2011|

2014

2014|

SE サービス プリセールス @ Software Research Associates, Inc.システム構築、客先のシステム運用、提案でキャリアをスタート→ プリセールス〜 PM を担当するインフラエンジニア

システムアーキテクト@ Trigence Semiconductor, Inc.エンベデッド開発支援から IT システム管理まで多岐に対応

セールスエンジニア@ Fusion-io, Inc.高速半導体ストレージ ioDrive / ioMemory シリーズの SE として活動

3

著書/寄稿

4

5

IkaLog の利用イメージ

HDMIキャプチャデバイス

IkaLog 実行用 PC

6

IkaLog の画像認識例

7

IkaLog の画像認識例

8

https://stat.ink/

タイムライン表示(ゲーム中に何がおきたかを“見える化“)

9

自分が倒されて行動不能だった時間

イカ(味方/敵 計8匹)の生死状況

チームのスペシャル発動、キル/デス自分の塗り面積

https://stat.ink/

IkaLog への FPGA 適用

11

IkaLog の利用イメージ

HDMIキャプチャデバイス

IkaLog 実行用 PC

12

Project Inq

FPGA ボード

13

PYNQ-Z1Processor: Dual-Core ARM Cortex-A9FPGA: 1.3 M reconfigurable gatesMemory: 512MB DDR3 / FLASHStorage: Micro SD card slotVideo: HDMI In and HDMI OutAudio: Mic in, Line OutNetwork: 10/100/1000 EthernetExpansion: USB Host connected to

ARM PSInterfaces: 1x Arduino Header, 2x Pmod (49 GPIO)GPIO: 16 GPIO (65 in total with Arduino and Pmods)Other I/O: 6x User LEDs, 4x Pushbuttons, 2x Switches Dimensions: 3.44” x 4.81”

(87mm x 122mm)

14

ボード1枚でARM Linux + ビデオキャプチャ!

15

単体でビデオパススルーが可能に!

16

問題点

17

問題点

Intel PC の6倍の時間がかかる!!

18

IkaLog on PYNQ-Z1 の HDMI に関する課題

HDMI RX HDMI TX

DDR3SDRAM

(512MB, 1GB/s)

ARM Core

IkaLogImage

IkaLog

HDMIFrame Buffer

19

IkaLog on PYNQ-Z1 のHDMI に関する課題 2/2

• PYNQ の実装そのままでは、 HDMI パススルー時にオーディオ情報が消えてしまう

• 内部的に DVI -> ピクセルデータ -> DVI とデータ変換しているため、音が情報が欠落する

• その他にも HDMI を前提とした IP 改修が必要 (EEPROM 、その他論理 )

– HDMI 入出力と IkaLog を同時に実行すると画面が歪む

• メモリ帯域幅の問題?

20

IkaLog on PYNQ-Z1 の HDMI に関する課題

HDMI RX HDMI TX

DDR3SDRAM

(512MB, 1GB/s)

ARM Core

IkaLogImage

IkaLog

HDMIFrame Buffer

受信したシリアルデータをそのまま再送出

21

問題点

• 当初想定のプロセッサより低いため、処理性能不足

– Intel CPU 利用時の 1/6 のパフォーマンス

– 90 秒の動画処理に 120 秒かかる

• H.264 デコードの時間は、ここでは無視(最終形では、 HDMI キャプチャから RAWデータが入ってくるためデコード不要)

22

ソフトウェアレベルでの最適化状況

• uint8 計算 -> AND/OR 演算に置き換え

• より高速に実行できるよう代替処理に置き換え

– np.reshape(np.extract(x, x), (-1)).shape[0]→ cv2.calcHist() ※8bit グレースケール画像の popcnt

– (np.sum(x) / a < b) → (np.amax(x) < b)

• OpenCV 3.1 を WITH_NEON 付きでビルド

• deepcopy 回数を削減

• 画像比較用の中間画像をできるだけ再利用するよう改善

• 処理上問題がない高負荷なアルゴリズムを無効化

23

ソフトウェアレベルの最適化状況

24

最適化の効果

最適化の効果

25

ARM NEON 命令を使った高速化

• 2 画像の論理和/積 + popcnt を ARM NEON 命令で実装pi@raspberrypi:~/ikalog/IkaLog $ PYTHONPATH=./lib/ python3

bench_1024mat.pyencode 0.000015974s logical_and_popcnt 0.094928265s total 0.094944239s

<class 'ikalog.utils.ikamatcher2.reference.Numpy_uint8'>

encode 0.000014544s logical_and_popcnt 0.021027803s total 0.021042347s

<class 'ikalog.utils.ikamatcher2.reference.Numpy_uint8_fast'>

encode 0.005746365s logical_and_popcnt 0.002564192s total 0.008310556s

<class 'ikalog.utils.ikamatcher2.arm_neon.NEON'>

26

FPGA でのアクセラレーション案

• H.264 ビデオのハードウェアデコード

– Raspberry Pi なら OpenMax が搭載されている

– ZYNQ にはデコーダがないが PL がある!

• OpenCores に H.264 デコーダがあるが… ?

• キャプチャ画像の色変換

–色変換 (BGR to HSV, Grayscale)–必要時に PS 部で色変換するより、予め PL 部で色

変換を済ませておいたほうがよいのでは?

27

ARM Core

IkaLog の色変換のしくみ

HDMIRX

DRAM

RGB(1280, 720, 3)

HSV(1280, 720, 3)

Gray(1280, 720, 1) IkaLog 実行時間の

10.4% が色変換ARM NEON 命令使用

28

ARM Core

PL 部による色変換(妄想)

HDMIRX

Color Converter

DRAM

RGB(1280, 720, 3)

HSV(1280, 720, 3)

Gray(1280, 720, 1) IkaLog は色変換済みのデータ参照のみにするキャプチャ時に PL 部で色変換を済ませておき

DRAM に書き込んでおく

29

IkaLog on PYNQ-Z1 のHDMI に関する課題 1/2

• HDMI のキャプチャあたり 100ms かかる

– Xilinx の PYNQ ライブラリの実装上の問題?→ 今朝、ほぼ確信

– ドライバを修正すると 100ms/frame → 1ms 以下 /frame に改善しそう

• HDMI ソースとの相性、 HDMI IP の信頼性

– PYNQ が HDMI Sink として受信できる Source が限られている模様

– 画面にノイズがのることがある

30

31

まとめ

FPGA ボード

共同開発・設計者 募集中!!

マンメンミ!( ありがとうございました)