Successfully reported this slideshow.
Your SlideShare is downloading. ×

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

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 25 Ad

More Related Content

Slideshows for you (20)

Advertisement

Recently uploaded (20)

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次元空間に可視化

×