ハンズオンラボ2 DIGITS による物体検出入門 村上真奈 NVIDIA CUDA & Deep Learning Solution Architect NVIDIA Corporation 1
AGENDA ディープラーニングとは Qwiklab/Jupyter notebook/digits の使い方 DIGITS による物体検出入門ハンズオン
ディープラーニングとは
機械学習とディープラーニングの関係 機械学習 ニューラルネットワーク ディープラーニング
様々な分野でディープラーニングを応用 インターネットとクラウド 医学と生物学 メディアとエンターテイメント セキュリティと防衛 機械の自動化 画像分類音声認識言語翻訳言語処理感情分析推薦 癌細胞の検出糖尿病のランク付け創薬 字幕ビデオ検索リアルタイム翻訳 顔検出ビデオ監視衛星画像 歩行者検出白線のトラッキング信号機の認識 14
人工ニューロン神経回路網をモデル化 神経回路網 人工ニューロン y w 1 w 2 w 3 x 1 x 2 x 3 スタンフォード大学 cs231 講義ノートより y=f(w 1 x 1 +w 2 x 2 +w 3 x 3 ) F(x)=max(,x) 15
人工ニューラルネットワーク単純で訓練可能な数学ユニットの集合体ニューラルネットワーク全体で複雑な機能を学習 隠れ層 入力層 出力層 十分なトレーニングデータを与えられた人工ニューラルネットワークは 入力データから判断を行う複雑な近似を行う事が出来る
ディープラーニングの恩恵ディープラーニングとニューラルネットワーク ロバスト性 一般性 特徴量の設計を行う必要がない 特徴は自動的に獲得される学習用データのバラつきの影響を押さえ込みながら 自動的に学習していく 同じニューラルネットワークのアプローチを多くの異なるアプリケーションやデータに適用する事が出来る スケーラブル より多くのデータで大規模並列化を行う事でパフォーマンスが向上する
トレーニング : 犬 ディープラーニングのアプローチ エラー 猫 蜜穴熊 モデル 犬猫アライグマ 認識 : 犬 モデル
訓練データと検証データ ディープラーニングの学習 データを訓練データ (training data) と検証データ (validation data) に分割する 収集したデータ 訓練データ (training data) 重みの更新 ( 学習 ) に使用 検証データ (validation data) 汎化性能の確認に使用
訓練データによる重みの更新 ディープラーニングの学習 訓練データをニューラルネットワークに与え 正解ラベルと出力結果の誤差が無くなるように重み W の更新を繰り返す 訓練データ 正解は犬 猫犬 検証データ 熊狸
訓練データによる重みの更新 ディープラーニングの学習 訓練データをニューラルネットワークに与え 正解ラベルと出力結果の誤差が無くなるように重み W の更新を繰り返す 訓練データ 正解に近づくように 各層の重みを更新する 猫犬 検証データ 熊狸
学習ループ 訓練データと検証データの役割 すべての訓練データを用いて重み更新を行う + すべての検証データで汎化性能を確認 1 エポック (epoch) と呼ぶ 訓練データ 検証データ 検証データで現在の汎化性能を確認 ( 重みの更新には使用しない ) 猫犬熊狸
学習時の性能の確認 訓練データと検証データの役割 各エポックで訓練データをニューラルネットワークに与えた際の間違い率と検証データを与えた際の間違い率を確認しながら学習を進める必要がある エラー数 validation エラー数 validation 学習成功学習失敗 ( 過学習 ) training エポック training エポック
畳込みニューラルネットワーク (CNN) 画像認識 画像分類で使われる 高い認識精度を誇るアルゴリズム 畳込み層で画像の特徴を学習 目的顔認識 トレーニングデータ 1, 万 ~1 億イメージ ネットワークアーキテクチャ 1 層 1 億パラメータ ラーニングアルゴリズム 3 エクサフロップスの計算量 GPU を利用して 3 日 畳込み層 全結合層 24
25 畳込み層 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 2 2 2 1 1 1 1 1 1 1 4-4 1-8 ピクセル値 (src) 畳み込みカーネルピクセル値 (dst) カーネルの中心の値はソースピクセル上に置かれている ソースピクセルはフィルタを自身の積の値に更新される
ディープラーニング フレームワーク 26
ディープラーニング フレームワーク GPU で高速化されているディープラーニング フレームワークが多数存在 Mocha.jl ディープラーニング フレームワーク https://developer.nvidia.com/deep-learning-frameworks 27
ディープラーニング フレームワーク 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. MIT マルチ GPU (1 ノード ) モデルの柔軟性 CNN RNN #233 RBM 備考 高速 Caffe Model Zoo 多数のアルゴリズムをサポート 自動微分 自動微分 TensorBoard Define by Run CuPy 28
CAFFE 29 1/18/2
Caffe とは? BVLC によって開発されたディープラーニング開発用のオープンフレームワーク コアエンジンは C++/CUDA コマンドライン Python Matlab インターフェース 高速, コードのテストが良く行われている 前処理および開発ツール リファレンスモデルやサンプルコードが充実 画像データマネージメント GPU による高速化の機能 コミュニティが大きく活動が盛ん caffe.berkeleyvision.org http://github.com/bvlc/caffe 3
Caffe の特徴データの前処理とマネージメント データ取り込みフォーマット LevelDB または LMDB データベースイン-メモリ (C++ とPython のみ ) HDF5 画像ファイル 前処理ツール RAW データからの LevelDB/LMDB 生成 トレーニングセットとバリデーションセットのシャッフル生成 平均画像の生成 データ変換 画像のクリッピング リサイズ ミラーリング 差分画像 31
Caffe の特徴 ディープラーニングモデル定義 Protobuf モデルフォーマット ネットワーク構造定義および学習パラメータの定義に使われる 様々なフォーマットに対応 Caffe のオートジェネレータで生成可能 構文チェック機能も存在 コーディングが必要ない name: conv1 type: Convolution bottom: data top: conv1 convolution_param { num_output: 2 kernel_size: 5 stride: 1 weight_filler { type: xavier } } 32
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 33
DIGITS 34 1/18/2
NVIDIA DIGITS GPU で高速化されたディープラーニングトレーニング システム 学習データの作成モデルの作成学習過程の可視化モデルのテスト http://developer.nvidia.com/digits 35
NVIDIA DIGITS GPU で高速化されたディープラーニングトレーニング システム 手元の PC から Web ブラウザでアクセス可能なディープラーニングトレーニングシステム ユーザーインターフェース データセットの作成 学習モデルの作成 学習過程の可視化 レイヤーの可視化 画像分類と物体検出の為の DNN のデザインと可視化の機能を提供 Chainer Theano Torch NVCaffe cudnn, cublas NVIDIA が最適化したフレームワークで高速に学習が可能 ハイパーパラメータ チューニングを強力にサポート 学習 CUDA DL 学習のジョブを簡単にスケジューリング リアルタイムに accuracy と loss を監視 GPU HW GPU マルチ GPU GPU クラスタ クラウド 様々な学習データフォーマット フレームワークに対応 36
DIGITS の使い方
DIGITS の使い方 1 DIGITS のワークフロー 1. 学習データセットの作成 2. 学習モデルの作成 学習開始 3. 学習済みモデルのテスト 学習 推論 ( インファレンス )
DIGITS の使い方 2 ホーム画面の戻り方 ホーム画面に戻る
DIGITS の使い方 3 データセット作成 / モデル作成 データセット作成 モデル作成
DIGITS の使い方 4 データセット作成 / モデルの作成 画像分類したい場合 [Classification] を選択 物体検出したい場合 [Object Detection] を選択
DIGITS の使い方 5 ネットワークの構造の変更方法 DIGITS は Caffe を使って学習を行う事が出来る Caffe が選択されている事を確認 モデルの変更画面に遷移 Alexnet が選択されている 43
DIGITS の使い方 5 ネットワークの構造の変更方法 caffe のモデル定義ファイル (prototxt) を書き換える Layer{} でくくってある部分が一つの層 44
Qwiklab/jupyter notebook
Qwiklab のアクセス方法 DIGITS による物体検出入門 https://nvlabs.qwiklab.com/ にアクセスし [DLI217-Japan]->[ エヌビディア DIGITS による物体検出 ] を選択 1 2 3
ラボを開始 を選択 インスタンスの起動を待つ Qwiklab のアクセス方法 DIGITS による物体検出入門 1 2
1/18/217 Jupyter notebook の使い方 実行中は黒丸それ以外は白丸 タイマーカウントダウン 56
1/18/217 Jupyter notebook の使い方 In []: と書いてあるセルは動的実行が出来ます 選択されていると緑の枠が表示される 再生ボタンでセルの実行が出来る (Shift-Enter でも良い ) 57
ハンズオンを開始しましょう 58
ディープラーニング手法による物体検出 DIGITS による物体検出入門 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 演習あり
検出方法 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/213/slides/overfeat_ilsvrc213.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/