Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Deep Learningで似た画像を見つける技術 | OHS勉強会#5

Deep Learningで画像間の類似度を扱う技術を勉強しました。Chainerによる実験も行っています。

  • Be the first to comment

Deep Learningで似た画像を見つける技術 | OHS勉強会#5

  1. 1. Deep Learningで 似た画像を見つける技術 Open Hyper Scale勉強会#5 半谷
  2. 2. Contents 1.導入 – 「似ている」について 2.理論 – Deep Learningで類似性を扱うに は 3.実践 – Chainerによる実装
  3. 3. 1. 導入 「似ている」について
  4. 4. Introduction • 私たち人間は、画像を見てどれとどれが似ているかを自然と判断できる。 • では機械に似ている、似ていないを判断させるにはどうすれば良いか?
  5. 5. 利用例(1) 画像の検索 • 気になるランプの詳細情報を、画像から検索。類似商品もチェック • 商品(椅子)が実際に使われているイメージをみてみる • Pinterestで画像から類似画像を検索する http://www.news.cornell.edu/stories/2016/08/where- can-i-buy-chair-app-will-tell-you https://engineering.pinterest.com/blog/introducing-new- way-visually-search-pinterest
  6. 6. 利用例(2) 人物の同定 • 複数の映像中から同じ人を見つける • 顔画像から同じ人かどうか/似ているかどうかを判定 Market-1501 dataset: www.liangzheng.org/Project/project_reid.html https://arxiv.org/abs/1503.03832 数字は画像間の類似度を表したもので、 小さいほど似ている。 「似ている」という情報は 様々な利用用途がある!
  7. 7. 2. 理論 Deep Learningで類似性を扱うに は
  8. 8. 計算機で類似性を扱う枠組み • 入力画像を固定長のベクトル表現に変換する • このベクトル同士の距離が類似性を表すように、モデルをつくる 入力画像 何らかの モデル 0.5 -0.3 0.8 固定長のベクトル 距離が近い=似ている! ① 全ての画像を 固定長のベクトルに 変換して保存しておく ② 検索用の画像が 入力されたらそれも ベクトルに変換する ③ 距離を計算して 近いもの順に もとの画像を返す • 検索の仕組み: http://host.robots.ox.ac.uk/pascal/VOC/voc2012/segexamples/images/21.jpg
  9. 9. より効率のよいやり方 • 入力画像を0 or 1の2値の固定長ベクトルに変換する • ストレージにも優しい&距離計算も高速 NOTE: Deep Hashingのキーワードで調べるといろいろ見つかります 入力画像 何らかの モデル 0 1 1 固定長のベクトル 距離が近い=似ている! http://host.robots.ox.ac.uk/pascal/VOC/voc2012/segexamples/images/21.jpg
  10. 10. Deep Learningで類似性を扱う • Deep Learningで類似性を保持した固定長ベクトルを計算する方法 入力画像 何らかの モデル 0.5 -0.3 0.8 固定長のベクトル これ(↑) どうやって つくるの? • 論文を漁ると、だいたい次の2パターンが主流(と思われる(あんまり自信ない A. CNNの隠れ層の情報を使う方法 B. 類似ペア/三つ揃いの距離を使う方法 http://host.robots.ox.ac.uk/pascal/VOC/voc2012/segexamples/images/21.jpg
  11. 11. CNNの隠れ層の情報を使う方法 • 通常の分類問題としてトレーニングする • CNNの浅い層の出力は低レベルな視覚的な特徴(e.g. 輪郭)をもつ • CNNの深い層の出力は抽象化された、意味的な情報を含んでいる ⇨ この情報を類似性の計算に利用する! 入力画像 convolution fully connected 人 車 オートバイ … 猫 0.5 -0.3 0.8 そのまま使う or 何らかの変換 http://host.robots.ox.ac.uk/pascal/VOC/voc2012/segexamples/images/21.jpg
  12. 12. 類似ペア/三つ揃いの距離を使う方法 • 入力画像から固定長のベクトルを出力するモデルを使う • 類似ペアは距離が小さくなるように、似ていないペアは距離が大きくなるよ うに損失を設定 Query : CNN 0.5 -0.3 0.8 Similar: CNN 0.5 -0.1 0.7 Dissimilar : CNN -0.2 -0.5 0.1 距離が 小さく なるように 距離が 大きく なるように http://host.robots.ox.ac.uk/pascal/VOC/voc2012/segexamples/images/21.jpg http://host.robots.ox.ac.uk/pascal/VOC/voc2012/segexamples/images/02.jpg http://host.robots.ox.ac.uk/pascal/VOC/voc2012/segexamples/images/06.jpg
  13. 13. 3. 実践 Chainerによる実装
  14. 14. Chainerによる類似度モデルの実装 • ChainerでSSDHモデル(以下の論文)を実装しました。 • Supervised Learning of Semantics-Preserving Hashing via Deep Neural Networks for Large-Scale Image Search (https://arxiv.org/abs/1507.00101) • CIFAR-10のトレーニングセットで モデルを訓練し、テストセットで 類似画像検索をやってみました。 https://www.cs.toronto.edu/~kriz/cifar.html
  15. 15. SSDHモデル • Supervised Semantics-preserving Deep Hashing (SSDH) model • 通常の分類問題としてトレーニングする • 分類は隠れた特徴の組み合わせ(ON/OFF)で行えるものと考える ⇒ 隠れ層の出力を類似性の評価に使用する • 隠れ層の出力が0 or 1の2値となるように工夫をしている https://arxiv.org/abs/1507.00101 0 1 1 0 1
  16. 16. 2値化の工夫 ①シグモイド関数を使用 ② 0か1のどちらかに 近づける ③ 0と1 の バランスをとる 0.9 0.1 … 0.4 K latent layerの出力H 出力を0~1の範囲に制限 推論時 1 0 … 0 h > 0.5?
  17. 17. Chainerによる実験(1/3) Conv1 / ReLU LRN Max pool Conv2 / ReLU LRN Max pool Conv3 / ReLU Conv4 / ReLU Conv5 / ReLU Max Pool FC6 / ReLU FC7 / ReLU FC (latent) / Sigmoid FC (class) 特徴抽出部分はAlexNet (conv1 - fc7)を使用。 ImageNetの1000クラス分類問題でトレーニング済みの パラメータを初期値に利用。 Classification Loss Banarization Loss Barancing Loss 隠れ層と分類用の全結合層を追加。 隠れ層は2値ベクトルの出力に使うため、 活性化関数はSigmoid関数を使用。 通常の分類タスクの損失に加え、 2値化のための損失2項を追加
  18. 18. Chainerによる実験(2/3) 項目 値 備考 最適化アルゴリズム Momentum SGD (lr = 0.001, momentum=0.9) 16epoch終了後 lr *= 0.1 隠れ層のノード数 K (=ビット長) 12 バッチサイズ 32 重み正則化 0.0005 エポック数 32 50000 iterations データセット CIFAR-10 training set (10 classes - 50,000 images) • 基本的に論文と同じ値を設定 • 隠れ層のノード数は論文中最も小さい12を採用
  19. 19. Chainerによる実験(3/3) • CIFAR-10テストセット(10クラス、10000枚)を、トレーニングしたモデルで 2値コードに変換 • 1つをクエリ画像として、距離を計算。距離の小さいものトップ10の画像を表 示 011001110010SSDH 011001110010 011001101010 010001011011 110111001010 ⇔ 残り9999枚 ・・・ ・・・
  20. 20. 結果 クエリ画像 検索結果(Top10)
  21. 21. まとめ
  22. 22. まとめ • 画像の類似性はいろいろなアプリケーションに応用できる。 • 類似性をシステムで扱う場合には、固定サイズのベクトルに変換するのが通例。 • ベクトル間の距離が小さいほど似ていると考える。 • Deep Learningで類似性を扱う枠組みを調査した。 • CNNの隠れ層の情報を使う方法 • 類似ペアの出力の距離が近くなるように訓練する方法 (似ていないものは遠くなるように。) • ChainerでSSDHを実装した。 • 類似画像検索を動作させることができた。 • 分類用のデータセットで学習させることができるので、色々試してみたい。 ⇒ Githubにアップしました:https://github.com/t-hanya/chainer-SSDH
  23. 23. ご清聴ありがとうございました
  24. 24. 付録
  25. 25. t-SNEで可視化 CIFAR-10のテストセット 画像(10000枚)の2値化コードを t-SNEで2次元空間に可視化

×