(57)【特許請求の範囲】
【請求項１】
動画の複数のフレームの画像のそれぞれから順次に抽出した部分画像が特定パターンに該当するか否かを判別する複数のステージを有する判別処理を実行するデータ処理装置であって、
前記複数のステージの何れかに割り当てられ、割り当てられたステージに応じた識別処理により部分画像が前記特定パターンに該当し得るか否かを判定し、該当し得ると判定した場合には当該部分画像を後段のステージで処理させるべく出力する複数の識別器と、
複数の部分画像を並列に処理するように前記複数の識別器を各ステージに割り当てて部分画像が前記特定パターンに該当するか否かを判定する判定手段と、
前記画像を複数の領域に分け、各領域の画像ごとに、ステージへ入力された部分画像の数と前記特定パターンに該当し得ると判定された数との比から通過率または累積通過率を算出し、算出した通過率または累積通過率をステージ毎に保持手段に保持する算出手段と、
前記動画において、処理対象のフレームの画像から抽出した部分画像が属する領域について、直前に処理されたフレームの画像の対応する領域における通過率または累積通過率を前記保持手段から取得し、取得した通過率または累積通過率に基づいて前記判定手段における各ステージへの識別器の割り当てを変更する変更手段とを備えることを特徴とするデータ処理装置。
【請求項２】
前記変更手段は、前記保持手段に保持されている通過率または累積通過率に基づいて、各ステージで処理されるデータ量を算出し、ステージ間における前記データ量の比に基づいて各ステージに割り当てる識別器の個数を決定し、決定された個数にしたがって各ステージへの識別器の割り当てを変更することを特徴とする請求項１に記載のデータ処理装置。
【請求項３】
前記複数のステージの各々について各識別器が前記部分画像の処理に要する処理時間を記憶する記憶手段を更に備え、
前記変更手段は、
前記通過率または累積通過率に基づいて各ステージで処理されるデータ量を算出し、
各ステージについて、前記データ量と前記処理時間と当該ステージに分配された識別器の数とから求まる各ステージの平均処理時間の最大値が最小になるように各ステージに割り当てる識別器の個数を決定することを特徴とする請求項１に記載のデータ処理装置。
【請求項４】
前記変更手段は、各識別器による処理が完了したか否かを監視し、隣接するステージ間で割り当てられた識別器の数が異なる場合には、前記隣接するステージの前段のステージにおける識別器の処理が完了した順に、当該前段のステージにおける識別器を後段のステージにおける処理が完了した識別器と接続することを特徴とする請求項１乃至３の何れか１項に記載のデータ処理装置。
【請求項５】
フレーム間の物体の動きに基づいて各画素の動きベクトルを検出する検出手段を更に備え、
前記変更手段は、各画素の位置を対応する動きベクトルが示す移動量だけ戻し、戻した後の位置が属する領域の通過率または累積通過率を前記保持手段から取得し、取得した通過率または累積通過率に基づいて前記判定手段における各ステージへの識別器の割り当てを変更することを特徴とする請求項１乃至４のいずれか１項に記載のデータ処理装置。
【請求項６】
動画の複数のフレームの画像のそれぞれから順次に抽出した部分画像が特定パターンに該当するか否かを判別する複数のステージを有する判別処理を実行するデータ処理装置の制御方法であって、前記データ処理装置は、前記複数のステージの何れかに割り当てられ、割り当てられたステージに応じた識別処理により部分画像が前記特定パターンに該当し得るか否かを判定し、該当し得ると判定した場合には当該部分画像を後段のステージで処理させるべく出力する複数の識別器を有し、
前記制御方法は、
判定手段が、複数の部分画像を並列に処理するように前記複数の識別器を各ステージに割り当てて部分画像が前記特定パターンに該当するか否かを判定する判定工程と、
算出手段が、前記画像を複数の領域に分け、各領域の画像ごとに、ステージへ入力された部分画像の数と前記特定パターンに該当し得ると判定された数との比から通過率または累積通過率を算出し、算出した通過率または累積通過率をステージ毎に保持手段に保持する算出工程と、
変更手段が、前記動画において、処理対象のフレームの画像から抽出した部分画像が属する領域について、直前に処理されたフレームの画像の対応する領域における通過率または累積通過率を前記保持手段から取得し、取得した通過率または累積通過率に基づいて前記判定手段における各ステージへの識別器の割り当てを変更する変更工程とを有することを特徴とするデータ処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の処理モジュールを直列に接続し、ある処理の結果に応じて次の処理が実行されるか否かが決定されるカスケード処理を行うデータ処理装置及びその制御方法に関する。
【背景技術】
【０００２】
一般に、デジタルカメラやプリンタにおいて、入力画像中の人物や顔といった特定の被写体を検出し、検出された被写体に適した処理を行う技術が提案されている。この特定の被写体を検出する一例として、顔に対して肌色補正処理を行うための、顔検出処理がある。人間の顔検出処理には、非特許文献１による手法（Viola＆Jones手法と呼ぶ）、人間の顔の対称的特徴、テンプレート・マッチング、ニューラル・ネットワークなどを利用した手法など、種々の方式が提案されている。
【０００３】
Viola＆Jones手法においては、Adaboostによる学習結果（特徴量）を元に複数の識別処理が実行される。この複数の識別処理はカスケード処理を実現するものであり、各識別処理は、識別を行った結果、次の識別処理を行う時はTrueを、次の識別処理を行わない時はFalseを出力する。そして、識別結果がFalseであった場合は当該識別処理を終了する。ここで使用される学習結果の特徴量の一例を図１５の（ａ）に示す。特徴量２１０は、両目部分の小矩形と両目下部分(頬の部分)を比べると、両目部分のは両目下部分のより黒っぽいという特徴を示す特徴量である。また、特徴量２１１は、両目部分において、目の部分は黒っぽく、目と目の間である眉間部は、目の部分に比べ、白っぽいという特徴を示す特徴量である。このような学習結果（学習された特徴量）を入力データと照らし合わせ、全ての特徴量に対する識別処理がTrueと出力された場合、顔であると判断される。
【０００４】
また、Viola＆Jones手法では、ある区切り（以下、ステージ）で識別処理が区切られ、ステージ毎にTrue、Falseの識別を行っていくことで、顔と非顔を識別していく。また、前段のステージでは、false negative（顔を非顔と判定すること：見落とし）を最小化し、falsepositive（非顔を顔と判定すること：誤検出）が比較的高めの確率になるような単純な特徴のみを用いている。単純な特徴のみを用いると、少ない演算回数で識別処理が可能となるため、プロセッサを用いて処理を行った場合においても高速処理が可能となる。さらに、なるべく多くの矩形領域を、より前段で効率よくFalse（非顔）と識別していくことが出来るため、画像全体に対する顔検出処理を短時間に完了することが可能になる。
【０００５】
画像全体から矩形領域を切り出して、前記識別処理を順次実施する際の矩形領域の切り出し順序にはいくつかの方法が考えられるが、画像左上画素を開始点とし主走査方向（水平方向）に１画素ずつ走査していく方法が広く用いられている。図１４Ａの（ａ）を用いてこの走査方法について説明する。入力画像を、識別処理を行う矩形領域高さで主走査方向に分割した短冊状の領域をバンドと呼ぶ。図１４Ａの（ａ）においてBand_Aは、入力画像の左上画素を上端とするバンドである。また、Band_aは、Band_Aの上端から１画素分副走査方向（垂直方向）にずれた画素を上端とするバンドである。上記の走査方法においては、まず入力画像の左上画素を始点とし、矩形領域の左上画素が始点と一致する矩形領域（サブウインドウ）に対して識別処理を行う。次に、主走査方向に１画素ずつずれた矩形領域に対して順次識別処理を行っていき、矩形領域の右端が入力画像右端と一致するまで処理を行う。この時点でBand_Aに対する処理が完了する。次に、Band_A処理時の始点から副走査方向に１画素ずれた画素を始点として、主走査方向に１画素ずつずれた矩形領域に対して順次識別処理を行っていき、矩形領域右端が入力画像右端と一致する点まで処理を行う。この時点でBand_aに対する処理が完了する。以下、１画素ずつ副走査方向にずらしながら、矩形領域の下端が入力画像の下端と一致するまでバンドに対する処理を行っていく。
【０００６】
上述の走査方法を用いて順次識別処理を行う場合に、識別処理の初段ステージ（ステージ０）において、走査の進行に応じて識別結果がFalseからTrueへと遷移し、次にTrueからFalseに遷移する様子を、図１５を用いて説明する。ステージ０では、図１５の（ａ）に示した特徴量２１０を用いて識別処理を行うものとする。図１５の（ｂ）から（ｅ）は、入力画像の顔部分に対し、矩形領域が主走査方向に走査した際の、特徴量２１０と顔部分の相対位置を示したものである。（ｃ）に示される矩形領域位置では、ほぼ顔が矩形領域の中心に位置しているため、特徴量２１０との照合結果がTrue（顔らしい）と判定される。（ｂ）および（ｄ）は、特徴量２１０との照合結果がTrue（顔らしい）と判断される矩形領域の左端および右端を示している。すなわち、（ｂ）の１画素左の矩形領域の識別結果はFalse（非顔）と判定され、（ｄ）の１画素右の矩形領域の識別結果もFalse（非顔）と判定される。（ｅ）は、（ａ）から（ｄ）へと走査が進行する際に識別結果がFalseからTrueへと遷移し、次にTrueからFalseに遷移する様子を示している。
【０００７】
このように、走査の進行に伴って識別結果はFalseからTrue、TrueからFalseへの遷移を繰り返すが、入力画像に含まれる顔部分の密度に応じてTrueおよびFalseの出現頻度は変動する。図１６の（ａ）〜（ｃ）を用いて、顔部分の密度により、ステージ０におけるTrueおよびFalseの出現頻度がどのように変動するかを説明する。図１６において、識別結果がTrueとなった矩形領域の左上にはTと示し、Falseとなった矩形領域の左上にはFと示す。
【０００８】
図１６の（ａ）は顔部分が単独で存在する場合の例を示している。走査の進行に応じてT(True)が９個続いたあとF(False)が２７個続いている。（ｂ）は、同一バンド内に２つの顔部分がある距離を持って存在する場合の例を示している。T(True)が９個続いたあとF(False)が６個続き、更にT(True)が９個続いたあとF(False)が６個続いている。（ｃ）は、同一バンド内に２つの顔部分が隣接して存在する場合の例を示している。T(True)が９個続いたあとF(False)が１個続き、更にT(True)が９個続いたあとF(False)が１個続いている。
【０００９】
以上から、顔検出処理に用いられる各識別器の出力結果としてTrueの出現頻度が高いかFalseの出現頻度が高いかは、入力画像に含まれる顔部分の密度に依存することがわかる。顔検出においては識別処理がステージとして区切られ、ステージ毎にTrueかFalseかの識別が行われる。各ステージにおけるTrueの出現確率を以下「通過率」と呼ぶ。図１６の（ａ）の場合、ステージ０の通過率は、T(True)とF(False)の割合から１／４と計算される。同様に、（ｂ）のような割合で顔が出現する場合は３／５、（ｃ）のような割合で顔が出現する場合は９／１０となる。
【００１０】
次に、複数ステージが直列に接続されたカスケード処理におけるステージ毎の通過率と、ステージ初段からあるステージまでが連続して識別結果としてTrueとなる確率（累積通過率）の関係を説明する。
【００１１】
先頭である１段目の識別処理の処理総数（入力される矩形領域数）をSとする。次の２段目の識別処理には、その前段である１段目の識別処理でTrueと識別されたものだけが入力されることになる。よって、２段目の識別処理が処理するデータ量、すなわち矩形領域数は、１段目の識別処理が処理する矩形領域数に１段目の識別処理の通過率p[1]をかけたもの(S*p[1])となる。更に、３段目の識別処理が処理するデータ量、すなわち矩形領域数は、２段目の識別処理が処理する矩形領域数に、２段目の識別処理の通過率p[2]をかけたもの、すなわち、S*p[1])*p[2]となる。以下、同様の計算により、Ｎ段目の識別処理が処理するデータ量、すなわち矩形領域数は、
S*p[0]*p[1]*・・・*p[N-2]*p[N-1]
で表される。以下、p[0]*p[1]*・・・・*p[N-1]をステージNにおける識別処理の累積通過率P[N]と呼ぶ。また、１段目の識別器には入力データが全て入力されるので、P[0]=1（１００％の通過率で１段目の識別器に入ってくる）となる。
【００１２】
前述した通り、通過率は、入力画像の種類や入力画像内の処理位置（処理対象となる矩形領域位置）により変動する。すなわち、集合写真のように顔密度が高い画像の通過率は、風景写真のように顔密度が低い入力画像の通過率よりも総じて高い値となる。また、集合写真であっても、写真上部に風景が撮影され、写真下部に人物が撮影されているような入力画像の場合、写真下部の方が顔密度が高くなる。したがって、顔密度が高い写真下部（人物部）に対して識別処理を行っている場合の通過率は、顔密度が低い写真上部（風景部）に対して識別処理を行っている場合の通過率よりも総じて高い値となる。
【００１３】
入力画像の種類や入力画像内の処理位置により前記累積通過率がどのように変動するかを図１４Ａ、図１４Ｂを用いて具体的に説明する。図１４Ａの（ａ）は入力画像中に比較的多くの顔部分を含む集合写真の一例である。（ａ）中に示したBand_A,B,C,Dにおける各ステージの累積通過率の平均値を、図１４Ｂのグラフに示す。Band_Aのように顔密度の低いバンドにおいては、ステージ0の識別処理によりほとんど全ての矩形領域が非顔と判定されるため、ステージ１における平均累積通過率はほぼ０％となる。一方、Band_Dのように顔密度の高いバンドでは、全てのステージにおいて多くの矩形領域が顔らしいと判定されるため、ステージ２における平均累積通過率は５０％以上となっている。以上から分かるように、総じて顔密度の高い入力画像においても、処理位置によって累積通過率は著しく異なる。
【００１４】
一方、図１４Ａの（ｂ）は、入力画像中の顔部分が、（ａ）と比べて少ない集合写真の一例である。図１４Ｂのグラフには、図１４Ａの（ｂ）に示したBand_X,Y,Zおける各ステージの累積通過率の平均値も示されている。Band_Xにおいては、図１４Ａの（ａ）のBand_Aと同様の平均累積通過率となるが、（ｂ）の中で最も顔密度が高いBand_Zでもステージ２における平均累積通過率は５０％を下回っている。すなわち、（ａ）と（ｂ）のように異なる入力画像では、同じ処理位置であっても平均累積通過率は著しく異なる。
【００１５】
Viola＆Jones手法に代表される識別処理は、複数ステージからなる多段のカスケード処理により実現されており、なるべく前段のステージでより多くの矩形領域を非顔と判定することにより処理の高速化を図っている。しかしながら、以上に述べてきたように、各ステージにおいて非顔と判定される確率は入力画像の種類や入力画像内の処理位置により著しく異なるという特徴を持つ。
【００１６】
昨今、デジタルカメラ等に顔検出機能を搭載する事例が増えている。また、今後は単に機能を搭載するのみならず、撮影時に顔検出処理をリアルタイムに行いたいという処理の高速化要求が高まっている。識別処理に限らずデータ処理を高速化する一般的な手法としては、動作周波数を上げる手法や、入出力データの転送律速を防ぐために、内部にＦＩＦＯやＲＡＭを持つ手法がある。また、処理を時間的・空間的に並列化する手法が広く用いられている。時間的並列処理（パイプライン処理）では、カスケード状に並んだ各ステージに対して、専用の識別器を装備することにより、ステージ毎に装備された各々の識別器が同時並列動作可能となるため、処理の高速化が図られる。ただし、各ステージの処理時間の中で最長の処理時間が全体の処理時間を律速する。従って、全ステージの通過率が１００％で、各ステージの処理時間が均一であるならば、ステージ数分（ステージが３つであれば、４倍）の高速化が可能となる。
【００１７】
また、空間的並列処理とは、前述したパイプライン処理を更に高速化するため、パイプラインを複数装備することにより、複数の入力データを同時処理する高速化手法である。この空間的並列処理では、其々のパイプライン処理に対し、入力データを滞りなく供給できる場合において、空間的並列化した分（パイプラインを４基搭載すれば、４倍）の高速化が可能となる。したがって、１２個の識別器により、ステージ数が３のパイプラインを４基搭載するように構成することで理論上は１２倍の高速化を達成することができる。
【先行技術文献】
【特許文献】
【００１８】
【特許文献１】特開２００３−２５６２２１号公報
【非特許文献】
【００１９】
【非特許文献１】P. Viola and M. Jones, “RobustReal-time Object Detection”, SECOND INTERNATIONAL WORKSHOP ON STATISTICAL ANDCOMPUTATIONAL THEORIES OF VISION, July 13 2001.
【発明の概要】
【発明が解決しようとする課題】
【００２０】
上述したように、顔検出における識別処理を高速化するために、従来技術では、時間的並列処理と空間的並列処理を組み合わせることにより性能の向上を図っている。例えば、１２個の識別器を搭載することにより、識別器１個の場合に比べてパイプライン段数×空間並列度分（上記の例では１２倍）の性能向上を狙っている。
【００２１】
しかしながら、前述したように、入力画像の種類や画像内の処理位置によって平均累積通過率が大幅に変動する。顔密度の高い場合にはパイプライン段数×空間並列度分に近い性能向上が得られるが、顔密度が低い場合には性能向上がパイプライン段数×空間並列度分に遠く及ばない。すなわち、従来技術の時間的空間的並列処理を用いた高速化手法には、通過率によっては充分な性能向上が達成できなくなるという課題に加え、入力画像の種類や画像内の処理位置による性能変動が著しいという課題があった。
【００２２】
この性能低下および性能変動は、あるステージの平均累積通過率が変動により低下した際に、後段ステージに対するデータ供給が滞ることにより、後段ステージに装備された識別器が稼動しない状況に陥ることによって生じる。識別器が稼動しない状況を詳しく説明するため、１２個の識別器を用いてステージ数３のパイプラインを４基搭載した構成で、図１４Ａの（ａ）、（ｂ）の画像を処理した場合を考える。図１７において、（ａ）〜（ｄ）、（ｆ）〜（ｇ）は、それぞれBand_A/X,B,C、D,Y,Zに対して識別処理を行った場合の各識別器の平均的な稼動状態を模式的に示した図である。また、（ｅ）、（ｈ）はそれぞれ、図１４Ａの（ａ）の画像における平均通過率、図１４Ａの（ｂ）の画像における平均通過率における各識別器の平均的な稼動状態を模式的に示した図である。ただし、以下の説明では全ての識別器の処理時間は同一であると仮定する。
【００２３】
図１７の（ａ）〜（ｈ）において、白で示した識別器が常時稼動する識別器(モジュール)、ハッチングで示したものが前段の処理結果によって稼動または停止するモジュールである。また、クロスハッチで示したものは、常時停止するモジュールである。各バンドのステージNにおける識別処理の平均累積通過率P[N]を、前述の図１４Ｂに示すグラフから求めると、Band_Aにおいては、P[1]=10%、P[2]=2%となる。従って、ステージ０では４個の識別器が常時稼動しているが、ステージ１、ステージ２においては各々３個の識別器は常時停止しており、ステージ１で唯一稼動している識別器の稼働率は40%、ステージ２で唯一稼動している識別器の稼働率は0.8%、となる。よって、Band_Aでは、約4.5（=4+0.4+0.08）倍の性能しか得られない。一方、Band_Dにおいては、平均累積通過率が高くP[1]=92%、P[2]=90%であることから、ステージ１、ステージ２ともにほとんど全ての識別器が常時稼動状態となる。その結果、約11.3（=4+4x0.92+4x0.9）倍という目標性能に近い高速化が測れる。しかし、図１４Ａの（ａ）の画像全体の平均累積通過率は、P[1]=50%、p[2]=40%であり、約7.6（=4+4x0.5+4x0.4）倍の高速化しか図れない。
【００２４】
以上のような分析を各バンドに対して行うと、図１４Ａの（ａ）のBand_Dにおいては、各ステージの平均累積通過率が高いため目標値である12倍に近い約11.3倍の性能が得られる。しかしながら、Band_Cでは約8.4倍、Band_Bでは約5.8倍、Band_Aでは約4.5倍の性能しか得られず、画像全体では約7.5倍の性能しか得られないことがわかる。同様に、図１４の（ｂ）に示す画像においては、Band_Xでは約4.5倍（（ａ）のBand_Aと同様）、Band_Yでは約4.9倍、Band_Zでは約6.8倍、画像全体では4.7倍と、（ａ）に比べて更に低い性能となる。
【００２５】
以上の説明では、全ての識別器の処理時間が同一であると仮定したが、実際には各ステージの処理負荷は異なる。そのため、前述した時間的並列処理における処理律速（各ステージの処理時間の中で最長の処理時間が全体の処理時間を律速）が生じる可能性があり、更なる性能低下要因となる。
【００２６】
従来から、プロセッサの稼働率を均一化して処理性能向上および安定を図るため、様々な動的負荷分散の手法が提案されている。例えば、特許文献１では、以下のような提案がなされている。すなわち、複数プロセッサの各処理時間帯に対して、並列プログラムから生成されるプロセスを、各並列プログラムに対して予め設定されたプロセッサ配分率に応じた時間に従ってそれぞれ割り当てる。そして、各プロセッサそれぞれの処理時間帯のうちプロセスが割り当てられていない空き時間帯に対して、ある並列プログラムから生成される複数の並列プロセスを、並列動作可能に割り当てられるかを判定する。並列動作が可能な場合、空き時間帯に対し他の並列プロセスを追加で割り当て、各プロセッサは、各プロセッサそれぞれの処理時間帯に割り当てられた並列プロセスを実行する。
【００２７】
しかしながら、特許文献１の技術は、ターンアラウンド時間の保証が必要なプロセスを予め決まったタイムスロットに割り付けた上で、並列動作可能な複数の並列プロセスを空きタイムスロットに追加割り当てするものである。これにより、ターンアラウンド時間を保証しつつ、プロセッサの稼働率を向上させる。しかしながら、特許文献１は、予め決まった負荷のプロセスを処理する場合しか考慮していない。すなわち、従来技術のいずれにおいても、ステージ毎の通過率と処理時間に着目した制御は行っていない。そのため、Viola＆Jones手法に示した顔検出のように、ある処理の結果に応じて次の処理が実行されるか否かが決定されるような複数の処理を制御するデータ処理（いわゆるカスケード処理）において、処理（プロセス）の負荷（実行時間）が入力データに依存して変動する場合には、性能低減および性能変動を抑制する効果は乏しいという課題があった。
【００２８】
本発明は、上記の課題に鑑みてなされたものであり、入力画像の種類や画像内の処理位置による性能変動が少なく、均一で高い処理性能をもつデータ処理装置を提供することを目的とする。
【課題を解決するための手段】
【００２９】
上記の目的を達成するための本発明の一態様によるデータ処理装置は以下の構成を備える。すなわち、
動画の複数のフレームの画像のそれそれから順次に抽出した部分画像が特定パターンに該当するか否かを判別する複数のステージを有する判別処理を実行するデータ処理装置であって、
前記複数のステージの何れかに割り当てられ、割り当てられたステージに応じた識別処理により部分画像が前記特定パターンに該当し得るか否かを判定し、該当し得ると判定した場合には当該部分画像を後段のステージで処理させるべく出力する複数の識別器と、
複数の部分画像を並列に処理するように前記複数の識別器を各ステージに割り当てて部分画像が前記特定パターンに該当するか否かを判定する判定手段と、
前記画像を複数の領域に分け、各領域の画像ごとに、ステージへ入力された部分画像の数と前記特定パターンに該当し得ると判定された数との比から通過率または累積通過率を算出し、算出した通過率または累積通過率をステージ毎に保持手段に保持する算出手段と、
前記動画において、処理対象のフレームの画像から抽出した部分画像が属する領域について、直前に処理されたフレームの画像の対応する領域における通過率または累積通過率を前記保持手段から取得し、取得した通過率または累積通過率に基づいて前記判定手段における各ステージへの識別器の割り当てを変更する変更手段とを備える。
【発明の効果】
【００３０】
本発明によれば、ステージ処理毎に検出した通過率とステージ毎の処理時間に基づいてモジュール構成（各ステージの空間並列度、すなわち各ステージに装備すべき識別器数）が動的に変更される。このため、入力画像の種類や画像内の処理位置による性能変動が少なく、均一で高い処理性能が得られるという効果がある。
【図面の簡単な説明】
【００３１】
【図１】第１実施形態に係るデータ処理装置の構成例を示すブロック図。
【図２】実施形態に係るモジュール構成変更部の構成例を示す図。
【図３】複数の識別器により処理を時間的・空間的に並列化する接続例を示す図。
【図４】（ａ）〜（ｄ）は、ステージ毎の累積通過率と、モジュールの割り当ての例を示す図。
【図５】通過率の検出例を示す図。
【図６】（ａ）〜（ｄ）は２４個の識別器の各々の稼動状態を説明する図。
【図７】（ａ）〜（ｄ）は２４個の識別器の接続状態が通過率に応じて変更される様子を示す図。
【図８】（ａ），（ｂ）は識別器の接続構成を決定する手順を説明する図。
【図９】（ａ），（ｂ）は識別器の接続構成を決定する手順を説明する図。
【図１０】隣接するフレームの領域の対応を説明する図。
【図１１】第２実施形態に係るデータ処理装置の構成例を示すブロック図。
【図１２】（ａ），（ｂ）はモジュール構成変更部をネットワーク（インターコネクト）により実現する例を説明する図。
【図１３】プロセッサを用いて識別器を実現した場合を説明する図。
【図１４Ａ】（ａ）、（ｂ）は顔検出を行なう画像例を示す図。
【図１４Ｂ】図１４Ａに示した画像の各部における通過率を示す図。
【図１５】（ａ）は顔認識のための特徴量の例を示す図、（ｂ）〜（ｅ）は顔検出結果の例を示す図。
【図１６】（ａ）〜（ｃ）は、画像中の顔密度の違いによる通過率の変動を説明する図。
【図１７】（ａ）〜（ｈ）は、通過率の変動による識別器の稼働率の変化を説明する図。
【図１８】動画撮影時の隣接フレームにおける画像の類似性を説明する図。
【図１９】フレームＮとフレームＮ−１における認識処理結果の例を示す図。
【図２０】実施形態によるモジュール構成の変更処理を示すフローチャート。
【発明を実施するための形態】
【００３２】
以下、添付の図面を参照して、本発明の好適な実施形態を説明する。
【００３３】
＜第１実施形態＞
図１は、第１実施形態によるデータ処理装置の全体構成の例を示すブロック図である。本実施形態のデータ処理装置は、２以上の所定数のステージからなるデータ処理を複数の処理モジュールを用いて実行する。処理モジュールは所定数のステージの各ステージに割り当てられ、入力データから順次に抽出された部分データについて処理を行い、前段のステージでの処理結果に応じて後段のステージでの当該部分データへの処理を実行するか否かが決定される。
【００３４】
ＣＰＵ１００は、読み出し専用のメモリであるＲＯＭ１０１に記憶されている各種プログラムを実行することにより、データ処理装置の全体を制御する。ＤＲＡＭ１０３は、処理対象である画像データを格納する。ＤＲＡＭ１０３に格納されている画像データは、ＤＲＡＭコントローラ１０２を介して制御器１０５へ供給される。処理部１０６は、パターン識別を行うための１２個の識別器０〜１１を有する。モジュール構成変更部１１０は、所定数のステージの各々に識別器０〜１１を分配し、所定数のステージ間及び少なくとも１つのステージ内において複数の部分データを並列に処理するように識別器を接続する。詳細は、図２及び図３により後述する。
【００３５】
識別処理のスタート時にＣＰＵ１００は、ＲＯＭ１０１にある処理設定データ記憶部１０４より、特徴量等に代表される設定データを取得し、処理部１０６内の各識別器へ設定する。より具体的には、各識別器に、識別器が所属するステージに対応した特徴量（例えば、ステージ０に所属する識別器には図１５の（ａ）に示した特徴量２１０、ステージ１に所属する識別器には特徴量２１１）が設定される。また、ＣＰＵ１００は、処理設定データ記憶部１０４より、画像データ位置（アドレス）等に代表される設定データを取得し、制御器１０５へ設定する。更に、この初期状態において、ＣＰＵ１００は、モジュール構成変更部１１０を初期状態に設定する。モジュール構成変更部１１０では、識別器０〜１１が、３ステージのパイプライン構成が４基並列に接続された状態（図２、図３により後述する）となるように接続が設定される。
【００３６】
制御器１０５、処理部１０６、モジュール構成変更部１１０への設定が終わると、ＣＰＵ１００は制御器１０５および処理部１０６に対し処理の開始を通知する。制御器１０５は、設定された画像データ位置（アドレス）等に基づいてＤＲＡＭコントローラ１０２にアクセスすることにより、ＤＲＡＭ１０３に格納されている画像データから矩形領域のデータを順次読み出し、処理部１０６に転送する。矩形領域については、図１４Ａの（ａ）で説明したとおりである。処理部１０６は転送されてきた矩形領域の画像データに対し、順次識別処理を実行する。処理結果は、結果格納部１１２に格納され、ＣＰＵ１００が結果を読み出すことにより、画像データ内で顔と判断された矩形領域の座標値を知ることが出来る。
【００３７】
図３は、モジュール構成変更部１１０により、識別器０〜１１が３ステージのパイプライン構成で４基並列に接続された場合の、識別器の接続状態（初期状態）を示す図である。識別器の接続は、図２に示すように、モジュール構成変更部１１０による接続の切替により変更することができる。図２では、識別器０が制御器１０５と接続され、識別器０→識別器１→識別器２の順に接続された後、識別器２の出力が結果格納部１１２に供給される。
【００３８】
ある入力画像の一部である矩形領域の画像データ（入力データ0：data_in0）に対し、制御器１０５から識別器０への入力データをdata_in0とし説明を行う。また、valid信号とは、data_inが有効であるか制御するための制御信号であり、識別器０がTrueと判定した場合はvalid_out=1を出力し、Falseと判定した場合は、valid_out=0を出力する。
【００３９】
制御器１０５は制御信号のアサート（valid_in0=1）を検出することにより、有効なデータ（data_in0）が入力されたことを検出する。すると、制御器１０５は、この有効なデータ（data_in0）を識別器０のdata_inに出力するとともに、入力データが有効であることを示すべくを識別器０のvalid_inに「１」を出力する。識別器０はvalid_in=1を検出すると、入力データ（data_in）を基に、識別処理を行い、識別結果（valid_out）を出力する。識別器０出力結果は識別器１の入力信号valid_inとなる。識別器０はTrueと識別した場合には当該入力データを次の識別器１のdata_inに、入力データが有効であることを示す「１」を識別子１のvalid_inに出力する。これにより、識別器１は、有効な入力データを検出でき、処理を行うことができる。このように、data線では、入力データの受け渡しを行い、valid線では、有効データが入力されたかどうか（処理を行うかどうか）の制御を行う。識別器０〜２の識別結果が全てTrueであった場合、識別器２からはvalid_out=1が出力されることにより、入力データ0（data_in0）には、顔が含まれると判断される。以上に述べた構成とすることにより、３つのステージの識別器が完全に同時並列動作可能な場合には、識別器１個の構成と比べて最大３倍の処理高速化が図られる。
【００４０】
また、図３では、上述の時間的並列処理を更に高速化するために、空間的並列処理を行うように識別器が接続される。すなわち、３つのステージの処理を実行するパイプライン構成を４基並列に接続することにより、合計で１２倍の高速化を目指している。したがって、図３の構成では、空間並列処理を行うために、どの座標の矩形領域の処理結果であるか判別するための、矩形領域の座標位置を示す座標データ（coord_in）が用いられる。制御器１０５にdata_in、valid_inが入力されると、ステージ0用に搭載された４個の識別器０，３，６，９には、data_in0、data_in1、data_in2、data_in3と順番に入力される。
【００４１】
その後、其々の空間並列処理を行った後、ステージ２用に搭載された４個の識別器２，５，８，１１から、結果格納部１１２に対し、coord_out0、coord_out1、coord_out2、coord_out3が入力される。つまり、ステージ０用に搭載された識別器数が４倍になり、各々異なる４つの矩形領域データ（data_in0、data_in1、data_in2、data_in3）に対して同時に処理を行うことが出来る。このため、１２個の識別器が完全に同時並列動作可能な場合には、識別器１個の構成と比べて最大１２倍の処理高速化が図られる。なお、図２の信号線（入力信号inおよび出力信号out）は、図１で示した３種類の入出力信号(座標データ(coord_in/out)、画像データ(data_in/out)、制御信号(valid_in/out))を１本に束ねて表記したものである。
【００４２】
図１に戻り、本実施形態のデータ処理装置は、更に、通過率検出部１０７、処理時間記憶部１０８、算出部１０９、通過率記憶部１１５、通過率参照部１１６を有する。また、識別器間の接続が、算出部１０９による計算結果に応じて、モジュール構成変更部１１０を介して変更される。
【００４３】
通過率検出部１０７は、各々の識別器が出力する識別結果信号（result信号）（本実施形態では、valid線と同じ）を入力することにより、各ステージの通過率（後段のステージに処理を実行させる処理結果が得られた率）を検出する。通過率検出部１０７により検出された各ステージ（識別器）の通過率は、通過率記憶部１１５に、各領域毎に１フレーム分記憶される。算出部１０９（ＣＰＵ１００により実行される算出プログラム）は、通過率記憶部１１５に記憶された前フレームの通過率（後述）と、処理時間記憶部１０８に記憶された各ステージにおける識別器の処理時間とを用いてモジュール構成を算出する。
【００４４】
次に、図１０、図２０を用いて、通過率検出部１０７、通過率記憶部１１５、通過率参照部１１６の動作を説明する。図１０は、本実施形態のデータ処理装置の入力データとなる画像の例を示した図であり、現在の入力データ（フレームＮ）とその前の入力データ（フレームＮ−１）が示されている。各処理データ（各フレームの画像）は、領域０、領域１のように矩形領域に区切られており、この矩形領域ごとに、通過率の算出、記憶、参照が行われる。そして、フレームＮの領域０に対して例えば識別処理をする際には、通過率参照部１１６により通過率記憶部１１５に記憶されているフレームＮ−１における領域０の通過率を参照する。通過率検出部１０７は、各々の識別器が出力する識別結果信号を入力として、各ステージの各矩形領域の通過率を算出しており、フレームＮの領域０のデータ処理が完了した時点で、領域０に対応する新たな通過率を通過率記憶部１１５に格納する。すなわち、通過率検出部１０７は、画像を複数の領域に分け、各領域の画像について、各ステージにおける部分画像の入力量と後段への出力量とから通過率を算出する。そして、通過率検出部１０７は、算出した各ステージの通過率を領域毎に通過率記憶部１１５に保持する。なお、通過率に代えて累積通過率を保持するようにしてもよい。
【００４５】
上述したViola&Jones手法に代表される認識処理は、動画像の認識にも適用される。そのような認識処理の動画への適用例としては、デジタルカメラで顔を検出し合焦を行う処理や、監視カメラで顔を検出し不審者を特定する処理などがあげられる。認識処理を動画像に適用した場合には、図１８に示すような動画像のフレーム群１８０１の各々に対して認識処理を行うことになる。このとき、図１８に示すように、あるフレーム（フレームＮ）とその直前のフレーム（フレームＮ−１）の画像１８０３と画像１８０４は類似しており、非常に似た処理結果を示す可能性が高い。すなわち、１フレーム前の処理で顔が検出された領域の近辺では、１フレーム後の処理でも顔が検出される可能性が高いということである。これは、動画像のフレームレートに対して、顔や人体などの認識対象物の移動速度が十分に遅いと考えられるからである。図１９にフレームＮ−１の認識処理結果とフレームＮの認識処理結果例を示す。図内の数字はそれぞれ、処理が最後にTrueとなったステージ番号を表す。この図から、フレーム間の処理結果の相関が高いことがわかる。
【００４６】
したがって、本実施形態は、このようなフレーム間の関係を利用し、処理中の１つ前のフレームで検出された通過率を用いてモジュール構成を動的に変更する。なお、本実施形態では、識別対象の特定パターンを人の顔とした場合を説明するが、識別対象の特定パターンはこれに限られるものではない。図２０は本実施形態のモジュール構成変更の処理を説明するフローチャートである。まず、通過率参照部１１６が、領域０について、前フレームの画像を処理して得られた通過率または累積通過率を通過率記憶部１１５から取得する（Ｓ１０１，Ｓ１０２）。次に、算出部１０９は、前フレームの画像の領域０における通過率または累積通過率に基づいて、各ステージに割り当てる識別器の個数を決定する（Ｓ１０３）。そして、ＣＰＵ１００は、モジュール構成変更部１１０を制御して、算出部１０９が算出した個数に基づいて各識別器を各ステージに割り当てる（Ｓ１０４）。こうして変更されたモジュール構成で、処理対象の画像（現フレームの画像）における領域０の部分画像に対して判別処理が行われる（Ｓ１０５）。
【００４７】
領域０について判別処理を終えると、当該判別処理の結果として通過率検出部１０７が検出した各ステージの通過率もしくは累積通過率を通過率記憶部１１５に保持する（Ｓ１０６）。このとき、前フレームの対応する領域の情報を上書きするようにしても良い。以上のＳ１０２〜Ｓ１０６の処理を、他の全ての領域について実行し（Ｓ１０７：ＮＯ、Ｓ１０８）、全領域の処理を終えると本処理を終了する（Ｓ１０７：ＹＥＳ）。以下、本実施形態によるモジュール構成の変更の処理（Ｓ１０２〜Ｓ１０４）について詳細に説明する。
【００４８】
なお、領域ｎ毎の部分画像に対する判別処理は、領域ｎにおける全ての部分画像について処理を終えたら領域ｎ＋１に処理対象を移すようにしても良いが、これに限られるものではない。たとえば、主走査方向にＮ個、副走査方向にＭ個の領域を有するように分割した場合、図１０の領域０、領域１、…領域Ｎの１列目について処理を行い、次いで、領域０、領域１、…領域Ｎの２列目について処理を行うようにしてもよい。その場合、処理対象の領域が変わるたびに対応する領域の通過率／累積通過率を取得し、これに基づいて各ステージへの識別器の割り当てを変更するようにする。
【００４９】
モジュール構成変更部１１０は、算出部１０９により算出された構成情報に基づきモジュール構成を変更する。モジュール構成変更部１１０は、制御器１０５からの入力信号（in0〜in11）と結果格納部への出力信号(out0〜out11)と、識別器０〜１１の入出力信号の全接続を設定できるようにクロスバースイッチで構成されている。水平に配置された複数スイッチのうち最大一箇所のスイッチを接続（ＯＮ）することにより、入出力間の接続が確立される。スイッチの開閉（ＯＮ／ＯＦＦ）は、経路（スイッチ）設定部１１４により制御される。
【００５０】
次に、算出部１０９が、通過率参照部１１６が通過率記憶部１１５を参照することにより得られた各ステージの通過率と、処理時間記憶部１０８に記憶された各ステージの処理時間とを用いてモジュール構成を算出する方法を説明する。以下、図４の（ａ）〜（ｄ）（以下、例１〜例４という）に示す、ある時間で検出した通過率と処理時間を用いて詳細に説明する。
【００５１】
ステージNに装備された識別器１個あたりの処理時間をTm[N]、ステージNにおける累積通過率をP[N]とする。この場合、ステージNにおいて１つの入力データ（矩形画像データ）のデータ量を１個の識別器で処理するのに必要な平均処理時間Td[N]は以下の式（１）で与えられる。
【００５２】
Td[N]  ＝  Tm[N]＊P[N] ・・・（１）
Td[N]は、識別器１個あたりの平均処理時間であるため、同じステージを処理することができる識別器（モジュール）を複数装備すれば、このステージあたりの処理を分担することが可能となる。従って、ステージNに装備される識別器（モジュール）の数をNum[N]とすると、ステージNにおける入力データ(矩形画像データ)１つあたりの処理時間T[N]は以下の式（２）で与えられる。
【００５３】
T[N]  ＝  Td[N]/Num[N] = (Tm[N]＊P[N])/Num[N] ・・・（２）
前述したように、時間的並列処理の効率を最適化するためには各ステージの処理時間が均一であることが望ましい。すなわち、全てのステージにおいてT[N]が均一になるようにNum[N]を決定することにより、ステージ毎に装備すべき最適な識別器の数が算出可能である。以下、図４の例１に示す各ステージにおける識別器１個あたりの処理時間Tmと累積通過率Pの情報を基に、算出部１０９が、ステージ０,１,２の各々が装備すべき最適な識別器の数Num[0]、Num[1]、Num[2]を算出する方法を説明する。
【００５４】
全てのステージにおいて処理時間を均一にするためには、
(Tm[0]*P[0])/Num[0] = (Tm[1]*P[1])/Num[1]=(Tm[2]*P[2])/Num[2]・・・（３）
となるように各ステージに分配される識別器の個数Num[0]、Num[1]、Num[2]を決定すればよい。これは、累積通過率により求まる各ステージで処理されるデータ量と各ステージの処理時間とから、ステージごとの処理時間が均一になるように各ステージに分配する識別器の個数を決定しているものである。式（３）に例１の識別器１個あたりの処理時間Tmと累積通過率Pを代入すると、
(1*1)/Num[0] =(1*1/2)/Num[1]=(1*(1/2*1/2))/Num[2]
となり、
Num[0]:Num[1]:Num[2]=4:2:1・・・（４）
となる。従って、通過率参照部１１６により参照された通過率を用い、各ステージにおける識別器（処理モジュール）の数が式（４）の比率となるように各ステージを構成することにより、停止状態となるモジュールの少ない最適な回路構成にすることが可能となる。なお、例２、例３、例４も同様の方法でステージ間のモジュール数の比を算出した例を示している。
【００５５】
なお上記の算出は、ＣＰＵ１００が、
・処理時間記憶部１０８に格納されている識別器１個あたりの処理時間を読み出し、
・通過率参照部１１６により参照された、通過率記憶部１１５に記憶されている通過率から累積通過率を算出し、
・式（３）の各項を演算するなどして式（４）の識別器数比を求める、算出プログラムを実行（算出部１０９）することによって実現可能である。
【００５６】
次に、本実施形態によるモジュール構成変更を実施した場合の、性能向上および性能安定の効果を図５〜図７を参照して説明する。ただし、通過率変動と性能の関係を分かりやすく説明するため、全ての識別器の処理時間は、例１に示すように同一（Tm[0]=Tm[1]=Tm[2]=1）であると仮定する。また、通過率検出部１０７により検出された前フレームの通過率が、図５の例（１）〜（３）に示されているように通過率記憶部１１５に記憶されているものとする。
【００５７】
以下では、処理部１０６は２４個の識別器を有し、３ステージのパイプライン構成が、８基並列に接続可能であるとする。図６は、従来通りの、モジュール構成が不変の場合を示し、図７は、本実施形態にしたがってモジュール構成が変更される場合を示す。まず、モジュール構成の初期状態を簡略化して図６の（ａ）、図７の（ａ）に示す。初期状態では、３段のステージの各々に８個ずつの識別器を装備し、時間的並列度３、空間的並列度８として構成される。識別器の総数は２４個であり、識別器１個の構成に対し、最大２４倍の性能向上を狙ったものである。
【００５８】
動作開始後、通過率記憶部１１５に記憶されてる前フレームでの通過率が、例（１）に示したようにステージ０でp[0]=3/20、ステージ１でp[1]=1/3であるとする。この場合、累積通過率は、P[1]=3/20,P[2]=1/20と算出される。ここで、全ての識別器の処理時間は同一（Tm[0]=Tm[1]=Tm[2]=1）であると仮定している。そのため、累積通過率P[1]=3/20、P[2]=1/20を用いると、式（３）を満たすモジュール数の比はNum[0]:Num[1]:Num[2]=20:3:1と算出される。算出部１０９は、こうして算出されたモジュール数比となるようにモジュール構成変更部１１０に指示する。この結果、図７の（ｂ）に示すように、すなわち、Num[0]=20、Num[1]=3、Num[2]=1となるように、モジュール構成変更部１１０は構成（各ステージに割り当てるモジュールの個数）を変更する。この場合、全ての識別器が常時稼動した状態となるため、識別器１個の構成に対し２４倍の性能となる。
【００５９】
一方、従来技術の構成においては、例（１）に示される通過率の場合、図６の（ｂ）に示すように、ステージ２用に搭載された識別器のうち７個は常に停止状態となり、残りの１個がStage０，１の結果により稼動又は停止する状態になる。なお、図１７と同様、常時稼動する識別器を白、前段の結果によって稼動または停止するモジュールをハッチング、常時停止するモジュールをクロスハッチで示している。この際の処理性能は、累積通過率がP[1]=3/20、P[2]=1/20であることから、識別器１個の構成に対し約9.6(=8+8x3/20+8x1/20)倍となり、本実施形態に比べ、40％の性能しか得られない。
【００６０】
前フレームでの通過率は領域ごとに変動しており、これから処理しようとする領域に関して、例（２）に示した通過率（ステージ０，１の通過率p[0]=1/3、p[1]=4/5）が通過率記憶部１１５に記憶されていたとする。この場合、累積通過率は、P[1]=1/3、P[2]=4/15）と算出されることになる。この場合、式（３）を満たすモジュール数の比はNum[0]:Num[1]:Num[2]=15:5:4と算出され、図７の（ｃ）に示すように、Num[0]=15、Num[1]=5、Num[2]=4となるように構成が変更される。この場合の性能も例（１）と同様、全ての識別器が常時稼動した状態となるため、識別器１個の構成に対し２４倍の性能となり、通過率変動による性能変動は生じない。
【００６１】
一方、従来技術の構成においては、図６の（ｃ）に示すように、例（１）の通過率の場合と同様に、例（２）においても多くの識別器が停止状態となる。累積通過率がP[1]=1/3、P[2]=4/15であることから、識別器１個の構成に対し約12.8（=8+8x1/3+8x4/15）倍の処理性能となり、本実施形態に比べ、50%程度の性能しか得られない。
【００６２】
更に前フレームでの通過率が変動し、これから処理しようとする領域に関して例（３）に示した通過率（ステージ０，１の通過率p[0]=4/5、p[1]=3/4）が通過率記憶部１１５に記憶されていたとする。この場合、累積通過率はP[1]=4/5、P[2]=3/5と算出される。この場合、式（３）を満たすモジュール数の比はNum[0]:Num[1]:Num[2]=5:4:3と算出され、図７の（ｄ）に示すように（Num[0]=10、Num[1]=8、Num[2]=6となるように構成が変更される。識別器１個の構成に対する性能は例（１）、例（２）と同様２４倍となり、依然高い性能を維持される。
【００６３】
一方、従来技術の構成においては、図６の（ｄ）に示すように比較的通過率の高い例（３）においても、全ての識別器が常時動作する訳ではない。この場合、累積通過率がP[1]=4/5,P[2]=3/5であることから、識別器１個の構成に対し約19.2（=8+8x4/5+8x3/5）倍の性能となり、本実施形態の性能の80％にとどまる。
【００６４】
以上に述べたように、従来技術においては、あるステージの平均累積通過率が低下した際には、後段ステージに対するデータ供給が滞ることにより、後段ステージに装備された識別器が稼動しない状況に陥るため、性能低下が生じる。また、平均累積通過率が変動した際には、稼動しない識別器数が変動するため、性能変動が生じる。これに対して、本実施形態によれば、各ステージの処理時間と前フレームで記憶された通過率とに基づいて識別器の構成が動的に変化する。すなわち、平均累積通過率が低下・変動した場合においても、稼動しない識別器数を常に最小化するように識別器の構成を変更することができ、常に安定した高い性能を得ることが出来る。
【００６５】
ただし、以上の説明においては、本発明の効果を明らかにするためモジュール数比が整数比となる例を用いた。しかしながら、一般的にはモジュール数比が常に整数比となるとは限らない。また、整数比であったとしても、搭載されているモジュール総数などにより、算出された比となるような構成が不可能な場合もある。例えば、図４の（ａ）に示した例１において、搭載されているモジュール総数が６個であったとすると、4:2:1の比を満たすモジュール構成は取り得ない。このように、式（３）を満たすモジュール数の比が整数比とならない場合や、搭載されているモジュール総数において式（３）を満たすことが出来ない場合には、以下の手順に従ってモジュール数比を決定する。
【００６６】
搭載されている総数の識別器を、各ステージに配分する場合、どのステージに何個の識別器を配置するかには複数の選択肢が存在する。
【００６７】
〈第１の手順〉
第１の手順では、全てのステージに少なくとも１個の識別器が装備されるような選択肢を全選択肢の中から選別する。識別器が１個も装備されないステージが存在すれば、全体としては処理が完結しないため、これは妥当な選別基準である。そして、第１の手順により選別された選択肢の中から最良の構成を決定するため、以下に述べる第２の手順を適用する。
【００６８】
〈第２の手順〉
ある選択肢において、ステージNにおける入力データ（矩形画像データ）１つあたりの処理時間T[N]を式（２）を用いて全ステージに対して求め、その中の最大値を該選択肢の第１の処理時間とする。前述したように、パイプライン処理においては各ステージの処理時間の中で最長の処理時間が全体の処理時間を律速するため、ステージ処理時間の最大値（第１の処理時間）を全体の処理時間と見なすことは妥当である。そして、第１の手順により選定された全ての選択肢の中から上記第１の処理時間が最小となる選択肢を選定し、これを最良の構成とする。第２の手順により選定された選択肢が複数存在する場合は、更に第３の手順を適用する。
【００６９】
〈第３の手順〉
ある選択肢において、ステージNにおける入力データ（矩形画像データ）１つあたりの処理時間T[N]を式（２）を用いて全ステージに対して求め、その中の２番目に大きい値を該選択肢の第2の処理時間とする。そして、第２の手順により選定された全ての選択肢の中から上記第２の処理時間が最小となる選択肢を選定し、これを最良の構成とする。
【００７０】
第３の手順を適用しても選定された選択肢が複数存在する場合は、３番目に大きい値（第３の処理時間）、４番目に大きい値（第４の処理時間）を順次用いて同様の比較を行う。そして、第Nの処理時間が最小となる選択肢が１つとなったところで選定を完了する。また、全てのステージに対して同様の比較を行っても複数の選択肢が残った場合は、その中の任意の選択肢を最良の構成とする。
【００７１】
以下、上記手順の具体例を、図８および図９を用いて説明する。図８は、図４の例１に対して上記手順を適用する例である。すなわち、例１の条件で、各ステージに分配すべきモジュールの個数を算出した結果、Num[0]:Num[1]:Num[2]=4:2:1と算出された。しかし、搭載されている識別器が６個であった場合、どのようにモジュール構成を選択するかを詳細に示す。
【００７２】
ステージ０，１，２にどのようにモジュール数を割り当てるかの選択肢として、第１の手順で示したように、全てのステージに少なくとも１個の識別器が装備されるような選択肢１〜１０を図８の（ｂ）に示す。次に第２の手順において、第１の手順により選別された選択肢の中から最良の構成を決定する。このため、前述したように、ある選択肢において、ステージNにおける入力データ（矩形画像データ）１つあたりの処理時間T[N]を式（２）を用いて全ステージに対して求め、その中の最大値を該選択肢の第１の処理時間とする。図８の（ｂ）の第１番〜第５番の選択肢の構成に対する計算の様子を図８の（ａ）に示す。第１の手順により選定された全ての選択肢の中からこの第１の処理時間が最小となる選択肢を選定し、これを最良の構成とする。図８の（ｂ）においては、ステージ処理時間の最大値が1/3と他の選択肢に比べ小さい第２番の選択肢が最良の構成として選択される。
【００７３】
次に図９により、図４の（ｃ）に示した例３の条件で、図８と同様に識別器が６個装備されている例を挙げ、第２の手順により選定された選択肢が複数存在するために第３の手順を適用する例を示す。即ち、ステージ０，１，２にどのようにモジュール数を割り当てるかの選択肢として、第１の手順で示したように、全てのステージに少なくとも１個の識別器が装備されるような選択肢１〜１０を図９の（ｂ）に示す。図９の（ｂ）の第１番〜第６番の選択肢の構成に対する計算の様子を図９の（ａ）に示す。
【００７４】
例３の条件で、モジュール数を算出した結果、Num[0]:Num[1]:Num[2]=2:1:1と算出される。次に、上述した第１及び第２の手順を用いて、算出されたステージ処理時間の最大値が最小となる選択肢を選択する。図９の例では、（ａ）、（ｂ）に示すように、第１番〜第６番までの選択肢が同じ1/2となる。そこで、第３の手順により、２番目に大きいステージ処理時間を比べる。その結果、図９の（ｂ）では、第５番の選択肢の２番目に大きいステージ処理時間の最大値が1/4と他の選択肢に比べて小さいことがわかる。よって、第５番の選択肢が最良の構成として選択される。以上に述べた手順を用いることで、式（３）を満たすモジュール数比が整数比とならない場合においても最良の構成を選択することが可能となる。
【００７５】
次に、モジュール構成変更部１１０の具体的な実装例を説明する。図２は、モジュール構成変更部１１０により、制御器１０５の入力信号（in0）→識別器０→識別器１→識別器２→結果格納部１１２への出力信号（out0）の接続を実現している例である。図２に示したように、接続する部分のスイッチが接続（ＯＮ）されることで、この経路が実現できている。
【００７６】
次に、ステージ毎の識別器数を変更する手順を説明する。例えば、算出部１０９により、式（４）を満たすモジュール数の比がNum[0]:Num[1]:Num[2]=6:4:2と算出されたとする。この場合、ステージ０には識別器０〜５、ステージ１には識別器６〜９、ステージ２には識別器１０〜１１が配備されることになる。図示しない制御部により、各々の識別器に対し、各ステージ処理に必要なパラメータが転送される。また、経路（スイッチ）設定部１１４は、初期経路設定として、以下の経路を確立する。
in0→識別器０→識別器６→識別器１０→out0
in1→識別器１→識別器７→識別器１１→out1
in2→識別器２→識別器８
in3→識別器３→識別器９
in4→識別器４
in5→識別器５
【００７７】
識別器８、９は、隣接するステージの識別器１０、１１のいずれかに接続される必要があり、識別器４，５は隣接するステージの識別器６，７，８，９のいずれかに接続される必要があるが、初期経路設定では未接続とする。経路（スイッチ）設定部１１４は各識別器から出力される制御信号（valid）を監視している。例えば、識別器６，７がともにデータ転送中（識別器６，７のvalid信号が有効）の状態で識別器８のvalid信号が有効になったことを検出したとする。すると、経路（スイッチ）設定部１１４は識別器６、７のデータ転送完了（valid信号の無効）のいずれか早い方を待つ。そして、例えば識別器６のデータ転送完了が早かった場合には、識別器６の転送完了後直ちに接続経路を、
in0→識別器０→識別器６
in1→識別器１→識別器７→識別器１１→out1
in2→識別器２→識別器８→識別器１０→out0
in3→識別器３→識別器９
in4→識別器４
in5→識別器５
に変更する。
【００７８】
以上の説明ではモジュール構成変更手段の実装手段としてクロスバースイッチの例を用いたが、より汎用的にはネットワーク（インターコネクト）を用いる実現方法がある。
【００７９】
次に、図１２を用いて、モジュール構成変更部１１０をネットワーク（インターコネクト）を用いて実現する例を説明する。識別器０〜１１の各々が出力する識別結果は通過率検出部１０７に入力される。また、各々の識別器はネットワーク（インターコネクト）８０に接続されており、ある矩形画像データに対する識別処理を実行中の場合、ネットワーク８０に対し、処理中であるというステータスを送信（例えば、ビジー信号のアサート）する。どの識別器の処理結果をどの識別器へ送信するか、すなわち識別器間の接続関係（トポロジー）の決定は、ネットワーク８０に装備された通信経路設定部１１１によりなされる。
【００８０】
例えば、図１２の（ａ）の構成においては、ステージ０の処理を分担する識別器０〜２の出力はステージ１の処理を分担する識別器３〜５に送信されるように設定されている。また、識別器３〜５の出力はステージ２の処理を担当する識別器６〜８に送信されるように設定される。また、通信経路設定部１１１に対する設定内容は、図示しない算出部１０９によって算出されたモジュール構成に基づいて決定される。
【００８１】
例えば、算出部１０９により、式（３）を満たすモジュール数の比がNum[0]:Num[1]:Num[2]=6:2:1と算出されたとする。この場合には、識別器０〜２，５，７，８の出力が識別器３〜４に送信され、識別器３〜４の出力が識別器６に送信されるように通信経路設定部１１１の設定内容を変更すればよい。その結果、図１２の（ｂ）に示す構成が実現される。
【００８２】
なお、ネットワーク８０は複数の送信先が設定されている場合、処理中を示すステータスを送信していない（ビジー信号をアサートしていない）識別器の中から１個を選択し、接続を確立するように制御を行う。ただし、全ての送信先が処理中の場合は、少なくとも１個が処理中でなくなるのを待ったのちに接続を確立する。
【００８３】
なお、ネットワーク（インターコネクト）の構成手段としては、前述のクロスバースイッチ方式の他、リング方式、共有バス方式等の様々な手段が考えられるが、いずれの方式を用いたとしても、本発明の有効性は損なわれるものではない。
【００８４】
＜第２実施形態＞
次に第２実施形態のデータ処理装置について、図１１のブロック図を参照して説明する。図１１に示すデータ処理装置の構成は、図１に示した第１実施形態のデータ処理装置の構成に対し、動きベクトル検出部１１７を加えたものである。
【００８５】
動きベクトル検出部１１７はフレーム間の各画素における物体の動きベクトルを検出する。検出結果としては、各画素における動きベクトルの方向及びベクトルの大きさが得られる。例えば、動きベクトルが画像のＸ方向に＋２画素、Ｙ方向に−１画素であれば（＋２，−１）のような形で結果が得られる。
【００８６】
通過率参照部１１６は、動きベクトル検出部１１７から、現在処理を行っている矩形画像データの動きベクトルを参照する。さらに、通過率記憶部１１５に記憶されている前フレームの通過率結果を参照する際に、参照された動きベクトルを用いて参照先の画素位置にオフセットを加える。例えば、現在処理を行っている矩形画像データの画素位置が（Ｘ，Ｙ）で与えられ、当該領域における動きベクトルが（＋２，−１）で与えられた場合を考える。この場合、オフセットを加えた画素位置は（Ｘ−２，Ｙ＋１）となり、通過率記憶部１１５から前フレームの処理結果を参照する場合にはオフセットつきの画素位置（Ｘ−２，Ｙ＋１）が用いられる。すなわち、通過率参照部１１６は、対応する動きベクトルが示す移動量だけ各画素の位置を戻し、戻した後の位置が属する領域の通過率または累積通過率を通過率記憶部１１５から取得する。算出部１０９は、こうして取得した通過率または累積通過率に基づいて各ステージへの識別器の割り当てを変更する。
【００８７】
通過率参照部１１６は得られたオフセット付き画素位置に対応した領域の通過率を通過率記憶部１１５から取得し、これを算出部１０９へ提供する。算出部１０９は、得られた通過率と処理時間記憶部１０８に記憶されている各ステージの処理時間データとを用いて、構成情報を算出し、モジュール構成変更部１１０によりモジュール構成を変更する。
【００８８】
第２実施形態によれば、参照先の画素位置に動きベクトルを用いてオフセットを加えることで、物体の動きに対する補正が可能になり、より処理対象の画像に適した成変更が可能になる。特に、フレームを間引いて処理を行う場合や、移動速度の速い物体を認識する場合には、フレーム間の相関関係が低くなってしまうために、本実施形態による動き補正は有効である。
【００８９】
＜他の実施形態＞
次に図１３を用いて、他の実施形態の説明を行う。図１３は図１２の（ｂ）の各識別器をプロセッサで実装した図である。プロセッサを用いて実装することにより、図１２の（ａ）から（ｂ）への識別モジュール構成変更が、プロセッサが実行するプログラムを変更するだけで、実現可能となる。すなわち、
・プロセッサ５ａが実行するプログラムをステージ１の処理プログラムからステージ０の処理プログラムに変更し、
・プロセッサ７ａ，８ａが実行するプログラムをステージ２の処理プログラムからステージ０の処理プログラムに変更することにより、構成を変更することが出来る。
【００９０】
識別処理においては、通常カスケード段数が数十ステージにもおよぶため、各ステージに１個以上の識別器を専用に装備することは回路規模の観点から困難な場合がある。このような場合には、連続する複数のステージを統合し、統合されたステージに対して識別器を装備するなどして回路規模を適正化する必要がある。プロセッサを用いた実装においては、連続する２つ以上のステージ処理を統合して１個のプロセッサで実行することが、プログラム変更により容易に実現可能である。
【００９１】
また、各ステージに装備すべき最適な識別器の数を決定する際に従うべき前述の手順においては、識別器の総数は与えられたものとしていた。しかし、プロセッサを用いた実装においては、ステージ数が多い場合に、１個のプロセッサで実行するステージ処理の統合が容易に行える。そのため、与えられたプロセッサ総数に対して、構成の選択肢が広がることにより、より良いモジュール構成を決定することが可能となる。
【００９２】
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
0005618670.tif 000002
【図２】
0005618670.tif 000003
【図３】
0005618670.tif 000004
【図４】
0005618670.tif 000005
【図５】
0005618670.tif 000006
【図６】
0005618670.tif 000007
【図７】
0005618670.tif 000008
【図８】
0005618670.tif 000009
【図９】
0005618670.tif 000010
【図１０】
0005618670.tif 000011
【図１１】
0005618670.tif 000012
【図１２】
0005618670.tif 000013
【図１３】
0005618670.tif 000014
【図１４Ａ】
0005618670.tif 000015
【図１４Ｂ】
0005618670.tif 000016
【図１５】
0005618670.tif 000017
【図１６】
0005618670.tif 000018
【図１７】
0005618670.tif 000019
【図１８】
0005618670.tif 000020
【図１９】
0005618670.tif 000021
【図２０】
0005618670.tif 000022