Successfully reported this slideshow.
Your SlideShare is downloading. ×

自習形式で学ぶ「DIGITS による画像分類入門」

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 85 Ad

More Related Content

Slideshows for you (20)

Similar to 自習形式で学ぶ「DIGITS による画像分類入門」 (20)

Advertisement

More from NVIDIA Japan (20)

Recently uploaded (20)

Advertisement

自習形式で学ぶ「DIGITS による画像分類入門」

  1. 1. エヌビディア 自習形式で学ぶ 「DIGITS による画像分類入門」
  2. 2. Qwiklabs(クイックラボ)自習形式ハンズオン エヌビディアのハンズオントレーニングイベント “NVIDIA Deep Learning Institute (DLI)” で 利用しているトレーニングプラットフォーム “Qwiklabs” は、自宅や職場で自習形式ハンズオン として活用することも可能です。 この資料では、自習形式のハンズオンラボ受講に必要な手順を簡単に説明します。 Qwiklabs(クイックラボ)アカウントの作成 簡単に作成できます。 すでにアカウントをお持ちの場合は不要です。① ② ラボの開始 Web ブラウザで Qwiklabs へアクセスして、ハンズオンラボを起動します。 この資料の解説を参考にしながら、挑戦してください。
  3. 3. Qwiklabs(クイックラボ)アカウントの作成
  4. 4. Qwiklabs アカウントの作成 https://nvidia.qwiklab.com へアクセス。 必要事項を記入して、 “CREATE A NEW ACCOUNT” をクリックします。① ② ここで入力したアドレスに、アクティ ベーション用のメールが届きますので、 受信可能なメールアドレスを入力 してください。
  5. 5. 画面の日本語化 ラボ起動前に必ず実施してください 画面表示が英語のままだと、起動するラボも英語版になってしまいます。 ラボ起動前に、アカウント設定で Language を Japanese にしてください。 ① ② ③
  6. 6. ラボの開始
  7. 7. 「DIGITS による画像分類入門」 ラボの開始 カタログから探すか URL を直接入力 https://nvidia.qwiklab.com/focuses/1579 「DIGITS による画像分類入門」 ① ② ③ ④
  8. 8. 「DIGITS による画像分類入門」 ラボの開始 ラボの開始には3分程度かかります。 ラボが開始されたら「LAUNCH LAB」をクリックします。 ENJOY!!
  9. 9. エヌビディア DIGITS による画像分類入門
  10. 10. 本ラボの目的 — ディープラーニングのイントロダクション — ネットワークのトレーニング — トレーニングの結果を理解する — コンピュータビジョン・画像分類に関するハンズオン — CaffeとDIGITSを使用する 9/26/2017
  11. 11. 本ラボが意図しないこと — 機械学習に対する基本的なイントロダクション — ニューラルネットワークに関する正確な定式化 — Caffe・DIGITSや他のツールに関する、すべての機能の紹介 — 最先端のディープラーニング企業になるためのノウハウ
  12. 12. 前提知識 — ディープラーニングに関するバックグラウンドは不要 — Webブラウザが利用できること - URLへのアクセス - ファイルのダウンロード - ファイルマネージャを用いてのファイルの配置(=ファイルのアップロード)
  13. 13. 本ラボの受講後には…… — ディープラーニングのワークフローを理解しています。 — 畳み込みニューラルネットワークをセットアップ、トレーニングする ことができます。 — 本当のエキスパートになるための、最初のステップを実践するこ とができます。 自分自身のネットワークを設定でき、より深く理解するために、 何をすればよいかがわかります。
  14. 14. ディープラーニングとは?
  15. 15. ディープラーニングは機械学習の一分野 機械学習 ニューラルネットワーク ディープラーニング
  16. 16. 様々な分野でディープラーニングを応用 インターネットとクラウド 画像分類 音声認識 言語翻訳 言語処理 感情分析 推薦 メディアとエンターテイメント 字幕 ビデオ検索 リアルタイム翻訳 機械の自動化 歩行者検出 白線のトラッキング 信号機の認識 セキュリティと防衛 顔検出 ビデオ監視 衛星画像 医学と生物学 癌細胞の検出 糖尿病のランク付け 創薬
  17. 17. 機械学習におけるビッグバン “GoogleのAIエンジンは コンピュータハードウエアの世界における変化を示している。GPUを搭載したマ シンに依存しているのだ… これまでに、より広範なテクノロジが用いられてきたが、それ以上に強く、 GPUに依存しているのだ。” DNN GPUBIG DATA
  18. 18. 人工ニューロン From Stanford cs231n lecture notes 生物学的ニューロン w1 w2 w3 x1 x2 x3 y y=F(w1x1+w2x2+w3x3) F(x) = max(0, x) 人工ニューロン (パーセプトロン)
  19. 19. 人工ニューラルネットワーク 単純で訓練可能な数学ユニットの集合体 ニューラルネットワーク全体で複雑な機能を学習 入力層 出力層 隠れ層 十分なトレーニングデータを与えられた人工ニューラルネットワークは、 入力データから判断するための複雑な関数を近似することができる。
  20. 20. ディープラーニングのアプローチ inference: 犬 猫 蜜穴熊 誤差 犬 猫 アライグマ 犬 training: DNN DNN
  21. 21. 畳込みニューラルネットワーク (CNN) 入力 結果 アプリケーションの構成要素例: タスクの目的 顔の同定 トレーニングデータ 1千万-1億 のイメージ ネットワークアーキテクチャ 十から数百のレイヤー 10億のパラメータ 学習アルゴリズム ~30 Exaflops 1-30 日(1GPU) 生データ 低レベルの特徴 中間レベルの特徴 高レベルの特徴
  22. 22. 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 入力ピクセル コンボリューション カーネル 出力ピクセル コンボリューションカーネルの係数と、 入力ピクセルを掛け、足し合わせた 値を出力とする。 畳込み層(CONVOLUTIONAL LAYER)
  23. 23. CNN: 畳み込み層 vdumoulin/conv_arithmetic, https://github.com/vdumoulin/conv_arithmetic 入力 コンボリューションカーネル 出力
  24. 24. 元画像 CNN: 畳み込み層 24 畳み込みカーネル 出力 畳み込みの計算例
  25. 25. ディープラーニングの利点 ▪ 堅牢性 ▪ 事前に特徴量のデザインをする必要がない。 ▪ 現在のタスクに最適な特徴量が、自動的に学習される。 ▪ 元来データに存在する多様性に対しても、学習により、堅牢となる。 ▪ 一般化 ▪ 同じニューラルネットワークによるアプローチを、多数の異なるアプリケーション、データに対して適用でき る。 ▪ スケーラブル ▪ より多くのデータを用いた学習により、性能が改善する。 ▪ 学習の演算を、超並列化することができる。
  26. 26. CAFFE & DIGITS このラボで使用するツール
  27. 27. CAFFE とは? • Berkeley Vision and learning Center (BVLC) において開発 • 多くのコントリビュータにより構成されるオープンソースコミュニティ • C++/CUDA による実装。高速、よく検証されたコード シームレスな GPU によるアクセラレーション • コマンドライン、Python, MATLAB インターフェース • リファレンスモデルや、サンプルもある。 オープンソースのディープラーニングフレームワーク caffe.berkeleyvision.org http://github.com/BVLC/caffe
  28. 28. CAFFE の機能 データのプリプロセスと管理 データフォーマット LevelDB・LMDB データベース インメモリ (C++・Python のみ) HDF5 画像ファイル プリプロセスツール 生画像からの LevelDB/LMDB の 作成 トレーニング用と検証用のデータ セット作成(シャッフル付き) 平均画像の生成 データ変換 イメージのトリミング・リサイズ、 スケーリング、位置反転 平均値を引く
  29. 29. 学習データの作成 モデルの作成 モデルのテスト学習過程の可視化 NVIDIA DIGITS GPUで高速化されたディープラーニング トレーニング システム http://developer.nvidia.com/digits
  30. 30. NVIDIA DIGITS 手元のPCからWebブラウザでアクセス可能なディープラーニング トレーニング システム GPUで高速化されたディープラーニング トレーニング システム ユーザー インターフェース レイヤーの 可視化 学習モデルの 作成 データセット の作成 学習過程の 可視化 Theano GPUGPU HW クラウドGPUクラスタマルチGPU TensorFlow Torch Caffe cuDNN, cuBLAS CUDA 学習 NVCaffe cuDNN, cuBLAS CUDA • 画像分類と物体検出の為のDNNのデザ インと可視化の機能を提供 • NVIDIAが最適化したフレームワークで高 速に学習が可能 • ハイパーパラメータのチューニングを強力に サポート • 学習のジョブを簡単にスケジューリング、リ アルタイムにaccuracyとlossを監視 • 様々な学習データフォーマット、フレーム ワークに対応
  31. 31. チュートリアル: 手書き文字認識
  32. 32. チュートリアルのゴール — ディープラーニングのワークフローを学ぶ — 手書き文字認識を理解する — コンボリューショナルネットワークのトレーニング (Caffe と DIGITS) — 複数の異なる手法を試し、結果を改善できるようになる — 学習と検証を繰り返すことは、ディープラーニングにおける基本的な手続き
  33. 33. 手書き文字認識 MNIST データセット (Yann LeCun’s Web site) http://yann.lecun.com/exdb/mnist/ サイズ : 28x28、グレースケール、 ピクセル値 0 - 255 トレーニング用データ : 6万 テスト用データ : 1万 入力ベクタサイズ : 784 ( = 28 x 28) 出力は0-9の整数 機械学習におけるHELLO WORLD?
  34. 34. このラボで使うディープニューラルネットワーク LeNet, 1998 INPUT 28x28 feature maps 20 @12x12 Convolutions 5x5 Convolutions 5x5 feature maps 50 @8x8 Max Pooling 2x2 feature maps 20 @24x24 feature maps 50 @4x4 Max Pooling 2x2 Fully connected 500 500 ReLU Fully connected Softmax 10 10
  35. 35. コンボリューション / サブサンプリング 入力層 — コンボリューションレイヤー - コンボリューションの計算 複数の特徴マップを生成する — プーリングレイヤー - 最大値プーリング: 2x2 の領域から、最大値を取得 - サブサンプリングで大きさを縦横半分に INPUT 28x28 feature maps 20 @12x12 Convolutions 5x5 Max Pooling 2x2 feature maps 20 @24x24
  36. 36. 全結合層&活性化関数 — 50 @ 4x4 = 800ピクセルを一つのベクトルと してまとめる — Fully connected layer — 重み行列で表現 — ReLU : 活性化関数 — 𝑚𝑎𝑥 0, 𝑥 — Softmax : 活性化関数 — 𝑒𝑥𝑝 𝑎 𝑖 σ 𝑗 𝑛 𝑒𝑥𝑝 𝑎 𝑗 9/26/2017 Fully connected 500 500 ReLU Fully connected Softmax 10 10 feature maps 50 @4x4
  37. 37. ニューラルネットワークモデルの定義 Protobuf モデルフォーマット ネットワークモデル、および、トレーニ ングパラメータの定義 Caffeコードの自動生成、自動形式 チェック 高い可読性、強い型付け Googleにより開発されたOSS Caffeにおけるモデル定義形式 name: “conv1” type: “Convolution” bottom: “data” top: “conv1” convolution_param { num_output: 20 kernel_size: 5 stride: 1 weight_filler { type: “xavier” } }
  38. 38. ニューラルネットワークモデルの定義 Loss関数: 分類 Softmax loss Sigmoid cross entropy loss Hinge loss 回帰 Euclidean loss などなど…… レイヤー種別: Convolution Pooling Normalization 活性化関数: ReLU Sigmoid Tanh などなど…… Caffeにおけるモデル定義形式
  39. 39. ラボの流れ 1. まず試してみる 1. AlexNetで試しに6000件の画像を学習 2. (option)異なるデータセット(CalTech-101)も試してみる 2. 性能を改善するために 1. さらに学習させる 2. 6000件の画像でLeNetを学習 3. 6万件すべての画像で学習 4. Data Augmentation 5. (option)ネットワークをカスタマイズ 学習・評価の試行錯誤を追体験 という流れをちょっと変えて……
  40. 40. ラボの流れ 1. 一連の流れを体験 1. 6000件の画像でLeNetを学習 2. 6万件すべての画像で学習 3. Data Augmentation 4. ネットワークをカスタマイズ 2. (option)より大きなネットワーク/問題にチャレンジ 1. AlexNetで試しに6000件の画像を学習 2. さらに学習させる 3. 異なるデータセット(CalTech-101)も試してみる 学習・評価の試行錯誤を追体験
  41. 41. チュートリアル1: 画像分類の一連の流れを試す
  42. 42. 1-1. 6000件のデータでLENETを学習 DIGITSで一連の流れを試す 全体の10% だけを使う
  43. 43. 1-1. 6000件のデータでLENETを学習 実施する作業 1. データセット作成 2. モデルの作成(=学習) 3. モデルの評価(=推論) DIGITSで一連の流れを試す
  44. 44. Datasetsタブを選択後、 New Dataset > Imagesから “Classification”を選択 初回だけログインを求められる ので、ユーザー名を入力 (英数小文字) ここを 選択
  45. 45. データセットの作成 1. 2. 3. 1. Image Type : Grayscale 2. Image Size : 28 x 28 3. Training Images: /data/train_small 4. Dataset Name: “mnist small” 5. Createボタンを押す 4. 5.
  46. 46. モデルの作成 その1 9/26/2 1. クリックしてホーム画面へ 2. ここを選択 1. 左上の”DIGITS”をクリックして、 HOME画面に戻る 2. Modelsタブを選択後、 New Model > Imagesから、 “Classification”を選択
  47. 47. モデルの作成 1. “mnist small” データセットを選択 2. Training Epochs を”8”にする 3. モデルは、”LeNet” を選択 4. モデル名は、”The right model for the data” を入力 1. “mnist small”データセットを選択 2. Training epochsを”8”に設定 3. “LeNet”を選択 4. “The right model for the data”を入力
  48. 48. Loss 関数 (検証データ) Loss 関数 (学習データ) Accuracy 検証データセット から求められる
  49. 49. 一つのファイルでテスト 1. Image Pathに、以下を入力 /data/test_small/2/img_4415.png 2. “Show visualization and statistics”をチェック 3. “Classify One”ボタンを押す
  50. 50. 現実世界の画像を試す
  51. 51. 画像リストファイルの取得 • jupyterに戻る • In [ ] を実行(Ctrl + Enter) • 実行後に出力されるan_image.listを 右クリック • 「テキストファイル」 として保存
  52. 52. 画像リストファイル 内容はテストデータへのファイル パスの列 /notebook/test_images/image-1-1.jpg /notebook/test_images/image-2-1.jpg /notebook/test_images/image-3-1.jpg /notebook/test_images/image-4-1.jpg /notebook/test_images/image-7-1.jpg /notebook/test_images/image-8-1.jpg /notebook/test_images/image-8-2.jpg テキストエディタで開いたときの見え方
  53. 53. 画像リストでテストする 1. “Browse…”ボタンをクリック an_image.listを選択 2. “Classify Many”ボタンを押す 1. Upload Image Listの “Browse…”ボタンをクリックし、 an_image.listを選択 2. “Classify Many”ボタンを押す
  54. 54. 最初の結果 Small dataset 9/26/2 - Accuracy : 96 % - トレーニングは、1分で終わる。 SMALL DATASET 1 : 99.90 % 2 : 69.03 % 8 : 71.37 % 8 : 85.07 % 0 : 99.00 % 8 : 99.69 % 8 : 54.75 %
  55. 55. 1-2. 6万件すべての画像で学習 データ量は性能に影響を与えるのか 全データを使う
  56. 56. FULL DATASET 10倍大きなデータセット — データセット — “mnist small”をクローン(Cloneボタンを押す) — Training Images : /data/train_full — Dataset Name : MNIST full — モデル — “The right model for the data”をクローン(Cloneボタンを押す) — データを”MNIST full”に変更 — モデル名に“MNIST full”を設定し、”Create”ボタンを押す 9/26/2017
  57. 57. SMALL DATASET FULL DATASET 1 : 99.90 % 0 : 93.11 % 2 : 69.03 % 2 : 87.23 % 8 : 71.37 % 8 : 71.60 % 8 : 85.07 % 8 : 79.72 % 0 : 99.00 % 0 : 95.82 % 8 : 99.69 % 8 : 100.0 % 8 : 54.75 % 2 : 70.57 % 2つ目の結果 Full dataset - 99 % of accuracy achieved. - 現実世界の画像の認識には、 改善なし。
  58. 58. 1-3. DATA AUGMENTATION 白黒反転した画像を追加 — Pixel(Inverted) = 255 – Pixel(original) — 黒い背景に白い文字 → 白い背景に黒い文字 — “MNIST full”をクローン(データ/モデルと も) — Training Images: /data/train_invert Dataset Name: MNIST invert — Select Dataset: MNIST invert Model Name: MNIST invert
  59. 59. SMALL DATASET FULL DATASET +INVERTED 1 : 99.90 % 0 : 93.11 % 1 : 90.84 % 2 : 69.03 % 2 : 87.23 % 2 : 89.44 % 8 : 71.37 % 8 : 71.60 % 3 : 100.0 % 8 : 85.07 % 8 : 79.72 % 4 : 100.0 % 0 : 99.00 % 0 : 95.82 % 7 : 82.84 % 8 : 99.69 % 8 : 100.0 % 8 : 100.0 % 8 : 54.75 % 2 : 70.57 % 2 : 96.27 % 1-3. DATA AUGMENTATION 白黒反転した画像を追加 9/26/2
  60. 60. 1-4. ネットワークをカスタマイズ ReLUレイヤの追加と、コンボリューションフィルタの修正 INPUT 28x28 feature maps 20 → 75 @12x12 Convolusions 5x5 feature maps 75@8x8 Max Pooling 2x2 feature maps 20 → 75 @24x24 feature maps 50 -> 100@4x4 Max Pooling 2x2 Fully connected 500 500 ReLU Fully connected Softmax 10 10 ReLU Convolusions 5x5
  61. 61. LENETのネットワークをカスタマイズ 9/26/2017 Customizeを クリック
  62. 62. ネットワークの可視化 9/26/2017 “Visualize”ボタンをクリック
  63. 63. ネットワークの変更内容 ReLUレイヤの追加と、コンボリューションフィルタの変更 layer { name: "pool1“ type: "Pooling“ … } # ReLUレイヤの追加ここから -> layer { name: "reluP1" type: "ReLU" bottom: "pool1" top: "pool1" } # <- ここまで layer { name: “conv2“ layer { name: "conv1" type: "Convolution" ... convolution_param { num_output: 75 # feature map数 ... layer { name: "conv2" type: "Convolution" ... convolution_param { num_output: 100 # feature map数 ...
  64. 64. ネットワークの変更内容 編集後、Visualizeボタンを押して、 ネットワークを確認。 ReLUレイヤの追加 conv1 20 → 75 conv2 50 → 100 reluP1
  65. 65. 1-4. ネットワークをカスタマイズ フィルタとReLUレイヤの追加 SMALL DATASET FULL DATASET +INVERTED ADDING LAYER 1 : 99.90 % 0 : 93.11 % 1 : 90.84 % 1 : 59.18 % 2 : 69.03 % 2 : 87.23 % 2 : 89.44 % 2 : 93.39 % 8 : 71.37 % 8 : 71.60 % 3 : 100.0 % 3 : 100.0 % 8 : 85.07 % 8 : 79.72 % 4 : 100.0 % 4 : 100.0 % 0 : 99.00 % 0 : 95.82 % 7 : 82.84 % 2 : 62.52 % 8 : 99.69 % 8 : 100.0 % 8 : 100.0 % 8 : 100.0 % 8 : 54.75 % 2 : 70.57 % 2 : 96.27 % 8 : 70.83 %
  66. 66. チュートリアル2 (OPTION): より大きなネットワーク/問題にチャレンジ
  67. 67. 2-1. ALEXNETで画像分類を学習 AlexNet, 2012
  68. 68. 2-1. ALEXNETで画像分類を学習 より大きなネットワーク 256px 256px 拡大 28px 28px
  69. 69. データセット作成 1. Training Images: /data/train_small 2. Dataset Name:“Default Options Small Digits Dataset” 3. Createボタンを押す 1. 2. 3.
  70. 70. モデルの作成 1. “Default Options Small Digits Dataset” を選択 2. Training Epochs を”5”にする その2 1. “Default Options Small Digits Dataset”を選択 2. Training epochsを”5”に設定 下 へ
  71. 71. モデルの作成 1. フレームワークは、“Caffe”を選択 2. モデルは、 “AlexNet”を選択 3. モデル名は、“My first model”を入 力 その3 1. “Caffe”を選択 2. “AlexNet”を選択 3. “My first model”を 入力
  72. 72. 一つのファイルでテスト 1. Image Pathに、以下を入力 /data/test_small/2/img_4415.png 2. “Show visualization and statistics”をチェック 3. “Classify One”ボタンを押す
  73. 73. 2-2. より長く学習させる 学習済みモデルの作成と利用 学習前 5epoch学習 さらに4epoch学習 ゼロから学習 学習済みモデルを ベースに学習 モデルは 改善するのか?
  74. 74. 2-2. より長く学習させる 学習済みモデルの作成 1. DIGITSのホームに戻り、Modelsタブから”My first model”を選択 2. ページの下までスクロールし、”Make Pretrained Model”ボタンをクリック
  75. 75. モデルの作成 1. “Default Options Small Digits Dataset” を選択 2. Training Epochs を”4”にする 学習済みモデルをベースに 1. “Default Options Small Digits Dataset”を選択 2. Training epochsを”4”に設定 下 へ
  76. 76. モデルの作成 1. “Pretrained Networks” を選択 2. 学習済みモデルとして、“My first model” を選択 3. モデル名は、”Study More” にする 学習済みモデルをベースに 1. “Pretrained Networks”を選択 2. “My first model”を選択 3. “Study More”と入力
  77. 77. 性能の高いところから再開 エポックごとの改善率は緩やか
  78. 78. 一つのファイルでテスト 1. Image Pathに、以下を入力 /data/test_small/2/img_4415.png 2. “Show visualization and statistics”をチェック 3. “Classify One”ボタンを押す
  79. 79. 結果を比較 9/26/2 5epochのみ 5epochのみ 5epochのみ 学習済みモデル+4epoch よりよく予測できている
  80. 80. 画像リストでテストする 1. “Browse…”ボタンをクリック an_image.listを選択 2. “Classify Many”ボタンを押す 1. Upload Image Listの “Browse…”ボタンをクリックし、 an_image.listを選択 2. “Classify Many”ボタンを押す
  81. 81. 2-2. より長く学習させる AlexNet with small dataset 9/26/2 - Accuracy : 95 % - 学習時間は数分 - 単にネットワークを大きくしただ けで精度が上がる、ということ はない ALEXNET W/ SMALL DATASET 8 : 32.68 % 8 : 68.03 % 8 : 54.60 % 8 : 76.43 % 8 : 61.26 % 8 : 59.15 % 3 : 32.73 %
  82. 82. 2-3. 異なるデータセット(CALTECH-101) より複雑なデータを試してみましょう — Caltech 101データセット ( http://www.vision.caltech.edu /Image_Datasets/Caltech101/ ) — 画像幅: 80 – 3481 — 画像高さ: 92 – 3999 — 総画像枚数: 9144 — 出力カテゴリは101クラス
  83. 83. 2-3. 異なるデータセット(CALTECH-101) データセット&モデルの作成 — データセット作成 — Training Images: /data/101_ObjectCategories — Dataset Name: “Caltech 101” — モデルの作成 — Select Dataset: “Caltech 101”を選択 — Training epochs: 5 — Network: AlexNet — Model Name: “Caltech model”
  84. 84. 一つのファイルでテスト 1. Image Pathに、以下を入力 /notebooks/Dolphin2.jpg 2. “Show visualization and statistics”をチェック 3. “Classify One”ボタンを押す
  85. 85. www.nvidia.com/dli

×