1
ハンズオンラボ2
DIGITS による物体検出入門
村上真奈
NVIDIA CUDA & Deep Learning Solution Architect
NVIDIA 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
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
DIGITS
35
学習データの作成 モデルの作成 モデルのテスト学習過程の可視化
GPUで高速化されたディープラーニングトレーニング・システム
NVIDIA DIGITS
http://developer.nvidia.com/digits
36
NVIDIA DIGITS
手元のPCからWebブラウザでアクセス可能なディープラーニングトレーニングシステム
GPUで高速化されたディープラーニングトレーニング・システム
ユーザー
インターフェース
レイヤーの
可視化
学習モデルの
作成
データセット
の作成
学習過程の
可視化
Chainer
GPUGPU HW クラウドGPUクラスタマルチGPU
Theano
Torch
Caffe
cuDNN, cuBLAS
CUDA
学習
NVCaffe
cuDNN, 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/
基本アイディア

DIGITS による物体検出入門