【国等の委託研究の成果に係る記載事項】(出願人による申告)平成22年度、独立行政法人科学技術振興機構、戦略的創造研究推進事業、産業技術力強化法第19条の適用を受ける特許出願
【文献】
岩村雅一 武藤大志 黄瀬浩一,近似最近傍探索におけるデータの重複登録,電子情報通信学会技術研究報告,日本,電子情報通信学会,2011年 5月30日,Vol.111 No.76 (DE2011 1-26),P.111-116
【文献】
武藤大志 多田匡志 岩村雅一 黄瀬浩一,隣接バケット探索を用いた近似最近傍探索手法の解析,電子情報通信学会技術研究報告,日本,電子情報通信学会,2009年 6月19日,PRMU2009-53,P.83-88
(58)【調査した分野】(Int.Cl.,DB名)
前記探索は、クエリベクトルにハッシュ関数を適用して、第1組の各ハッシュテーブルについて対応するk 個のビンを決定し、それらのビンのいずれにも登録されている特徴ベクトルの集合を求め、前記クエリベクトルをその集合に属する各特徴ベクトルと照合する請求項1に記載の方法。
前記登録工程は、追加登録を行おうとする特徴ベクトルが、第1組のバケットに既に登録されているときは、その特徴ベクトルのさらなる追加登録を行わない請求項1〜3のいずれか一つに記載の方法。
前記探索は、クエリベクトルと各特徴ベクトルとの距離を計算し、計算された距離に基づいてクエリベクトルから最も近いと推測される特徴ベクトルを決定する請求項1〜6のいずれか一つに記載の方法。
【先行技術文献】
【非特許文献】
【0006】
【非特許文献1】M. Datar, N. Immorlica, P. Indyk, and V.S. Mirrokni, “Locality-sensitive hashing scheme based on p-stable distributions,”Proc. 20th annual symposium on Computational geometry, pp.253-262, 2004
【非特許文献2】黄瀬浩一、野口和人、岩村雅一、“参照特徴ベクトルの増加による低品質画像の高速・高精度認識,”信学論D,vol.J93-D,no.8, pp.1353-1363,Aug. 2010
【非特許文献3】片山紀生、佐藤真一、“Sr-tree:高次元点データに対する最近接検索のためのインデックス構造の提案,”電子情報通信学会論文誌D,vol.J80-D1,no.8,pp.703-717,Aug. 1997
【非特許文献4】S. Arya, D.M. Mount, N.S. Netanyahu, R. Silverman, and A.Y. Wu, “An optimal algorithm for approximate nearest neighbor searching in fixed dimensions,” Journal of the ACM, vol.45, no.6, pp.891-923, Nov. 1998
【非特許文献5】P. Indyk and R. Motwani, “Approximate nearest neighbor: towards removing the curse of dimensionality,” Proc 30th Symposium on Theory of Computing, pp.604-613, 1998
【非特許文献6】Y. Weiss, A. Torralba, and R. Fergus, “Spectral hashing,” Advances in Neural Information Processing Systems, vol.21, pp.1753-1760, 2008
【非特許文献7】A.Z. Broder, M. Charikar, A.M. Frieze, and M. Mitzenmacher, “Min-wise independent permutations,” Journal of Computer and System Sciences, vol.60, pp.630-659, 2000
【発明を実施するための形態】
【0016】
以下、この発明の好ましい態様について説明する。
前記探索は、クエリベクトルにハッシュ関数を適用して、第1組の各ハッシュテーブルについて対応するk 個のビンを決定し、それらのビンのいずれにも登録されている特徴ベクトルの集合を求め、前記クエリベクトルをその集合に属する各特徴ベクトルと照合してもよい。このようにすれば、特徴ベクトルの追加登録がなされた第1組のハッシュテーブルのみを用い、削除された第2〜第L 組のハッシュテーブルを用いないで探索を行うことができる。
【0017】
また、前記登録工程は、追加登録を行うために選択する特徴ベクトルを、一様乱数を用いて決定してもよい。登録時に各バケットに入る特徴ベクトルの分布と複数回の探索時に各バケットに対応するクエリベクトルの分布が同一だと仮定すると、追加登録を行うために選択する特徴ベクトルを一様乱数に基づいて選択すれば特徴ベクトルの分布が密なバケットは多数対応し、粗なバケットはあまり対応しない。よって、多くのクエリベクトルが入力されることが期待されるバケットで追加登録が多く実行されるようにできる。
【0018】
さらにまた、前記登録工程は、追加登録を行おうとする特徴ベクトルが、第1組のバケットに既に登録されているときは、その特徴ベクトルのさらなる追加登録を行わないようにしてもよい。このようにすれば、同一の特徴ベクトルが重複して登録されることがないので、探索の際に重複した距離計算を行って計算時間を無駄に費やすことを回避できる。
【0019】
前記登録工程は、予め定められたk およびL の値に基づいて処理を行い、登録すべき特徴ベクトルのうち予め定められた割合の数だけ、追加登録を行う特徴ベクトルを選択し、予め定められた個数以上のバケットに入った特徴ベクトルを追加登録するようにしてもよい。これらの値は、実験例においてk ,L ,β,t で表されており、適当な値を用いることによって真の最近傍点が探索される確率を高められる。よって、経験的にあるいは解析によってそれらの好適な値を予め定めておくことができる。
【0020】
また、前記データベースは、各特徴ベクトルのベクトルデータと各特徴ベクトルの識別子とが対応付けられた対応表および各ハッシュテーブルを含み、各ハッシュテーブルは、各ビンに登録される各特徴ベクトルを対応する識別子を用いて表してもよい。このようにすれば、各ハッシュテーブルにベクトルデータを登録する場合に比べ識別子を登録するだけでよいので、各ハッシュ表のメモリ使用量を削減できる。
【0021】
さらにまた、前記探索は、クエリベクトルと各特徴ベクトルとの距離を計算し、計算された距離に基づいてクエリベクトルから最も近いと推測される特徴ベクトルを決定してもよい。このようにすれば、ベクトルの距離計算によってクエリベクトルから最も近いと推測される特徴ベクトルを決定することができる。
ここで示した種々の好ましい態様は、それら複数を組み合わせることもできる。
以下、図面を用いてこの発明をさらに詳述する。なお、以下の説明は、すべての点で例示であって、この発明を限定するものと解されるべきではない。
【0022】
≪基礎となる従来のLSH(Locality Sensitive Hashing)の説明≫
この発明の詳細な説明を述べる前に、その基礎となる従来のLSHについてまず説明する。ここでは、ベクトルデータを対象としたp-stable LSH(前記非特許文献1参照)について述べる。
LSH による近似最近傍探索は、次の2 ステップで実現される。
(1)クエリとの距離を計算すべきデータ、即ち、距離計算対象を選択する。
(2)前記(1)の距離計算対象に対してクエリとの距離を計算し、これに基づいて最近傍データを決定する。
【0023】
ここで(2)に近似処理は含まれていないことに注意しておきたい。つまり、(1)で求める距離計算対象に真の最近傍データが含まれていれば必ず探索は成功する。以下では、LSH において精度を決定する(1)の処理、すなわち距離計算対象の絞り込みがどのように実現されているかを説明する。
LSH による距離計算対象の絞り込み
最初に次式で与えられるLSH で使用されるハッシュ関数h(v)について述べる。
【0024】
【数1】
ここで引数v にはデータp あるいはクエリq を与える。a はデータを射影するd 次元ベクトルであり、d 次元正規分布に従って定められる。w はハッシュ幅であり、ビンの幅を決めるためのパラメータである。
【0025】
なお、式(1)は本稿において重要でない項b を省いている。本来のハッシュ関数は次式で与えられる。
【数2】
ここでb
ji は区間[0 , w ]から一様乱数により定められた実数である。
【0026】
LSH が式(1)のハッシュ関数を用いて距離計算対象を絞り込む様子を図示したのが
図1である。星はクエリq で、丸はデータp を表す。
まず、
図1(a)は、1つのハッシュ関数のみを用いて距離計算対象を決定する様子を示している。結果を先に述べると、図中の灰色地の部分に存在するデータが距離計算対象である。このようにLSHでは式(1)のハッシュ関数を用いて、クエリと同じハッシュ値(インデックス)を持つデータのみを距離計算対象とする。その計算には前述のベクトルa が使用される。幾何的な説明をすれば、ベクトルaにデータやクエリを射影して、等間隔に区切られたビンのどれに属すかでハッシュ値が決定される。クエリと同じビンに入ったデータは同じハッシュ値を持つので距離計算対象となる。このことを改めて定義すると、「h(q) = h(p) を満たす全てのデータp を距離計算対象とする」となる。
なお、厳密には、ハッシュ関数を用いてある参照用データ(キー)に対応する値をすばやく参照するため複数のビンにデータを分類し登録するデータ構造をハッシュテーブルと呼び、狭義のハッシュ関数はあるキーに対応するビンを示す値(ハッシュ値)を与える関数を指す。しかし、この明細書ではデータ構造と関数は一体不可分のものと考えて区別していない。狭義のハッシュ関数を指す場合の他、前記データ構造を示す場合にハッシュ関数あるいはハッシュ関数群の語を用いている。なお、異なるハッシュテーブルは異なる(狭義の)ハッシュ関数を用いてデータを登録する。
【0027】
さて、次は
図1(b)である。注意して
図1(a)を見ると、距離計算対象にはクエリから遠い点も含まれていることがわかる。この状態は距離計算対象を削減するという観点から言えば効率が悪い。そこで、
図1(b)のようにハッシュ関数を複数個(k 個)用いて距離計算対象を更に絞り込む。ここで、これらk 個のハッシュ関数から成るハッシュ関数群を次式のように定義する。
【0029】
複数のハッシュ関数は添字で区別する。
図1中のベクトルa に添字が付いてa
ji となっているのはそのためである。1番目の添え字j はバケットの番号を表す。2番目の添字iはハッシュ関数を表す。このとき、各ハッシュ関数の距離計算対象の積集合をバケットと呼び、クエリのあるバケット(
図1(b)の灰色地領域)内のデータを距離計算対象とする。
【0030】
ここで改めて
図1(a)と
図1(b)を見てみると、実はどちらの図においても真の最近傍データは距離計算対象に含まれていないことに気付く。そこで真の最近傍データが距離計算対象に含まれる確率を上げるために
図1(c)に示すようにバケットを複数(L 個)用いることにする。そして、各バケットの距離計算対象の和集合を最終的な距離計算対象とする。
図1(c)では、2つの灰色地領域のいずれかに含まれるデータが距離計算対象になる。
【0031】
ここで、データベースの構造について簡単に触れておく。データベースS は、具体的には複数のハッシュテーブル(ハッシュ関数を用いたデータ構造の群、即ちハッシュ関数群)で構成されている。データベースS にデータを登録する場合、そのデータのID、データから抽出した特徴ベクトルのベクトルデータおよびベクトルIDを対応付けた対応表11をメモリに格納する。ハッシュテーブルのビンには、ベクトルIDを格納する。登録すべきハッシュのビンは、式(1)を用いて計算する。なお、衝突が起こる場合はリスト構造で連結する。
【0032】
図9は、従来のLSHを適用した物体認識に係るデータベースの構造を示す説明図である。
図9の例では、k 個のハッシュ関数からなるハッシュ関数群g
i(v)をL 個用いて近似最近傍探索を行う。この場合、各基底のベクトルに対応する(L ×k )個のハッシュテーブルを一時的にメモリ上に確保する。ただし、最終的には、コピー先ハッシュ関数群に該当するk 個のハッシュテーブルを残し、他のハッシュテーブルをメモリから削除する。
【0033】
図9を
図1と対応させて説明する、
図1(a)のようにハッシュ関数が1つの場合、データベースは1つのハッシュテーブルh
11(v)を有する。
図1(b)のようにハッシュ関数が2つの場合、データベースは2つのハッシュテーブルh
11(v)、h
12(v)からなるハッシュ関数群g
1(v)を有する。
図1(c)のようにバケットが2つの場合、データベースは2つのハッシュ関数群g
1(v)およびg
2(v)を有する。
【0034】
バケット数L とLSH の性能の関係
LSH の性能は、ハッシュ関数で使用するw の他に、2つのパラメータ、即ち、ハッシュ関数の数k およびバケット数L によって決まる。このうちバケット数L について、精度、計算時間、メモリ使用量との関係を考える。
i)精度:バケット数L の増加に伴って距離計算対象が単調に増加する。そのため、精度は単調に増加する。
ii)計算量:バケット数L の増加に伴い、参照するハッシュテーブル数が単調に増加し、また距離計算対象も単調に増加する。そのため、計算量は単調に増加する。
iii)メモリ使用量:LSH ではハッシュテーブルを構築する際にメモリを使用する。バケット数L の増加に伴って必要なハッシュテーブル数が単調に増加するため、メモリ使用量も単調に増加する。
【0035】
局所性に鋭敏なハッシュ関数と探索効率
局所性に鋭敏なハッシュ関数の探索効率は、非特許文献1に示されている。後述する分析の基盤とするため、ここで紹介する。
式(1)のハッシュ関数は局所性に鋭敏(Locality-Sensitive)なハッシュ関数と呼ばれる。局所性に鋭敏なハッシュ関数とは、近いベクトル同士は同じハッシュ値を取る確率が高く、遠いベクトル同士は同じハッシュ値を取る確率が低いという性質を持つハッシュ関数である。数式を用いて具体的に書けば次のようになる。また、
図2は以下の記述を図示したものである。
【0036】
【数4】
ここでB(q,r)はクエリq から半径r 以内にある点の集合を表す。したがって式(3)は、クエリq から距離r
1 以内の点は確率p
1 以上でクエリと同じハッシュ値を持ち、クエリq から距離r
2 以上の点は確率(1−p
2)以上でクエリと別のハッシュ値を持つ。ここでr
1 <r
2 かつp
1 >p
2 を満たすとする。
【0037】
局所性に鋭敏なハッシュ関数を用いるLSH の探索効率は、次式で与えられる基準ρを用いて記述される。
【数5】
ρは、最近傍の点がクエリq から距離r
1 以内にある確率p
1 が大きければ小さくなり、かつ、最近傍の点がクエリq から距離r
2 以上にある確率p
2 が小さければ小さくなる。よって、ρの値は小さいほどよい。
【0038】
非特許文献1によると、必要なメモリ使用量はO(dn+n
1+ρ) で、計算時間のほとんどはO(nρ) 回の距離計算で占められる。ここで、O(M)あるいはO(Mρ)は、問題を解くために必要なおおよその計算量の表記方法であって、例えば、O(M)はMが定まったときの計算量がα
1M+α
2以下で収まることを表す。ただし、α
1,α
2は定数である。また、例えば、O(M
3)はα
1M
3+α
2M
2+α
3M+α
4以下で収まることを表す。ただしα
1,α
2,α
3,α
4は定数である。また、dはベクトルデータの次元数であり、n は扱うベクトルデータの数である。このとき、O(n
ρlog
1/p2 n) 回のハッシュ関数の評価が必要である。
【0039】
≪この発明に係る最近傍探索の手法≫
この発明は、近似最近傍探索の手法において、データベースにデータを重複登録することで計算時間とメモリ使用量を削減する手法を提案する。
図3にこの発明の手法の概要を示す。まず、
図3(a)では大き目のバケット数L を持つLSH を構築する。そして
図3(b)のように、1つのバケット(「コピー先」バケット)に残りのバケット(「コピー元」バケット)の情報をコピーし、
図3(c)のようにコピー元バケットを削除する。これにより、バケット数が大きいときの性能を少数のバケットのみで実現できる。
【0040】
以下、この発明の手法の処理の詳細を、
図4を参照しながら述べる。最初に前節の「コピー元バケット」と「コピー先バケット」の代わりに、「コピー元ハッシュ関数群」と「コピー先ハッシュ関数群」を作成する。どちらのLSH にも同じデータが登録されているが、ハッシュ関数やバケットが異なる。そして、
【0041】
手順(1):コピー先ハッシュ関数群に登録されているデータを1つ選ぶ。説明の都合上、このデータをY と呼ぶ。次に
手順(2):Y をクエリに見立ててコピー元ハッシュ関数群で探索し、
手順(3):コピー元ハッシュ関数群でY と同じバケットに入った各データについて、同じバケットに入った回数を数える。その後、
手順(4):同じバケットに入った回数が閾値t以上のデータのみを選択して、コピー先ハッシュ関数群のY が属していたバケットに追加登録する。ただし、既に登録済みの場合は追加登録の対象とはしない。
【0042】
この処理を、Y とするデータを変えながら一定数のデータに対して行う。全データのうち、この処理に用いるデータの割合をβで表す(0 ≦β≦1 )。最後にコピー元ハッシュ関数群を破棄し、コピー先ハッシュ関数群を通常のLSH の代わりに用いる。即ち、コピー先ハッシュ関数群のハッシュテーブルのみを残し、コピー元ハッシュ関数群のハッシュテーブルのあったメモリ領域を開放してデータベースを構築する。なお、LSH には「バケットに登録する」という概念はなく、データベース内の各ハッシュテーブルのビンに登録された距離計算対象の積集合を求めることによりバケットが決まる。よって、データのバケットへの追加登録は、具体的には当該バケットを構成する全てのハッシュ関数にデータを登録する。
【0043】
データの追加登録は、クエリとしての物体の画像が与えられたときその画像に対応するクエリベクトルが多く発生するバケットで実行するのが効果的である。データの分布とクエリの分布が同一だと仮定すると、Y とするデータを一様乱数に基づいて選択すればデータの分布が密なバケットは多数選ばれ、粗なバケットはあまり選ばれないため、前述のようにクエリが多く発生するバケットでデータの追加登録が多く実行される。そのため、本稿ではデータの分布とクエリの分布が同一だと仮定し、Y とするデータを一様乱数に基づいて選択する。
【0044】
なお、この実施形態では、データの重複登録によってメモリ使用量が大幅に増加しないように実装した。具体的には、距離計算に用いるベクトルデータを保持しておくテーブルをハッシュテーブルとは別に用意して、各ハッシュ値を持つデータの番号のみをハッシュテーブルに保持した。これにより、重複登録によって増加するメモリ使用量はデータの番号を表す分のみとなる。
【0045】
≪実験例≫
従来のLSH とこの発明による近似最近傍探索手法の結果を比較し、この発明の有効性を確かめる実験を行った。実験にはMulti-PIE Face database (R. Gross, I. Matthews, J. Cohn, T. Kanade, and S. Baker,“Multi-pie,”Proc. 8th IEEE Int'l Conf. on Automatic Face and Gesture Recognition, 2008参照)に含まれる754,200 枚の画像に顔検出(T. Mita, T. Kaneko, B. Stenger, and O. Hori,“Discriminative feature co-occurrence selection for object detection,”IEEE Trans. PAMI, pp.1257-1269, July 2008参照)を適用し、得られた316,089枚の画像に正規化(T. Kozakaya and O. Yamaguchi,“Face recognition by projection-based 3d normalization and shading subspace orthogonalization,”Proc 7th Int' Conf. on Automatic Face and Gesture Recognition, pp.163-168, 2006参照)を施して、928 次元のLBP 特徴(T. Ahonen, A. Hadid, and M. Pietikainen,“Face description with local binary patterns: Application to face recognition,”IEEE Trans. PAMI, vol.28, no.12, pp.2037-2041, Dec. 2006参照)を抽出し、さらに主成分分析によって100 次元に圧縮した。これらの特徴ベクトルからランダムに10,000 をデータベース登録用に選び、別の10,000 をクエリ用に選んだ。
【0046】
事前に全探索で最近傍データを求めておき、それぞれの近似最近傍探索手法で求めた近似最近傍データが一致した割合を精度とした。計算機はOpteron 6174 (2.2GHz) を用いた。追加登録に用いるデータ数に関するパラメータβの値として0.001,0.01,0.1を用いた。これらはそれぞれ追加登録に10 個、100 個、1000個のデータを用いることを意味する。
【0047】
図5に精度と処理時間の関係を、
図6に精度とメモリ使用量の関係を表したグラフを示す。
図5および
図6に係る実験で、距離計算対象を絞り込むために用いるハッシュ関数の数に係るパラメータはk
1=k
2=1、ハッシュ幅に係るパラメータはw
1=w
2=1000で、各グラフともに共通である。また、表1に精度、計算時間、メモリ使用量の比較結果を抜粋する。表1に係る実験は、パラメータとして、k
1=k
2=1,w
1=w
2=1000を用いた。コピー先ハッシュ関数群のパラメータはw
1,k
1,L
1 のように添字1 をつけて表し、コピー元ハッシュ関数群のパラメータはw
2,k
2,L
2 のように添字2 をつけて表している。表1のパラメータt は、クエリに見立てたデータY と同じバケットに入った回数が何回以上のものを登録するかの閾値である。
【0049】
図5および
図6から、この発明の手法は従来手法であるLSH と比べて、同一の処理時間のときやメモリ使用量のときの精度が著しく向上していることがわかる。そのため、同等の精度で比べると、処理時間もメモリ使用量も減少している事が分かる。表1から、β=0.1, L
2 = 20, t = 1 のときに精度99.9%、計算時間0.69ms、メモリ使用量16.4MB を達成している。LSH においてL = 20 のときは精度99.9%、計算時間3.91ms、メモリ使用量18.3MB であるので、これらを比べると、計算時間が18%に、メモリ使用量は90%に削減されたことがわかる。これは、LSHと同等の精度を達成するのに必要なハッシュ関数群の数L が小さくてすむ事に起因していると考えられる。L
2 とt を変化させたときの性能を比べると、L
2 が大きいときのほうが性能がよく、t が大きいときは性能が悪かった。
【0050】
≪分析≫
この発明の手法によるρの変化
前節でこの発明の手法の実験的な有効性を確認した。本節では、前述したLSH の探索効率の基準ρ(式(4)参照)がこの発明の手法ではLSH に比べて小さくなることを示し、解析的にこの発明の手法の有効性を示す。
LSH は局所性に鋭敏なハッシュ関数を用いるので、
図4の手順(2)のように注目データの近傍点をコピー元ハッシュ関数群で探索すると、注目データに近い点ほど高い確率で探索され、遠い点ほど低い確率で探索される。そのため、コピー先ハッシュ関数群ではクエリと同じビンに属するデータが増加する。すなわち、クエリq から距離r
1 以内の点がクエリと同じハッシュ値を持つ確率p
1 と、クエリq から距離r
2 以上の点がクエリと同じハッシュ値を持つ確率p
2 は共に増大する。ただし、注目データに近い領域ではより多くのデータが探索されるため、p
1 はp
2 より大きくなる。この結果、ρが減少する。
【0051】
コピー元ハッシュ関数群のバケット数L2 と閾値t の関係
図4の手順(3)では探索回数が閾値t 以上のデータのみをデータベースに追加登録する。このときに用いる閾値を上手に調整できれば、近傍点として選ばれる確率が高い点を選択的に追加し、ρの減少をさらに促すことができる。本節ではどのような閾値が望ましいのかを考察する。
ここではコピー元ハッシュ関数群のL
2 個のバケットを探索して、あるデータY がy 回みつかったと仮定する。この事象が起こる確率P(y)は次式の二項分布で与えられる。
【0053】
ここで
【数7】
である。確率p は注目データからデータY までの距離の関数であり、両者の距離が近いほど大きくなる。
【0054】
図7は式(5)をプロットしたもので、縦軸は、コピー元ハッシュ関数群でy 回探索される確率P(y)を表している。この式に値を入れて計算してみると、大きな確率p を持つY に近い点(例えばp = 0.5)と小さな確率p を持つY から遠い点(p = 0.3)では分布が異なり、近い点のほうが探索される回数yが多いことがわかる。また、データベースに追加登録をするか否かを決める探索回数の閾値t とデータが選択される確率の関係について考えてみると、閾値t をt = 1としたときよりも、p = 0.5のときの期待値0.5L
2 としたとき(すなわち、
図7(a)に示すL
2 = 10 の場合はt = 5,
図7(b)に示すL
2 = 20のときはt = 10)のほうがY から近い点と遠い点の確率差は大きいことから、適切に閾値を設定することが必要であること、そしてその値は最近傍点が探索される確率を基準に定められる可能性があることがわかる。
【0055】
次に、コピー元ハッシュ関数群のバケット数L
2 がこの発明の手法の性能に及ぼす影響を考える。閾値t を先程と同様にp = 0.5 のときの期待値0.5L
2 としたとき、
図8(a)よりも
図8(b)のほうがY から近い点と遠い点の確率差は大きい。したがって、コピー元ハッシュ関数群のバケット数L
2 を大きくすれば、性能が向上する場合があると考えられる。これは実験結果とよく一致する。
【0056】
前述した実施の形態の他にも、この発明について種々の変形例があり得る。それらの変形例は、この発明の範囲に属さないと解されるべきものではない。この発明には、請求の範囲と均等の意味および前記範囲内でのすべての変形とが含まれるべきである。