Upload
takeshi-hasegawa
View
867
Download
0
Embed Size (px)
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 ボード
共同開発・設計者 募集中!!
マンメンミ!( ありがとうございました)