(57)【要約】【課題】  メモリ・アーキテクチャを考慮して、高速なアクセスが可能となるように処理対象データのアクセス方法を決定することで、高速な情報処理を実現すること。【解決手段】  メイン・メモリに格納されている処理対象データの要素データを、認識辞書のような所定の情報処理規則に従って順次参照して情報処理を行う情報処理方法において、当該情報処理規則を生成する際に、処理対象データの要素データのメイン・メモリへの格納規則と、参照済みの要素データの位置の履歴と、キャッシュ・アーキテクチャに基づいて、キャッシュ・ヒット率が向上するように、要素データを参照する順序を決定する。【選択図】  図１
2014106736.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサとメモリとを有するターゲットシステムにて、対象データに対して情報処理を実行するための情報処理規則を生成する情報処理装置であって、
前記ターゲットシステムの構成要素に係る構成情報を入力する入力手段と、
入力した前記構成情報に従い、前記プロセッサが前記情報処理を実行する際の、前記メモリにおける前記対象データの各位置の要素を参照するための参照負荷を算出する算出手段と、
該算出手段で算出した前記参照負荷を用いて、参照すべき前記要素の位置と順序を表わす情報処理規則を決定する決定手段と
を有することを特徴とする情報処理装置。
【請求項２】
前記対象データは、画像データ若しくは配列状の特徴量データであることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記情報処理とは、前記対象データが特定のクラスであるか否かを識別するクラス識別処理であることを特徴とする請求項１に記載の情報処理装置。
【請求項４】
前記算出手段は、前記参照負荷を算出する際には、前記プロセッサが前記メモリの内のデータを参照する際の効率を向上するためのキャッシュ・アーキテクチャと、前記対象データの各要素を前記メモリ上に所定の配置に格納する格納規則とを考慮することを特徴とする請求項１に記載の情報処理装置。
【請求項５】
前記算出手段は、それまでに参照された前記処理対象データの前記要素の位置の履歴に基づくキャッシュ・ヒットを考慮して前記参照負荷を算出することを特徴とする請求項１に記載の情報処理装置。
【請求項６】
前記格納規則はラスタ・スキャン方式であって、前記算出手段は、参照済みの前記対象データの前記要素に対し、キャッシュ・ラインに収まる範囲で水平方向に近傍の位置の前記要素を、負荷が少であるものとして前記参照負荷を算出することを特徴とする請求項４に記載の情報処理装置。
【請求項７】
前記格納規則はZ-ordering方式であって、前記算出手段は、参照済みの前記対象データの前記要素に対し、Z-ordering方式の並びでキャッシュ・ラインに収まる範囲の近傍の位置の前記要素を、負荷が小であるものとして前記参照負荷を算出することを特徴とする請求項５に記載の情報処理装置。
【請求項８】
前記キャッシュ・アーキテクチャは、ダイレクト・マップ方式であって、前記処理対象データの前記要素の前記位置の履歴には、キャッシュ・ライン毎に直前１回分以上の参照位置に相当する情報を含むことを特徴とする請求項５に記載の情報処理装置。
【請求項９】
前記キャッシュ・アーキテクチャは、セット・アソシエイティブ・キャッシュ方式であって、
前記処理対象データの前記要素の前記位置の履歴には、キャッシュ・ライン毎に、前記セット・アソシエイティブ・キャッシュ方式のウェイ数に等しい数ぶんの直前の参照位置に相当する情報を含むことを特徴とする請求項５に記載の情報処理装置。
【請求項１０】
前記決定手段は、前記参照すべき前記要素の位置を、前記参照負荷が少なくなるように逐次選択し、選択した順序を参照する順序として決定することを特徴とする請求項１に記載の情報処理装置。
【請求項１１】
前記決定手段は、前記情報処理を実行するために必要な前記要素の位置を一通り選択した後に、前記参照負荷が少なくなるように参照する順序を決定することを特徴とする請求項１に記載の情報処理装置。
【請求項１２】
請求項１に記載の情報処理装置で生成された情報処理規則を用いて、生成した前記情報処理規則を参照し、前記対象データに対する情報処理を実行することを特徴とする電子デバイス。
【請求項１３】
プロセッサとメモリとを有するターゲットシステムにて、対象データに対して情報処理を実行するための情報処理規則を生成する情報処理装置の制御方法であって、
入力手段が、前記ターゲットシステムの構成要素に係る構成情報を入力する入力工程と、
算出手段が、入力した前記構成情報に従い、前記プロセッサが前記情報処理を実行する際の、前記メモリにおける前記対象データの各位置の要素を参照するための参照負荷を算出する算出工程と、
決定手段が、前記算出工程で算出した前記参照負荷を用いて、参照すべき前記要素の位置と順序を表わす情報処理規則を決定する決定工程と
を有することを特徴とする情報処理装置の制御方法。
【請求項１４】
コンピュータに読み込ませ実行させることで、前記コンピュータを、請求項１乃至１１のいずれか１項に記載の情報処理装置として機能させるためのプログラム。
【請求項１５】
請求項１４に記載のプログラムを格納したことを特徴とするコンピュータが読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ上に格納された画像等のデータの高速演算処理を実現する技術に関するものである。
【背景技術】
【０００２】
従来、画像等のメモリ上に配列状に格納された多数の要素データに対し、所定の規則に則り特定位置の要素データを順次参照して演算処理を行い、結果を得る情報処理方法および情報処理装置が知られている。
【０００３】
例えば非特許文献１では、画像データ中に存在する人の顔等の対象物体を高速に検出するBoosting型識別器を用いた手法を提案している。この手法では、予め機械学習しておいたカスケード接続された弱判別器の辞書に基づき、検出枠（Sliding window）内の所定位置の特徴量を順次参照・演算したスコアを累積し、演算を打ち切るか、或いは最終的に対象物であるかを判別する。
【０００４】
ここで各弱判別器が参照する特徴量には、複数の局所的な矩形内総和値の線形和として計算されるHaar like特徴と呼ばれるものを用いている。矩形内総和値は、元の輝度画像から事前に生成しておいた、積分画像（Integral Image或いはSummed area table）と呼ばれる画像の４点のみを参照して加減算することにより、低負荷で計算することができる。
【０００５】
各弱判別器が参照する特徴量の位置は、多数のサンプルデータを用いた事前の学習において、その弱判別器が実行される時点での判別性能が最大になる特徴量が選ばれている。また、弱判別器で計算されたスコアにそれまでのスコアを加算した累積スコアが、所定の閾値に到達していない場合は、以後の演算を打ち切ることによって、全体の演算量を低減し高速化している。
【０００６】
また特許文献１では、特徴量として判別対象の輝度画像の中の弱判別器毎に事前に学習して定められた２点の輝度差を用いて、非特許文献１と同様の多数の弱判別器による高速な認識処理を実現している。
【０００７】
簡単な演算により２値の判別を行うノードを、多数組み合わせた多クラス識別器を構築し、高速かつ高精度な多クラス識別を実現する手法も提案されている。例えば、非特許文献２のRandomized treesと呼ばれる手法は、多数のノードを二分木で組み合わせた識別器を用いることで、不要な判別を行わないで済むようにしている。非特許文献３のRandom Fernsと呼ばれる手法では、同一階層では同一の２値特徴を用いた識別器を利用する、さらに高速な多クラス識別器を提案している。
【０００８】
上記のように従来の画像等の識別処理を行う情報処理方法においては、識別器の演算量の低減のみに着目して高速化を実現するものが多かった。
【０００９】
一方で、このような情報処理を実行するコンピュータ等の処理系の回路には、多種多様なメモリ・アーキテクチャが存在する。例えば、大容量ではあるが処理プロセッサからのアクセス時間が長いDRAMと、処理プロセッサの近傍に配置され高速にアクセス可能であるが容量の少ないSRAMの両方を備えたアーキテクチャは、一般的に良く使われている。
【００１０】
このようなアーキテクチャでは、DRAMからSRAMへの転送をバースト転送と呼ばれる所定のサイズの連続する領域を一度に転送することにより高速化するものがある。
【００１１】
或いは、DRAMのデータにアクセスする際には所定の範囲をSRAMにコピーし、次に同範囲内のデータを参照する場合にはSRAMのみをアクセスするようにしたキャッシュ機構も良く使われている。さらにキャッシュ機構には、ダイレクト・マップ方式やセット・アソシエイティブ・キャッシュ等、様々な方式が提案されている。
【００１２】
データを高速に演算処理するためには、演算量のみでなく、上述のようなメモリ・アーキテクチャを合わせて考慮し、データ・アクセスを実行する際に生ずる負荷（以後、参照負荷と呼ぶ）をなるべく低減してやることが有効である。
【００１３】
特許文献２は、判別器を前半部と後半部に分け、前半部の判別器が参照する局所特徴を、主走査方向に線状に長い形状に制限する。若しくは、１ライン置きに間引いた範囲の画素内に制限して選択する。これによりDRAMからSRAMへの転送時にバースト転送しやすくすることにより高速化を実現している。
【００１４】
特許文献３は、画像の各ブロックに対し識別処理辞書に相当するヒストグラムを参照して識別処理を行う処理である。ここでヒストグラムのビンの並びを通常と変えることで、ヒストグラム参照時のキャッシュ・ヒット率を向上させている。
【先行技術文献】
【特許文献】
【００１５】
【特許文献１】特許第４５５３０４４号公報
【特許文献２】特開２０１０−１０２５８４号公報
【特許文献３】特開２００５−１９０４７７号公報
【非特許文献】
【００１６】
【非特許文献１】“Rapid Object Detection using a Boosted Cascade of Simple Features”, P. Viola and M. Jones, IEEE Conference on Computer Vision and Pattern Recognition 2001.
【非特許文献２】“Keypoint recognition using randomized trees”, V. Lepetit and P. Fua, IEEE Transaction on Pattern Analysis and Machine Intelligence, 28(9):1465-1479, Sept. 2006.
【非特許文献３】“Keypoint recognition using Random Ferns”, M. Ozuysal, M. Calonder, V. Lepetit, and P. Fua, IEEE Transaction on Pattern Analysis and Machine Intelligence, 32(3):448 -461, March 2010.
【発明の概要】
【発明が解決しようとする課題】
【００１７】
非特許文献１乃至３および特許文献１に開示される技術では、情報処理を実行する処理系のメモリ・アーキテクチャについては考慮していない。特許文献２に開示される技術は、主としてバースト転送のみに着目しており、キャッシュ・アーキテクチャについては直接的には考慮していない。特許文献３に開示される技術では、事前に生成しておいたヒストグラム、すなわちオブジェクト検出処理のための識別処理辞書データを参照する際のキャッシュ・ヒット率を向上するものであるが、処理対象の画像データそのものの参照については考慮していない。
【００１８】
本発明は、上記の課題に鑑みなされたものであり、画像データを構成する画素等の如く多数の要素を順次参照する処理を、それを実装するターゲットシステムのハードウェアの構成をも加味して効率化させるための情報を得る技術を提供しようとするものである。
【課題を解決するための手段】
【００１９】
この課題を解決するため、例えば本発明の情報処理装置は以下の構成を備える。すなわち、
プロセッサとメモリとを有するターゲットシステムにて、対象データに対して情報処理を実行するための情報処理規則を生成する情報処理装置であって、
ターゲットシステムの構成要素に係る構成情報を入力する入力手段と、
入力した前記構成情報に従い、前記プロセッサが前記情報処理を実行する際の、前記メモリにおける前記対象データの各位置の要素を参照するための参照負荷を算出する算出手段と、
該算出手段で算出した前記参照負荷を用いて、参照すべき前記要素の位置と順序を表わす情報処理規則を決定する決定手段とを有する。
【発明の効果】
【００２０】
本発明によれば、情報処理を実行するターゲットシステムのメモリ・アーキテクチャを考慮した上で、高速なアクセスが可能なように処理対象データのアクセス方法を決定するので、高速な情報処理を実現することが可能となる。
【図面の簡単な説明】
【００２１】
【図１】実施形態に係る画像識別処理用の辞書の学習処理のフローチャート。
【図２】実施形態に係る識別処理辞書を用いた識別処理を実行するターゲットシステムの構成例を示すブロック図。
【図３】実施形態に係る画像識別処理の流れを説明するブロック図。
【図４】実施形態に係るダイレクト・マップ方式のキャッシュアーキテクチャへの適用を説明する図。
【図５】実施形態に係るBoosting型のカスケード接続の識別器を模式的に表す図。
【図６】Boosting型識別器における２種類の閾値決定方法を説明する図。
【図７】学習処理におけるキャッシュヒット判定処理の一例を示すフローチャート。
【図８】Boosting型識別器による識別処理の流れを説明するフローチャート。
【図９】Sliding window処理を説明する図。
【図１０】実施形態におけるダイレクトマップ方式のキャッシュアーキテクチャでSliding window処理を実行する場合の動作の説明図。
【図１１】実施形態に係るセットアソシエイティブ方式のキャッシュアーキテクチャへの適用を説明する図。
【図１２】メモリへの格納規則とアドレス計算方法の例を説明する図。
【図１３】実施形態に係るTree型およびFern型の識別器を説明する図。
【図１４】Fern型識別器に適用する一実施形態における学習処理のフローチャート。
【図１５】Fern型識別器に適用する一実施形態におけるバイナリ特徴の並べ替え処理のフローチャート。
【図１６】Fern型識別器に適用する一実施形態におけるバイナリ特徴の並べ替え処理の一例を説明する図。
【図１７】Fern型識別器による識別処理の一例を示すフローチャート。
【図１８】キャッシュヒット判定処理の他の例を示すフローチャート。
【図１９】実施形態が適用する情報処理装置のブロック構成図。
【発明を実施するための形態】
【００２２】
図１９は実施形態における情報処理装置のブロック構成図である。図示の如く、本装置は、装置全体の制御を司るＣＰＵ１９０１、ＢＩＯＳやブートプログラムを格納しているＲＯＭ１９０２、ＯＳやアプリケーションをロードするため、並びに、ＣＰＵ１９０１のワークエリアとして利用するためのＲＡＭ１９０３を有する。また、この装置は、大容量の記憶装置であるハードディスク（ＨＤＤ）１９０４、キーボード１９０５、マウス等のポインティングデバイス１９０６、ビデオメモリを有し表示処理を司る表示制御部１９０７、液晶等で構成される表示装置、並びに、外部との通信を行うためのインタフェース（Ｉ／Ｆ）１９０９を有する。上記構成において、本装置の電源がＯＮになると、ＣＰＵ１９０１はＲＯＭ１９０２のブートプログラムに従って実行し、ＨＤＤ１９０４に格納されたオペレーティングシステム（ＯＳ）をＲＡＭ１９０３にロードする。この後、ＣＰＵ１９０１は、そのＯＳの下でＨＤＤ１９０４に格納された、本実施形態におけるアプリケーションプログラムをＲＡＭ１９０３にロードし実行することで、本装置が、開発対象の製品における、処理規則情報の生成装置として機能することになる。
【００２３】
実施形態では、説明を簡単なものとするため、製品開発対象の電子デバイスがデジタルカメラ（撮像装置）であるものとして説明する。また、昨今のデジタルカメラには、被写体となる人物の顔認識等のクラス識別処理を実装するものが少なくない。そこで、本実施形態では、製品開発対象のデジタルカメラのハードウェアを構成する情報を加味した、クラス識別処理の最適化するための画素の参照順序を如何にすると効率的に行えるか（高速化できるか）を示す情報を決定する例を説明する。このため、製品開発対象のデジタルカメラの、プロセッサを含むハードウェアに係る情報（以下、ハードウェア構成情報）を先ず入力する必要がある。この入力は、インタフェース１９０９を介して行われるものとする。この場合のインタフェース１９０９を介する入力源は、ネットワークストレージ、ＵＳＢメモリ等の記憶媒体等で良く、その種類は問わない。入力するハードウェア構成情報には、プロセッサのコアの数、キャッシュメモリのサイズ、方式、並びに、主記憶メモリ（多くの場合はＤＲＡＭ）の容量、データバスのバス幅（ビット数）について記述がなされているものとする。上記を踏まえ、以下に本発明に係る実施形態を説明する。
【００２４】
［第１の実施形態］
＜画像識別処理基本システム構成＞
図２(a)は、製品開発対象のデジタルカメラにおける、ハードウェア構成情報で表わされるプロセッサ周辺の構成を示している。そして、この構成にて、画像が特定クラスであるかを識別するクラス識別処理を実行する場合の、効率的な要素データ（画素）の参照順序を規定する情報（情報処理規則）を生成する例を説明する。
【００２５】
尚、本明細書においては、クラス識別処理のような情報処理を実行する図２（ａ）のような処理系（実施形態ではデジタルカメラ）を、以降、ターゲットシステムと呼ぶ。このターゲットシステムが情報処理を実行する際には、機械学習等の技術により事前に生成された情報処理規則を用いる。この情報法処理規則の生成処理を実行する処理系は、ターゲットシステムと異なる処理系であっても構わない。
【００２６】
また図３は、本実施形態のターゲットシステムで実行される情報処理である、画像のクラス識別処理の大まかな流れを説明するブロック図である。
【００２７】
図２(a)のターゲットシステムにおいて、２０１はシステム・バスであって、システムの構成要素を相互接続しデータや信号のやり取りを可能とする。２０２はＣＰＵ等のプロセッサ・コアであって、各種演算やデータ処理を行う。尚、本システムは、プロセッサ・コアが１つのみのシングルプロセッサ構成として説明するが、本発明はこれに限定されるものではない。メイン・メモリ２０４はプロセッサ・コア２０２が演算処理を行う対象となるデータや、実行する処理プログラムを格納するメモリである。通常ＤＲＡＭで構成され、比較的記憶容量は大きいが低速である。プロセッサ・コア２０２は、２０３のキャッシュ・アーキテクチャを介して、２０４のメイン・メモリ等にアクセスを行うことで高速化を実現している。キャッシュは通常ＳＲＡＭで構成され、ＤＲＡＭに比べて通常数十倍以上高速であるが、比較的記憶容量は少ない。本実施形態におけるキャッシュ・アーキテクチャについては後述する。２０５は入出力インターフェースであり、システム外部やユーザに対する入出力を司る。２０６は例えばハード・ディスク装置などの大容量不揮発性記憶装置であって、システムの実行するプログラムやパラメータ等を恒久的に記憶している。尚、本システムで実行されるプログラムは、システム起動時にハード・ディスク装置２０６から一旦メイン・メモリ２０４に転送され、プロセッサ・コア２０２は、メイン・メモリ２０４上のプログラム命令を順次読み取って実行する。
【００２８】
本実施形態における画像のクラス識別処理を実行する際は、まず図３の符号３０１に示すように、識別対象画像を入力、若しくは受け取る。本実施形態においては、説明を容易にするため、入力される処理対象画像（処理対象データ）は１６×１６画素サイズ固定とする。また、入力画像はRGBのカラー画像とする。処理対象画像はＨＤＤ２０６に既に格納されているものとする。ただし、その画像の発生源は、デジタルカメラやイメージスキャナでも構わないし、描画アプリケーションで作成された画像としても良く、その種類は問わない。
【００２９】
次に、図３の符号３０２にて、所定の前処理を行う。本実施形態では、同サイズのままモノクロ輝度画像化、コントラスト補正、ガウスぼかし処理を行うものとする。なお、この段階で、クラス識別処理の対象の画像は、モノクロ多値画像データとなっており、１画素につき８ビットとなっているものとする。尚、本発明の適用は、如何なる入力画像・前処理の組み合わせであっても良く、これを制限するものではない。
【００３０】
前処理３０２された処理対象画像は、メイン・メモリ２０４の所定アドレスに格納される。符号３０３に示す識別処理辞書（すなわち情報処理規則）は、当初はハード・ディスク装置２０６に記憶されており、システム起動時にメイン・メモリ２０４の所定アドレスに転送されている。図示の符号３０４の識別処理では、プロセッサ２０２が識別処理辞書３０３を順次参照し、識別辞書３０３の規定する処理規則に則って、メイン・メモリ２０４の所定アドレスに格納されている処理対象画像に対して、処理を実行する。ここで実行される処理の詳細については後述する。
【００３１】
識別処理結果は符号３０５にて出力され、ユーザや外部装置、或いは後処理等に通知される。
【００３２】
＜ダイレクト・マップ方式＞
本実施形態においては、ターゲットシステムのキャッシュ・アーキテクチャ２０３は、ダイレクト・マップ方式と呼ばれる構成を取っている。以下、本実施形態におけるキャッシュ・アーキテクチャを、図４を用いて説明する。
【００３３】
キャッシュの基本単位はキャッシュ・ラインと呼ばれる。キャッシュ・ラインのサイズは種々有って、通常、２のべき乗バイトとして設定される。本実施形態では、説明を容易にするため、ターゲットシステムのシステムのデータ・バス幅を８ビットとし、ライン・サイズを仮に４バイトとする。
【００３４】
但し、現在のシステムでは、データ・バスは３２ビット以上で、キャッシュのライン・サイズも、通常は３２バイト以上のより大きなサイズであることが多い。また、本実施形態では１段のみのキャッシュ構成を取るターゲットシステムで説明するが、これ以外にもL1からL3キャッシュまでの多段階構成のキャッシュ・アーキテクチャが存在する。多段構成のキャッシュ・アーキテクチャでは、通常プロセッサ・コアから遠くなる程、容量は増加し、ライン・サイズも併せて増加する傾向があるが、本発明の基本的な考え方を以下説明するのと同様に適用できることは言うまでもない。
【００３５】
図４(a)において、符号４０１は、キャッシュ・メモリを構成するデータ・アレイと呼ばれるメモリである。データ・アレイの１矩形がキャッシュのラインを表している。本キャッシュ・メモリは、index０から７までの８つのラインで構成されるものとしている。すなわち本キャッシュ・メモリの容量は、４×８の３２バイトである。尚、ライン・サイズと同様、実際のキャッシュ・メモリではより大量のライン数を持つ場合が多く、総容量で数キロから数メガバイト程度のものもあるが、本実施形態では８ラインとしている。このように、本実施形態では最も簡単な構成で説明しているが、実際に用いられるキャッシュ構成に合わせて読みかえれば、本発明が適用可能であることは自明であろう。
【００３６】
符号４０３は、識別対象画像データ４０４を格納するよう定められたメイン・メモリ２０４の一部を示している。各マス目が４バイトであり、水平方向に連続する４画素分のデータを格納することになる。本実施形態においては、識別対象画像データ４０４は上述のとおり１６×１６画素である。従って、上述のキャッシュ・ラインの構成では、１ライン目を含む奇数ライン目の１６×８画素のデータはメイン・メモリ４０３の左半分の領域に、２ライン目を含む偶数ライン目の１６×８画素のデータは右半分の領域に格納される。
【００３７】
データ・アレイ４０１の各ラインが担当するメイン・メモリ２０４のアドレスは、それぞれ異なった範囲となるように設定されている。
【００３８】
メモリ・アドレスは図４(b)のように、下位ビット(LSB)から順に、４１１のライン内における位置(Position)、４１２のライン・インデクス(Line Index)、４１３のタグ(Tag)を連結したものと見なすことができる。本実施形態では、ライン・サイズは４バイトとするので、Positionを表すためには２ビットのアドレスが必要である。また、ライン数は８とするので、Line Indexは３ビットである。本システムにおけるバスのアドレス空間を仮に１６ビットとすると、残りの１１ビットがTagとなる（もちろん現在の実際のシステムでは、３２ビットや６４ビット等のより大きなアドレス空間を持つことが多く、キャッシュのライン・サイズも大きいが、考え方は同様である）。
【００３９】
データ・アレイの各ラインは、メイン・メモリのアドレスの3bitのLine Indexの部分が、自己のライン・インデックス０乃至７に一致する領域を担当する。例えば符号４０９のラインは、Line Index部分が０となるアドレスのメイン・メモリの領域を担当する。符号４０３のメイン・メモリの一部に対して、図中の各矢印（例えば４１０）で対応付けられた４バイト・ライン幅の縦の列が、各キャッシュ・ラインが担当するメイン・メモリの範囲であることを示している。すなわち、プロセッサ２０２が図示の符号４１１に示されるいずれかの矩形（４バイト）をアクセスすると、その４バイトがline Indexが０の破線４０９にキャッシュのDataarryに格納される。このように、プロセッサ２０２が、メイン・メモリの何れかのアドレスにアクセスすると、当該アドレスを担当するデータ・アレイのライン・メモリには、当該アドレスの１バイトを含む１キャッシュライン分（すなわち４バイト）のデータがキャッシュに格納される。次に、同範囲の別のアドレスをプロセッサ２０２が読み出す場合には、メイン・メモリ２０４にはアクセスせず、キャッシュ２０３のデータ・アレイ４０１の当該ラインに格納されている値を読み取るので、非常に高速なアクセスが可能となる。
【００４０】
このとき、各データ・アレイのラインに、メイン・メモリのどのアドレスの値が格納されているかを管理するのが、タグ・アレイ４０２である。対応するラインのタグ・アレイには、現在格納されているメモリのアドレスのTagの値が格納されている。プロセッサ２０２があるアドレスを読み出すと、アドレスを図４(b)のように分解し、Line Indexに対応するタグ・アレイの値と、アクセス・アドレスのTagが一致するかを判定する。これが一致する場合には、データ・アレイには所望のデータが既に格納されているので、バス２０１を介したメイン・メモリ２０４へのアクセスは行われずキャッシュ２０３内の値を読み取る。尚、これらの判定やアクセスの切換はキャッシュに内蔵される専用ハードウェアにより非常に高速に行われる。
【００４１】
また、プロセッサ２０２がメモリへの書き込み動作を行う場合も同様であるが、別途しかるべきタイミングでキャッシュ２０３からメイン・メモリ２０２への書き戻し動作（フラッシング）を行う必要がある。さらにマルチ・コア等、複数のバス・マスターがシステムに存在する場合には、アクセス・タイミングによる不整合を起こさないよう制御（キャッシュ・コヒーレンシ）する必要が有るが、詳細な説明は省略する。
【００４２】
ダイレクト・マップ方式のキャッシュ・アーキテクチャでは、データ・アレイ４０１は、ライン・インデックス毎に１ラインずつしか存在せず、対応するタグ・アレイも１つずつとなっている。従って、同ラインが担当するメイン・メモリの別のアドレスに対するアクセスが発生すると、キャッシュのラインの中身の入れ替えが発生する。これをスラッシングと呼ぶ。スラッシングが発生する度にメイン・メモリへのアクセスを行うことになるので、これが少ない程、高速な処理が可能となる。
【００４３】
例えば、画素４０５を参照し、次に画素４０６を参照する場合は、キャッシュ・ヒットするので非常に高速にアクセスでき参照負荷が低くなる。しかし画素４０５の次に４０７を参照しても、それ以前に４０７と同ライン内の画素がアクセスされていなければアクセスは遅い。画素４０５を参照した後に４０８を参照し、然るのちに４０６を参照すると、インデックス１のラインのスラッシングが２回発生することになるので、参照負荷は高くなる。このように、本実施形態では、参照する画素がキャッシュ・ヒットする場合は参照負荷小、ヒットしない場合は参照負荷大として算出する。
【００４４】
＜Boosting識別器＞
図５は、本実施形態の画像識別処理を行うBoosting型識別器の概念図である。本実施形態では、この識別器を、図２のターゲットシステムで実行されるプログラムにより実現している。この識別器は非特許文献１と同様、多数の弱判別器５０１乃至５０３がカスケードに接続された構成となっている。尚、図５の識別器は、非特許文献１のようにステージ構成としてステージ毎に打ち切り判定するのではなく、特許文献：特開２０１０−１６５０４６と同様、弱判別器一つずつで打ち切り判定を行うようになっている。しかしながら、本発明の本質によればこれはどちらでも構わない。
【００４５】
最初の弱判別器５０１には、前処理された処理対象画像が入力される。各弱判別器は、入力された画像より所定の特徴量を計算する。本実施形態においては、画像中の弱判別器毎に異なる位置の１点を参照し、その画素値を特徴量とする。これを弱判別器毎に所定の判別閾値と大小比較し（大小比較の方向は弱判別器毎に異なる）、真の場合は１、偽の場合は−１とする判別結果ｈk(x)を得る。ここでｘは識別対象の入力画像を示し、ｋ＝１，２，…は弱判別器番号である。弱判別器毎の参照点の位置は、前述の認識辞書に辞書データとして登録されている。
【００４６】
尚、非特許文献１のように積分画像（integral image）を入力して４点参照による矩形内総和値を複数算出し、これらに所定係数を乗じて総和した値を特徴量としても良いし、所定位置２点を参照してその大小比較結果より判別結果 を得るようにすることも可能である。本実施形態では以下の説明のし易さより前述の弱判別器毎に１点参照の特徴量を採用しているが、これら複数点参照の場合であっても本発明を適用可能であることは言うまでもない。
【００４７】
弱判別器毎の辞書データとしてはさらに、信頼度αkと、先に述べた判別閾値とは別の識別閾値Ｔkが登録されている。これらはｋ段目の弱判別器の学習時に決定されるパラメータである。弱判別器の単独の判別結果スコアは、αkｈkとして計算される。各弱判別器は、前段から送られてきた累積スコアに自己の判別結果スコアを加算して、識別閾値Ｔkによる打ち切り判定を行う。すなわちｔ段目における打切り判定は、次式(1)のように表される。
2014106736.tif 000003
式(1)が真ならば処理継続となり、弱判別器は次段に加算された累積スコア：
2014106736.tif 000004
を送る。すなわち図５において、２段目（５０２）以降の弱判別器には、処理対象画像と共に前段までの累積スコアが入力される。
【００４８】
５０３は最終弱判別器で、ここでも打ち切られなかった場合、識別結果がPositiveであることが確定する。このときの累積スコアが、入力画像が識別対象物体である「らしさ」を示すスコアとなる。
【００４９】
＜Boosting学習処理＞
次に図１のフローチャートを用いて、本実施形態のBoosting型識別器の認識辞書を生成するための学習処理について説明する。この学習処理は、図２(a)に示したターゲットシステム上で実行しても良いし、より高速のスーパーコンピュータやPCクラスタ等の他のシステムを用いて実行しても良い。学習処理の実行環境については、本発明の本質から制限されるものではない。
【００５０】
以下、本実施形態の学習アルゴリズムについて説明する。
【００５１】
まずステップS101で、学習に使用する大量のサンプルデータを入力する。学習データには、識別対象パターン（Positiveサンブル、例えば顔画像データ）と非識別対象パターン（Negativeサンプル、例えば背景等の非顔画像データ）が、所定の比率で含まれている。尚、これらのサンプルデータには、予め輝度画像化やガウスフィルタ処理等の必要な前処理が行われているものとする。
【００５２】
ステップS102では、学習データセットのサンプルデータ各々に対する重み係数を初期化する。学習データの総数を 個（Positive,Negative込）とすると、全ての重み係数ｗt,iを以下の式(2)で均一に初期化する。
ｗ1,i＝１／ｍ、  ｍ＝１，．．．，ｍ      …（２）
ここで は現在学習使用としている弱判別器番号で初期値は１、 は学習データ番号である。つまり、第1段の弱判別器学習時には、全てのサンプルデータに対して共通の重みを与えている。
【００５３】
続いてステップS103では、参照履歴テーブルの初期化を行う。参照履歴テーブルとは、直前までに学習済みの各段の弱判別器が参照する特徴画素の位置を順に記憶するためのテーブルである。初期状態では保持される位置情報が無いクリアされた状態となる。
【００５４】
このテーブルは、後に、ターゲットシステムのキャッシュ・アーキテクチャをシミュレートして、キャッシュ・ヒットを判定する際に用いられる。ターゲットシステムのキャッシュがダイレクト・マップ方式の場合、参照履歴テーブルには、各ライン・インデクス毎に、少なくとも直前１回分以上のアクセス履歴を保持できるようにする必要がある。
【００５５】
尚、参照履歴テーブルとして、参照画素位置情報の形式のまま保持するのではなく、ターゲットシステムのアーキテクチャに合わせて、予め図４で説明したタグ・アレイと同等の情報に変換した状態にして、間接的に保持するようにしても良い。
【００５６】
次のステップS104では、次式(3)に従って重み係数を正規化する処理を行う。
2014106736.tif 000005
但し、１段目の学習時に最初にこのステップS104が行われる際には、重み係数ｗ1,iは前述の通りS102（式(2)）で設定された値になっているので、すでに式(3)を満たす状態となっている。すなわちこのステップS104 は、第２段目以降の弱判別器の学習時に、重み係数ｗt,iの総和値が１となるように正規化するための処理である。
【００５７】
続いて、ステップS105で、弱判別器が参照する画素値特徴の候補位置を一つ選択する。この候補位置は処理対象画像の任意の点としても良いし、ある程度範囲を限定した中から選択するものとしても良い。上述の矩形特徴や画素差分等の複数点を参照する特徴を用いる場合は、予め多数の組み合わせの特徴候補を容易しておき、それらの中から一つを選択するようにする。
【００５８】
ステップS106では、選択した特徴候補について判別性能評価を行う。まず、全ての学習サンプルデータに各々に対して、この特徴候補の位置の画素値を参照し、識別対象と非識別対象を分離する閾値θt,jを決定する。ここで、ｔは学習中の弱判別器番号、ｊは特徴候補番号とする。
【００５９】
この閾値の決定には、全ての学習サンプルデータを用いて作成した参照画素値のヒストグラムを利用する。図６(a)は、識別対象データのヒストグラム６０２と非識別対象データのヒストグラム６０１の例を示している。横軸は特徴候補位置の参照画素値（特徴値）で縦軸は参照画素値がその値となったサンプルデータの数を表す。このヒストグラムを使用して識別対象と非識別対象を最も良く分離する閾値θt,jを決定する。この閾値θt,j より参照画素値が大のときに識別対象、小のときに非識別対象と判別すれば、非識別対象を識別対象と判別、あるいは識別対象を非識別対象と判別する「誤り率」は最小となる。識別対象データのヒストグラム６０２と非識別対象データのヒストグラム６０１のピークが左右逆の位置に現れた場合には、閾値との大小比較方向を逆に設定し、閾値θt,jより参照画素値が小のときに識別対象、大のときに非識別対象と判別するようにする。
【００６０】
そして次に、決定した閾値θt,j と式(3)で正規化してある重み係数を用いて、全ての学習サンプルデータに対する重み付判別誤り率を算出する。次式(4)が重み付き判別誤り率である。
2014106736.tif 000006
ここで、ｉは学習サンプルデータ番号であり、ｘiが各学習サンプルデータを示す。ｈt,j(ｘi)は特徴候補ｊによる学習サンプルデータｘiの判別結果であり、先に決定した閾値θt,jと大小比較方向を用いて、入力対象データｘiが識別対象であると判定した場合に１を、識別対象でないと判別した場合に−１を出力する。ｙiは正解ラベル（教示ラベル）でありｉ番目のサンプルデータが識別対象であるか否かによって、それぞれ１又は−１が割り当てられている。従って重み付誤り率Ｅt,jは、ｈt,j(ｘi)とｙi の値が等しいサンプルに対しては０、異なるサンプルについては２ｗt,jが加算された総和値となる。
【００６１】
次にステップS107で、参照履歴テーブルを用いて、特徴候補の画素位置を参照する際のキャッシュ・ヒットを判定する。キャッシュ・ヒットする特徴候補の画素の参照負荷は低く、ヒットしない場合はスラッシングが発生することなり参照負荷が高いことになる。尚、参照負荷とは前述の通り、ターゲットシステムがデータ・アクセスを実行する際に生ずる負荷のことである。この判定処理は図７に示すフローチャートのように行われる。
【００６２】
まずステップS701にて、特徴候補の画素位置の座標と、処理対象画像の格納領域の先頭アドレスを用いて、参照画素の画素値が格納されているメモリ・アドレスを計算する。ここで用いる先頭アドレスとは、ターゲットシステムのメモリにおける処理対象画像格納領域として設定された先頭アドレスであって、本学習処理を行っているシステムのメモリ・アドレスとは関係ない。
【００６３】
次にステップS702にて、計算した参照画素位置のアドレスから、タグ値とインデクス値を取得する。これは図４(b)で説明したように、アドレス値から所定範囲のビット列をそれぞれ取り出せば良く、本実施形態では上述のようにインデクス値３ビット、タグ値は１１ビットである。
【００６４】
そしてステップS703にて、参照履歴テーブルを参照してキャッシュ・ヒットするか否かの判定を行う。参照履歴テーブルには、それまでにアクセスした画素位置が順に格納されている。そこでタグ・アレイをシミュレートして同等の情報を保持するテーブルを作成し、参照済画素の位置情報を最初から順に取り出して、ステップS701、S702と同様にタグ値とインデクス値を算出し、タグ・アレイ相当を更新してゆく。これにより現特徴候補の画素位置にアクセスする際のタグ・アレイ相当の情報を再現できるので、ステップS702にて取り出したインデクス値のラインに、ステップS702で取り出したタグ値と同じ値が入っているか否かでキャッシュ・ヒットが判別できる。尚、上述したように、参照履歴テーブルとして、画素位置の座標の履歴のまま保持するのではなく、予めこのタグ・アレイ相当の情報に変換して保持するようにしてももちろん構わない。
【００６５】
ヒット判定した結果はS704にて返される。尚、上述の複数の点を参照する特徴を用いる場合は、各々の点を所定の順に参照する際にキャッシュ・ヒットするか否かを判定し、その平均値をキャッシュ・ヒット率としてここでの判定結果とすれば良い。
【００６６】
ステップS107でのキャッシュ・ヒット判定結果をｃt,jとし、ヒットした場合に１、ヒットしなかった場合に０を取るものとする。ｃt,jをヒット率で計算する場合は、１から０の間の値を取るものとする。
【００６７】
ステップS108では、ステップS107で判定したキャッシュ・ヒット判定結果（またはヒット率）に基づき、アクセス・ペナルティＰt,jを計算して重み付誤り率Ｅt,j に加算する。アクセス・ペナルティＰt,jは、参照負荷が大きい場合ほど高い値を取るように次の式で計算される。
Ｐt,j＝Ｋ（１−ｃt,j）
ここでＫは所定の正の係数で、参照負荷をペナルティとして考慮する割合を調整する。すなわち、S107でキャッシュ・ヒットすると判定された場合はＰt,j＝０、ヒットしないと判定された場合はＰt,j＝Ｋで、キャッシュ・ヒット率で計算される場合はその間の値を取ることになる。アクセス・ペナルティを加味した誤り率ＥPt,jは、次式（５）となる。
2014106736.tif 000007
尚、アクセス・ペナルティＰt,jとして、キャッシュ・ヒット率だけでなく、例えば、特徴候補を参照して特徴量を計算するまでにターゲットシステムが要するトータルのシステム・クロック数に比例する値を利用するようにしてもよい。
【００６８】
ステップS109による繰り返し処理で、以上のステップS105からS108の処理を、全て特徴候補について実施し、それぞれ特徴候補に対して式(5)のアクセス・ペナルティＰt,jを加味した誤り率ＥPt,jを求める。
【００６９】
ステップS110においては、算出した全ての特徴候補に対するアクセス・ペナルティＰt,jを加味した誤り率ＥPt,jの中で最も小さい値となる特徴候補ｊ（本実施形態では候補画素特徴の位置に相当）を選び（argmin(ＥPt,j)）、これをｔ段目の弱判別器の特徴量として、参照画素位置を決定する。ここで、このとき選択した特徴のアクセス・ペナルティＰt,jを加算する前の誤り率Ｅt,jをＥtとする。また、この特徴候補ｊを用いてS106で決定された閾値θt,jを判別閾値θtとする。
【００７０】
次にステップS111で、参照履歴テーブルを更新する。ここでは決定したｔ段目の参照画素の位置情報を、参照履歴テーブルに追加格納する。（若しくはタグ・アレイ相当の情報として保持する場合には、図７のステップS701,S702でアドレス計算、タグ値とインデクス値を取得し、インデクス値の一致するタグ情報を書き換える処理を行う。）
続くステップS112では、以下の式(6)により、当該弱判別器に対応する信頼度αtを算出する。
2014106736.tif 000008
次にステップS113において、打ち切り閾値を決定する。ここでは、全ての学習サンプルデータを用いて作成した累積スコア値：
2014106736.tif 000009
のヒストグラムを利用する。
【００７１】
図６(b)は、識別対象データの累積スコア値ヒストグラム６０４と非識別対象データの累積スコア値ヒストグラム６０３の例を示している。打ち切り閾値は、識別対象データに対する打ち切り割合（打ち切られるPositiveデータの数／全Positiveデータ数）が所定の許容範囲以下になる様に決定する。打ち切られるPositiveデータの数とはすなわち、６０４の累積スコアヒストグラムで打ち切り閾値の左側に来るPositiveデータの総数の総数である。Negativeデータに関しては打ち切られる数が多い程良いので、ここでは考慮しなくてよい。この打ち切り閾値が識別処理時に用いられるｔ段目の弱判別器の識別閾値Ｔtである。
【００７２】
以上により決定した参照画素位置、信頼度αtおよび判別閾値θtと大小比較方向、識別閾値Ｔtのパラメータを、当該ｔ段目の弱判別器の辞書データとして記憶する。
【００７３】
続いてステップS114では、各学習サンプルデータに対する重み係数を、下記演算式(7)で更新する。
2014106736.tif 000010
但し、式(7)で更新する重み係数ｗt,jは正しく識別できた学習データｉの重み係数のみである。誤り率Ｅtは通常0.5より小さい値となるので、正しく識別されたサンプルデータ（Positive、Negative共）の重み係数ｗt,iは、小さくなる様に更新される。従って、識別を誤ったサンプルデータに対する重み係数ｗt,iは、相対的に大きくなる。
【００７４】
ここまでの処理（ステップS104〜ステップS114）でｔ段目の弱判別器を追加生成した後、ステップS115では、所定の完成条件を満たす識別器が完成したか否かを判定する。ここで所定の条件とは、弱判別器数が予め設定した上限数に到達したか、誤り率Ｅtが所定の値を下回り、所望の性能を達成できた場合に満たされる。条件を満たさない場合は、ステップS104に戻り、続く弱判別器の追加生成処理を継続する。
【００７５】
＜Boosting識別処理＞
以上のように生成された識別処理辞書を用いた識別処理は、ターゲットシステム上で、通常のBoosting型識別処理と同様の図８のフローチャートのように実行される。
【００７６】
ステップS801では識別対象画像ｘが入力される。尚、ここでは上述の輝度画像化やガウスぼかし等の所定の前処理は既になされているものとする。
【００７７】
ステップS802では、第１段目の弱判別器を選択する（処理段数ｔ＝１ とする）。
【００７８】
ステップS803では、識別処理辞書を参照し、選択されている処理段数 の弱判別器の特徴である参照画素位置、信頼度αtおよび判別閾値θtと大小比較方向、識別閾値Ｔtのパラメータを参照する。
【００７９】
ステップS804では、ｔ段目弱判別器の判別処理を行う。これは、まず上述のように通り、参照した判別閾値θtと大小比較方向を用いて弱判別器単独の判別結果ｈt(ｘ)を計算し、然る後に累積スコア値:
2014106736.tif 000011
を計算する処理である。
【００８０】
そしてステップS805で、式(1)に従い累積スコアが識別閾値Ｔtより大ではないと判定された場合は、処理打ち切りとなってステップS808に進み、入力された識別対象画像ｘが識別対象ではない（Negative）であることが確定する。
【００８１】
ステップS805で、累積スコアが識別閾値Ｔtより大で処理継続と判定された場合は、ステップS806に進み、実行した弱判別器が最終段の判別器であるかどうかをチェックする。最終段でなければ、ステップS803に戻って次の弱判別器の判別処理を行う。
【００８２】
最終段の弱判別器まで辿り付いた場合は、ステップS807へ進み、入力された識別対象画像ｘが、識別対象である「Positive」であることが確定する。
【００８３】
以上のように、本実施形態では、各段の弱判別器の特徴を順次選択する際に、識別性能だけでなく、識別処理を実行するターゲットシステムのキャッシュ・アーキテクチャを考慮したアクセス・ペナルティを加味して、スラッシングの発生を抑制している。これにより、識別性能と高速性を両立するBoosting型識別器用の識別処理辞書を生成することができる。
【００８４】
［第２の実施形態］
＜Sliding window処理の場合＞
大きな画像中から人の顔等の所望の物体の検出処理を行う場合、Sliding windowと呼ばれる処理と組み合わせた識別処理が良く行われている。例えば非特許文献１においても、Sliding window処理を用いている。
【００８５】
図９はSliding window処理を説明する図である。図中の符号９００は入力画像である。符号９０１は入力画像９００上に設定された所定サイズの検出枠（サブ・ウィンドウ）である。検出枠９０１は、入力画像９００上を、左上から所定画素ずつ右へ移動し、右端に辿り付いたら所定画素下の左端に移って、同様に画像の右下端まで移動を続ける。検出枠９０１が１回移動する毎に、検出枠内の画像が切り出され、第１の実施形態と同様の識別器に入力されて、識別対象画像であるか識別される。すなわち識別対象であると判別された検出枠の位置に、所望の物体が存在していることが検出される。
【００８６】
このようなSliding window処理を組み合わせた検出処理を行う場合においても、本発明を適用することが可能である。
【００８７】
識別器への入力が検出枠内の画像である場合、逐一これを元の入力画像からメモリの別の領域にコピーして処理を実行するのは効率が悪い。このようにすると、検出枠の移動画素数は１画素に設定される場合もあり、大量のメモリ・コピー処理が発生することになる。従って、通常は、入力画像に対し検出枠の領域位置設定をして、識別器が直接入力画像を格納したメモリ領域を参照して、識別処理を行うようにする。
【００８８】
図１０は、Sliding window処理を行う検出処理において、本発明の適用を説明するための図であり、ターゲットシステムにおけるキャッシュ・アーキテクチャを示している。本実施形態のターゲットシステムは第１の実施形態と同様ダイレクト・マップ方式のキャッシュを持つものとするが、本発明の適用はこれに限定されるものではない。
【００８９】
図１０のキャッシュにおいて、説明を簡単にするため、キャッシュのライン・サイズ×ライン数が処理対象の入力画像の幅画素数と一致するものとする。すなわちライン数は図４で説明したキャッシュより多いものとする。これは図面の記述の都合であり、実際には一致していなくとももちろん適用可能である。尚、図１０では、タグ・アレイとライン・インデクスの表示は省略してあるが、図４と同様存在する。また、１キャッシュ・ライン当たりの容量も図４と同じく４バイトとする。
【００９０】
図１０において符号１００１はデータ・アレイを表しており、符号１００２は図９の入力画像９００を格納するメイン・メモリの一部を示している。図４と同様、データ・アレイ１００１の各ラインは、矢印で対応付けられたメイン・メモリ１００２の各領域を担当している。
【００９１】
符号１００３は入力画像の左上端に配置された検出枠（ここでは仮に１０×１０画素サイズとしている）を表しており、符号１００４、１００５と１画素ずつスライドする様子を示している。
【００９２】
検出枠が符号１００３の位置にあるとき、画素位置１００６を参照した次に参照する各画素位置がキャッシュ・ヒットするか否かの判定は、第１の実施形態と同様に可能である。例えば、符号１００７の位置の画素を参照する場合は、キャッシュ・ヒットするが符号１００８の位置はキャッシュ・ヒットしない。符号１００９の位置を参照するとスラッシングが発生する。
【００９３】
ところで各特徴の参照画素位置は、Sliding Window処理と組み合わせた場合は、検出枠に対して定められることになる。つまり、検出枠の移動に伴い、同じ特徴の参照画素位置が相対的に移動することになる。
【００９４】
従って、符号１００３の検出枠位置において参照された各特徴の画素位置は、符号１００４の位置に検出枠が移動した場合は、メイン・メモリ上において一つ右の画素を参照することになる。すなわち符号１００４の検出枠位置においては、符号１００６相当の位置の画素を参照した次に符号１００７相当の位置の画素を参照しても、キャッシュ・ヒットしなくなる。
【００９５】
このようなSliding Window処理と組み合わせた検出処理に用いる場合でも、基本的に図１に説明した学習処理フローで識別処理辞書を生成することが可能である。但し、キャッシュ・ヒットの判定結果は、参照履歴だけでなく、検出枠位置によっても異なってくるので、これに対応する必要がある。このため本実施形態では、図１のステップS107のキャッシュ・ヒット判定処理として、第一の実施形態で説明した図７の処理の代わりに、図１８に示す処理を用い、０から１の範囲のキャッシュ・ヒット率ｃi,j計算している。
【００９６】
尚、本実施形態で、図１のステップS101において学習データセットとして入力される画像は、全て予め検出枠サイズに切り出されたものである。つまり、学習処理用システムにおいてこれらの学習画像が格納されるメモリ上の位置は、識別処理時の識別対象データの格納位置とは何ら関係はない。学習処理時には、ターゲットシステム上でSliding Window処理を行うより大きな画像の一部として、学習画像と同サイズの検出枠で位置設定されて参照されることを想定（シミュレーション）し、以下のヒット率計算を行う。
【００９７】
図１８においては、まず検出枠の想定する位置のオフセットを０に設定する。これは検出枠の位置をメイン・メモリ上のいずれかのキャッシュ・ラインの区切りの先頭に設定することに対応する。例えば、図１０における位置１００３である。尚、検出枠位置のオフセット、すなわちキャッシュ・ラインの区切りから右方向にスライドした画素数が等しければ、キャッシュ・ヒットする・しないの判定結果は同じになる。例えばある参照画素候補の、図１０の１０１０の検出枠位置の場合のヒット判定結果は、１００３の位置と同じであり、１０１１の位置は１００４と同じである。従って、キャッシュ・ライン幅分のオフセットについてヒット判定を行えば、全体的なキャッシュ・ヒット率（平均値）の計算を行うことができる。
【００９８】
次にステップS1802で、検出枠がオフセット位置にある場合の参照画素候補位置のターゲットシステム上のメモリ・アドレスを計算する。これは図７のステップS701と同様であるが、オフセット分x座標を右にずらしたものとしてアドレス計算を行う。
【００９９】
ステップS1803においては、図7のステップS702と同様、計算したアドレスからタグ値とインデクス値を取得する。
【０１００】
そしてステップS1804において、参照履歴テーブルを参照し、キャッシュ・ヒット判定を行う。ここでは図７のステップS703と同様にタグ・アレイをシミュレートして判定するが、参照済画素の位置情報を参照履歴テーブルから取り出す際に、ステップS1803と同様、x座標にオフセット分を加算して、アドレス計算を行う。尚、参照履歴テーブルをタグ・アレイ相当の情報に変換して保持しておく場合は、各オフセット位置で履歴が変わってくるので、各オフセット位置につき１つずつ別のタグ・アレイ相当情報を記憶しておく必要がある。
【０１０１】
ステップS1805では、ヒットしたか否かの判定結果をひとまず記憶する。そしてステップS1806において、キャッシュ・ライン幅分のオフセットにおけるヒット判別が完了したかどうかを判定する。完了していない場合は、ステップS1807にて次のオフセット値を計算する。ここではSliding windowの１回のスライド幅分（ステップ分）を現在のオフセット値に加算することになる。尚、ここではステップ画素数はキャッシュ・ライン幅画素数を切り良く割り切る値であるものとする。そしてステップS1802に戻り、次の位置オフセットでのキャッシュ・ヒット判定を行う。
【０１０２】
キャッシュ・ライン幅分のヒット判別が完了したら、ステップS1808において、キャッシュ・ヒットした数を集計し、判定したオフセットの数を分母として、キャッシュ・ヒット率を計算し、処理完了となる。
【０１０３】
以上のように、本第２の実施形態によれば、Sliding Window処理を組み合わせた所望物体の検出処理に対しても本発明を適用することができ、検出性能と高速性を両立した識別処理辞書を生成することが可能となる。
【０１０４】
［第３の実施形態］
＜セット・アソシエイティブ・キャッシュの場合＞
本発明は、他のタイプのキャッシュ・アーキテクチャを持つターゲットシステムを使用する場合でも適用することが可能である。
【０１０５】
図１１は、２ウェイのセット・アソシエイティブ・キャッシュと呼ばれる方式のキャッシュ・アーキテクチャを示している。このキャッシュは、図４のダイレクト・マップ方式と同様、キャッシュ・ライン・サイズ４バイト、ライン・インデクスは０から７までの８列分とする。
【０１０６】
セット・アソシエイティブ方式のキャッシュのデータ・アレイには、ライン・インデクス毎に複数ライン分の容量が割り当てられている。このインデクス毎の割り当て数をウェイ数と呼び、図１１のキャッシュでは２ウェイである。
【０１０７】
また、タグ・アレイも、インデクス毎にウェイ数に等しい数のタグが保持できる構成となっており、図１１でそれぞれ上段のタグは上段のラインを管理し、下段のタグは下段のラインを管理する情報を格納する。タグ・アレイの各タグには、対応して不図示のタイムスタンプ保持領域が割り当てられており、各ラインの上段・下段それぞれの最終アクセス時刻が記憶されている。
【０１０８】
キャッシュ・ヒットの判定は、アクセスするアドレスからインデクスとタグを取り出すところまではダイレクト・マップ方式と同様である。ここで、インデクスに対応する上下２つのタグのいずれかに取り出したタグが合致すればヒットとなる。対応するデータ・アレイのキャッシュ・ラインに対しアクセスを行うと同時に、タイプスタンプ保持領域の最終アクセス時刻を更新する。
【０１０９】
キャッシュ・ヒットしなかった場合は、タイムスタンプ保持領域を参照して、最も古い時刻にアクセスされたタグを選択し、対応するラインの中身を新たなアドレスを含むラインに入れ替える。（つまり、最も古いアクセスのラインをスラッシングする。）同時に最終アクセス時刻を更新する
ターゲットシステムが図１１のタイプのキャッシュ・アーキテクチャを持つ場合でも、本発明は適用可能で、例えば図１の学習処理フローに従い識別処理辞書を生成することができる。このときステップS107のキャッシュ・ヒット判定はもちろん、上述のように図１１のアーキテクチャに合わせて行う。ダイレクト・マップ方式に比べて各インデクス２つのラインを持つので、ヒット確率は高まりスラッシングは発生しにくくなる。
【０１１０】
例えば、図１１において、識別対象画像１００４が図４と同様左右に１ラインずつ振り分けられて格納されている状態を考える。まず１００５の画素をアクセスし、次に１００７の画素をアクセス、次いで１００６をアクセスする場合を考える。このとき、図４のダイレクト・マップ方式では２回のスラッシングが発生していたが、図１１のキャッシュではどちらのラインもキャッシュ内に保持される。そして１００６をアクセスする際にはキャッシュ・ヒットとなる。
【０１１１】
図１１のような２ウェイのアーキテクチャでは、参照履歴テーブルには、少なくとも各ラインに付、過去２回分のアクセス履歴を保持する必要がある。あるいはタグ・アレイ相当の情報に変換して保持しても良いことはダイレクト・マップ方式の場合と同様である。
【０１１２】
この他、４ウェイや８ウェイのセット・アソシエイティブ方式のキャッシュ・アーキテクチャが存在し、同様に本発明を適用可能であることは自明であろう。
【０１１３】
セット・アソシエイティブ方式は、ダイレクト・マップ方式に比べてキャッシュ・ヒット率が向上する反面、ウェイ数が増えるにつれタグ・アレイとして必要な容量が増えるためキャッシュとしての有効容量が相対的に減るというデメリットがある。どちらの方式が適しているかは、実行する処理に依存する。上述したような矩形特徴や画素差分等、複数の点を参照して計算する特徴を用いる場合は、ダイレクト・マップ方式よりもセット・アソシエイティブ・キャッシュ方式の方が、特徴選択の自由度を保ちながら高速性を担保できる。よって、識別性能と高速処理の両立を達成しやすくする効果が期待できる。
【０１１４】
［第４の実施形態］
＜テクスチャ・メモリの場合＞
ところで、メイン・メモリへの画像の格納は、通常はラスタ・スキャン方式で画像の１ラインの画素を連続するアドレスに格納する方式が取られることが多い。図１２(a)は、ラスタ・スキャン方式でメモリに格納する様子を示している。
【０１１５】
しかしながら、異なった格納規則でメモリに画像を格納するアーキテクチャも存在する。例えば、図１２(b)は、Z-ordering方式と呼ばれる順序でメモリに格納する様子を示している。このような順序で画素をメモリに格納すると、横方向だけでなく縦方向にも近傍の画素がメモリ・アドレスの近い位置に格納され易くなる。これによりバースト転送やキャッシュ１ラインに含まれる画素は縦横を含めて近傍の画素となるので、方向によらず近傍画素のアクセスの効率化が図れる。Z-ordering方式のメモリ（テクスチャ・メモリ）は、例えば図２(b)に示すようにメイン・メモリとは別のメモリとしてシステムに接続される場合が多い。このような格納規則を持つテクスチャ・メモリは、例えばGPUで用いられており、画素補間を伴う画像の部分的な拡大縮小処理等を行う際に特に有利である。
【０１１６】
尚、本明細書では、ラスタ・スキャン方式やZ-ordering方式のように、対象データの各要素をメモリ上へ格納する順序の定め方を、「格納規則」と呼んでいる。
【０１１７】
本発明は、ターゲットシステムにおいて、識別対象画像を格納する先が、例えばZ-orderingのような、ラスタ・スキャンとは異なった格納規則のメモリ・アーキテクチャであっても、適用することが可能である。このような場合であっても、例えば、図１の学習処理フローを適用して識別処理辞書を生成することができる。
【０１１８】
このとき上述の実施形態と処理が異なるのは、ステップS107のキャッシュ・ヒット判定における、図７のステップS701参照画素位置アドレス計算の方法である。
【０１１９】
図１２(c)は、１６×１６の画像をZ-orderingのテクスチャ・メモリに格納した場合の、アドレス計算の方法を示している。例えば符号１２０１の位置の画素は、x座標が２、y座標が１である。これを２進数で表し、符号１２０２に示すように、最下位ビットをx座標の最下位ビットとして、互い違いにビットを並べてゆくと、格納アドレス（この場合は６）が計算できる。他の位置であっても同様に計算可能であることは、図より明らかであろう。尚、Z-orderingの格納規則では、このように極めて容易にアドレス計算を行うことができるが、画像の一辺のサイズが２のべき乗の正方形である必要がある。他のサイズの画像を格納する場合は、その画像を含む最小の一辺が２のべき乗の正方形の領域を確保して余白と共に格納することになる。テクスチャ・メモリのハードウェアには、通常座標値からアドレス値に変換するハードウェアが内蔵されている。もちろん、学習処理を実行するシステムがZ-orderingのメモリを備える必要はなく、同等のアドレス計算をソフトで行えば良い。
【０１２０】
アドレス計算した後のキャッシュ・ヒットの判定の方法は、上述の実施形態と同じである。
【０１２１】
本実施形態のようにテクスチャ・メモリを持つターゲットシステムに対し、本発明を適用すると、水平方向だけでなく垂直方向も含めて近傍の位置の画素が、アクセス効率の高い特徴として選ばれやすくなる。これにより、処理速度の高速性を保ちつつも識別性能が向上する効果を期待できる。
【０１２２】
また、同様にZ-orderingに限らずヒルベルト曲線等の他の格納規則であっても、対応するアドレス計算方法を適用することで、本発明を適用できることは自明であろう。
【０１２３】
［第５の実施形態］
＜Random Ferns型識別器＞
本発明は、Boosting型識別器だけでなく、他の異なったタイプの識別器を用いた識別処理に対しても適用することができる。
【０１２４】
図１３(a)は、非特許文献２に記載されているような２分木を組み合わせたTree型識別器で、図１３(b)は非特許文献３に記載されているようなFernと呼ばれるタイプの識別器を示している。本実施形態では、Fern型識別器に本発明を適用する場合を説明するが、Fernの説明に先立ちTree型識別器の動作をまず説明する。
【０１２５】
図１３(a)において、f0乃至f6はバイナリ特徴を計算するノードである。バイナリ特徴には、二値の判別結果が得られるものなら、どのような特徴でも用いることができる。本実施形態では、入力された識別対象画像のノード毎に定められた位置の２点の画素値の大小比較を行う特徴（画素差分特徴）であるものとし、第１の点の画素値が第２の点の画素値より大であるか否かを判定するものとする。
【０１２６】
もちろん本発明は特にこれを制限するものではなく、例えば、第１の実施形態のような１点参照と所定の閾値との大小比較でも良いし、非特許文献１のような矩形特徴を使用するものでも最終的に二値判別するものであれば構わない。
【０１２７】
ノードの判定結果が真（１）の場合、右の子ノードに進み、０（偽）の場合左の子ノードに進む。最終的に、f0乃至f6の７種類のバイナリ特徴のうちの３つを用いて３回の判別を行い、l0乃至l7の８つのリーフの内のいずれかに辿り付く。リーフ毎に、識別対象画像がいずれのクラスに属するものであるかを示す確率値がパラメータとして保持されている。識別対象画像に対し、同様の複数の他のツリーによる判別を行い、辿り付いた各リーフの各クラス確率を合算して、最も確率の高いクラスを判別結果として確定する。すなわちTree型識別器は、マルチクラスの識別が可能な識別器となっている。
【０１２８】
図１３(b)および(c)はFern型識別器を示している。Tree型識別器の各ノードは異なったバイナリ特徴を判別するのに対し、Fern型識別器では、同一階層のノードは全て同じバイナリ特徴を用いる。すなわち図１３(a)のTreeと同形の８つのリーフに分類するFernは、同図(b)に示すようになる。ここで、f0乃至f2の３つのバイナリ特徴はツリーのいずれの子ノードに進んでも用いられることになる。そこで同図(c)に示すように、３つのバイナリ特徴の判別のみを先に行い、その判別結果（０or１）を連結したビット列を生成し、これをインデクスとしてリーフを決定するようにすることができる。例えばf0＝０、f1＝１、f2＝０の判別結果だったとき、これを連結するとビット列(010)b=２が得られ、l2を選択することができる。これは同図(b)のツリーを順に辿っていった場合と同じ結果である。
【０１２９】
さらに、f0乃至f2の３つのバイナリ特徴は、最終的にこの順序で判別結果を連結しさえすれば、どの順に判別処理を行っても構わない。
【０１３０】
リーフに辿り付いた後の処理はTree型識別器と同様であり、Fern型識別器でもマルチクラスの識別が可能である。
【０１３１】
＜Fernsの学習処理＞
図１４は、Fern型識別器の識別処理辞書の生成に本発明を適用した学習処理フローを示している。このうちステップS1401乃至S1416の処理は、非特許文献３に開示される技術と本質的に同等であり、特にステップS1417が本発明特有の処理となる。以下、順に説明する。
【０１３２】
まずステップS1401では、M×S個のバイナリ特徴を生成する。本実施形態では、上述の通り２画素を比較する差分特徴を用いるが、各特徴の２画素の位置はランダムに選択して構わない。ここでMは作成するFernの数を示し、SはFern１つ当たりで使用するバイナリ特徴の数である。生成したバイナリ特徴の参照画素位置等の情報は識別処理辞書に登録する。
【０１３３】
次にステップS1402で、識別対象とするクラスのクラス番号cを選択する。識別対象クラス数は複数で、０から順に番号が付けてあるものとする。
【０１３４】
ステップS1403では、各クラス確率値を算出するための二次元のヒストグラムＨを初期化する。ヒストグラムＨは、Fern番号ｍと、Ｓ個のバイナリ特徴の判別結果の連結値ｋをインデクスとし、Ｈ(m,k)がある１ビンを示す。各ビンＨ(m,k)はｍ番のFernの、図１４(c)で説明したｋ番のリーフに対応する。
【０１３５】
ステップS1404では、識別対象クラス毎に多数用意されている学習サンプルデータの内、選択されたクラスcのサンプルデータの１つを選択する。
【０１３６】
ステップS1405では、学習するM個のFernを先頭から順に選択する。ここでｍはFern番号（=0,1,…,M）とする。
【０１３７】
ステップS1406では、選択されているサンプルデータに対し、m番目のFern用にステップS1401で生成されたS個のバイナリ特徴値を計算する。これはｍ×Ｓ乃至ｍ×Ｓ＋Ｓ−１番目のバイナリ特徴に相当する。
【０１３８】
そしてステップS1407にて、これらＳ個のバイナリ特徴値を順に連結しＳビットの値ｋを計算する。これはｍ番のFernの出力値である。
【０１３９】
算出したｋとｍをインデクスとして、ステップS1408にて、ヒストグラムＨのビンＨ(m,k)をカウントアップする。
【０１４０】
ステップS1409では、選択中のサンプルデータに対し、全てのFernで用いるバイナリ特徴を計算してヒストグラムＨに集計したかを判定し、完了していなければ、ステップS1405に戻って次の番号のFernに対応する処理を行う。
【０１４１】
選択中のサンプルデータに対し全てのFernに対する処理が完了したら、ステップS1410にて、選択中のクラスｃの全てのサンプルデータに対する処理が完了したかを判定する。完了していなければ、ステップS1404に戻って次のサンプルデータを選択して処理する。
クラスｃの全てのサンプルデータに対する処理が完了したら、ステップS1411にて、ヒストグラムＨの全てのビンに１を加算する。これは複数のFernにより得られた各クラスの確率を合算する際に積算することに対応し、一つでも確率０となる判別結果が含まれると、合算結果が０となって識別性能が落ちてしまうことに対応するものである。すなわち確率の低いクラスと判別される場合でも０とはならないようにしている。
【０１４２】
ステップS1412では、クラスｃの学習サンプルデータの数に、２のＳ乗の値を加えて確率計算用の分母値Ｄを計算する。２のＳ乗とはＳビットの数ｋの取り得る値の数で、Fern一つ当たりのリーフの数すなわちヒストグラムＨのｍ番Fern用のビンの数に相当する。ここで計算される値Ｄは、すなわち、ヒストグラムＨのFern毎のビンの合計値に等しくなり、全てのFernに対して同じ値を用いることができる。
Ｄ＝（クラスｃサンプルデータ数）＋ ２S    …（８）
【０１４３】
ステップS1413では、各ビンに対応する確率値Ｐm,c,kを計算する。
Ｐm,c,k ＝ Ｈ(m,k) ／ Ｄ                  …（９）
確率値Ｐm,c,kは、Fern ｍのリーフｋが保持するクラスｃである確率パラメータに対応する。
【０１４４】
ステップS1414では、確率値Ｐm,c,kを対数に変換する。これは、識別時に複数のFernより判別された各クラス確率を合算する際に、乗算する代わりに加算を利用できるようにするためである。この値をＬpm,c,kと記す。
【０１４５】
ステップS1415は、計算したＬｐm,c,kを全て識別処理辞書のFern ｍのリーフｋのパラメータとして記憶する。
【０１４６】
ステップS1416では、全てのクラスに対する学習が完了したかを判定し、完了していなければステップS1402に戻り、次のクラスｃに対する学習を実行する。
【０１４７】
全てのクラスに対する学習が完了したら、次にステップS1417にて、ステップS1401で生成したＭ×Ｓ個のバイナリ特徴を並べ替える処理を行う。上述した通り各FernのＳ個のバイナリ特徴ｆiは、最終的にビット連結する順序さえ保てば、どの順で算出しても構わない。本実施形態では上述の通りランダムに２画素の参照位置を決定した特徴を採用しているので、以下に例を示すように、算出順序を並べ替えることによってキャッシュ・ヒット率を上げてメモリの参照負荷を下げ、高速化を図ることができる。尚、本実施形態のターゲットシステムのキャッシュ・アーキテクチャは、２点参照特徴で比較的アクセス効率の良くなる２ウェイのセット・アソシエイティブ方式とするが、もちろんこれを限定するものではない。
【０１４８】
図１６に並べ替え処理の例を示す。同図(a)は、ステップS1401で生成されたバイナリ特徴のパラメータである。各バイナリ特徴に付、２点の参照点座標(x0,y0), (x1,y1)に加えて、ステップS1417で並べ替えることを見越して、Fern番号ｍとバイナリ特徴番号ｓもパラメータとして値を順に設定してある。
【０１４９】
同図(b)が並べ替えた結果のバイナリ特徴である。同図(a)に対し、参照負荷を下げるため２点 (x0,y0), (x1,y1) の参照時にキャッシュ・ヒットしやすくするという観点で並べ替えたので、Fern番号やバイナリ特徴番号ｓの順序は、規則正しくない状態となっている。
【０１５０】
図１５は、参照負荷を下げるためのステップS1417の並べ替え処理の詳細フローである。尚、本実施形態において参照負荷の算出とは、各バイナリ特徴の２点のキャッシュ・ヒットを判定することである。キャッシュ・ヒットする点が多い程、参照負荷が少ないものとみなせる。ここでは図１４のS1401で生成したM×Sのバイナリ特徴の元リスト（図１６(a)に相当）を、識別処理時に計算すべき順に並べ替えた並べ替え特徴リスト（図１６(b)に相当）を生成する。以下、順に説明する。
【０１５１】
ステップS1501では、元リストの先頭のバイナリ特徴を取り出す。これはすなわち図１６(a)のリストの１行目の特徴に相当する。このバイナリ特徴を、図１６(b)に相当する並べ替え特徴リストの先頭に格納する。最初のバイナリ特徴を計算する段階では、メイン・メモリ上の識別対象データへのアクセス履歴は不定（例えばDMA等の別のバス・マスターにより転送される場合はアクセス履歴無し）であるので、いずれを選んでもキャッシュ・ヒットには影響しないもの見なしている。
【０１５２】
次にステップS1502では、先頭バイナリ特徴の参照する２点の位置と識別対象画像格納領域の先頭アドレスを用いて、２点それぞれのタグとインデクスを計算する。この処理は上述の図７のステップS701、S702で説明した処理と同等である。
【０１５３】
ステップS1503では、計算した２点のタグとインデクスを参照履歴テーブルに格納する。本実施形態では、上述の通りターゲットシステムのキャッシュ・アーキテクチャを２ウェイのセット・アソシエイティブ方式とするので、この参照履歴テーブルは同キャッシュのタグ・アレイと同等の情報を保持するものとする。また、データ・アレイのキャッシュ・ライン毎に、何時アクセスされたかのアクセス時期も、併せて保持するものとする。これは第３の実施形態で説明した、タグ・アレイの各タグのタイムスタンプに対応する情報であり、最も過去に参照されたデータはどれであるかを判別するために用いるが、学習処理システム上では時刻そのものである必要は無い。例えば、初期状態（つまり如何なるラインもキャッシュに格納されておらす不定の状態）では、最も古い時期であると判定される値（例えば０）を格納しておき、アクセスがある度に更新（例えば１ずつインクリメント）した値を格納すればよい。
【０１５４】
ステップS1504では、次に選ぶ特徴候補に関する候補チェックリストを初期化する。候補チェックリストは、元リストのバイナリ特徴に先頭から順に０からM×S-1の特徴インデクスを振って、特徴インデクス毎に、当該特徴を次に計算するとした場合のキャッシュ・ヒット状態を保持するためのテーブルである。図１６(c)にその一例を示すが、２点の参照点の内いずれか一方がキャッシュ・ヒットするかどうかを示すフラグ、キャッシュ・ヒットしなかった点について既に対応するキャッシュ・ラインに格納されているラインのアクセス時期を記憶する。図１６(c)の、「アクセス時期０」と「アクセス時期１」がそれぞれ、特徴候補２点の内の座標（x0,y0）の点と（x1,y1）の点が、キャッシュ・ヒットしなかった場合にアクセス時期を記憶する領域である。２ウェイの場合、参照履歴テーブルには、ライン毎に２つのアクセス時期が保持されているが、このうちの古い方の値を選択して格納する。キャッシュ・ヒットした点については、ヒットしたことを示す特別な値（例えば−１等）を格納する。
【０１５５】
次にステップS1505で、元リストの次のバイナリ特徴のパラメータを参照する。そしてこのバイナリ特徴について、ステップS1506にて、S1502と同様に参照点２点のタグとインデクスを計算する。
【０１５６】
ステップS1507においては、参照履歴テーブルを参照して、これら２点が両方ともキャッシュ・ヒットするかどうかを判定する。
【０１５７】
２点共キャッシュ・ヒットする場合は、最も参照負荷が少なくなるので、当該バイナリ特徴を次に計算するものと確定し、ステップS1517にて並べ替え特徴リストの次の行に格納する。尚、本実施形態においては、２点共キャッシュ・ヒットする場合は、このように最優先で次に計算する特徴として確定するので、上述の候補チェックリストは使用しなくてよい。従って候補チェックリストには、２点がキャッシュ・ヒットしたことを記憶するようにはなっていない。
【０１５８】
２点共にキャッシュ・ヒットしなかった場合は、ステップS1508にて１点キャッシュ・ヒットするかをどうかチェックする。
【０１５９】
さらにステップS1509において、キャッシュ・ヒットしなかった点について、参照履歴テーブルの情報に基づき、入れ替え対象となるキャッシュ上のラインのアクセス時期を確認する。
【０１６０】
これらのチェックした結果は、ステップS1510にて、特徴インデクスと共に候補チェックリストに記憶する。尚、キャッシュ・ヒットした点については、ヒットしたことが判別可能な値（例えば最新アクセス時期）をアクセス時期の領域に格納しておく。
【０１６１】
ステップS1511では、元リストにおける全ての残りのバイナリ特徴のチェックが完了したかどうかを確認し、完了していない場合はステップS1505へ戻って次の候補をチェックする。
【０１６２】
元リストにおける全ての残りのバイナリ特徴のチェックが完了したら、ステップS1514にて候補チェックリストを確認する。この時点で最も参照負荷の少ない２点共キャッシュ・ヒットする特徴は無かったことが確定しているので、次に参照負荷の少ない１点キャッシュ・ヒットした特徴があったかどうかを確認する。
【０１６３】
１点ヒットした特徴が１つ以上あれば、ステップS1515へ進み、これらの中でヒットしなかった点の対応するキャッシュ・ラインのアクセス時期が最も古い特徴を選択する。
【０１６４】
１点ヒットした特徴が１つもなければ、候補チェックリストには１点もキャッシュ・ヒットしない特徴のみが格納されているので、これらの中で２点の内の対応キャッシュ・ラインのアクセス時期が古い方を比較し、これが最も古い時期の特徴を選択する。
【０１６５】
すなわち本実施形態では、１点若しくは２点共キャッシュ・ヒットしなかった場合は、最も古いアクセス時期のキャッシュ・ラインを優先的に入れ替えるものとしているが、これは必ずしも参照負荷を最小にするものではない。より最適化するには、予測的な処理を含めて将来的にアクセスされる可能性の高いラインは入れ替え優先度を下げるようにすればよいが、処理が複雑になるのでここでは説明しない。
【０１６６】
そしてステップS1517にて、選択したバイナリ特徴を、並べ替え特徴リストの次行に格納する。続くステップS1518では、参照履歴テーブルを更新する。今回確定したバイナリ特徴のキャッシュ・ヒットしない参照点についてタグとインデクスを計算して対応するタグ・アレイ相当の情報を更新する。さらにヒットするしないにかかわらず２点の参照点に対応するキャッシュ・ラインのアクセス時期を最新に更新する。そしてステップS1519では、元リストから今回選択したバイナリ特徴を取り除く。尚、ここでは選択済フラグによる管理として、選択済の特徴が次回以降選択されないようにすれば、実際に元リストから当該特徴の情報を削除しなくとも良い。ステップS1520では、元リストにまだ選択されていない残りのバイナリ特徴があるかどうかを確認し、ある場合はステップS1504に戻って、次の特徴の選択処理を行う。
【０１６７】
以上の処理を元リストのバイナリ特徴が無くなるまで続けることにより、キャッシュ・ヒットしやすく、キャッシュ・ヒットしない場合は最も古いアクセス時期のキャッシュ・ラインを入れ替えるアクセス順序となる並べ替え特徴リストが完成する。ターゲットシステム上において、これを識別処理辞書として登録することで、元リストの順にバイナリ特徴計算を行った場合と同一識別精度でありながら、全体のキャッシュ・ヒット率が向上した参照負荷の少ないより高速な識別処理を実現できる。
【０１６８】
＜Fernsの識別処理＞
図１７に、生成した識別処理辞書を用いてターゲットシステム上で実行される識別処理のフローを示す。
【０１６９】
まずステップS1701にて識別対象データを入力する。実施形態と同じく、必要な前処理は事前になされているものとする。
【０１７０】
ステップS1702では、識別処理辞書から、先の学習処理で生成されたアクセス順に並べ替えられたバイナリ特徴リストを読み出し、順次画素参照して計算する。上述の通り、このときのキャッシュ・ヒット率が向上するようにリストが生成されているので、高速に処理可能である。ここで計算したＭ×Ｓ個のバイナリ特徴は、並べ替え前の元の順序が再現できるように、例えば二次元配列状のデータとして一式保持しておく。
【０１７１】
次にステップS1703で、クラス別確率値累積ヒストグラムＨｐを初期化する。このヒストグラムは識別対象データが各クラスである確率値を集計するためのもので、ビンの数は識別するクラスの数に一致する。ここでは全てのビンを０クリアする。
【０１７２】
ステップS1704では、Fernの番号ｍを０から順に１つずつ選択する。
【０１７３】
ステップS1705ではｍ番目のFernの出力値（＝バイナリ特徴値の連結値）を計算する。ここではステップS1702で計算したバイナリ特徴値の内、ｍ番目のFern用であるｍ×Ｓからｍ×Ｓ＋Ｓ−１番の特徴値を参照しＳビットの連結値ｋを計算する。但し、ｍ×Ｓからｍ×Ｓ＋Ｓ−１番とは、上述の学習処理で説明した元リスト上でのインデクス番号に対応する。
【０１７４】
次にステップS1706で、クラスcを番号０から順に選択する。そしてステップS1707で、識別処理辞書に登録されている、ｍ番Fernが連結値ｋを取る場合に、クラスｃである対数確率値Ｌｐm,c,kを参照し、ステップS1709にて、ヒストグラムＨｐのインデクスｃのビンに、この値を加算する。
【０１７５】
ステップS1701では、識別対象の全てのクラスｃに対する対数確率値の加算が完了されたかを確認し、完了していなければステップS1706に戻って次のクラスｃを選択する。
【０１７６】
ステップS1711では、全てのFernに対してクラス別確率集計処理が終わったかを確認し、完了していなければステップS1704に戻って次のFern番号ｍに関する処理を行う。そして最終的にステップS1712にて、累積ヒストグラムＨｐの最大値となるビンを選択し対応するインデクスを識別結果クラスＣとして確定する。
【０１７７】
以上説明したように、本実施形態によればFern型識別器のバイナリ特徴の計算時に、キャッシュ・ヒット率を向上させるように並べ替えたバイナリ特徴リストを用いるので、並べ替えを行わない場合と全く同等の精度でより高速な処理を実現可能となる。このように、一旦生成した識別辞書を、学習後に「チューニング」することにより、本発明を適用するようにすることが可能である。尚、本実施形態のキャッシュ・ヒットする点の数により参照負荷を算出するという考え方は、他の複数点を参照するバイナリ特徴（例えばIntegral imageの４点参照に基づく矩形内総和値等）にも適用可能であることは言うまでもない。
【０１７８】
尚、以上すべての実施形態について、説明を容易にするため、識別処理辞書そのものは識別対象データのキャッシュ動作に影響を与えないところに配置するものとした。例えば、メイン・メモリの非キャッシュ領域や、別のキャッシュの担当領域、或いはROM等の他の記憶領域に配置してある場合等である。しかしながら、もちろん識別処理辞書を識別対象データのキャッシュ動作に影響する領域に配置する場合であっても、本発明を適用することは可能で、この場合は辞書アクセスを含めたシミュレーションによりキャッシュ・ヒット判定するようにすればよい。
【０１７９】
以上、本発明の好ましい実施形態について詳述したが、本発明の考え方は係る特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【０１８０】
例えば、上述の実施形態で述べたタイプの識別処理だけでなく、事前に定めた情報処理規則に則り様々な処理を行う情報処理に適用することができるのは言うまでもない。すなわち情報処理規則とは、識別処理における識別辞書に限定されるものではなく、メモリへのアクセス順序を規定する様々な規則が含まれる。上述の実施形態で述べたように、特徴量の選択時に参照負荷を考慮するか、一通り特徴が揃った後に参照負荷を低減させる計算順序を設定するか、或いはこれらの考え方を部分的に組み合わせる等して適用することができる。
【０１８１】
また、参照負荷の算出方法として、上述の各実施形態のようにキャッシュ・ヒット判定結果を用いるだけではなく、他の方法により算出することも可能である。例えば、所望の要素データにアクセスして演算結果を得るまでにターゲットシステムが要するトータルのシステム・クロック数をシミュレーションにより算出するようにしても良い。
【０１８２】
またターゲットシステムが、フル・アソシエイティブ・キャッシュ等の他のキャッシュ・アーキテクチャや様々なライン・サイズであってももちろん適用可能である。識別対象データのメモリへの格納規則が、上述のラスタ・スキャンやZ-orderingとは異なる方式であっても、適用可能であることは言うまでもない。もちろん情報処理の対象データは画像データに限定されず、配列状の特徴量データや音声データ等、様様な対象データについて同様に適用可能であることは言うまでもない。
【０１８３】
（その他の実施例）
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
2014106736.tif 000012
【図２】
2014106736.tif 000013
【図３】
2014106736.tif 000014
【図４】
2014106736.tif 000015
【図５】
2014106736.tif 000016
【図６】
2014106736.tif 000017
【図７】
2014106736.tif 000018
【図８】
2014106736.tif 000019
【図９】
2014106736.tif 000020
【図１０】
2014106736.tif 000021
【図１１】
2014106736.tif 000022
【図１２】
2014106736.tif 000023
【図１３】
2014106736.tif 000024
【図１４】
2014106736.tif 000025
【図１５】
2014106736.tif 000026
【図１６】
2014106736.tif 000027
【図１７】
2014106736.tif 000028
【図１８】
2014106736.tif 000029
【図１９】
2014106736.tif 000030