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-frameworks28
ディープラーニング・フレームワーク
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
多数のアルゴリズムを
29 1/18/2
017
30
Caffeとは?
• コアエンジンはC++/CUDA • コマンドライン、Python、Matlabインターフェース • 高速, コードのテストが良く行われている • 前処理および開発ツール、リファレンスモデルやサンプルコードが充実 • 画像データマネージメント • GPUによる高速化の機能 • コミュニティが大きく活動が盛んBVLCによって開発されたディープラーニング開発用のオープンフレームワーク
caffe.berkeleyvision.org http://github.com/BVLC/caffe31
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-classificationSigmoid cross entropy loss
and more…
使用可能レイヤー:
Convolution Pooling Normalization活性化関数:
ReLU Sigmoid Tanh and more…ディープラーニングモデル定義
34 1/18/2
017
35
学習データの作成 モデルの作成 学習過程の可視化 モデルのテスト
GPUで高速化されたディープラーニングトレーニング・システム
NVIDIA 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の使い方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)を書き換える
ネットワークの構造の変更方法
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) のデータを使って物体検出を学ぶ
ディープラーニング手法による物体検出
今回のラボでは以下の4つの物体検出方法を紹介する
• 検出方法1:画面のスキャン + CNN 演習あり
• 検出方法2:候補領域 + CNN
• 検出方法3: FCN(Full Convolutional Network) 演習あり
• 検出方法4: DetectNet 演習あり
検出方法1.画面のスキャン + CNN
「鯨」か「非鯨」を判別するニューラルネットワークをトレーニングする
検出方法1.画面のスキャン + CNN
画像を分割、それぞれの領域を畳込みニューラルネットワーク(CNN)に通す
基本アイディア
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 Whale3.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/