51
ハンズオンラボ2 DIGITS による物体検出入門 村上真奈 NVIDIA CUDA & Deep Learning Solution Architect NVIDIA Corporation

DIGITS による物体検出入門

Embed Size (px)

Citation preview

Page 1: DIGITS による物体検出入門

1

ハンズオンラボ2

DIGITS による物体検出入門村上真奈

NVIDIA CUDA & Deep Learning Solution ArchitectNVIDIA Corporation

Page 2: DIGITS による物体検出入門

AGENDAディープラーニングとはQwiklab/Jupyter notebook/DIGITSの使い方DIGITSによる物体検出入門ハンズオン

Page 3: DIGITS による物体検出入門

ディープラーニングとは

Page 4: DIGITS による物体検出入門

機械学習とディープラーニングの関係

機械学習

ニューラルネットワーク

ディープラーニング

Page 5: DIGITS による物体検出入門

14

様々な分野でディープラーニングを応用

インターネットとクラウド

画像分類音声認識言語翻訳言語処理感情分析推薦

メディアとエンターテイメント

字幕ビデオ検索

リアルタイム翻訳

機械の自動化

歩行者検出白線のトラッキング信号機の認識

セキュリティと防衛

顔検出ビデオ監視衛星画像

医学と生物学

癌細胞の検出糖尿病のランク付け

創薬

Page 6: DIGITS による物体検出入門

15

人工ニューロン神経回路網をモデル化

スタンフォード大学cs231講義ノートより

神経回路網

w1 w2 w3

x1 x2 x3

y

y=F(w1x1+w2x2+w3x3)

F(x)=max(0,x)

人工ニューロン

Page 7: DIGITS による物体検出入門

人工ニューラルネットワーク単純で訓練可能な数学ユニットの集合体

ニューラルネットワーク全体で複雑な機能を学習

入力層 出力層

隠れ層

十分なトレーニングデータを与えられた人工ニューラルネットワークは、入力データから判断を行う複雑な近似を行う事が出来る。

Page 8: DIGITS による物体検出入門

ディープラーニングの恩恵ディープラーニングとニューラルネットワーク

ロバスト性

特徴量の設計を行う必要がない。 – 特徴は自動的に獲得される学習用データのバラつきの影響を押さえ込みながら、自動的に学習していく

一般性

同じニューラルネットワークのアプローチを多くの異なるアプリケーションやデータに適用する事が出来る

スケーラブル

より多くのデータで大規模並列化を行う事でパフォーマンスが向上する

Page 9: DIGITS による物体検出入門

ディープラーニングのアプローチ

認識:

蜜穴熊

エラー

犬猫

アライグマ

トレーニング:

モデル

モデル

Page 10: DIGITS による物体検出入門

データを訓練データ(training data)と検証データ(validation data)に分割する

訓練データと検証データディープラーニングの学習

収集したデータ

検証データ(validation data)

訓練データ(training data)

重みの更新(学習)に使用

汎化性能の確認に使用

Page 11: DIGITS による物体検出入門

訓練データによる重みの更新ディープラーニングの学習

訓練データ

熊検証データ

訓練データをニューラルネットワークに与え、正解ラベルと出力結果の誤差が無くなるように重みWの更新を繰り返す

正解は犬

Page 12: DIGITS による物体検出入門

訓練データによる重みの更新ディープラーニングの学習

訓練データ

熊検証データ

訓練データをニューラルネットワークに与え、正解ラベルと出力結果の誤差が無くなるように重みWの更新を繰り返す

正解に近づくように、各層の重みを更新する

Page 13: DIGITS による物体検出入門

学習ループ訓練データと検証データの役割

訓練データ

熊検証データ

すべての訓練データを用いて重み更新を行う + すべての検証データで汎化性能を確認⇒ 1 エポック(epoch)と呼ぶ

検証データで現在の汎化性能を確認

(重みの更新には使用しない)

Page 14: DIGITS による物体検出入門

学習時の性能の確認訓練データと検証データの役割

