Upgrade to Pro — share decks privately, control downloads, hide ads and more …

深層学習による画像認識の基礎と実践 RSJ Seminar 2019-05-29

深層学習による画像認識の基礎と実践 RSJ Seminar 2019-05-29

日本ロボット学会 ロボット工学セミナー 第119回 原理から学ぶロボットのための画像処理技術での以下の講演スライドのうち,初学者向け内容を取り出したものです

---
深層学習による画像認識の基礎と実践
https://www.rsj.or.jp/seminar/s119/

深層学習用のソフトウェアフレームワークとそれを高速に実行するハードウェアが一般的になるにつれ,高性能な画像認識アプリケーションを手軽に実装することが可能となってきました.ツールの使い方は洗練されてきたものの,深層学習モデルは中身を解釈することが難しく,初心者が実際に使うにはいくつもの落とし穴があります.この講演では初心者を対象として,深層学習の基礎となるニューラルネットワークの動作原理や学習手法,画像認識でよく使われるアーキテクチャについて一通り解説し,基礎知識の習得を目指します.また,クラス分類や回帰のような簡単な問題設定から,物体検出,セグメンテーションのように様々な画像認識の課題設定についても整理します.

Kota Yamaguchi

May 29, 2019
Tweet

More Decks by Kota Yamaguchi

Other Decks in Technology

