(57)【特許請求の範囲】
【請求項１】
二値化された特徴ベクトルを取得する特徴ベクトル取得部と、
複数の実数ベクトルからなる実数行列を、係数行列と、要素として二値または三値の離散値のみを持つ複数の基底ベクトルからなる基底行列との積に分解して得られた前記ベクトルと前記係数行列とを含む辞書データを記憶するデータベースと、
前記特徴ベクトルと前記複数の実数ベクトルの各々との内積の計算として、前記特徴ベクトルと前記基底行列との積を計算し、さらに当該積と前記係数行列との積を計算して、その結果を用いて、前記複数の実数ベクトルの各々と前記特徴ベクトルとの関連性を判定するベクトル演算部と、
を備えたことを特徴とする関連性判定装置。
【請求項２】
前記複数の実数ベクトルを並べることで前記実数行列を生成する実数行列生成部をさらに備えたことを特徴とする請求項１に記載の関連性判定装置。
【請求項３】
前記実数行列生成部は、前記複数の実数ベクトルが所定のパラメータを有する場合に、当該パラメータの順に従って前記複数の実数ベクトルを並べることにより前記実数行列を生成することを特徴とする請求項２に記載の関連性判定装置。
【請求項４】
前記特徴ベクトルは、ＨＯＧ特徴量であり、
前記複数の実数ベクトルは、複数の線形識別器のパラメータに対応する複数の重みベクトルであり、
前記ベクトル演算部は、前記関連性の判定として、前記複数の線形識別器の識別関数によって、複数の基準の各々に対する前記特徴ベクトルの識別を行なう
ことを特徴とする請求項２に記載の関連性判定装置。
【請求項５】
前記実数行列生成部は、前記特徴ベクトル及び前記複数の実数ベクトルが１又は複数のパラメータを有する場合に、当該パラメータの順に従って前記複数の実数ベクトルを並べることにより前記実数行列を生成し、
前記ベクトル演算部は、前記係数行列を構成する複数のベクトルであって前記複数の実数ベクトルが並べられた方向と同方向の複数のベクトルの各々を前記パラメータに関する連続関数で表現し、前記識別関数を最大にする前記パラメータを、前記特徴ベクトルのパラメータ値として求めることを特徴とする請求項４に記載の関連性判定装置。
【請求項６】
前記特徴ベクトルは、ｋ−ｍｅａｎｓクラスタリングによるクラスタリングの対象となるベクトルであり、
前記実数ベクトルは、ｋ−ｍｅａｎｓクラスタリングにおける代表ベクトルであり、
前記ベクトル演算部は、前記関連性の判定として、前記特徴ベクトルと前記代表ベクトルとの間の距離の演算を含むクラスタリング処理を行なう
ことを特徴とする請求項１ないし３のいずれか一項に記載の関連性判定装置。
【請求項７】
前記特徴ベクトルは、ｋ−ｍｅａｎｓ  ｔｒｅｅによる近似最近傍探索の対象となるベクトルであり、
前記実数ベクトルは、ｋ−分木のノードに登録されている代表ベクトルであり、
前記ベクトル演算部は、前記関連性の判定として、前記特徴ベクトルと前記代表ベクトルとの間の距離の演算を含むクラスタリング処理を行なう
ことを特徴とする請求項１ないし３のいずれか一項に記載の関連性判定装置。
【請求項８】
前記特徴ベクトルは、画像の特徴量を表すベクトルであることを特徴とする請求項１ないし７のいずれか一項に記載の関連性判定装置。
【請求項９】
コンピュータを、請求項１ないし８のいずれか一項に記載の関連性判定装置として機能させるための関連性判定プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像、音声、文字等のコンテンツの特徴ベクトルを用いた演算処理を行う関連性判定装置、関連性判定プログラム、及び関連性判定方法に関し、特に、複数の実数ベクトルと二値ベクトルに変換された特徴ベクトルとの内積の計算を含むベクトル演算によって特徴ベクトルと複数の実数ベクトルの各々との関連性の判定を行う関連性判定装置、及び関連性判定プログラムに関するものである。
【背景技術】
【０００２】
従来より、画像検索、音声認識、文章検索、パターン認識など、多くの分野で特徴量が用いられている。特徴量とは、画像、音声、文章などの情報を、計算機で扱いやすいように変換したものである。特徴量は、Ｄ次元のベクトル（特徴ベクトル）で表される。
【０００３】
特徴ベクトルを用いた演算を行うことで、例えば、コンテンツの類似度を判定することができる。すなわち、画像αの特徴ベクトルと、画像βの特徴ベクトルの距離が小さければ、αとβは似ているとみなすことができる。同様に、音声波形αの特徴ベクトルと、音声波形βの特徴ベクトルとの距離が小さければ、αとβは似ているとみなすことができる。このように、音声認識、文章検索、パターン認識等の情報処理では、情報を特徴ベクトルに変換して、特徴ベクトル同士を比較して、その距離を求めることにより情報の類似度を判断する。
【０００４】
特徴ベクトル間の距離の尺度としては、Ｌ１ノルム、Ｌ２ノルム、ベクトル間角度などが用いられる。これらは、特徴ベクトルｘ，ｙ∈ＲＤについて、次のように計算できる。
Ｌ１ノルム
【数１】
0006375420.tif 000002
Ｌ２ノルム
【数２】
0006375420.tif 000003
ベクトル間角度
【数３】
0006375420.tif 000004
【０００５】
特徴ベクトルが実数ベクトルである場合には、以下のような問題がある。まず、２つの特徴ベクトルｘ，ｙ∈ＲＤの間の距離の計算が遅くなるという問題がある。例えば、Ｌ２ノルムの二乗を距離の尺度として用いる場合、
【数４】
0006375420.tif 000005
であるから、Ｄ回の引き算、Ｄ回の乗算、Ｄ−１回の加算が必要である。特に、特徴ベクトルが浮動小数で表現される場合には、この計算負荷は非常に高くなる。特徴ベクトルが高次元になれば、この計算負荷はさらに高くなる。
【０００６】
また、大量のメモリを消費する点も問題となる。特徴ベクトルを４バイトの単精度実数で表現する場合、Ｄ次元の特徴ベクトルは４Ｄバイトのメモリを消費する。特徴ベクトルが高次元になれば、このメモリ消費量は大きくなる。大量の特徴ベクトルを扱う場合、扱う特徴ベクトルの数だけメモリを消費することになる。
【０００７】
そこで近年、特徴ベクトルを０と１の列から成るバイナリコードに変換することにより、これら２つの問題を解決する手法が提案されている。代表的な手法として、ランダムプロジェクション（random projection、非特許文献１参照）、ベリースパースランダムプロジェクション（very sparse random projection、非特許文献２参照）、及びスペクトラルハッシング（Spectral Hashing、非特許文献３参照）がある。
【０００８】
これらの手法では、Ｄ次元の特徴ベクトルがｄビットのバイナリコードに変換される。この変換は、もともとの空間における距離が、変換後の空間におけるハミング距離と強く相関するように行われる（もともとの空間における距離と、変換後の空間におけるハミング距離と強く相関する根拠については、非特許文献１の１１２１ページのＬｅｍｍａ３．２を参照）。これによって、特徴ベクトル間の距離の計算を、バイナリコード同士のハミング距離計算で代用できるようになる。
【０００９】
ハミング距離とは、二つのバイナリコードのうち、異なるビットの数を数えたものである。この計算は、二つのコードのＸＯＲをとった後に１が立っているビット数を数えるだけなので、非常に高速に行うことができる。多くの場合、バイナリコード変換によって、数十〜数百倍程度の高速化が可能である。また、特徴ベクトル間の距離の計算を、バイナリコード同士のハミング距離計算で代用することにより、もともと４Ｄバイトであったメモリの必要容量を、ｄ／８バイトまで削減できる。これにより、数十〜数百分の一にメモリ容量を節約できる。
【００１０】
抽出された特徴量をバイナリコードに変換して、さまざまなアルゴリズムを適用することで、コンテンツの検索や認識などが可能となる。例えば類似コンテンツを検索する場合には、あらかじめデータベースに登録されているコンテンツの特徴量を、すべてバイナリコードに変換しておく。また、入力クエリとして与えられたコンテンツの特徴量をバイナリコードに変換する。そして、入力クエリのバイナリコードと、データベースに登録されているすべてのバイナリコードとの間のハミング距離を計算することで、入力クエリに類似するコンテンツを検索して出力できる。
【先行技術文献】
【非特許文献】
【００１１】
【非特許文献１】Michel X. Goemans, avid P. Williamson, "Improved approximation algorithms for maximum cut and satisfiability problems using semidefinite programming", Journal of the ACM Volume 42 , Issue 6 (November 1995) Pages: 1115-1145
【非特許文献２】Ping Li, Trevor J. Hastie, Kenneth W. Church, "very sparse random projections", KDD '06 Proceedings of the 12th ACM SIGKDD international conference on Knowledge discovery and data mining (2006)
【非特許文献３】Y. Weiss, A. Torralba, R. Fergus., "Spectral Hashing", Advances in Neural Information Processing Systems, 2008.
【発明の概要】
【発明が解決しようとする課題】
【００１２】
バイナリコードはｄビットの０と１の列からなる。これを、各要素が−１及び１の二値のみを取るｄ次元のベクトルと考えることもできる。以下の説明における混乱を避けるために、「バイナリコード」と「二値ベクトル」という用語について、以下のように区別をする。「バイナリコード」は、０と１の列からなるデータ表現である。例えば、Ｃ言語において１２８ビットのバイナリコードをメモリ上に格納する場合は、符号無し整数（unsigned char）型の１６要素分の配列を用意すればよい（８ｂｉｔ×１６＝１２８ｂｉｔ）。
【００１３】
一方、「二値ベクトル」は、各要素が二値のみを取るベクトルである。例えば、二値ベクトルを各要素が−１及び１のみをとるベクトルとする場合には、バイナリコード「０１１０１１１０」に対応する二値ベクトルは、（−１，１，１，−１，１，１，１，−１）Ｔである。もちろん、各要素が０及び１の二値のみを取るベクトルも二値ベクトルであるし、さらには、各要素が任意のα及びβ（ここでα≠βである）の二値のみを取るベクトルも二値ベクトルである。ただし、「バイナリコード」と「二値ベクトル」の違いは、情報の表現に関するものであり、両者に本質的な違いはない。
【００１４】
特徴ベクトルを、各要素が−１及び１の二値のみを取るｄ次元の二値ベクトルに変換すれば、ＳＶＭ（サポートベクトルマシン）による識別処理や、ｋ−ｍｅａｎｓクラスタリングなど、さまざまな処理をバイナリコードに対しても適用できる。しかしながら、これらのケースではハミング距離による高速距離計算の恩恵を受けることができないことがある。すなわち、アルゴリズムによっては、バイナリコード変換による高速距離計算の恩恵を受けられないことがある。
【００１５】
バイナリコード変換による高速距離計算の恩恵を受けられない例として、以下では、識別器（Classifier）による認識処理及びｋ−ｍｅａｎｓクラスタリングを説明する。まず、識別器による認識処理については、例えば、二値ベクトルｘ∈｛−１，１｝ｄを２クラスに識別する問題に対して、線形ＳＶＭ（線形サポートベクトルマシン）等の線形識別器を適用することを考える。線形ＳＶＭでは以下の式を評価する。
【数５】
0006375420.tif 000006
ｆ（ｘ）が正ならばｘはクラスＡに属し、ｆ（ｘ）が負ならばｘはクラスＢに属するものとして識別する。 ｗは、重みパラメータであって、ｗ∈Ｒｄである。ｂは、バイアスパラメータであって、ｂ∈Ｒ１である。パラメータｗ及びｂは、学習用に用意した特徴量を用いて、学習処理により自動的に決定される。
【００１６】
ここで、学習用に用意した特徴量が二値ベクトルであっても、ｗ∈Ｒｄは二値にならず、実数値になってしまう。ｆ（ｘ）の計算にはｗＴｘが含まれているが、ｘが二値である一方でｗが実数値のベクトルであるため、ｗＴｘの計算には、浮動小数点演算が必要になってしまう。このように、ＳＶＭを適用する識別器による認識処理では、特徴ベクトルを二値ベクトルとすることによる計算高速化の恩恵を受けることができない。
【００１７】
次に、二値ベクトルに対して、ｋ−ｍｅａｎｓクラスタリングを適用する場合、すなわち、ｄ次元の二値ベクトルがＮ個与えられたとき、互いに距離が近い二値ベクトルをまとめたｋ個のクラスタを求める問題を考える。ｋ−ｍｅａｎｓとは、次の手順によりｋ個のクラスタと代表ベクトルを算出するアルゴリズムである。
【００１８】
ステップ１：Ｎ個の特徴量からｋ個をランダムに選出し、これをクラスタの代表ベクトルとする。
ステップ２：入力として与えられたＮ個の特徴量それぞれについて、最も距離が近い代表ベクトルを求める。
ステップ３：各代表ベクトルに所属する特徴量の平均を計算し、これを新しい代表ベクトルとする。
ステップ４：ステップ２、ステップ３を収束するまで繰り返す。
【００１９】
ｋ−ｍｅａｎｓクラスタリングにおいて問題となるのは、ステップ３において、新しい代表ベクトルが二値ベクトルの平均で定義される点である。入力として与えられたデータが二値ベクトルであっても、平均の演算により、代表ベクトルは実数のベクトルになる。そのため、ステップ２における距離計算では、二値ベクトルと実数ベクトルとの間の距離を求めなければならなくなる。つまり、浮動小数点演算が必要になってしまう。このように、ｋ−ｍｅａｎｓクラスタリングにおいても、特徴ベクトルを二値ベクトルとすることによる計算高速化の恩恵を受けることができない。
【００２０】
上記のように、識別器（Classifier）による認識処理やｋ−ｍｅａｎｓクラスタリングでは、特徴ベクトルを二値ベクトルとすることによる計算高速化の恩恵を受けることができない。その理由は、いずれもｄ次元の二値ベクトルｐ∈｛−１，１｝ｄと、ｄ次元の実数ベクトルｑ∈Ｒｄとの内積演算が必要であるという点にある。なお、ｋ−ｍｅａｎｓクラスタリングで必要なのは、ｄビットの二値ベクトルｐ∈｛−１，１｝ｄと、ｄ次元の実数ベクトルｑ∈Ｒｄとの間の「距離」であるが、これも結局のところ、ｐＴｑという内積の演算に帰着される。なぜなら、ｐとｑとの間のユークリッド距離の二乗は、下式で表現されるからである。
【数６】
0006375420.tif 000007
【００２１】
よって、識別器による認識処理においてもｋ−ｍｅａｎｓクラスタリングにおいても、二値ベクトルとｄ次元の実数ベクトルとの内積の演算を高速化することこそが、問題の解決につながる。
【００２２】
そこで、本出願人は、特徴ベクトルがｄ次元の二値ベクトルｐ∈｛−１，１｝ｄである場合において、そのような特徴ベクトルとｄ次元の実数ベクトルｑ∈Ｒｄとの間の内積（ｐＴｑもしくはｑＴｐ）の演算を高速に行う関連性判定装置を提案している（特願２０１３−２１４１８２号、以下、「先願」という。）。
【００２３】
先願の関連性判定装置は、二値化された特徴ベクトルを取得する特徴ベクトル取得部と、実数ベクトルを二値または三値の離散値のみから構成された要素を持つ複数の基底ベクトルの線形和に分解することで得られた前記複数の基底ベクトルを取得する基底ベクトル取得部と、前記特徴ベクトルと前記複数の基底ベクトルの各々との内積計算を順次行うことで、前記実数ベクトルと前記特徴ベクトルとの関連性を判定するベクトル演算部とを備えている。この構成により、実数ベクトルは複数の二値の基底ベクトルの線形和に分解されたうえで二値化された特徴ベクトルとの内積計算が行なわれるので、特徴ベクトルと実数ベクトルの内積計算を高速化できる。
【００２４】
ところで、二値化された特徴ベクトルと複数の実数ベクトルとの内積を計算することで、特徴ベクトルと複数の実数ベクトルの各々との関連性を判定する必要がある場合がある。例えば、上述のように、線形ＳＶＭでは、特徴ベクトルがクラスＡに属するか、クラスＢに属するか、即ち、特徴ベクトルがある識別基準に該当するか否かのみを判断するものであるが、このような識別を複数の基準について行いたい場合がある。具体的な例としては、撮影された画像に映っているのが、大人であるか否か、子供であるか否か、車であるか否か、道路標識であるか否かをそれぞれ判断したい場合がある。
【００２５】
また、上述のｋ−ｍｅａｎｓクラスタリングでは、入力として与えられたＮ個の特徴ベクトルの各々について、ｋ個の代表ベクトルとの間で内積計算を伴う距離の計算を行う。ここで、ｋ個の代表ベクトルの各々は、上述のように、二値ベクトルの平均で定義されるので、実数ベクトルである。よって、ｋ−ｍｅａｎｓクラスタリングでも、二値化された特徴ベクトルと複数の実数ベクトルとの内積計算が必要となる。
【００２６】
そこで、本発明は、二値化された特徴ベクトルと複数の実数ベクトルとの内積計算を高速化することで、そのような特徴ベクトルと複数の実数ベクトルとの関連性の判定を高速に行うことを目的とする。
【課題を解決するための手段】
【００２７】
本発明の関連性判定装置は、二値化された特徴ベクトルを取得する特徴ベクトル取得部と、複数の実数ベクトルからなる実数行列を、係数行列と、要素として二値または三値の離散値のみを持つ複数の基底ベクトルからなる基底行列との積に分解して得られた前記ベクトルと前記係数行列とを含む辞書データを記憶するデータベースと、前記特徴ベクトルと前記複数の実数ベクトルの各々との内積の計算として、前記特徴ベクトルと前記基底行列との積を計算し、さらに当該積と前記係数行列との積を計算して、その結果を用いて、前記複数の実数ベクトルの各々と前記特徴ベクトルとの関連性を判定するベクトル演算部とを備えた構成を有している。この構成により、特徴ベクトルと複数の実数ベクトルの各々との内積を計算のために、複数の実数ベクトルからなる実数行列が離散値の基底行列と係数行列に分解されており、特徴ベクトルと基底行列との積を計算し、さらに係数行列との積を計算するので、特徴ベクトルと複数の実数ベクトルの各々との内積演算の結果を高速に取得でき、よって特徴ベクトルと複数の実数ベクトルとの関連性の判定を高速に行うことができる。
【００２８】
上記の関連性判定装置は、前記複数の実数ベクトルを並べることで前記実数行列を生成する実数行列生成部をさらに備えていてよい。この構成により、容易に複数の実数ベクトルから実数行列を生成できる。
【００２９】
上記の関連性判定装置において、前記実数行列生成部は、前記複数の実数ベクトルが所定のパラメータを有する場合に、当該パラメータの順に従って前記複数の実数ベクトルを並べることにより前記実数行列を生成してよい。この構成により、実数行列において互いに似た実数ベクトルが隣り合うこととなるので、隣り合う係数行列もまた類似するようになる。
【００３０】
上記の関連性判定装置において、前記特徴ベクトルは、ＨＯＧ特徴量であってよく、前記複数の実数ベクトルは、複数の線形識別器のパラメータに対応する複数の重みベクトルであってよく、前記ベクトル演算部は、前記関連性の判定として、前記複数の線形識別器の識別関数によって、前記複数の基準の各々に対する前記特徴ベクトルの識別を行なってよい。この構成により、複数の線形識別器による特徴ベクトルの識別を高速化できる。
【００３１】
上記の関連性判定装置において、前記実数行列生成部は、前記特徴ベクトル及び前記複数の実数ベクトルが１又は複数のパラメータを有する場合に、当該パラメータの順に従って前記複数の実数ベクトルを並べることにより前記実数行列を生成し、前記ベクトル演算部は、前記係数行列を構成する複数のベクトルであって前記複数の実数ベクトルが並べられた方向と同方向の複数のベクトルの各々を前記パラメータに関する連続関数で表現し、前記識別関数を最大にする前記パラメータを、前記特徴ベクトルのパラメータ値として求めてよい。この構成により、複数の実数ベクトルをまとめて実数行列を生成する際に、複数の実数ベクトルをそれが滑らかに変化するパラメータの順に並べて実数行列を生成することで、識別関数をそのパラメータに関する連続関数で表現できるので、高い分解能で特徴ベクトルのパラメータ値を求めることができる。
【００３２】
上記の関連性判定装置において、前記特徴ベクトルは、ｋ−ｍｅａｎｓクラスタリングによるクラスタリングの対象となるベクトルであってよく、前記実数ベクトルは、ｋ−ｍｅａｎｓクラスタリングにおける代表ベクトルであってよく、前記ベクトル演算部は、前記関連性の判定として、前記特徴ベクトルと前記代表ベクトルとの間の距離の演算を含むクラスタリング処理を行なってよい。この構成により、ｋ−ｍｅａｎｓクラスタリングにおける特徴ベクトルと代表ベクトルとの間の距離の演算を高速化できる。
【００３３】
上記の関連性判定装置において、前記特徴ベクトルは、ｋ−ｍｅａｎｓ  ｔｒｅｅによる近似最近傍探索の対象となるベクトルであってよく、前記実数ベクトルは、ｋ−分木のノードに登録されている代表ベクトルであってよく、前記ベクトル演算部は、前記関連性の判定として、前記特徴ベクトルと前記代表ベクトルとの間の距離の演算を含むクラスタリング処理を行なってよい。この構成により、ｋ−ｍｅａｎｓ  ｔｒｅｅによる近似最近傍探索における特徴ベクトルとｋ−分木のノードに登録されている代表ベクトルとの間の距離の演算を高速化できる。
【００３４】
上記の関連性判定装置において、前記特徴ベクトルは、画像の特徴量を表すベクトルであってよい。この構成により、画像の特徴量の演算における特徴ベクトルと複数の実数ベクトルの内積計算を高速化できる。
【００３５】
本発明の関連性判定プログラムは、コンピュータを、上記の関連性判定装置として機能させるための関連性判定プログラムである。この構成によっても、特徴ベクトルと複数の実数ベクトルの各々との内積を計算のために、複数の実数ベクトルからなる実数行列を離散値の基底行列と係数行列に分解したうえで、特徴ベクトルと基底行列との積を計算し、さらに係数行列との積を計算するので、特徴ベクトルと複数の実数ベクトルの各々との内積演算の結果を高速に取得でき、よって特徴ベクトルと複数の実数ベクトルとの関連性の判定を高速に行うことができる。
【発明の効果】
【００３６】
本発明によれば、二値化された特徴ベクトルと複数の実数ベクトルの各々との内積計算を高速化でき、そのような特徴ベクトルと複数の実数ベクトルの各々との関連性の判定を高速に行うことができる。
【図面の簡単な説明】
【００３７】
【図１】複数の識別基準で画像中の人を識別する場合の線形ＳＶＭの例を示す図
【図２】複数の識別基準で画像中の人を識別する場合の線形ＳＶＭの例を示す図
【図３】本発明の第１の実施の形態の特徴量演算装置の構成を示すブロック図
【図４】本発明の第１の実施の形態における実数行列の分解を示す図
【図５】本発明の第１の実施の形態における実数行列と基底行列との関係を説明するための図
【図６】本発明の第２の実施の形態における計算例を示す図
【図７】本発明の第１の応用例の物体認識装置の構成を示すブロック図
【図８】本発明の第１の応用例の回転する道路標識と回転角度ごとの辞書及びバイアスを示す図
【図９】本発明の第１の応用例の係数行列の性質を示す図
【図１０】本発明の第１の応用例の識別関数の例を示すグラフ
【図１１】本発明の第２の応用例のｋ−ｍｅａｎｓクラスタリング装置の構成を示すブロック図
【発明を実施するための形態】
【００３８】
以下、本発明の実施の形態の特徴量演算装置について、図面を参照しながら説明する。
【００３９】
まず、特徴ベクトルとの内積を計算すべき実数ベクトルが複数ある場合について説明する。図１は、複数の識別基準で画像中の人を識別する場合の線形ＳＶＭの例を示す図である。この例では、入力されたある特徴ベクトルに対して、図１に示すように、単にその特徴ベクトルの画像内に人がいるか否かの識別ではなく、それが「大人（正面）」であるか否か、「大人（横）」であるか否か、「子供（正面）」であるか否かをそれぞれ識別する。即ち、特徴ベクトルを識別する基準が複数ある。この場合、図１に示すように、識線形ＳＶＭの評価式ｆ（ｘ）の重みパラメータ（以下、「辞書」ともいう。）ｑは、識別基準ごとに複数（ｑ１，ｑ２，ｑ３，…，ｑＬ）用意する必要があり、バイアスｂも識別基準ごとに複数（ｂ１，ｂ２，ｂ３，…，ｂＬ）用意する必要がある。
【００４０】
図２は、被写体までの距離に応じた複数の識別基準で画像中の人を識別する場合の線形ＳＶＭの例を示す図である。この例では、人の識別が、被写体までの距離、即ち画像内の被写体のスケールの変化に対してロバストとなるように、入力されたある特徴ベクトルに対して、図２に示すように、単にその特徴ベクトルの画像内に大人がいるか否かを識別するだけでなく、それが「大人（遠）」であるか否か、「大人（中距離）」であるか否か、「大人（近）」であるか否かをそれぞれ識別する。即ち、この場合も、特徴ベクトルを識別する基準が複数あり、よって、図２に示すように、線形ＳＶＭの辞書ｑは、識別基準ごとに複数（ｑ１，ｑ２，ｑ３，…，ｑＬ）用意する必要があり、バイアスｂも識別基準ごとに複数（ｂ１，ｂ２，ｂ３，…，ｂＬ）用意する必要がある。
【００４１】
このように、ある特徴ベクトルに対して複数の基準で識別を行う場合には、それらの複数の基準が互いに似ていることが多い。図１及び図２もそのような例を示しており、即ち、図１の例では、「大人（正面）」と「大人（横）」は、大人という共通点を有し、「大人（正面）」と「子供（正面）」は、人の正面という共通点を有し、また、「大人（正面）」と「大人（横）」と「子供（正面）」は、人という共通点を有する。図２の例でも、「大人（遠）」と「大人（中距離）」と「大人（近）」は、「大人」という共通点を有する。よって、図１及び図２の複数の実数ベクトルである辞書（ｑ１，ｑ２，ｑ３，…，ｑＬ）は互いに似ている。また、ｋ−ｍｅａｎｓクラスタリングにおいても、ｋ個の実数ベクトルである代表ベクトルが互いに似ていることが多い。本発明の実施の形態の関連性判定装置は、このように複数の実数ベクトルが互いに似ているという性質を生かして、処理を高速化する。
【００４２】
１．実施の形態
１−１．第１の実施の形態
図３は、本発明の実施の形態の特徴量演算装置１００の構成を示すブロック図である。特徴量演算装置１００は、コンテンツ取得部１０１と、特徴ベクトル生成部１０２と、特徴ベクトル二値化部１０３と、実数行列取得部１０４と、実数行列分解部１０５と、ベクトル演算部１０６と、データベース１０７とを備えている。
【００４３】
本実施の形態の特徴量演算装置１００は、後述するように、特徴ベクトルと辞書データとしてデータベースに保存された複数の実数ベクトルとの内積演算を伴うベクトル演算によって、特徴ベクトルと複数の実数ベクトルとの関連性を判定する関連性判定装置として機能する。即ち、特徴演算装置１００は、本発明の関連性判定装置に相当する。
【００４４】
関連性判定装置としての特徴量演算装置１００は、コンピュータが本発明の実施の形態の関連性判定プログラムを実行することにより実現される。関連性判定プログラムは、記録媒体に記録されて、記録媒体からコンピュータによって読み出されてもよいし、ネットワークを通じてコンピュータにダウンロードされてもよい。
【００４５】
コンテンツ取得部１０１は、画像データ、音声データ、文字データ等のコンテンツデータを取得する。これらのコンテンツデータは、外部機器から与えられるものであってもよく、コンテンツ取得部１０１で生成されるものであってもよい。例えば、コンテンツ取得部１０１がカメラであり、そこでコンテンツデータとして画像データが生成されてよい。
【００４６】
特徴ベクトル生成部１０２は、コンテンツ取得部１０１にて取得されたコンテンツデータからＤ次元の特徴ベクトルを生成する。例えばコンテンツが画像である場合には、特徴ベクトル生成部１０２は、画像の特徴量を抽出する。特徴ベクトル二値化部１０３は、特徴ベクトル生成部１０２で生成されたＤ次元の特徴ベクトルを二値化して、各要素が−１及び１の二値のみをとるｄ次元の二値ベクトルｐ∈｛−１，１｝ｄを生成する。この特徴ベクトル二値化部１０３は、本発明の「特徴ベクトル取得部」に相当する。
【００４７】
なお、コンテンツ取得部１０１、特徴ベクトル生成部１０２、及び特徴ベクトル二値化部１０３からなる構成は、最終的に二値化された特徴ベクトルを取得できる構成であればよく、例えば、コンテンツ取得部１０１及び特徴ベクトル生成部１０２を備えずに、特徴ベクトル二値化部１０３が外部機器から特徴ベクトルを取得して、その取得した特徴ベクトルを二値化する構成であってよいし、また、特徴ベクトル二値化部１０３外部機器から二値化された特徴ベクトルを直接取得する構成であってもよい。
【００４８】
実数行列取得部１０４は、複数のｄ次元の実数ベクトルｑｎ∈Ｒｄ（ｎ＝１，２，…，Ｌ）を取得する。複数の実数ベクトルｑｎは、外部機器から与えられるものであってもよく、特徴量演算装置１００の図示しない記憶装置から読み出されるものであってもよく、実数行列取得部１０４で生成されるものであってもよい。各実数ベクトルｑｎは、その要素に浮動小数を含む実数を持つ。ここで、複数の実数ベクトルｑｎを並べたものを実数行列Ｑ＝（ｑ１，ｑ２，ｑ３，…，ｑＬ）∈Ｒｄ×Ｌと表記する。
【００４９】
このように複数の実数ベクトルｑｎをまとめた実数行列Ｑを用いると、図１及び図２の複数の線形ＳＶＭは、下式（１）のようにまとめて表現することができる。
【数７】
0006375420.tif 000008
【００５０】
実数行列分解部１０５は、図４に示すように、ｄ行Ｌ列の実数行列Ｑを、二値の基底行列Ｍ∈｛−１，１｝ｄ×ｋと係数行列との積に分解する。具体的には、実数行列分解部１０５は、ｄ行Ｌ列の実数行列Ｑを、下式（２）によって、二値の要素を持つ基底行列Ｍと実数の要素を持つ係数行列Ｃに分解する。
【数８】
0006375420.tif 000009
ここで、図４に示すように、Ｍ＝（ｍ１，ｍ２，…，ｍｋ）∈｛−１，１｝ｄ×ｋであり、Ｃ＝（ｃ１，ｃ２，…，ｃＬ）Ｔ∈Ｒｋ×Ｌである。
【００５１】
すなわち、基底行列Ｍは、ｋ個の基底ベクトルｍｉからなり、ここで、基底ベクトルｍｉは、要素が−１及び１のみをとるｄ次元の二値ベクトルであり、従って、基底行列Ｍは、要素が−１及び１のみをとるｄ行ｋ列の二値行列である。
【００５２】
また、係数行列Ｃは、Ｌ個（Ｌはクラス数）の係数ベクトルｃｎからなり、ここで、係数ベクトルｃｎは、ｋ個（ｋは基底数）の基底ベクトルに係る実数の係数を要素として持つｋ次元の実数ベクトルである。もちろん、ＱとＭＣはなるべく一致するように分解することが好ましいが、誤差を含んでもよい。以下、実数行列分解部１０５が実数行列Ｑを式（２）のように分解する手法を説明する。
【００５３】
（第１の分解手法）
第１の分解手法として、データ非依存型の分解手法を説明する。第１の分解手法では、実数行列分解部１０５は、分解誤差を表す下式（３）のコスト関数ｇ１を解くことで分解
を行う。
【数９】
0006375420.tif 000010
ただし、基底行列Ｍは二値であり、Ｍ∈｛−１，１｝ｄ×ｋである。
【００５４】
実数行列分解部１０５は、以下の手順で上記のコスト関数ｇ１を解く。
（１）基底行列Ｍ及び係数行列Ｃをランダムに初期化する。
（２）基底行列Ｍの要素を固定して、係数行列Ｃの要素を最小二乗法により最適化することで、コスト関数ｇ１が最小になるように係数行列Ｃの要素を更新する。
（３）係数行列Ｃの要素を固定して、コスト関数ｇ１が最小になるように全探索で基底行列Ｍの要素を更新する。この最小化アルゴリズムである全探索については、後に詳しく述べる。
（４）収束するまで（２）及び（３）を繰り返す。例えば、コスト関数ｇ１が所定の収束条件（例えば、減少量が一定値以下となる）を満たしたときに、収束したと判定する。
（５）ステップ（１）〜ステップ（４）により得た解を候補として保持する。
（６）ステップ（１）〜ステップ（５）を繰り返し、最もコスト関数ｇ１を小さくできた候補基底行列Ｍ及び候補係数行列Ｃを最終結果として採用する。なお、このステップ（１）〜ステップ（５）の繰り返しはなくてもよいが、複数回繰り返すことで、初期値依存の問題を回避できる。
【００５５】
次に、ステップ（３）における基底行列Ｍの更新処理を説明する。図５の破線枠で囲ったように、基底行列Ｍのｊ行目の行ベクトルの要素は、実数行列のｊ行目の要素のみに依存する。よって、基底行列Ｍの各行ベクトルの値は、他の行とは独立して最適化することができるので、基底行列Ｍは、行ごとに網羅探索（全探索）を行うことができる。基底行列Ｍのｊ行目の行ベクトルは、本実施の形態のように二値分解の場合は２k通りしか存在しない（なお、後述の第２の実施の形態の三値分解の場合にも３ｋ通りしか存在しない）。よって、実数行列分解部１０５は、これらをすべて網羅的にチェックし、コスト関数ｇ1を最小化する行ベクトルを採用する。これを基底行列Ｍのすべての行ベクトルに対して適用して、基底行列Ｍの要素を更新する。
【００５６】
（第２の分解手法）
第２の分解手法として、係数行列Ｃを疎にするデータ非依存型の分解手法を説明する。第２の分解手法では、実数行列分解部１０５は、分解誤差である下式（４）のコスト関数ｇ２を解くことで分解を行う。
【数１０】
0006375420.tif 000011
ただし、基底行列Ｍは二値であり、Ｍ∈｛−１，１｝ｄ×ｋである。また、｜Ｃ｜１は、係数行列Ｃの要素のＬ１ノルムであり、λはその係数である。
【００５７】
実数行列分解部１０５は、以下の手順で上記のコスト関数ｇ２を解く。
（１）基底行列Ｍ及び係数行列Ｃをランダムに初期化する。
（２）基底行列Ｍの要素を固定して、係数行列Ｃの要素を近接勾配法で最適化する。
（３）係数行列Ｃの要素を固定して、コスト関数ｇ２が最小になるように全探索で基底行列Ｍの要素を更新する。
（４）収束するまで（２）及び（３）を繰り返す。例えば、コスト関数ｇ２が所定の収束条件（例えば、減少量が一定値以下となる）を満たしたときに、収束したと判定する。
（５）ステップ（１）〜ステップ（４）により得た解を候補として保持する。
（６）ステップ（１）〜ステップ（５）を繰り返し、最もコスト関数ｇ２を小さくできた候補基底行列Ｍ及び候補係数行列Ｃを最終結果として採用する。なお、このステップ（１）〜ステップ（５）の繰り返しはなくてもよいが、複数回繰り返すことで、初期値依存の問題を回避できる。
【００５８】
第２の分解手法によれば、係数行列Ｃを疎にすることができる。係数行列Ｃを疎にすることで、積ＭＣの計算において、係数行列Ｃのゼロ要素にかかわる部分を省略することができ、さらに高速に内積計算を行うことができる。
【００５９】
（第３の分解手法）
次に、第３の分解手法を説明する。第１の分解手法では、コスト関数ｇ１として、分解誤差
【数１１】
0006375420.tif 000012
を定義し、この分解誤差を最小化することを考えた。しかしながら、実数行列を基底行列と係数行列との積に近似した後に実際に近似をしたいのは、特徴ベクトルと実数行列の積ＱＴｐである。
【００６０】
そこで、第３の分解手法では、特徴ベクトルｐをあらかじめＳ個集め、これをまとめたものをＰ∈Ｒｄ×Ｓとする。そして、分解誤差を
【数１２】
0006375420.tif 000013
と定義して、これを最小化する。即ち、第３の分解手法では、実数行列分解部１０５は、下式（５）のコスト関数ｇ３を解くことで分解を行う。
【数１３】
0006375420.tif 000014
このコスト関数ｇ３によれば、実数行列Ｑは、実際のデータの分布に従って分解されることになるため、分解の際の近似精度が向上する。
【００６１】
この近似分解は、基底ベクトルｍｉを逐次的に求めることで行うことができる。第３の分解手法の手順は以下のとおりである。
（１）第１又は第２の分解手法によって、基底行列Ｍ及び係数行列Ｃを求めて、これをそれらの初期値とする。
（２）基底行列Ｍの要素を固定して、係数行列Ｃの要素を最小二乗法で最適化する。
（３）係数行列Ｃの要素を固定して、基底行列Ｍの要素を最適化することで、基底行列Ｍの要素を更新する。この基底行列Ｍの更新処理については後述する。
（４）収束するまで（２）及び（３）を繰り返し、コスト関数ｇ３を最小化した基底行列Ｍ及び係数行列Ｃを候補として保持する。
（５）ステップ（１）〜（６）を繰り返し、コスト関数ｇ３を最小化した基底行列Ｍ及び係数行列Ｃを最終結果として採用する。なお、ステップ（１）では再度第１又は第２の分解手法による基底行列Ｍ及び係数行列Ｃの最適化が行われるので、初期値が変更される。また、ステップ（５）の繰り返しはなくてもよいが、複数回繰り返すことで、初期値依存の問題を軽減できる。
【００６２】
次に、ステップ（３）における基底行列Ｍの更新処理を説明する。データ依存分解の場合、基底行列Ｍの行ベクトルの値は、もはや他の行と独立せず、依存してしまう。基底行列Ｍの要素は、二値又は三値、即ち離散値であるため、基底行列Ｍの最適化は、組合最適化問題となる。よって、基底行列Ｍの最適化には、例えば、グリーディアルゴリズム（Greedy algorithm）、タブーサーチ（Tabu search）、シミュレイテッドアニーリング（Simulated annealing）等のアルゴリズムを用いることができる。ステップ（１）でよい初期値が得られているので、これらのアルゴリズムでも良好に分解誤差を最小化できる。
【００６３】
例えばグリーディアルゴリズムを用いる場合は、以下の手順で基底行列Ｍを最適化する。
（３−１）基底行列Ｍの要素のうち、ランダムにＴ個を選択する。
（３−２）２Ｔ通りの組み合わせ（後述の三値分解の場合は３Ｔ通り）を試し、最もコスト関数ｇ３を最小化したものを採用する。
（３−３）ステップ（３−１）及びステップ（３−２）を収束するまで繰り返す。
【００６４】
（第４の分解手法）
第４の分解手法は、第２の分解手法と第３の分解手法とを組み合わせてものである。具体的には、実数行列分解部１０５は、下式（６）のコスト関数ｇ４を解くことで分解を行う。
【数１４】
0006375420.tif 000015
このコスト関数ｇ４によれば、実数行列Ｑは、実際のデータの分布に従って分解されることになるため、分解の際の近似精度が向上するとともに、係数行列Ｃを疎にすることができる。即ち、第２の分解手法のメリットと第３の分解手法のメリットをいずれも得ることができる。具体的な分解の手順は、第３の分解手法と同様である。
【００６５】
（第１及び第２の分解手法の変形例）
上記の第１及び第２のデータ非依存分解の手法は、分解数をｋとしたとき、ｋ２通り（三値分解の場合はｋ３通り）の探索が必要であるため、ｋが大きいときは、適用が難しい。そのような場合は、あらかじめ実数行列Ｑに所属する実数ベクトルｑｎの互いの類似度を調べ、似ている実数ベクトルどうしをクラスタリングし、各クラスタに対して第１又は第２の分解手法を適用すればよい。
【００６６】
ベクトル演算部１０６は、特徴ベクトルを用いた演算を行なう。演算の具体的内容については、後述にて、本実施の形態の特徴量演算装置１００の応用例とともに具体的に説明する。この特徴ベクトルを用いた演算には、二値化された特徴ベクトルｐ∈｛−１，１｝ｄと実数行列分解部１０５にて分解された実数行列Ｑとの積ＱＴｐの計算が含まれる。以下では、まず、この積ＱＴｐの計算について説明する。
【００６７】
積ＱＴｐは、下式（７）のように式変形できる。
【数１５】
0006375420.tif 000016
ここで、ｍｉＴｐは二値ベクトル同士の内積である。また、ｃｎ,ｉは、ｎ番目のクラスの係数ベクトルｃｎのｉ番目の要素、即ち係数行列Ｃのｉ行ｎ列の要素である。この二値ベクトル同士の内積ｍｉＴｐは、極めて高速に計算可能である。その理由は以下のとおりである。
【００６８】
二値ベクトル同士の内積は、ハミング距離の演算に帰着できる。ハミング距離とは、２つのバイナリコードにおいて、値が異なるビットを数えたものであり、２つの二値ベクトルの間のハミング距離は、すなわち値が異なる要素数を数えたものである。ここで、ｍｉとｐのハミング距離をＤｈａｍｍｉｎｇ（ｍｉ，ｐ）と記述すると、内積ｍｉＴｐは、Ｄｈａｍｍｉｎｇ（ｍｉ，ｐ）と下式（８）の関係がある。
【数１６】
0006375420.tif 000017
ここで、前述のとおり、ｄはバイナリコードのビット数である。
【００６９】
ハミング距離の演算は、２つのバイナリコードにおいて、ＸＯＲを適用した後に、１が立っているビットを数えることで計算できるので、極めて高速である。二値ベクトルがバイナリコード（０と１のビット列）で表現されているのであれば、ハミング距離は、下式（９）で計算できる。
【数１７】
0006375420.tif 000018
ここで、ＸＯＲ関数はｍｉとｐをバイナリコード表現で考えたときに排他的論理和を取る操作であり、ＢＩＴＣＯＵＮＴ関数はバイナリコードの１が立っているビット数を数えあげる処理のことである。
【００７０】
以上をまとめると、積ＱＴｐは下式（１０）のように変形できる。
【数１８】
0006375420.tif 000019
すなわち、ｄビットのハミング距離計算をｋ回行い、ｋ個のハミング距離について、係数行列Ｃに関する重み付け和を計算し、定数項を足したものがＱＴｐになる。よって、ｋが十分小さければ、ＱＴｐを浮動小数点精度で計算するよりも、はるかに高速に計算できるようになる。
【００７１】
データベース１０７には、実数行列分解部１０５にて分解された複数の実数行列Ｑについて、基底行列Ｍと係数行列Ｃの積が辞書データとして記憶されている。ベクトル演算部１０６は、データベース１０７から基底行列Ｍと係数行列Ｃとの積を読み出して、上記の演算を行う。
【００７２】
以上のように、本実施の形態の特徴量演算装置１００によれば、特徴ベクトルを用いた演算処理に特徴ベクトルと実数行列との積演算が含まれている場合にも、特徴ベクトルを二値化した上で、実数行列についても、二値行列である基底行列と係数行列との積に分解するので、特徴ベクトルと実数行列との積の計算において、特徴ベクトルと基底行列との積を計算した上で、さらに係数行列との積を計算することで、特徴ベクトルと実数行列との積演算を高速化できる。
【００７３】
また、複数の実数ベクトルを１つの実数行列としてまとめ、その実数行列を二値行列である基底行列と係数行列とに分解するので、先願の技術のように各実数ベクトルをそれぞれ分解する場合と比較して、基底行列を構成する基底ベクトルの個数、即ち基底数を小さくすることができる。原理的には、１クラスあたり１個以下の基底数（即ち、基底数ｋ≦クラス数Ｌ）とすることも可能である。
【００７４】
１−２．第１の実施の形態の拡張
上記の第１の実施の形態では、二値ベクトルｍｉ、ｐを、それぞれ、ｍｉ∈｛−１，１｝ｄ、ｐ∈｛−１，１｝ｄと定義して、実数行列を二値の基底行列と実数の係数行列との積に分解することで積演算ＱＴｐが高速になることを説明した。しかしながら、ｍｉ、ｐをより一般的な二値ベクトルｍｉ´∈｛−ａ，ａ｝ｄ、ｐ´∈｛−ａ，ａ｝ｄとしても、それらの高速な積演算が可能である。この場合、ｍｉ´Ｔｐ´＝ａ２（ｍｉＴｐ）であることから、−１及び１により定義される二値ベクトル同士の内積にａ２を掛ければよい。
【００７５】
さらに、特徴ベクトル及び基底ベクトルを任意の二値ベクトルｍｉ´´∈｛α，β｝ｄ、ｐ´´∈｛γ，δ｝ｄとしても、高速な内積演算が可能である。ここで、係数α、β、γ、δは実数であり、α≠β、γ≠δである。この場合、ｍｉ´´及びｐ´´は、−１及び１により定義される二値ベクトルｍｉ及びｐの各要素に線形変換を施すことで得られ、下式（１１）及び（１２）のように展開される。
【数１９】
0006375420.tif 000020
【数２０】
0006375420.tif 000021
なお、式（１１）及び（１２）中の太字の「１」は、長さがｄですべての要素が１であるベクトルである。また、式（１１）及び（１２）中のＡ、Ｂ、Ｃ、Ｄは実数であり、式（１１）及び（１２）が成立するようにあらかじめ計算しておけばよい。
【００７６】
内積ｍｉ´´Ｔｐ´´は、下式（１３）のように展開できる。
【数２１】
0006375420.tif 000022
式（１３）の括弧内の計算は、−１及び１からなる二値ベクトル同士の内積である。従って、特徴ベクトルが任意の二値の要素をもつ二値ベクトルにされ、かつ、実数行列を二値の基底行列と実数の係数行列との積に展開した場合にも、高速演算が可能である。
【００７７】
１−３．第２の実施の形態
次に、第２の実施の形態の特徴量演算装置を説明する。第２の実施の形態の特徴量演算装置の構成は、図１に示した第１の実施の形態のそれと同じである。第１の実施の形態では、実数行列分解部１０５は、実数行列Ｑを式（１）によって二値の基底行列と実数の係数行列に分解したが、本実施の形態の特徴量演算装置１００の実数行列分解部１０５は、実数行列を三値の基底行列と実数の係数行列に分解する。
【００７８】
実数行列分解部１０５は、ｄ行Ｌ列の実数行列Ｑ∈Ｒｄ×Ｌを、三値の基底行列と実数の係数行列の積に分解する。具体的には、実数行列分解部１０５は、ｄ行Ｌ列の実数行列Ｑ∈Ｒｄ×Ｌを、下式（１４）によって、三値の要素を持つ基底行列Ｍと実数の要素を持つ係数行列Ｃに分解する。
【数２２】
0006375420.tif 000023
ここで、Ｍ＝（ｍ１，ｍ２，…，ｍｋ）∈｛−１，０，１｝ｄ×ｋであり、Ｃ＝（ｃ１，ｃ２，…，ｃＬ）Ｔ∈Ｒｋ×Ｌである。すなわち、基底行列Ｍは、ｋ個の基底ベクトルｍｉからなり、ここで、基底ベクトルｍｉは、要素が−１、０、及び１のみをとるｄ次元の三値ベクトルであり、従って、基底行列Ｍは、要素が−１、０、及び１のみをとるｄ行ｋ列の三値行列である。
【００７９】
また、係数行列Ｃは、Ｌ個（Ｌはクラス数）の係数ベクトルｃｎからなり、ここで、係数ベクトルｃｎは、ｋ個の基底ベクトルに係る実数の係数を要素として持つｋ次元の実数ベクトルである。もちろん、ＱとＭＣはなるべく一致するように分解することが好ましいが、誤差を含んでもよい。実数行列分解部１０５は、第１の実施の形態と同様にして、第１〜第３の分解手法によって実数行列Ｑを分解できる。
【００８０】
ベクトル演算部１０６は、積ＱＴｐを計算する。以下では、積ＱＴｐを計算するベクトル演算部１０６を特に、積演算部１０６とも呼ぶ。積ＱＴｐは、下式（１５）のように式変形できる。
【数２３】
0006375420.tif 000024
ここで、ｍｉＴｐは、三値ベクトルｍｉと二値ベクトルｐとの内積である。積演算部１０６は、ここで、三値ベクトルｍｉの代わりに、以下に定義する０置換ベクトルｍｉｂｉｎ、フィルタベクトルｍｉｆｉｌｔｅｒ、及び０要素数ｚｉを用いる。
【００８１】
まず、積演算部１０６は、ｍｉの０の要素を、−１又１に置き換える。ｍｉの各要素について、それを−１に置き換えるか、１に置き換えるかは、いずれでもよい。この置き換えによって、０置換ベクトルｍｉｂｉｎ∈｛−１，１｝ｄが生成される。この０置換ベクトルｍｉｂｉｎ∈｛−１，１｝ｄは二値ベクトルである。
【００８２】
また、積演算部１０６は、ｍｉの０の要素を−１に置き換え、０以外の要素を１に置き換える。この置き換えによって、フィルタベクトルｍｉｆｉｌｔｅｒ∈｛−１，１｝ｄが生成される。このフィルタベクトルｍｉｆｉｌｔｅｒも二値ベクトルである。
【００８３】
さらに、積演算部１０６は、ｍｉの０の要素数ｚｉを求める。ｚｉは整数となる。積演算部１０６は、これらの二値ベクトルｍｉｂｉｎ、フィルタベクトルｍｉｆｉｌｔｅｒ、及び０要素数ｚｉを用いて、式（１５）におけるｍｉＴｐを、下の式（１６）及び式（１７）によって計算する。
【数２４】
0006375420.tif 000025
【数２５】
0006375420.tif 000026
ここで、式（１７）のＡＮＤ関数は、二値ベクトルをバイナリコード表現で考えたときに、論理積を取る操作である。
【００８４】
以下、図６の具体例を用いて、式（１６）及び（１７）の導出を説明する。図６は、本実施の形態の計算例を示す図である。図６の例では、ｐ＝｛−１，１，−１，１，−１，１｝であり、ｍｉ＝｛−１，０，１，０，１，１｝である。この例では、ｍｉｂｉｎ＝｛−１，＊，１，＊，１，１｝となる。ここで、「＊」は−１又は１の任意のいずれかを示す。また、ｍｉｆｉｌｔｅｒ＝｛１，−１，１，−１，１，１｝となり、ｚｉ＝２となる。
【００８５】
式（１７）におけるｐとｍｉｂｉｎとの排他的論理和は、ＸＯＲ（ｐ，ｍｉｂｉｎ）＝｛−１，＊，１，＊，１，−１｝となり、すなわち、ｐとｍｉの要素のうち、非０で異なっている要素すなわち−１と１又は１と−１の組となる要素が１となり、−１と−１又は１と１の組となる要素が−１となる。
【００８６】
次に、その排他的論理和とｍｉｆｉｌｔｅｒとの論理積は、ＡＮＤ（ＸＯＲ（ｐ，ｍｉｂｉｎ），ｍｉｆｉｌｔｅｒ））＝｛−１，−１，１，−１，１，−１｝となり、ｐとｍｉの要素のうち、非０で異なっている要素に１が立ち、それ以外は−１となる。このビットカウントを取ると、１である要素の個数、すなわち非０で異なっている要素の個数が数え上げられ、Ｄｆｉｌｔｅｒｅｄ＿ｈａｍｍｉｎｇ（ｐ，ｍｉｂｉｎ，ｍｉｆｉｌｔｅｒ）＝２となる。
【００８７】
ここで、ｐとｍｉの要素のうち、１と１又は−１と−１の組となる要素の個数は、全要素数ｄ＝６から、非０で異なっている要素の個数Ｄｆｉｌｔｅｒｅｄ＿ｈａｍｍｉｎｇ＝２と０である要素の個数ｚｉ＝２を引くことで求められる。すなわち、１と１又は−１と−１の組となる要素の数＝ｄ−Ｄｆｉｌｔｅｒｅｄ＿ｈａｍｍｉｎｇ−ｚｉ＝６−２−２＝２となる。
【００８８】
ｍｉＴｐは、１と１又は−１と−１の組となる要素（積が１になる要素の組）の個数から、−１と１又は１と−１との組となる要素（積が−１になる要素の組）の個数を引いた値と等しいため、ｍｉＴｐ＝（ｄ−Ｄｆｉｌｔｅｒｅｄ＿ｈａｍｍｉｎｇ−ｚｉ）−Ｄｆｉｌｔｅｒｅｄ＿ｈａｍｍｉｎｇ＝ｄ−ｚｉ−２Ｄｆｉｌｔｅｒｅｄ＿ｈａｍｍｉｎｇとなり、式（１６）が得られ、その値は、６−２−２×２＝０となる。なお、この結果は、当然ながら、ｐＴｍｉ＝｛−１，１，−１，１，−１，１｝×｛−１，０，１，０，１，１｝＝１＋０＋（−１）＋０＋（−１）＋１＝０と一致する。
【００８９】
式（１５）〜（１７）をまとめると、積ＱTｐは、下式（１８）のように変形できる。
【数２６】
0006375420.tif 000027
積演算部１０６は、この式（１８）によって、積ＱTｐを計算する。
【００９０】
関数Ｄｆｉｌｔｅｒｅｄ＿ｈａｍｍｉｎｇ（ｐ，ｍｉｂｉｎ，ｍｉｆｉｌｔｅｒ）は、ハミング距離演算と非常に似ており、ＡＮＤ演算が加わっただけである。したがって、Ｑ∈Ｒｄ×Ｌを、三値行列と係数行列との積に分解した場合でも、ＱＴｐを浮動小数点精度で計算するよりも、はるかに高速にＱＴｐを計算できるようになる。
【００９１】
以上のように、ｄ次元の実数行列Ｑ∈Ｒｄ×Ｌを、二値ではなく三値の基底行列と係数行列との積に分解することの利点は、式（１０）の近似が、より少ない数の基底数の基底行列でも成立するようになることにある。すなわち、基底数を小さく抑えられることになるため、さらなる高速化につながる。
【００９２】
１−４．第２の実施の形態の拡張
上記の第２の実施の形態では、二値ベクトルｐ及び三値ベクトルｍｉを、それぞれ、ｐ∈｛−１，１｝ｄ、ｍｉ∈｛−１，０，１｝ｄと定義して、複数の実数ベクトルからなる実数行列を三値の基底行列と係数行列との積に分解することで内積演算ｐＴｍｉが高速になることを説明した。しかしながら、ｐ、ｍｉをより一般的な二値ベクトルｐ´∈｛−ａ，ａ｝ｄ、三値ベクトルｍｉ∈｛−ａ，０，ａ｝ｄとしても、それらの高速な内積演算が可能である。この場合、ｐ´Ｔｍｉ´＝ａ２（ｐＴｍｉ）であることから、−１及び１により定義される二値ベクトル同士の内積にａ２を掛ければよい。
【００９３】
さらに、二値ベクトルｐ及び三値ベクトルｍｉをｐ∈｛α，β｝ｄ、ｍｉ∈｛γ−δ，γ，γ＋δ｝ｄと一般化しても、高速な内積演算が可能である。ここで、α、β、γ、δは実数であり、α≠β、δ≠０である。この場合、ｍｉ及びｐの各要素に下式（１９）及び（２０）の線形変換を施すことで、それぞれｍｉ´´及びｐ´´が得られる。
【数２７】
0006375420.tif 000028
【数２８】
0006375420.tif 000029
なお、式（１９）及び（２０）中の太字の「１」は、長さがｄですべての要素が１であるベクトルである。また、式（１９）及び（２０）中のＡ、Ｂ、Ｃ、Ｄは実数であり、式（１９）及び（２０）が成立するようにあらかじめ計算しておく。
【００９４】
内積ｍｉ´´Ｔｐ´´は、下式（２１）のように展開できる。
【数２９】
0006375420.tif 000030
式（２１）の括弧内の計算は、−１及び１からなる二値ベクトル同士の内積、又は−１及び１からなる二値ベクトルと−１、０、１からなる三値ベクトルとの内積である。従って、特徴ベクトルが任意の二値ベクトルにされ、かつ、実数行列を上記のとおり一般化した三値行列を用いて展開した場合にも、そのような特徴ベクトルと実数行列との積を高速に演算できる。
【００９５】
２．応用例
次に、ベクトル演算部１０６における演算処理について説明する。上記の第１及び第２の実施の形態のベクトル演算部１０６は、二値化された特徴ベクトルｐと複数の実数ベクトルｑをまとめた実数行列Ｑとの積の計算を伴うものであるが、そのような演算処理は種々ある。すなわち、本発明の上記の実施の形態は、特徴ベクトルを用いて演算処理を行なう種々の装置に応用できる。
【００９６】
２−１．第１の応用例
本応用では、本発明がＨＯＧ特徴量を用いてＳＶＭにより複数種類の物体を認識する物体認識装置に応用される。図７は、物体認識装置の構成を示すブロック図である。物体認識装置１０は、ピラミッド画像生成部１１と、ＨＯＧ特徴量抽出部１２と、バイナリコード変換部１３と、パラメータ決定部１４と、パラメータ行列分解部１５と、線形ＳＶＭ識別部１６と、ピーク検出部１７とを備えている。
【００９７】
ピラミッド画像生成部１１は、入力クエリとしての画像を取得して、当該画像を複数段階の倍率でそれぞれ縮小してなるＧ段のピラミッド画像を生成する。これにより、サイズの異なる物体に対処できる。このピラミッド画像生成部１１は、図３に示したコンテンツ取得部１０１に対応する。ＨＯＧ特徴量抽出部１２は、ピラミッド画像の各段における画像を、１６×１６ピクセルのサイズのブロックに分割し、各ブロックからＨＯＧ特徴量を抽出する。ＨＯＧ特徴量抽出部１２は、各ブロックからＤ次元の特徴量を抽出する。このＨＯＧ特徴量抽出部１２は、図３に示した特徴ベクトル抽出部１０２に対応する。バイナリコード変換部１３は、各セルに与えられたＤ次元の特徴量を、ｄ次元の二値ベクトルに変換する。このバイナリコード変換部１３は、図３に示した特徴ベクトル二値化部１０３に対応する。
【００９８】
パラメータ決定部１４は、認識したい対象の種類（大人、子供、車、バイクといった種類であって、パラメータで定義される）ごとに、それぞれ線形ＳＶＭ識別部１６における線形ＳＶＭにて用いる重みベクトルｗｎ（ｎ＝１，２，…，Ｌ）及び実数のバイアスｂｎ（ｎ＝１，２，…，Ｌ）を決定する。パラメータ決定部１４は、学習用に用意された特徴量を用いて、学習処理によってＬ種類の重みベクトルｗｎ及びバイアスｂｎを決定して、重みベクトルｗｎをまとめた重み行列Ｗを生成する。このパラメータ決定部１４は、図３に示した実数行列取得部１０４に対応する。パラメータ行列分解部１５は、重み行列Ｗを第１又は第２の実施の形態で説明した式（２）又は式（１４）によって離散値の基底行列と係数行列との積に分解する。このパラメータ行列分解部１５は、図３に示した実数行列分解部１０５に対応する。
【００９９】
線形ＳＶＭ識別部１６は、線形ＳＶＭによって特徴ベクトルの識別を行なう。線形ＳＶＭ識別部１６は、まず、ｓｘ×ｓｙブロックをひとまとまりとして、検出ウィンドウを構成する。１つの検出ウィンドウから抽出される特徴ベクトルは、ｓｘ×ｓｙ×ｄ次元のベクトルとなる。線形ＳＶＭ識別部１６は、この特徴ベクトルに対して、下式（２２）の線形ＳＶＭを適用する。
【数３０】
0006375420.tif 000031
ここで、線形ＳＶＭにおける積演算ＷＴｘは、第１又は第２の実施の形態として説明した実数行列と二値ベクトルの高速な積演算により実現できる。
【０１００】
検出位置付近では、検出結果が固まることがある。そこで、ピーク検出部１７は、周辺でｆ（ｘ）の値が最大になったところを、代表的な検出位置とする。この線形ＳＶＭ識別部１６及びピーク検出部１７は、特徴ベクトルを用いた処理を行なう構成であり、図３のベクトル演算部１０６に対応する。
【０１０１】
次に、この物体認識装置１０において、ＨＯＧ特徴量により、回転し得る物体を検出する例を説明する。図８は、回転する道路標識について、それぞれの回転角度で辞書ｑｎ及びバイアスｂｎを作成する場合を示している。図８において左右方向は道路標識の回転角度θを示している。
【０１０２】
従来のアプローチでは、回転角度ごとに学習処理を行って辞書ｑｎ及びバイアスｂｎを取得する。その後、入力画像からＨＯＧ特徴量を抽出して、検出ウィンドウ（スライディングウィンドウ）をＬ回適用することでこの道路標識の検出を行っている。しかしながら、このような従来の手法では、１検出ウィンドウあたりＬ回の内積計算が必要となり、計算量が多くなる。また、検出の角度分解能は２ｐｉ／Ｌであり、粗い。
【０１０３】
そこで、本応用例では、パラメータ決定部１４が辞書ｑｎをまとめて行列Ｑとし、ＳＶＭ識別部１６は、下式（２３）により複数の辞書ｑｎと特徴ベクトルｐとの内積計算をまとめて行う。
【数３１】
0006375420.tif 000032
このようにｋ個の整数基底に分解することにより、１検出ウィンドウあたり、ｋ回の二値と二値との内積演算又は二値と三値との内積演算で処理が可能となる。このとき、隣り合う辞書同士が似ているため、整数基底の数ｋを小さくすることができ、原理的には１クラスあたり１個以下（ｋ≦Ｌ）とすることも可能である。
【０１０４】
本応用例では、さらに、ピーク検出部１７が、係数行列Ｃの性質に着目した検出分解能の高精度化を行う。図９は、係数行列Ｃの性質を示す図である。実数ベクトルｑｎが回転角度θをパラメータとして、そのパラメータに従って変化するものである場合には、複数の実数ベクトルｑｎをまとめて実数行列Ｑを生成する際に、図８に示すように、複数の実数ベクトルｑｎをパラメータθの順に並べると、図９に示すように、係数行列Ｃの実数ベクトルｑｎが並べられた方向と同方向の各ベクトル、即ち係数行列Ｃの各行ベクトルの要素の行方向の変化が滑らかになる。
【０１０５】
そこで、ピーク検出部１７は、係数行列Ｃの行ベクトルを多項式でフィッティングして、下式（２４）のように連続関数で表現する。
【数３２】
0006375420.tif 000033
ここで、αｉは、フィッティングの係数である。
【０１０６】
これを用いて識別関数の式を整理すると、回転角度θにおける識別関数は下式（２５）のようにパラメータθに関する連続関数の形式で表現できる。
【数３３】
0006375420.tif 000034
ピーク検出部１７は、この識別関数を用いてピークの検出を行う。ｃｉ（θ）は式（２４）に示すように多項式であるから、ｆθ（ｐ）もまた連続関数（連続の多項式）となる。図１０は、ｆθ（ｐ）の例を示すグラフである。図１０において、横軸は回転角度θであり、縦軸はｆθ（ｐ）である。ピーク検出部１７は、ｆθ（ｐ）が正の最大をとるときのθを対象の回転角度、即ち特徴ベクトルｐのパラメータ値として検出する。
【０１０７】
以上のように、複数の辞書ｑｎをまとめて行列Ｑを生成する際に、複数の辞書ｑｎをそれが滑らかに変化するように、パラメータ（図８の例ではθ）の順に並べて行列Ｑを生成することで、識別関数をそのパラメータに関する多項式の形式で表現できるので、高い分解能でそのパラメータを検出できるようになる。
【０１０８】
なお、上記ではパラメータを回転角度として説明したが、パラメータは例えばスケールであってもよい。すなわち、図２のように検出ウィンドウの大きさは固定とし、検出ウィンドウ内における人物のサイズ（スケール）ごとに、別々に識別器を学習しておき、スケールσに関して多項式のフィッティングを行い、スケールσに関して識別器のピークを求めることで、高精度にスケール推定をおこなえるようになる。また、このように工夫することで、ピラミッド画像自体の生成を不要とできる。さらにパラメータが複数であってもよい。例えば、回転角度θとスケールσの両方に関して上記の多項式へのフィッティングを行ってもよい。この場合、係数はｃｉ（θ，σ）のように、二次元の多項式となる。
【０１０９】
また、係数αｉは、まず係数行列Ｃを求めてから各行をフィッティングして求めることができるが、係数行列Ｃの個々の要素ｃｎ,ｉを求めずに直接係数αｉを求めてもよい。さらに、フィッティングする関数は多項式でなくてもよく、例えば三角関数（サイン、コサイン）にフィッティングしてもよい。
【０１１０】
２−２．第２の応用例
本実施の形態では、本発明がｋ−ｍｅａｎｓクラスタリングに応用される。図１１は、ｋ−ｍｅａｎｓクラスタリング装置の構成を示すブロック図である。ｋ−ｍｅａｎｓクラスタリング装置２０は、コンテンツ取得部２１と、特徴ベクトル生成部２２と、特徴ベクトル二値化部２３と、代表行列更新部２４と、収束判定部２５と、代表行列分解部２６と、最近接代表ベクトル探索部２７とを備えている。
【０１１１】
コンテンツ取得部２１は、クラスタリングの対象となるＮ個のコンテンツを取得する。特徴ベクトル生成部２２は、コンテンツ取得部２１にて取得した各コンテンツからそれらの特徴量を特徴ベクトルｐとして抽出する。特徴ベクトル二値化部２３は、特徴ベクトル抽出部２２にて抽出された各特徴ベクトルを二値化する。
【０１１２】
代表行列更新部２４は、まず、特徴ベクトル二値化部２３で二値化されたＮ個の特徴ベクトルからｋ（＝Ｌ）個をランダムに選出してこれを代表ベクトルｑｎ（ｎ＝１，２，…，Ｌ）とし、これらの代表ベクトルｑｎをまとめた行列を代表行列Ｑとする。収束判定部２５は、代表行列更新部２４が代表行列を更新するごとに収束判定を行なう。収束判定部２５にて収束したと判定された場合には、ｋ−ｍｅａｎｓクラスタリング装置２０はクラスタリングの処理を終了する。代表行列分解部２６は、代表行列更新部２４にて更新された代表行列を離散値（二値又は三値）行列に分解する。
【０１１３】
最近接代表ベクトル探索部２７は、特徴ベクトル二値化部２３より入力されるＮ個の二値ベクトルをそれぞれ最も近傍の代表ベクトルｑｎに所属させる。最近接代表ベクトル探索部２７は、この結果を代表行列更新部２４に出力する。代表行列更新部２４は、各代表ベクトルｑｎについて、それに所属する特徴ベクトル（二値化されている）の平均ベクトルを算出して、これを新しい代表ベクトルｑｎとする。このようにして代表行列更新部２４で更新される代表ベクトルｑｎは、二値ベクトルの平均で算出されるので、実数ベクトルとなる。
【０１１４】
従って、仮に代表行列分解部２６がなければ、最近接代表ベクトル探索部２７は、更新された代表ベクトル（実数ベクトル）と特徴ベクトル（二値ベクトル）との距離を求めるためにそれらの内積を計算しなければならない。そこで、本実施の形態では、上記のように、この代表ベクトルｑｎ（実数ベクトル）の集合である代表行列Ｑを代表行列分解部２６によって、第１又は第２の実施の形態で説明したように、離散値（二値又は三値）行列と実数の係数行列との積に分解する。それによって、最近接代表ベクトル探索部２７における、各特徴ベクトルと各代表ベクトルとの距離の計算を高速にでき、よって各特徴ベクトルが最も近接する代表ベクトル（すなわち、所属すべき代表ベクトル）を高速に探索できる。
【０１１５】
２−３．第３の応用例
本実施の形態では、本発明がｋ−ｍｅａｎｓ  ｔｒｅｅによる近似最近傍探索に応用される。本実施の形態の近似最近傍探索装置は、ｋ−ｍｅａｎｓを用いたｋ−分木による近似最近傍探索手法として、Marius Muja and David G. Lowe, "Fast Approximate Nearest Neighbors with Automatic Algorithm Configuration", in International Conference on Computer Vision Theory and Applications (VISAPP' 09), 2009（http://www.cs.ubc.ca/~mariusm/index.php/FLANN/FLANN、http://people .cs.ubc.ca/~mariusm/uploads/FLANN/flann_visapp09.pdf）に提案されている手法を採用する。
【０１１６】
具体的には、本実施の形態の近似最近傍探索装置は、Ｎ個のデータに対してｋ−ｍｅａｎｓを再帰的に適用することでｋ−分木を構築し、上記提案の木探索の原理により近似的に最近傍点を探索する。この手法は、データが実数ベクトルであり、かつノードに登録されている代表ベクトルが二値ベクトルである場合を前提として設計される。但し、データが二値ベクトルであって、ノードに登録されている代表ベクトルが実数ベクトルである場合にも、第１又は第２の実施の形態を採用することで、木探索を高速化できる。
【０１１７】
３．変形例
特徴量演算装置１００において、コンテンツ取得部１０１、特徴ベクトル生成部１０２、特徴ベクトル二値化部１０３、実数行列取得部１０４、実数行列分解部１０５、及びベクトル演算部１０６の一部と他の部分とが別々の装置として構成されていてもよい。特に、コンテンツ取得部１０１、特徴ベクトル生成部１０２、特徴ベクトル二値化部１０３、及びベクトル演算部１０６が特徴演算装置１００に搭載され、実数行列取得部１０４、及び実数行列分解部１０５が別の装置に搭載されてよい。この場合には、実数行列分解部１０５にて分解された複数の実数行列が特徴演算装置１００のデータベース１０７に記憶され、ベクトル演算部１０６は、データベース１０７から分解された複数の実数行列を取得する。
【０１１８】
上記の実施の形態では、基底行列Ｍが二値又は三値であったが、基底行列Ｍが二値又は三値でなくともよい。基底行列Ｍのとり得る要素の種類が有限の数であれば上記の分解手法を適用して実数行列を分解することができる。また、係数行列Ｃも、基底行列Ｍと同様にあらかじめ定められた離散的な値でもよい。例えば、係数行列Ｃの要素を２のべき乗に制約してもよく、そうすることで、処理を高速化できる。また、分解する実数行列Ｑの要素の平均値が著しく大きい（若しくは小さい）場合、すなわち、平均値が０から著しく離れている場合には、この平均値をあらかじめ実数行列Ｑの各要素から引いてオフセット実数行列を生成し、このオフセット実数行列Ｑ´を基底行列Ｍと係数行列Ｃに分解すると、より少ない基底で式（２）や式（１４）の近似分解を行うことができる。
【０１１９】
なお、第１及び第２の実施の形態において、コンテンツ取得部１０１にて取得されるコンテンツデータは、車両から得られる計測データであってよい。さらに、車両から得られる計測データは、例えば、車両に設置されたカメラで撮影された画像データ、車両に設置されたセンサで計測されたセンシングデータであってよい。この場合に、関連性判定装置としての特徴演算装置１００のベクトル演算部１０６は、計測データと辞書データとの関連性を判定する。例えば、計測データとして、車両に設置されたカメラで撮影された画像データが取得される場合には、辞書データとして複数の人物画像のデータがデータベースに保存されており、関連性判定装置としての特徴演算装置１００のベクトル演算部１０６は、上記の応用例のいずれかによって、画像データの画像に人物が含まれるか否かを判定してよい。
【産業上の利用可能性】
【０１２０】
本発明は、二値化された特徴ベクトルと複数の実数ベクトルの各々との内積計算を高速化でき、そのような特徴ベクトルと複数の実数ベクトルの各々との関連性の判定を高速に行うことができるという効果を有し、複数の実数ベクトルと二値ベクトルに変換された特徴ベクトルとの内積の計算を含むベクトル演算によって特徴ベクトルと複数の実数ベクトルの各々との関連性の判定を行う関連性判定装置等として有用である。
【符号の説明】
【０１２１】
１００  特徴量演算装置
１０１  コンテンツ取得部
１０２  特徴ベクトル生成部
１０３  特徴ベクトル二値化部
１０４  実数行列取得部
１０５  実数行列分解部
１０６  ベクトル演算部（積演算部）
１０  物体認識装置
１１  ピラミッド画像生成部
１２  ＨＯＧ特徴量抽出部
１３  バイナリコード変換部
１４  パラメータ決定部
１５  パラメータ行列分解部
１６  線形ＳＶＭ識別部
１７  ピーク検出部
２０  ｋ−ｍｅａｎｓクラスタリング装置
２１  コンテンツ取得部
２２  特徴ベクトル生成部
２３  特徴ベクトル二値化部
２４  代表行列更新部
２５  収束判定部
２６  代表行列分解部
２７  最近接代表ベクトル算出部
【図１】
0006375420.tif 000035
【図２】
0006375420.tif 000036
【図３】
0006375420.tif 000037
【図４】
0006375420.tif 000038
【図５】
0006375420.tif 000039
【図６】
0006375420.tif 000040
【図７】
0006375420.tif 000041
【図８】
0006375420.tif 000042
【図９】
0006375420.tif 000043
【図１０】
0006375420.tif 000044
【図１１】
0006375420.tif 000045