狠狠撸

狠狠撸Share a Scribd company logo
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.3
0.8
固定長のベクトル 距離が近い=似ている!
① 全ての画像を
固定長のベクトルに
変換して保存しておく
② 検索用の画像が
入力されたらそれも
ベクトルに変換する
③ 距離を計算して
近いもの順に
もとの画像を返す
? 検索の仕組み:
http://host.robots.ox.ac.uk/pascal/VOC/voc2012/segexamples/images/21.jpg
より効率のよいやり方
? 入力画像を0 or 1の2値の固定長ベクトルに変換する
? ストレージにも優しい&距離計算も高速
NOTE:
Deep Hashingのキーワードで調べるといろいろ見つかります
入力画像
何らかの
モデル
0
1
1
固定長のベクトル 距離が近い=似ている!
http://host.robots.ox.ac.uk/pascal/VOC/voc2012/segexamples/images/21.jpg
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
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
類似ペア/三つ揃いの距離を使う方法
? 入力画像から固定長のベクトルを出力するモデルを使う
? 類似ペアは距離が小さくなるように、似ていないペアは距離が大きくなるよ
うに損失を設定
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
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 0
1
1
0
1
2値化の工夫
①シグモイド関数を使用
② 0か1のどちらかに
近づける
③ 0と1 の
バランスをとる
0.9
0.1
…
0.4
K
latent layerの出力H
出力を0~1の範囲に制限
推論時
1
0
…
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次元空間に可視化

More Related Content

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