Transcript

  1. Agenda 1. 深層学習の基礎 • ニューラルネットワーク • モデルの学習 • CNNアーキテクチャ 2.

    画像認識の基礎と実践 • 分類、検出、領域分割 • ソフトウェア
  2. なぜ深層学習︖ • 圧倒的な性能 ILSVRCでの毎年のエラー率の推移 物体カテゴリ認識 slide credit: Jia Deng 物体カテゴリ検出

    http://image-net.org/challenges/ilsvrc+coco2016 ⼈間は0.04 程度? 2012年からディープ ラーニング登場
  3. Shallow vs. Deep Models R G RED APPLE 浅い機械学習モデル 深層学習モデル

    1) 画像特徴の抽出 2) データ点の判別 RED APPLE 特徴表現から判別まで複数の情報変換を学習 表現学習 + ⽬的タスク ⼈が設計 ⽬的タスクのみ
  4. パーセプトロン x1 x2 xd w1 w2 w3 x3 wd Sigmoid関数:

    ⼊⼒ 重み (Weights) . . . t e t - + = 1 1 ) ( s 出⼒: s(w×x + b) ⼈⼯的な神経細胞のモデル関数 パーセプトロンの積み重ねが ニューラルネットワーク
  5. ユニットの形 () = 1 1 + )* ⾮線形変換 (活性化関数) 線形変換

    + Sigmoid Tanh tanh() = /* − 1 /* + 1 relu() = max(, 0) ReLU = + Inner product = conv(, ) Convolution softmax() = )* ∑*C )*C Softmax
  6. 学習: モデル推定 • ニューラルネットワークの重みが損失関数を⼩さくするように 最適化 • 例: ⼆乗誤差 min E

    F G G − I (G , ) / 正解値 出⼒値 ネットワークのパラメータ (ニューロンの重み) ⼊⼒値 I
  7. 勾配降下法 (Gradient descent) • ⾮線形関数の最適化⼿法 • 局所的に線形近似、勾配 ⽅向に現在の解を更新 損失関数 (Loss

    function) L(X, W) = || y – y(x, W) ||2 Wt Wt+1 e JKL ⟵ J − (, J ) 損失関数の勾配 学習率 現在の パラメータ 学習率︓どれだけ現在の解を動かすか W
  8. 逆伝播計算 G,X = F Y GKL,Y GKL,Y G,X j GKL

    G,X G,X GKL,L GKL,/ GKL,Z 第i層 第i+1層 第 i+1 層の出⼒についての偏微分があれば、第 i 層の出⼒についての損失 関数の偏微分がチェインルールで計算可能 GKL,Y G,X = G,X,Y GKL,Y (GKL,Y − 1) 例: sigmoidの場合
  9. パラメータ勾配の計算 最終的に求めたいもの: 損失関数Lに対するパラメータwの偏微分 G,X,Y = GKL,Y GKL,Y G,X,Y 1. 損失に対する層出⼒の偏微

    分を逆伝播で計算 2. 損失に対するパラメータの 偏微分は層ごとに解析的に計算 GKL,Y G,X,Y = G,X GKL,Y (GKL,Y − 1) 例: sigmoidの場合
  10. よく使われる損失関数 Euclidean (⼆乗誤差) Cross Entropy (交差エントロピー) F G G −

    \ G / − F G F ]^ G ln \ G ⼆値分類: Sigmoid + Cross entropy 多クラス分類: Softmax + Cross entropy 回帰問題に利⽤ 出⼒が確率分布の場合に利⽤
  11. 学習データの分割 学習 Train 検証 Validation テスト Test • SGDでパラメー タの学習に利⽤

    • 学習時の現在の性 能確認⽤ • ハイパーパラメー タの調整に利⽤ • 学習係数 • モーメンタム • 性能評価に利⽤ • 最後まで取っておく • Validationと兼ねる 場合もあり • データは⼀般的に3つまたは2つに分割 • 分割割合は8:1:1など、⼀般に学習データが多めだが、5:5などもあり
  12. 様々なニューラルネットワーク 順伝播型ニューラルネット 再帰型ニューラルネット (RNN) 畳み込みニューラルネット (CNN) • 結合が再帰的なもの • 系列データの利⽤

    • 画像のフィルタ演算がユニット • 画像などの空間配列データに利⽤ その他、オートエンコーダ、GAN、ボルツマンマシン
  13. Attention • (系列)データに対し、重みを決 定するモジュール • RNNの代替⼿法として⾃然⾔語 処理でよく⾒られるように • Transformer [Kaiser

    2017] • BERT [Devlin 2018] • GPT-2 [Radford 2019] Jay Alammar, The Illustrated Transformer, https://jalammar.github.io/illustrated-transformer/
  14. 画像認識 DensePose [Gueler, 2018] skin hair bag dress jacket/blazer necklace

    shoes sweater/cardigan top/t-shirt vest watch/bracelet Semantic Segmentation (領域分割) Instance Segmentation + Pose Estimation [Pongsate, 2017] Classification (分類) Object Detection (検出) Steel drum Cat Domestic cat Feline Tabby Domestic animal [Jia, 2014] image-net.org
  15. 畳み込みニューラルネットワーク (CNN) • ほぼ全ての画像認識⼿法に使われるニューラルネットワーク Y. LeCun, L. Bottou, Y. Bengio,

    and P. Haffner, Gradient-based learning applied to document recognition, Proceedings of the IEEE 86(11): 2278–2324, 1998. Many slide credits: Rob Fergus (NYU)
  16. 畳み込み (Convolution) Input Feature Map . . . Slide credit:

    Rob Fergus • 画像フィルタ演算 • パラメータ数が少ない • 位置不変 • 局所関係のみに依存性
  17. 代表的なCNNアーキテクチャ • LeNet [LeCun 1998] • AlexNet [Krizhevsky 2012] •

    VGG [Simonyan 2014] • GoogLeNet [Szegedy 2014] • ResNet [He 2015] • ResNeXt [Xie 2016] • DenseNet [Huang 2016] • Squeeze-and-Excitation Networks [Hu 2017]
  18. 深度推定 R Mahjourian, Unsupervised Learning of Depth and Ego-Motion from

    Monocular Video Using 3D Geometric Constraints, CVPR 2018 • セグメンテーションと同等 • 出⼒はピクセル単位の深度回帰
  19. 物体検出 Mask R-CNN https://medium.com/@jonathan_hui/ebe6d793272 [He 2017] • インスタンンスセグメンテーション • RPNによる物体候補領域の検出

    • 各候補領域で画像分類、マスク、位置ずれ予測 • Detectron https://github.com/facebookresearch/Detectron
  20. 画像⽣成 • ⼊⼒︓ノイズ、出⼒︓画像の⽣成モデルをGANで学習 BigGAN: A New State of the Art

    in Image Synthesis https://medium.com/syncedreview/biggan-a-new-state-of-the-art-in-image-synthesis-cf2ec5694024
  21. ソフトウェア • ディープラーニングフレー ムワークが近年充実 • Tensorflow / Keras • PyTorch

    • Chainer • 共通する特徴 • Python API • アクセラレータ (GPU) • Define-by-runスタイル https://towardsdatascience.com/deep-learning-framework-power-scores-2018-23607ddf297a
  22. 初学者向け環境 • Google Colaboratory • Cloud Jupyter notebook 環境 •

    すぐにPythonコードを実 ⾏しながら学習可能 https://colab.research.google.com
  23. コード例 TensorflowでMNIST データセットの⼿書き ⽂字認識をする場合 どのフレームワークで もやることは似ている import tensorflow as tf

    mnist = tf.keras.datasets.mnist (x_train, y_train),(x_test, y_test) = mnist.load_data() x_train, x_test = x_train / 255.0, x_test / 255.0 model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(512, activation=tf.nn.relu), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10, activation=tf.nn.softmax) ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(x_train, y_train, epochs=5) model.evaluate(x_test, y_test) データ準備 モデル記述 学習 テスト https://www.tensorflow.org/tutorials
  24. モデル記述 import tensorflow as tf from tensorflow.keras import layers class

    MyModel(tf.keras.Model): def __init__(self, num_classes): super(MyModel, self).__init__() # Define your layers here. self.dense_1 = layers.Dense(32, activation='relu') self.dense_2 = layers.Dense(num_classes, activation='sigmoid') def call(self, inputs): # Define your forward pass here, # using layers you previously defined in `__init__` x = self.dense_1(inputs) return self.dense_2(x) model = MyModel(num_classes=10) model.compile(optimizer=tf.train.RMSPropOptimizer(0.001), loss='categorical_crossentropy', metrics=['accuracy']) model.fit(data, labels, batch_size=32, epochs=5) Tensorflow 2.0の場合 PyTorch / Chainerも似ている Model subclassingスタイル
  25. 学習ループ PyTorchの場合 # Assume we have data loader and model

    defined. data_loader = DataLoader(MyDataset(), batch_size=4) model = MyModel() optimizer = torch.optim.SGD(model.parameters(), lr=0.01) for epoch in range(10): model.zero_grad() for input, labels in data_loader(): # Forward inference and compute loss output = model(input) loss = F.binary_cross_entropy(output, labels) # Backprop and update weights loss.backward() optimizer.step() エポック バッチ
  26. Cloud機械学習環境 ⾃前で⼤規模GPUクラスタを⽤意 しなくても計算資源を⽤意可能 • Google Cloud Platform (GCP) • Cloud

    Machine Learning Engine • Cloud AutoML • Cloud Vision API • Amazon Web Services (AWS) • Amazon SageMaker • Amazon Rekognition
  27. Mobile & IoT 各種フレームワークにはC++ APIが存在 • Tensorflow Lite • Caffe2

    • ChainerX / Menoh モバイルOSにはAPIも • Apple CoreML • Android Neural Networks API ONNX: Open Neural Network Exchange • フレームワーク間でモデルを相 互運⽤するフォーマット • PyTorchで学習、Caffe2でデプ ロイといった使い⽅ TVM: Compiler Stack for accelerators
  28. Open AI Gym • 強化学習のための環境を提供するフレーム ワーク import gym env =

    gym.make("CartPole-v1") observation = env.reset() for _ in range(1000): env.render() # your agent here (this takes random actions) action = env.action_space.sample() observation, reward, done, info = env.step(action) if done: observation = env.reset() env.close()