以下、本発明の実施の形態の特徴量演算装置について、図面を参照しながら説明する。なお、以下に説明する実施の形態は、本発明を実施する場合の一例を示すものであって、本発明を以下に説明する具体的構成に限定するものではない。本発明の実施にあたっては、実施の形態に応じた具体的構成が適宜採用されてよい。
1.第1の実施の形態
本発明の実施の形態の特徴量演算装置を説明するのに先立って、図1〜6に倣って、本発明の実施の形態の特徴量演算装置における特徴量抽出及び特徴量演算の処理の概要を説明する。以下では、本実施の形態の特徴量演算装置が識別装置であり、抽出する特徴量がHOG特徴量であり、特徴量演算処理が識別処理である場合を例に説明する。本実施の形態の特徴量演算装置としての識別装置は、上記のフィーチャ・ピラミッド法とクラシファイア・ピラミッド法を融合したハイブリッド・ピラミッド法を採用する。
図7は、ハイブリッド・ピラミッド法を説明するための図である。識別装置は、入力画像をL/K通りのサイズに変形(リサイズ)して、L/K枚のサイズの異なる画像を生成し、それぞれの画像についてHOG特徴量を抽出する。識別装置は、各段の特徴量についてK通りの異なるサイズのウィンドウWを用いて、識別のための特徴量演算を行う。
図8は、ハイブリッド・ピラミッド法の識別処理を説明する図である。識別装置は、入力画像10が得られると、それを複数とおりの縮小率で縮小して、複数のリサイズ(縮小)画像11を生成する。具体的には、識別装置は、入力画像10を1/2に縮小した1/2画像、1/4に縮小した1/4画像、1/8に縮小した1/8画像、・・・というように、2のべき乗で順次縮小したリサイズ画像によってピラミッド画像を生成する。
次に、識別装置は、入力画像及び複数のリサイズ画像(合計L/K枚)からなるピラミッド画像の各々についてHOG特徴量を抽出する。すなわち、識別装置は、特徴量の抽出処理をL/K回行う。ここで、Kは、オクターブ間隔であり、ピラミッド画像の各々に対していくつのテンプレートを用意するか(図7において各画像に重畳されている枠の数)を示すものである。識別装置は、モデルサイズの異なる複数(K種類)の辞書からなる辞書セットを記憶しており、各HOG特徴量について、特徴量の切り出しを行うサイズごとに対応する辞書を用いて、識別のための特徴量演算を行う。このとき、識別装置は、ピラミッド画像の各々に対して同じ辞書セットを用いて識別を行う。
図9は、ハイブリッド・ピラミッド法に特徴量の二値化による高速化の技術を適用した本発明の実施の形態の識別処理を説明する図である。識別装置は、入力画像10が得られると、それを複数とおりの縮小率で縮小して、複数のリサイズ(縮小)画像11を生成する。具体的には、識別装置は、入力画像10を1/2に縮小した1/2画像、1/4に縮小した1/4画像、1/8に縮小した1/8画像、・・・というように、2のべき乗で順次縮小したリサイズ画像によってピラミッド画像を生成する。なお、識別装置は、入力画像を縮小することによってリサイズ画像を生成するだけでなく、入力画像を拡大することによってリサイズ画像を生成してもよい。
次に、識別装置は、入力画像及び複数のリサイズ画像(合計L/K枚)からなるピラミッド画像の各々についてHOG特徴量を抽出する。すなわち、識別装置は、特徴量の抽出処理をL/K回行う。識別装置は、各サイズの画像から抽出された複数段のHOG特徴量の各々を二値化する。すなわち、識別装置は、特徴量の二値化処理をL/K回行う。識別装置は、モデルサイズの異なる複数(K種類)の辞書からなる辞書セットを記憶しており、各二値HOG特徴量について、特徴量の切り出しを行うサイズごとに対応する辞書を用いて、識別のための特徴量演算を行う。このとき、識別装置は、ピラミッド画像の各々に対して同じ辞書セットを用いて識別を行う。
このように、本実施の形態の識別装置は、二値化処理を加えても、ピラミッドの階層分(L/K)だけしか二値化処理が必要でなく、この点で二値特徴量を抽出する処理を高速化できる。また、二値化処理が多くないにもかかわらず、二値化による識別処理の高速化の恩恵を十分に受けることができる。さらに、ハイブリッド・ピラミッドで特徴量のサイズが減り、さらにそれが二値化されるので、特徴量によるメモリ消費量が少なくてすむ。よって、ハイブリッド・ピラミッド法と特徴量の二値化による識別処理の高速化技術とを組み合わせると、二値化の処理負荷を抑えつつ、二値化による識別処理の高速化の恩恵を最大限に活かすという相乗効果が得られる。
すなわち、入力画像から歩行者を検出する識別装置を例にすると、フィーチャ・ピラミッド法では、検出したい歩行者が特定のピクセル数になるように入力画像をリサイズするが、このとき、1セルのピクセル数はM×Mとなり、辞書のセル数も一定となる。また、クラシファイア・ピラミッド法では、検出したい歩行者に合わせて1セルのピクセル数をリサイズし、辞書のセル数は一定となる。これに対して、本実施の形態のハイブリッド・ピラミッド法では、検出したい歩行者に合わせて、ある程度入力画像をリサイズしてピラミッド画像を生成し、ピラミッド画像ごとにセル数の異なる辞書を用意して適用する。これによって、複数辞書を識別するのに用いる特徴量を共通化できるので、特徴計算時間を短縮できることになる。
なお、上述で説明した識別装置では、ピラミッド画像に含まれる各画像について、同じ辞書セットを用いて識別を行ったが、辞書セットは完全に同一でなくてもよく、ピラミッド画像の各画像に用いる辞書セットが互いに類似するものであってもよい。辞書セットが類似するということは、辞書セットに含まれる複数の辞書のうちの一部のみが共通であることをいう。
2.第2の実施の形態
2−1.背景
従来、画像検索、音声認識、文章検索などの多くの分野で機械学習によって対象を認識する認識装置が実用化されている。この認識のために、画像、音声、文章などの情報から特徴量が抽出される。画像から特定の対象を認識する場合には、画像の特徴量として、例えばHOG特徴量を用いることができる(例えば、Navneet Dalal and Bill Triggs, "Histograms of Oriented Gradients for Human Detection", CVPR '05 Proceedings of the 2005 IEEE Computer Society Conference on Computer Vision and Pattern Recognition (CVPR'05) - Volume 1 - Volume 01, Pages 886-893を参照)。特徴量は、計算機で扱いやすいように特徴ベクトルの形式で扱われる。すなわち、画像、音声、文章などの情報は、対象認識のために特徴ベクトルに変換される。
認識装置は、特徴ベクトルを認識モデルに適用することで対象を認識する。例えば、線形識別器の認識モデルは、式(1)で与えられる。
ここで、xは特徴ベクトルであり、wは重みベクトルであり、bはバイアスである。線形識別器は、特徴ベクトルxが与えられたときに、f(x)がゼロより大きいか小さいかによって、二値分類を行う。
このような認識モデルは、学習用に準備された多数の特徴ベクトルを用いて学習を行うことによって決定される。上記の線形識別器の例では、多数の正例と負例を学習データとして用いることで、重みベクトルw及びバイアスbが決定される。具体的な方法としては、例えば、SVM(support vector machine)による学習を採用できる。
線形識別器は、学習及び識別に要する計算が速いため、特に有用である。しかしながら、線形識別器は、線形判別(二値分類)しかできないため、識別能力に乏しいという欠点がある。そこで、特徴量に予め非線形変換をかけておくことで、特徴量の記述能力を向上させる試みがされている。例えば、特徴量の共起性を用いることで、識別能力を強化する試みが行われている。具体的には、FIND(Feature Interaction Descriptor)特徴量がこれに相当する(例えば、Hui CAO, Koichiro YAMAGUCHI, Mitsuhiko OHTA, Takashi NAITO, and Yoshiki NINOMIYA, "Feature Interaction Descriptor for Pedestrian Detection", IEICE TRANSACTIONS on Information and Systems Vol.E93-D No.9 pp.2656-2659を参照)。
FIND特徴量は、特徴ベクトルの各要素のすべての組み合わせに関して調和平均をとることで、共起要素とし、特徴量の識別能力を高めるものである。具体的には、D次元の特徴ベクトルx=(x1,x2,・・・,xD)Tが与えられたときに、すべての要素の組み合わせに対して、下式(2)の非線形な計算を行う。
このとき、FIND特徴量は、y=(y11,y12,・・・,yDD)Tで与えられる。
例えば、特徴ベクトルxが32次元であるとき、組み合わせの重複を取り除いたFIND特徴量は528次元となる。なお、必要に応じて、yは長さが1となるように正規化されてよい。
2−2.概要
しかしながら、FIND特徴量を求めるには、特徴ベクトルの要素のすべての組み合わせの計算が必要であり、この計算量は次元数に対して二乗のオーダーになる。また、各要素の計算において割り算が発生するため、きわめて遅いという問題がある。さらに、特徴量の次元数が大きいため、メモリの消費量が大きくなるという問題もある。
本実施の形態は、上記の問題に鑑みて、特徴量が二値であるときに、特徴量の非線形変換を高速に行う特徴量変換装置を提供することを目的とする。
本実施の形態の他の目的は、特徴ベクトルが二値でない場合にも、これを二値に変換する特徴量変換装置を提供することである。
本実施の形態の第一の態様の特徴量変換装置は、入力された二値の特徴ベクトルの要素をそれぞれ異なる配列に再配列した複数の再配列ビット列を生成するビット再配列部と、前記複数の再配列ビット列の各々と入力された前記特徴ベクトルとの論理演算をそれぞれ行って、複数の論理演算ビット列を生成する論理演算部と、生成された複数の前記論理演算ビット列を統合して、非線形変換特徴ベクトルを生成する特徴統合部とを備えた構成を有している。この構成により、入力された特徴ベクトルの共起要素を、入力された特徴ベクトルの再配列と論理演算によって算出するので、共起要素の演算を高速にできる。
前記特徴統合部は、さらに、入力された前記特徴ベクトルの要素も生成された複数の前記論理演算ビット列とともに統合してよい。この構成によれば、もとの特徴ベクトルの要素も利用することで、演算量を増大させることなくより記述能力の高い非線形変換特徴ベクトルを得ることができる。
前記論理演算部は、前記再配列ビット列と、入力された前記特徴ベクトルとの排他的論理和を計算してよい。排他的論理和は、調和平均と等価であり、「+1」と「−1」の出現確率も同じであるので、この構成によれば、FIND相当の高い特徴記述能力をもつ共起要素を算出できる。
前記ビット再配列部は、入力された前記特徴ベクトルの要素に対して、キャリーなしローテートシフトを行うことで前記再配列ビット列を生成してよい。この構成によれば、特徴記述能力の高い共起要素を効率よく算出できる。
前記特徴量変換装置は、入力された前記特徴ベクトルがd次元であるときに、d/2個の前記ビット再配列部を備えていてよい。この構成によれば、各ビット再配列部が1ビットずつずらしたキャリーなしローテートシフトを行うことで、複数のビット再配列部によって、入力された特徴ベクトルの要素のすべての組み合わせを生成できる。
前記ビット再配列部は、入力された前記特徴ベクトルの要素に対して、ランダムな再配列を行ってよい。この構成によっても、特徴記述能力の高い共起要素を算出できる。
前記特徴量変換装置は、入力された実数の特徴ベクトルを二値化して前記二値の特徴ベクトルを生成する複数の二値化部と、前記複数の前記二値化部の各々に対応する複数の共起要素生成部とを備え、前記複数の共起要素生成部の各々は、前記複数のビット再配列部と前記複数の論理演算部とを備え、前記複数の共起要素生成部の各々には、対応する前記二値化部から前記二値の特徴ベクトルが入力され、前記特徴統合部は、複数の前記共起要素生成部の複数の前記論理演算部の各々によって生成された前記論理演算ビット列のすべてを統合して、前記非線形変換ベクトルを生成してよい。この構成によれば、特徴ベクトルの要素が実数である場合にも、特徴記述能力の高い二値の特徴ベクトルを高速に得ることができる。
前記二値の特徴ベクトルはHOG特徴量を二値化して得られた特徴ベクトルであってよい。
本実施の形態の第二の態様の特徴量変換装置は、入力された二値の特徴ベクトルの要素を再配列して再配列ビット列を生成するビット再配列部と、前記再配列ビット列と入力された前記特徴ベクトルとの論理演算を行って、論理演算ビット列を生成する論理演算部と、前記特徴ベクトルの要素と生成された前記論理演算ビット列を統合して、非線形変換特徴ベクトルを生成する特徴統合部とを備えた構成を有している。この構成によっても、入力された特徴ベクトルの共起要素を、入力された特徴ベクトルの再配列と論理演算によって算出するので、共起要素の演算を高速にできる。
本実施の形態の第三の態様の特徴量変換装置は、入力された二値の特徴ベクトルの要素をそれぞれ異なる配列に再配列した再配列ビット列を生成する複数のビット再配列部と、前記複数のビット再配列部にて生成されたそれぞれの前記再配列ビット列どうしの論理演算を行って、論理演算ビット列を生成する論理演算部と、前記特徴ベクトルの要素と生成された複数の前記論理演算ビット列を統合して、非線形変換特徴ベクトルを生成する特徴統合部とを備えた構成を有している。この構成によっても、入力された特徴ベクトルの共起要素を、入力された特徴ベクトルの再配列と論理演算によって算出するので、共起要素の演算を高速にできる。
本実施の形態の第四の態様の特徴量変換装置は、入力された二値の特徴ベクトルの要素をそれぞれ異なる配列に再配列した再配列ビット列を生成する複数のビット再配列部と、前記複数のビット再配列部にて生成されたそれぞれの前記再配列ビット列どうしの論理演算を行って、それぞれ論理演算ビット列を生成する複数の論理演算部と、生成された複数の前記論理演算ビット列を統合して、非線形変換特徴ベクトルを生成する特徴統合部とを備えた構成を有している。この構成によっても、入力された特徴ベクトルの共起要素を、入力された特徴ベクトルの再配列と論理演算によって算出するので、共起要素の演算を高速にできる。
本実施の形態の学習装置は、上記の特徴量変換装置と、前記特徴量変換装置にて生成された前記非線形変換特徴ベクトルを用いて学習を行う学習部とを備えた構成を有している。この構成によっても、入力された特徴ベクトルの共起要素を、入力された特徴ベクトルの再配列と論理演算によって算出するので、共起要素の演算を高速にできる。
本実施の形態の認識装置は、上記の特徴量変換装置と、前記特徴量変換装置にて生成された前記非線形変換特徴ベクトルを用いて認識を行う認識部とを備えた構成を有している。この構成によっても、入力された特徴ベクトルの共起要素を、入力された特徴ベクトルの再配列と論理演算によって算出するので、共起要素の演算を高速にできる。
上記の認識装置において、前記認識部は、前記認識における重みベクトルと前記非線形変換特徴ベクトルのとの内積計算において、分布の広い順又はエントロピーの値が高い順に計算をして、前記内積が認識のための所定の閾値より大きくなる、又は小さくなると判断できる時点で、前記内積の計算を打ち切ってよい。この構成により、認識処理を高速化できる。
本実施の形態の特徴量変換プログラムは、コンピュータを、入力された二値の特徴ベクトルの要素をそれぞれ異なる配列に再配列してそれぞれ再配列ビット列を生成する複数のビット再配列部、前記複数の再配列ビット列の各々と入力された前記特徴ベクトルとの論理演算をそれぞれ行って、それぞれ論理演算ビット列を生成する複数の論理演算部、及び生成された複数の前記論理演算ビット列を統合して、非線形変換特徴ベクトルを生成する特徴統合部として機能させる。この構成によっても、入力された特徴ベクトルの共起要素を、入力された特徴ベクトルの再配列と論理演算によって算出するので、共起要素の演算を高速にできる。
2−3.効果
本実施の形態によれば、入力された特徴ベクトルの共起要素を、入力された特徴ベクトルの再配列と論理演算によって算出するので、共起要素の演算を高速にできる。
2−4.第2の実施の形態の第1の例
第1の例の特徴量変換装置は、第1の実施の形態で説明したように、ハイブリッド・ピラミッド法によってHOG特徴量を抽出して、抽出したHOG特徴量を二値化する。第1の例の特徴量変換装置は、二値のHOG特徴量である特徴ベクトルが与えられたときに、この特徴ベクトルに対して非線形変換を行うことで、識別力の向上した特徴ベクトル(以下、「非線形変換特徴ベクトル」という。)を得る。例えば、8ピクセル×8ピクセルを1単位とした領域をセルと定義したとき、HOG特徴量は、2×2のセルで構成されるブロックごとに32次元のベクトルとして得られる。また、本例では、このHOG特徴量が二値化されたベクトルとして得られているものとする。本例の特徴量変換装置の構成を説明する前に、二値の特徴ベクトルに対して非線形変換を行ってFIND相当の共起要素を有する非線形変換特徴ベクトルを求める原理について説明する。
図10は、二値の特徴ベクトルの要素の例を示す図である。特徴ベクトルの各要素は、「+1」か「−1」の値をとる。図10において、縦軸は各要素の値を示しており、横軸は要素数(次元数)を示している。図10の例では、要素数は32である。
FIND特徴量を求める場合には、これらの要素を用いて、式(3)による調和平均を計算する。
ここで、a、bは各要素の値(「+1」か「−1」)である。a、bは、「+1」又は「−1」のいずれかであるので、その組み合わせは4通りに限られる。よって、特徴ベクトルの要素が「+1」か「−1」の二値である場合には、この調和平均はXORと等価になる。
図11は、XORと調和平均との関係を示す表である。図11に示すように、XORと調和平均との関係は、(−1/2)×XOR=調和平均という関係にある。よって、「+1」及び「−1」に二値化された特徴量については、それらのすべての組み合わせの調和平均を求める代わりに、それらのすべての組み合わせのXORを求めても、FIND特徴量と同等に識別力が向上した特徴量に変換できる。そこで、本例の特徴量変換装置は、「+1」及び「−1」の値をとる二値の特徴ベクトルに対して、それらの組み合わせのXORをとることで、識別力を向上させる。
図12は、「1」及び「−1」の値をとる二値の特徴ベクトルのすべて要素の組み合わせのXORを示す表である。図12では、図の簡略化のために、二値の特徴ベクトルの次元数が8である場合を示している。1行目の数列及び1行目の数列は特徴ベクトルである。図12の例では、特徴ベクトルは(+1,+1,−1,−1,+1,+1,−1,−1)である。
式(3)から明らかなように、aとbとはこれを入れ替えても調和平均は変わらないため、図12の表の太線で囲った部分が、この特徴ベクトルの要素のすべての組み合わせのXORのうちの重複部分を除いた部分となる。よって、本例では、この部分を共起要素として採用する。なお、同じ要素同士によるXORは必ず「−1」となるので、本例ではこれらを共起要素として採用しない。
本例のもとの特徴ベクトルの要素と、図12の太線で囲った部分の要素(共起要素)とを並べるとFIND相当の特徴量が得られる。このとき、もとの特徴ベクトルにキャリーなしローテートシフトを行って各要素同士のXORを計算することで、高速に共起要素を計算できる。
図13は、キャリーなしローテートシフトによる共起要素の計算を示す図である。もとの特徴ベクトルのビット列100を右に1ビットシフトして、最右のビットは1ビット目(最左)に持ってくることでキャリーなしローテートシフトを行って、再配列ビット列101を用意する。ビット列100と再配列ビット列101のXORをとると、論理演算ビット列102が得られる。この論理演算ビット列102が共起要素となる。
図14に再び二値の特徴ベクトルのすべて要素の組み合わせのXORを示す。図13の論理演算ビット列102は、図14において太枠で囲った部分に相当する。要素E81は、要素E18と同じである。
図15は、キャリーなしローテートシフトによる共起要素の計算を示す図である。もとの特徴ベクトルのビット列100を右に2ビットシフトして、最右の2ビットは1ビット目及び2ビット目にシフトすることでキャリーなしローテートシフトを行って、再配列ビット列201を用意する。ビット列100と再配列ビット列201のXORをとると、論理演算ビット列202が得られる。この論理演算ビット列202が共起要素となる。
図16に二値の特徴ベクトルのすべて要素の組み合わせのXORを示す。図15の論理演算ビット列202は、図16において太枠で囲った部分に相当する。要素E71、E82は、要素E17、E28とそれぞれ同じである。
図17は、キャリーなしローテートシフトによる共起要素の計算を示す図である。もとの特徴ベクトルのビット列100を右に3ビットシフトして、最右の3ビットは1ビット目2ビット目、及び3ビット目にシフトすることでキャリーなしローテートシフトを行って、再配列ビット列301を用意する。ビット列100と再配列ビット列301のXORをとると、論理演算ビット列302が得られる。この論理演算ビット列302が共起要素となる。
図18に二値の特徴ベクトルのすべて要素の組み合わせのXORを示す。図17の論理演算ビット列302は、図18において太枠で囲った部分に相当する。要素E61、E72、E83は、要素E16、E27、E38とそれぞれ同じである。
図19は、キャリーなしローテートシフトによる共起要素の計算を示す図である。もとの特徴ベクトルのビット列100を右に4ビットシフトして、右側の4ビットは1ビット目、2ビット目、3ビット目、4ビット目にシフトすることでキャリーなしローテートシフトを行って、再配列ビット列401を用意する。ビット列100と再配列ビット列401のXORをとると、論理演算ビット列402が得られる。この論理演算ビット列402が共起要素となる。
図20に二値の特徴ベクトルのすべて要素の組み合わせのXORを示す。図19の論理演算ビット列402は、図20において太枠で囲った部分に相当する。要素E51、E62、E73、E81は、それぞれ要素E15、E26、E37、E48と同じであり、いずれか一方は不要であるが、計算の都合上、これをこのまま用いることとする。
図13、図15、図17、図19の計算を行うことで、図12において太線で囲った部分の要素がすべて計算できることになる。すなわち、ビット数が8である特徴ベクトルの共起要素の計算は、4回のキャリーなしローテートシフト及びXORの計算によって得ることができる。同様に、二値の特徴ベクトルのビット数(次元数)が32である場合には、16回のキャリーなしローテートシフト及びXORの計算によって得ることができ、一般的には、二値の特徴ベクトルのビット数(次元数)がdである場合には、d/2回のキャリーなしローテートシフト及びXORの計算によって得ることができる。
特徴量変換装置は、上記のようにして求めた共起要素に、もとの特徴ベクトルの要素を加えて、非線形変換特徴ベクトルを得る。よって、32次元の二値の特徴ベクトルを変換すると、得られる非線形変換特徴ベクトルの次元数は、32×16+32=544次元となる。以下では、上記のような特徴ベクトルの変換を実現する特徴量変換装置の構成を説明する。
図21は、本例の特徴量変換装置の構成を示すブロック図である。特徴量変換装置101は、N個のビット再配列器111〜11Nと、ビット再配列器と同数(N個)の論理演算器121〜12Nと、特徴量統合器130を備えている。これらのビット再配列器111〜11N、論理演算器121〜12N、及び特徴量統合器130の一部又は全部は、コンピュータが特徴量変換プログラムを実行することによって実現されてよく、又はハードウェアによって実現されてもよい。
本例では、特徴量変換装置101に、変換すべき特徴量として、二値化された特徴ベクトルが入力される。特徴ベクトルは、N個のビット再配列器111〜11N及びN個の論理演算器121〜12Nにそれぞれ入力される。N個の論理演算器121〜12Nにはさらに対応するビット配列器111〜11Nの出力が入力される。
ビット再配列器111〜11Nは、入力された二値の特徴ベクトルに対して、キャリーなしローテートシフトによる再配列を行って、再配列ビット列を生成する。具体的には、ビット再配列器111は、特徴ベクトルを右に1ビットのキャリーなしローテートシフトを行い、ビット再配列器112は、特徴ベクトルを右に2ビットのキャリーなしローテートシフトを行い、ビット再配列器113は特徴ベクトルを右に3ビットのキャリーなしローテートシフトを行い、ビット再配列器11Nは特徴ベクトルを右にNビットのキャリーなしローテートシフトを行う。
本例では、入力される二値の特徴ベクトルをd次元とすると、N=d/2とする。これにより、特徴ベクトルのすべての要素のすべての組み合わせについてXORを計算することができる。
論理演算器121〜12Nは、それぞれ対応するビット再配列器111〜11Nから出力された再配列ビット列ともとの特徴ベクトルのビット列とのXORを計算する。具体的には、論理演算器121は、ビット再配列器111から出力された再配列ビット列ともとの特徴ベクトルのビット列とのXORを計算し(図13参照)、論理演算器122は、ビット再配列器112から出力された再配列ビット列ともとの特徴ベクトルのビット列とのXORを計算し(図15参照)、論理演算器123は、ビット再配列器113から出力された再配列ビット列ともとの特徴ベクトルのビット列とのXORを計算し(図17参照)、論理演算器12Nは、ビット再配列器11Nから出力された再配列ビット列ともとの特徴ベクトルのビット列とのXORを計算する。
特徴統合器113は、もとの特徴ベクトルと、論理演算器121〜12Nからの出力(論理演算ビット列)を並べて、それらを要素とする非線形変換特徴ベクトルを生成する。上述のように、入力される特徴ベクトルが32次元であるとき、特徴統合器113で生成される非線形変換特徴ベクトルは544次元となる。
以上のように、本例の特徴量変換装置101によれば、二値化された特徴ベクトルの要素にそれらの共起要素(論理演算ビット列の要素)を付け足して特徴ベクトルの次元を増加させるので、特徴ベクトルの識別力を向上できる。
また、本例の特徴量変換装置101は、もとの特徴ベクトルの要素が「+1」及び「−1」であるのでFIND特徴量のようにそれらの調和平均を共起要素とすることと各要素のXORを共起要素とすることが等価であることに着目して、各要素のすべての組み合わせのXORを計算して、それらを共起要素とするので、共起要素の計算を高速に行うことができる。
さらに、本例の特徴量変換装置101は、各要素のXORを計算するために、もとの特徴ベクトルのビット列と、それに対してキャリーなしローテートシフトを行ったビット列とのXORを計算するので、計算機のレジスタの幅がもとの特徴ベクトルのビット数(XORの計算の数)以下である場合には、このXORの計算を同時に行うことができ、従って共起要素の計算を高速に行うことができる。
2−5.第2の実施の形態の第2の例
次に、第2の例として、HOG特徴量が二値ベクトルではなく、実数ベクトルとして得られている場合について、それを識別力の高い二値ベクトルに変換する特徴量変換装置について説明する。
図22は、画像の1ブロック分のHOG特徴量とそれを二値化した結果を示す図である。本例のHOG特徴量は、32次元の特徴ベクトルとして得られる。図22の上段は、この特徴ベクトルの各要素を示しており、縦軸は各要素の大きさ、横軸は要素数を示している。
各要素は、二値化されて、下段の二値化された特徴ベクトルが得られる。具体的には、各要素のレンジの所定の位置に二値化のための閾値を設け、要素の値が設定された閾値以上である場合は、その要素を「+1」とし、要素の値が設定された閾値より小さい場合は、その要素を「−1」とする。なお、各要素のレンジはそれぞれ異なるため、要素ごとに異なる閾値(32種類)が設定される。特徴ベクトルの32個の実数の要素をそれぞれ二値化することで、32個の要素を持つ二値化された特徴ベクトル(32ビット)に変換できる。
ここで、多重閾値を用いることによって、特徴ベクトルの特徴記述能力を強化(情報量を増大)させることができる。すなわち、k種類の異なる閾値を設定して、各閾値について、図22に示した二値化を行うことで二値化された特徴ベクトルの次元数を増やすことが可能である。
図23は、多重閾値による特徴記述能力の強化を説明する図である。この例では、4種類の閾値を用いて二値化を行っている。32次元の実数ベクトルの各要素が、そのレンジの20%位置を閾値として二値化されて、32ビット分の要素が生成される。同様に、32次元の実数ベクトルの各要素が、そのレンジの40%位置、60%位置、80%位置をそれぞれ閾値として二値化されて、各々32ビット分の要素が再生される。これらの要素を統合すると、二値化された128次元の特徴ベクトル(128ビット)が得られる。
特徴ベクトルが実数ベクトルとして与えられた場合に、図23に示すように多重閾値による二値化を行って特徴ベクトルの特徴記述能力を向上させた上で、第1の例として説明した特徴量変換装置10によって非線形変換を行い、さらに情報量を増加させることができる。
ここで、HOG特徴量の二値化を高速化する工夫について説明する。一般に、HOG特徴量はブロック単位で長さを1に正規化しなければならない。この正規化によって、明るさに対して頑健(ロバスト)になるからである。
正規化前の32次元の実数のHOG特徴量を
とおく。また、正規化後の32次元の実数のHOG特徴量を
とおく。このとき、
である。
二値化後の32次元のHOG特徴量を
とする。このとき、
である。
この二値化は、平方根の演算、及び割り算が一度ずつ発生するため、非常に遅い。そこで、HOG特徴量が非負であることに着目し、上記の不等式
の両辺を二乗し、左辺の分母を右辺に移項して、下式を得る。
このように変形することで、平方根の演算、及び割り算を行うことなく、下式によって実数のHOG特徴量を二値化することができる。
ここで、例えば、レンジの20%位置を閾値として二値化した結果「−1」(閾値より小さい)と判断された要素は、レンジの40%位置、60%位置、80%位置を閾値として二値化した場合にも当然に「−1」となる。この意味で、多重閾値による二値化によって得られた128ビットの二値化ベクトルは冗長な要素を含んでいる。従って、この128ビットの二値化ベクトルをそのまま第1の例の特徴量変換装置10に適用して共起要素を求めることは効率的でない。そこで、本例では、このような冗長性を軽減してより効率よく共起要素を求めることができる特徴量変換装置を提供する。
図24は、本例の特徴量変換を説明する図である。本例の特徴量変換装置は、実数ベクトルとして得られている特徴ベクトルを、k種類の異なる閾値で二値化する。図24の例では、レンジの20%位置、40%位置、60%位置、80%位置の4種類の閾値でもって、32次元の実数ベクトルをそれぞれ二値化することで、それぞれ32個の要素を持つビット列を得る。ここまでは、図23の例と同様である。
本例の特徴量変換装置では、各閾値によって得られたビット列を統合する前に、それらのビット列を用いて、それぞれ共起要素を求める。これによって、図24に示すように、各32ビットのビット列から544ビットのビット列を得ることができる。最終的には、これらの4つのビット列を統合して、2176ビットの二値化された非線形変換特徴ベクトルが得られる。
図25は、本例の特徴量変換装置の構成を示すブロック図である。特徴量変換装置102は、N個の二値化器211〜21Nと、二値化器と同数(N個)の共起要素生成器221〜22Nと、特徴量統合器23を備えている。これらの二値化器211〜21N、共起要素生成器221〜22N、及び特徴量統合器23の一部又は全部は、コンピュータが特徴量変換プログラムを実行することによって実現されてよく、又はハードウェアによって実現されてもよい。
本例では、特徴量変換装置102に実数の特徴ベクトルが入力される。特徴ベクトルは、N個の二値化器211〜21Nにそれぞれ入力される。二値化器211〜21Nは、それぞれ異なる閾値で実数の特徴ベクトルを二値化する。二値化された特徴ベクトルは、それぞれ対応する共起要素生成器221〜22Nに入力される。
共起要素生成器221〜22Nは、それぞれ、第1の例で説明した特徴量変換装置101と同じ構成を有している。すなわち、各共起要素生成器221〜22Nは、複数のビット再配列器111〜11Nと、複数の論理演算器121〜12Nと、特徴統合器13を備え、キャリーなしローテートシフト及びXOR演算によって共起要素を算出し、それらと入力されたビット列とを統合する。
各共起要素生成器221〜22Nに32ビットのビット列が入力されると、各共起要素生成器221〜22Nからはそれぞれ544ビットのビット列が出力される。特徴統合器23は、共起要素生成器221〜22Nからの出力を並べて、それらを要素とする非線形変換特徴ベクトルを生成する。上述のように、入力される特徴ベクトルが32次元であるとき、特徴統合器213で生成される特徴ベクトルは2176次元(2176ビット)となる。
以上のように、本例の特徴量変換装置20によれば、特徴量が実数ベクトルとして得られた場合にも、それを二値化するとともにその二値化ベクトルの情報量を多くすることができる。
2−6.第2の実施の形態の変形例
第1の例の特徴量変換装置101及び第2の例の特徴量変換装置102は、多数の学習用データから認識モデルを決定する際に、学習用データとして入力される特徴ベクトルに対して上記の非線形変換を行って、非線形変換特徴ベクトルを取得する。この非線形変換特徴ベクトルが、学習装置によるSVM等による学習処理に用いられて、認識モデルが確定する。すなわち、特徴量変換装置101、102は、学習装置に用いられ得る。また、特徴量変換装置101、102は、認識モデルが確定した後に、認識を行うべきデータが学習用データと同様の形式の特徴ベクトルとして入力されたときにも、その特徴ベクトルに対して上記の非線形変換を行って非線形変換特徴ベクトルを取得する。この非線形変換特徴ベクトルが、認識装置による線形識別等に用いられて、認識結果が得られる。すなわち、特徴量変換装置101、102は、認識装置に用いられ得る。
なお、論理演算器121〜12Nでは、必ずしも論理演算としてXORを計算しなくてもよく、例えばANDやORを計算してもよい。但し、上述のように、XORはFIND特徴量を求める際の調和平均と等価であり、かつ、図11の表から明らかなように、特徴ベクトルが任意である場合には、XORの値として「+1」と「−1」とが等確率で出現するため、共起要素のエントロピーが高くなり(情報量が多くなり)、非線形変換特徴ベクトルの記述能力が向上するので、論理演算器121〜12NがXORを計算することは有利である。
また、特徴量変換装置101及び共起要素生成器221〜22Nは、特徴ベクトルの次元数dに対して、d/2個のビット再配列器111〜11Nを備えていたが、ビット再配列器の個数は、これより少なくてもよく(N=1でもよく)、これより多くてもよい。また、論理演算器121〜12Nの個数も、d/2より少なくてもよく(N=1でもよく)、d/2より多くてもよい。
また、ビット再配列器111〜11Nは、それぞれもとの特徴ベクトルのビット列に対してキャリーなしローテートシフトをすることで新たなビット列を生成したが、各再配列器111〜11Nは、例えばもとの特徴ベクトルのビット列をランダムに並び替えることで新たなビット列を生成してもよい。但し、シフトなしキャリーローテートは、最小のビット数ですべての組み合わせを網羅できるとともに、ロジックがシンプルで処理速度が速いという点で有利である。
また、論理演算器121〜12Nは、もとの特徴ベクトルのビット列とビット再配列器で再配列されたビット列との論理演算を行ったが、一部又はすべての論理演算器が、ビット再配列器で再配列されたビット列どうしの論理演算を行ってもよい。このとき、ビット再配列器で得られるビット列の次元数ともとの特徴ベクトルの次元数とが異なっていてもよい。また、二値化器211〜21Nの入力と出力とで次元が異なっていてもよい。さらに、特徴統合器13は、もとの特徴ベクトルの要素も用いて非線形変換特徴ベクトルを生成したが、もとの特徴ベクトルは用いなくてもよい。
また、上記の第2の例では、各共起要素生成器221〜22Nが第1の例の特徴量変換装置101と同様の構成を有し、すなわち複数のビット再配列器111〜11N、複数の論理演算器121〜12N、及び特徴統合器13を備えていたが、各共起要素生成器221〜22Nが、特徴統合器13を備えずに、複数の論理演算器121〜12Nから出力される複数の論理演算ビット列を直接特徴統合器23に出力して、特徴統合器23がこられを統合して非線形変換特徴ベクトルを生成してもよい。
また、上記の第1及び第2の例では、画像の識別を行う例を説明したが、識別の対象は音声、文章等の他のデータであってもよい。また、認識処理は線形識別ではない他の認識処理であってもよい。
また、上記の第1及び第2の例では、複数のビット再配列器111〜11Nがそれぞれ再配列ビット列を生成することで複数の再配列ビット列を生成し、複数の論理演算器121〜12Nがそれぞれ論理演算を行うことで、複数の再配列ビット列の各々ともとの特徴ベクトルのビット列とのXORを計算した。これらの複数のビット再配列器111〜11N、複数の論理演算器121〜12Nは、それぞれ本実施の形態のビット再配列部及び論理演算部に相当する。本実施の形態のビット再配列部及び論理演算部は、上記の例に限られず、例えば、ソフトウェアの処理によって複数の再配列ビットの生成及び複数の論理演算を行ってもよい。
2−7.実施例
次に、本実施の形態の特徴量変換装置を用いた実施例を説明する。図26は、比較例のプログラムコードであり、図27は実施例のプログラムコードである。比較例は、32次元の実数の要素を持つ特徴量をFIND特徴量に変換するプログラムである。実施例は、32次元の二値化された要素を持つ特徴量に対して、第1の例の特徴量変換装置10によって非線形変換を行うプログラムである。以下、説明の便宜を図るため、kは二値化の閾値の段階数である。
比較例及び実施例のプログラムによって、同一の擬似データを変換した。その結果、比較例では、1ブロックあたりの計算時間は、7212.71ナノ秒となった。これに対して、実施例で、同一の擬似データを変換した場合の1ブロックあたりの計算時間は、k=1のときに22.04ナノ秒(比較例の327.32倍の速度)、k=2のときに33.20ナノ秒(比較例の217.22倍の速度)、k=3のときに42.14ナノ秒(比較例の171.17倍の速度)、k=4のときに53.76ナノ秒(比較例の134.16倍の速度)となった。このように、実施例の非線形変換は、比較例と比較して十分に高速であった。
図28は、学習によって認識モデルを生成した後に認識装置にて認識を行ったときの誤検出と検出率との関係を示すグラフである。横軸は誤検出を示し、縦軸は検出率を示している。認識装置においては、誤検出が小さく、かつ検出率が高いことが望ましい。すなわち、図28のグラフでは、左上の角に近いグラフほど認識性能が高い。
図28において、破線は、Dalal氏のオリジナルの実装によるHOG特徴量をそのまま用いて学習及び認識を行った場合のグラフであり、一点鎖線は、Cパラメータを最適にチューニングして得られたFIND特徴量を用いて学習及び認識を行った場合のグラフであり、実線は、実施例を示しており、具体的には、k=4として本実施の形態の第2の例によって得られた非線形変換特徴ベクトルを用いて学習及び認識を行った場合のグラフである。
図28から明らかなように、FIND特徴量及び実施例は、HOG特徴量をそのまま用いた場合と比較して、認識性能が高い。実施例は、二値化をしているのでFIND特徴量よりも認識性能が劣るが、その劣化は僅かである。以上の結果から、本実施の形態によれば、FIND特徴量と比較して、処理速度は格段に向上する一方で、認識性能はほとんど劣らないことが確認された。
本実施の形態の更なる例を説明する。本例は、実数の特徴量をk種類の閾値で二値化した場合における識別器での認識をカスケード処理によって高速化する。実数の特徴量Xをk種類の閾値で二値化して得られるベクトルを、
とおく。識別などの目的の場合には、下式のwTbを計算し、閾値Thと比較するという操作が行われる。ここで、wは識別のための重みベクトルである。
例えば、k=4で、b1は20%、b2は40%、b3は60%、b4は80%の位置で二値化されているものとする。このとき、明らかにb2及びb3は、b1及びb4よりもエントロピーが高くなる。従って、w2 Tb2及びw3 Tb3は、w1 Tb1及びw4 Tb4よりも広い値の分布を持つことになる。
これに着目し、本例では、w2 Tb2、w3 Tb3、w1 Tb1、w4 Tb4という順序で計算し、途中でwTbが所定の閾値Thよりも確実に大きくなる、もしくは小さくなると判断できる場合は、その時点で処理を打ち切る。これにより処理が高速化できる。すなわち、カスケードの順序は、wi Tbiの分布の広い順、もしくはエントロピーの値が高い順に並べる。
3.第3の実施の形態
3−1.背景
特徴ベクトルを、各要素が−1及び1の二値のみを取るd次元の二値ベクトルに変換すれば、SVM(サポートベクトルマシン)による識別処理や、k−meansクラスタリングなど、さまざまな処理に、バイナリコードを適用できる。しかしながら、これらのケースではハミング距離による高速距離計算の恩恵を受けることができないことがある。すなわち、アルゴリズムによっては、バイナリコード変換による高速距離計算の恩恵を受けられないことがある。
バイナリコード変換による高速距離計算の恩恵を受けられない例として、以下では、識別装置(Classifier)による認識(識別)処理およびk−meansクラスタリングを説明する。まず、識別装置による認識処理については、例えば、二値ベクトルx∈{−1,1}dを2クラスに識別する問題に対して、線形SVM(線形サポートベクトルマシン)を適用することを考える。線形SVMでは以下の式(4)を評価する。
識別装置は、評価関数f(x)が正ならば入力ベクトルxはクラスAに属し、評価関数(x)が負ならば入力ベクトルxはクラスBに属するものとして識別する。 wは、重みパラメータであって、w∈Rdである。bは、バイアスパラメータであって、b∈R1である。パラメータw及びbは、学習用に用意した特徴量を用いて学習処理により自動的に決定される辞書である。
ここで、学習用に用意した特徴量が二値ベクトルであっても、w∈Rdは二値にならず、実数値になってしまう。f(x)の計算にはwTxが含まれているが、xが二値である一方でwが実数値のベクトルであるため、wTxの計算には、浮動小数点演算が必要になってしまう。このように、SVMを適用する識別器による認識処理では、特徴ベクトルを二値ベクトルとすることによる計算高速化の恩恵を受けることができない。
次に、二値ベクトルに対して、k−meansクラスタリングを適用する場合、すなわち、d次元の二値ベクトルがN個与えられたとき、互いに距離が近い二値ベクトルをまとめたk個のクラスタを求める問題を考える。k−meansとは、次の手順によりk個のクラスタと代表ベクトルを算出するアルゴリズムである。
ステップ1:N個の特徴量からk個をランダムに選出し、これをクラスタの代表ベクトルとする。
ステップ2:入力として与えられたN個の特徴量それぞれについて、最も距離が近い代表ベクトルを求める。
ステップ3:各代表ベクトルに所属する特徴量の平均を計算し、これを新しい代表ベクトルとする。
ステップ4:ステップ2、ステップ3を収束するまで繰り返す。
k−meansクラスタリングにおいて問題となるのは、ステップ3において、新しい代表ベクトルが二値ベクトルの平均で定義される点である。入力として与えられたデータが二値ベクトルであっても、平均の演算により、代表ベクトルは実数のベクトルになる。そのため、ステップ2における距離計算では、二値ベクトルと実数ベクトルとの間の距離を求めなければならなくなる。つまり、浮動小数点演算が必要になってしまう。このように、k−meansクラスタリングにおいても、特徴ベクトルを二値ベクトルとすることによる計算高速化の恩恵を受けることができない。
上記のように、識別装置(Classifier)による認識処理やk−meansクラスタリングでは、特徴ベクトルを二値ベクトルとすることによる計算高速化の恩恵を受けることができない。その理由は、いずれもd次元の二値ベクトルp∈{−1,1}dと、d次元の実数ベクトルq∈Rdとの内積演算が必要であるという点にある。なお、k−meansクラスタリングで必要なのは、dビットの二値ベクトルp∈{−1,1}dと、d次元の実数ベクトルq∈Rdとの間の「距離」であるが、これも結局のところ、pTqという内積の演算に帰着される。なぜなら、pとqとの間のユークリッド距離の二乗は、下式で表現されるからである。
よって、識別装置による認識処理においてもk−meansクラスタリングにおいても、二値ベクトルとd次元の実数ベクトルとの内積の演算を高速化することこそが、問題の解決につながる。
3−2.概要
そこで、本実施の形態の関連性判定装置は、特徴ベクトルがd次元の二値ベクトルp∈{−1,1}dである場合において、そのような特徴ベクトルとd次元の実数ベクトルq∈Rdとの間の内積(pTqもしくはqTp)の演算を高速に行うために、以下の構成を有する。
本実施の形態の第一の態様の関連性判定装置は、二値化された特徴ベクトルを取得する特徴ベクトル取得部と、実数ベクトルを二値または三値の離散値のみから構成された要素を持つ複数の基底ベクトルの線形和に分解することで得られた前記複数の基底ベクトルを取得する基底ベクトル取得部と、前記特徴ベクトルと前記複数の基底ベクトルの各々との内積計算を順次行うことで、前記実数ベクトルと前記特徴ベクトルとの関連性を判定するベクトル演算部とを備えた構成を有している。
前記特徴ベクトルと前記基底ベクトルとの内積計算は、−1及び1のみを要素としてもつ第1の二値ベクトルと−1及び1のみを要素としてもつ複数の第2の二値ベクトルとの内積計算を含んでいてよい。
前記第1の二値ベクトルは、前記特徴ベクトルであってよく、前記特徴ベクトルの各要素を所定の係数で除したベクトルであってよく、その各要素を線形変換することで前記特徴ベクトルが得られるベクトルであってよい。
前記第2の二値ベクトルは、前記基底ベクトルであってよく、前記基底ベクトルの各要素を所定の係数で除したベクトルであってよく、前記第2の二値ベクトルは、その各要素を線形変換することで前記基底ベクトルが得られるベクトルであってよい。
前記特徴ベクトルと前記基底ベクトルとの内積計算は、−1及び1のみを要素としてもつ二値ベクトルと−1、0及び1のみを要素としてもつ複数の三値ベクトルとの内積計算を含んでいてよい。
前記二値ベクトルは、前記特徴ベクトルであってよく、前記特徴ベクトルの各要素を所定の係数で除したベクトルであってもよく、その各要素を線形変換することで前記特徴ベクトルが得られるベクトルであってもよい。
前記複数の三値ベクトルは、前記複数の基底ベクトルであってよく、前記複数の基底ベクトルの各要素を所定の係数で除したベクトルであってもよく、その各要素を線形変換することで前記複数の基底ベクトルが得られるベクトルであってもよい。
前記ベクトル演算部は、前記第1の二値ベクトルと前記第2の二値ベクトルとの排他的論理和をとることで、前記第1の二値ベクトルと前記第2の二値ベクトルとの内積を計算してよい。
前記ベクトル演算部は、前記二値ベクトルと前記三値ベクトルとの内積計算において、前記三値ベクトルの0の要素を−1又は1の任意のいずれかに置換して0置換ベクトルを生成し、前記三値ベクトルの0の要素を−1に置換し、かつ0以外の要素を1に置換してフィルタベクトルを生成し、前記二値ベクトルと前記0置換ベクトルとの排他的論理和と前記フィルタベクトルとの論理積をとることで、前記二値ベクトルと前記三値ベクトルとの間の非0で異なる要素の要素数Dfilterd_hammingを求め、前記要素数Dfilterd_hamming及び非0の要素数を前記二値ベクトルの要素数から引くことで、前記二値ベクトルと前記三値ベクトルとの間の非0で同一の要素の要素数を求め、前記二値ベクトルと前記三値ベクトルとの間の非0で同一の要素の要素数から前記二値ベクトルと前記三値ベクトルとの間の非0で異なる要素の要素数を引くことで、前記二値ベクトルと前記三値ベクトルとの内積を求めてよい。
前記複数の基底ベクトルは、前記実数ベクトルと、前記複数の基底ベクトルの線形和との差分を分解誤差として、前記分解誤差が最小になるように、求められてよい。
記複数の基底ベクトルは、前記実数ベクトルと前記特徴ベクトルとの内積と、前記複数の基底ベクトルの線形和と前記特徴ベクトルとの内積との差分を分解誤差として、前記分解誤差が最小になるように、求められてよい。
前記複数の基底ベクトルは、前記複数の基底ベクトルの要素を固定して、前記分解誤差が最小になるように、前記複数の基底ベクトルに係る複数の係数を更新する第1の更新と、前記複数の係数を固定して、前記分解誤差が最小になるように前記基底ベクトルの要素を更新する第2の更新とを繰り返すことで、前記複数の係数とともに求められてよい。
前記複数の基底ベクトルは、前記分解誤差の減少量が所定の値以下になるまで前記第1の更新と前記第2の更新を繰り返すことで求められてよい。
前記複数の基底ベクトルは、前記複数の基底ベクトル及び前記複数の係数の初期値を変えて、複数とおりの前記複数の基底ベクトル及び前記複数の係数を求め、前記分解誤差が最小となる前記複数の基底ベクトル及び前記複数の係数を採用することで求められてよい。
前記複数の基底ベクトルに係る複数の係数は離散値であってよい。
前記複数の基底ベクトルは、前記実数ベクトルの要素の平均値を前記実数ベクトルの各要素から引いたオフセット実数ベクトルを前記基底ベクトルの線形和に分解することで求められてよい。
前記ベクトル演算部は、前記特徴ベクトルと前記基底ベクトルとの前記内積計算を実行する度に、前記内積計算の結果の合計と、前記実数ベクトルと前記特徴ベクトルとが関連している場合に前記積算値がとり得る範囲を求め、前記合計が前記とり得る範囲外である場合に、前記内積計算を打ち切って、前記特徴ベクトルと前記基底ベクトルとの内積と所定の閾値との大小関係を判定してよい。
前記ベクトル演算部は、前記特徴ベクトルと前記複数の基底ベクトルの各々との内積計算ごとに、当該基底ベクトルまでの前記内積計算の結果の合計が、最大側早期判定用閾値より大きい場合に、前記内積計算を打ち切って、前記実数ベクトルと前記特徴ベクトルとの内積が前記閾値より大きいと判定してよい。
前記ベクトル演算部は、前記特徴ベクトルと前記複数の基底ベクトルの各々との内積がとり得る最小値を学習によって求めて、前記閾値から前記内積計算を行なっていない前記基底ベクトルと前記特徴ベクトルとの内積がとり得る値の最小値の合計を引いて、前記最大側早期判定用閾値を求めてよい。
前記特徴ベクトルと前記複数の基底ベクトルの各々との内積がとり得る最小値は、前記特徴ベクトルと前記複数の基底ベクトルの各々との内積がとり得る値のうちの最小側の上位の所定の割合にある値であってよい。
前記ベクトル演算部は、前記実数ベクトルと前記特徴ベクトルとの内積が前記閾値より大きいと判定したときに、前記特徴ベクトルと前記基底ベクトルとは関連していないと判定してよい。
前記ベクトル演算部は、前記特徴ベクトルと前記複数の基底ベクトルの各々との内積計算ごとに、当該基底ベクトルまでの前記内積計算の結果の合計が、最小側早期判定用閾値より小さい場合に、前記内積計算を打ち切って、前記実数ベクトルと前記特徴ベクトルとの内積が前記閾値より小さいと判定してよい。
前記ベクトル演算部は、前記特徴ベクトルと前記複数の基底ベクトルの各々との内積がとり得る最大値を学習によって求めて、前記閾値から前記内積計算を行なっていない前記基底ベクトルと前記特徴ベクトルとの内積がとり得る値の最大値の合計を引いて、前記最小側早期判定用閾値を求めてよい。
前記特徴ベクトルと前記複数の基底ベクトルの各々との内積がとり得る最大値は、前記特徴ベクトルと前記複数の基底ベクトルの各々との内積がとり得る値のうちの最大側の上位の所定の割合にある値であってよい。
前記最小側早期判定用閾値は、前記実数ベクトルと前記特徴ベクトルとが関連している場合にとり得る前記内積計算の結果の合計の最小値であってよい。
前記ベクトル演算部は、前記実数ベクトルと前記特徴ベクトルとの内積が前記閾値より小さいと判定したときに、前記特徴ベクトルと前記基底ベクトルとは関連していないと判定してよい。
前記ベクトル演算部は、係数の絶対値が大きい前記基底ベクトルから順に前記内積計算を行ってよい。
記ベクトル演算部は、前記特徴ベクトルと、分解された前記実数ベクトルをそれぞれ複数の部分ベクトルに分解し、前記特徴ベクトルの分解ベクトルと分解された前記実数ベクトルの部分ベクトルとの内積が、前記閾値よりも大きくなるか否か、及び/又は前記閾値よりも小さくなるか否かを判断してよい。
前記特徴ベクトルは、HOG特徴量であり、前記実数ベクトルは、線形SVMの重みベクトルであり、前記ベクトル演算部は、前記関連性の判定として、線形SVMによって前記特徴ベクトルの識別を行なってよい。
前記特徴ベクトルは、k−meansクラスタリングによるクラスタリングの対象となるベクトルであり、前記実数ベクトルは、k−meansクラスタリングにおける代表ベクトルであり、前記ベクトル演算部は、前記関連性の判定として、前記特徴ベクトルと前記代表ベクトルとの間の距離の演算を含むクラスタリング処理を行なってよい。
前記特徴ベクトルは、k−means treeによる近似最近傍探索の対象となるベクトルであり、前記実数ベクトルは、k−分木のノードに登録されている代表ベクトルであり、前記ベクトル演算部は、前記関連性の判定として、前記特徴ベクトルと前記代表ベクトルとの間の距離の演算を含むクラスタリング処理を行なってよい。
前記特徴ベクトルは、画像の特徴量を表すベクトルであってよい。
本実施の形態の関連性判定プログラムは、コンピュータを、上記の関連性判定装置として機能させる構成を有している。
本実施の形態の関連性判定方法は、二値化された特徴ベクトルを取得する特徴ベクトル取得ステップと、実数ベクトルを二値または三値の離散値のみから構成された要素を持つ複数の基底ベクトルの線形和に分解して得られた前記複数の基底ベクトルを取得する基底ベクトル取得ステップと、前記特徴ベクトルと前記複数の基底ベクトルの各々との内積計算を順次行うことで、前記実数ベクトルと前記特徴ベクトルとの関連性を判定するベクトル演算ステップとを含む構成を有している。
3−3.効果
本実施の形態によれば、実数ベクトルは二値の基底ベクトルの線形和に分解されたうえで二値化された特徴ベクトルとの内積計算が行なわれるので、特徴ベクトルと実数ベクトルの内積計算を高速化できる。
3−4.第3の実施の形態の第1の例
図29は、本実施の形態の第1の例の特徴量演算装置103の構成を示すブロック図である。特徴量演算装置103は、コンテンツ取得部131と、特徴ベクトル生成部132と、特徴ベクトル二値化部133と、実数ベクトル取得部134と、実数ベクトル分解部135と、ベクトル演算部136と、データベース137とを備えている。
本例の特徴量演算装置103は、後述するように、特徴ベクトルと辞書データとしてデータベースに保存された実数ベクトルとの内積演算を伴うベクトル演算によって、特徴ベクトルと実数ベクトルとの関連性を判定する関連性判定装置として機能する。すなわち、特徴演算装置103は、本実施の形態の関連性判定装置に相当する。
関連性判定装置としての特徴量演算装置103は、コンピュータが本実施の形態の関連性判定プログラムを実行することにより実現される。関連性判定プログラムは、記録媒体に記録されて、記録媒体からコンピュータによって読み出されてもよいし、ネットワークを通じてコンピュータにダウンロードされてもよい。
コンテンツ取得部131は、画像データ、音声データ、文字データ等のコンテンツデータを取得する。これらのコンテンツデータは、外部機器から与えられるものであってもよく、コンテンツ取得部131で生成されるものであってもよい。例えば、コンテンツ取得部131がカメラであり、そこでコンテンツデータとして画像データが生成されてよい。
特徴ベクトル生成部132は、コンテンツ取得部131にて取得されたコンテンツデータからD次元の特徴ベクトルを生成する。例えばコンテンツが画像である場合には、特徴ベクトル生成部132は、画像の特徴量を抽出する。特徴ベクトル二値化部133は、特徴ベクトル生成部132で生成されたD次元の特徴ベクトルを二値化して、各要素が−1及び1の二値のみをとるd次元の二値ベクトルp∈{−1,1}dを生成する。
なお、コンテンツ取得部131、特徴ベクトル生成部132、及び特徴ベクトル二値化部133からなる構成は、最終的に二値化された特徴ベクトルを取得できる構成であればよく、例えば、コンテンツ取得部131及び特徴ベクトル132を備えずに、特徴ベクトル二値化部133が外部機器から特徴ベクトルを取得して、その取得した特徴ベクトルを二値化する構成であってよいし、また、外部機器から二値化された特徴ベクトルを直接取得する構成であってもよい。
実数ベクトル取得部134は、d次元の実数ベクトルq∈Rdを取得する。実数ベクトルは、外部機器から与えられるものであってもよく、特徴量演算装置103の図示しない記憶装置から読み出されるものであってもよく、実数ベクトル取得部134で生成されるものであってもよい。実数ベクトルは、その要素に浮動小数を含む実数を持つ。
実数ベクトル分解部135は、d次元の実数ベクトルq∈Rdを、二値の基底ベクトルmi∈{−1,1}dの線形和に分解する。具体的には、実数ベクトル分解部135は、d次元の実数ベクトルq∈Rdを、下式(5)によって、二値の要素を持つ基底行列Mと実数の要素を持つ係数ベクトルcに分解する。
ここで、M=(m1,m2,…,mk)∈{−1,1}dxkであり、c=(c1,c2,…,ck)T∈Rkである。すなわち、基底行列Mは、k個の基底ベクトルmiからなり、ここで、基底ベクトルmiは、要素が−1及び1のみをとるd次元の二値ベクトルであり、従って、基底行列Mは、要素が−1及び1のみをとるd行k列の二値行列である。また、係数ベクトルcは、k個の基底ベクトルに係る実数の係数を要素として持つk次元の実数ベクトルである。もちろん、qとMcはなるべく一致するように分解することが好ましいが、誤差を含んでもよい。
3−4−1.第1の分解手法
実数ベクトル分解部135は、誤差最少化によって実数ベクトルを分解する。第1の分解手法の手順は、以下のとおりである。
(1)基底行列M及び係数ベクトルcをランダムに初期化する。
(2)基底行列Mを固定して、分解の誤差
が最小になるように係数ベクトルcを更新する。これは、最小二乗法により求めることができる。
(3)係数ベクトルcを固定して、分解の誤差
が最小になるように基底行列Mを更新する。この最小化アルゴリズムについては、後に詳しく述べる。
(4)収束するまで(2)及び(3)を繰り返す。例えば、
の減少量が一定値以下になったとき、収束したと判定する。
(5)ステップ(1)〜ステップ(4)により得た解を候補として保持する。
(6)ステップ(1)〜ステップ(5)を繰り返し、最も
を小さくできた候補基底行列M及びcを最終結果として採用する。なお、このステップ(1)〜ステップ(5)の繰り返しはなくてもよいが、複数回繰り返すことで、初期値依存の問題を回避できる。
次に、ステップ(3)における基底行列Mの更新処理を説明する。図30は、式(5)を図式化したものである。図30の破線枠で囲ったように、基底行列Mのi行目の行ベクトルの要素は、実数ベクトルqのi番目の要素のみに依存する。基底行列Mのi行目の行ベクトルは、本例のように二値分解の場合は2k通りしか存在しない(なお、後述の第2の例の三値分解の場合にも3k通りしか存在しない)。よって、実数ベクトル分解部105は、これらをすべて網羅的にチェックし、分解誤差
を最小化する行ベクトルを採用する。これを基底行列Mのすべての行ベクトルに対して適用して、基底行列Mの要素を更新する。
3−4−2.第2の分解手法
次に、第2の分解手法を説明する。第1の分解手法では、分解誤差を
として定義し、この分解誤差を最小化することを考えた。しかしながら、実数ベクトルを基底ベクトルの線形和に近似した後に実際に近似をしたいのは、特徴ベクトルと実数ベクトルの内積pTqである。
そこで、第2の分解手法では、特徴ベクトルpをあらかじめN個集め、これをまとめたものをP∈RdxNとする。そして、分解誤差を
と定義して、これを最小化する。こうすることで、実数ベクトルは、実際のデータの分布に従って分解されることになるため、内積の近似精度が向上する。
この近似分解は、miを逐次的に求めることで行うことができる。第2の分解手法の手順は以下のとおりである。
(1)rにqを代入する(r←q)
(2)iに1を代入する(i←1)
(3)第1の分解手法によって
を最小化してmi、ciを得る。
(4)ステップ(3)で得られたmi、ciを初期値として、次の手順で
を最小化する。
(4−1)miを固定して、
が最小になるように、ciを更新する。これは、最小二乗法により求めることができる。
(4−2)ciを固定して、
が最小になるように、miを更新する。miが離散値であるため、これは組合最適化問題となり、例えば、グリーディアルゴリズム(Greedy algorithm)、タブ−サーチ(tabu search)、シミュレイテッドアニーリング(simulated annealing)等のアルゴリズムを用いて最小化を行うことができる。ステップ(3)でよい初期値が得られているので、これらのアルゴリズムでも良好に分解誤差を最小化できる。
(4−3)収束するまで(4−1)及び(4−2)を繰り返す。例えば、
の減少量が一定値以下になったときに、収束したと判定する。
(5)rにr−miciを代入し(r←r−mici)、iにi+1を代入し(i←i+1)、i≦kであればステップ(3)に戻り、i>kであればステップ(6)に進む。
(6)ステップ(1)〜(6)により得た解M、cを候補として保持する。
(7)ステップ(1)〜(6)を繰り返し、最も
を小さくできた候補M、cを最終結果として採用する。なお、ステップ(7)の繰り返しはなくてもよいが、複数回繰り返すことで、初期値依存の問題を軽減できる。
なお、上記の第1及び第2の分解手法は、かならずしも基底行列Mが二値(又は第2の例の三値)でなくともよく、基底行列Mのとり得る要素の種類が有限の数であれば適用可能である。また、係数ベクトルcも、基底行列Mと同様にあらかじめ定められた離散的な値でもよい。たとえば、2のべき乗に制約してもよく、そうすることで、処理を高速化できる。また、分解する実数ベクトルqの要素の平均値が著しく大きい(若しくは小さい)場合、すなわち、平均値が0から著しく離れている場合には、この平均値をあらかじめ実数ベクトルqの各要素から引いてオフセット実数ベクトルを生成し、このオフセット実数ベクトルを基底行列Mと係数ベクトルcに分解すると、より少ない基底で式(5)の近似分解を行うことができる。
ベクトル演算部136は、特徴ベクトルを用いた演算を行なう。演算の具体的内容については、後述にて、本例の特徴量演算装置103の応用例とともに具体的に説明する。この特徴ベクトルを用いた演算には、二値化された特徴ベクトルp∈{−1,1}dと実数ベクトル分解部135にて二値ベクトルの線形和に分解された実数ベクトルqとの内積pTqの計算が含まれる。以下では、まず、この内積pTqの計算について説明する。
内積pTqは、下式(6)のように式変形できる。
ここで、pTmiは二値ベクトル同士の内積である。この二値ベクトル同士の内積pTmiは、極めて高速に計算可能である。その理由は以下のとおりである。
二値ベクトル同士の内積は、ハミング距離の演算に帰着できる。ハミング距離とは、2つのバイナリコードにおいて、値が異なるビットを数えたものであり、2つの二値ベクトルの間のハミング距離は、すなわち値が異なる要素数を数えたものである。ここで、pとmiのハミング距離をDhamming(p,mi)と記述すると、内積pTmiは、Dhamming(p,mi)と下式(7)の関係がある。
ここで、前述のとおり、dはバイナリコードのビット数である。
ハミング距離の演算は、2つのバイナリコードにおいて、XORを適用した後に、1が立っているビットを数えることで計算できるので、極めて高速である。二値ベクトルがバイナリコード(0と1のビット列)で表現されているのであれば、ハミング距離は、下式(8)で計算できる。
ここで、XOR関数はpとmiをバイナリコード表現で考えたときに排他的論理和を取る操作であり、BITCOUNT関数はバイナリコードの1が立っているビット数を数えあげる処理のことである。
以上をまとめると、内積pTqは下式(9)のように変形できる。
すなわち、dビットのハミング距離計算をk回行い、k個のハミング距離について、係数ベクトルcに関する重み付け和を計算し、定数項を足したものがpTqになる。よって、kが十分小さければ、pTqを浮動小数点精度で計算するよりも、はるかに高速に計算できるようになる。
なお、上記の内積計算において、二値化された特徴ベクトルpは、「第1の二値ベクトル」に相当し、基底ベクトルmiは、「第2の二値ベクトル」に相当する。
データベース137には、実数ベクトル分解部135にて分解された複数の実数ベクトル、すなわち複数の基底ベクトルの線形和が辞書データとして記憶されている。ベクトル演算部136は、データベース137から基底ベクトルの線形和を読み出して、上記の演算を行う。このデータベース137は、「基底ベクトル取得部」に相当する。
以上のように、本例の特徴量演算装置103によれば、特徴ベクトルを用いた演算処理に特徴ベクトルと他の実数ベクトルとの内積演算が含まれている場合にも、特徴ベクトルを二値化したうえで、実数ベクトルについても二値ベクトルの線形和に分解するので、それらの内積演算を高速化できる。
3−5.第3の実施の形態の第1の例の拡張
上記の第1の例では、二値ベクトルp、miを、それぞれ、p∈{−1,1}d、mi∈{−1,1}dと定義して、実数ベクトルを二値ベクトルの線形和に分解することで内積演算pTmiが高速になることを説明した。しかしながら、p、miをより一般的な二値ベクトルp´∈{−a,a}d、mi´∈{−a,a}dとしても、それらの高速な内積演算が可能である。この場合、p´Tmi´=a2(pTmi)であることから、−1及び1により定義される二値ベクトル同士の内積にa2を掛ければよい。なお、この場合には、特徴ベクトルp´を係数aで除して得られる二値ベクトルpが「第1の二値ベクトル」に相当し、基底ベクトルmi´を係数aで除して得られる二値ベクトルmiが「第2の二値ベクトル」に相当する。
さらに、特徴ベクトル及び基底ベクトルを任意の二値ベクトルp´´∈{α,β}d、mi´´∈{γ,δ}dとしても、高速な内積演算が可能である。ここで、係数α、β、γ、δは実数であり、α≠β、γ≠δである。この場合、p´´およびmi´´は、−1及び1により定義される二値ベクトルp及びmiの各要素に線形変換を施すことで得られ、下式(10)及び(11)のように展開される。
なお、式(10)及び(11)中の太字の「1」は、長さがdですべての要素が1であるベクトルである。また、式(10)及び(11)中のA、B、C、Dは実数であり、式(10)及び(11)が成立するようにあらかじめ計算しておけばよい。
内積p´´Tmi´´は、下式(12)のように展開できる。
式(12)の括弧内の計算は、−1及び1からなる二値ベクトル同士の内積である。従って、特徴ベクトルが任意の二値の要素をもつ二値ベクトルにされ、かつ、実数ベクトルを任意の二値の要素を持つ二値ベクトルの線形和に展開した場合にも、高速演算が可能である。なお、この場合には、各要素を線形変換することで特徴ベクトルp´´が得られる上記の二値ベクトルpが「第1の二値ベクトル」に相当し、各要素を線形変換することで基底ベクトルmi´´が得られる上記の二値ベクトルmiが「第2の二値ベクトル」に相当する。
3−6.第3の実施の形態の第2の例
次に、第2の例の特徴量演算装置を説明する。第2の例の特徴量演算装置の構成は、図29に示した第1の例のそれと同じである。第1の例では、実数ベクトル分解部135は、実数ベクトルを式(5)によって二値ベクトルの線形和に分解したが、本例の特徴量演算装置の実数ベクトル分解部135は、実数ベクトルを三値ベクトルの線形和に分解する。
実数ベクトル分解部135は、d次元の実数ベクトルq∈Rdを、三値ベクトルの線形和に分解する。具体的には、実数ベクトル分解部135は、d次元の実数ベクトルq∈Rdを、下式(13)によって、三値の要素を持つ基底行列Mと実数の要素を持つ係数ベクトルcに分解する。
ここで、M=(m1,m2,…,mk)∈{−1,0,1}dxkであり、c=(c1,c2,…,ck)T∈Rkである。すなわち、基底行列Mは、k個の基底ベクトルmiからなり、ここで、基底ベクトルmiは、要素が−1、0、及び1のみをとるd次元の三値ベクトルであり、従って、基底行列Mは、要素が−1、0、及び1のみをとるd行k列の三値行列である。また、係数ベクトルcは、k個の基底ベクトルに係る実数の係数を要素として持つk次元の実数ベクトルである。もちろん、qとMcはなるべく一致するように分解することが好ましいが、誤差を含んでもよい。実数ベクトル分解部135は、第1の例と同様にして、誤差最小化によって実数ベクトルを分解する。
ベクトル演算部136は、内積pTqを計算する。以下では、内積pTqを計算するベクトル演算部136を特に、内積演算部136とも呼ぶ。内積pTqは、下式(14)のように式変形できる。
ここで、pTmiは、二値ベクトルpと三値ベクトルmiとの内積である。内積演算部106は、ここで、三値ベクトルmiの代わりに、以下に定義する0置換ベクトルmi bin、フィルタベクトルmi filter、及び0要素数ziを用いる。
まず、内積演算部136は、miの0の要素を、−1又1に置き換える。miの各要素について、それを−1に置き換えるか、1に置き換えるかは、いずれでもよい。この置き換えによって、0置換ベクトルmi bin∈{−1,1}dが生成される。この0置換ベクトルmi bin∈{−1,1}dは二値ベクトルである。
また、内積演算部136は、miの0の要素を−1に置き換え、0以外の要素を1に置き換える。この置き換えによって、フィルタベクトルmi filter∈{−1,1}dが生成される。このフィルタベクトルmi filterも二値ベクトルである。
さらに、内積演算部136は、miの0の要素数ziを求める。ziは整数となる。内積演算部136は、これらの二値ベクトルmi bin、フィルタベクトルmi filter、及び0要素数ziを用いて、式(14)におけるpTmiを、下の式(15)及び式(16)によって計算する。
ここで、式(15)のAND関数は、二値ベクトルをバイナリコード表現で考えたときに、論理積を取る操作である。
以下、図31を参照して、具体例を用いて、式(15)及び(16)の導出を説明する。図31は、本例の計算例を示す図である。図31の例では、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となる。
式(15)における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で異なっている要素の個数が数え上げられ、Dfilterd_hamming(p,mi bin,mi filter)=2となる。
ここで、pとmiの要素のうち、1と1又は−1と−1の組となる要素の個数は、全要素数d=6から、非0で異なっている要素の個数Dfilterd_hamming=2と0である要素の個数zi=2を引くことで求められる。すなわち、1と1又は−1と−1の組となる要素の数=d−Dfilterd_hamming−zi=6−2−2=2となる。
pとmiは、1と1又は−1と−1の組となる要素(積が1になる要素の組)の個数から、−1と1又は1と−1との組となる要素(積が−1になる要素の組)の個数を引いた値と等しいため、pTmi=(d−Dfilterd_hamming−zi)−Dfilterd_hamming=d−zi−2Dfilterd_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)〜(16)をまとめると、内積pTqは、下式(17)のように変形できる。
内積演算部106は、この式(17)によって、内積pTqを計算する。
関数Dfilterd_hamming(p,mi bin,mi filter)は、ハミング距離演算と非常に似ており、AND演算が加わっただけである。したがって、q∈Rdを、三値ベクトルの線形和に分解した場合でも、pTqを浮動小数点精度で計算するよりも、はるかに高速にpTqを計算できるようになる。
以上のように、d次元の実数ベクトルq∈Rdを、二値ではなく三値ベクトルの線形和に分解することの利点は、式(13)の近似が、より少ない数のベクトルの線形和でも成立するようになることにある。すなわち、kの値を小さく抑えられることになるため、さらなる高速化につながる。
3−7.第3の実施の形態の第2の例の拡張
上記の第2の例では、二値ベクトル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及び三値ベクトルmiをp∈{α,β}d、mi∈{γ−δ,γ,γ+δ}dと一般化しても、高速な内積演算が可能である。ここで、α、β、γ、δは実数であり、α≠β、δ≠0である。この場合、p及びmiの各要素に下式(18)及び(19)の線形変換を施すことで、それぞれp´´およびmi´´が得られる。
なお、式(18)及び(19)中の太字の「1」は、長さがdですべての要素が1であるベクトルである。また、式(18)及び(19)中のA、B、C、Dは実数であり、式(18)及び(19)が成立するようにあらかじめ計算しておく。
内積p´´Tmi´´は、下式(20)のように展開できる。
式(20)の括弧内の計算は、−1及び1からなる二値ベクトル同士の内積、又は−1及び1からなる二値ベクトルと−1、0、1からなる三値ベクトルとの内積である。従って、特徴ベクトルが任意の二値ベクトルにされ、かつ、実数ベクトルを上記のとおり一般化した三値ベクトルの線形和に展開した場合にも、高速演算が可能である。
3−8.第3の実施の形態の第3の例
第1及び第2の例では、ベクトル演算部136における演算処理において行なわれる特徴ベクトルpと実数ベクトルqとの内積演算について説明した。特徴ベクトルpと実数ベクトルqとの内積演算を伴う演算処理については、後述にて応用例として説明するが、演算処理として、内積pTqがある閾値Tと比較されることがある。例えば、特徴ベクトルの識別を行なう場合には、内積pTqがある閾値Tと比較される。
第1の例及び第2の例において、内積pTqは、式(6)(実数ベクトルqを二値ベクトルの線形和に分解する場合)及び式(14)(実数ベクトルqを三値ベクトルの線形和に分解する場合)に示すように、下式(21)で表される。
この点に着目して、ベクトル演算部136は、特徴ベクトルを用いた演算に、内積pTqと閾値との比較の処理(閾値処理)が含まれる場合には、閾値処理をk段階に分けること(カスケード)により、閾値処理を高速化できる。
3−8−1.第1のカスケード
以下、第1のカスケードによる閾値処理の高速化をする。以下の例では、閾値をTとして、pTq>Tを判定する。図32は、ベクトル演算部136おけるカスケードによる閾値処理の高速化のフロー図である。ベクトル演算部136は、まずi=1、y=0とする(ステップS11)。次に、yをy+ci(pTmi)に更新する(ステップS12)。次に、yがTi minより大きいか否かを判断する(ステップS13)。なお、Ti minは、pTq<Tを早期に判定するための最小側早期判定閾値であり、その決定方法については、後述する。yがTi minより小さい場合には(ステップS13にてYES)、pTq<Tであると判定して(ステップS14)、そこで特徴ベクトルpと実数ベクトルqとの内積演算を打ち切って、処理を終了する。
yがTi min以上である場合は(ステップS13にてNO)、次にyがTi maxより大きいか否かを判断する(ステップS15)。なお、Ti maxは、pTq>Tを早期に判定するための最大側早期判定閾値であり、その決定方法については、後述する。yがTi maxより大きい場合には(ステップS15にてYES)、pTq>Tであると判定して(ステップS16)、そこで特徴ベクトルpと実数ベクトルqとの内積演算を打ち切って、処理を終了する。
yがTi max以下である場合には(ステップS15にてNO)、i=kであるか否か、すなわち、まだ計算していない基底miがあるか否かを判断する(ステップS17)、i=kでない場合には(ステップS17にてNO)、iをインクリメントして(ステップS18)、ステップS12に戻る。i=kである場合、すなわちすべての基底miを計算している場合には(ステップS17にてYES)、ステップS14に移行して、pTq<Tであると判断して処理を終了する。
以上のように、二値ベクトルpと実数ベクトルqとの内積を計算する際に、実数ベクトルqを二値ベクトル又は三値ベクトルの線形和に分解することで、閾値処理をk段階に分けることができ、それによって、pTq<Tが明らかに成立する場合、及びpTq>Tが明らかに成立する場合は、そのような閾値処理の結果を早期に得ることができる。これによって、二値ベクトルpと実数ベクトルqの内積演算をk回より少ない回数に抑えることができる。
なお、判定結果は、カスケードを採用しない(非カスケード)場合と完全に一致はしないが、Ti min及びTi maxを適切に選択することで、判定結果を非カスケードの場合と限りなく一致させることができる。
なお、ciを大きさによって並べ替えることで、早期判定の効果を高めることができる。また、ciの大きさに差がつくように分解することで、早期判定の効果を高めることができる。
次に、最小側早期判定用閾値Ti min及び最大側早期判定用閾値Ti maxの決定方法について説明する。カスケード一段目における最小側早期判定用閾値T1 min及び最大側早期判定用閾値T1 maxを決定することを考えると、ci(pTmi)(i=2,3,…,k)が未知の状態で、安全に判定できる閾値を決めなければならない。そこで、あらかじめci(pTmi)のとり得る最大値Pi max及び最小値Pi minを求めておく。これは、事前に学習用に準備した複数のデータから抽出した二値の特徴量pをci(pTmi)に代入することで得られる。
最小側早期判定用閾値Ti minは、次のようにして決定できる。
すなわち、
が成立するのであれば、カスケードの二段目以降は、どのような大きな値が入ってきたとしてもpTq<Tが成立するので、この時点で必ずpTq<Tが成立するといえる。従って、下式(22)によってTi minを求めることができる。
二段目以降のTi minについても、同じ要領で決定することができる。
最大側早期判定用閾値Ti maxは、次のようにして決定できる。
すなわち、
が成立するのであれば、カスケードの二段目以降は、どのような小さな値が入ってきたとしてもpTq>Tが成立するので、この時点で必ずpTq>Tが成立するといえる。従って、下式(23)によってTi maxを求めることができる。
二段目以降のTi maxについても、同じ要領で決定することができる。なお、上記説明から明らかなように、Tk min及びTi maxはTである。
なお、式(23)において、Pi minは最小でなくても、十分小さい上位数%内の値として選択してもよい。また、式(22)においても、Pi maxは最大でなくても、十分に大きい上位数%の値として選択してもよい。
3−8−2.第2のカスケード
第2のカスケードでは、実数ベクトルを複数のサブベクトルに分解することでより深いカスケードを実施し、これにより、閾値との比較処理をより高速化する。すなわち、第1のカスケードでは、
であることに着目して、閾値処理をk段階に分けた。第2のカスケードでは、これを以下のように拡張する。
まず、下式(24)のように、q∈Rdをm個の部分ベクトルに分解する。
同様に、下式(25)のように、p∈{1,1}dをm個の部分ベクトルに分解する。
ここで、qiとpiの次元数は同じであるものとする。
このとき、内積pTqは、下式(26)のように書ける。
m個のそれぞれの内積pi Tqiは、二値ベクトルと実数ベクトルの内積であるため、これらもまた、それぞれ二値/三値分解法を適用可能である。例えば、内積pi Tqiをそれぞれk個に分解するのであれば、pTqは、mk段階のカスケード処理に分解できる。これによりカスケードの段階数が増加し、早期判定の効果を向上できる。なお、第2のカスケードにおいても、カスケード処理の順序は、係数の絶対値順、又は誤識別が少なくなるような順序に選ぶことで、早期判定の効果をより向上できる。
なお、上記の第3の例では、pTq>Tを判断するために、基底ごとに、明らかにpTq<Tが成立する(すなわち明らかにpTq>Tが成立しない)か否か、及び明らかにpTq>Tが成立するか否かを判断したが、このいずれか一方のみを判断してもよい。
次に、ベクトル演算部136における演算処理について説明する。上記の第1及び第2の例のベクトル演算部136は、二値化された特徴ベクトルpと実数ベクトルqの内積計算を伴うものであるが、そのような演算処理は種々ある。すなわち、本実施の形態の上記の例は、特徴ベクトルを用いて演算処理を行なう種々の装置に応用できる。なお、上記の第3の例は、上述のとおり、特に特徴ベクトルを閾値と比較する処理を伴う演算処理を行なう種々の装置に応用できる。そこで、以下、本実施の形態の応用例を説明する。
3−9.第3の実施の形態の第1の応用例
本応用例では、本実施の形態がHOGによる物体認識に応用される。図33は、物体認識装置の構成を示すブロック図である。物体認識装置104は、HOGによる物体認識を行なう。物体認識装置104は、ピラミッド画像生成部141と、HOG特徴量抽出部142と、バイナリコード変換部143と、パラメータ決定部144と、パラメータ行列分解部145と、線形SVM識別部146とを備えている。
ピラミッド画像生成部141は、入力クエリとしての画像を取得して、当該画像を複数段階の倍率でそれぞれ縮小してなるピラミッド画像を生成する。これにより、サイズの異なる物体に対処できる。このピラミッド画像生成部141は、図29に示したコンテンツ取得部131に対応する。HOG特徴量抽出部142は、ピラミッド画像の各段における画像を、8×8ピクセルのサイズのセルに分割し、各セルからHOG特徴量を抽出する。HOG特徴量抽出部142は、各セルからD次元の特徴量を抽出する。このHOG特徴量抽出部142は、図29に示した特徴ベクトル抽出部102に対応する。バイナリコード変換部143は、各セルに与えられたD次元の特徴量を、d次元の二値ベクトルに変換する。このバイナリコード変換部143は、図29に示した特徴ベクトル二値化部133に対応する。
パラメータ決定部144は、線形SVM識別部146における線形SVMにて用いる重みベクトルw及び実数のバイアスbを決定する。パラメータ決定部144は、学習用に用意された特徴量を用いて、学習処理によって重みベクトルw及びバイアスbを決定する。パラメータ行列分解部145は、重みベクトルwを第1又は第2の例で説明した式(5)又は式(13)によって離散値ベクトルの線形和に分解する。
線形SVM識別部146は、線形SVMによって特徴ベクトルの識別を行なう。線形SVM識別部146は、まず、W×Hセルをひとまとまりとして、ウィンドウを構成する。1つのウィンドウから抽出される特徴ベクトルは、W×H×d次元のベクトルとなる。線形SVM識別部146は、この特徴ベクトルに対して、下式(27)の線形SVMを適用する。
ここで、線形SVMにおける内積演算wTxは、第1又は第2の例として説明した実数ベクトルと二値ベクトルの高速内積演算により実現できる。
3−10.第3の実施の形態の第2の応用例
本応用例では、本実施の形態がk−meansクラスタリングに応用される。図34は、k−meansクラスタリング装置の構成を示すブロック図である。k−meansクラスタリング装置105は、コンテンツ取得部151と、特徴ベクトル生成部152と、特徴ベクトル二値化部153と、代表ベクトル更新部154と、収束判定部155と、代表ベクトル分解部156と、最近接代表ベクトル探索部157とを備えている。
コンテンツ取得部151は、クラスタリングの対象となるN個のコンテンツを取得する。特徴ベクトル生成部152は、コンテンツ取得部151にて取得した各コンテンツからそれらの特徴量を特徴ベクトルとして抽出する。特徴ベクトル二値化部153は、特徴ベクトル抽出部152にて抽出された各特徴ベクトルを二値化する。
代表ベクトル更新部154は、まず、特徴ベクトル二値化部153で二値化されたN個の特徴ベクトルからk個をランダムに選出してこれを代表ベクトルとする。収束判定部155は、代表ベクトル更新部154が代表ベクトルを更新するごとに収束判定を行なう。収束判定部155にて収束したと判定された場合には、k−meansクラスタリング装置105はクラスタリングの処理を終了する。代表ベクトル分解部156は、代表ベクトル更新部154にて更新された代表ベクトルを離散値(二値又は三値)ベクトルに分解する。
最近接代表ベクトル探索部157は、特徴ベクトル二値化部153より入力されるN個の二値ベクトルをそれぞれ最も近傍の代表ベクトルに所属させる。最近接代表ベクトル157は、この結果を代表ベクトル更新部154に出力する。代表ベクトル更新部154は、各代表ベクトルについて、それに所属する特徴ベクトル(二値化されている)の平均ベクトルを算出して、これを新しい代表ベクトルとする。このようにして代表ベクトル更新部154で更新される代表ベクトルは、二値ベクトルの平均で算出されるので、実数ベクトルとなる。
従って、仮に代表ベクトル分解部156がなければ、最近接代表ベクトル探索部157は、更新された代表ベクトル(実数ベクトル)と特徴ベクトル(二値ベクトル)との距離を求めるためにそれらの内積を計算しなければならない。そこで、本応用例では、上記のように、この代表ベクトル(実数ベクトル)を代表ベクトル分解部156によって、第1又は第2の例で説明したように、離散値(二値又は三値)ベクトルに分解する。それによって、最近接代表ベクトル探索部157における、各特徴ベクトルと各代表ベクトルとの距離の計算を高速にでき、よって各特徴ベクトルが最も近接する代表ベクトル(すなわち、所属すべき代表ベクトル)を高速に探索できる。
3−11.第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−分木を構築し、上記提案の木探索の原理により近似的に最近傍点を探索する。この手法は、データが実数ベクトルであり、かつノードに登録されている代表ベクトルが二値ベクトルである場合を前提として設計される。但し、データが二値ベクトルであって、ノードに登録されている代表ベクトルが実数ベクトルである場合にも、第1又は第2の例を採用することで、木探索を高速化できる。
3−12.第3の実施の形態の変形例
特徴量演算装置103において、コンテンツ取得部131、特徴ベクトル生成部132、特徴ベクトル二値化部133、実数ベクトル取得部134、実数ベクトル分解部135、及びベクトル演算部136の一部と他の部分とが別々の装置として構成されていてもよい。特に、コンテンツ取得部131、特徴ベクトル生成部132、特徴ベクトル二値化部133、及びベクトル演算部136が特徴演算装置103に搭載され、実数ベクトル取得部134、及び実数ベクトル分解部135が別の装置に搭載されてよい。この場合には、実数ベクトル分解部135にて分解された複数の実数ベクトル(複数の係数ベクトルと基底ベクトルの組)が特徴演算装置103のデータベースに記憶され、ベクトル演算部136は、データベースから分解された複数の実数ベクトルを取得する。このとき、ベクトル演算部136は、基底ベクトル取得部(第1及び第2の例)、あるいは、二値ベクトル取得部(第1の例)、三値ベクトル取得部(第2の例)として機能する。
なお、コンテンツ取得部131にて取得されるコンテンツデータは、車両から得られる計測データであってよい。さらに、車両から得られる計測データは、例えば、車両に設置されたカメラで撮影された画像データ、車両に設置されたセンサで計測されたセンシングデータであってよい。この場合に、関連性判定装置としての特徴演算装置103のベクトル演算部136は、計測データと辞書データとの関連性を判定する。例えば、計測データとして、車両に設置されたカメラで撮影された画像データが取得される場合には、辞書データとして複数の人物画像のデータがデータベースに保存されており、関連性判定装置としての特徴演算装置103のベクトル演算部136は、第4ないし第6の例のいずれかによって、画像データの画像に人物が含まれるか否かを判定してよい。
4.第4の実施の形態
4−1.背景
第3の実施の形態では、識別器による認識処理においてもk−meansクラスタリングにおいても、二値ベクトルとd次元の実数ベクトルとの内積の演算を高速化することこそが、問題の解決につながるとの認識の下、特徴ベクトルがd次元の二値ベクトルp∈{−1,1}dである場合において、そのような特徴ベクトルとd次元の実数ベクトルq∈Rdとの間の内積(pTqもしくはqTp)の演算を高速に行う関連性判定装置を説明した。
すなわち、第3の実施の形態の関連性判定装置は、二値化された特徴ベクトルを取得する特徴ベクトル取得部と、実数ベクトルを二値または三値の離散値のみから構成された要素を持つ複数の基底ベクトルの線形和に分解することで得られた前記複数の基底ベクトルを取得する基底ベクトル取得部と、前記特徴ベクトルと前記複数の基底ベクトルの各々との内積計算を順次行うことで、前記実数ベクトルと前記特徴ベクトルとの関連性を判定するベクトル演算部とを備えており、この構成により、実数ベクトルは複数の二値の基底ベクトルの線形和に分解されたうえで二値化された特徴ベクトルとの内積計算が行なわれるので、特徴ベクトルと実数ベクトルの内積計算を高速化できた。
ところで、二値化された特徴ベクトルと複数の実数ベクトルとの内積を計算することで、特徴ベクトルと複数の実数ベクトルの各々との関連性を判定する必要がある場合がある。例えば、上述のように、線形SVMでは、特徴ベクトルがクラスAに属するか、クラスBに属するか、すなわち、特徴ベクトルがある識別基準に該当するか否かのみを判断するものであるが、このような識別を複数の基準について行いたい場合がある。具体的な例としては、撮影された画像に映っているのが、大人であるか否か、子供であるか否か、車であるか否か、道路標識であるか否かをそれぞれ判断したい場合がある。
また、上述のk−meansクラスタリングでは、入力として与えられたN個の特徴ベクトルの各々について、k個の代表ベクトルとの間で内積計算を伴う距離の計算を行う。ここで、k個の代表ベクトルの各々は、上述のように、二値ベクトルの平均で定義されるので、実数ベクトルである。よって、k−meansクラスタリングでも、二値化された特徴ベクトルと複数の実数ベクトルとの内積計算が必要となる。
4−2.概要
そこで、本実施の形態は、二値化された特徴ベクトルと複数の実数ベクトルとの内積計算を高速化することで、そのような特徴ベクトルと複数の実数ベクトルとの関連性の判定を高速に行うことを目的とする。
本実施の形態の関連性判定装置は、二値化された特徴ベクトルを取得する特徴ベクトル取得部と、複数の実数ベクトルからなる実数行列を、係数行列と、要素として二値または三値の離散値のみを持つ複数の基底ベクトルからなる基底行列との積に分解する実数行列分解部と、前記特徴ベクトルと前記複数の実数ベクトルの各々との内積の計算として、前記特徴ベクトルと前記基底行列との積を計算し、さらに当該積と前記係数行列との積を計算して、その結果を用いて、前記複数の実数ベクトルの各々と前記特徴ベクトルとの関連性を判定するベクトル演算部とを備えた構成を有している。この構成により、特徴ベクトルと複数の実数ベクトルの各々との内積を計算のために、複数の実数ベクトルからなる実数行列を離散値の基底行列と係数行列に分解したうえで、特徴ベクトルと基底行列との積を計算し、さらに係数行列との積を計算するので、特徴ベクトルと複数の実数ベクトルの各々との内積演算の結果を高速に取得でき、よって特徴ベクトルと複数の実数ベクトルとの関連性の判定を高速に行うことができる。
上記の関連性判定装置は、前記複数の実数ベクトルを並べることで前記実数行列を生成する実数行列生成部をさらに備えていてよい。この構成により、容易に複数の実数ベクトルから実数行列を生成できる。
上記の関連性判定装置において、前記実数行列生成部は、前記複数の実数ベクトルが所定のパラメータを有する場合に、当該パラメータの順に従って前記複数の実数ベクトルを並べることにより前記実数行列を生成してよい。この構成により、実数行列において互いに似た実数ベクトルが隣り合うこととなるので、隣り合う係数行列もまた類似するようになる。
上記の関連性判定装置において、前記実数行列分解部は、
をコスト関数として、前記コスト関数を解くことにより前記実数行列を分解してよい。ここで、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−分木のノードに登録されている代表ベクトルとの間の距離の演算を高速化できる。
上記の関連性判定装置において、前記特徴ベクトルは、画像の特徴量を表すベクトルであってよい。この構成により、画像の特徴量の演算における特徴ベクトルと複数の実数ベクトルの内積計算を高速化できる。
本実施の形態の関連性判定プログラムは、コンピュータを、上記の関連性判定装置として機能させるための関連性判定プログラムである。この構成によっても、特徴ベクトルと複数の実数ベクトルの各々との内積を計算のために、複数の実数ベクトルからなる実数行列を離散値の基底行列と係数行列に分解したうえで、特徴ベクトルと基底行列との積を計算し、さらに係数行列との積を計算するので、特徴ベクトルと複数の実数ベクトルの各々との内積演算の結果を高速に取得でき、よって特徴ベクトルと複数の実数ベクトルとの関連性の判定を高速に行うことができる。
本実施の形態の関連性判定方法は、二値化された特徴ベクトルを取得する特徴ベクトル取得ステップと、複数の実数ベクトルからなる実数行列を、係数行列と、要素として二値または三値の離散値のみを持つ複数の基底ベクトルからなる基底行列との積に分解する実数行列分解ステップと、前記特徴ベクトルと前記複数の実数ベクトルの各々との内積の計算として、前記特徴ベクトルと前記基底行列との積を計算し、さらに当該積と前記係数行列との積を計算して、その結果を用いて、前記複数の実数ベクトルの各々と前記特徴ベクトルとの関連性を判定するベクトル演算ステップとを含む構成を有している。この構成によっても、特徴ベクトルと複数の実数ベクトルの各々との内積を計算のために、複数の実数ベクトルからなる実数行列を離散値の基底行列と係数行列に分解したうえで、特徴ベクトルと基底行列との積を計算し、さらに係数行列との積を計算するので、特徴ベクトルと複数の実数ベクトルの各々との内積演算の結果を高速に取得でき、よって特徴ベクトルと複数の実数ベクトルとの関連性の判定を高速に行うことができる。
4−3.効果
本実施の形態によれば、二値化された特徴ベクトルと複数の実数ベクトルの各々との内積計算を高速化でき、そのような特徴ベクトルと複数の実数ベクトルの各々との関連性の判定を高速に行うことができる。
以下、本実施の形態の特徴量演算装置について、図面を参照しながら説明する。
4−4.実数ベクトルが複数ある状況
まず、特徴ベクトルとの内積を計算すべき実数ベクトルが複数ある状況について説明する。図35は、複数の識別基準で画像中の人を識別する場合の線形SVMの例を示す図である。この例では、入力されたある特徴ベクトルに対して、図35に示すように、単にその特徴ベクトルの画像内に人がいるか否かの識別ではなく、それが「大人(正面)」であるか否か、「大人(横)」であるか否か、「子供(正面)」であるか否かをそれぞれ識別する。即ち、特徴ベクトルを識別する基準が複数ある。この場合、図35に示すように、識線形SVMの評価式f(x)の重みパラメータ(以下、「辞書」ともいう。)wは、識別基準ごとに複数(w1,w2,w3,…,wL)用意する必要があり、バイアスbも識別基準ごとに複数(b1,b2,b3,…,bL)用意する必要がある。
図36は、被写体までの距離に応じた複数の識別基準で画像中の人を識別する場合の線形SVMの例を示す図である。この例では、人の識別が、被写体までの距離、即ち画像内の被写体のスケールの変化に対してロバストとなるように、入力されたある特徴ベクトルに対して、図36に示すように、単にその特徴ベクトルの画像内に大人がいるか否かを識別するだけでなく、それが「大人(遠)」であるか否か、「大人(中距離)」であるか否か、「大人(近)」であるか否かをそれぞれ識別する。即ち、この場合も、特徴ベクトルを識別する基準が複数あり、よって、図36に示すように、線形SVMの辞書wは、識別基準ごとに複数(w1,w2,w3,…,wL)用意する必要があり、バイアスbも識別基準ごとに複数(b1,b2,b3,…,bL)用意する必要がある。
このように、ある特徴ベクトルに対して複数の基準で識別を行う場合には、それらの複数の基準が互いに似ていることが多い。図35及び図36もそのような例を示しており、即ち、図35の例では、「大人(正面)」と「大人(横)」は、大人という共通点を有し、「大人(正面)」と「子供(正面)」は、人の正面という共通点を有し、また、「大人(正面)」と「大人(横)」と「子供(正面)」は、人という共通点を有する。図36の例でも、「大人(遠)」と「大人(中距離)」と「大人(近)」は、「大人」という共通点を有する。よって、図35及び図36の複数の実数ベクトルである辞書(w1,w2,w3,…,wL)は互いに似ている。また、k−meansクラスタリングにおいても、k個の実数ベクトルである代表ベクトルが互いに似ていることが多い。本実施の形態の関連性判定装置は、このように複数の実数ベクトルが互いに似ているという性質を生かして、処理を高速化する。
4−5.第4の実施の形態の第1の例
図37は、第4の実施の形態の第1の例の特徴量演算装置106の構成を示すブロック図である。特徴量演算装置106は、コンテンツ取得部161と、特徴ベクトル生成部162と、特徴ベクトル二値化部163と、実数行列取得部164と、実数行列分解部165と、ベクトル演算部166と、データベース167とを備えている。
本例の特徴量演算装置106は、後述するように、特徴ベクトルと辞書データとしてデータベースに保存された複数の実数ベクトルとの内積演算を伴うベクトル演算によって、特徴ベクトルと複数の実数ベクトルとの関連性を判定する関連性判定装置として機能する。即ち、特徴演算装置106は、本実施の形態の関連性判定装置に相当する。
関連性判定装置としての特徴量演算装置106は、コンピュータが本実施の形態の関連性判定プログラムを実行することにより実現される。関連性判定プログラムは、記録媒体に記録されて、記録媒体からコンピュータによって読み出されてもよいし、ネットワークを通じてコンピュータにダウンロードされてもよい。
コンテンツ取得部161は、画像データ、音声データ、文字データ等のコンテンツデータを取得する。これらのコンテンツデータは、外部機器から与えられるものであってもよく、コンテンツ取得部161で生成されるものであってもよい。例えば、コンテンツ取得部161がカメラであり、そこでコンテンツデータとして画像データが生成されてよい。
特徴ベクトル生成部162は、コンテンツ取得部161にて取得されたコンテンツデータからD次元の特徴ベクトルを生成する。例えばコンテンツが画像である場合には、特徴ベクトル生成部162は、画像の特徴量を抽出する。特徴ベクトル二値化部163は、特徴ベクトル生成部162で生成されたD次元の特徴ベクトルを二値化して、各要素が−1及び1の二値のみをとるd次元の二値ベクトルp∈{−1,1}dを生成する。この特徴ベクトル二値化部163は、本実施の形態の「特徴ベクトル取得部」に相当する。
なお、コンテンツ取得部161、特徴ベクトル生成部162、及び特徴ベクトル二値化部163からなる構成は、最終的に二値化された特徴ベクトルを取得できる構成であればよく、例えば、コンテンツ取得部161及び特徴ベクトル生成部162を備えずに、特徴ベクトル二値化部163が外部機器から特徴ベクトルを取得して、その取得した特徴ベクトルを二値化する構成であってよいし、また、特徴ベクトル二値化部163が外部機器から二値化された特徴ベクトルを直接取得する構成であってもよい。
実数行列取得部164は、複数のd次元の実数ベクトルqn∈Rd(n=1,2,…,L)を取得する。複数の実数ベクトルqnは、外部機器から与えられるものであってもよく、特徴量演算装置106の図示しない記憶装置から読み出されるものであってもよく、実数行列取得部164で生成されるものであってもよい。各実数ベクトルqnは、その要素に浮動小数を含む実数を持つ。ここで、複数の実数ベクトルqnを並べたものを実数行列Q=(q1,q2,…,qL)∈RdxLと表記する。
このように複数の実数ベクトルqnをまとめた実数行列Qを用いると、図35及び図36の複数の線形SVMは、下式(28)のようにまとめて表現することができる。
実数行列分解部105は、図38に示すように、d行L列の実数行列Qを、二値の基底行列M∈{−1,1}dxkと係数行列との積に分解する。具体的には、実数行列分解部105は、d行L列の実数行列Qを、下式(29)によって、二値の要素を持つ基底行列Mと実数の要素を持つ係数行列Cに分解する。
ここで、図38に示すように、M=(m1,m2,…,mk)∈{−1,1}dxkであり、C=(c1,c2,…,cL)T∈RkxLである。
すなわち、基底行列Mは、k個の基底ベクトルmiからなり、ここで、基底ベクトルmiは、要素が−1及び1のみをとるd次元の二値ベクトルであり、従って、基底行列Mは、要素が−1及び1のみをとるd行k列の二値行列である。
また、係数行列Cは、L個(Lはクラス数)の係数ベクトルcnからなり、ここで、係数ベクトルcnは、k個(kは基底数)の基底ベクトルに係る実数の係数を要素として持つk次元の実数ベクトルである。もちろん、QとMCはなるべく一致するように分解することが好ましいが、誤差を含んでもよい。以下、実数行列分解部105が実数行列Qを式(29)のように分解する手法を説明する。
4−5−1.第1の分解手法
第1の分解手法として、データ非依存型の分解手法を説明する。第1の分解手法では、実数行列分解部105は、分解誤差を表す下式(30)のコスト関数g1を解くことで分解を行う。
ただし、基底行列Mは二値であり、M∈{−1,1}dxkである。
実数行列分解部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の更新処理を説明する。図39の破線枠で囲ったように、基底行列Mのj行目の行ベクトルの要素は、実数行列のj行目の要素のみに依存する。よって、基底行列Mの各行ベクトルの値は、他の行とは独立して最適化することができるので、基底行列Mは、行ごとに網羅探索(全探索)を行うことができる。基底行列Mのj行目の行ベクトルは、本例のように二値分解の場合は2k通りしか存在しない(なお、後述の第2の例の三値分解の場合にも3k通りしか存在しない)。よって、実数行列分解部105は、これらをすべて網羅的にチェックし、コスト関数g1を最小化する行ベクトルを採用する。これを基底行列Mのすべての行ベクトルに対して適用して、基底行列Mの要素を更新する。
4−5−2.第2の分解手法
第2の分解手法として、係数行列Cを疎にするデータ非依存型の分解手法を説明する。第2の分解手法では、実数行列分解部105は、分解誤差である下式(31)のコスト関数g2を解くことで分解を行う。
ただし、基底行列Mは二値であり、M∈{−1,1}dxkである。また、|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のゼロ要素にかかわる部分を省略することができ、さらに高速に内積計算を行うことができる。
4−5−3.第3の分解手法
次に、第3の分解手法を説明する。第1の分解手法では、コスト関数g1として、分解誤差
を定義し、この分解誤差を最小化することを考えた。しかしながら、実数行列を基底行列と係数行列との積に近似した後に実際に近似をしたいのは、特徴ベクトルと実数行列の積QTpである。
そこで、第3の分解手法では、特徴ベクトルpをあらかじめS個集め、これをまとめたものをP∈RdxSとする。そして、分解誤差を
と定義して、これを最小化する。即ち、第3の分解手法では、実数行列分解部105は、下式(32)のコスト関数g3を解くことで分解を行う。
このコスト関数g3によれば、実数行列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−5−4.第4の分解手法
第4の分解手法は、第2の分解手法と第3の分解手法とを組み合わせてものである。具体的には、実数行列分解部105は、下式(33)のコスト関数g4を解くことで分解を行う。
このコスト関数g4によれば、実数行列Qは、実際のデータの分布に従って分解されることになるため、分解の際の近似精度が向上するとともに、係数行列Cを疎にすることができる。即ち、第2の分解手法のメリットと第3の分解手法のメリットをいずれも得ることができる。具体的な分解の手順は、第3の分解手法と同様である。
4−5−5.第1及び第2の分解手法の変形例
上記の第1及び第2のデータ非依存分解の手法は、分解数をkとしたとき、k2通り(三値分解の場合はk3通り)の探索が必要であるため、kが大きいときは、適用が難しい。そのような場合は、あらかじめ実数行列Qに所属する実数ベクトルqnの互いの類似度を調べ、似ている実数ベクトルどうしをクラスタリングし、各クラスタに対して第1又は第2の分解手法を適用すればよい。
ベクトル演算部106は、特徴ベクトルを用いた演算を行なう。演算の具体的内容については、後述にて、本例の特徴量演算装置100の応用例とともに具体的に説明する。この特徴ベクトルを用いた演算には、二値化された特徴ベクトルp∈{−1,1}dと実数行列分解部105にて分解された実数行列Qとの積QTpの計算が含まれる。以下では、まず、この積QTpの計算について説明する。
積QTpは、下式(34)のように式変形できる。
ここで、mi Tpは二値ベクトル同士の内積である。また、cn,iは、n番目のクラスの係数ベクトルcnのi番目の要素、即ち係数行列Cのi行n列の要素である。この二値ベクトル同士の内積mi Tpは、極めて高速に計算可能である。その理由は以下のとおりである。
二値ベクトル同士の内積は、ハミング距離の演算に帰着できる。ハミング距離とは、2つのバイナリコードにおいて、値が異なるビットを数えたものであり、2つの二値ベクトルの間のハミング距離は、すなわち値が異なる要素数を数えたものである。ここで、miとpのハミング距離をDhamming(mi,p)と記述すると、内積mi Tpは、
Dhamming(mi,p)と下式(35)の関係がある。
ここで、前述のとおり、dはバイナリコードのビット数である。
ハミング距離の演算は、2つのバイナリコードにおいて、XORを適用した後に、1が立っているビットを数えることで計算できるので、極めて高速である。二値ベクトルがバイナリコード(0と1のビット列)で表現されているのであれば、ハミング距離は、下式(36)で計算できる。
ここで、XOR関数はmiとpをバイナリコード表現で考えたときに排他的論理和を
取る操作であり、BITCOUNT関数はバイナリコードの1が立っているビット数を数えあげる処理のことである。
以上をまとめると、積QTpは下式(37)のように変形できる。
すなわち、dビットのハミング距離計算をk回行い、k個のハミング距離について、係数行列Cに関する重み付け和を計算し、定数項を足したものがQTpになる。よって、kが十分小さければ、QTpを浮動小数点精度で計算するよりも、はるかに高速に計算できるようになる。
データベース107には、実数行列分解部105にて分解された複数の実数行列Qについて、基底行列Mと係数行列Cの積が辞書データとして記憶されている。ベクトル演算部106は、データベース107から基底行列Mと係数行列Cとの積を読み出して、上記の演算を行う。
以上のように、本例の特徴量演算装置100によれば、特徴ベクトルを用いた演算処理に特徴ベクトルと実数行列との積演算が含まれている場合にも、特徴ベクトルを二値化した上で、実数行列についても、二値行列である基底行列と係数行列との積に分解するので、特徴ベクトルと実数行列との積の計算において、特徴ベクトルと基底行列との積を計算した上で、さらに係数行列との積を計算することで、特徴ベクトルと実数行列との積演算を高速化できる。
また、複数の実数ベクトルを1つの実数行列としてまとめ、その実数行列を二値行列である基底行列と係数行列とに分解するので、先願の技術のように各実数ベクトルをそれぞれ分解する場合と比較して、基底行列を構成する基底ベクトルの個数、即ち基底数を小さくすることができる。原理的には、1クラスあたり1個以下の基底数(即ち、基底数k≦クラス数L)とすることも可能である。
4−6.第4の実施の形態の第1の例の拡張
上記の第1の例では、二値ベクトル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を掛ければよい。
さらに、特徴ベクトル及び基底ベクトルを任意の二値ベクトルmi´´∈{α,β}d、p´´∈{γ,δ}dとしても、高速な内積演算が可能である。ここで、係数α、β、γ、δは実数であり、α≠β、γ≠δである。この場合、mi´´及びp´´は、−1及び1により定義される二値ベクトルmi及びpの各要素に線形変換を施すことで得られ、下式(38)及び(39)のように展開される。
なお、式(38)及び(39)中の太字の「1」は、長さがdですべての要素が1であるベクトルである。また、式(38)及び(39)中のA、B、C、Dは実数であり、式(38)及び(39)が成立するようにあらかじめ計算しておけばよい。
内積mi´´Tp´´は、下式(40)のように展開できる。
式(40)の括弧内の計算は、−1及び1からなる二値ベクトル同士の内積である。従って、特徴ベクトルが任意の二値の要素をもつ二値ベクトルにされ、かつ、実数行列を二値の基底行列と実数の係数行列との積に展開した場合にも、高速演算が可能である。
4−7.第4の実施の形態の第2の例
次に、第2の例の特徴量演算装置を説明する。第2の例の特徴量演算装置の構成は、図35に示した第1の例のそれと同じである。第1の例では、実数行列分解部105は、実数行列Qを式(28)によって二値の基底行列と実数の係数行列に分解したが、本例の特徴量演算装置100の実数行列分解部105は、実数行列を三値の基底行列と実数の係数行列に分解する。
実数行列分解部105は、d行L列の実数行列Q∈RdxLを、三値の基底行列と実数の係数行列の積に分解する。具体的には、実数行列分解部105は、d行L列の実数行列Q∈RdxLを、下式(41)によって、三値の要素を持つ基底行列Mと実数の要素を持つ係数行列Cに分解する。
ここで、M=(m1,m2,…,mk)∈{−1,0,1}dxkであり、C=(c1,c2,…,cL)T∈RkxLである。すなわち、基底行列Mは、k個の基底ベクトルmiからなり、ここで、基底ベクトルmiは、要素が−1、0、及び1のみをとるd次元の三値ベクトルであり、従って、基底行列Mは、要素が−1、0、及び1のみをとるd行k列の三値行列である。
また、係数行列Cは、L個(Lはクラス数)の係数ベクトルcnからなり、ここで、係数ベクトルcnは、k個の基底ベクトルに係る実数の係数を要素として持つk次元の実数ベクトルである。もちろん、QとMCはなるべく一致するように分解することが好ましいが、誤差を含んでもよい。実数行列分解部105は、第1の例と同様にして、第1〜第3の分解手法によって実数行列Qを分解できる。
ベクトル演算部106は、積QTpを計算する。以下では、積QTpを計算するベクトル演算部106を特に、積演算部106とも呼ぶ。積QTpは、下式(42)のように式変形できる。
ここで、mi Tpは、三値ベクトルmiと二値ベクトルpとの内積である。積演算部106は、ここで、三値ベクトルmiの代わりに、以下に定義する0置換ベクトルmi bin、フィルタベクトルmi filter、及び0要素数ziを用いる。
まず、積演算部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は、miの0の要素数ziを求める。ziは整数となる。積演算部106は、これらの二値ベクトルmi bin、フィルタベクトルmi filter、及び0要素数ziを用いて、式(42)におけるmi Tpを、下の式(43)及び式(44)によって計算する。
ここで、式(44)のAND関数は、二値ベクトルをバイナリコード表現で考えたときに、論理積を取る操作である。
以下、図40の具体例を用いて、式(43)及び(44)の導出を説明する。図40は、本例の計算例を示す図である。図40の例では、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となる。
式(44)における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で異なっている要素の個数が数え上げられ、Dfilterd_hamming(p,mi bin,mi filter)=2となる。
ここで、pとmiの要素のうち、1と1又は−1と−1の組となる要素の個数は、全要素数d=6から、非0で異なっている要素の個数Dfilterd_hamming=2と0である要素の個数zi=2を引くことで求められる。すなわち、1と1又は−1と−1の組となる要素の数=d−Dfilterd_hamming−zi=6−2−2=2となる。
mi Tpは、1と1又は−1と−1の組となる要素(積が1になる要素の組)の個数から、−1と1又は1と−1との組となる要素(積が−1になる要素の組)の個数を引いた値と等しいため、mi Tp=(d−Dfilterd_hamming−zi)−Dfilterd_hamming=d−zi−2Dfilterd_hammingとなり、式(43)が得られ、その値は、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と一致する。
式(42)〜(44)をまとめると、積QTpは、下式(45)のように変形できる。
積演算部106は、この式(45)によって、積QTpを計算する。
関数Dfilterd_hamming(p,mi bin,mi filter)は、ハミング距離演算と非常に似ており、AND演算が加わっただけである。したがって、Q∈RdxLを、三値行列と係数行列との積に分解した場合でも、QTpを浮動小数点精度で計算するよりも、はるかに高速にQTpを計算できるようになる。
以上のように、d次元の実数行列Q∈RdxLを、二値ではなく三値の基底行列と係数行列との積に分解することの利点は、式(37)の近似が、より少ない数の基底数の基底行列でも成立するようになることにある。すなわち、基底数を小さく抑えられることになるため、さらなる高速化につながる。
4−8.第4の実施の形態の第2の例の拡張
上記の第2の例では、二値ベクトル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及び三値ベクトルmiをp∈{α,β}d、mi∈{γ−δ,γ,γ+δ}dと一般化しても、高速な内積演算が可能である。ここで、α、β、γ、δは実数であり、α≠β、δ≠0である。この場合、mi及びpの各要素に下式(46)及び(47)の線形変換を施すことで、それぞれmi´´及びp´´が得られる。
なお、式(46)及び(47)中の太字の「1」は、長さがdですべての要素が1であるベクトルである。また、式(46)及び(47)中のA、B、C、Dは実数であり、式(46)及び(47)が成立するようにあらかじめ計算しておく。
内積mi´´Tp´´は、下式(48)のように展開できる。
式(48)の括弧内の計算は、−1及び1からなる二値ベクトル同士の内積、又は−1及び1からなる二値ベクトルと−1、0、1からなる三値ベクトルとの内積である。従って、特徴ベクトルが任意の二値ベクトルにされ、かつ、実数行列を上記のとおり一般化した三値行列を用いて展開した場合にも、そのような特徴ベクトルと実数行列との積を高速に演算できる。
4−9.応用例
次に、ベクトル演算部106における演算処理について説明する。上記の第1及び第2の例のベクトル演算部106は、二値化された特徴ベクトルpと複数の実数ベクトルqをまとめた実数行列Qとの積の計算を伴うものであるが、そのような演算処理は種々ある。すなわち、本実施の形態の上記の例は、特徴ベクトルを用いて演算処理を行なう種々の装置に応用できる。
4−9−1.第4の実施の形態の第1の応用例
本応用では、本実施の形態がHOG特徴量を用いてSVMにより複数種類の物体を認識する物体認識装置に応用される。図41は、物体認識装置の構成を示すブロック図である。物体認識装置107は、ピラミッド画像生成部171と、HOG特徴量抽出部172と、バイナリコード変換部173と、パラメータ決定部174と、パラメータ行列分解部175と、線形SVM識別部176と、ピーク検出部177とを備えている。
ピラミッド画像生成部171は、入力クエリとしての画像を取得して、当該画像を複数段階の倍率でそれぞれ縮小してなるG段のピラミッド画像を生成する。これにより、サイズの異なる物体に対処できる。このピラミッド画像生成部171は、図37に示したコンテンツ取得部161に対応する。HOG特徴量抽出部172は、ピラミッド画像の各段における画像を、16×16ピクセルのサイズのブロックに分割し、各ブロックからHOG特徴量を抽出する。HOG特徴量抽出部172は、各ブロックからD次元の特徴量を抽出する。このHOG特徴量抽出部172は、図37に示した特徴ベクトル抽出部162に対応する。バイナリコード変換部173は、各セルに与えられたD次元の特徴量を、d次元の二値ベクトルに変換する。このバイナリコード変換部173は、図37に示した特徴ベクトル二値化部163に対応する。
パラメータ決定部174は、認識したい対象の種類(大人、子供、車、バイクといった種類であって、パラメータで定義される)ごとに、それぞれ線形SVM識別部176における線形SVMにて用いる重みベクトルwn(n=1,2,…,L)及び実数のバイアスbn(n=1,2,…,L)を決定する。パラメータ決定部174は、学習用に用意された特徴量を用いて、学習処理によってL種類の重みベクトルwn及びバイアスbnを決定して、重みベクトルwnをまとめた重み行列Wを生成する。このパラメータ決定部174は、図37に示した実数行列取得部164に対応する。パラメータ行列分解部175は、重み行列Wを第1又は第2の例で説明した式(29)又は式(41)によって離散値の基底行列と係数行列との積に分解する。このパラメータ行列分解部175は、図37に示した実数行列分解部165に対応する。
線形SVM識別部176は、線形SVMによって特徴ベクトルの識別を行なう。線形SVM識別部176は、まず、sx×syブロックをひとまとまりとして、ウィンドウを構成する。1つのウィンドウから抽出される特徴ベクトルは、sx×sy×d次元のベクトルとなる。線形SVM識別部176は、この特徴ベクトルに対して、下式(49)の線形SVMを適用する。
ここで、線形SVMにおける積演算WTxは、第1又は第2の例として説明した実数行列と二値ベクトルの高速な積演算により実現できる。
検出位置付近では、検出結果が固まることがある。そこで、ピーク検出部177は、周辺でf(x)の値が最大になったところを、代表的な検出位置とする。この線形SVM識別部176及びピーク検出部177は、特徴ベクトルを用いた処理を行なう構成であり、図37のベクトル演算部166に対応する。
次に、この物体認識装置107において、HOG特徴量により、回転し得る物体を検出する例を説明する。図42は、回転する道路標識について、それぞれの回転角度で辞書wn及びバイアスbnを作成する場合を示している。図42において左右方向は道路標識の回転角度θを示している。
従来のアプローチでは、回転角度ごとに学習処理を行って辞書wn及びバイアスbnを取得する。その後、入力画像からHOG特徴量を抽出して、ウィンドウ(スライディングウィンドウ)をL回適用することでこの道路標識の検出を行っている。しかしながら、このような従来の手法では、1ウィンドウあたりL回の内積計算が必要となり、計算量が多くなる。また、検出の角度分解能は2pi/Lであり、荒い。
そこで、本応用例では、パラメータ決定部174が辞書wnをまとめて行列Qとし、SVM識別部176は、下式(50)により複数の辞書wnと特徴ベクトルpとの内積計算をまとめて行う。
このようにk個の整数基底に分解することにより、1ウィンドウあたり、k回の二値と二値との内積演算又は二値と三値との内積演算で処理が可能となる。このとき、隣り合う辞書同士が似ているため、整数基底の数kを小さくすることができ、原理的には1クラスあたり1個以下(k≦L)とすることも可能である。
本応用例では、さらに、ピーク検出部177が、係数行列Cの性質に着目した検出分解能の高精度化を行う。図43は、係数行列Cの性質を示す図である。実数ベクトルqnが回転角度θをパラメータとして、そのパラメータに従って変化するものである場合には、複数の実数ベクトルqnをまとめて実数行列Qを生成する際に、図42に示すように、複数の実数ベクトルqnをパラメータθの順に並べると、図43に示すように、係数行列Cの実数ベクトルqnが並べられた方向と同方向の各ベクトル、即ち係数行列Cの各行ベクトルの要素の行方向の変化が滑らかになる。
そこで、ピーク検出部177は、係数行列Cの行ベクトルを多項式でフィッティングして、下式(51)のように連続関数で表現する。
ここで、αiは、フィッティングの係数である。
これを用いて識別関数の式を整理すると、回転角度θにおける識別関数は下式(52)のようにパラメータθに関する連続関数の形式で表現できる。
ピーク検出部177は、この識別関数を用いてピークの検出を行う。ci(θ)は式(51)に示すように多項式であるから、fθ(p)もまた連続関数(連続の多項式)となる。図44は、fθ(p)の例を示すグラフである。図44において、横軸は回転角度θであり、縦軸はfθ(p)である。ピーク検出部177は、fθ(p)が正の最大をとるときのθを対象の回転角度、即ち特徴ベクトルpのパラメータ値として検出する。
以上のように、複数の辞書wnをまとめて行列Qを生成する際に、複数の辞書wnをそれが滑らかに変化するように、パラメータ(図42の例ではθ)の順に並べて行列Qを生成することで、識別関数をそのパラメータに関する多項式の形式で表現できるので、高い分解能でそのパラメータを検出できるようになる。
なお、上記ではパラメータを回転角度として説明したが、パラメータは例えばスケールであってもよい。すなわち、図36のようにウィンドウの大きさは固定とし、ウィンドウ内における人物のサイズ(スケール)ごとに、別々に識別器を学習しておき、スケールσに関して多項式のフィッティングを行い、スケールσに関して識別器のピークを求めることで、高精度にスケール推定をおこなえるようになる。また、このように工夫することで、ピラミッド画像自体の生成を不要とできる。さらにパラメータが複数であってもよい。例えば、回転角度θとスケールσの両方に関して上記の多項式へのフィッティングを行ってもよい。この場合、係数はci(θ,σ)のように、二次元の多項式となる。
また、係数αiは、まず係数行列Cを求めてから各行をフィッティングして求めることができるが、係数行列Cの個々の要素cn,iを求めずに直接係数αiを求めてもよい。さらに、フィッティングする関数は多項式でなくてもよく、例えば三角関数(サイン、コサイン)にフィッティングしてもよい。
4−9−2.第4の実施の形態の第2の応用例
本応用例では、本実施の形態がk−meansクラスタリングに応用される。図45は、k−meansクラスタリング装置の構成を示すブロック図である。k−meansクラスタリング装置108は、コンテンツ取得部181と、特徴ベクトル生成部182と、特徴ベクトル二値化部183と、代表行列更新部184と、収束判定部185と、代表行列分解部186と、最近接代表ベクトル探索部187とを備えている。
コンテンツ取得部181は、クラスタリングの対象となるN個のコンテンツを取得する。特徴ベクトル生成部182は、コンテンツ取得部181にて取得した各コンテンツからそれらの特徴量を特徴ベクトルpとして抽出する。特徴ベクトル二値化部183は、特徴ベクトル抽出部182にて抽出された各特徴ベクトルを二値化する。
代表行列更新部184は、まず、特徴ベクトル二値化部183で二値化されたN個の特徴ベクトルからk(=L)個をランダムに選出してこれを代表ベクトルqn(n=1,2,…,L)とし、これらの代表ベクトルqnをまとめた行列を代表行列Qとする。収束判定部185は、代表行列更新部24が代表行列を更新するごとに収束判定を行なう。収束判定部185にて収束したと判定された場合には、k−meansクラスタリング装置108はクラスタリングの処理を終了する。代表行列分解部186は、代表行列更新部184にて更新された代表行列を離散値(二値又は三値)行列に分解する。
最近接代表ベクトル探索部187は、特徴ベクトル二値化部183より入力されるN個の二値ベクトルをそれぞれ最も近傍の代表ベクトルqnに所属させる。最近接代表ベクトル探索部187は、この結果を代表行列更新部184に出力する。代表行列更新部184は、各代表ベクトルqnについて、それに所属する特徴ベクトル(二値化されている)の平均ベクトルを算出して、これを新しい代表ベクトルqnとする。このようにして代表行列更新部184で更新される代表ベクトルqnは、二値ベクトルの平均で算出されるので、実数ベクトルとなる。
従って、仮に代表行列分解部186がなければ、最近接代表ベクトル探索部187は、更新された代表ベクトル(実数ベクトル)と特徴ベクトル(二値ベクトル)との距離を求めるためにそれらの内積を計算しなければならない。そこで、本応用例では、上記のように、この代表ベクトルqn(実数ベクトル)の集合である代表行列Qを代表行列分解部186によって、第1又は第2の例で説明したように、離散値(二値又は三値)行列と実数の係数行列との積に分解する。それによって、最近接代表ベクトル探索部187における、各特徴ベクトルと各代表ベクトルとの距離の計算を高速にでき、よって各特徴ベクトルが最も近接する代表ベクトル(すなわち、所属すべき代表ベクトル)を高速に探索できる。
4−9−3.第4の実施の形態の第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−分木を構築し、上記提案の木探索の原理により近似的に最近傍点を探索する。この手法は、データが実数ベクトルであり、かつノードに登録されている代表ベクトルが二値ベクトルである場合を前提として設計される。但し、データが二値ベクトルであって、ノードに登録されている代表ベクトルが実数ベクトルである場合にも、第1又は第2の例を採用することで、木探索を高速化できる。
4−10.第4の実施の形態の変形例
特徴量演算装置106において、コンテンツ取得部161、特徴ベクトル生成部162、特徴ベクトル二値化部163、実数行列取得部164、実数行列分解部165、及びベクトル演算部166の一部と他の部分とが別々の装置として構成されていてもよい。特に、コンテンツ取得部161、特徴ベクトル生成部162、特徴ベクトル二値化部163、及びベクトル演算部166が特徴演算装置106に搭載され、実数行列取得部164、及び実数行列分解部165が別の装置に搭載されてよい。この場合には、実数行列分解部165にて分解された複数の実数行列が特徴演算装置106のデータベース167に記憶され、ベクトル演算部166は、データベース167から分解された複数の実数行列を取得する。
上記の実施の形態の例では、基底行列Mが二値又は三値であったが、基底行列Mが二値又は三値でなくともよい。基底行列Mのとり得る要素の種類が有限の数であれば上記の分解手法を適用して実数行列を分解することができる。また、係数行列Cも、基底行列Mと同様にあらかじめ定められた離散的な値でもよい。例えば、係数行列Cの要素を2のべき乗に制約してもよく、そうすることで、処理を高速化できる。また、分解する実数行列Qの要素の平均値が著しく大きい(若しくは小さい)場合、すなわち、平均値が0から著しく離れている場合には、この平均値をあらかじめ実数行列Qの各要素から引いてオフセット実数行列を生成し、このオフセット実数行列Q´を基底行列Mと係数行列Cに分解すると、より少ない基底で式(29)や式(41)の近似分解を行うことができる。
なお、第1及び第2の例において、コンテンツ取得部161にて取得されるコンテンツデータは、車両から得られる計測データであってよい。さらに、車両から得られる計測データは、例えば、車両に設置されたカメラで撮影された画像データ、車両に設置されたセンサで計測されたセンシングデータであってよい。この場合に、関連性判定装置としての特徴演算装置106のベクトル演算部166は、計測データと辞書データとの関連性を判定する。例えば、計測データとして、車両に設置されたカメラで撮影された画像データが取得される場合には、辞書データとして複数の人物画像のデータがデータベースに保存されており、関連性判定装置としての特徴演算装置106のベクトル演算部166は、上記の応用例のいずれかによって、画像データの画像に人物が含まれるか否かを判定してよい。
5.第5の実施の形態
上記の第1ないし第4の実施の形態は、組み合わせて実施することが可能である。特に、第1の実施の形態は、第2ないし第4の実施の形態と組み合わせることができる。例えば、第3の実施の形態の第1の応用例として説明した物体認識装置104(図33)におけるピラミッド画像生成部141、HOG特徴量抽出部142、バイナリ変換部143、及び線形SVM識別部146が、第1の実施の形態として説明したハイブリッド・ピラミッド法(図9)に従って各処理を行ってよい。さらに、この物体認識装置104のパラメータ分解部145が、第4の実施の形態の特徴量演算装置105(図37)の実数行列分解部155と同様に、複数の実数ベクトルからなる実数行列を、係数行列と、要素として二値または三値の離散値のみを持つ複数の基底ベクトルからなる基底行列との積に分解して、線形SVM識別部146が、特徴ベクトルと複数の実数ベクトルの各々との内積の計算として、特徴ベクトルと基底行列との積を計算し、さらに当該積と係数行列との積を計算して、その結果を用いて、複数の実数ベクトルの各々と特徴ベクトルとの関連性を判定してもよい。
5−1.第5の実施の形態の第1の例
図46は、第5の実施の形態の第1の例の識別装置における処理を示すブロック図である。この識別装置109における処理は、図9に示した二値高速識別の処理に相当する。本例では、入力コンテンツから第1の実施の形態に従ってHOG特徴量が抽出されて二値化される。識別装置109は、入力コンテンツの二値特徴量が得られると、それに対してサイズの異なる複数種類のウィンドウをスライドさせて、ウィンドウ内から特徴量を切り出す(ステップS21)。この切り出し処理は、例えば、横4ブロック×縦8ブロック、横5ブロック×縦10ブロック・・・というように、ウィンドウのサイズ(縦横ブロック数)を変えながら切り出せばよい。これにより、サイズの異なる複数種類のウィンドウの切り出しが実現できる。この場合、それぞれ切り出した特徴量の次元数は、切り出したときの縦横ブロック数に応じて異なるものになる。
三値分解済み辞書119には、サイズの異なる複数種類のウィンドウに対応する辞書(識別モデル)が記憶されている。この三値分解済み辞書119は、第3の実施の形態に従って、実数ベクトルを三値の基底行列と係数の積に分解することで得られたものである。
特徴量が切り出されると、切り出された二値特徴量と三値分解済み辞書119とを用いて、第3の実施の形態に従って、三値基底のカスケードによる認識が行われる(ステップS22)。このようにカスケード識別を行うことで、識別処理を高速化できる。
5−2.第5の実施の形態の第2の例
図47は、第5の実施の形態の第2の例の識別装置における処理を示すブロック図である。この識別装置110における処理は、図9に示した二値高速識別の処理に相当する。本例でも、入力コンテンツから第1の実施の形態に従ってHOG特徴量が抽出されて二値化される。入力コンテンツの二値特徴量が得られると、ウィンドウ内から特徴量を切り出す処理が行われる(ステップS31)。本例では、特徴量を切り出す処理(ステップS31 )は、複数の辞書に対して一度だけ行う。切り出しの処理が一度だけになることで、処理が簡略化される。
三値分解済み辞書1101及び三値分解済み辞書1102には、認識したい認識対象に関して、認識したいサイズごとに別々に学習された辞書(識別モデル)を記憶しておけばよい。ステップS31では切り出し処理が一度だけであるため、どの辞書においても検出のためのウィンドウのサイズが一定であるが、学習サンプルを図36ように認識対象のサイズ(倍率)を変え、倍率ごとに独立して辞書を学習することで、異なるサイズの対象を認識できるようになる。三値分解済み辞書1101、 1102は、第3の実施の形態に従って、実数ベクトルを三値の基底行列と係数の積に分解することで得られたものである。
特徴量が切り出されると(ステップS31)、識別装置110は、サイズのことなる複数(K種類)のウィンドウの各々について、識別処理S30を行う。各識別処理S30では、切り出された二値特徴量と三値分解済み辞書1101とを用いて、第3の実施の形態に従って、三値基底のカスケードによる識別が行われる(ステップS32)。このカスケード識別(ステップS32)において検出がされなかった場合には、識別装置110は、そのサイズのウィンドウについて、直ちに非検出の結果を出力する。識別装置110は、二段階のカスケード識別を行う。最初のカスケード識別(ステップS32)にて検出された場合には、この二値特徴量に対して、第2の実施の形態に従って、XORとビットシフトによる共起をとることでFIND特徴量を生成する(ステップS33)。
FIND特徴量が生成されると(ステップS33)、FIND特徴量と三値分解済み辞書1102とを用いて、第3の実施の形態に従って、三値基底のカスケードによる識別が行われる(ステップS34)。このように、共起を用いないカスケード識別で精度の粗い識別を行って、検出されたものについて共起を用いたカスケード識別をするという二段階のカスケード識別によって、さらなる高速化が可能である。
5−2.第5の実施の形態の第3の例
図48は、第5の実施の形態の第3の例の識別装置における処理を示すブロック図である。この識別装置120における処理は、図9に示した二値高速識別の処理に相当する。本例でも、入力コンテンツから第1の実施の形態に従ってHOG特徴量が抽出されて二値化される。入力コンテンツの二値特徴量が得られると、識別装置120は、ウィンドウをスライドさせながら、ウィンドウ内から特徴量を切り出す(ステップS41)。本例では、特徴量を切り出す処理(ステップS41)は、複数の辞書に対して一度だけ行う。切り出しの処理が一度だけになることで、処理が簡略化される。
三値分解済み辞書1201には、認識したい認識対象に関して、認識したいサイズごとに別々に学習された辞書(識別モデル)を記憶しておく。ステップS41では切り出し処理が一度だけであるため、どの辞書においても検出のためのウィンドウのサイズが一定であるが、学習サンプルを図36ように認識対象のサイズ(倍率)を変え、倍率ごとに独立して辞書を学習することで、異なるサイズの対象を認識できるようになる。特徴量の切り出し(ステップS41)が一度だけであり、どの辞書においても次元数が同じであるため、第4の実施の形態を適用可能となる。そこで、この三値分解済み辞書1201は、第4の実施の形態に従って、複数の実数ベクトルをまとめた実数行列を三値の基底行列と係数行列の積に分解することで得られたものとする。
特徴量が切り出されると(ステップS41)、識別装置120は、切り出された二値特徴量と三値分解済み辞書1201とを用いて、サイズのことなる複数(K種類)のウィンドウの各々について、識別処理を行う(ステップS40)。この識別処理では、第4の実施の形態に従って、三値基底のカスケードによる識別を行うが(ステップS42)、このとき、全ての辞書に対応する線形識別関数を一括して計算する。一括して計算した線形識別関数のうち、符号が正になった辞書に対応するウィンドウを検出結果として出力する(ステップS43)。このように、全ての辞書に対応する線形識別関数を一括して計算できるようになるため、さらなる高速化が可能である。