実践 Deep Learning

実践 Deep Learning
株式会社 システム計画研究所
奥村 義和
1
会社概要
•
•
•
•
•
株式会社システム計画研究所/ISP
設立:1977年11月10日
資本金:8,000万円
所員数:約100名
事業内容
•
•
•
•
医療情報
制御・宇宙
通信・ネットワーク
画像処理
2
ISPと機械学習
・部位検出
・物体検出
・高速化 (CUDA)
機械学習
Deep Learning
大規模データ解析
次世代リコメンドシステム研究試作
3
本日の話題
• テーマ:手形状の認識
– 認識器の学習
– 認識器をJetson TK1で動かす
4
Video
目次
• 学習 - 理論編
• 学習 - 実践・実験編
• Jetson TK1で動かす
5
学習 - 理論編
6
機械学習の発展とDeep Learning
• データからパターンを学習
– 判別、回帰、クラスタリング、etc
• パーセプトロン 1960– 線形判別関数+Max抽出器
– 特徴空間を線形に分離
• 多層パーセプトロン 1980– 新しい学習則(バックプロパゲーション)
– 3層構造・非線形性
– 課題 : 局所解・ハイパーパラメタ・計算量・学習が収束しない
• SVM, Boosting, Random Forest, ... 1990– 大域解、ハイパーパラメタ減
• Deep Learning 2010-
f(Wx + b)
W
x
– BigData・Algorithm・HPC
– Neural Networkの復権
7
従来手法(SVM) と Deep Learning
• SVM
– 新しい手法に対するベンチマークとして標準的
– Pylearn、OpenCV等組み込み済み。
– 入力としてデータそのもの(画像)も可。
– ハイパーパラメータは存在するが、グリッドサーチ
による調整が一般的。
• Deep Learning
– 入力としてデータそのもの(画像)も可
– Caffe、Theano、Torch7など実装系も増えてきた
– ハイパーパラメータ多
8
SVM
• マージン最大化
• ソフトマージン
• カーネルトリック
9
SVM
• マージン最大化
• ソフトマージン
• カーネルトリック
10
SVM
• マージン最大化
• ソフトマージン
• カーネルトリック
•そもそも特徴空間上でうまくデータ分離できていると更なる
性能が期待できる → 特徴量
11
特徴量の例: HOG
•
•
•
•
Histograms of Oriented Gradients
局所領域における輝度の勾配方向のヒストグラム
一定領域に対して特徴量を定義。形状の表現が可能。
特徴次元数の例:
– 30x60x3画像 = 5400次元
– 1 cell 5x5, 1 block 3x3 cell, 9 bin => (4x10) x 3x3 x 9 = 3240次元
www.vision.cs.chubu.ac.jp/joint_hog/pdf/HOG+Boosting_LN.pdf
12
Deep Learning
• 層を重ねることにより特徴を自動獲得する
• いくつかの流派
...
– フィードフォワード vs 生成モデル
– Convolutional Neural Network
vs Layer-wise pre-training + fine-tuning
– etc …
• 画像においてはConvolutional
– 画像の特性(ピクセルと近傍)を利用
– 時系列etc
13
畳み込みニューラルネット(CNN)
概要
• 視覚野は階層構造
• Simple Cell
– 局所的
– 単純(棒状・角度)
• Complex Cell
– 複数Simple Cellの出力を足し合わせ
• Complex Cellの出力をより高次な細
胞に入力
http://ohzawa-lab.bpe.es.osaka-u.ac.jp/ohzawa-lab/rf/rf_j.htm
14
畳み込みニューラルネット(CNN)
全体像
入力画像
畳み込み
畳み込み
Pooling
Pooling
• 画像の特性を取り込んだモデル
• 局所的 → 大域的
• 画像フィルタ
• (畳み込み+プーリング層) ×N
入力画像
• 畳み込み ≒ Simple Cell
• Pooling ≒ Complex Cell
• Fully-Connectな層を挟み、出力層につなげる
http://deeplearning.net/tutorial/lenet.html#lenet
15
Fully Connect
出力
0.5
-0.5
-0.5
-0.3
0.4
-0.3
0.0
-0.8
0.7
重み
各層で反応する形状
Visualizing and Understanding Convolutional Networks
16
各層で反応する形状
17
DeepLearning/CNNの性能を伸ばす為の工夫
• データ拡張
– Data Augmentation
– Elastic Distortion
• 前処理
– PCA:色の偏りを利用
– GCN:平均0、分散1
– ZCA Whitening:ピクセル間の相関↓
18
理論編まとめ
•
•
•
•
Deep Learningと他の機械学習の比較
SVM
Convolutional Neural Network
データ拡張・前処理
19
学習 - 実践・実験編
20
作業フロー
データ収集
ラベル作成
検証
学習
21
キーポイント
データ収集
ラベル作成
【キーポイント】
今回のポイント
背景は?
手の大きさは?
手の角度は?
検証
照明条件は?
一般には…
入手可能な分量は?
正解ラベルの振りやす
さは?
学習
ノイズの程度は?
22
キーポイント
データ
【キーポイント】
学習アルゴリズムの決定
特徴量の定義
前処理の有無
ハイパーパラメタの調整
収集
検証
学習
23
キーポイント
データ
【キーポイント】
アプリケーションへの組み込み
収集
試作機・実環境での評価
誤判定データの蓄積
→誤判定データを学習データに
追加、再学習による性能向上
検証
学習
24
実験パターン
•
•
•
•
SVM vs Deep Learning
データ拡張効果
前処理の効果
両手対応
25
実験条件: データ
• 画像条件
– 40 x 40 pixel, RGB
– 男性: 14名、女性: 6名
• 各形状 約2,100枚 + 1,000枚
合計 3000 x 6 = 18,000枚
• 学習画像・テスト画像
– 学習画像に用いた画像はテスト画像にしない
– 撮った写真を学習用とテスト用に分割
– 2名分はテスト画像のみに利用
26
実験条件: SVM
• ガウスカーネル
• カーネル関数、ソフトマージン等の設定値は
デフォルト値
• グリッドサーチは利用せず
• 特徴量
– 画像そのもの
– HOG
• Cell size 5 x 5, Block size 5 x 5
• 予備実験により決定
• OpenCVを利用
27
実験条件: Deep Learning(CNN)
• ネットワーク構造
• CIFAR10データセットで有効なネットワークを微変更
– 32x32 RGB、10カテゴリ
– 今回は40x40, 8カテゴリ。32x32では手が小さくなった為。
• 学習係数は0.0001で固定
• Caffeを利用
28
Caffeについて補足
•
•
•
•
CNNに特化したミドルウェア
Pythonフロントエンド、C++/CUDA実装
CPU only / GPUで学習・推論可能
CIFAR10、MNIST、AlexNet、VCG、NIN等サンプ
ルが多数付属
• 学習済みの重みを配布(ModelZoo)
29
Caffeにおける学習手順
• CIFAR10などオープンデータを使う場合
– 多分デフォルトで対応しています...
• 独自データを読み込ませる場合
– 画像ファイルをBLOB形式に変換
– LMDBに投入
– ネットワーク定義ファイルを編集、データソースを
変更
• 後はtrainコマンドを実行すればOK
R G B R G B R G B
R R R G G G B B B
30
実験結果 - SVM
100
90
80
70
正 60
答
率 50
% 40
SVM
[
SVM+HoG
]
30
20
10
0
800枚/形状
全4,800枚
1200枚/形状
全7,200枚
31
2100枚/形状
全12,600枚
実験結果 - SVM vs Deep Learning
100
90
80
70
正 60
答
率 50
% 40
SVM
[
SVM+HoG
DL(2000回)
]
30
DL(4000回)
20
10
0
800枚/形状
全4,800枚
1200枚/形状
全7,200枚
32
2100枚/形状
全12,600枚
実験結果 - データ拡張効果
100
90
80
70
ベースライン
正 60
答
率 50
% 40
[
データ拡張
]
データ拡張
(4000回学習)
30
20
10
0
800枚/形状
全4,800枚
1200枚/形状
全7,200枚
33
2100枚/形状
全12,600枚
10倍にデータ
拡張
実験結果 - 前処理の効果
• PCAで色空間を変換
• 照明変動の大きい第1主成分を除去(2ch化)
100
90
80
70
[
ベースライン
]
正
60
答
率 50
% 40
PCA
30
20
10
0
800枚/形状
全4,800枚
1200枚/形状
全7,200枚
34
2100枚/形状
全12,600枚
両手対応
• 今までは右手のみ。
• 左右反転した画像を学習データに追加。右手でも左手でも認
識する様にした。
• クラス内分散が増えた場合に、どの程度性能に影響するか
計測した。正答率はテストデータにも左右反転画像を追加し
て計測した。
35
実験結果 - 左右反転
90
80
70
60
正
答 50
率
40
%
30
右手のみ版
[
両手対応版
]
20
10
0
800枚
1200枚
36
2100枚
JETSON TK1で動かす
37
実行環境
• 学習環境と実行環境は別
• 組み込み機器
– デジタルカメラ
– 車載
• PC
– ノートPC
– 各種装置バックエンド
• データセンタ
– クラウドサービスバックエンド
38
NVIDIA Tegra K1 SOC / Jetson TK1
• NVIDIA Tegra K1 SOC 搭載 評価ボード
• CUDA, OpenGL 4.4, Tegra Accelerated OpenCV
• 次世代機Tegra X1も近日発売予定。
GTC 2015では車載向けのDRIVE PXが発表。
http://www.nvidia.co.jp/object/jetson-tk1-embedded-dev-kit-jp.html
39
cuDNN
•
•
•
•
•
NVIDIAによるDeep Neural Networkの計算ライブラリ
Caffe/Theanoのエンジンとして利用可(v1)
Feed Forward / Back Propagation
Convolution, Pooling, Softmax
Activation ( ReLU, Sigmoid, Tanh )
15
13.28
学習時間 [分/一定回数]
10
4.45
5
K20機[分]
0.51
0
Caffe CPU
Caffe GPU Caffe + cuDNN
デフォルト実装
40
ISP + Jetson TK1 + cuDNN v2
• caffeをそのまま移植(Python / C++ / cuDNNv1)
呼び出しプログラム
=>判別に23~25ms...
cuDNNv2
Caffe
• caffeのpython部分を削除
C++
Python
=> 判別に20ms ~ 30ms
cuDNNv1
• cuDNNv2ベースのISP 独自実装
=>判別に5ms程度
– cuDNN v2はまだCaffeも未対応
– デバイス制御回りの工夫
カメラから画像取得
Loop
判別
画面表示
41
デモのご紹介
•
•
•
•
Jetson Tegra K1 + 手形状認識
スターターキット + 手形状認識 with GUI
Jetson Tegra K1 + リアルタイムクロマキー処理
DeepLearning BOX
技ラボ
検索
42