各エポックで訓練データをニューラルネットワークに与えた際の間違い率と検証データを与えた際の間違い率を確認しながら学習を進める必要がある

エラー数

エポック0

training

validation

エラー数

エポック0

training

validation学習成功 学習失敗(過学習)

Page 15: DIGITS による物体検出入門

24

畳込みニューラルネットワーク(CNN)• 画像認識・画像分類で使われる、高い認識精度を誇るアルゴリズム。畳込み層で画像の特徴を学習

目的

顔認識

トレーニングデータ

1,000万~1億イメージ

ネットワークアーキテクチャ

10 層

10 億パラメータ

ラーニングアルゴリズム

30 エクサフロップスの計算量

GPU を利用して30日

畳込み層 全結合層

Page 16: DIGITS による物体検出入門

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)

カーネルの中心の値はソースピクセル上に置かれている。

ソースピクセルはフィルタを自身の積の値に更新される。

Page 17: DIGITS による物体検出入門

26

ディープラーニング・フレームワーク

Page 18: DIGITS による物体検出入門

27

ディープラーニング・フレームワーク

Mocha.jl

ディープラーニング・フレームワークGPUで高速化されているディープラーニング・フレームワークが多数存在

https://developer.nvidia.com/deep-learning-frameworks

Page 19: DIGITS による物体検出入門

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

Page 20: DIGITS による物体検出入門

29 1/18/2

017

CAFFE

Page 21: DIGITS による物体検出入門

30

Caffeとは?

• コアエンジンはC++/CUDA

• コマンドライン、Python、Matlabインターフェース

• 高速, コードのテストが良く行われている

• 前処理および開発ツール、リファレンスモデルやサンプルコードが充実

• 画像データマネージメント

• GPUによる高速化の機能

• コミュニティが大きく活動が盛ん

BVLCによって開発されたディープラーニング開発用のオープンフレームワーク

caffe.berkeleyvision.org

http://github.com/BVLC/caffe

Page 22: DIGITS による物体検出入門

31

Caffeの特徴データの前処理とマネージメント

データ取り込みフォーマット

LevelDB または LMDB データベース

イン-メモリ(C++とPython のみ)

HDF5

画像ファイル

前処理ツール

RAWデータからのLevelDB/LMDB生成

トレーニングセットとバリデーションセットのシャッフル生成

平均画像の生成

データ変換

画像のクリッピング、リサイズ、ミラーリング

差分画像

Page 23: DIGITS による物体検出入門

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”

}

}

ディープラーニングモデル定義

Page 24: DIGITS による物体検出入門

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…

ディープラーニングモデル定義

Page 25: DIGITS による物体検出入門

34 1/18/2

017

DIGITS

Page 26: DIGITS による物体検出入門

35

学習データの作成 モデルの作成 モデルのテスト学習過程の可視化

GPUで高速化されたディープラーニングトレーニング・システム

NVIDIA DIGITS

http://developer.nvidia.com/digits

Page 27: 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を監視

• 様々な学習データフォーマット、フレームワークに対応

Page 28: DIGITS による物体検出入門

DIGITSの使い方

Page 29: DIGITS による物体検出入門

DIGITSの使い方1

1. 学習データセットの作成

2. 学習モデルの作成、学習開始

3. 学習済みモデルのテスト

DIGITSのワークフロー

学習

推論(インファレンス)

Page 30: DIGITS による物体検出入門

DIGITSの使い方2ホーム画面の戻り方

ホーム画面に戻る

Page 31: DIGITS による物体検出入門

DIGITSの使い方3データセット作成/モデル作成

データセット作成

モデル作成

Page 32: DIGITS による物体検出入門

DIGITSの使い方4データセット作成/モデルの作成

物体検出したい場合[Object Detection]を選択

画像分類したい場合[Classification]を選択

Page 33: DIGITS による物体検出入門

43

DIGITSの使い方5

DIGITSは、Caffeを使って学習を行う事が出来る。

ネットワークの構造の変更方法

Caffeが選択されている事を確認

Alexnetが選択されている

モデルの変更画面に遷移

Page 34: DIGITS による物体検出入門

