Upload
toshinori-hanya
View
1.106
Download
4
Embed Size (px)
Citation preview
Deep Learning で似た画像を見つける技術Open Hyper Scale 勉強会 #5半谷
Contents
1.導入 – 「似ている」について
2.理論 – Deep Learning で類似性を扱うには
3.実践 – Chainer による実装
1. 導入「似ている」について
Introduction
• 私たち人間は、画像を見てどれとどれが似ているかを自然と判断できる。• では機械に似ている、似ていないを判断させるにはどうすれば良いか?
利用例 (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
利用例 (2) 人物の同定• 複数の映像中から同じ人を見つける• 顔画像から同じ人かどうか/似ているかどうかを判定
Market-1501 dataset: www.liangzheng.org/Project/project_reid.html
https://arxiv.org/abs/1503.03832
数字は画像間の類似度を表したもので、小さいほど似ている。
「似ている」という情報は様々な利用用途がある!
2. 理論Deep Learningで類似性を扱うには
計算機で類似性を扱う枠組み• 入力画像を固定長のベクトル表現に変換する
• このベクトル同士の距離が類似性を表すように、モデルをつくる
入力画像
何らかのモデル0.5-0.30.8
固定長のベクトル 距離が近い = 似ている!
① 全ての画像を 固定長のベクトルに 変換して保存しておく② 検索用の画像が 入力されたらそれも ベクトルに変換する
③ 距離を計算して 近いもの順に もとの画像を返す
• 検索の仕組み:
http://host.robots.ox.ac.uk/pascal/VOC/voc2012/segexamples/images/21.jpg
より効率のよいやり方• 入力画像を 0 or 1 の 2 値の固定長ベクトルに変換する
• ストレージにも優しい&距離計算も高速
NOTE: Deep Hashing のキーワードで調べるといろいろ見つかります
入力画像
何らかのモデル011
固定長のベクトル 距離が近い = 似ている!
http://host.robots.ox.ac.uk/pascal/VOC/voc2012/segexamples/images/21.jpg
Deep Learning で類似性を扱う• Deep Learning で類似性を保持した固定長ベクトルを計算する方法
入力画像
何らかのモデル0.5-0.30.8
固定長のベクトルこれ (↑)どうやってつくるの?• 論文を漁ると、だいたい次の2パターンが主流(と思われる(あんまり自信ない
A. CNN の隠れ層の情報を使う方法
B. 類似ペア/三つ揃いの距離を使う方法
http://host.robots.ox.ac.uk/pascal/VOC/voc2012/segexamples/images/21.jpg
CNN の隠れ層の情報を使う方法• 通常の分類問題としてトレーニングする• CNN の浅い層の出力は低レベルな視覚的な特徴( e.g. 輪郭)をもつ• CNN の深い層の出力は抽象化された、意味的な情報を含んでいる⇨ この情報を類似性の計算に利用する!
入力画像
convolution fully connected
人車オートバイ…猫
0.5-0.30.8
そのまま使うor何らかの変換
http://host.robots.ox.ac.uk/pascal/VOC/voc2012/segexamples/images/21.jpg
類似ペア / 三つ揃いの距離を使う方法
• 入力画像から固定長のベクトルを出力するモデルを使う• 類似ペアは距離が小さくなるように、似ていないペアは距離が大きくなるように損失を設定
Query : CNN0.5-0.30.8
Similar: CNN0.5-0.10.7
Dissimilar : CNN-0.2-0.50.1
距離が小さくなるように
距離が大きくなるように
http://host.robots.ox.ac.uk/pascal/VOC/voc2012/segexamples/images/21.jpghttp://host.robots.ox.ac.uk/pascal/VOC/voc2012/segexamples/images/02.jpghttp://host.robots.ox.ac.uk/pascal/VOC/voc2012/segexamples/images/06.jpg
3. 実践Chainerによる実装
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
SSDH モデル
• Supervised Semantics-preserving Deep Hashing (SSDH) model• 通常の分類問題としてトレーニングする• 分類は隠れた特徴の組み合わせ( ON/OFF )で行えるものと考える
⇒ 隠れ層の出力を類似性の評価に使用する• 隠れ層の出力が 0 or 1 の 2 値となるように工夫をしている
https://arxiv.org/abs/1507.00101 01101
2 値化の工夫
① シグモイド関数を使用
② 0 か 1 のどちらかに 近づける ③ 0 と 1 の バランスをとる
0.90.1…0.4
K
latent layer の出力 H出力を 0~1 の範囲に制限
推論時
10…0
h > 0.5?
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項を追加
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 を採用
Chainer による実験 (3/3)• CIFAR-10 テストセット( 10 クラス、 10000 枚 ) を、トレーニングしたモ
デルで2 値コードに変換
• 1 つをクエリ画像として、距離を計算。距離の小さいものトップ 10 の画像を表示
011001110010SSDH
011001110010 011001101010
010001011011
110111001010
⇔ 残り 9999 枚・・・ ・・・
結果
クエリ画像 検索結果( Top10 )
まとめ
まとめ• 画像の類似性はいろいろなアプリケーションに応用できる。• 類似性をシステムで扱う場合には、固定サイズのベクトルに変換するのが通例。
• ベクトル間の距離が小さいほど似ていると考える。• Deep Learning で類似性を扱う枠組みを調査した。
• CNN の隠れ層の情報を使う方法• 類似ペアの出力の距離が近くなるように訓練する方法(似ていないものは遠くなるように。)
• Chainer で SSDH を実装した。• 類似画像検索を動作させることができた。• 分類用のデータセットで学習させることができるので、色々試してみたい。
⇒ Github にアップしました: https://github.com/t-hanya/chainer-SSDH
ご清聴ありがとうございました
付録
t-SNE で可視化CIFAR-10 のテストセット画像( 10000 枚)の 2 値化コードをt-SNE で 2 次元空間に可視化