本明細書では、以下の順に本発明の実施の形態を説明する。
I.第1の実施の形態
1.概要
2.実施の形態
2−1.二値分解法
2−2.二値分解法の拡張
2−3.三値分解法
2−4.三値分解法の拡張
3.応用例
3−1.第1の応用例
3−2.第2の応用例
3−3.第3の応用例
II.第2の実施の形態
1.概要
2.実施の形態
3.変形例
III.第3の実施の形態
1.概要
2.実施の形態
IV.変形例
I.第1の実施の形態
1.概要
まず、特徴ベクトルとの内積を計算すべき実数ベクトルが複数ある場合について説明する。図1は、複数の識別基準で画像中の人を識別する場合の線形SVMの例を示す図である。この例では、入力されたある特徴ベクトルに対して、図1に示すように、単にその特徴ベクトルの画像内に人がいるか否かの識別ではなく、それが「大人(正面)」であるか否か、「大人(横)」であるか否か、「子供(正面)」であるか否かをそれぞれ識別する。即ち、特徴ベクトルを識別する基準が複数ある。この場合、図1に示すように、線形SVMの評価式f(x)の重みパラメータ(以下、「辞書」ともいう。)qは、識別基準ごとに複数(q1,q2,q3,…,qL)用意する必要があり、バイアスbも識別基準ごとに複数(b1,b2,b3,…,bL)用意する必要がある。
図2は、被写体までの距離に応じた複数の識別基準で画像中の人を識別する場合の線形SVMの例を示す図である。この例では、人の識別が、被写体までの距離、即ち画像内の被写体のスケールの変化に対してロバストとなるように、入力されたある特徴ベクトルに対して、図2に示すように、単にその特徴ベクトルの画像内に大人がいるか否かを識別するだけでなく、それが「大人(遠)」であるか否か、「大人(中距離)」であるか否か、「大人(近)」であるか否かをそれぞれ識別する。即ち、この場合も、特徴ベクトルを識別する基準が複数あり、よって、図2に示すように、線形SVMの辞書qは、識別基準ごとに複数(q1,q2,q3,…,qL)用意する必要があり、バイアスbも識別基準ごとに複数(b1,b2,b3,…,bL)用意する必要がある。
このように、ある特徴ベクトルに対して複数の基準で識別を行う場合には、それらの複数の基準が互いに似ていることが多い。図1及び図2もそのような例を示しており、即ち、図1の例では、「大人(正面)」と「大人(横)」は、大人という共通点を有し、「大人(正面)」と「子供(正面)」は、人の正面という共通点を有し、また、「大人(正面)」と「大人(横)」と「子供(正面)」は、人という共通点を有する。図2の例でも、「大人(遠)」と「大人(中距離)」と「大人(近)」は、「大人」という共通点を有する。よって、図1及び図2の複数の実数ベクトルである辞書(q1,q2,q3,…,qL)は互いに似ている。また、k−meansクラスタリングにおいても、k個の実数ベクトルである代表ベクトルが互いに似ていることが多い。本実施の形態の関連性判定装置は、このように複数の実数ベクトルが互いに似ているという性質を生かして、処理を高速化する。
本実施の形態の関連性判定装置は、二値化された特徴ベクトルを取得する特徴ベクトル取得部と、複数の実数ベクトルからなる実数行列を、係数行列と、要素として二値または三値の離散値のみを持つ複数の基底ベクトルからなる基底行列との積に分解する実数行列分解部と、前記特徴ベクトルと前記複数の実数ベクトルの各々との内積の計算として、前記特徴ベクトルと前記基底行列との積を計算し、さらに当該積と前記係数行列との積を計算して、その結果を用いて、前記複数の実数ベクトルの各々と前記特徴ベクトルとの関連性を判定するベクトル演算部とを備えた構成を有している。この構成により、特徴ベクトルと複数の実数ベクトルの各々との内積を計算のために、複数の実数ベクトルからなる実数行列を離散値の基底行列と係数行列に分解したうえで、特徴ベクトルと基底行列との積を計算し、さらに係数行列との積を計算するので、特徴ベクトルと複数の実数ベクトルの各々との内積演算の結果を高速に取得でき、よって特徴ベクトルと複数の実数ベクトルとの関連性の判定を高速に行うことができる。
上記の関連性判定装置は、前記複数の実数ベクトルを並べることで前記実数行列を生成する実数行列生成部をさらに備えていてよい。この構成により、容易に複数の実数ベクトルから実数行列を生成できる。
上記の関連性判定装置において、前記実数行列生成部は、前記複数の実数ベクトルが所定のパラメータを有する場合に、当該パラメータの順に従って前記複数の実数ベクトルを並べることにより前記実数行列を生成してよい。この構成により、実数行列において互いに似た実数ベクトルが隣り合うこととなるので、隣り合う係数行列もまた類似するようになる。
上記の関連性判定装置において、前記実数行列分解部は、
をコスト関数として、前記コスト関数を解くことにより前記実数行列を分解してよい。ここで、Qは前記実数行列、Mは前記基底行列、Cは前記係数行列である。この構成により、実数行列を基底行列と係数行列との積に分解したときの誤差をコストとして評価して、実数行列を分解するので、容易かつ高精度に実数行列を分解できる。具体的には、このコスト関数を最小にする(所定の収束条件を満たす)基底行列及び係数行列で実数行列を分解することができる。
上記の関連性判定装置において、前記実数行列分解部は、前記基底行列の要素を固定して前記係数行列の要素を最小二乗法で最適化する第1の更新と、前記係数行列の要素を固定して前記基底行列の要素を全探索で最適化する第2の更新とを繰り返すことで、前記基底行列及び前記係数行列を求めてよい。この構成により、容易に実数行列を分解できる。なお、係数行列の要素を固定すると、基底行列の各行を求めるときに探索すべき組み合わせ数は、二値分解の場合は2k通り、三値分解の場合は3k通りしかないので、全探索を行っても計算量が多くなりすぎることはない。
上記の関連性判定装置において、前記実数行列分解部は、
をコスト関数として、前記コスト関数を解くことにより前記実数行列を分解してよい。ここで、Qは前記実数行列、Mは前記基底行列、Cは前記係数行列、λは係数である。この構成によっても、実数行列を基底行列と係数行列との積に分解したときの誤差をコストとして評価して、容易かつ高精度に実数行列を分解できるとともに、係数行列を疎にすることができるので、特徴ベクトルと実数行列との積を高速に計算できる。具体的には、このコスト関数を最小にする(所定の収束条件を満たす)基底行列及び係数行列で実数行列を分解することができる。
上記の関連性判定装置において、前記実数行列分解部は、前記基底行列の要素を固定して前記係数行列の要素を近接勾配法で最適化する第1の更新と、前記係数行列の要素を固定して前記基底行列の要素を全探索で最適化する第2の更新とを繰り返すことで、前記基底行列及び前記係数行列を求めてよい。この構成により、容易に実数行列を分解できる。なお、係数行列の要素を固定すると、基底行列の各行を求めるときに探索すべき組み合わせ数は、二値分解の場合は2k通り、三値分解の場合は3k通りしかないので、全探索を行っても計算量が多くなりすぎることがない。
上記の関連性判定装置において、前記実数行列分解部は、
をコスト関数として、前記コスト関数を解くことにより前記実数行列を分解してよい。ここで、Qは前記実数行列、Mは前記基底行列、Cは前記係数行列、Pは複数の前記特徴ベクトルの集合である。この構成により、実数行列の分解の誤差ではなく、複数の特徴ベクトルを用いて、特徴ベクトルと実数行列との積の分解による誤差をコストとして評価するので(データ依存分解)、特徴ベクトルと実数行列との積をより高精度に近似できる。具体的には、このコスト関数を最小にする(所定の収束条件を満たす)基底行列及び係数行列で実数行列を分解することができる。
上記の関連性判定装置において、前記実数行列分解部は、前記基底行列の要素を固定して前記係数行列の要素を最小二乗法で最適化する第1の更新と、前記係数行列の要素を固定して組合最適化問題を解くことで前記基底行列の要素を最適化する第2の更新とを繰り返すことで、前記基底行列及び前記係数行列を求めてよい。この構成により、容易に実数行列を分解できる。なお、組合最適化問題は、例えば、グリーディアルゴリズム、タブーサーチ、シミュレイテッドアニーリング等のアルゴリズムを用いて解くことができる。
上記の関連性判定装置において、前記実数行列分解部は、
をコスト関数として、前記コスト関数を解くことにより前記実数行列を分解してよい。ここで、Qは前記実数行列、Mは前記基底行列、Cは前記係数行列、Pは複数の前記特徴ベクトルの集合、λは係数である。この構成により、実数行列の分解の誤差ではなく、複数の特徴ベクトルを用いて、特徴ベクトルと実数行列との積の分解による誤差をコストとして評価するので(データ依存分解)、特徴ベクトルと実数行列との積をより高精度に近似できるとともに、係数行列を疎にすることで特徴ベクトルと実数行列との積を高速に計算できる。具体的には、このコスト関数を最小にする(所定の収束条件を満たす)基底行列及び係数行列で実数行列を分解することができる。
上記の関連性判定装置において、前記実数行列分解部は、前記基底行列の要素を固定して前記係数行列の要素を近接勾配法で最適化する第1の更新と、前記係数行列の要素を固定して組合最適化問題を解くことで前記基底行列の要素を最適化する第2の更新とを繰り返すことで、前記基底行列及び前記係数行列を求めてよい。この構成により、容易に実数行列を分解できる。なお、組合最適化問題は、例えば、グリーディアルゴリズム、タブーサーチ、シミュレイテッドアニーリング等のアルゴリズムを用いて解くことができる。
上記の関連性判定装置において、前記実数行列分解部は、
をコスト関数として、前記コスト関数を解くことにより前記実数行列を分解して前記基底行列及び前記係数行列の要素の初期値を求め、又は、
をコスト関数として、前記コスト関数を解くことにより前記実数行列を分解して前記基底行列及び前記係数行列の要素の初期値を求めてよい。この構成により、データ非依分解により得られた基底行列及び係数行列を初期値とするので、十分に良好な初期解からデータ依存分解のための更新の繰り返しを開始でき、よって効果的にコストを減少させることができる。
上記の関連性判定装置において、前記実数行列分解部は、前記基底行列及び前記係数行列の要素の初期値を変えて、複数とおりの前記基底行列及び前記係数行列を求め、前記コスト関数が最小となる前記基底行列及び前記係数行列を採用することで前記実数行列を分解してよい。この構成により、初期値によるばらつきを軽減して、分解の誤差をより小さくできる。
上記の関連性判定装置において、前記特徴ベクトルは、HOG特徴量であってよく、前記複数の実数ベクトルは、複数の線形識別器のパラメータに対応する複数の重みベクトルであってよく、前記ベクトル演算部は、前記関連性の判定として、前記複数の線形識別器の識別関数によって、前記複数の基準の各々に対する前記特徴ベクトルの識別を行なってよい。この構成により、複数の線形識別器による特徴ベクトルの識別を高速化できる。
上記の関連性判定装置において、前記実数行列生成部は、前記特徴ベクトル及び前記複数の実数ベクトルが1又は複数のパラメータを有する場合に、当該パラメータの順に従って前記複数の実数ベクトルを並べることにより前記実数行列を生成し、前記ベクトル演算部は、前記係数行列を構成する複数のベクトルであって前記複数の実数ベクトルが並べられた方向と同方向の複数のベクトルの各々を前記パラメータに関する連続関数で表現し、前記識別関数を最大にする前記パラメータを、前記特徴ベクトルのパラメータ値として求めてよい。この構成により、複数の実数ベクトルをまとめて実数行列を生成する際に、複数の実数ベクトルをそれが滑らかに変化するパラメータの順に並べて実数行列を生成することで、識別関数をそのパラメータに関する連続関数で表現できるので、高い分解能で特徴ベクトルのパラメータ値を求めることができる。
上記の関連性判定装置において、前記特徴ベクトルは、k−meansクラスタリングによるクラスタリングの対象となるベクトルであってよく、前記実数ベクトルは、k−meansクラスタリングにおける代表ベクトルであってよく、前記ベクトル演算部は、前記関連性の判定として、前記特徴ベクトルと前記代表ベクトルとの間の距離の演算を含むクラスタリング処理を行なってよい。この構成により、k−meansクラスタリングにおける特徴ベクトルと代表ベクトルとの間の距離の演算を高速化できる。
上記の関連性判定装置において、前記特徴ベクトルは、k−means treeによる近似最近傍探索の対象となるベクトルであってよく、前記実数ベクトルは、k−分木のノードに登録されている代表ベクトルであってよく、前記ベクトル演算部は、前記関連性の判定として、前記特徴ベクトルと前記代表ベクトルとの間の距離の演算を含むクラスタリング処理を行なってよい。この構成により、k−means treeによる近似最近傍探索における特徴ベクトルとk−分木のノードに登録されている代表ベクトルとの間の距離の演算を高速化できる。
上記の関連性判定装置において、前記特徴ベクトルは、画像の特徴量を表すベクトルであってよい。この構成により、画像の特徴量の演算における特徴ベクトルと複数の実数ベクトルの内積計算を高速化できる。
本実施の形態の関連性判定プログラムは、コンピュータを、上記の関連性判定装置として機能させるための関連性判定プログラムである。この構成によっても、特徴ベクトルと複数の実数ベクトルの各々との内積を計算のために、複数の実数ベクトルからなる実数行列を離散値の基底行列と係数行列に分解したうえで、特徴ベクトルと基底行列との積を計算し、さらに係数行列との積を計算するので、特徴ベクトルと複数の実数ベクトルの各々との内積演算の結果を高速に取得でき、よって特徴ベクトルと複数の実数ベクトルとの関連性の判定を高速に行うことができる。
本実施の形態の関連性判定方法は、二値化された特徴ベクトルを取得する特徴ベクトル取得ステップと、複数の実数ベクトルからなる実数行列を、係数行列と、要素として二値または三値の離散値のみを持つ複数の基底ベクトルからなる基底行列との積に分解する実数行列分解ステップと、前記特徴ベクトルと前記複数の実数ベクトルの各々との内積の計算として、前記特徴ベクトルと前記基底行列との積を計算し、さらに当該積と前記係数行列との積を計算して、その結果を用いて、前記複数の実数ベクトルの各々と前記特徴ベクトルとの関連性を判定するベクトル演算ステップとを含む構成を有している。この構成によっても、特徴ベクトルと複数の実数ベクトルの各々との内積を計算のために、複数の実数ベクトルからなる実数行列を離散値の基底行列と係数行列に分解したうえで、特徴ベクトルと基底行列との積を計算し、さらに係数行列との積を計算するので、特徴ベクトルと複数の実数ベクトルの各々との内積演算の結果を高速に取得でき、よって特徴ベクトルと複数の実数ベクトルとの関連性の判定を高速に行うことができる。
本実施の形態によれば、二値化された特徴ベクトルと複数の実数ベクトルの各々との内積計算を高速化でき、そのような特徴ベクトルと複数の実数ベクトルの各々との関連性の判定を高速に行うことができる。
2.実施の形態の具体的説明
2−1.二値分解法
図3は、本発明の第1の実施の形態の二値分解法を採用する特徴量演算装置100の構成を示すブロック図である。特徴量演算装置100は、コンテンツ取得部101と、特徴ベクトル生成部102と、特徴ベクトル二値化部103と、実数行列取得部104と、実数行列分解部105と、ベクトル演算部106と、データベース107とを備えている。
本実施の形態の特徴量演算装置100は、後述するように、特徴ベクトルと辞書データとしてデータベースに保存された複数の実数ベクトルとの内積演算を伴うベクトル演算によって、特徴ベクトルと複数の実数ベクトルとの関連性を判定する関連性判定装置として機能する。即ち、特徴演算装置100は、本発明の関連性判定装置に相当する。
関連性判定装置としての特徴量演算装置100は、コンピュータが本発明の実施の形態の関連性判定プログラムを実行することにより実現される。関連性判定プログラムは、記録媒体に記録されて、記録媒体からコンピュータによって読み出されてもよいし、ネットワークを通じてコンピュータにダウンロードされてもよい。
コンテンツ取得部101は、画像データ、音声データ、文字データ等のコンテンツデータを取得する。これらのコンテンツデータは、外部機器から与えられるものであってもよく、コンテンツ取得部101で生成されるものであってもよい。例えば、コンテンツ取得部101がカメラであり、そこでコンテンツデータとして画像データが生成されてよい。
特徴ベクトル生成部102は、コンテンツ取得部101にて取得されたコンテンツデータからD次元の特徴ベクトルを生成する。例えばコンテンツが画像である場合には、特徴ベクトル生成部102は、画像の特徴量を抽出する。特徴ベクトル二値化部103は、特徴ベクトル生成部102で生成されたD次元の特徴ベクトルを二値化して、各要素が−1及び1の二値のみをとるd次元の二値ベクトルp∈{−1,1}dを生成する。この特徴ベクトル二値化部103は、本発明の「特徴ベクトル取得部」に相当する。
なお、コンテンツ取得部101、特徴ベクトル生成部102、及び特徴ベクトル二値化部103からなる構成は、最終的に二値化された特徴ベクトルを取得できる構成であればよく、例えば、コンテンツ取得部101及び特徴ベクトル生成部102を備えずに、特徴ベクトル二値化部103が外部機器から特徴ベクトルを取得して、その取得した特徴ベクトルを二値化する構成であってよいし、また、特徴ベクトル二値化部103外部機器から二値化された特徴ベクトルを直接取得する構成であってもよい。
実数行列取得部104は、複数のd次元の実数ベクトルqn∈Rd(n=1,2,…,L)を取得する。複数の実数ベクトルqnは、外部機器から与えられるものであってもよく、特徴量演算装置100の図示しない記憶装置から読み出されるものであってもよく、実数行列取得部104で生成されるものであってもよい。各実数ベクトルqnは、その要素に浮動小数を含む実数を持つ。ここで、複数の実数ベクトルqnを並べたものを実数行列Q=(q1,q2,…,qL)∈Rd×Lと表記する。
このように複数の実数ベクトルq
nをまとめた実数行列Qを用いると、図1及び図2の複数の線形SVMは、下式(1)のようにまとめて表現することができる。
実数行列分解部105は、図4に示すように、d行L列の実数行列Qを、二値の基底行列M∈{−1,1}
d×kと係数行列との積に分解する。具体的には、実数行列分解部105は、d行L列の実数行列Qを、下式(2)によって、二値の要素を持つ基底行列Mと実数の要素を持つ係数行列Cに分解する。
ここで、図4に示すように、M=(m
1,m
2,…,m
k)∈{−1,1}
d×kであり、C=(c
1,c
2,…,c
L)
T∈R
k×Lである。
すなわち、基底行列Mは、k個の基底ベクトルmiからなり、ここで、基底ベクトルmiは、要素が−1及び1のみをとるd次元の二値ベクトルであり、従って、基底行列Mは、要素が−1及び1のみをとるd行k列の二値行列である。
また、係数行列Cは、L個(Lはクラス数)の係数ベクトルcnからなり、ここで、係数ベクトルcnは、k個(kは基底数)の基底ベクトルに係る実数の係数を要素として持つk次元の実数ベクトルである。もちろん、QとMCはなるべく一致するように分解することが好ましいが、誤差を含んでもよい。以下、実数行列分解部105が実数行列Qを式(2)のように分解する手法を説明する。
(第1の分解手法)
第1の分解手法として、データ非依存型の分解手法を説明する。第1の分解手法では、実数行列分解部105は、分解誤差を表す下式(3)のコスト関数g
1を解くことで分解を行う。
ただし、基底行列Mは二値であり、M∈{−1,1}
d×kである。
実数行列分解部105は、以下の手順で上記のコスト関数g1を解く。
(1)基底行列M及び係数行列Cをランダムに初期化する。
(2)基底行列Mの要素を固定して、係数行列Cの要素を最小二乗法により最適化することで、コスト関数g1が最小になるように係数行列Cの要素を更新する。
(3)係数行列Cの要素を固定して、コスト関数g1が最小になるように全探索で基底行列Mの要素を更新する。この最小化アルゴリズムである全探索については、後に詳しく述べる。
(4)収束するまで(2)及び(3)を繰り返す。例えば、コスト関数g1が所定の収束条件(例えば、減少量が一定値以下となる)を満たしたときに、収束したと判定する。
(5)ステップ(1)〜ステップ(4)により得た解を候補として保持する。
(6)ステップ(1)〜ステップ(5)を繰り返し、最もコスト関数g1を小さくできた候補基底行列M及び候補係数行列Cを最終結果として採用する。なお、このステップ(1)〜ステップ(5)の繰り返しはなくてもよいが、複数回繰り返すことで、初期値依存の問題を回避できる。
次に、ステップ(3)における基底行列Mの更新処理を説明する。図5の破線枠で囲ったように、基底行列Mのj行目の行ベクトルの要素は、実数行列のj行目の要素のみに依存する。よって、基底行列Mの各行ベクトルの値は、他の行とは独立して最適化することができるので、基底行列Mは、行ごとに網羅探索(全探索)を行うことができる。基底行列Mのj行目の行ベクトルは、本実施の形態のように二値分解の場合は2k通りしか存在しない(なお、後述の三値分解の場合にも3k通りしか存在しない)。よって、実数行列分解部105は、これらをすべて網羅的にチェックし、コスト関数g1を最小化する行ベクトルを採用する。これを基底行列Mのすべての行ベクトルに対して適用して、基底行列Mの要素を更新する。
(第2の分解手法)
第2の分解手法として、係数行列Cを疎にするデータ非依存型の分解手法を説明する。第2の分解手法では、実数行列分解部105は、分解誤差である下式(4)のコスト関数g
2を解くことで分解を行う。
ただし、基底行列Mは二値であり、M∈{−1,1}
d×kである。また、|C|
1は、係数行列Cの要素のL1ノルムであり、λはその係数である。
実数行列分解部105は、以下の手順で上記のコスト関数g2を解く。
(1)基底行列M及び係数行列Cをランダムに初期化する。
(2)基底行列Mの要素を固定して、係数行列Cの要素を近接勾配法で最適化する。
(3)係数行列Cの要素を固定して、コスト関数g2が最小になるように全探索で基底行列Mの要素を更新する。
(4)収束するまで(2)及び(3)を繰り返す。例えば、コスト関数g2のが所定の収束条件(例えば、減少量が一定値以下となる)を満たしたときに、収束したと判定する。
(5)ステップ(1)〜ステップ(4)により得た解を候補として保持する。
(6)ステップ(1)〜ステップ(5)を繰り返し、最もコスト関数g2を小さくできた候補基底行列M及び候補係数行列Cを最終結果として採用する。なお、このステップ(1)〜ステップ(5)の繰り返しはなくてもよいが、複数回繰り返すことで、初期値依存の問題を回避できる。
第2の分解手法によれば、係数行列Cを疎にすることができる。係数行列Cを疎にすることで、積MCの計算において、係数行列Cのゼロ要素にかかわる部分を省略することができ、さらに高速に内積計算を行うことができる。
(第3の分解手法)
次に、第3の分解手法を説明する。第1の分解手法では、コスト関数g
1として、分解誤差
を定義し、この分解誤差を最小化することを考えた。しかしながら、実数行列を基底行列と係数行列との積に近似した後に実際に近似をしたいのは、特徴ベクトルと実数行列の積Q
Tpである。
そこで、第3の分解手法では、特徴ベクトルpをあらかじめS個集め、これをまとめたものをP∈R
d×Sとする。そして、分解誤差を
と定義して、これを最小化する。即ち、第3の分解手法では、実数行列分解部105は、下式(5)のコスト関数g
3を解くことで分解を行う。
このコスト関数g
3によれば、実数行列Qは、実際のデータの分布に従って分解されることになるため、分解の際の近似精度が向上する。
この近似分解は、基底ベクトルmiを逐次的に求めることで行うことができる。第3の分解手法の手順は以下のとおりである。
(1)第1又は第2の分解手法によって、基底行列M及び係数行列Cを求めて、これをそれらの初期値とする。
(2)基底行列Mの要素を固定して、係数行列Cの要素を最小二乗法で最適化する。
(3)係数行列Cの要素を固定して、基底行列Mの要素を最適化することで、基底行列Mの要素を更新する。この基底行列Mの更新処理については後述する。
(4)収束するまで(2)及び(3)を繰り返し、コスト関数g3を最小化した基底行列M及び係数行列Cを候補として保持する。
(5)ステップ(1)〜(6)を繰り返し、コスト関数g3を最小化した基底行列M及び係数行列Cを最終結果として採用する。なお、ステップ(1)では再度第1又は第2の分解手法による基底行列M及び係数行列Cの最適化が行われるので、初期値が変更される。また、ステップ(5)の繰り返しはなくてもよいが、複数回繰り返すことで、初期値依存の問題を軽減できる。
次に、ステップ(3)における基底行列Mの更新処理を説明する。データ依存分解の場合、基底行列Mの行ベクトルの値は、もはや他の行と独立せず、依存してしまう。基底行列Mの要素は、二値又は三値、即ち離散値であるため、基底行列Mの最適化は、組合最適化問題となる。よって、基底行列Mの最適化には、例えば、グリーディアルゴリズム(Greedy algorithm)、タブーサーチ(Tabu search)、シミュレイテッドアニーリング(Simulated annealing)等のアルゴリズムを用いることができる。ステップ(1)でよい初期値が得られているので、これらのアルゴリズムでも良好に分解誤差を最小化できる。
例えばグリーディアルゴリズムを用いる場合は、以下の手順で基底行列Mを最適化する。
(3−1)基底行列Mの要素のうち、ランダムにT個を選択する。
(3−2)2T通りの組み合わせ(後述の三値分解の場合は3T通り)を試し、最もコスト関数g3を最小化したものを採用する。
(3−3)ステップ(3−1)及びステップ(3−2)を収束するまで繰り返す。
(第4の分解手法)
第4の分解手法は、第2の分解手法と第3の分解手法とを組み合わせてものである。具体的には、実数行列分解部105は、下式(6)のコスト関数g
4を解くことで分解を行う。
このコスト関数g
4によれば、実数行列Qは、実際のデータの分布に従って分解されることになるため、分解の際の近似精度が向上するとともに、係数行列Cを疎にすることができる。即ち、第2の分解手法のメリットと第3の分解手法のメリットをいずれも得ることができる。具体的な分解の手順は、第3の分解手法と同様である。
(第1及び第2の分解手法の変形例)
上記の第1及び第2のデータ非依存分解の手法は、分解数をkとしたとき、2k通り(三値分解の場合は3k通り)の探索が必要であるため、kが大きいときは、適用が難しい。そのような場合は、あらかじめ実数行列Qに所属する実数ベクトルqnの互いの類似度を調べ、似ている実数ベクトルどうしをクラスタリングし、各クラスタに対して第1又は第2の分解手法を適用すればよい。
ベクトル演算部106は、特徴ベクトルを用いた演算を行なう。演算の具体的内容については、後述にて、本実施の形態の特徴量演算装置100の応用例とともに具体的に説明する。この特徴ベクトルを用いた演算には、二値化された特徴ベクトルp∈{−1,1}dと実数行列分解部105にて分解された実数行列Qとの積QTpの計算が含まれる。以下では、まず、この積QTpの計算について説明する。
積Q
Tpは、下式(7)のように式変形できる。
ここで、m
i Tpは二値ベクトル同士の内積である。また、c
n,iは、n番目のクラスの係数ベクトルc
nのi番目の要素、即ち係数行列Cのi行n列の要素である。この二値ベクトル同士の内積m
i Tpは、極めて高速に計算可能である。その理由は以下のとおりである。
二値ベクトル同士の内積は、ハミング距離の演算に帰着できる。ハミング距離とは、2つのバイナリコードにおいて、値が異なるビットを数えたものであり、2つの二値ベクトルの間のハミング距離は、すなわち値が異なる要素数を数えたものである。ここで、m
iとpのハミング距離をD
hamming(m
i,p)と記述すると、内積m
i Tpは、
D
hamming(m
i,p)と下式(8)の関係がある。
ここで、前述のとおり、dはバイナリコードのビット数である。
ハミング距離の演算は、2つのバイナリコードにおいて、XORを適用した後に、1が立っているビットを数えることで計算できるので、極めて高速である。二値ベクトルがバイナリコード(0と1のビット列)で表現されているのであれば、ハミング距離は、下式(9)で計算できる。
ここで、XOR関数はm
iとpをバイナリコード表現で考えたときに排他的論理和を
取る操作であり、BITCOUNT関数はバイナリコードの1が立っているビット数を数えあげる処理のことである。
以上をまとめると、積Q
Tpは下式(10)のように変形できる。
すなわち、dビットのハミング距離計算をk回行い、k個のハミング距離について、係数行列Cに関する重み付け和を計算し、定数項を足したものがQ
Tpになる。よって、kが十分小さければ、Q
Tpを浮動小数点精度で計算するよりも、はるかに高速に計算できるようになる。
データベース107には、実数行列分解部105にて分解された複数の実数行列Qについて、基底行列Mと係数行列Cの積が辞書データとして記憶されている。ベクトル演算部106は、データベース107から基底行列Mと係数行列Cとの積を読み出して、上記の演算を行う。
以上のように、本実施の形態の特徴量演算装置100によれば、特徴ベクトルを用いた演算処理に特徴ベクトルと実数行列との積演算が含まれている場合にも、特徴ベクトルを二値化した上で、実数行列についても、二値行列である基底行列と係数行列との積に分解するので、特徴ベクトルと実数行列との積の計算において、特徴ベクトルと基底行列との積を計算した上で、さらに係数行列との積を計算することで、特徴ベクトルと実数行列との積演算を高速化できる。
また、複数の実数ベクトルを1つの実数行列としてまとめ、その実数行列を二値行列である基底行列と係数行列とに分解するので、特許文献1の技術のように各実数ベクトルをそれぞれ分解する場合と比較して、基底行列を構成する基底ベクトルの個数、即ち基底数を小さくすることができる。原理的には、1クラスあたり1個以下の基底数(即ち、基底数k≦クラス数L)とすることも可能である。
2−2.二値分解法の拡張
上記の二値分解法では、二値ベクトルmi、pを、それぞれ、mi∈{−1,1}d、p∈{−1,1}dと定義して、実数行列を二値の基底行列と実数の係数行列との積に分解することで積演算QTpが高速になることを説明した。しかしながら、mi、pをより一般的な二値ベクトルmi´∈{−a,a}d、p´∈{−a,a}dとしても、それらの高速な積演算が可能である。この場合、mi´Tp´=a2(mi Tp)であることから、−1及び1により定義される二値ベクトル同士の内積にa2を掛ければよい。
さらに、特徴ベクトル及び基底ベクトルを任意の二値ベクトルm
i´´∈{α,β}
d、p´´∈{γ,δ}
dとしても、高速な内積演算が可能である。ここで、係数α、β、γ、δは実数であり、α≠β、γ≠δである。この場合、m
i´´及びp´´は、−1及び1により定義される二値ベクトルm
i及びpの各要素に線形変換を施すことで得られ、下式(11)及び(12)のように展開される。
なお、式(11)及び(12)中の太字の「1」は、長さがdですべての要素が1であるベクトルである。また、式(11)及び(12)中のA、B、C、Dは実数であり、式(11)及び(12)が成立するようにあらかじめ計算しておけばよい。
内積m
i´´
Tp´´は、下式(13)のように展開できる。
式(13)の括弧内の計算は、−1及び1からなる二値ベクトル同士の内積である。従って、特徴ベクトルが任意の二値の要素をもつ二値ベクトルにされ、かつ、実数行列を二値の基底行列と実数の係数行列との積に展開した場合にも、高速演算が可能である。
2−3.三値分解法
次に、三値分解法を採用する特徴量演算装置を説明する。特徴量演算装置の構成は、図1に示した二値分解法の場合と同じである。二値分解法では、実数行列分解部105は、実数行列Qを式(1)によって二値の基底行列と実数の係数行列に分解したが、三値分解法を採用する特徴量演算装置100の実数行列分解部105は、実数行列を三値の基底行列と実数の係数行列に分解する。
実数行列分解部105は、d行L列の実数行列Q∈R
d×Lを、三値の基底行列と実数の係数行列の積に分解する。具体的には、実数行列分解部105は、d行L列の実数行列Q∈R
d×Lを、下式(14)によって、三値の要素を持つ基底行列Mと実数の要素を持つ係数行列Cに分解する。
ここで、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列の三値行列である。
また、係数行列Cは、L個(Lはクラス数)の係数ベクトルcnからなり、ここで、係数ベクトルcnは、k個の基底ベクトルに係る実数の係数を要素として持つk次元の実数ベクトルである。もちろん、QとMCはなるべく一致するように分解することが好ましいが、誤差を含んでもよい。実数行列分解部105は、二値分解法の場合と同様にして、第1〜第4の分解手法によって実数行列Qを分解できる。
ベクトル演算部106は、積Q
Tpを計算する。以下では、積Q
Tpを計算するベクトル演算部106を特に、積演算部106とも呼ぶ。積Q
Tpは、下式(15)のように式変形できる。
ここで、m
i Tpは、三値ベクトルm
iと二値ベクトルpとの内積である。積演算部106は、ここで、三値ベクトルm
iの代わりに、以下に定義する0置換ベクトルm
i bin、フィルタベクトルm
i filter、及び0要素数z
iを用いる。
まず、積演算部106は、miの0の要素を、−1又1に置き換える。miの各要素について、それを−1に置き換えるか、1に置き換えるかは、いずれでもよい。この置き換えによって、0置換ベクトルmi bin∈{−1,1}dが生成される。この0置換ベクトルmi bin∈{−1,1}dは二値ベクトルである。
また、積演算部106は、miの0の要素を−1に置き換え、0以外の要素を1に置き換える。この置き換えによって、フィルタベクトルmi filter∈{−1,1}dが生成される。このフィルタベクトルmi filterも二値ベクトルである。
さらに、積演算部106は、m
iの0の要素数z
iを求める。z
iは整数となる。積演算部106は、これらの二値ベクトルm
i bin、フィルタベクトルm
i filter、及び0要素数z
iを用いて、式(15)におけるm
i Tpを、下の式(16)及び式(17)によって計算する。
ここで、式(17)のAND関数は、二値ベクトルをバイナリコード表現で考えたときに、論理積を取る操作である。
以下、図6の具体例を用いて、式(16)及び(17)の導出を説明する。図6は、本実施の形態の計算例を示す図である。図6の例では、p={−1,1,−1,1,−1,1}であり、mi={−1,0,1,0,1,1}である。この例では、mi bin={−1,*,1,*,1,1}となる。ここで、「*」は−1又は1の任意のいずれかを示す。また、mi filter={1,−1,1,−1,1,1}となり、zi=2となる。
式(17)におけるpとmi binとの排他的論理和は、XOR(p,mi bin)={−1,*,1,*,1,−1}となり、すなわち、pとmiの要素のうち、非0で異なっている要素すなわち−1と1又は1と−1の組となる要素が1となり、−1と−1又は1と1の組となる要素が−1となる。
次に、その排他的論理和とmi filterとの論理積は、AND(XOR(p,mi bin),mi filter))={−1,−1,1,−1,1,−1}となり、pとmiの要素のうち、非0で異なっている要素に1が立ち、それ以外は−1となる。このビットカウントを取ると、1である要素の個数、すなわち非0で異なっている要素の個数が数え上げられ、Dfiltered_hamming(p,mi bin,mi filter)=2となる。
ここで、pとmiの要素のうち、1と1又は−1と−1の組となる要素の個数は、全要素数d=6から、非0で異なっている要素の個数Dfiltered_hamming=2と0である要素の個数zi=2を引くことで求められる。すなわち、1と1又は−1と−1の組となる要素の数=d−Dfiltered_hamming−zi=6−2−2=2となる。
mi Tpは、1と1又は−1と−1の組となる要素(積が1になる要素の組)の個数から、−1と1又は1と−1との組となる要素(積が−1になる要素の組)の個数を引いた値と等しいため、mi Tp=(d−Dfiltered_hamming−zi)−Dfiltered_hamming=d−zi−2Dfiltered_hammingとなり、式(16)が得られ、その値は、6−2−2×2=0となる。なお、この結果は、当然ながら、pTmi={−1,1,−1,1,−1,1}×{−1,0,1,0,1,1}=1+0+(−1)+0+(−1)+1=0と一致する。
式(15)〜(17)をまとめると、積Q
Tpは、下式(18)のように変形できる。
積演算部106は、この式(18)によって、積Q
Tpを計算する。
関数Dfiltered_hamming(p,mi bin,mi filter)は、ハミング距離演算と非常に似ており、AND演算が加わっただけである。したがって、Q∈Rd×Lを、三値行列と係数行列との積に分解した場合でも、QTpを浮動小数点精度で計算するよりも、はるかに高速にQTpを計算できるようになる。
以上のように、d次元の実数行列Q∈Rd×Lを、二値ではなく三値の基底行列と係数行列との積に分解することの利点は、式(10)の近似が、より少ない数の基底数の基底行列でも成立するようになることにある。すなわち、基底数を小さく抑えられることになるため、さらなる高速化につながる。
2−4.三値分解法の拡張
上記の三値分解法の説明では、二値ベクトルp及び三値ベクトルmiを、それぞれ、p∈{−1,1}d、mi∈{−1,0,1}dと定義して、複数の実数ベクトルからなる実数行列を三値の基底行列と係数行列との積に分解することで内積演算pTmiが高速になることを説明した。しかしながら、p、miをより一般的な二値ベクトルp´∈{−a,a}d、三値ベクトルmi∈{−a,0,a}dとしても、それらの高速な内積演算が可能である。この場合、p´Tmi´=a2(pTmi)であることから、−1及び1により定義される二値ベクトル同士の内積にa2を掛ければよい。
さらに、二値ベクトルp及び三値ベクトルm
iをp∈{α,β}
d、m
i∈{γ−δ,γ,γ+δ}
dと一般化しても、高速な内積演算が可能である。ここで、α、β、γ、δは実数であり、α≠β、δ≠0である。この場合、m
i及びpの各要素に下式(19)及び(20)の線形変換を施すことで、それぞれm
i´´及びp´´が得られる。
なお、式(19)及び(20)中の太字の「1」は、長さがdですべての要素が1であるベクトルである。また、式(19)及び(20)中のA、B、C、Dは実数であり、式(19)及び(20)が成立するようにあらかじめ計算しておく。
内積m
i´´
Tp´´は、下式(21)のように展開できる。
式(21)の括弧内の計算は、−1及び1からなる二値ベクトル同士の内積、又は−1及び1からなる二値ベクトルと−1、0、1からなる三値ベクトルとの内積である。従って、特徴ベクトルが任意の二値ベクトルにされ、かつ、実数行列を上記のとおり一般化した三値行列を用いて展開した場合にも、そのような特徴ベクトルと実数行列との積を高速に演算できる。
3.応用例
次に、ベクトル演算部106における演算処理について説明する。上記の二値分解法及び三値分解法の特徴量演算装置100のベクトル演算部106は、二値化された特徴ベクトルpと複数の実数ベクトルqをまとめた実数行列Qとの積の計算を伴うものであるが、そのような演算処理は種々ある。すなわち、本発明の上記の実施の形態は、特徴ベクトルを用いて演算処理を行なう種々の装置に応用できる。
3−1.第1の応用例
本応用では、本発明がHOG特徴量を用いてSVMにより複数種類の物体を認識する物体認識装置に応用される。図7は、物体認識装置の構成を示すブロック図である。物体認識装置10は、ピラミッド画像生成部11と、HOG特徴量抽出部12と、バイナリコード変換部13と、パラメータ決定部14と、パラメータ行列分解部15と、線形SVM識別部16と、ピーク検出部17とを備えている。
ピラミッド画像生成部11は、入力クエリとしての画像を取得して、当該画像を複数段階の倍率でそれぞれ縮小してなるG段のピラミッド画像を生成する。これにより、サイズの異なる物体に対処できる。このピラミッド画像生成部11は、図3に示したコンテンツ取得部101に対応する。HOG特徴量抽出部12は、ピラミッド画像の各段における画像を、16×16ピクセルのサイズのブロックに分割し、各ブロックからHOG特徴量を抽出する。HOG特徴量抽出部12は、各ブロックからD次元の特徴量を抽出する。このHOG特徴量抽出部12は、図3に示した特徴ベクトル抽出部102に対応する。バイナリコード変換部13は、各セルに与えられたD次元の特徴量を、d次元の二値ベクトルに変換する。このバイナリコード変換部13は、図3に示した特徴ベクトル二値化部103に対応する。
パラメータ決定部14は、認識したい対象の種類(大人、子供、車、バイクといった種類であって、パラメータで定義される)ごとに、それぞれ線形SVM識別部16における線形SVMにて用いる重みベクトルwn(n=1,2,…,L)及び実数のバイアスbn(n=1,2,…,L)を決定する。パラメータ決定部14は、学習用に用意された特徴量を用いて、学習処理によってL種類の重みベクトルwn及びバイアスbnを決定して、重みベクトルwnをまとめた重み行列Wを生成する。このパラメータ決定部14は、図3に示した実数行列取得部104に対応する。パラメータ行列分解部15は、重み行列Wを上記で説明した式(2)又は式(14)によって離散値の基底行列と係数行列との積に分解する。このパラメータ行列分解部15は、図3に示した実数行列分解部105に対応する。
線形SVM識別部16は、線形SVMによって特徴ベクトルの識別を行なう。線形SVM識別部16は、まず、s
x×s
yブロックをひとまとまりとして、検出ウィンドウを構成する。1つの検出ウィンドウから抽出される特徴ベクトルは、s
x×s
y×d次元のベクトルとなる。線形SVM識別部16は、この特徴ベクトルに対して、下式(22)の線形SVMを適用する。
ここで、線形SVMにおける積演算W
Txは、上記で説明した実数行列と二値ベクトルの高速な積演算により実現できる。
検出位置付近では、検出結果が固まることがある。そこで、ピーク検出部17は、周辺でf(x)の値が最大になったところを、代表的な検出位置とする。この線形SVM識別部16及びピーク検出部17は、特徴ベクトルを用いた処理を行なう構成であり、図3のベクトル演算部106に対応する。
次に、この物体認識装置10において、HOG特徴量により、回転し得る物体を検出する例を説明する。図8は、回転する道路標識について、それぞれの回転角度で辞書qn及びバイアスbnを作成する場合を示している。図8において左右方向は道路標識の回転角度θを示している。
従来のアプローチでは、回転角度ごとに学習処理を行って辞書qn及びバイアスbnを取得する。その後、入力画像からHOG特徴量を抽出して、検出ウィンドウ(スライディングウィンドウ)をL回適用することでこの道路標識の検出を行っている。しかしながら、このような従来の手法では、1検出ウィンドウあたりL回の内積計算が必要となり、計算量が多くなる。また、検出の角度分解能は2pi/Lであり、荒い。
そこで、本応用例では、パラメータ決定部14が辞書q
nをまとめて行列Qとし、SVM識別部16は、下式(23)により複数の辞書q
nと特徴ベクトルpとの内積計算をまとめて行う。
このようにk個の整数基底に分解することにより、1検出ウィンドウあたり、k回の二値と二値との内積演算又は二値と三値との内積演算で処理が可能となる。このとき、隣り合う辞書同士が似ているため、整数基底の数kを小さくすることができ、原理的には1クラスあたり1個以下(k≦L)とすることも可能である。
本応用例では、さらに、ピーク検出部17が、係数行列Cの性質に着目した検出分解能の高精度化を行う。図9は、係数行列Cの性質を示す図である。実数ベクトルqnが回転角度θをパラメータとして、そのパラメータに従って変化するものである場合には、複数の実数ベクトルqnをまとめて実数行列Qを生成する際に、図8に示すように、複数の実数ベクトルqnをパラメータθの順に並べると、図9に示すように、係数行列Cの実数ベクトルqnが並べられた方向と同方向の各ベクトル、即ち係数行列Cの各行ベクトルの要素の行方向の変化が滑らかになる。
そこで、ピーク検出部17は、係数行列Cの行ベクトルを多項式でフィッティングして、下式(24)のように連続関数で表現する。
ここで、α
iは、フィッティングの係数である。
これを用いて識別関数の式を整理すると、回転角度θにおける識別関数は下式(25)のようにパラメータθに関する連続関数の形式で表現できる。
ピーク検出部17は、この識別関数を用いてピークの検出を行う。c
i(θ)は式(24)に示すように多項式であるから、f
θ(p)もまた連続関数(連続の多項式)となる。図10は、f
θ(p)の例を示すグラフである。図10において、横軸は回転角度θであり、縦軸はf
θ(p)である。ピーク検出部17は、f
θ(p)が正の最大をとるときのθを対象の回転角度、即ち特徴ベクトルpのパラメータ値として検出する。
以上のように、複数の辞書qnをまとめて行列Qを生成する際に、複数の辞書qnをそれが滑らかに変化するように、パラメータ(図8の例ではθ)の順に並べて行列Qを生成することで、識別関数をそのパラメータに関する多項式の形式で表現できるので、高い分解能でそのパラメータを検出できるようになる。
なお、上記ではパラメータを回転角度として説明したが、パラメータは例えばスケールであってもよい。すなわち、図2のように検出ウィンドウの大きさは固定とし、検出ウィンドウ内における人物のサイズ(スケール)ごとに、別々に識別器を学習しておき、スケールσに関して多項式のフィッティングを行い、スケールσに関して識別器のピークを求めることで、高精度にスケール推定をおこなえるようになる。また、このように工夫することで、ピラミッド画像自体の生成を不要とできる。さらにパラメータが複数であってもよい。例えば、回転角度θとスケールσの両方に関して上記の多項式へのフィッティングを行ってもよい。この場合、係数はci(θ,σ)のように、二次元の多項式となる。
また、係数αiは、まず係数行列Cを求めてから各行をフィッティングして求めることができるが、係数行列Cの個々の要素cn,iを求めずに直接係数αiを求めてもよい。さらに、フィッティングする関数は多項式でなくてもよく、例えば三角関数(サイン、コサイン)にフィッティングしてもよい。
3−2.第2の応用例
本応用例では、本発明がk−meansクラスタリングに応用される。図11は、k−meansクラスタリング装置の構成を示すブロック図である。k−meansクラスタリング装置20は、コンテンツ取得部21と、特徴ベクトル生成部22と、特徴ベクトル二値化部23と、代表行列更新部24と、収束判定部25と、代表行列分解部26と、最近接代表ベクトル探索部27とを備えている。
コンテンツ取得部21は、クラスタリングの対象となるN個のコンテンツを取得する。特徴ベクトル生成部22は、コンテンツ取得部21にて取得した各コンテンツからそれらの特徴量を特徴ベクトルpとして抽出する。特徴ベクトル二値化部23は、特徴ベクトル抽出部22にて抽出された各特徴ベクトルを二値化する。
代表行列更新部24は、まず、特徴ベクトル二値化部23で二値化されたN個の特徴ベクトルからk(=L)個をランダムに選出してこれを代表ベクトルqn(n=1,2,…,L)とし、これらの代表ベクトルqnをまとめた行列を代表行列Qとする。収束判定部25は、代表行列更新部24が代表行列を更新するごとに収束判定を行なう。収束判定部25にて収束したと判定された場合には、k−meansクラスタリング装置20はクラスタリングの処理を終了する。代表行列分解部26は、代表行列更新部24にて更新された代表行列を離散値(二値又は三値)行列に分解する。
最近接代表ベクトル探索部27は、特徴ベクトル二値化部23より入力されるN個の二値ベクトルをそれぞれ最も近傍の代表ベクトルqnに所属させる。最近接代表ベクトル探索部27は、この結果を代表行列更新部24に出力する。代表行列更新部24は、各代表ベクトルqnについて、それに所属する特徴ベクトル(二値化されている)の平均ベクトルを算出して、これを新しい代表ベクトルqnとする。このようにして代表行列更新部24で更新される代表ベクトルqnは、二値ベクトルの平均で算出されるので、実数ベクトルとなる。
従って、仮に代表行列分解部26がなければ、最近接代表ベクトル探索部27は、更新された代表ベクトル(実数ベクトル)と特徴ベクトル(二値ベクトル)との距離を求めるためにそれらの内積を計算しなければならない。そこで、本応用例では、上記のように、この代表ベクトルqn(実数ベクトル)の集合である代表行列Qを代表行列分解部26によって、上記の実施の形態で説明したように、離散値(二値又は三値)行列と実数の係数行列との積に分解する。それによって、最近接代表ベクトル探索部27における、各特徴ベクトルと各代表ベクトルとの距離の計算を高速にでき、よって各特徴ベクトルが最も近接する代表ベクトル(すなわち、所属すべき代表ベクトル)を高速に探索できる。
3−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)に提案されている手法を採用する。
具体的には、本応用例の近似最近傍探索装置は、N個のデータに対してk−meansを再帰的に適用することでk−分木を構築し、上記提案の木探索の原理により近似的に最近傍点を探索する。この手法は、データが実数ベクトルであり、かつノードに登録されている代表ベクトルが二値ベクトルである場合を前提として設計される。但し、データが二値ベクトルであって、ノードに登録されている代表ベクトルが実数ベクトルである場合にも、上記の実施の形態を採用することで、木探索を高速化できる。
II.第2の実施の形態
1.概要
第1の実施の形態では、二値ベクトルpと複数の実数ベクトルqiの内積を一括して高速に計算できる特徴量演算装置を説明した。この特徴量演算装置を応用した物体認識装置によれば、複数種類の認識をまとめて行うことができた。具体的には、物体認識装置において、複数種類(クラス)の認識に対応する複数の辞書としての実数ベクトルq1,q2,q3,…,qLで識別を行う際に、このL個の実数ベクトルq1,q2,q3,…,qLと二値ベクトルpとの各々の内積を計算するにあたって、L個の実数ベクトルq1,q2,q3,…,qLをまとめた実数行列Qを二値の要素を持つ基底行列Mと実数の要素を持つ係数行列Cに分解して、CTMTpを計算し、これを閾値と比較することで、各クラスの識別を行った。
このように、第1の実施の形態では、複数の実数ベクトルをまとめて分解することで、複数の実数ベクトルをそれぞれ基底行列と係数ベクトルに分解する場合と比較して、より少ない基底数で分解ができた。特に、物体認識装置において、隣り合う辞書同士が似ている場合には、基底数kを小さくすることができ、原理的には1クラスあたり1個以下(k≦L)とすることも可能であった。
しかしながら、第1の実施の形態の物体認識装置においても、クラス数Lが増加すると、基底数kを大きくしなければならず、基底数kが増加すれば分解する際に行われるコスト関数最小化に要する演算量は爆発的に増加し、実数ベクトルをまとめた実数行列の分解が困難になる。また、第1の実施の形態の物体認識装置では、内積計算に基づいて識別を行う場合に、各クラスについて、すべての計算をする前にネガティブの判定を下す早期棄却の手順を採用することができず、特徴ベクトルと基底との内積をすべて計算する必要がある。
本実施の形態では、上記の点で、第1の実施の形態の物体認識装置に対して有利な物体認識装置を説明する。
2.実施の形態
本実施の形態の物体認識装置30は、図12に示すように、ピラミッド画像生成部31と、HOG特徴量抽出部32と、バイナリコード変換部33と、パラメータ決定部34と、パラメータ行列分解部35と、線形SVM識別部36とを備えている。
コンテンツ取得部としてのピラミッド画像生成部31は、入力クエリとしての画像を取得して、当該画像を複数段階の倍率でそれぞれ縮小してなるG段のピラミッド画像を生成する。これにより、サイズの異なる物体に対処できる。特徴ベクトル抽出部としてのHOG特徴量抽出部32は、ピラミッド画像の各段における画像を、16×16ピクセルのサイズのブロックに分割し、各ブロックからHOG特徴量を抽出する。HOG特徴量抽出部32は、各ブロックからD次元の特徴量を抽出する。特徴ベクトル二値化部としてのバイナリコード変換部33は、各セルに与えられたD次元の特徴量を、d次元の二値ベクトルに変換する。
実数行列取得部としてのパラメータ決定部34は、認識したい対象の種類(大人、子供、車、バイクといった種類であって、パラメータで定義される)ごとに、それぞれ線形SVM識別部36における線形SVMにて用いる重みベクトルwn(n=1,2,…,L)及び実数のバイアスbn(n=1,2,…,L)を決定する。パラメータ決定部34は、学習用に用意された特徴量を用いて、学習処理によってL種類の重みベクトルwn及びバイアスbnを決定して、重みベクトルwnをまとめた重み行列Wを生成する。
実数行列分解部ないし実数分解装置としてのパラメータ行列分解部35は、離散値の基底行列と係数行列との積に分解する。図13は、パラメータ行列分解部35による複数の実数の重みベクトルの分解を説明する図である。以下の説明では、実数の重みベクトルをqと表記する。パラメータ行列分解部35は、図13に示すように、複数の実数ベクトルqnを並べてなる実数行列Qを複数の基底行列Mと係数行列Cとの積の和に分解する。以下、具体的な手順を説明する。
以下の説明において、第1の実施の形態で説明した分解手法で実数行列Qをk個の基底を持つ基底行列Mと係数行列Cとに分解する手順を下式(26)のように表記することとする。
この分解は第1の実施の形態で説明した二値又は三値の分解手法により行うことができるが、上述のように基底数kが大きくなると分解が困難になる。そこで、本実施の形態では、以下のアルゴリズムで実数行列を逐次的に分解する。図14は、パラメータ行列分解部35が実行するアルゴリズムのフロー図である。まず、パラメータ行列分解部35は、分解すべき実数行列Qを取得する(ステップS141)。次に、パラメータ行列分解部35は、インデクスi(i=1〜N、Nは2以上の自然数)を1とし、残差行列Rに実数行列Qを代入する(ステップS142)。残差行列Rは、逐次的な分解によってそれまでに分解された基底行列Mと係数行列Cとの内積の和と実数行列Qとの差である。
次に、パラメータ行列分解部35は、残差行列Rを第1の実施の形態の手法によって、基底行列Mと係数行列Cに分解する(ステップS143)。このとき、基底数はkiとする。なお、基底数ki=k1、k2、・・・、kNは、あらかじめパラメータ行列分解部35に記憶されている。MiCiが得られると、パラメータ行列分解部35は、もとの残差行列RとMiCiとの差分を新たな残差行列Rとし(ステップS144)、インデクスiをインクリメントし(ステップS145)、インデクスiがNより大きいか、即ち、N段階の逐次的な分解が終了したかを判断する(ステップS146)。
インデクスiがN以下である場合には(ステップS146にてNO)、パラメータ行列分解部35は、ステップS143に戻って、ステップS144で得られた新たな残差行列Rに対して、ステップS145でインクリメントされた新たなiで再度分解を行う。以上の処理を繰り返して、インデクスiがNより大きくなったら(ステップS146でYES)、処理を終了する。なお、上記のように、N段の基底数k1、k2、・・・、kNは、あらかじめ用意されており、それらは同じ数であっても互いに異なる数であってもよい。また、基底数kは例えば8程度であればよい。
ベクトル演算部としての線形SVM識別部36は、線形SVMによって特徴ベクトルの識別を行なう。線形SVM識別部36は、まず、sx×syブロックをひとまとまりとして、検出ウィンドウを構成する。1つの検出ウィンドウから抽出される特徴ベクトルxは、sx×sy×d次元のベクトルとなる。線形SVM識別部36は、図15に示す特徴ベクトルxと重みベクトルqnを並べた重み行列Qとの積が、ある閾値を超えるか否かによって識別をする。よって、この内積が閾値を超えるか否かがわかればよく、内積の値を求めること自体は必ずしも必要ない。重み行列Qは、パラメータ行列分解部35においてM1C1+M2C2+・・・+MNCNに分解されており、その分解アルゴリズムは、残差を徐々に小さくしていくものであるので、MiCiのインデクス(添え字)iが小さいほど、もとの重み行列Qに対する寄与度が大きくなっている。このことに着目すると、識別処理の早期棄却(カスケード化)が可能となる。
図16は、線形SVM識別部36におけるカスケード識別処理のフロー図である。線形SVM識別部36は、まず、インデクスiを1に初期化して、図17に示すように、入力された特徴ベクトルxとMiCi(=M1C1)との積を計算し、行数1、列数(クラス数)Lの次元をもつ行列yを得る(ステップS161)。このとき第1の実施の形態で説明したように、xとMiとのハミング距離を計算して、係数行列Cに関する重み付け和を計算し、定数項を足すことで、特徴ベクトルxとMiCi(=M1C1)との内積を計算する。
得られたyは、xTQをよく近似しているため、この近似行列yの要素が十分に小さければ、当該要素に対応するクラスについては、この時点でウィンドウ内の被写体が背景(negative)であると判別することができる。そこで、次に、線形SVM識別部36は、近似行列yのサイズと同じサイズの閾値行列tiをあらかじめ用意しておき、図18に示すように、得られた近似行列yの各要素とこの閾値行列tiの各要素とをそれぞれ比較して、閾値行列tiの要素よりも小さい近似行列yの要素(クラス)については、背景(negative:図17における「N」)であると判定する(ステップS162)。なお、閾値行列tiは、positiveをnegativeと誤判定することの無いような十分小さい値にあらかじめ調整しておけばよい。そして、背景であると判定された要素(クラス)については、この時点で識別を確定させる。
線形SVM識別部36は、未確定のクラス、即ち早期棄却できなかった要素(図18における「?」)が残っているか否かを判断する(ステップS163)。そして、早期棄却できなかった要素(クラス)が残っている場合には(ステップS163にてYES)、線形SVM識別部36は、インデクスiをインクリメントし(ステップS164)、インデクスiがNより大きいかを確認する(ステップS165)。線形SVM識別部36は、インデクスiがN以下である場合は(ステップS165にてNO)、近似行列yに、次の段のxTMiCiを加えて、近似行列yを更新し(ステップS166)、ステップS162に戻って、近似行列yと閾値行列tiとを比較する。なお、ここでもxTMiCiの計算は、第1の実施の形態と同様に行うことができる。
このようにして、近似行列yを更新するごとに閾値tiと比較することで、背景と確定できる要素(クラス)が徐々に増えていき、未確定のクラスがなくなった場合は(ステップS163にてNO)、すべてのクラスについて背景であると確定して(ステップS167)、処理を終了する。一方、背景であると確定できないクラスが残されたままインデクスiがNより大きくなった場合には(ステップS165にてYES)、その未確定のクラスについて、定義された被写体に該当するという判定(positive判定)をして(ステップS168)、処理を終了する。
以上のように、本実施の形態によれば、二値化された特徴ベクトルとの内積演算が行われる実数ベクトルを複数の二値又は三値の基底行列と係数行列との内積の和に分解するので、基底行列の基底数を小さく抑えることができ、クラス数が多い場合にも実数行列を容易に分解できる。さらに、実数ベクトルを二値又は三値の基底行列M係数行列との内積の線形和に分解するので、全体では、k1+k2+・・・+kN個の基底ベクトルが必要となるが、識別の際には、カスケード化による早期棄却が可能となり、かつ、多くの場合にはこれらの基底ベクトルをすべて計算することなく早期棄却されるため、識別処理を高速化できる。
3.変形例
上記の実施の形態において、ステップS152にて近似行列yと閾値行列tiとの比較の結果、閾値行列tiの要素より小さいとしてnegative判定された近似行列yの要素については、その後の計算を省略してよい。具体的には、図18の例では、近似行列yと閾値行列t1とを比較した結果、クラス1、3、6、7についてnegative判定ができているので、図20に示すように、近似行列yを更新するためにxTM2C2を計算する際には、係数行列C2における未確定クラスのみについて計算し(図20では係数行列C2における確定したクラスをハッチングして示している)、もとの近似行列yの未確定のクラスのみ(図20では、もとの近似行列yにおける確定したクラスをハッチングして示している)をこれと足し合わせることで、未確定クラスのみが更新された新たな近似行列yを得る(図20では、新たな近似行列yにおける確定したクラスをハッチングして示している)。そして、新たな近似行列yを対応する閾値行列t2と比較する際にも、図21に示すように、すでにnegative判定されている要素(図21において「N」で示している)については、比較を行わず、未確定クラスについてのみ比較を行うようにしてよい。図21の例では、新たにクラス2、5についてnegative判定がされている。このように、確定したクラスについての計算を省略することで、識別のための計算不可を軽減して、識別処理をより高速化できる。
また、上記の実施の形態では、小さい値の閾値行列tiを用意して、近似行列yの要素がこの閾値行列の要素より小さいときに、その要素についてnegative判定をすることで早期棄却を行ったが、これに代えて、又はこれに加えて、大きい値の閾値行列を用意して、近似行列yの要素がその閾値行列の値より大きいときに、その要素についてpositive判定をして、早期確定をしてもよい。
また、上記の実施の形態では、実数行列Qを複数のMiCiの和に分解したことでカスケード化した識別が可能となり、物体認識装置30はカスケード化した識別を行ったが、分解のみ上記の手法で行い、識別処理はカスケード化しない通常の処理を行ってもよい。この場合にも、分解については、実数行列のクラス数が多い場合にも各基底行列の基底数を比較的小さく抑えることができるという効果を得ることができる。
なお、上記で個別に説明した内容以外にも、第2の実施の形態において、第1の実施の形態で説明した技術を適宜に組み合わせてよい。例えば、第2の実施の形態においても、第1の実施の形態で説明したデータ依存分解及びデータ非依存分解のいずれも採用できる。
III.第3の実施の形態
1.概要
上記の第2の実施の形態では、複数クラスの実数ベクトルからなる実数行列を全クラスについて共通の二値基底行列に分解するので、相関が低い多クラス識別に対しては有効ではない。そこで、本実施の形態では、相関が高い識別器のグルーピングを行うことで、より効率的な分解を行う。
より具体的には、本実施の形態では、相関が高い識別器のみをグルーピングし、各グループに対して行列分解を適用させることで、少ない基底数での分解を行う。さらに、カスケード構造を構築する際の残差行列Rに対してグルーピングし直すことにより、各段で最適なグループを選択する。
2.実施の形態
本実施の形態の物体認識装置の構成は、図12に示した第2の実施の形態の物体認識装置30と同じであり、ピラミッド画像生成部31と、HOG特徴量抽出部32と、バイナリコード変換部33と、パラメータ決定部34と、パラメータ行列分解部35と、線形SVM識別部36とを備えている。
図22は、本実施の形態のパラメータ行列分解部35が実行するアルゴリズムのフロー図である。パラメータ行列分解部35は、分解すべき実数行列Qを取得し(ステップS221)、インデクスi(i=1〜N、Nは2以上の自然数)を1として残差行列Rに実数行列Qを代入する(ステップS222)。そして、パラメータ行列分解部35は、複数の重みベクトルqi(i=1〜N)に対して相関が高いものどうしを同じグループとしてまとめるグルーピングを行って(ステップS223)、残差行列Rを基底行列Mと係数行列Cに分解する(ステップS224)。
即ち、Q=MCの分解では、すべてのクラスに対して1つの二値基底行列Mを用いて分解しているので、重みベクトルq間の距離が近いほど、この分解が有効になる。しかしながら、実際に分解する実数行列Qにおいて、必ずしも各クラスにおけるベクトルの距離が近いとは限らない。また、分解前の重みベクトルqの距離が離れていても分解後に近くなることがある。そこで、パラメータ行列分解部35は、上述のように分解(ステップS224)の前に、まず分解対象のベクトルを相関別にグルーピングする(ステップS223)。
パラメータ行列分解部35は、グルーピングのために、ベクトルq
m(m=1,2,・・・,J)とベクトルq
n(n=1,2,・・・,J)との間の距離を下式(27)、(28)によって正規化する。
ここで、NDは、ベクトルqmとベクトルqnとの間の正規化された距離であり、−1〜1の実数である。ND=1であるときにベクトルqmとベクトルqnとが同じとなり、ND=−1であるときにベクトルqmとベクトルqnとは反対の向きのベクトルとなる。パラメータ行列分解部35は、しきい値thcorre とNDとを比較して、ND>thcorre であるベクトルを同じグループとする。
図23は、グルーピングを用いた行列分解を説明する図である。図23のスケール係数行列Cにおける塗りつぶされた要素は0を表しており、各要素のハッチングはそれぞれのグループを表している。図23に示すように、パラメータ行列分解部35は、各グループについて、基底数kでの分解を行う。
ステップS224の分解によってMiCiが得られると、パラメータ行列分解部35は、もとの残差行列RとMiCiとの差分を新たな残差行列Rとし(ステップS225)、インデクスiをインクリメントし(ステップS226)、インデクスiがNより大きいか、即ち、N段階の逐次的な分解が終了したかを判断する(ステップS227)。
インデクスiがN以下である場合には(ステップS227にてNO)、パラメータ行列分解部35は、ステップS223に戻って、ステップS225で得られた新たな残差行列Rに対して改めてND>thcorre によってグルーピングをし直し、ステップS226でインクリメントされた新たなiで再度分解を行う。以上の処理を繰り返して、インデクスiがNより大きくなったら(ステップS227でYES)、処理を終了する。
以上のように、本実施の形態の物体認識装置によれば、相関が高い重みベクトル(識別器)をグルーピングして、各グループに対してそれぞれ基底数kの行列分解を行うので、少ない基底で重み行列(実数行列)を二値の基底行列と係数行列の積に分解できる。さらに、本実施の形態の物体認識装置によれば、カスケード処理を行うにあたって、残差行列Rが生成されるごとに新たにグルーピングをし直すので、カスケード処理の各段において最適なグループを選択できる。
IV.変形例
特徴量演算装置100において、コンテンツ取得部101、特徴ベクトル生成部102、特徴ベクトル二値化部103、実数行列取得部104、実数行列分解部105、及びベクトル演算部106の一部と他の部分とが別々の装置として構成されていてもよい。特に、コンテンツ取得部101、特徴ベクトル生成部102、特徴ベクトル二値化部103、及びベクトル演算部106が特徴演算装置100に搭載され、実数行列取得部104、及び実数行列分解部105が別の装置に搭載されてよい。この場合には、実数行列分解部105にて分解された複数の実数行列が特徴演算装置100のデータベース107に記憶され、ベクトル演算部106は、データベース107から分解された複数の実数行列を取得する。
上記の実施の形態では、基底行列Mが二値又は三値であったが、基底行列Mが二値又は三値でなくともよい。基底行列Mのとり得る要素の種類が有限の数であれば上記の分解手法を適用して実数行列を分解することができる。また、係数行列Cも、基底行列Mと同様にあらかじめ定められた離散的な値でもよい。例えば、係数行列Cの要素を2のべき乗に制約してもよく、そうすることで、処理を高速化できる。また、分解する実数行列Qの要素の平均値が著しく大きい(若しくは小さい)場合、すなわち、平均値が0から著しく離れている場合には、この平均値をあらかじめ実数行列Qの各要素から引いてオフセット実数行列を生成し、このオフセット実数行列Q´を基底行列Mと係数行列Cに分解すると、より少ない基底で式(2)や式(14)の近似分解を行うことができる。
コンテンツ取得部101にて取得されるコンテンツデータは、車両から得られる計測データであってよい。さらに、車両から得られる計測データは、例えば、車両に設置されたカメラで撮影された画像データ、車両に設置されたセンサで計測されたセンシングデータであってよい。この場合に、関連性判定装置としての特徴演算装置100のベクトル演算部106は、計測データと辞書データとの関連性を判定する。例えば、計測データとして、車両に設置されたカメラで撮影された画像データが取得される場合には、辞書データとして複数の人物画像のデータがデータベースに保存されており、関連性判定装置としての特徴演算装置100のベクトル演算部106は、上記の応用例のいずれかによって、画像データの画像に人物が含まれるか否かを判定してよい。