ディープラーニングの システムへの展開 ~ エッジからクラウドまで ~ アプリケーションエンジニアリング部福本拓司 2015 The MathWorks, Inc. 1
機械学習 ディープラーニング関連セッション 2
ディープラーニング学習のイメージできましたでしょうか? カメラ データベースでのデータ取得 簡潔なコーディングで学習 & 検証 豊富なサンプルコード ユーザー成功事例 Deep Dream 可視化 Layer Activations ラベリング モデル作成 学習曲線 3
ネットワーク学習からシステムへの展開へ マルチ GPU ワークステーションクラウド モデル学習環境 パラメータ調整 高精度を目指す 速度 コスト 使いやすさ システム展開 高い精度だけでなく 利用用途 環境に最適化された運用が必要 4
アジェンダ システム展開のための MATLAB 活用術 システム化を踏まえたモデル選択 ターゲットの選択とシステム展開 5
ネットワークタイプの特徴 シリーズネットワーク DAG ネットワーク 大きいネットワークサイズ小さい 演算がシンプル高速 演算量に対する推論速度 メモリアクセスが複雑低速 AlexNet, VGG 他モデル例 GoogleNet, ResNet 他 6
推論の高速化 & メモリ消費の削減 精度はばっちり AlexNet は 1000 種類 私たちは数種類の分類 もう少しサイズ小さくならないですか? AlexNet > 200MB 速度面を気にする ネットワークサイズを気にする Shallow な層を組んでみましょう GPU Coder を活用しましょう SqueezeNet( 5MB) がお勧めです 再学習モデルを効率化したい モデルを修正する方法があります 7
学習済みネットワークの最適化 channel Activation size channel channel 8
学習済みネットワークの最適化 取り除く channel channel channel Channel を減らせば演算量が減る = Channel Pruning ( prune: 小枝を刈り取る ) どこの Channel をとるのか? channel 参照 :Channel Pruning for Accelerating Very Deep Neural Network, Yihui He, ICCV 9
層の出力のヒストグラムの解析 ネットワークのWeightや演算後のActivationの結果を踏まえて再学習後のネットワーク (net) からWeightを取り出し net.layers(2).weights 評価画像セットの conv_2 層での出力を取り出し act2 = activations(net,imdsvalidation,'conv_2','outputas','channels'); 活性化のヒストグラム分布が限りなくゼロに近い この 9 つの Channel の情報は判定に利用されていないのでは? 10
Pruning の効果 ( 例 ) AlexNet Channel Pruning 効果 Pruning 前 Pruning 後 ファイルサイズ 207MB 78MB (63% 削減 ) 精度 93.2 % 89.4 % 推論速度 (CPU) 25.1 s 19.9 s (26 % 高速化 ) 推論速度 (GPU ノートPC 用 ) 13.0 s 10.3 s (26% 高速化 ) 推論速度 (GPU デスクトップ用 ) 4.32 s 4.17 s (4 % 高速化 ) 10 種類の分類 AlexNet 推論 : 約 700 枚 Minibatchsize=128 ファイルサイズ削減効果大 推論速度も向上 ( 高性能 GPU を使う場合は効果少ない ) 学習時間の短縮にもつながる 精度はトレードオフ 11
Pruning の流れ channel 1 指定 Channel の Weight の取り出し Pruning 後の学習曲線 2 新規レイヤに移植 3 ネットワークのレイヤの取り換え 12
スクラッチで作成する場合 Stride を変更 Factorization 3x3 の畳み込みを 1x3 > 3x1 の 2 層で組むことで計算量が 2/3 に Stride を大きくすると 演算量減少 精度はトレードオフ 13
アジェンダ システム展開のための MATLAB 活用術 システム化を踏まえたモデル選択 ターゲットの選択とシステム展開 14
システムへの統合 ネットワークの学習 / 評価が終わったらシステムでの運用へ MATLAB Production Server TM クラウドで利用 Cloud Web Cluster Mobile MATLAB Compiler / MATLAB Compiler SDK Excel Add-in Hadoop Standalone Application C/C ++ Java.NET PC で利用 GPU Coder MATLAB Coder 3 種類の統合へのパスをサポート MATLAB ライセンスがない環境で利用可能 NVIDIA cudnn/tensorrt TM MKL-DNN (Intel Xeon ) Compute Library (Arm Neon TM ) 15
システムへの統合 複数のターゲット 複数のフレームワークのモデルを利用可能 MATLAB Production Server TM クラウドで利用 Cloud Web Cluster Mobile MATLAB Compiler / MATLAB Compiler SDK アプリケーション Excel Add-in Hadoop Standalone Application C/C ++ Java.NET PC で利用 GPU Coder MATLAB Coder NVIDIA MKL-DNN Compute Library cudnn/tensorrt TM (Intel Xeon ) (Arm Neon TM ) 16
アプリケーション化のための機能 前処理 OK 特徴抽出 + 分類 候補領域抽出 リサイズ CNN NG 候補領域ごとに CNN で分類 前処理を効率的に統合してアルゴリズム構築 17
L=1024 判定結果の可視化 後処理 CAM(Class Activation Mapping) による特徴可視化 w 入力画像 CAM 可視化 L=1024 Flatten Fully Connected dotproduct = bsxfun(@times,imageactivations,weightvector); classactivationmap = sum(dotproduct,3); 参考資料 : Learning Deep Features for Discriminative Localization Bolei Zhou etc, Computer Science and Artificial Intelligence Laboratory, MIT OK ナット表面全体に注目 NG キズの部分に反応 学習済みネットワークがどのような特徴をとらえているかを可視化後処理も含めて CUDA コード生成可能 18
MATLAB 開発における実行システムの選択 PC & GPU サーバー / クラウド組み込み GPU 組み込み CPU 19
PC で使う (MATLAB Runtime を利用 ) MATLAB Compiler TM / MATLAB Compiler SDK TM メリット OS 選択 (Windows/Mac/Linux) GUI 操作 MATLAB で開発したものをそのまま実行可能 実行ファイル ライブラリとして配布 GPU 演算 (Parallel Computing Toolbox) 利用場面 診断 (GUI 活用 ) 既存システムに統合 (.NET/C 他 ) マシンコストをかけられる ( 台数少 ) モデルの変更が多い ( プロトタイプ ) Standalone Application MATLAB Compiler TM Excel Add-in Hadoop MATLAB C/C ++ MATLAB Compiler SDK TM Java.NET 配布制限 追加コストなし 無償の Runtime 20
プロトタイプ段階では現場専門家と AI 開発者の協力が必要 判断の経験をもつ現場専門家 AI 開発者 Deep Learning の詳しいことはわからない これはどっちに分類? 現場の職人さんじゃないと 21
必要な操作を GUI にし EXE/ ライブラリ /WebApp 配布 現場のスペシャリストが推論間違いを修正 誤判定画像のとりだし 修正後のラベルでフォルダ分け 再学習 推論精度の確認 ラベルの訂正 再学習までをマウス操作で Standalone Application 22
PC で使う (Intel MKL-DNN) MATLAB Coder TM メリット OS 選択 (Windows/Linux) GPU がない環境下で高速化 Runtime 不要 MATLAB Coder 利用場面 比較的規模の大きい検査装置 ( ライン検査等 ) 既存システムに統合 (.NET/C 他 ) MKL-DNN 23
Intel Core TM i7 + MKL-DNN で実行した様子 CVST Codegen + MKL-DNN AlexNet CVST Codegen + MKL-DNN YOLO OpenCV + MKL-DNN AlexNet OpenCV + MKL-DNN ResNet-50 24
MATLAB 開発における実行システムの選択 PC & GPU サーバー / クラウド組み込み GPU 組み込み CPU 25
サーバー / クラウドで使う MATLAB Production Server TM メリット Restful な Server を立てられる (WEB Server から http リクエスト ) クライアント側に Runtime が不要 同時アクセス / 複数ワーカーに対応 利用場面 クラウドサービスのバックエンド スマートフォンからのアクセス モデルの集中管理 & 実行.ctf HTML/JavaScript PC MATLAB Production Server スマートフォン 26
Demo: スマホでディープラーニング https://deeplearning.mwlab.io ネットワークは 2 種類から選択 1. Pre-trained AlexNet -1000 種類 2. Re-trained SqueezeNet 1. QR コードでページにアクセス 2. ネットワークを選択して写真をとる 3. 数秒後分類結果の表示 ボトル カン コイン お皿 コップ 顔 ノート PC マウス ペン 腕時計 27
クラウドへの展開 MATLAB Production Server 1. URL アクセス MATLAB Production Server 2. Webページのリターン 3. 画像アップロード 6. 結果の表示 Web Server (NodeJS) 4. リクエスト 5. 結果 Request Broker 遠隔地でスマートフォンで判定 活用しながら画像収集の継続 ネットワークの再学習 精度向上 分類器 mat 学習済みネットワーク mat 短期間でシステムとして使い始めることが重要です!! 28
MATLAB 開発における実行システムの選択 PC & GPU サーバー / クラウド組み込み GPU 組み込み CPU 29
組み込み GPU GPU Coder TM メリット 高速並列演算に特化 ( ディープラーニングで費用対効果〇 ) I/O 利用場面 高速なエッジ処理 ライン検査 自律型組み込みシステム向け 自動運転 自律型ロボット ドローン 関数解析機能により効率の良いコード生成 GPU Coder CUDAカーネル生成最適なメモリ配置データ転送最小化 30
GPU Coder : 高度な関数解析機能が効率の良いコード生成を実現 GPU Coder CUDAカーネル生成最適なメモリ配置データ転送最小化 ライブラリマッピング ループ最適化 データ依存性解析 データ局所性解析 GPU メモリ配置 データ依存性解析 動的メモリコピー削減 MATLAB から CUDA C/C++ コードを自動生成します 31
CPU-GPU 間のデータ転送最適化について A = for i = 1:N A(i) end imfilter 理想的な memcpy の配置位置は? A = cudamemcpyhtod(ga, a); kernel1<<< >>>(ga) ) cudamemcpydtoh( ) cudamemcpyhtod( ) imfilter_kernel( ) cudamemcpydtoh( ) 都度転送 最適なデータ転送 K1 K2 K3 K1 K2 K3 32
GPU Coder : 専用 App でコード生成可能か確認 入力データ型を指定 コード生成時の問題を確認 コード生成対象となる関数を指定 33
GPU Coder : コード生成とレポート確認 ビルドタイプを指定してコード生成 34
組み込み GPU でのアルゴリズム調整は? NVIDIA Hardware Support Package (HSP) ターゲットボードの選択 MATLAB から直接ボードにアクセス可能 ターゲットボードのパラメータ入力 Jetson / Drive platform 35
NVIDIA hardware support package Webcam NVIDIA GPU ハードウェアへのアクセスと実装がより容易に行えます ターゲットハードウェアに接続されたセンサへのアクセス GPU Coder により生成されたファイル類のコピー リモートビルド User Host PC Target Hardware Target Display ホスト PC をターゲットに接続 MATLAB はホスト PC 上で動作 HW オブジェクトを利用してターゲットとの接続を確立 WebCam 等ペリフェラルへのアクセス WebCam から画像の取得 アルゴリズムやパラメータの調整 MATLAB I/O モード 画像処理 on MATLAB 生成したコードの配布 実装モード ターゲット上でビルド & 実行 GPU Coder を利用してコード生成 リモートビルド & 実行 ターゲットに接続されたディスプレイで結果を確認 36
処理枚数 /s Resnet-50 の推論速度 高速 1200 MATLAB GPU Coder (TensorRT v3.0.4) 1000 TensorFlow 1.7 (TensorRT v3.0.4) 800 600 400 200 2.5x MATLAB GPU Coder (cudnn v7) TensorFlow 1.6 (cudnn v7) 0 1 2 4 8 16 32 テスト環境 Batch サイズ CPU Intel Xeon CPU E5-1650 v4 @ 3.60GHz, 64 GB RAM GPU Pascal Titan Xp, 12 GB RAM 37
% CPU memory % GPU memory R2018b GPU Coderにおける最適化バッファーの最小化 Resnet-50 ( TitanXP ) 100 バッファーの最小化 80 60 40 20 0 1 8 16 32 64 128 256 512 1024 Batch サイズ Resnet-50 ( Intel Xeon ) 80 60 40 20 0 1 16 32 64 128 256 512 Batch サイズ 38
処理枚数 /s R2018b GPU Coder における最適化 : レイヤーフュージョン 700 600 500 Resnet-50 ( TitanXP ) (Layer fusion) バッファーの最小化 400 300 レイヤーフュージョン 200 100 0 1 16 32 64 128 256 Batch サイズ conv conv relu 1 Conv +relu 複数レイヤを一つに置き換え BN relu 2 Conv +relu 39
Images / sec R2018b GPU Coder における最適化 : 自動調整 Resnet-50 ( TitanXP ) バッファーの最小化 800 レイヤーフュージョン 700 (Layer fusion + auto-tuning) 600 500 (Layer fusion) 自動調整 400 300 200 100 0 1 16 32 64 128 256 Batch size 40
GPU Coder は PC の推論も高速化 GPU Coder GPU Coder MATLAB (Parallel Computing Toolbox TM ) CUDA MEX xxxx.cu 生成した CUDA コードを MEX 化して MATLAB に取り込み Intel Xeon CPU 3.6 GHz NVIDIA libraries: CUDA 9 - cudnn 7 41
MATLAB 開発における実行システムの選択 PC & GPU サーバー / クラウド 組み込み GPU 組み込み CPU 42
CPU 用ライブラリの活用 (Arm Compute library) MATLAB Coder TM メリット 低コストデバイス 低消費電力 サイズ I/O MATLAB Coder 利用場面 多数のエッジ処理が必要 高速性が不要 外観検査 ( 高速性不要 ) IoT メンテナンス 環境 / 気象 Compute Library 43
ターゲットハードウェアとコード生成方法の対応について codegen もしくは GPU Coder App CNN+ 画像前処理 後処理も含めてコード生成可能 Deep Learning Networks cnncodegen Intel MKL-DNN Library Arm Compute Library NVIDIA TensorRT & cudnn Library CNN の部分のみコード生成可能 ターゲットハードウェアを複数選択可能 44
パラメータ変更で簡単なターゲット変更 Intel MKL-DNN Library cnncodegen(net,'targetlib','mkl-dnn'); NVIDIA TensorRT TM & cudnn Library cnncodegen(net,'targetlib','tensorrt'); Deep Learning Networks Arm Compute Library cnncodegen(net,'targetlib','arm-compute'); 45
システムへの統合 複数のターゲット 複数のフレームワークのモデルを利用可能 MATLAB Production Server TM クラウドで利用 Cloud Web Cluster Mobile MATLAB Compiler / MATLAB Compiler SDK アプリケーション Excel Add-in Hadoop Standalone Application C/C ++ Java.NET PC で利用 GPU Coder MATLAB Coder NVIDIA MKL-DNN Compute Library cudnn/tensorrt TM (Intel Xeon ) (Arm Neon TM ) 46
まとめ ディープラーニングシステム展開における MATLAB 活用のメリット PC エッジデバイス クラウドなど複数のターゲットパスに対応 前処理 可視化を含めて開発し統合が可能 推論高速化には GPU Coder が効果的 (TensorRT に対応 ) プロジェクトごとにターゲットは変わります 柔軟な選択が可能な MATLAB をご活用ください 47
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. 48
Next Steps : 画像処理 ディープラーニング無料セミナー 申し込みは弊社ウェブサイトより https://jp.mathworks.com/company/events/seminars/ipcv-tokyo-2607088.html 日時 :2018 年 11 月 20 日 13:30-17:00 場所 : 秋葉原 UDX Next-1(JR 秋葉原駅より徒歩 2 分 ) ( アクセス :http://www.udx-n.jp/access.html 画像処理 ディープラーニング関連機能をご紹介! MATLABではじめる画像処理ワークフロー 例題で実感するMATLABの画像処理 ディープラーニング 自動運転 ロボティクス領域における画像 LiDAR 点群処理と実装 49
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 機械学習 多変量統計 確率分布 回帰と分散分析 実験計画 統計的工程管理 50
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++ コードを自動生成 51