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

DIGITS による物体検出入門

Jan 24, 2017

Download

Technology

NVIDIA Japan
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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/

基本アイディア