deep learningで似た画像を見つける技術 | ohs勉強会#5

25
Deep Learning で ででででででででででで Open Hyper Scale ででで #5 でで

Upload: toshinori-hanya

Post on 14-Apr-2017

1.106 views

Category:

Technology


4 download

TRANSCRIPT

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

Deep Learning で似た画像を見つける技術Open Hyper Scale 勉強会 #5半谷

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

Contents

1.導入 – 「似ている」について

2.理論 – Deep Learning で類似性を扱うには

3.実践 – Chainer による実装

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

1. 導入「似ている」について

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

Introduction

• 私たち人間は、画像を見てどれとどれが似ているかを自然と判断できる。• では機械に似ている、似ていないを判断させるにはどうすれば良いか?

Page 5: Deep Learningで似た画像を見つける技術 | OHS勉強会#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

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

利用例 (2) 人物の同定• 複数の映像中から同じ人を見つける• 顔画像から同じ人かどうか/似ているかどうかを判定

Market-1501 dataset: www.liangzheng.org/Project/project_reid.html

https://arxiv.org/abs/1503.03832

数字は画像間の類似度を表したもので、小さいほど似ている。

「似ている」という情報は様々な利用用途がある!

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

2. 理論Deep Learningで類似性を扱うには

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

計算機で類似性を扱う枠組み• 入力画像を固定長のベクトル表現に変換する

• このベクトル同士の距離が類似性を表すように、モデルをつくる

入力画像

何らかのモデル0.5-0.30.8

固定長のベクトル 距離が近い = 似ている!

① 全ての画像を 固定長のベクトルに 変換して保存しておく② 検索用の画像が 入力されたらそれも ベクトルに変換する

③ 距離を計算して 近いもの順に もとの画像を返す

• 検索の仕組み:

http://host.robots.ox.ac.uk/pascal/VOC/voc2012/segexamples/images/21.jpg

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

より効率のよいやり方• 入力画像を 0 or 1 の 2 値の固定長ベクトルに変換する

• ストレージにも優しい&距離計算も高速

NOTE: Deep Hashing のキーワードで調べるといろいろ見つかります

入力画像

何らかのモデル011

固定長のベクトル 距離が近い = 似ている!

http://host.robots.ox.ac.uk/pascal/VOC/voc2012/segexamples/images/21.jpg

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

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

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

   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

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

  類似ペア / 三つ揃いの距離を使う方法

• 入力画像から固定長のベクトルを出力するモデルを使う• 類似ペアは距離が小さくなるように、似ていないペアは距離が大きくなるように損失を設定

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

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

3. 実践Chainerによる実装

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

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

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

SSDH モデル

• Supervised Semantics-preserving Deep Hashing (SSDH) model• 通常の分類問題としてトレーニングする• 分類は隠れた特徴の組み合わせ( ON/OFF )で行えるものと考える

⇒ 隠れ層の出力を類似性の評価に使用する• 隠れ層の出力が 0 or 1 の 2 値となるように工夫をしている

https://arxiv.org/abs/1507.00101 01101

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

2 値化の工夫

① シグモイド関数を使用

② 0 か 1 のどちらかに 近づける ③ 0 と 1 の バランスをとる

0.90.1…0.4

K

latent layer の出力 H出力を 0~1 の範囲に制限

推論時

10…0

h > 0.5?

Page 17: Deep Learningで似た画像を見つける技術 | OHS勉強会#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項を追加

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

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 を採用

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

Chainer による実験 (3/3)• CIFAR-10 テストセット( 10 クラス、 10000 枚 ) を、トレーニングしたモ

デルで2 値コードに変換

• 1 つをクエリ画像として、距離を計算。距離の小さいものトップ 10 の画像を表示

011001110010SSDH

011001110010 011001101010

010001011011

110111001010

⇔ 残り 9999 枚・・・ ・・・

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

結果

クエリ画像 検索結果( Top10 )

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

まとめ

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

まとめ• 画像の類似性はいろいろなアプリケーションに応用できる。• 類似性をシステムで扱う場合には、固定サイズのベクトルに変換するのが通例。

• ベクトル間の距離が小さいほど似ていると考える。• Deep Learning で類似性を扱う枠組みを調査した。

• CNN の隠れ層の情報を使う方法• 類似ペアの出力の距離が近くなるように訓練する方法(似ていないものは遠くなるように。)

• Chainer で SSDH を実装した。• 類似画像検索を動作させることができた。• 分類用のデータセットで学習させることができるので、色々試してみたい。

⇒ Github にアップしました: https://github.com/t-hanya/chainer-SSDH

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

ご清聴ありがとうございました

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

付録

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

t-SNE で可視化CIFAR-10 のテストセット画像( 10000 枚)の 2 値化コードをt-SNE で 2 次元空間に可視化