1
ハンズオンラボ2
DIGITS による物体検出入門村上真奈
NVIDIA CUDA & Deep Learning Solution ArchitectNVIDIA Corporation
AGENDAディープラーニングとはQwiklab/Jupyter notebook/DIGITSの使い方DIGITSによる物体検出入門ハンズオン
ディープラーニングとは
機械学習とディープラーニングの関係
機械学習
ニューラルネットワーク
ディープラーニング
14
様々な分野でディープラーニングを応用
インターネットとクラウド
画像分類音声認識言語翻訳言語処理感情分析推薦
メディアとエンターテイメント
字幕ビデオ検索
リアルタイム翻訳
機械の自動化
歩行者検出白線のトラッキング信号機の認識
セキュリティと防衛
顔検出ビデオ監視衛星画像
医学と生物学
癌細胞の検出糖尿病のランク付け
創薬
15
人工ニューロン神経回路網をモデル化
スタンフォード大学cs231講義ノートより
神経回路網
w1 w2 w3
x1 x2 x3
y
y=F(w1x1+w2x2+w3x3)
F(x)=max(0,x)
人工ニューロン
人工ニューラルネットワーク単純で訓練可能な数学ユニットの集合体
ニューラルネットワーク全体で複雑な機能を学習
入力層 出力層
隠れ層
十分なトレーニングデータを与えられた人工ニューラルネットワークは、入力データから判断を行う複雑な近似を行う事が出来る。
ディープラーニングの恩恵ディープラーニングとニューラルネットワーク
ロバスト性
特徴量の設計を行う必要がない。 – 特徴は自動的に獲得される学習用データのバラつきの影響を押さえ込みながら、自動的に学習していく
一般性
同じニューラルネットワークのアプローチを多くの異なるアプリケーションやデータに適用する事が出来る
スケーラブル
より多くのデータで大規模並列化を行う事でパフォーマンスが向上する
ディープラーニングのアプローチ
認識:
犬
猫
蜜穴熊
エラー
犬猫
アライグマ
犬
トレーニング:
モデル
モデル
データを訓練データ(training data)と検証データ(validation data)に分割する
訓練データと検証データディープラーニングの学習
収集したデータ
検証データ(validation data)
訓練データ(training data)
重みの更新(学習)に使用
汎化性能の確認に使用
訓練データによる重みの更新ディープラーニングの学習
訓練データ
猫
犬
熊検証データ
訓練データをニューラルネットワークに与え、正解ラベルと出力結果の誤差が無くなるように重みWの更新を繰り返す
猫
犬
狸
正解は犬
訓練データによる重みの更新ディープラーニングの学習
訓練データ
猫
犬
熊検証データ
訓練データをニューラルネットワークに与え、正解ラベルと出力結果の誤差が無くなるように重みWの更新を繰り返す
猫
犬
狸
正解に近づくように、各層の重みを更新する
学習ループ訓練データと検証データの役割
訓練データ
猫
犬
熊検証データ
すべての訓練データを用いて重み更新を行う + すべての検証データで汎化性能を確認⇒ 1 エポック(epoch)と呼ぶ
猫
犬
狸
検証データで現在の汎化性能を確認
(重みの更新には使用しない)
学習時の性能の確認訓練データと検証データの役割
各エポックで訓練データをニューラルネットワークに与えた際の間違い率と検証データを与えた際の間違い率を確認しながら学習を進める必要がある
エラー数
エポック0
training
validation
エラー数
エポック0
training
validation学習成功 学習失敗(過学習)
24
畳込みニューラルネットワーク(CNN)• 画像認識・画像分類で使われる、高い認識精度を誇るアルゴリズム。畳込み層で画像の特徴を学習
目的
顔認識
トレーニングデータ
1,000万~1億イメージ
ネットワークアーキテクチャ
10 層
10 億パラメータ
ラーニングアルゴリズム
30 エクサフロップスの計算量
GPU を利用して30日
畳込み層 全結合層
25
畳込み層
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
1
2
2
1
1
1
0
1
2
2
2
1
1
0
1
2
2
2
1
1
0
0
1
1
1
1
1
0
0
0
0
0
0
0
4
0
0
0
0
0
0
0
-4
1
0
-8
ピクセル値(src)
畳み込み
カーネルピクセル値(dst)
カーネルの中心の値はソースピクセル上に置かれている。
ソースピクセルはフィルタを自身の積の値に更新される。
26
ディープラーニング・フレームワーク
27
ディープラーニング・フレームワーク
Mocha.jl
ディープラーニング・フレームワークGPUで高速化されているディープラーニング・フレームワークが多数存在
https://developer.nvidia.com/deep-learning-frameworks
28
ディープラーニング・フレームワークCaffe Torch7 Theano TensorFlow Chainer
インターフェース C++/Python/Matlab Lua/C Python C/C++/Python Python
cuDNN 5 5 5 5 5
ライセンス BSD-2 BSD BSD Apache 2.0 MIT
マルチGPU(1ノード) ○ ○ ○ ○
モデルの柔軟性 △ ◎ ◎ ○ ◎
CNN ○ ○ ○ ○ ○
RNN○
#2033○ ○ ○ ○
RBM × ○ ○ ○ ○
備考高速
Caffe Model Zoo多数のアルゴリズムを
サポート自動微分
自動微分TensorBoard
Define by Run
CuPy
29 1/18/2
017
CAFFE
30
Caffeとは?
• コアエンジンはC++/CUDA
• コマンドライン、Python、Matlabインターフェース
• 高速, コードのテストが良く行われている
• 前処理および開発ツール、リファレンスモデルやサンプルコードが充実
• 画像データマネージメント
• GPUによる高速化の機能
• コミュニティが大きく活動が盛ん
BVLCによって開発されたディープラーニング開発用のオープンフレームワーク
caffe.berkeleyvision.org
http://github.com/BVLC/caffe
31
Caffeの特徴データの前処理とマネージメント
データ取り込みフォーマット
LevelDB または LMDB データベース
イン-メモリ(C++とPython のみ)
HDF5
画像ファイル
前処理ツール
RAWデータからのLevelDB/LMDB生成
トレーニングセットとバリデーションセットのシャッフル生成
平均画像の生成
データ変換
画像のクリッピング、リサイズ、ミラーリング
差分画像
32
Caffeの特徴
Protobuf モデルフォーマット
ネットワーク構造定義および学習パラメータの定義に使われる
様々なフォーマットに対応Caffeのオートジェネレータで生成可能。構文チェック機能も存在
コーディングが必要ない
name: “conv1”
type: “Convolution”
bottom: “data”
top: “conv1”
convolution_param {
num_output: 20
kernel_size: 5
stride: 1
weight_filler {
type: “xavier”
}
}
ディープラーニングモデル定義
33
Caffe特徴
ロス関数:
Classification
Softmax
Hinge loss
Linear regression
Euclidean loss
Attributes/multi-classification
Sigmoid cross entropy loss
and more…
使用可能レイヤー:
Convolution
Pooling
Normalization
活性化関数:
ReLU
Sigmoid
Tanh
and more…
ディープラーニングモデル定義
34 1/18/2
017
DIGITS
35
学習データの作成 モデルの作成 モデルのテスト学習過程の可視化
GPUで高速化されたディープラーニングトレーニング・システム
NVIDIA DIGITS
http://developer.nvidia.com/digits
36
NVIDIA DIGITS
手元のPCからWebブラウザでアクセス可能なディープラーニングトレーニングシステム
GPUで高速化されたディープラーニングトレーニング・システム
ユーザーインターフェース
レイヤーの可視化
学習モデルの作成
データセットの作成
学習過程の可視化
Chainer
GPUGPU HW クラウドGPUクラスタマルチGPU
Theano
Torch
CaffecuDNN, cuBLAS
CUDA
学習
NVCaffecuDNN, cuBLAS
CUDA
• 画像分類と物体検出の為のDNNのデザインと可視化の機能を提供
• NVIDIAが最適化したフレームワークで高速に学習が可能
• ハイパーパラメータ・チューニングを強力にサポート
• DL学習のジョブを簡単にスケジューリング、リアルタイムにaccuracyとlossを監視
• 様々な学習データフォーマット、フレームワークに対応
DIGITSの使い方
DIGITSの使い方1
1. 学習データセットの作成
2. 学習モデルの作成、学習開始
3. 学習済みモデルのテスト
DIGITSのワークフロー
学習
推論(インファレンス)
DIGITSの使い方2ホーム画面の戻り方
ホーム画面に戻る
DIGITSの使い方3データセット作成/モデル作成
データセット作成
モデル作成
DIGITSの使い方4データセット作成/モデルの作成
物体検出したい場合[Object Detection]を選択
画像分類したい場合[Classification]を選択
43
DIGITSの使い方5
DIGITSは、Caffeを使って学習を行う事が出来る。
ネットワークの構造の変更方法
Caffeが選択されている事を確認
Alexnetが選択されている
モデルの変更画面に遷移
44
DIGITSの使い方5
caffeのモデル定義ファイル(prototxt)を書き換える
ネットワークの構造の変更方法
Layer{}でくくってある部分が一つの層
Qwiklab/jupyter notebook
Qwiklabのアクセス方法
https://nvlabs.qwiklab.com/にアクセスし、[DLI2017-Japan]->[エヌビディアDIGITSによる物体検出]を選択
DIGITSによる物体検出入門
①
②
③
Qwiklabのアクセス方法
「ラボを開始」を選択、インスタンスの起動を待つ
DIGITSによる物体検出入門
①
②
56
Jupyter notebookの使い方
1/18/2017
タイマーカウントダウン
実行中は黒丸それ以外は白丸
57
Jupyter notebookの使い方
1/18/2017
In []: と書いてあるセルは動的実行が出来ます
選択されていると緑の枠が表示される
再生ボタンでセルの実行が出来る(Shift-Enterでも良い)
58
ハンズオンを開始しましょう
ディープラーニング手法による物体検出
Right Whale Recognition(https://www.kaggle.com/c/noaa-right-whale-recognition)
のデータを使って物体検出を学ぶ
DIGITSによる物体検出入門
ディープラーニング手法による物体検出
今回のラボでは以下の4つの物体検出方法を紹介する
• 検出方法1:画面のスキャン + CNN 演習あり
• 検出方法2:候補領域 + CNN
• 検出方法3: FCN(Full Convolutional Network) 演習あり
• 検出方法4: DetectNet 演習あり
DIGITSによる物体検出入門
検出方法1.画面のスキャン + CNN
「鯨」か「非鯨」を判別するニューラルネットワークをトレーニングする
基本アイディア
検出方法1.画面のスキャン + CNN
画像を分割、それぞれの領域を畳込みニューラルネットワーク(CNN)に通す
基本アイディア
Whale
Not Whale
検出方法1.画面のスキャン + CNN
1. Jupyter notebookからDIGITSを起動し、「鯨」「非鯨」を判別するニューラルネットワークを作成する。
1. DIGITSで[Datasets]->[Image Classication]から学習データを作成する
2. DIGITSで[Models]->[Image Classication]からモデル作成と学習をする
2. 学習が終わったら、ジョブIDを控える
3. Jupyter notebookに戻り、先ほど学習したモデルを用いて推論(インファレンス)処理を行う
ハンズオン
検出方法1.画面のスキャン + CNNハンズオン(結果)
2.候補領域 + CNN
1の場合とアイディアは同じ。違いは、画像を単純に分割するのではなく、候補領域を求めてから畳込みニューラルネットワーク(CNN)に通す
基本アイディア
Whale
Not Whale
3.FCN(Full Convolutional Network)
全結合層を持たない、すべて畳込み層のネットワークを使って物体検出を行う
http://www.image-net.org/challenges/LSVRC/2013/slides/overfeat_ilsvrc2013.pdf
基本アイディア
3.FCN(Full Convolutional Network)
1. 検出方法1のハンズオンで作成した「鯨」と「非鯨」を分類するモデルをFCNに書き換える
1. [Clone Job]でモデルを複製
2. [Standard Networks]->[Alexnet横のcustom]をクリック->テキストボックス内部のネットワーク定義を書きかえる
• fc6 – fc8までのエリアを書き換える
• [Model Name]を適当につけて、[Create]ボタンをクリックして、学習を開始
2. 学習が終わったら、ジョブIDを控える
3. Jupyter notebookに戻り、先ほど学習したモデルを用いて推論(インファレンス)処理を行う
ハンズオン
3.FCN(Full Convolutional Network)ハンズオン(結果)
4.DetectNet
DetectNetを用いた物体検出の方法https://devblogs.nvidia.com/parallelforall/detectnet-deep-neural-network-object-detection-digits/
基本アイディア