Submit Search
Ultra96ボードでYOLOを高速化
4 likes
3,333 views
Hiroyuki Okuhata
雑誌インターフェースのオフ会「最強Ultra96&AI画像認識」で発表した資料です
Engineering
Read more
1 of 23
Download now
Downloaded 33 times
1
2
Most read
3
4
5
6
7
8
Most read
9
10
11
Most read
12
13
14
15
16
17
18
19
20
21
22
23
More Related Content
PDF
プログラムを高速化する話Ⅱ 〜GPGPU編〜
京大 マイコンクラブ
PDF
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
Hiroki Nakahara
PDF
2015年度GPGPU実践プログラミング 第5回 GPUのメモリ階層
智啓 出川
PPTX
研究者のための Python による FPGA 入門
ryos36
PDF
高位合成ツールVivado hlsのopen cv対応
marsee101
PDF
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
PDF
Tensor flow usergroup 2016 (公開版)
Hiroki Nakahara
PDF
Chainer で Tensor コア (fp16) を使いこなす
NVIDIA Japan
プログラムを高速化する話Ⅱ 〜GPGPU編〜
京大 マイコンクラブ
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
Hiroki Nakahara
2015年度GPGPU実践プログラミング 第5回 GPUのメモリ階層
智啓 出川
研究者のための Python による FPGA 入門
ryos36
高位合成ツールVivado hlsのopen cv対応
marsee101
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
Tensor flow usergroup 2016 (公開版)
Hiroki Nakahara
Chainer で Tensor コア (fp16) を使いこなす
NVIDIA Japan
What's hot
(20)
PDF
いまさら聞けない!CUDA高速化入門
Fixstars Corporation
PDF
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
Preferred Networks
PDF
分散学習のあれこれ~データパラレルからモデルパラレルまで~
Hideki Tsunashima
PDF
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム
Shinya Takamaeda-Y
PDF
CUDAプログラミング入門
NVIDIA Japan
PDF
Singularityで分散深層学習
Hitoshi Sato
PDF
ディープラーニングの2値化(Binarized Neural Network)
Hideo Terada
PDF
機械学習のための数学のおさらい
Hideo Terada
PDF
TVM の紹介
Masahiro Masuda
PDF
【メタサーベイ】基盤モデル / Foundation Models
cvpaper. challenge
PDF
ChatGPTは思ったほど賢くない
Carnot Inc.
PDF
バンディットアルゴリズム入門と実践
智之 村上
PDF
GPGPU Seminar (GPU Accelerated Libraries, 3 of 3, Thrust)
智啓 出川
PDF
モデルアーキテクチャ観点からのDeep Neural Network高速化
Yusuke Uchida
PDF
効率的学習 / Efficient Training(メタサーベイ)
cvpaper. challenge
PDF
【DL輪読会】Domain Generalization by Learning and Removing Domainspecific Features
Deep Learning JP
PPTX
【DL輪読会】"Instant Neural Graphics Primitives with a Multiresolution Hash Encoding"
Deep Learning JP
PDF
2015年度GPGPU実践プログラミング 第9回 行列計算(行列-行列積)
智啓 出川
PDF
計算機アーキテクチャを考慮した高能率画像処理プログラミング
Norishige Fukushima
PDF
2015年度先端GPGPUシミュレーション工学特論 第5回 GPUのメモリ階層の詳細(様々なメモリの利用)
智啓 出川
いまさら聞けない!CUDA高速化入門
Fixstars Corporation
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
Preferred Networks
分散学習のあれこれ~データパラレルからモデルパラレルまで~
Hideki Tsunashima
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム
Shinya Takamaeda-Y
CUDAプログラミング入門
NVIDIA Japan
Singularityで分散深層学習
Hitoshi Sato
ディープラーニングの2値化(Binarized Neural Network)
Hideo Terada
機械学習のための数学のおさらい
Hideo Terada
TVM の紹介
Masahiro Masuda
【メタサーベイ】基盤モデル / Foundation Models
cvpaper. challenge
ChatGPTは思ったほど賢くない
Carnot Inc.
バンディットアルゴリズム入門と実践
智之 村上
GPGPU Seminar (GPU Accelerated Libraries, 3 of 3, Thrust)
智啓 出川
モデルアーキテクチャ観点からのDeep Neural Network高速化
Yusuke Uchida
効率的学習 / Efficient Training(メタサーベイ)
cvpaper. challenge
【DL輪読会】Domain Generalization by Learning and Removing Domainspecific Features
Deep Learning JP
【DL輪読会】"Instant Neural Graphics Primitives with a Multiresolution Hash Encoding"
Deep Learning JP
2015年度GPGPU実践プログラミング 第9回 行列計算(行列-行列積)
智啓 出川
計算機アーキテクチャを考慮した高能率画像処理プログラミング
Norishige Fukushima
2015年度先端GPGPUシミュレーション工学特論 第5回 GPUのメモリ階層の詳細(様々なメモリの利用)
智啓 出川
Ad
Similar to Ultra96ボードでYOLOを高速化
(20)
PDF
Good Arm FPGA Board Ultra96 and Google AI YOLO
If_CQ
PPTX
Zynq + Vivado HLS入門
narusugimoto
PPTX
Abstracts of FPGA2017 papers (Temporary Version)
Takefumi MIYOSHI
PDF
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
直久 住川
PDF
ACRiルーム副室長_安藤様_講演資料
直久 住川
PDF
FPGA startup 第一回 LT
Yamato Kazuhiro
PDF
FPGAスタートアップ資料
marsee101
PDF
Synthesijer zynq qs_20150316
Takefumi MIYOSHI
PDF
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介
Hiroki Nakahara
PDF
IEICE technical report (RECONF), January 2015.
Takuma Usui
PDF
Halide, Darkroom - 並列化のためのソフトウェア・研究
Yuichi Yoshida
PPTX
Androidとfpgaを高速fifo通信させちゃう
ksk sue
PDF
SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」
marsee101
PDF
私のファミコンのfpsは530000です。もちろんフルパワーで(以下略
Hiroki Nakahara
PDF
Slide
Takefumi MIYOSHI
PPTX
FPGA勉強会資料 20210516
ryuz88
PDF
DAS_202109
Takefumi MIYOSHI
PDF
Ultra96 pmod expansion board
marsee101
PPTX
ヘネシー&パターソン7.4
walk-to-work
PDF
FPGAをロボット(ROS)で「やわらかく」使うには
Hideki Takase
Good Arm FPGA Board Ultra96 and Google AI YOLO
If_CQ
Zynq + Vivado HLS入門
narusugimoto
Abstracts of FPGA2017 papers (Temporary Version)
Takefumi MIYOSHI
「FPGA 開発入門:FPGA を用いたエッジ AI の高速化手法を学ぶ」
直久 住川
ACRiルーム副室長_安藤様_講演資料
直久 住川
FPGA startup 第一回 LT
Yamato Kazuhiro
FPGAスタートアップ資料
marsee101
Synthesijer zynq qs_20150316
Takefumi MIYOSHI
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介
Hiroki Nakahara
IEICE technical report (RECONF), January 2015.
Takuma Usui
Halide, Darkroom - 並列化のためのソフトウェア・研究
Yuichi Yoshida
Androidとfpgaを高速fifo通信させちゃう
ksk sue
SDSoC勉強会_170128_スライド「SDx 2016.3のプラグマによるハードウェアと性能」
marsee101
私のファミコンのfpsは530000です。もちろんフルパワーで(以下略
Hiroki Nakahara
Slide
Takefumi MIYOSHI
FPGA勉強会資料 20210516
ryuz88
DAS_202109
Takefumi MIYOSHI
Ultra96 pmod expansion board
marsee101
ヘネシー&パターソン7.4
walk-to-work
FPGAをロボット(ROS)で「やわらかく」使うには
Hideki Takase
Ad
Ultra96ボードでYOLOを高速化
1.
Ultra96ボードで YOLOを高速化 奥畑 宏之 (@HiroyukiOkuhata)
2.
インターフェース2019年1月号 第3部 最強FPGAボードで人工知能カリカリ画像認識 第1章 組み込み人工知能にピッタリ!最強Arm
FPGAボード「Ultra96」 64ビットCortex-A/GPU/FPGAチップ搭載で3万円 第2章 最強ArmコアFPGAボードUltra96の基本的な使い方 開発環境の準備からLinux&My回路生成まで 第3章 はじめての行列演算ハードウェア化 画像認識人工知能高速化のために 第4章 映像認識人工知能のカリカリ高速化に挑戦 画像処理&行列計算チューンナップ技法の研究 第5章 リアルタイム物体検出に挑戦 精度よりリアルタイム性がほしいときのために
3.
発表内容 • Ultra96ボード • YOLO •
開発フロー • PetaLinux • Vivado HLS • PSとPL • PLを用いた高速化 • HLSのクロック周波数設定 • キャッシュコヒーレンシ • PL以外での高速化 • NEON • GPU Mali
4.
Ultra96ボードの概要 • XCZU3EG (PS
+ PL) • Cortex-A53 1.5GHz • Cortex-R5 600MHz • Mali-400 MP2 667MHz • 16nm UltraScale+ PL • Mini-Display Port • Wi-Fi/Bluetooth • 2GB LPDDR4 • USB 3.0 • 拡張コネクタ お手頃価格:29,800円(税別)
5.
YOLO v3 によるオブジェクトの識別・検出 入力画像
結果画像 位置と種別を正しく 識別・検出 YOLOとは • リアルタイム物体識別および検出のAIアルゴリズム • ニューラルネットDarknetを用いる • バージョン3 (v3) が 2018年4月に公開
6.
YOLO 処理時間比較 213.6 115.9 18.1 9.14 0 50 100 150 200 250 ラズパイ3
Ultra96ボード (高速化前) Ultra96ボード (高速化後) Core i7 4GHz YOLOv3で画像1枚(608×608)の推論にかかる時間 (秒)
7.
YOLO 処理時間 内訳 •
gprofによる推論処理 のプロファイリング • gemm (行列乗算)が 処理時間の91%を占 める 浮動小数点の行列乗算 をPLでオフロード
8.
Ultra96 開発フロー 概略 ・Vivado
HLS & Vivado で PLの設計 ・OSはPetaLinuxを使う
9.
PetaLinux Build Guide
for Ultra96 ・このWebページの通り進めると、お手軽に動く
10.
PetaLinuxツール • ビルド時間 • 少し変更してカーネルビルドするのに10分強
(i7-4790K @ 4.00GHz) • ディスク容量 • ビルド後のプロジェクトフォルダ 44GB • aptがほしい • 一応、パッケージ管理システムDNFが使える (パッケージは少ない) • 記事ではバージョン2018.02を使用 • Ubuntu16.04でないとうまく動かない • 最新バージョンは2018.03だが • Ultra96用のBSPがまだない • 2018.02のBSPを使うとsystem-top.dtb周りでエラー • 試される忍耐力
11.
Vivado HLS • gemm
(行列乗算) のC記述をVivado HLSで高位合成 • Xilinxアプリケーションノートを流用 • 行列サイズ32×32の単精度浮動小数点(FP32)の乗算 • AXI4-Streamで入出力 • 高位合成の利点 → アーキテクチャの探索 • 行列のサイズ:32×32, 64×64, 128×128 • 演算の種類:C=A×B, C=A×B+C • データバス幅 • 動作周波数とサイクル数 • 注意点 • 生成回路のサイクル数、回路規模
12.
PSとPLの接続 • AXI4-Stream ⇔
AXIバス • Xilinx AXI DMA IP を利用 • Linuxメモリの連続領域確保 • udmabuf (@ikwzmさん) を利用 udmabuf AXI DMA IP 行列乗算IP PS PL YOLO (darknet) • 接続してUltra96でYOLOを実行 処理時間:115.9秒
13.
高速化 1. Vivado HLSのクロック周波数設定 2.
キャッシュコヒーレンシ 3. AXIバス幅の拡張 4. ダブルバッファリング
14.
高速化 1. Vivado
HLSのクロック周波数設定 • Vivado HLS 設定クロック周波数≠生成回路の動作可能周波数 • 条件厳しめに高位合成される印象 • Uncertainty 12.5%が付加 • 余裕のありすぎる回路 • 逆にMETしない場合もあるらしい • クロック周波数とサイクル数のトレードオフ • 自動で探索してほしい (QuartusIIのDSEみたいな) • 探索結果 • Vivado HLS の設定:150MHz • Vivadoの設定:299MHz
15.
高速化 2. キャッシュコヒーレンシ •
ハードウェアによるキャッシュ同期 • 以前のZynqではACPを利用 • AR#66643 Zynq UltraScale+ MPSoCのACPインターフェイスでは、次のキャッ シュライン対応のトランザクションのみが許容されます。 (中略) ACPの代わりに、コヒーレンシと共に幅広いAXIトランザクションがサ ポートされるコヒーレンシHPCポートの使用をご検討ください。 • デフォルト設定ではHPCはキャッシュコヒーレンシではない • AR#69446 • AXIバスのAxCACHE, AxPROTを適切に設定 • ブート時にBroadcasting Inner Shareableとする • デバイスツリーの設定でdma-coherentのプロパティを追加
16.
高速化 3. AXIバス幅の拡張 •
AXI4-Streamのデータバス幅を32bitから128bitに拡張 • サイクル数 • YOLO実行時間 • 22.7秒→21.4秒 • サイクル数は削減できたが、全体の処理時間に占める割合は小 さかった 32bit 128bit データ転送サイクル数 12,289 5,122 行列乗算サイクル数 4,549 4,549 総サイクル数 16,846 9,679
17.
高速化 4. ダブルバッファリング •
Linuxメモリ内のコピーとDMA転送を同時に行う 行列B 行列C ①コピー 行列乗算IP ①DMA転送 ②DMA転送 ②コピー DMAバッファ (udmabuf) • YOLO実行時間 • 21.4秒→18.1秒 • スキャッタギャザDMAを用いれば必要ないかも
18.
高速化による時間短縮まとめ 高速化 YOLO実行時間 (秒) 行列サイズ32×32,
クロック100MHz 115.9 行列サイズ64×64, クロック299MHz 46.2 キャッシュコヒーレンシ On 22.7 AXIバス幅 32bit → 128bit 21.4 ダブルバッファリング 18.1
19.
リアルタイム 画像認識 • darknetをOpenCV付 きでコンパイル • Tiny
YOLO v3で2fps • X Window Systemの 表示が遅い
20.
PL以外での高速化 • NEONによる高速化 • GPU
Maliによる高速化
21.
NEONによるYOLO高速化 • NEONとは • ARMアーキテクチャの64ビット,
128ビットのSIMD命令セット • NEONを用いたDarknet実装 • NNPACK for Darknet (ライブラリ) • https://github.com/digitalbrain79/NNPACK-darknet • darknet-nnpack • https://github.com/digitalbrain79/darknet-nnpack • Ultra96でビルド • darknet-nnpackのReadme.mdの通り • clangは不要だった • Ultra96で実行 YOLO v3 19.4 秒 YOLO v3 tiny 1.03 秒 速い...
22.
GPU Maliによる高速化(の目論見) • Mali-400
MP • OpenCLが使えない • OpenGL Extentionが使えない → OpenGL ES 2.0 で頑張る • シェーディング言語(GLSL)で記述 バーテックス シェーダー フラグメント シェーダー 画面描画 GLSL GLSL 通常 頂点計算 テクスチャ計算 描画 GPGPU 使わない 演算 glReadPixelsで結果取得
23.
Ultra96でMaliの 動作確認 • Xilinx UG1209
チュート リアルアプリ「tricube」 がそのまま動作する
Download