44

DIGITSの使い方5

caffeのモデル定義ファイル(prototxt)を書き換える

ネットワークの構造の変更方法

Layer{}でくくってある部分が一つの層

Page 35: DIGITS による物体検出入門

Qwiklab/jupyter notebook

Page 36: DIGITS による物体検出入門

Qwiklabのアクセス方法

https://nvlabs.qwiklab.com/にアクセスし、[DLI2017-Japan]->[エヌビディアDIGITSによる物体検出]を選択

DIGITSによる物体検出入門

Page 37: DIGITS による物体検出入門

Qwiklabのアクセス方法

「ラボを開始」を選択、インスタンスの起動を待つ

DIGITSによる物体検出入門

Page 38: DIGITS による物体検出入門

56

Jupyter notebookの使い方

1/18/2017

タイマーカウントダウン

実行中は黒丸それ以外は白丸

Page 39: DIGITS による物体検出入門

57

Jupyter notebookの使い方

1/18/2017

In []: と書いてあるセルは動的実行が出来ます

選択されていると緑の枠が表示される

再生ボタンでセルの実行が出来る(Shift-Enterでも良い)

Page 40: DIGITS による物体検出入門

58

ハンズオンを開始しましょう

Page 41: DIGITS による物体検出入門

ディープラーニング手法による物体検出

Right Whale Recognition(https://www.kaggle.com/c/noaa-right-whale-recognition)

のデータを使って物体検出を学ぶ

DIGITSによる物体検出入門

Page 42: DIGITS による物体検出入門

ディープラーニング手法による物体検出

今回のラボでは以下の4つの物体検出方法を紹介する

• 検出方法1:画面のスキャン + CNN 演習あり

• 検出方法2:候補領域 + CNN

• 検出方法3: FCN(Full Convolutional Network) 演習あり

• 検出方法4: DetectNet 演習あり

DIGITSによる物体検出入門

Page 43: DIGITS による物体検出入門

検出方法1.画面のスキャン + CNN

「鯨」か「非鯨」を判別するニューラルネットワークをトレーニングする

基本アイディア

Page 44: DIGITS による物体検出入門

検出方法1.画面のスキャン + CNN

画像を分割、それぞれの領域を畳込みニューラルネットワーク(CNN)に通す

基本アイディア

Whale

Not Whale

Page 45: DIGITS による物体検出入門

検出方法1.画面のスキャン + CNN

1. Jupyter notebookからDIGITSを起動し、「鯨」「非鯨」を判別するニューラルネットワークを作成する。

1. DIGITSで[Datasets]->[Image Classication]から学習データを作成する

2. DIGITSで[Models]->[Image Classication]からモデル作成と学習をする

2. 学習が終わったら、ジョブIDを控える

3. Jupyter notebookに戻り、先ほど学習したモデルを用いて推論(インファレンス)処理を行う

ハンズオン

Page 46: DIGITS による物体検出入門

検出方法1.画面のスキャン + CNNハンズオン(結果)

Page 47: DIGITS による物体検出入門

2.候補領域 + CNN

1の場合とアイディアは同じ。違いは、画像を単純に分割するのではなく、候補領域を求めてから畳込みニューラルネットワーク(CNN)に通す

基本アイディア

Whale

Not Whale

Page 48: DIGITS による物体検出入門

3.FCN(Full Convolutional Network)

全結合層を持たない、すべて畳込み層のネットワークを使って物体検出を行う

http://www.image-net.org/challenges/LSVRC/2013/slides/overfeat_ilsvrc2013.pdf

基本アイディア

Page 49: DIGITS による物体検出入門

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に戻り、先ほど学習したモデルを用いて推論(インファレンス)処理を行う

ハンズオン

Page 50: DIGITS による物体検出入門

3.FCN(Full Convolutional Network)ハンズオン(結果)

Page 51: DIGITS による物体検出入門

4.DetectNet

DetectNetを用いた物体検出の方法https://devblogs.nvidia.com/parallelforall/detectnet-deep-neural-network-object-detection-digits/

基本アイディア