ディープラーニングの組み込み機器実装ソリューション ~GPU/CPU 編 ~ MathWorks Japan アプリケーションエンジニアリング部大塚慶太郎 Kei.Otsuka@mathworks.co.jp 2018 The MathWorks, Inc. 1
自動運転 : 車 歩行者等の物体認識 白線検出 組み込み GPU への実装 モデル GPU 実装 / 配布 3
医用画像 : 腫瘍等 特定の部位の検出 組み込み GPU への実装 モデル GPU 画像ソース : 米国 CDC DPDx Parasite Image Library https://www.cdc.gov/dpdx/malaria/index.html 実装 / 配布 4
ディープラーニング実装ソリューション 組み込み GPU への実装 デスクトップアプリケーション GPU Coder GPU Web/ エンタープライズアプリケーション 実装 / 配布 学習済みモデルのシェア 機器 デバイスへの実装 NVIDIA GPUs Intel Xeon Processors ARM CPUs 5
Agenda Introduction MATLAB 上でのディープラーニング開発フロー GPU Coder による効率的なGPU/CPU 実装 すぐに試せる例題集 まとめ 7
転移学習を使った画像分類 Deep Learning for Image Classification Demo : 血液検査画像の分類 3 つの寄生感染症を分類 バベシア マラリア原虫 トリパノソーマ 従来手法 ( 局所特徴 +SVM) では ~70% 程度の分類精度 8
コンピュータービジョン向けディープラーニングワークフロー 膨大なデータの取り扱い 学習済みネットワークの取り込み マルチ GPU クラスタ環境を使った効率的な学習 組み込み機器への実装 Dog Cat Bird GPU データアクセス モデル 学習 実装 / 配布 ワークフローの各ステップで MATLAB の使いやすさ 豊富な機能が開発者を強力にサポートします 9
コンピュータービジョン向けディープラーニングワークフロー : 実装 実装 / 配布 GPU 学習済みモデルのシェア 機器 デバイスへの実装 Pre-trained DNN Deep Neural Networks Deep Learning, machine learning Image Processing and Computer Vision Image filtering, feature detection/extraction Signal Processing and Communications FFT, filtering, cross correlation, 7x faster than state-of-art 700x faster than CPUs for feature extraction 20x faster than CPUs for FFTs 16
MATLAB から組み込み GPU への実装 : 血液検査画像の分類 17
Agenda Introduction MATLAB 上でのディープラーニング開発フロー GPU Coder による効率的なGPU/CPU 実装 すぐに試せる例題集 まとめ 18
GPU Coder : 高度な関数解析機能が効率の良いコード生成を実現 GPU Coder CUDAカーネル生成最適なメモリ配置データ転送最小化 ライブラリマッピング ループ最適化 データ依存性解析 データ局所性解析 GPU メモリ配置 データ依存性解析 動的メモリコピー削減 GPU 19
ホスト カーネル両方のプログラムを生成可能 MATLAB Coder のコード生成機能を利用 C/C++ CUDA Kernel C/C++ 周波数 : ~4GHz コア数 : ~24 シーケンシャルな処理が得意 CUDA kernels CUDA Kernel C/C++ CPU GPU CUDA Cores GPU Memory Space ARM Cortex CPU Memory Space 周波数 : ~1.5GHz コア数 : ~6000 並列処理が得意 GPU GPU アクセラレータ 20
ディープラーニングを含む ビジョン系アルゴリズムの実装が可能 前処理 ( コントラスト調整等 ) 学習済みネットワーク 後処理 (ROI 抽出等 ) 画像前処理 後処理 + ディープラーニングでコード生成可能! MATLAB 21
組み込み機器への実装ワークフロー MATLAB アルゴリズム (functional reference) Build type MATLAB から生成し CUDA コードを直接 Call Desktop GPU 手書きした main 関数 (CC++) から生成した CUDA コードを Call Desktop GPU Embedded GPU 手書きした main 関数 (CC++) から生成した CUDA コードを Call.mex.lib Cross-compiled.lib C++ C++ 1 機能確認 2 単体検証 3 統合検証 4 リアルタイム検証 22
GPU Coder の使い方 : コードの準備 DNN を含まない場合 専用プラグマを挿入し コード生成対象となる関数を明示 function s = vecsum(v) s = 0; coder.gpu.kernelfun(); for i = 1:length(v) s = s + v(i); end end 以下の関数でもカーネル生成が行われます function s = vecsum(v) coder.gpu.kernelfun(); s = sum(v); end 23
GPU Coder の使い方 : コードの準備 - DNN に対してコード生成を行う場合 予め DNN モデルを mat 形式で保存し 専用関数でロード function out = mybsnet(in) persistent mynet; if isempty(mynet) mynet = coder.loaddeeplearningnetwork( nettransfer.mat, nettransfer ); end out = mynet.predict(in); * コード生成に利用できるメソッドは predict, activations のみ (R2018a 時点 ) 24
GPU Coder の使い方 : 専用 App を利用してコード生成 25
組み込み機器への実装ワークフロー MATLAB アルゴリズム (functional reference) Build type MATLAB から生成し CUDA コードを直接 Call Desktop GPU 手書きした main 関数 (CC++) から生成した CUDA コードを Call Desktop GPU Embedded GPU 手書きした main 関数 (CC++) から生成した CUDA コードを Call.mex.lib Cross-compiled.lib C++ C++ 1 機能確認 2 単体検証 3 統合検証 4 リアルタイム検証 27
組み込み GPU への実装 : ターゲットハードウェア用にクロスコンパイル 変更が必要な箇所は 2 つ 1. ビルドタイプを lib に変更 2. 適切なツールチェーンを選択 28
CPU をターゲットとしたコード生成も可能 Intel MKL-DNN Library cnncodegen(net,'targetlib','mkl-dnn'); Deep Learning Networks GPU Coder NVIDIA TensorRT & cudnn Library cnncodegen(net,'targetlib','tensorrt'); ARM Compute Library cnncodegen(net,'targetlib','arm-compute'); 29
ターゲットハードウェアとコード生成方法の対応について GPU Coder codegen もしくは GPU Coder App CNN 以外 ( 画像前処理 後処理 ) 含めてコード生成可能 ターゲットハードウェアは GPU のみ Deep Learning Networks cnncodegen Intel MKL-DNN Library ARM Compute Library NVIDIA TensorRT & cudnn Library CNN の部分のみコード生成可能 ターゲットハードウェアを複数選択可能 30
歩行者検出用ネットワークの Raspberry Pi3 実装例 UUNet( 歩行者検出用ネットワーク ) Technique 固定サイズの検索窓を利用 歩行者のサイズは固定 CNN は画像分類の目的でのみ利用 レイヤ数 12 ウェイトサイズ Jetson TX2 でのフレームレート RaspberryPi3 でのフレームレート 3 MB ~66 FPS ~7 FPS 分類精度 85 % RaspberryPi3 31
One MATLAB, 5 hardware platforms Desktop GPU Embedded GPU Desktop CPU Raspberry Pi board Android phone 32
Agenda Introduction MATLAB 上でのディープラーニング開発フロー GPU Coder による効率的なGPU/CPU 実装 すぐに試せる例題集 まとめ 33
GPU Coder ですぐに試せるディープラーニングサンプル Alexnet ~130 Fps (K40c) 転移学習 Lane Detection CNN の出力がレーンを表す放物線の係数となる (y = ax^2 + bx + c) Image Lane detection CNN Left lane co-efficients Right lane co-efficients Post-processing (find left/right lane points) Image with marked lanes GPU coder を利用し 画像の前処理 後処理を含むアルゴリズム全体をコード生成 34
GPU Coder ですぐに試せるディープラーニングサンプル ~66 Fps (Tegra X1) ~477 Fps Pedestrian Detection Logo Detection ~50 Fps Traffic Sign Detection 35
GPU Coder ですぐに試せるディープラーニングサンプル Running in MATLAB Generated Code from GPU Coder GPU Coder で ~20 倍程度高速化 36
GPU Coder ですぐに試せるコンピュータービジョン系サンプル 霧 ( ノイズ ) 除去 5x speedup 線強調フィルタ 3x speedup 距離変換 8x speedup ディスパリティ算出 50x speedup レイトレーシング 18x speedup 特徴点抽出 700x speedup 37
Frames per second Alexnet Inference Frame-Rate パフォーマンス (NVIDIA Titan Xp を利用 ) MATLAB GPU Coder (R2017b) 2x 5x 7x mxnet (0.10) MATLAB (R2017b) Caffe2 (0.8.1) TensorFlow (1.2.0) Batch Size CPU Intel(R) Xeon(R) CPU E5-1650 v3 @ 3.50GHz Testing platform GPU cudnn Pascal Titan Xp v5 38
Agenda Introduction MATLAB 上でのディープラーニング開発フロー GPU Coder による効率的なGPU/CPU 実装 すぐに試せる例題集 まとめ 41
まとめ : ディープラーニングの組み込み機器実装ソリューション ~GPU CPU 実装編 ~ 1 統合開発環 MATLAB コンピュータービジョン ディープラーニングのアルゴリズム開発環境として強力な MATLAB アルゴリズム開発から GPU まで 同一環境上で実現可能 2GPU Coder CUDAの文法を知らなくても自動コード生成でGPUを利用可能エンジニアのスキルに依存しない 再現性の高いコード生成 GPU 以外のデバイス, ARM 系プロセッサにも実装可能すぐに始められるサンプル集 MATLAB を使って, コンピュータービジョン ディープラーニングのアルゴリズムの開発から実装までを効率的に実現! 42
2018 The MathWorks, Inc. MATLAB and Simulink are registered trademarks of The MathWorks, Inc. See www.mathworks.com/trademarks for a list of additional trademarks. Other product or brand names may be trademarks or registered trademarks of their respective holders. 43
Mean Squared Error (mse) GPU Coder 関連製品 GPU Coder に必須となります MATLAB Coder MATLABプログラムからC/C++ コードを生成 MATLAB 上で アルゴリズム開発から実装までフローを統合 iterate verify / accelerate Neural Network Toolbox ニューラルネットワークの構築 学習 データフィッティング クラスタリング パターン認識 深層学習 GPUによる計算の高速化 Best Validation Performance is 0.01227 at epoch 26 10 0 Train Validation Test Best 10-1 10-2 10-3 0 5 10 15 20 25 30 32 Epochs Parallel Computing Toolbox MATLAB & Simulink と連携した並列処理 対話的な並列計算実行 GPGPU による高速演算 ジョブおよびタスクの制御 コンピュータ ローカル MATLAB デスクトップ Embedded Coder MATLAB プログラム /Simulink モデルから組込み用 C/C++ コードを自動生成 44
GPU Coder 関連製品 : 画像処理 コンピュータービジョン Image Processing Toolbox コーナー 円検出 幾何学的変換 各種画像フィルタ処理 レジストレーション ( 位置合せ ) セグメンテーション ( 領域分割 ) 画像の領域の定量評価 Computer Vision System Toolbox カメラキャリブレーション 特徴点 特徴量抽出 機械学習による物体認識 動画ストリーミング処理 トラッキング ステレオビジョン 3D 表示 Image Acquisition Toolbox デバイスから画像 動画直接取り込み フレームグラバボード DCAM, Camera Link GigE Vision, Webカメラ Microsoft Kinect for Windows Statistics and Machine Learning Toolbox 機械学習 多変量統計 確率分布 回帰と分散分析 実験計画 統計的工程管理 45