(58)【調査した分野】(Int.Cl.,DB名)
前記実数行列生成部は、前記複数の実数ベクトルが所定のパラメータを有する場合に、当該パラメータの順に従って前記複数の実数ベクトルを並べることにより前記実数行列を生成することを特徴とする請求項2に記載の関連性判定装置。
前記実数行列生成部は、前記特徴ベクトル及び前記複数の実数ベクトルが1又は複数のパラメータを有する場合に、当該パラメータの順に従って前記複数の実数ベクトルを並べることにより前記実数行列を生成し、
前記ベクトル演算部は、前記係数行列を構成する複数のベクトルであって前記複数の実数ベクトルが並べられた方向と同方向の複数のベクトルの各々を前記パラメータに関する連続関数で表現し、前記識別関数を最大にする前記パラメータを、前記特徴ベクトルのパラメータ値として求めることを特徴とする請求項4に記載の関連性判定装置。
【発明の概要】
【発明が解決しようとする課題】
【0012】
バイナリコードはdビットの0と1の列からなる。これを、各要素が−1及び1の二値のみを取るd次元のベクトルと考えることもできる。以下の説明における混乱を避けるために、「バイナリコード」と「二値ベクトル」という用語について、以下のように区別をする。「バイナリコード」は、0と1の列からなるデータ表現である。例えば、C言語において128ビットのバイナリコードをメモリ上に格納する場合は、符号無し整数(unsigned char)型の16要素分の配列を用意すればよい(8bit×16=128bit)。
【0013】
一方、「二値ベクトル」は、各要素が二値のみを取るベクトルである。例えば、二値ベクトルを各要素が−1及び1のみをとるベクトルとする場合には、バイナリコード「01101110」に対応する二値ベクトルは、(−1,1,1,−1,1,1,1,−1)
Tである。もちろん、各要素が0及び1の二値のみを取るベクトルも二値ベクトルであるし、さらには、各要素が任意のα及びβ(ここでα≠βである)の二値のみを取るベクトルも二値ベクトルである。ただし、「バイナリコード」と「二値ベクトル」の違いは、情報の表現に関するものであり、両者に本質的な違いはない。
【0014】
特徴ベクトルを、各要素が−1及び1の二値のみを取るd次元の二値ベクトルに変換すれば、SVM(サポートベクトルマシン)による識別処理や、k−meansクラスタリングなど、さまざまな処理をバイナリコードに対しても適用できる。しかしながら、これらのケースではハミング距離による高速距離計算の恩恵を受けることができないことがある。すなわち、アルゴリズムによっては、バイナリコード変換による高速距離計算の恩恵を受けられないことがある。
【0015】
バイナリコード変換による高速距離計算の恩恵を受けられない例として、以下では、識別器(Classifier)による認識処理及びk−meansクラスタリングを説明する。まず、識別器による認識処理については、例えば、二値ベクトルx∈{−1,1}
dを2クラスに識別する問題に対して、線形SVM(線形サポートベクトルマシン)等の線形識別器を適用することを考える。線形SVMでは以下の式を評価する。
【数5】
f(x)が正ならばxはクラスAに属し、f(x)が負ならばxはクラスBに属するものとして識別する。 wは、重みパラメータであって、w∈R
dである。bは、バイアスパラメータであって、b∈R
1である。パラメータw及びbは、学習用に用意した特徴量を用いて、学習処理により自動的に決定される。
【0016】
ここで、学習用に用意した特徴量が二値ベクトルであっても、w∈R
dは二値にならず、実数値になってしまう。f(x)の計算にはw
Txが含まれているが、xが二値である一方でwが実数値のベクトルであるため、w
Txの計算には、浮動小数点演算が必要になってしまう。このように、SVMを適用する識別器による認識処理では、特徴ベクトルを二値ベクトルとすることによる計算高速化の恩恵を受けることができない。
【0017】
次に、二値ベクトルに対して、k−meansクラスタリングを適用する場合、すなわち、d次元の二値ベクトルがN個与えられたとき、互いに距離が近い二値ベクトルをまとめたk個のクラスタを求める問題を考える。k−meansとは、次の手順によりk個のクラスタと代表ベクトルを算出するアルゴリズムである。
【0018】
ステップ1:N個の特徴量からk個をランダムに選出し、これをクラスタの代表ベクトルとする。
ステップ2:入力として与えられたN個の特徴量それぞれについて、最も距離が近い代表ベクトルを求める。
ステップ3:各代表ベクトルに所属する特徴量の平均を計算し、これを新しい代表ベクトルとする。
ステップ4:ステップ2、ステップ3を収束するまで繰り返す。
【0019】
k−meansクラスタリングにおいて問題となるのは、ステップ3において、新しい代表ベクトルが二値ベクトルの平均で定義される点である。入力として与えられたデータが二値ベクトルであっても、平均の演算により、代表ベクトルは実数のベクトルになる。そのため、ステップ2における距離計算では、二値ベクトルと実数ベクトルとの間の距離を求めなければならなくなる。つまり、浮動小数点演算が必要になってしまう。このように、k−meansクラスタリングにおいても、特徴ベクトルを二値ベクトルとすることによる計算高速化の恩恵を受けることができない。
【0020】
上記のように、識別器(Classifier)による認識処理やk−meansクラスタリングでは、特徴ベクトルを二値ベクトルとすることによる計算高速化の恩恵を受けることができない。その理由は、いずれもd次元の二値ベクトルp∈{−1,1}
dと、d次元の実数ベクトルq∈R
dとの内積演算が必要であるという点にある。なお、k−meansクラスタリングで必要なのは、dビットの二値ベクトルp∈{−1,1}
dと、d次元の実数ベクトルq∈R
dとの間の「距離」であるが、これも結局のところ、p
Tqという内積の演算に帰着される。なぜなら、pとqとの間のユークリッド距離の二乗は、下式で表現されるからである。
【数6】
【0021】
よって、識別器による認識処理においてもk−meansクラスタリングにおいても、二値ベクトルとd次元の実数ベクトルとの内積の演算を高速化することこそが、問題の解決につながる。
【0022】
そこで、本出願人は、特徴ベクトルがd次元の二値ベクトルp∈{−1,1}
dである場合において、そのような特徴ベクトルとd次元の実数ベクトルq∈R
dとの間の内積(p
Tqもしくはq
Tp)の演算を高速に行う関連性判定装置を提案している(特願2013−214182号、以下、「先願」という。)。
【0023】
先願の関連性判定装置は、二値化された特徴ベクトルを取得する特徴ベクトル取得部と、実数ベクトルを二値または三値の離散値のみから構成された要素を持つ複数の基底ベクトルの線形和に分解することで得られた前記複数の基底ベクトルを取得する基底ベクトル取得部と、前記特徴ベクトルと前記複数の基底ベクトルの各々との内積計算を順次行うことで、前記実数ベクトルと前記特徴ベクトルとの関連性を判定するベクトル演算部とを備えている。この構成により、実数ベクトルは複数の二値の基底ベクトルの線形和に分解されたうえで二値化された特徴ベクトルとの内積計算が行なわれるので、特徴ベクトルと実数ベクトルの内積計算を高速化できる。
【0024】
ところで、二値化された特徴ベクトルと複数の実数ベクトルとの内積を計算することで、特徴ベクトルと複数の実数ベクトルの各々との関連性を判定する必要がある場合がある。例えば、上述のように、線形SVMでは、特徴ベクトルがクラスAに属するか、クラスBに属するか、即ち、特徴ベクトルがある識別基準に該当するか否かのみを判断するものであるが、このような識別を複数の基準について行いたい場合がある。具体的な例としては、撮影された画像に映っているのが、大人であるか否か、子供であるか否か、車であるか否か、道路標識であるか否かをそれぞれ判断したい場合がある。
【0025】
また、上述のk−meansクラスタリングでは、入力として与えられたN個の特徴ベクトルの各々について、k個の代表ベクトルとの間で内積計算を伴う距離の計算を行う。ここで、k個の代表ベクトルの各々は、上述のように、二値ベクトルの平均で定義されるので、実数ベクトルである。よって、k−meansクラスタリングでも、二値化された特徴ベクトルと複数の実数ベクトルとの内積計算が必要となる。
【0026】
そこで、本発明は、二値化された特徴ベクトルと複数の実数ベクトルとの内積計算を高速化することで、そのような特徴ベクトルと複数の実数ベクトルとの関連性の判定を高速に行うことを目的とする。
【課題を解決するための手段】
【0027】
本発明の関連性判定装置は、二値化された特徴ベクトルを取得する特徴ベクトル取得部と、複数の実数ベクトルからなる実数行列を、係数行列と、要素として二値または三値の離散値のみを持つ複数の基底ベクトルからなる基底行列との積に分解して得られた前記ベクトルと前記係数行列とを含む辞書データを記憶するデータベースと、前記特徴ベクトルと前記複数の実数ベクトルの各々との内積の計算として、前記特徴ベクトルと前記基底行列との積を計算し、さらに当該積と前記係数行列との積を計算して、その結果を用いて、前記複数の実数ベクトルの各々と前記特徴ベクトルとの関連性を判定するベクトル演算部とを備えた構成を有している。この構成により、特徴ベクトルと複数の実数ベクトルの各々との内積を計算のために、複数の実数ベクトルからなる実数行列が離散値の基底行列と係数行列に分解されており、特徴ベクトルと基底行列との積を計算し、さらに係数行列との積を計算するので、特徴ベクトルと複数の実数ベクトルの各々との内積演算の結果を高速に取得でき、よって特徴ベクトルと複数の実数ベクトルとの関連性の判定を高速に行うことができる。
【0028】
上記の関連性判定装置は、前記複数の実数ベクトルを並べることで前記実数行列を生成する実数行列生成部をさらに備えていてよい。この構成により、容易に複数の実数ベクトルから実数行列を生成できる。
【0029】
上記の関連性判定装置において、前記実数行列生成部は、前記複数の実数ベクトルが所定のパラメータを有する場合に、当該パラメータの順に従って前記複数の実数ベクトルを並べることにより前記実数行列を生成してよい。この構成により、実数行列において互いに似た実数ベクトルが隣り合うこととなるので、隣り合う係数行列もまた類似するようになる。
【0030】
上記の関連性判定装置において、前記特徴ベクトルは、HOG特徴量であってよく、前記複数の実数ベクトルは、複数の線形識別器のパラメータに対応する複数の重みベクトルであってよく、前記ベクトル演算部は、前記関連性の判定として、前記複数の線形識別器の識別関数によって、前記複数の基準の各々に対する前記特徴ベクトルの識別を行なってよい。この構成により、複数の線形識別器による特徴ベクトルの識別を高速化できる。
【0031】
上記の関連性判定装置において、前記実数行列生成部は、前記特徴ベクトル及び前記複数の実数ベクトルが1又は複数のパラメータを有する場合に、当該パラメータの順に従って前記複数の実数ベクトルを並べることにより前記実数行列を生成し、前記ベクトル演算部は、前記係数行列を構成する複数のベクトルであって前記複数の実数ベクトルが並べられた方向と同方向の複数のベクトルの各々を前記パラメータに関する連続関数で表現し、前記識別関数を最大にする前記パラメータを、前記特徴ベクトルのパラメータ値として求めてよい。この構成により、複数の実数ベクトルをまとめて実数行列を生成する際に、複数の実数ベクトルをそれが滑らかに変化するパラメータの順に並べて実数行列を生成することで、識別関数をそのパラメータに関する連続関数で表現できるので、高い分解能で特徴ベクトルのパラメータ値を求めることができる。
【0032】
上記の関連性判定装置において、前記特徴ベクトルは、k−meansクラスタリングによるクラスタリングの対象となるベクトルであってよく、前記実数ベクトルは、k−meansクラスタリングにおける代表ベクトルであってよく、前記ベクトル演算部は、前記関連性の判定として、前記特徴ベクトルと前記代表ベクトルとの間の距離の演算を含むクラスタリング処理を行なってよい。この構成により、k−meansクラスタリングにおける特徴ベクトルと代表ベクトルとの間の距離の演算を高速化できる。
【0033】
上記の関連性判定装置において、前記特徴ベクトルは、k−means treeによる近似最近傍探索の対象となるベクトルであってよく、前記実数ベクトルは、k−分木のノードに登録されている代表ベクトルであってよく、前記ベクトル演算部は、前記関連性の判定として、前記特徴ベクトルと前記代表ベクトルとの間の距離の演算を含むクラスタリング処理を行なってよい。この構成により、k−means treeによる近似最近傍探索における特徴ベクトルとk−分木のノードに登録されている代表ベクトルとの間の距離の演算を高速化できる。
【0034】
上記の関連性判定装置において、前記特徴ベクトルは、画像の特徴量を表すベクトルであってよい。この構成により、画像の特徴量の演算における特徴ベクトルと複数の実数ベクトルの内積計算を高速化できる。
【0035】
本発明の関連性判定プログラムは、コンピュータを、上記の関連性判定装置として機能させるための関連性判定プログラムである。この構成によっても、特徴ベクトルと複数の実数ベクトルの各々との内積を計算のために、複数の実数ベクトルからなる実数行列を離散値の基底行列と係数行列に分解したうえで、特徴ベクトルと基底行列との積を計算し、さらに係数行列との積を計算するので、特徴ベクトルと複数の実数ベクトルの各々との内積演算の結果を高速に取得でき、よって特徴ベクトルと複数の実数ベクトルとの関連性の判定を高速に行うことができる。
【発明の効果】
【0036】
本発明によれば、二値化された特徴ベクトルと複数の実数ベクトルの各々との内積計算を高速化でき、そのような特徴ベクトルと複数の実数ベクトルの各々との関連性の判定を高速に行うことができる。
【発明を実施するための形態】
【0038】
以下、本発明の実施の形態の特徴量演算装置について、図面を参照しながら説明する。
【0039】
まず、特徴ベクトルとの内積を計算すべき実数ベクトルが複数ある場合について説明する。
図1は、複数の識別基準で画像中の人を識別する場合の線形SVMの例を示す図である。この例では、入力されたある特徴ベクトルに対して、
図1に示すように、単にその特徴ベクトルの画像内に人がいるか否かの識別ではなく、それが「大人(正面)」であるか否か、「大人(横)」であるか否か、「子供(正面)」であるか否かをそれぞれ識別する。即ち、特徴ベクトルを識別する基準が複数ある。この場合、
図1に示すように、識線形SVMの評価式f(x)の重みパラメータ(以下、「辞書」ともいう。)qは、識別基準ごとに複数(q
1,q
2,q
3,…,q
L)用意する必要があり、バイアスbも識別基準ごとに複数(b
1,b
2,b
3,…,b
L)用意する必要がある。
【0040】
図2は、被写体までの距離に応じた複数の識別基準で画像中の人を識別する場合の線形SVMの例を示す図である。この例では、人の識別が、被写体までの距離、即ち画像内の被写体のスケールの変化に対してロバストとなるように、入力されたある特徴ベクトルに対して、
図2に示すように、単にその特徴ベクトルの画像内に大人がいるか否かを識別するだけでなく、それが「大人(遠)」であるか否か、「大人(中距離)」であるか否か、「大人(近)」であるか否かをそれぞれ識別する。即ち、この場合も、特徴ベクトルを識別する基準が複数あり、よって、
図2に示すように、線形SVMの辞書qは、識別基準ごとに複数(q
1,q
2,q
3,…,q
L)用意する必要があり、バイアスbも識別基準ごとに複数(b
1,b
2,b
3,…,b
L)用意する必要がある。
【0041】
このように、ある特徴ベクトルに対して複数の基準で識別を行う場合には、それらの複数の基準が互いに似ていることが多い。
図1及び
図2もそのような例を示しており、即ち、
図1の例では、「大人(正面)」と「大人(横)」は、大人という共通点を有し、「大人(正面)」と「子供(正面)」は、人の正面という共通点を有し、また、「大人(正面)」と「大人(横)」と「子供(正面)」は、人という共通点を有する。
図2の例でも、「大人(遠)」と「大人(中距離)」と「大人(近)」は、「大人」という共通点を有する。よって、
図1及び
図2の複数の実数ベクトルである辞書(q
1,q
2,q
3,…,q
L)は互いに似ている。また、k−meansクラスタリングにおいても、k個の実数ベクトルである代表ベクトルが互いに似ていることが多い。本発明の実施の形態の関連性判定装置は、このように複数の実数ベクトルが互いに似ているという性質を生かして、処理を高速化する。
【0042】
1.実施の形態
1−1.第1の実施の形態
図3は、本発明の実施の形態の特徴量演算装置100の構成を示すブロック図である。特徴量演算装置100は、コンテンツ取得部101と、特徴ベクトル生成部102と、特徴ベクトル二値化部103と、実数行列取得部104と、実数行列分解部105と、ベクトル演算部106と、データベース107とを備えている。
【0043】
本実施の形態の特徴量演算装置100は、後述するように、特徴ベクトルと辞書データとしてデータベースに保存された複数の実数ベクトルとの内積演算を伴うベクトル演算によって、特徴ベクトルと複数の実数ベクトルとの関連性を判定する関連性判定装置として機能する。即ち、特徴演算装置100は、本発明の関連性判定装置に相当する。
【0044】
関連性判定装置としての特徴量演算装置100は、コンピュータが本発明の実施の形態の関連性判定プログラムを実行することにより実現される。関連性判定プログラムは、記録媒体に記録されて、記録媒体からコンピュータによって読み出されてもよいし、ネットワークを通じてコンピュータにダウンロードされてもよい。
【0045】
コンテンツ取得部101は、画像データ、音声データ、文字データ等のコンテンツデータを取得する。これらのコンテンツデータは、外部機器から与えられるものであってもよく、コンテンツ取得部101で生成されるものであってもよい。例えば、コンテンツ取得部101がカメラであり、そこでコンテンツデータとして画像データが生成されてよい。
【0046】
特徴ベクトル生成部102は、コンテンツ取得部101にて取得されたコンテンツデータからD次元の特徴ベクトルを生成する。例えばコンテンツが画像である場合には、特徴ベクトル生成部102は、画像の特徴量を抽出する。特徴ベクトル二値化部103は、特徴ベクトル生成部102で生成されたD次元の特徴ベクトルを二値化して、各要素が−1及び1の二値のみをとるd次元の二値ベクトルp∈{−1,1}
dを生成する。この特徴ベクトル二値化部103は、本発明の「特徴ベクトル取得部」に相当する。
【0047】
なお、コンテンツ取得部101、特徴ベクトル生成部102、及び特徴ベクトル二値化部103からなる構成は、最終的に二値化された特徴ベクトルを取得できる構成であればよく、例えば、コンテンツ取得部101及び特徴ベクトル生成部102を備えずに、特徴ベクトル二値化部103が外部機器から特徴ベクトルを取得して、その取得した特徴ベクトルを二値化する構成であってよいし、また、特徴ベクトル二値化部103外部機器から二値化された特徴ベクトルを直接取得する構成であってもよい。
【0048】
実数行列取得部104は、複数のd次元の実数ベクトルq
n∈R
d(n=1,2,…,L)を取得する。複数の実数ベクトルq
nは、外部機器から与えられるものであってもよく、特徴量演算装置100の図示しない記憶装置から読み出されるものであってもよく、実数行列取得部104で生成されるものであってもよい。各実数ベクトルq
nは、その要素に浮動小数を含む実数を持つ。ここで、複数の実数ベクトルq
nを並べたものを実数行列Q=(q
1,q
2,q
3,…,q
L)∈R
d×Lと表記する。
【0049】
このように複数の実数ベクトルq
nをまとめた実数行列Qを用いると、
図1及び
図2の複数の線形SVMは、下式(1)のようにまとめて表現することができる。
【数7】
【0050】
実数行列分解部105は、
図4に示すように、d行L列の実数行列Qを、二値の基底行列M∈{−1,1}
d×kと係数行列との積に分解する。具体的には、実数行列分解部105は、d行L列の実数行列Qを、下式(2)によって、二値の要素を持つ基底行列Mと実数の要素を持つ係数行列Cに分解する。
【数8】
ここで、
図4に示すように、M=(m
1,m
2,…,m
k)∈{−1,1}
d×kであり、C=(c
1,c
2,…,c
L)
T∈R
k×Lである。
【0051】
すなわち、基底行列Mは、k個の基底ベクトルm
iからなり、ここで、基底ベクトルm
iは、要素が−1及び1のみをとるd次元の二値ベクトルであり、従って、基底行列Mは、要素が−1及び1のみをとるd行k列の二値行列である。
【0052】
また、係数行列Cは、L個(Lはクラス数)の係数ベクトルc
nからなり、ここで、係数ベクトルc
nは、k個(kは基底数)の基底ベクトルに係る実数の係数を要素として持つk次元の実数ベクトルである。もちろん、QとMCはなるべく一致するように分解することが好ましいが、誤差を含んでもよい。以下、実数行列分解部105が実数行列Qを式(2)のように分解する手法を説明する。
【0053】
(第1の分解手法)
第1の分解手法として、データ非依存型の分解手法を説明する。第1の分解手法では、実数行列分解部105は、分解誤差を表す下式(3)のコスト関数g
1を解くことで分解
を行う。
【数9】
ただし、基底行列Mは二値であり、M∈{−1,1}
d×kである。
【0054】
実数行列分解部105は、以下の手順で上記のコスト関数g
1を解く。
(1)基底行列M及び係数行列Cをランダムに初期化する。
(2)基底行列Mの要素を固定して、係数行列Cの要素を最小二乗法により最適化することで、コスト関数g
1が最小になるように係数行列Cの要素を更新する。
(3)係数行列Cの要素を固定して、コスト関数g
1が最小になるように全探索で基底行列Mの要素を更新する。この最小化アルゴリズムである全探索については、後に詳しく述べる。
(4)収束するまで(2)及び(3)を繰り返す。例えば、コスト関数g
1が所定の収束条件(例えば、減少量が一定値以下となる)を満たしたときに、収束したと判定する。
(5)ステップ(1)〜ステップ(4)により得た解を候補として保持する。
(6)ステップ(1)〜ステップ(5)を繰り返し、最もコスト関数g
1を小さくできた候補基底行列M及び候補係数行列Cを最終結果として採用する。なお、このステップ(1)〜ステップ(5)の繰り返しはなくてもよいが、複数回繰り返すことで、初期値依存の問題を回避できる。
【0055】
次に、ステップ(3)における基底行列Mの更新処理を説明する。
図5の破線枠で囲ったように、基底行列Mのj行目の行ベクトルの要素は、実数行列のj行目の要素のみに依存する。よって、基底行列Mの各行ベクトルの値は、他の行とは独立して最適化することができるので、基底行列Mは、行ごとに網羅探索(全探索)を行うことができる。基底行列Mのj行目の行ベクトルは、本実施の形態のように二値分解の場合は2
k通りしか存在しない(なお、後述の第2の実施の形態の三値分解の場合にも3
k通りしか存在しない)。よって、実数行列分解部105は、これらをすべて網羅的にチェックし、コスト関数g
1を最小化する行ベクトルを採用する。これを基底行列Mのすべての行ベクトルに対して適用して、基底行列Mの要素を更新する。
【0056】
(第2の分解手法)
第2の分解手法として、係数行列Cを疎にするデータ非依存型の分解手法を説明する。第2の分解手法では、実数行列分解部105は、分解誤差である下式(4)のコスト関数g
2を解くことで分解を行う。
【数10】
ただし、基底行列Mは二値であり、M∈{−1,1}
d×kである。また、|C|
1は、係数行列Cの要素のL1ノルムであり、λはその係数である。
【0057】
実数行列分解部105は、以下の手順で上記のコスト関数g
2を解く。
(1)基底行列M及び係数行列Cをランダムに初期化する。
(2)基底行列Mの要素を固定して、係数行列Cの要素を近接勾配法で最適化する。
(3)係数行列Cの要素を固定して、コスト関数g
2が最小になるように全探索で基底行列Mの要素を更新する。
(4)収束するまで(2)及び(3)を繰り返す。例えば、コスト関数g
2が所定の収束条件(例えば、減少量が一定値以下となる)を満たしたときに、収束したと判定する。
(5)ステップ(1)〜ステップ(4)により得た解を候補として保持する。
(6)ステップ(1)〜ステップ(5)を繰り返し、最もコスト関数g
2を小さくできた候補基底行列M及び候補係数行列Cを最終結果として採用する。なお、このステップ(1)〜ステップ(5)の繰り返しはなくてもよいが、複数回繰り返すことで、初期値依存の問題を回避できる。
【0058】
第2の分解手法によれば、係数行列Cを疎にすることができる。係数行列Cを疎にすることで、積MCの計算において、係数行列Cのゼロ要素にかかわる部分を省略することができ、さらに高速に内積計算を行うことができる。
【0059】
(第3の分解手法)
次に、第3の分解手法を説明する。第1の分解手法では、コスト関数g
1として、分解誤差
【数11】
を定義し、この分解誤差を最小化することを考えた。しかしながら、実数行列を基底行列と係数行列との積に近似した後に実際に近似をしたいのは、特徴ベクトルと実数行列の積Q
Tpである。
【0060】
そこで、第3の分解手法では、特徴ベクトルpをあらかじめS個集め、これをまとめたものをP∈R
d×Sとする。そして、分解誤差を
【数12】
と定義して、これを最小化する。即ち、第3の分解手法では、実数行列分解部105は、下式(5)のコスト関数g
3を解くことで分解を行う。
【数13】
このコスト関数g
3によれば、実数行列Qは、実際のデータの分布に従って分解されることになるため、分解の際の近似精度が向上する。
【0061】
この近似分解は、基底ベクトルm
iを逐次的に求めることで行うことができる。第3の分解手法の手順は以下のとおりである。
(1)第1又は第2の分解手法によって、基底行列M及び係数行列Cを求めて、これをそれらの初期値とする。
(2)基底行列Mの要素を固定して、係数行列Cの要素を最小二乗法で最適化する。
(3)係数行列Cの要素を固定して、基底行列Mの要素を最適化することで、基底行列Mの要素を更新する。この基底行列Mの更新処理については後述する。
(4)収束するまで(2)及び(3)を繰り返し、コスト関数g
3を最小化した基底行列M及び係数行列Cを候補として保持する。
(5)ステップ(1)〜(6)を繰り返し、コスト関数g
3を最小化した基底行列M及び係数行列Cを最終結果として採用する。なお、ステップ(1)では再度第1又は第2の分解手法による基底行列M及び係数行列Cの最適化が行われるので、初期値が変更される。また、ステップ(5)の繰り返しはなくてもよいが、複数回繰り返すことで、初期値依存の問題を軽減できる。
【0062】
次に、ステップ(3)における基底行列Mの更新処理を説明する。データ依存分解の場合、基底行列Mの行ベクトルの値は、もはや他の行と独立せず、依存してしまう。基底行列Mの要素は、二値又は三値、即ち離散値であるため、基底行列Mの最適化は、組合最適化問題となる。よって、基底行列Mの最適化には、例えば、グリーディアルゴリズム(Greedy algorithm)、タブーサーチ(Tabu search)、シミュレイテッドアニーリング(Simulated annealing)等のアルゴリズムを用いることができる。ステップ(1)でよい初期値が得られているので、これらのアルゴリズムでも良好に分解誤差を最小化できる。
【0063】
例えばグリーディアルゴリズムを用いる場合は、以下の手順で基底行列Mを最適化する。
(3−1)基底行列Mの要素のうち、ランダムにT個を選択する。
(3−2)2
T通りの組み合わせ(後述の三値分解の場合は3
T通り)を試し、最もコスト関数g
3を最小化したものを採用する。
(3−3)ステップ(3−1)及びステップ(3−2)を収束するまで繰り返す。
【0064】
(第4の分解手法)
第4の分解手法は、第2の分解手法と第3の分解手法とを組み合わせてものである。具体的には、実数行列分解部105は、下式(6)のコスト関数g
4を解くことで分解を行う。
【数14】
このコスト関数g
4によれば、実数行列Qは、実際のデータの分布に従って分解されることになるため、分解の際の近似精度が向上するとともに、係数行列Cを疎にすることができる。即ち、第2の分解手法のメリットと第3の分解手法のメリットをいずれも得ることができる。具体的な分解の手順は、第3の分解手法と同様である。
【0065】
(第1及び第2の分解手法の変形例)
上記の第1及び第2のデータ非依存分解の手法は、分解数をkとしたとき、k
2通り(三値分解の場合はk
3通り)の探索が必要であるため、kが大きいときは、適用が難しい。そのような場合は、あらかじめ実数行列Qに所属する実数ベクトルq
nの互いの類似度を調べ、似ている実数ベクトルどうしをクラスタリングし、各クラスタに対して第1又は第2の分解手法を適用すればよい。
【0066】
ベクトル演算部106は、特徴ベクトルを用いた演算を行なう。演算の具体的内容については、後述にて、本実施の形態の特徴量演算装置100の応用例とともに具体的に説明する。この特徴ベクトルを用いた演算には、二値化された特徴ベクトルp∈{−1,1}
dと実数行列分解部105にて分解された実数行列Qとの積Q
Tpの計算が含まれる。以下では、まず、この積Q
Tpの計算について説明する。
【0067】
積Q
Tpは、下式(7)のように式変形できる。
【数15】
ここで、m
iTpは二値ベクトル同士の内積である。また、c
n,iは、n番目のクラスの係数ベクトルc
nのi番目の要素、即ち係数行列Cのi行n列の要素である。この二値ベクトル同士の内積m
iTpは、極めて高速に計算可能である。その理由は以下のとおりである。
【0068】
二値ベクトル同士の内積は、ハミング距離の演算に帰着できる。ハミング距離とは、2つのバイナリコードにおいて、値が異なるビットを数えたものであり、2つの二値ベクトルの間のハミング距離は、すなわち値が異なる要素数を数えたものである。ここで、m
iとpのハミング距離をD
hamming(m
i,p)と記述すると、内積m
iTpは、D
hamming(m
i,p)と下式(8)の関係がある。
【数16】
ここで、前述のとおり、dはバイナリコードのビット数である。
【0069】
ハミング距離の演算は、2つのバイナリコードにおいて、XORを適用した後に、1が立っているビットを数えることで計算できるので、極めて高速である。二値ベクトルがバイナリコード(0と1のビット列)で表現されているのであれば、ハミング距離は、下式(9)で計算できる。
【数17】
ここで、XOR関数はm
iとpをバイナリコード表現で考えたときに排他的論理和を取る操作であり、BITCOUNT関数はバイナリコードの1が立っているビット数を数えあげる処理のことである。
【0070】
以上をまとめると、積Q
Tpは下式(10)のように変形できる。
【数18】
すなわち、dビットのハミング距離計算をk回行い、k個のハミング距離について、係数行列Cに関する重み付け和を計算し、定数項を足したものがQ
Tpになる。よって、kが十分小さければ、Q
Tpを浮動小数点精度で計算するよりも、はるかに高速に計算できるようになる。
【0071】
データベース107には、実数行列分解部105にて分解された複数の実数行列Qについて、基底行列Mと係数行列Cの積が辞書データとして記憶されている。ベクトル演算部106は、データベース107から基底行列Mと係数行列Cとの積を読み出して、上記の演算を行う。
【0072】
以上のように、本実施の形態の特徴量演算装置100によれば、特徴ベクトルを用いた演算処理に特徴ベクトルと実数行列との積演算が含まれている場合にも、特徴ベクトルを二値化した上で、実数行列についても、二値行列である基底行列と係数行列との積に分解するので、特徴ベクトルと実数行列との積の計算において、特徴ベクトルと基底行列との積を計算した上で、さらに係数行列との積を計算することで、特徴ベクトルと実数行列との積演算を高速化できる。
【0073】
また、複数の実数ベクトルを1つの実数行列としてまとめ、その実数行列を二値行列である基底行列と係数行列とに分解するので、先願の技術のように各実数ベクトルをそれぞれ分解する場合と比較して、基底行列を構成する基底ベクトルの個数、即ち基底数を小さくすることができる。原理的には、1クラスあたり1個以下の基底数(即ち、基底数k≦クラス数L)とすることも可能である。
【0074】
1−2.第1の実施の形態の拡張
上記の第1の実施の形態では、二値ベクトルm
i、pを、それぞれ、m
i∈{−1,1}
d、p∈{−1,1}
dと定義して、実数行列を二値の基底行列と実数の係数行列との積に分解することで積演算Q
Tpが高速になることを説明した。しかしながら、m
i、pをより一般的な二値ベクトルm
i´∈{−a,a}
d、p´∈{−a,a}
dとしても、それらの高速な積演算が可能である。この場合、m
i´
Tp´=a
2(m
iTp)であることから、−1及び1により定義される二値ベクトル同士の内積にa
2を掛ければよい。
【0075】
さらに、特徴ベクトル及び基底ベクトルを任意の二値ベクトルm
i´´∈{α,β}
d、p´´∈{γ,δ}
dとしても、高速な内積演算が可能である。ここで、係数α、β、γ、δは実数であり、α≠β、γ≠δである。この場合、m
i´´及びp´´は、−1及び1により定義される二値ベクトルm
i及びpの各要素に線形変換を施すことで得られ、下式(11)及び(12)のように展開される。
【数19】
【数20】
なお、式(11)及び(12)中の太字の「1」は、長さがdですべての要素が1であるベクトルである。また、式(11)及び(12)中のA、B、C、Dは実数であり、式(11)及び(12)が成立するようにあらかじめ計算しておけばよい。
【0076】
内積m
i´´
Tp´´は、下式(13)のように展開できる。
【数21】
式(13)の括弧内の計算は、−1及び1からなる二値ベクトル同士の内積である。従って、特徴ベクトルが任意の二値の要素をもつ二値ベクトルにされ、かつ、実数行列を二値の基底行列と実数の係数行列との積に展開した場合にも、高速演算が可能である。
【0077】
1−3.第2の実施の形態
次に、第2の実施の形態の特徴量演算装置を説明する。第2の実施の形態の特徴量演算装置の構成は、
図1に示した第1の実施の形態のそれと同じである。第1の実施の形態では、実数行列分解部105は、実数行列Qを式(1)によって二値の基底行列と実数の係数行列に分解したが、本実施の形態の特徴量演算装置100の実数行列分解部105は、実数行列を三値の基底行列と実数の係数行列に分解する。
【0078】
実数行列分解部105は、d行L列の実数行列Q∈R
d×Lを、三値の基底行列と実数の係数行列の積に分解する。具体的には、実数行列分解部105は、d行L列の実数行列Q∈R
d×Lを、下式(14)によって、三値の要素を持つ基底行列Mと実数の要素を持つ係数行列Cに分解する。
【数22】
ここで、M=(m
1,m
2,…,m
k)∈{−1,0,1}
d×kであり、C=(c
1,c
2,…,c
L)
T∈R
k×Lである。すなわち、基底行列Mは、k個の基底ベクトルm
iからなり、ここで、基底ベクトルm
iは、要素が−1、0、及び1のみをとるd次元の三値ベクトルであり、従って、基底行列Mは、要素が−1、0、及び1のみをとるd行k列の三値行列である。
【0079】
また、係数行列Cは、L個(Lはクラス数)の係数ベクトルc
nからなり、ここで、係数ベクトルc
nは、k個の基底ベクトルに係る実数の係数を要素として持つk次元の実数ベクトルである。もちろん、QとMCはなるべく一致するように分解することが好ましいが、誤差を含んでもよい。実数行列分解部105は、第1の実施の形態と同様にして、第1〜第3の分解手法によって実数行列Qを分解できる。
【0080】
ベクトル演算部106は、積Q
Tpを計算する。以下では、積Q
Tpを計算するベクトル演算部106を特に、積演算部106とも呼ぶ。積Q
Tpは、下式(15)のように式変形できる。
【数23】
ここで、m
iTpは、三値ベクトルm
iと二値ベクトルpとの内積である。積演算部106は、ここで、三値ベクトルm
iの代わりに、以下に定義する0置換ベクトルm
ibin、フィルタベクトルm
ifilter、及び0要素数z
iを用いる。
【0081】
まず、積演算部106は、m
iの0の要素を、−1又1に置き換える。m
iの各要素について、それを−1に置き換えるか、1に置き換えるかは、いずれでもよい。この置き換えによって、0置換ベクトルm
ibin∈{−1,1}
dが生成される。この0置換ベクトルm
ibin∈{−1,1}
dは二値ベクトルである。
【0082】
また、積演算部106は、m
iの0の要素を−1に置き換え、0以外の要素を1に置き換える。この置き換えによって、フィルタベクトルm
ifilter∈{−1,1}
dが生成される。このフィルタベクトルm
ifilterも二値ベクトルである。
【0083】
さらに、積演算部106は、m
iの0の要素数z
iを求める。z
iは整数となる。積演算部106は、これらの二値ベクトルm
ibin、フィルタベクトルm
ifilter、及び0要素数z
iを用いて、式(15)におけるm
iTpを、下の式(16)及び式(17)によって計算する。
【数24】
【数25】
ここで、式(17)のAND関数は、二値ベクトルをバイナリコード表現で考えたときに、論理積を取る操作である。
【0084】
以下、
図6の具体例を用いて、式(16)及び(17)の導出を説明する。
図6は、本実施の形態の計算例を示す図である。
図6の例では、p={−1,1,−1,1,−1,1}であり、m
i={−1,0,1,0,1,1}である。この例では、m
ibin={−1,*,1,*,1,1}となる。ここで、「*」は−1又は1の任意のいずれかを示す。また、m
ifilter={1,−1,1,−1,1,1}となり、z
i=2となる。
【0085】
式(17)におけるpとm
ibinとの排他的論理和は、XOR(p,m
ibin)={−1,*,1,*,1,−1}となり、すなわち、pとm
iの要素のうち、非0で異なっている要素すなわち−1と1又は1と−1の組となる要素が1となり、−1と−1又は1と1の組となる要素が−1となる。
【0086】
次に、その排他的論理和とm
ifilterとの論理積は、AND(XOR(p,m
ibin),m
ifilter))={−1,−1,1,−1,1,−1}となり、pとm
iの要素のうち、非0で異なっている要素に1が立ち、それ以外は−1となる。このビットカウントを取ると、1である要素の個数、すなわち非0で異なっている要素の個数が数え上げられ、D
filtered_hamming(p,m
ibin,m
ifilter)=2となる。
【0087】
ここで、pとm
iの要素のうち、1と1又は−1と−1の組となる要素の個数は、全要素数d=6から、非0で異なっている要素の個数D
filtered_hamming=2と0である要素の個数z
i=2を引くことで求められる。すなわち、1と1又は−1と−1の組となる要素の数=d−D
filtered_hamming−z
i=6−2−2=2となる。
【0088】
m
iTpは、1と1又は−1と−1の組となる要素(積が1になる要素の組)の個数から、−1と1又は1と−1との組となる要素(積が−1になる要素の組)の個数を引いた値と等しいため、m
iTp=(d−D
filtered_hamming−z
i)−D
filtered_hamming=d−z
i−2D
filtered_hammingとなり、式(16)が得られ、その値は、6−2−2×2=0となる。なお、この結果は、当然ながら、p
Tm
i={−1,1,−1,1,−1,1}×{−1,0,1,0,1,1}=1+0+(−1)+0+(−1)+1=0と一致する。
【0089】
式(15)〜(17)をまとめると、積Q
Tpは、下式(18)のように変形できる。
【数26】
積演算部106は、この式(18)によって、積Q
Tpを計算する。
【0090】
関数D
filtered_hamming(p,m
ibin,m
ifilter)は、ハミング距離演算と非常に似ており、AND演算が加わっただけである。したがって、Q∈R
d×Lを、三値行列と係数行列との積に分解した場合でも、Q
Tpを浮動小数点精度で計算するよりも、はるかに高速にQ
Tpを計算できるようになる。
【0091】
以上のように、d次元の実数行列Q∈R
d×Lを、二値ではなく三値の基底行列と係数行列との積に分解することの利点は、式(10)の近似が、より少ない数の基底数の基底行列でも成立するようになることにある。すなわち、基底数を小さく抑えられることになるため、さらなる高速化につながる。
【0092】
1−4.第2の実施の形態の拡張
上記の第2の実施の形態では、二値ベクトルp及び三値ベクトルm
iを、それぞれ、p∈{−1,1}
d、m
i∈{−1,0,1}
dと定義して、複数の実数ベクトルからなる実数行列を三値の基底行列と係数行列との積に分解することで内積演算p
Tm
iが高速になることを説明した。しかしながら、p、m
iをより一般的な二値ベクトルp´∈{−a,a}
d、三値ベクトルm
i∈{−a,0,a}
dとしても、それらの高速な内積演算が可能である。この場合、p´
Tm
i´=a
2(p
Tm
i)であることから、−1及び1により定義される二値ベクトル同士の内積にa
2を掛ければよい。
【0093】
さらに、二値ベクトルp及び三値ベクトルm
iをp∈{α,β}
d、m
i∈{γ−δ,γ,γ+δ}
dと一般化しても、高速な内積演算が可能である。ここで、α、β、γ、δは実数であり、α≠β、δ≠0である。この場合、m
i及びpの各要素に下式(19)及び(20)の線形変換を施すことで、それぞれm
i´´及びp´´が得られる。
【数27】
【数28】
なお、式(19)及び(20)中の太字の「1」は、長さがdですべての要素が1であるベクトルである。また、式(19)及び(20)中のA、B、C、Dは実数であり、式(19)及び(20)が成立するようにあらかじめ計算しておく。
【0094】
内積m
i´´
Tp´´は、下式(21)のように展開できる。
【数29】
式(21)の括弧内の計算は、−1及び1からなる二値ベクトル同士の内積、又は−1及び1からなる二値ベクトルと−1、0、1からなる三値ベクトルとの内積である。従って、特徴ベクトルが任意の二値ベクトルにされ、かつ、実数行列を上記のとおり一般化した三値行列を用いて展開した場合にも、そのような特徴ベクトルと実数行列との積を高速に演算できる。
【0095】
2.応用例
次に、ベクトル演算部106における演算処理について説明する。上記の第1及び第2の実施の形態のベクトル演算部106は、二値化された特徴ベクトルpと複数の実数ベクトルqをまとめた実数行列Qとの積の計算を伴うものであるが、そのような演算処理は種々ある。すなわち、本発明の上記の実施の形態は、特徴ベクトルを用いて演算処理を行なう種々の装置に応用できる。
【0096】
2−1.第1の応用例
本応用では、本発明がHOG特徴量を用いてSVMにより複数種類の物体を認識する物体認識装置に応用される。
図7は、物体認識装置の構成を示すブロック図である。物体認識装置10は、ピラミッド画像生成部11と、HOG特徴量抽出部12と、バイナリコード変換部13と、パラメータ決定部14と、パラメータ行列分解部15と、線形SVM識別部16と、ピーク検出部17とを備えている。
【0097】
ピラミッド画像生成部11は、入力クエリとしての画像を取得して、当該画像を複数段階の倍率でそれぞれ縮小してなるG段のピラミッド画像を生成する。これにより、サイズの異なる物体に対処できる。このピラミッド画像生成部11は、
図3に示したコンテンツ取得部101に対応する。HOG特徴量抽出部12は、ピラミッド画像の各段における画像を、16×16ピクセルのサイズのブロックに分割し、各ブロックからHOG特徴量を抽出する。HOG特徴量抽出部12は、各ブロックからD次元の特徴量を抽出する。このHOG特徴量抽出部12は、
図3に示した特徴ベクトル抽出部102に対応する。バイナリコード変換部13は、各セルに与えられたD次元の特徴量を、d次元の二値ベクトルに変換する。このバイナリコード変換部13は、
図3に示した特徴ベクトル二値化部103に対応する。
【0098】
パラメータ決定部14は、認識したい対象の種類(大人、子供、車、バイクといった種類であって、パラメータで定義される)ごとに、それぞれ線形SVM識別部16における線形SVMにて用いる重みベクトルw
n(n=1,2,…,L)及び実数のバイアスb
n(n=1,2,…,L)を決定する。パラメータ決定部14は、学習用に用意された特徴量を用いて、学習処理によってL種類の重みベクトルw
n及びバイアスb
nを決定して、重みベクトルw
nをまとめた重み行列Wを生成する。このパラメータ決定部14は、
図3に示した実数行列取得部104に対応する。パラメータ行列分解部15は、重み行列Wを第1又は第2の実施の形態で説明した式(2)又は式(14)によって離散値の基底行列と係数行列との積に分解する。このパラメータ行列分解部15は、
図3に示した実数行列分解部105に対応する。
【0099】
線形SVM識別部16は、線形SVMによって特徴ベクトルの識別を行なう。線形SVM識別部16は、まず、s
x×s
yブロックをひとまとまりとして、検出ウィンドウを構成する。1つの検出ウィンドウから抽出される特徴ベクトルは、s
x×s
y×d次元のベクトルとなる。線形SVM識別部16は、この特徴ベクトルに対して、下式(22)の線形SVMを適用する。
【数30】
ここで、線形SVMにおける積演算W
Txは、第1又は第2の実施の形態として説明した実数行列と二値ベクトルの高速な積演算により実現できる。
【0100】
検出位置付近では、検出結果が固まることがある。そこで、ピーク検出部17は、周辺でf(x)の値が最大になったところを、代表的な検出位置とする。この線形SVM識別部16及びピーク検出部17は、特徴ベクトルを用いた処理を行なう構成であり、
図3のベクトル演算部106に対応する。
【0101】
次に、この物体認識装置10において、HOG特徴量により、回転し得る物体を検出する例を説明する。
図8は、回転する道路標識について、それぞれの回転角度で辞書q
n及びバイアスb
nを作成する場合を示している。
図8において左右方向は道路標識の回転角度θを示している。
【0102】
従来のアプローチでは、回転角度ごとに学習処理を行って辞書q
n及びバイアスb
nを取得する。その後、入力画像からHOG特徴量を抽出して、検出ウィンドウ(スライディングウィンドウ)をL回適用することでこの道路標識の検出を行っている。しかしながら、このような従来の手法では、1検出ウィンドウあたりL回の内積計算が必要となり、計算量が多くなる。また、検出の角度分解能は2pi/Lであり、粗い。
【0103】
そこで、本応用例では、パラメータ決定部14が辞書q
nをまとめて行列Qとし、SVM識別部16は、下式(23)により複数の辞書q
nと特徴ベクトルpとの内積計算をまとめて行う。
【数31】
このようにk個の整数基底に分解することにより、1検出ウィンドウあたり、k回の二値と二値との内積演算又は二値と三値との内積演算で処理が可能となる。このとき、隣り合う辞書同士が似ているため、整数基底の数kを小さくすることができ、原理的には1クラスあたり1個以下(k≦L)とすることも可能である。
【0104】
本応用例では、さらに、ピーク検出部17が、係数行列Cの性質に着目した検出分解能の高精度化を行う。
図9は、係数行列Cの性質を示す図である。実数ベクトルq
nが回転角度θをパラメータとして、そのパラメータに従って変化するものである場合には、複数の実数ベクトルq
nをまとめて実数行列Qを生成する際に、
図8に示すように、複数の実数ベクトルq
nをパラメータθの順に並べると、
図9に示すように、係数行列Cの実数ベクトルq
nが並べられた方向と同方向の各ベクトル、即ち係数行列Cの各行ベクトルの要素の行方向の変化が滑らかになる。
【0105】
そこで、ピーク検出部17は、係数行列Cの行ベクトルを多項式でフィッティングして、下式(24)のように連続関数で表現する。
【数32】
ここで、α
iは、フィッティングの係数である。
【0106】
これを用いて識別関数の式を整理すると、回転角度θにおける識別関数は下式(25)のようにパラメータθに関する連続関数の形式で表現できる。
【数33】
ピーク検出部17は、この識別関数を用いてピークの検出を行う。c
i(θ)は式(24)に示すように多項式であるから、f
θ(p)もまた連続関数(連続の多項式)となる。
図10は、f
θ(p)の例を示すグラフである。
図10において、横軸は回転角度θであり、縦軸はf
θ(p)である。ピーク検出部17は、f
θ(p)が正の最大をとるときのθを対象の回転角度、即ち特徴ベクトルpのパラメータ値として検出する。
【0107】
以上のように、複数の辞書q
nをまとめて行列Qを生成する際に、複数の辞書q
nをそれが滑らかに変化するように、パラメータ(
図8の例ではθ)の順に並べて行列Qを生成することで、識別関数をそのパラメータに関する多項式の形式で表現できるので、高い分解能でそのパラメータを検出できるようになる。
【0108】
なお、上記ではパラメータを回転角度として説明したが、パラメータは例えばスケールであってもよい。すなわち、
図2のように検出ウィンドウの大きさは固定とし、検出ウィンドウ内における人物のサイズ(スケール)ごとに、別々に識別器を学習しておき、スケールσに関して多項式のフィッティングを行い、スケールσに関して識別器のピークを求めることで、高精度にスケール推定をおこなえるようになる。また、このように工夫することで、ピラミッド画像自体の生成を不要とできる。さらにパラメータが複数であってもよい。例えば、回転角度θとスケールσの両方に関して上記の多項式へのフィッティングを行ってもよい。この場合、係数はc
i(θ,σ)のように、二次元の多項式となる。
【0109】
また、係数α
iは、まず係数行列Cを求めてから各行をフィッティングして求めることができるが、係数行列Cの個々の要素c
n,iを求めずに直接係数α
iを求めてもよい。さらに、フィッティングする関数は多項式でなくてもよく、例えば三角関数(サイン、コサイン)にフィッティングしてもよい。
【0110】
2−2.第2の応用例
本実施の形態では、本発明がk−meansクラスタリングに応用される。
図11は、k−meansクラスタリング装置の構成を示すブロック図である。k−meansクラスタリング装置20は、コンテンツ取得部21と、特徴ベクトル生成部22と、特徴ベクトル二値化部23と、代表行列更新部24と、収束判定部25と、代表行列分解部26と、最近接代表ベクトル探索部27とを備えている。
【0111】
コンテンツ取得部21は、クラスタリングの対象となるN個のコンテンツを取得する。特徴ベクトル生成部22は、コンテンツ取得部21にて取得した各コンテンツからそれらの特徴量を特徴ベクトルpとして抽出する。特徴ベクトル二値化部23は、特徴ベクトル抽出部22にて抽出された各特徴ベクトルを二値化する。
【0112】
代表行列更新部24は、まず、特徴ベクトル二値化部23で二値化されたN個の特徴ベクトルからk(=L)個をランダムに選出してこれを代表ベクトルq
n(n=1,2,…,L)とし、これらの代表ベクトルq
nをまとめた行列を代表行列Qとする。収束判定部25は、代表行列更新部24が代表行列を更新するごとに収束判定を行なう。収束判定部25にて収束したと判定された場合には、k−meansクラスタリング装置20はクラスタリングの処理を終了する。代表行列分解部26は、代表行列更新部24にて更新された代表行列を離散値(二値又は三値)行列に分解する。
【0113】
最近接代表ベクトル探索部27は、特徴ベクトル二値化部23より入力されるN個の二値ベクトルをそれぞれ最も近傍の代表ベクトルq
nに所属させる。最近接代表ベクトル探索部27は、この結果を代表行列更新部24に出力する。代表行列更新部24は、各代表ベクトルq
nについて、それに所属する特徴ベクトル(二値化されている)の平均ベクトルを算出して、これを新しい代表ベクトルq
nとする。このようにして代表行列更新部24で更新される代表ベクトルq
nは、二値ベクトルの平均で算出されるので、実数ベクトルとなる。
【0114】
従って、仮に代表行列分解部26がなければ、最近接代表ベクトル探索部27は、更新された代表ベクトル(実数ベクトル)と特徴ベクトル(二値ベクトル)との距離を求めるためにそれらの内積を計算しなければならない。そこで、本実施の形態では、上記のように、この代表ベクトルq
n(実数ベクトル)の集合である代表行列Qを代表行列分解部26によって、第1又は第2の実施の形態で説明したように、離散値(二値又は三値)行列と実数の係数行列との積に分解する。それによって、最近接代表ベクトル探索部27における、各特徴ベクトルと各代表ベクトルとの距離の計算を高速にでき、よって各特徴ベクトルが最も近接する代表ベクトル(すなわち、所属すべき代表ベクトル)を高速に探索できる。
【0115】
2−3.第3の応用例
本実施の形態では、本発明がk−means treeによる近似最近傍探索に応用される。本実施の形態の近似最近傍探索装置は、k−meansを用いたk−分木による近似最近傍探索手法として、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)に提案されている手法を採用する。
【0116】
具体的には、本実施の形態の近似最近傍探索装置は、N個のデータに対してk−meansを再帰的に適用することでk−分木を構築し、上記提案の木探索の原理により近似的に最近傍点を探索する。この手法は、データが実数ベクトルであり、かつノードに登録されている代表ベクトルが二値ベクトルである場合を前提として設計される。但し、データが二値ベクトルであって、ノードに登録されている代表ベクトルが実数ベクトルである場合にも、第1又は第2の実施の形態を採用することで、木探索を高速化できる。
【0117】
3.変形例
特徴量演算装置100において、コンテンツ取得部101、特徴ベクトル生成部102、特徴ベクトル二値化部103、実数行列取得部104、実数行列分解部105、及びベクトル演算部106の一部と他の部分とが別々の装置として構成されていてもよい。特に、コンテンツ取得部101、特徴ベクトル生成部102、特徴ベクトル二値化部103、及びベクトル演算部106が特徴演算装置100に搭載され、実数行列取得部104、及び実数行列分解部105が別の装置に搭載されてよい。この場合には、実数行列分解部105にて分解された複数の実数行列が特徴演算装置100のデータベース107に記憶され、ベクトル演算部106は、データベース107から分解された複数の実数行列を取得する。
【0118】
上記の実施の形態では、基底行列Mが二値又は三値であったが、基底行列Mが二値又は三値でなくともよい。基底行列Mのとり得る要素の種類が有限の数であれば上記の分解手法を適用して実数行列を分解することができる。また、係数行列Cも、基底行列Mと同様にあらかじめ定められた離散的な値でもよい。例えば、係数行列Cの要素を2のべき乗に制約してもよく、そうすることで、処理を高速化できる。また、分解する実数行列Qの要素の平均値が著しく大きい(若しくは小さい)場合、すなわち、平均値が0から著しく離れている場合には、この平均値をあらかじめ実数行列Qの各要素から引いてオフセット実数行列を生成し、このオフセット実数行列Q´を基底行列Mと係数行列Cに分解すると、より少ない基底で式(2)や式(14)の近似分解を行うことができる。
【0119】
なお、第1及び第2の実施の形態において、コンテンツ取得部101にて取得されるコンテンツデータは、車両から得られる計測データであってよい。さらに、車両から得られる計測データは、例えば、車両に設置されたカメラで撮影された画像データ、車両に設置されたセンサで計測されたセンシングデータであってよい。この場合に、関連性判定装置としての特徴演算装置100のベクトル演算部106は、計測データと辞書データとの関連性を判定する。例えば、計測データとして、車両に設置されたカメラで撮影された画像データが取得される場合には、辞書データとして複数の人物画像のデータがデータベースに保存されており、関連性判定装置としての特徴演算装置100のベクトル演算部106は、上記の応用例のいずれかによって、画像データの画像に人物が含まれるか否かを判定してよい。