(57)【要約】【課題】  演算回路の並列度を変更することができず、フィルタ演算処理に用いるファイルのサイズによって消費電力が無駄になることがある。【解決手段】  演算回路は、互いに異なる参照データと共通の係数データとの乗算を繰り返し行うことによりフィルタ演算処理を実行する複数の乗算器と、前記複数の乗算器に対して保持装置に保持された互いに異なる前記参照データを供給する第１のデータ供給手段と、複数の乗算器に対して前記保持装置に保持された共通の前記係数データを供給する第２のデータ供給手段と、前記乗算器が前記乗算を繰り返し実行する時間は前記フィルタ演算処理のフィルタサイズが大きくなるほど増加し、前記フィルタサイズが所定値以下である場合に、前記複数の乗算器のうち、一部の前記乗算器に対して前記乗算を実行させ、他の乗算器に対して前記乗算を実行させないように制御する制御手段と、を有することを特徴とする。【選択図】  図２
2018032190.tif 000002
【特許請求の範囲】
【請求項１】
フィルタ演算処理の参照データと該フィルタ演算処理に用いるフィルタの係数データとを保持する保持装置と接続する演算回路であって、
互いに異なる前記参照データと共通の前記係数データとの乗算を繰り返し行うことにより前記フィルタ演算処理を実行する複数の乗算器と、
前記複数の乗算器に対して、前記保持装置に保持された互いに異なる前記参照データを供給する第１のデータ供給手段と、
前記複数の乗算器に対して、前記保持装置に保持された共通の前記係数データを供給する第２のデータ供給手段と、
前記乗算器が前記乗算を繰り返し実行する時間は、前記フィルタ演算処理のフィルタサイズが大きくなるほど増加し、前記フィルタサイズが所定値以下である場合に、前記複数の乗算器のうち、一部の前記乗算器に対して前記乗算を実行させ、他の乗算器に対して前記乗算を実行させないように制御する制御手段と
を有することを特徴とする演算回路。
【請求項２】
前記保持装置に保持された、前記乗算を実行する乗算器に供給するための前記参照データを一時的に記憶し、記憶した該参照データが前記第１のデータ供給手段にロードされる第１記憶手段と、
前記保持装置に保持された、前記フィルタサイズに供給するための前記係数データを一時的に記憶し、記憶した該係数データが前記第２のデータ供給手段にロードされる第２記憶手段と、
をさらに有することを特徴とする請求項１に記載の演算回路。
【請求項３】
前記保持装置は、前記フィルタサイズと前記乗算を実行する前記乗算器の数との対応関係を示すテーブルを保持し、
前記制御手段は、前記テーブルを参照して、前記フィルタサイズに基づいて、前記乗算を実行する前記乗算器の数を決定することを特徴とする請求項２に記載の演算回路。
【請求項４】
前記第１記憶手段から前記第１のデータ供給手段へロードされる前記参照データの数は、前記フィルタサイズと前記乗算を実行する前記乗算器の数との和より一つ少ないことを特徴とする請求項１乃至３の何れか１項に記載の演算回路。
【請求項５】
前記第１のデータ供給手段および前記第２のデータ供給手段は、それぞれシフトレジスタを含んで構成されることを特徴する請求項１乃至４の何れか１項に記載の演算回路。
【請求項６】
前記制御手段は、前記複数の乗算器のそれぞれに演算制御信号を出力することによって、前記乗算器に対して前記乗算を実行させるように、又は実行させないように制御することを特徴する請求項１乃至５の何れか１項に記載の演算回路。
【請求項７】
前記制御手段は、前記複数の乗算器のそれぞれと接続し、前記演算制御信号を出力するマスクレジスタを有し、前記乗算器に対して前記乗算を実行させないように制御する際に、前記マスクレジスタは、前記乗算器に対する前記参照データ又は前記係数データの供給をマスクし、前記乗算器の信号を遷移させないように制御することを特徴する請求項６に記載の演算回路。
【請求項８】
前記複数の乗算器のそれぞれの乗算結果を累積加算する複数の累積加算器を、さらに有することを特徴とする請求項１乃至７の何れか１項に記載の演算回路。
【請求項９】
前記複数の累積加算器のそれぞれの出力データに対して非線形変換の処理を行う変換手段と、
前記複数の累積加算器のそれぞれの出力データと前記変換手段の出力データとの何れかを選択して出力する選択手段と、
をさらに有することを特徴とする請求項８に記載の演算回路。
【請求項１０】
フィルタ演算処理の参照データと該フィルタ演算処理に用いるフィルタの係数データとを保持する保持装置と接続する演算回路であって、
互いに異なる前記参照データと共通の前記係数データとの乗算を繰り返し行うことにより前記フィルタ演算処理を実行する複数の乗算器と、
前記複数の乗算器に対して、前記保持装置に保持された互いに異なる前記参照データを供給する第１のデータ供給手段と、
前記複数の乗算器に対して、前記保持装置に保持された共通の前記係数データを供給する第２のデータ供給手段と、
前記参照データとして外部から画像データを入力する入力手段と、
入力された前記画像データから処理対象領域を検出して、該処理対象領域の画素データを前記参照データとして取得する検出手段と、
前記処理対象領域のデータサイズに基づいて、前記複数の乗算器のうち、一部の前記乗算器に対して前記乗算を実行させ、他の乗算器に対して前記乗算を実行させないように制御する制御手段と、
を有することを特徴とする演算回路。
【請求項１１】
前記保持装置が、前記乗算を実行する前記乗算器の数と前記処理対象領域のデータサイズとの対応関係を示すテーブルをさらに保持し、
前記制御手段は、前記保持装置に保持された前記テーブルを参照して、前記乗算を実行する前記乗算器の数を決定することを特徴とする請求項１０に記載の演算回路。
【請求項１２】
複数回のフィルタ演算処理の参照データと該フィルタ演算処理に用いるフィルタの係数データとを保持する保持装置と接続する演算回路であって、
互いに異なる前記参照データと共通の前記係数データとの乗算を繰り返し行うことにより前記フィルタ演算処理を実行する複数の乗算器と、
前記複数の乗算器に対して、前記保持装置に保持された互いに異なる前記参照データを供給する第１のデータ供給手段と、
前記複数の乗算器に対して、前記保持装置に保持された共通の前記係数データを供給する第２のデータ供給手段と、
第１のフィルタ演算処理の結果として出力された複数のデータに対して、プーリング処理又はサブサンプリング処理して得られたデータを第２のフィルタ演算処理の参照データとして取得し、前記保持装置に保持させる処理手段と、
前記第２のフィルタ演算処理の参照データのデータサイズに基づいて、前記複数の乗算器のうち、一部の前記乗算器に対して前記乗算を実行させ、他の乗算器に対して前記乗算を実行させないように制御する制御手段と、
を有することを特徴とする演算回路。
【請求項１３】
前記保持装置が、前記乗算を実行する前記乗算器の数と前記第２のフィルタ演算処理の参照データのデータサイズとの対応関係を示すテーブルをさらに保持し、
前記制御手段は、前記保持装置に保持された前記テーブルを参照して、前記乗算を実行する前記乗算器の数を決定することを特徴とする請求項１２に記載の演算回路。
【請求項１４】
請求項１乃至１１の何れか１項に記載の演算回路を有し、前記参照データとして画像データを処理する画像処理装置。
【請求項１５】
フィルタ演算処理の参照データと該フィルタ演算処理に用いるフィルタの係数データとを保持する保持装置と接続する演算回路の制御方法であって、
互いに異なる前記参照データと共通の前記係数データとの乗算を繰り返し行うことにより前記フィルタ演算処理を複数の乗算器によって実行する乗算工程と、
前記複数の乗算器に対して、前記保持装置に保持された互いに異なる前記参照データを第１のデータ供給手段によって供給する第１の供給工程と、
前記複数の乗算器に対して、前記保持装置に保持された共通の前記係数データを第２のデータ供給手段によって供給する第２の供給工程と、
前記乗算器が前記乗算を繰り返し実行する時間は、前記フィルタ演算処理のフィルタサイズが大きくなるほど増加し、前記フィルタサイズが所定値以下である場合に、前記複数の乗算器のうち、一部の前記乗算器に対して前記乗算を実行させ、他の乗算器に対して前記乗算を実行させないように制御手段によって制御する制御工程と、
を有することを特徴とする方法。
【請求項１６】
フィルタ演算処理の参照データと該フィルタ演算処理に用いるフィルタの係数データとを保持する保持装置と接続する演算回路の制御方法であって、
互いに異なる前記参照データと共通の前記係数データとの乗算を繰り返し行うことにより前記フィルタ演算処理を複数の乗算器によって実行する乗算工程と、
前記複数の乗算器に対して、前記保持装置に保持された互いに異なる前記参照データを第１のデータ供給手段によって供給する第１の供給工程と、
前記複数の乗算器に対して、前記保持装置に保持された共通の前記係数データを第２のデータ供給手段によって供給する第２の供給工程と、
前記参照データとして外部から画像データを入力手段によって入力する入力工程と、
入力された前記画像データから処理対象領域を検出して、該処理対象領域の画素データを前記参照データとして検出手段によって取得する取得工程と、
前記処理対象領域のデータサイズに基づいて、前記複数の乗算器のうち、一部の前記乗算器に対して前記乗算を実行させ、他の乗算器に対して前記乗算を実行させないように制御手段によって制御する制御工程と、
を有することを特徴とする方法。
【請求項１７】
複数回のフィルタ演算処理の参照データと該複数回のフィルタ演算処理に用いるフィルタの係数データとを保持する保持装置と接続する演算回路の制御方法であって、
互いに異なる前記参照データと共通の前記係数データとの乗算を繰り返し行うことにより前記フィルタ演算処理を複数の乗算器によって実行する乗算工程と、
前記複数の乗算器に対して、前記保持装置に保持された互いに異なる前記参照データを第１のデータ供給手段によって供給する第１の供給工程と、
前記複数の乗算器に対して、前記保持装置に保持された共通の前記係数データを第２のデータ供給手段によって供給する第２の供給工程と、
第１のフィルタ演算処理の結果として出力されたデータに対して、プーリング処理又はサブサンプリング処理して得られたデータを第２のフィルタ演算処理の参照データとして処理手段によって取得し、前記保持装置に保持させる取得工程と、
前記第２のフィルタ演算処理の参照データのデータサイズに基づいて、前記複数の乗算器のうち、一部の前記乗算器に対して前記乗算を実行させ、他の乗算器に対して前記乗算を実行させないように制御手段によって制御する制御工程と、
を有することを特徴とする方法。
【請求項１８】
フィルタ演算処理の参照データと該フィルタ演算処理に用いるフィルタの係数データとを保持する保持装置と接続する演算回路の制御プログラムであって、
互いに異なる前記参照データと共通の前記係数データとの乗算を繰り返し行うことにより前記フィルタ演算処理を複数の乗算器に実行させる乗算ステップと、
前記複数の乗算器に対して、前記保持手段に保持された互いに異なる前記参照データを第１のデータ供給に供給させる第１の供給ステップと、
前記複数の乗算器に対して、前記保持手段に保持された共通の前記係数データを第２のデータ供給手段に供給させる第２の供給ステップと、
前記乗算器が前記乗算を繰り返し実行する時間は、前記フィルタ演算処理のフィルタサイズが大きくなるほど増加し、前記フィルタサイズが所定値以下である場合に、前記複数の乗算器のうち、一部の前記乗算器に対して前記乗算を実行させ、他の乗算器に対して前記乗算を実行させないように制御手段に制御させる制御ステップと、
をコンピュータに実行させることを特徴とするプログラム。
【請求項１９】
フィルタ演算処理の参照データと該フィルタ演算処理に用いるフィルタの係数データとを保持する保持装置と接続する演算回路の制御プログラムであって、
互いに異なる前記参照データと共通の前記係数データとの乗算を繰り返し行うことにより前記フィルタ演算処理を複数の乗算器に実行させる乗算ステップと、
前記複数の乗算器に対して、前記保持装置に保持された互いに異なる前記参照データを第１のデータ供給手段に供給させる第１の供給ステップと、
前記複数の乗算器に対して、前記保持装置に保持された共通の前記係数データを第２のデータ供給手段に供給させる第２の供給ステップと、
前記参照データとして外部から画像データを入力手段に入力させる入力ステップと、
力された前記画像データから処理対象領域を検出手段に検出させ、該処理対象領域の画素データを前記参照データとして取得させる取得ステップと、
前記処理対象領域のデータサイズに基づいて、前記複数の乗算器のうち、一部の前記乗算器に対して前記乗算を実行させ、他の乗算器に対して前記乗算を実行させないように制御手段に制御させる制御ステップと、
をコンピュータに実行させることを特徴とするプログラム。
【請求項２０】
複数回のフィルタ演算処理の参照データと該複数回のフィルタ演算処理に用いるフィルタの係数データとを保持する保持装置と接続する演算回路の制御プログラムであって、
互いに異なる前記参照データと共通の前記係数データとの乗算を繰り返し行うことにより前記フィルタ演算処理を複数の乗算器に実行させる乗算ステップと、
前記複数の乗算器に対して、前記保持装置に保持された互いに異なる前記参照データを第１のデータ供給手段に供給させる第１の供給ステップと、
前記複数の乗算器に対して、前記保持装置に保持された共通の前記係数データを第２のデータ供給手段に供給させる第２の供給ステップと、
第１のフィルタ演算処理の結果として出力されたデータに対して、プーリング処理又はサブサンプリング処理して得られたデータを第２のフィルタ演算処理の参照データとして処理手段に取得させ、前記保持装置に保持させる取得工程と、
前記第２のフィルタ演算処理の参照データのデータサイズに基づいて、前記複数の乗算器のうち、一部の前記乗算器に対して前記乗算を実行させ、他の乗算器に対して前記乗算を実行させないように制御手段に制御させる制御ステップと、
をコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パターン認識等に使用される演算回路、その制御方法及びプログラムに関するものである。
【背景技術】
【０００２】
パターン認識装置などの画像処理装置にニューラルネットワークの手法が広く応用されている。ニューラルネットワークの中でも、Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋｓ（以下ＣＮＮと略記する）と呼ばれる演算手法が認識対象の変動に対して頑健なパターン認識を可能にする手法として注目されている。例えば、特許文献１では画像データを用いた顔認識に適用した例が提案されている。
【０００３】
図３は簡単なＣＮＮ処理の例を示すネットワーク構成図である。入力層３０１は、画像データに対してＣＮＮ処理を行う場合、ラスタスキャンされた所定サイズの画像データに相当する。特徴面３０３ａ〜３０３ｃは第一階層３０８の特徴面を示す。特徴面とは、所定の特徴抽出演算（コンボリューション演算及び非線形処理）の処理結果に相当するデータ面である。特徴面は上位階層で所定の対象を認識するための特徴抽出結果に相当し、ラスタスキャンされた画像データに対する処理結果であるため、処理結果も面で表す。ＣＮＮでは多数の特徴面を構成するデータ群が演算処理を介して階層的に関係付けられている。
【０００４】
特徴面３０３ａ〜３０３ｃは、入力層３０１に対応するコンボリューション演算及び非線形処理により生成されるものである。例えば、特徴面３０３ａは、フィルタカーネル３０２１ａに模式的に示す２次元のコンボリューション演算とその演算結果の非線形変換により生成する。例えば、フィルタカーネル（フィルタ係数マトリクス）のサイズがｃｏｌｕｍｎＳｉｚｅ×ｒｏｗＳｉｚｅであるコンボリューション演算は以下の式に示すような積和演算により処理する。
【０００５】
【数１】
2018032190.tif 000003
ここで、「ｉｎｐｕｔ（ｘ，ｙ）」は座標（ｘ、ｙ）での参照画素値を示し、「ｏｕｔｐｕｔ（ｘ，ｙ）」は座標（ｘ、ｙ）での演算結果を示す。また、「ｗｅｉｇｈｔ（ｃｏｌｕｍｎ，ｒｏｗ）」は座標（ｘ＋ｃｏｌｕｍｎ、ｙ＋ｒｏｗ）での重み係数を示し、「ｃｏｌｕｍｎＳｉｚｅ」及び「ｒｏｗＳｉｚｅ」はカーネルサイズを示す。
【０００６】
ＣＮＮ処理では複数のフィルタカーネルを画素単位で走査しながら積和演算を繰り返し、最終的な積和結果を非線形変換することで特徴面を生成する。なお、特徴面３０３ａは前階層の一つの画像データから算出されるので、と結合数が１である。特徴面３０３ａを算出するためのカーネル３０２１ａは１つである。また、カーネル３０２１ｂ、カーネル３０２１ｃはそれぞれ特徴面３０３ｂ、３０３ｃを算出する際に使用されるフィルタカーネルである。以下、フィルタカーネルをフィルタ又はカーネルと略称することがある。また、フィルタカーネルのサイズは、カーネルサイズ又はフィルタサイズと略称することがある。
【０００７】
図４はＣＮＮ処理における特徴面３０５ａを算出する例である。特徴面３０５ａは前階層３０８の３つの特徴面３０３ａ〜ｃから算出され、特徴面３０３ａ〜ｃと結合している。特徴面３０５ａのデータを算出する場合、まず、特徴面３０３ａに対しては模式的に示すカーネル３０４１ａを用いたコンボリューション演算を行い、その結果を累積加算器４０１に保持する。同様に特徴面３０３ｂ、特徴面３０３ｃに対してはそれぞれカーネル３０４２ａ、３０４３ａのコンボリューション演算を行い、その結果を累積加算器４０１に累積加算する。
【０００８】
３種類のカーネルを用いたコンボリューション演算の終了後、ロジスティック関数や双曲正接関数（ｔａｎｈ関数）を利用した非線形変換処理４０２を行う。以上の処理を画像全体に対して１画素ずつ走査しながら処理する事で、特徴面３０５ａを生成する。図４の処理と同様に、特徴面３０５ｂは前階層３０８の３つの特徴面のそれぞれに対してカーネル３０４１ｂ、カーネル３０４２ｂ及びカーネル３０４３ｂのコンボリューション演算を用いて算出する。更に、特徴面３０７は前階層３０９の特徴面３０５ａ〜ｂのそれぞれに対してカーネル３０６１及びカーネル３０６２のコンボリューション演算を用いて算出する。
【０００９】
なお、各カーネルの係数はパーセプトロン学習やバックプロパゲーション学習等の一般的な手法を用いて予め学習により決定されているものとする。例えば、パターン認識等においては、１０×１０以上の大きなサイズのカーネルを使用してコンボリューション演算することがある。
【００１０】
このように、ＣＮＮ処理では多数のカーネルのコンボリューション演算を繰り返すため、膨大な回数の積和演算が必要となる。
【００１１】
コンボリューション演算の高速化を目的として、例えば特許文献２では複数の積和演算ユニットに共通の重み係数を設定し、入力データをシフトさせながら並列に演算することで高速にコンボリューション演算を実行する装置が提案されている。
【００１２】
また、特許文献３では、肌色情報を利用して顔検出処理を行う顔候補領域を限定する事で、全体の処理を高速化する手法が開示されている。
【００１３】
さらに、特許文献４では、誤り訂正処理を実行する並列演算装置において、並列に動作する演算器の数を制御する手法が提案されている。
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】特開平１０−０２１４０６
【特許文献２】特開２０１０−１３４６９７
【特許文献３】特開２００５−２４２５８２
【特許文献４】ＷＯ００／０７９４０５
【発明の概要】
【発明が解決しようとする課題】
【００１５】
しかしながら、特許文献１では、コンボリューション演算を並列に処理する場合、例えば、カーネルのサイズによって参照データとなる前階層のデータを演算器に供給するデータ転送がボトルネックになる場合がある。また、特許文献２に開示されている様な並列演算処理装置を低速なメモリと組み合わせて実現した場合でも、並列に動作する演算器の数（並列度）に見合う性能が発揮できない場合がある。他にも演算回路の並列度に見合う性能が発揮できない場合があるが、ここで、一例としてデータ転送がボトルネックになる場合、並列演算器の同時動作によって処理できるデータ量に見合うデータが転送されないので、演算器の消費電力が無駄になる。これは、ＣＮＮ処理に用いるカーネルのサイズによって、コンボリューション演算を行う際のデータ転送がボトルネックになる場合、特に問題となる。
【００１６】
また、特許文献２に開示されている様な並列演算処理装置と特許文献３に開示されている処理領域限定処理を組み合わせることで、ＣＮＮ処理を高速に実現する事が可能になる。しかしながら、特許文献３の方法では処理対象領域のサイズが変更するにも係らず、特許文献２に開示されているような並列演算処理装置では、処理対象領域の如何に係らず一様な並列度で演算を実行するため、消費電力の観点から、無駄になる場合がある。
【００１７】
本発明は上記の課題に鑑みてなされたものであり、データ転送がボトルネックになる等の場合において、並列に実行可能な複数の乗算器のうち、実行させる乗算器の数を適切に制御することによって消費電力を低減する演算回路を提供することを目的とする。また、その演算回路の制御方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１８】
上記課題を解決するために、本発明に係る演算回路は、以下の構成を有する。フィルタ演算処理の参照データと該フィルタ演算処理に用いるフィルタの係数データとを保持する保持装置と接続する演算回路であって、互いに異なる前記参照データと共通の前記係数データとの乗算を繰り返し行うことにより前記フィルタ演算処理を実行する複数の乗算器と、前記複数の乗算器に対して、前記保持装置からに保持された互いに異なる前記参照データを供給する第１のデータ供給手段と、前記複数の乗算器に対して、前記保持装置に保持された共通の前記係数データを供給する第２のデータ供給手段と、前記乗算器が前記乗算を繰り返し実行する時間は、前記フィルタ演算処理のフィルタサイズが大きくなるほど増加し、前記フィルタサイズが所定値以下である場合に、前記複数の乗算器のうち、一部の前記乗算器に対して前記乗算を実行させ、他の乗算器に対して前記乗算を実行させないように制御する制御手段と、を有することを特徴とする。
【発明の効果】
【００１９】
本発明によれば、データ転送がボトルネックになる等の場合において、演算回路の並列に実行可能な複数の乗算器のうち、実行させる乗算器の数を制御することによって消費電力を低減することができる。
【図面の簡単な説明】
【００２０】
【図１】第１の実施形態に係る演算回路を具備した画像処理装置の構成例を示すブロック図である。
【図２】演算回路２２の構成を示す図である。
【図３】ＣＮＮ処理の例を示すネットワーク構成図である。
【図４】ＣＮＮ処理における特徴面３０５ａを生成する例である。
【図５】制御部５０１の構成を示す図である。
【図６】レジスタ群６０２に設定された情報の例を説明する図である。
【図７】シフトレジスタの構成例を説明する図である。
【図８】乗算器の構成を説明する図である。
【図９】累積加算器の構成を説明する図である。
【図１０】非線形変換処理部５０９の構成を説明する図である。
【図１１】演算回路２２によるコンボリューション演算の例を説明する図である。
【図１２】演算回路２２によるコンボリューション演算の動作を説明するタイムチャートである。
【図１３】並列度とカーネルサイズを変えた場合の処理時間の関係について説明する図である。
【図１４】画像処理装置の動作を説明するフローチャートである。
【図１５】第２の実施形態の画像処理装置の処理例を模式的に説明する図である。
【図１６】第２の実施形態の画像処理装置の動作を説明するフローチャートである。
【図１７】（ａ）従来の並列演算を示す図である。（ｂ）第２の実施形態の並列度の決定方法の具体例を説明する図である。
【図１８】第２の実施形態の並列度決定テーブルの例を説明する図である。
【図１９】第３の実施形態の適用例を説明する図である。
【図２０】従来の並列演算回路の例を示す図である。
【発明を実施するための形態】
【００２１】
以下、本発明の実施形態について添付の図面を参照して具体的に説明する。
【００２２】
（第１の実施形態）
まず、本発明の第１の実施形態について説明する。図１は本発明の第１の実施形態に関する並列演算回路を具備した画像処理装置の構成例である。当該画像処理装置は入力された画像データから特定の物体（画像パターン）を認識又は検出する機能を有する。画像入力モジュール２０は、光学系、ＣＣＤ又はＣＭＯＳセンサー等の光電変換デバイス及びセンサーを制御するドライバー回路、ＡＤコンバーター、各種画像補正を司る信号処理回路及びフレームバッファ等により構成される。
【００２３】
ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）５００は、画像バッファ及び演算回路２２の演算作業バッファとして使用する。ＲＡＭ５００にはＣＮＮの特徴面に相当するデータ群やフィルタ係数データなどが保持される。ＲＡＭ５００は、演算回路２２と接続し、演算回路２２に必要なデータを転送する外部のデータ保持装置としての役割を持っている。演算回路２２は本実施形態ではＣＮＮ処理を並列に行うＣＮＮ処理部である。演算回路２２の構成について、後述する。
【００２４】
ＤＭＡＣ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ）２６は、画像バス２３上の各モジュールや回路とＣＰＵバス３０間のデータ転送を司る。ブリッジ２４は、画像バス２３とＣＰＵバス３０のブリッジ機能を提供する。前処理モジュール２５は、ＣＮＮ処理によるパターン認識処理を効果的に行うための各種前処理を行う。具体的には色変換処理／コントラスト補正処理等の画像データ変換処理をハードウェアで処理する。
【００２５】
顔候補検出モジュール３１は、演算回路２２での処理対象である顔候補領域を特定する。具体的には、顔候補検出モジュール３１は、前処理モジュール２５で変換した所定の色空間内で人物の肌色領域を特定し、当該領域を演算回路２２でのＣＮＮ処理の処理対象領域とする。ここで特定した処理対象領域に関する情報はＲＡＭ５００に記録し、演算回路２２で使用する。
【００２６】
ＣＰＵ２７は、画像処理装置全体の動作を制御するものである。ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）２８は、ＣＰＵ２７の動作を規定する命令や各種演算に必要なパラメータデータを格納する。ＲＡＭ２９はＣＰＵ２７の動作に必要なメモリである。ＣＰＵ２７はブリッジ２４を介して画像バス２３上のＲＡＭ５００にアクセスする事も可能である。
【００２７】
図２は演算回路２２の構成を示す図であり、本実施形態では、演算回路２２がＣＮＮ処理を行うＣＮＮ処理部として説明するが、演算回路２２の行う演算処理はＣＮＮ処理に限らず、他の様々なフィルタ演算処理に適用することも可能である。演算回路２２が演算処理の階層的な結合関係で表現される様々な処理に適用可能である。例えば、Ｒｅｓｔｒｉｃｔｅｄ  Ｂｏｌｔｚｍａｎｎ  ＭａｃｈｉｎｅｓやＲｅｃｕｒｓｉｖｅ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ等他の階層的な処理に適用可能である。
【００２８】
また、演算回路２２による演算は、１段の階層から図３に示すような複数段の階層まで様々な場合に適用することができる。また、演算回路２２が演算するデータは、２次元データに対する限らず、１次元データや３次元以上のデータに適用することも可能である。図２に示す演算回路２２が行うＣＮＮ処理は、図３に示す様な複数のデータ群の階層的な結合関係に従って、下位の階層から特徴面を順次算出していく。即ち、演算回路２２は、まず、入力画像データ３０１を参照データとして、順に特徴面３０３ａ、特徴面３０３ｂ及び特徴面３０３ｃを算出する。次に、特徴面３０３ａを参照データとして、順に特徴面３０５ａ及び特徴面３０５ｂを算出する。このように、演算回路２２は、階層の数に制限されずに特徴面を順に算出し、最終的に特徴面３０７を算出する。
【００２９】
以下、本実施形態における演算回路２２の動作を説明する。本実施形態では、水平方向に並列にコンボリューション演算処理する場合について説明する。即ち、コンボリューション演算の結果である特徴面を基準にして水平方向に連続する複数の位置のコンボリューション演算を複数の演算器が同時に動作して実行する。本実施形態では、同時に動作してコンボリューション演算を実行する演算器（乗算器と累積加算器のペア）の数を並列度と呼ぶ。なお、垂直方向の並列演算は水平方向の並列演算と同様にできるので、その説明は省略する。
【００３０】
図２の制御部５０１は図５に示すように、演算回路２２の基本的な動作を決定するレジスタ群６０２とレジスタ群６０２の値を基に各種信号のタイミングを制御するシーケンサ６０１及びＲＡＭ５００へのアクセス調停を行うメモリ制御部６０５等からなる。
【００３１】
演算器制御部５１７は、内部のレジスタに保持する並列度指定情報に従って、乗算器５０７ａ〜５０７ｎ及び累積加算器５０８ａ〜５０８ｎの動作を制御する信号を生成する。制御信号５１３ａ〜５１３ｎはそれぞれ乗算器５０７ａ〜５０７ｎの動作を直接制御する信号である。演算器制御部５１７は、演算器制御信号をラッチするマスクレジスタ５１１、及びマスクレジスタ５１１を所定のタイミングで制御する演算器制御データ生成部５１２からなる。演算器制御データ生成部５１２は制御部５０１のレジスタ群６０２にも接続されている。
【００３２】
図５は制御部５０１の構成を説明する図である。シーケンス制御部６０１は、レジスタ群６０２に設定された情報に従って、演算回路２２の動作を制御する各種制御信号６０４を入出力する。同様にシーケンス制御部６０１はメモリ制御部６０５を制御するための制御信号６０６を生成する。シーケンス制御部６０１はバイナリカウンタやジョンソンカウンタ等からなるシーケンサにより構成する。レジスタ群６０２は不図示の複数のレジスタセットからなり、階層的なＣＮＮ処理を行うための情報等が保持される。
【００３３】
図６は、図５に示すレジスタ群６０２の複数のレジスタセットに設定された情報の例を示す図である。複数のレジスタセットに設定された情報の例としてのレジスタ内容１１０１ａ、レジスタ内容１１０１ｂ及びレジスタ内容１１０１ｃのそれぞれが１つの特徴面を算出するために必要な情報である。レジスタ群６０２にはブリッジ２４及び画像バス２３を介してＣＰＵ２７から予め所定の値が書き込まれる。
【００３４】
なお、ここではレジスタセット内の各レジスタが３２ｂｉｔ幅であるとする。レジスタ内容１１０１ａにおいて、「最終層指定」は当該レジスタセットに対応する特徴面が最終層か否かを指定するレジスタ値である。「最終層指定」を示す当該レジスタ値が１の場合、算出対象の特徴面が最終層の特徴面であって、最終層の特徴面の算出処理が全て終了するとＣＮＮ処理が終了する。「参照データ面の数」は算出対象の特徴面と接続する前階層の特徴面の数を指定する値であり、例えば、図３に示す特徴面３０５ａを演算する場合の「参照データ面の数」のレジスタ値に「３」が設定される。「非線形変換」は、非線形変換処理の有無を指定するためのレジスタ値であり、当該レジスタ値に「１」が設定されている場合、非線形変換処理を実行する。「演算結果格納先ポインタ」は対象とする特徴面の演算結果を保持するためのＲＡＭ５００上の先頭ポインタを示すアドレスであり、当該ポインタ値を先頭ポインタとして演算結果をラスタスキャン順に格納する。
【００３５】
「カーネルの水平サイズ」及び「カーネルの垂直サイズ」は当該特徴面のコンボリューション演算に使用するカーネルのサイズを指定するレジスタ値である。「並列度」は、当該特徴面のコンボリューション演算を実行する際に並列に動作する演算器の数を指定するレジスタ値である。ここで設定する並列度はカーネルのサイズやＲＡＭ５００からのデータ転送能力等に対応して予め設定する。カーネルサイズ（フィルタサイズ）と並列度の関係は後述する。
【００３６】
「重み係数格納先」は、当該特徴面の演算に使用するカーネルの重み係数のＲＡＭ５００上の格納先アドレスを示すレジスタ値である。重み係数データは「参照データ面の数」と同じ数の係数の組を有し、「重み係数格納先」のレジスタ値で指定されるアドレスからラスタスキャン順に格納されているものとする。即ち「カーネルの水平サイズ」×「カーネルの垂直サイズ」×「参照データ面の数」の個数の係数データがＲＡＭ５００に格納されている。「参照データの垂直サイズ」のレジスタ値と、「参照データの水平サイズ」のレジスタ値とは、それぞれ参照画像データ又は参照特徴面の水平方向画素数及び垂直方向ライン数を示す情報である。
【００３７】
参照データは「参照データ格納先ポインタ」のレジスタ値の示すアドレスを先頭としてＲＡＭ５００上にラスタスキャン順に格納されているものとする。即ち「参照データの水平サイズ」×「参照データの垂直サイズ」×「参照データ面の数」の個数の参照データがＲＡＭ５００に格納されている。以上説明した複数のレジスタ値が算出する各特徴面単位に用意されている。演算の処理対象とする特徴面の「参照データ格納ポインタ」のレジスタ値が前階層結合対象特徴面の「演算結果格納先ポインタ」と等しい場合、本実施形態では、参照される前階層の特徴面と算出される特徴面とが結合されていることになる。
【００３８】
シーケンス制御部６０１は上記「カーネルの水平サイズ」、「カーネルの垂直サイズ」、「参照データの水平サイズ」、「参照データの垂直サイズ」及び「並列度」等のレジスタ値に従って演算動作に関わるシーケンス制御を行う。メモリ制御部６０５は、シーケンス制御部６０１の生成する制御信号６０６に従って、各データバス６０７〜６０９のＲＡＭ５００からの読み出し及びＲＡＭ５００への書き込みのためのアクセスを調停する。
【００３９】
具体的には、メモリ制御部６０５は、画像バス６０３を介したメモリへのアクセス、参照データ６０７の読み出し、重み係数データ６０８の読み出し、演算結果データ６０９の書き出しを適切に制御する。ＲＡＭ５００へのアクセスに関する説明は後述する。なお、ＲＡＭ５００のデータ幅及び各データバス６０７〜６０９のデータ幅は全て３２ｂｉｔであるとする。
【００４０】
図２の記憶部５０２及び記憶部５０３は、例えば複数のレジスタやメモリにより構成する。記憶部５０２はＲＡＭ５００に保持されたカーネルの重み係数データを一時的に保持するために使用される。重み係数が８ｂｉｔで表されるデータの場合、記憶部５０２は８ｂｉｔ幅の複数のレジスタで構成する。
【００４１】
また、記憶部５０２はコンボリューション演算を並列に処理する方向と同じ方向のカーネルサイズと同じ数のレジスタを有する。例えば、コンボリューション演算を水平方向に並列に処理する場合、水平方向のカーネルサイズが「１１」の場合、記憶部５０２のレジスタの数は「１１」とする。実際には、複数のカーネルサイズがあるので、記憶部５０２は想定する最大のカーネルサイズのレジスタ数で構成する。制御部５０１はシフトレジスタ５０４のシフト動作中にＲＡＭ５００から次の行の積和演算処理に必要なカーネルの重み係数を記憶部５０２のレジスタにロードする。
【００４２】
記憶部５０３はＲＡＭ５００に格納された参照データを一時的に保持するために使用される。例えば参照データが８ｂｉｔで表されるデータの場合、記憶部５０３は８ｂｉｔ幅の複数のレジスタで構成する。記憶部５０３は「並列に処理可能なデータの数」＋「並列処理する方向と同じ方向のカーネルサイズ−１」以上の個数のレジスタで構成する。ここでは、「並列に処理可能なデータの数」は演算回路２２の最大並列度である。ここでのレジスタ個数は、一度に複数の位置の特徴面データを算出する（並列演算する）ために必要な参照するデータを得るための値であり、当該データの個数以上のレジスタ個数であれば良い。例えば，コンボリューション演算を水平方向に並列に処理するとして、カーネルサイズが「１１」、並列度が「８」の場合１８個以上の８ｂｉｔレジスタで記憶部５０３を構成することになる。
【００４３】
制御部５０１はシフトレジスタ５０５のシフト動作中にＲＡＭ５００から次の列処理に必要な参照データを記憶部５０３にロードする。即ち、コンボリューションの積和演算処理とＲＡＭ５００からのデータロードとはカーネルの行単位でパイプライン動作する。なお、実際に必要な参照データの数は「並列度」レジスタの内容に従って決まる。
【００４４】
シフトレジスタ５０４、シフトレジスタ５０５及びシフトレジスタ５０６はデータロード機能付のシフトレジスタである。シフトレジスタ５０４及びシフトレジスタ５０５はそれぞれ記憶部５０２及び記憶部５０３と同じｂｉｔ幅の複数のレジスタで構成し、シフトレジスタ５０６は累積加算器出力の有効ｂｉｔと同じｂｉｔ幅数の複数のレジスタで構成する。また、マスクレジスタ５１１は乗算器５０７ａ〜５０７ｎの数と同じｂｉｔ幅数の複数のレジスタで構成する。
【００４５】
シフトレジスタ５０４はシフト動作により、各乗算器５０７ａ〜５０７ｎに共通のパラメータデータ（重み係数）を順次供給するデータ供給部である。シフトレジスタ５０５はシフト動作により各乗算器５０７ａ〜５０７ｎに前階層の異なる位置の参照データを並列に供給するデータ供給部である。
【００４６】
シフトレジスタ５０４、シフトレジスタ５０５及びシフトレジスタ５０６は、基本的な構成は同じであるので、図７にこれらのシフトレジスタの構成例を示す。図７はレジスタ個数が４の場合の例を説明する。フリップフロップ７０１ａ〜ｄは多ｂｉｔのフリップフロップであり、ＣＬＯＣＫ信号に同期して所定ｂｉｔのデータをラッチする。セレクタ７０２ａ〜ｃは、選択信号であるＬｏａｄ信号の値が０である場合、フリップフロップ７０１ａ〜ｄの出力信号ＯＵＴｘ（ｘ：０〜２）を選択し、１である場合、フリップフロップ７０１ａ〜ｄの入力信号ＩＮｘ（ｘ：１〜３）を選択する。即ち、Ｌｏａｄ信号の値に応じてフリップフロップ７０１ａ〜ｄのシフト動作とロード動作との何れかを選択する。Ｅｎａｌｂｅ信号はデータ遷移のイネーブル信号であり、Ｅｎａｌｂｅ信号の値が１である場合、ＣＬＯＣＫ信号の立ち上がりでデータをラッチし、０である場合、前クロックでラッチしたデータをそのまま保持する（状態遷移はしない）。
【００４７】
図２おけるＬｏａｄ２信号、Ｌｏａｄ４信号及びＬｏａｄ５信号はそれぞれ図７のＬｏａｄ信号に対応し、図２におけるＥｎａｂｌｅ１信号、Ｅｎａｂｌｅ２信号及びＥｎａｂｌｅ３信号は図７のＥｎａｂｌｅ信号に対応するものである。
【００４８】
シフトレジスタ５０４は記憶部５０２から重み係数の初期データを一括ロードした後、水平方向のカーネルサイズと同じクロック数シフト動作を実行し、乗算器５０７ａ〜５０７ｎに対して重み係数データを連続して供給する。シフトレジスタ５０４の出力信号であるＯＵＴｎ信号は、シフトレジスタ最終段出力から出力され、全ての乗算器５０７ａ〜ｎに入力される。
【００４９】
同様に、シフトレジスタ５０５は記憶部５０３から参照データの初期データをロードした後、水平方向のカーネルサイズと同じクロック数シフト動作を実行し、乗算器５０７ａ〜５０７ｎに対して複数の異なる参照データを同時に供給する。シフトレジスタ５０４とシフトレジスタ５０５は同期して動作する。
【００５０】
このタイミングで参照データに重み係数を乗じた値が累積加算器に送られる。カーネルサイズの１行に相当するクロックのシフト処理により、異なる特徴面位置のカーネル１行分のコンボリューション演算を並列に処理する。更に、当該動作をカーネルの行数分繰り返すことで並列度に相当する特徴面位置の２次元コンボリューション演算を処理する。各部は制御部５０１の出力する制御信号に従って動作する。乗算器５０７ａ〜５０７ｎは並列に動作する複数の乗算器であり、累積加算器５０８ａ〜５０８ｎは並列に動作する複数の累積加算器である。乗算器５０７ａ〜５０７ｎと累積加算器５０８ａ〜５０８ｎとは一対一に接続し、合わせて演算器と称する。
【００５１】
乗算器５０７ａ〜５０７ｎの構成例を図８に示す。本実施形態の乗算器は一般的な乗算器１４０１及びセレクタ１４０２から構成される。セレクタ１４０２は演算制御信号１４０３が有効（アクティブ）でない場合、Ｉｎｐｕｔ２の代わりに入力値０を選択する。入力値０が選択された場合、入力値Ｉｎｐｕｔ１の如何に係らず乗算器ロジック内の信号値が遷移することは無く、信号遷移に伴う消費電流の増加はない。演算制御信号１４０３は図２におけるマスクレジスタ５１１から出力される制御信号５１３ａ〜５１３ｎの何れかである。ここで、Ｉｎｐｕｔ２は参照データの入力でもよいし、係数データの入力でもよい。また、マスクレジスタ５１１の出力（演算制御信号１４０３）で乗算器１４０１への入力データをマスクする方法について説明したが、記憶部５０３で入力データを０にするなどの対応方法でもよい。
【００５２】
累積加算器５０８ａ〜５０８ｎは図９に示すように加算器９０１とレジスタ９０２で構成し、Ｌａｔｃｈ  Ｅｎａｂｌｅ信号に従って入力データの累積和を保持する。Ｌａｔｃｈ  Ｅｎａｂｌｅ信号には図示しないクロック信号に同期した信号である。なお、乗算器の出力である乗算結果が０にスタックされている場合（即ち乗算器の動作が停止している場合）、累積加算器５０８の信号遷移が生じることもないため、乗算器同様に消費電流の増加は無い。このように、マスクレジスタ５１１が出力した制御信号５１３ａ〜５１３ｎによって乗算器と累積加算器との動作を停止させることで、乗算器と累積加算器との消費電流の増加を抑えることができる。即ち、本実施形態の演算回路の並列度は、マスクレジスタ５１１の出力した制御信号５１３ａ〜５１３ｎによって制御される。なお、演算回路の並列度は、同時に動作する演算器（乗算器又は累積加算器）の数である。演算回路の並列度が低い場合、動作する演算器が少ないので、消費電力を低く抑えることができる。
【００５３】
ここで得られた累積和は、対象特徴面に対応するカーネル毎の演算終了後、シフトレジスタ５０６に演算結果をロードし、所定のタイミングで非線形変換処理部５０９に送る。シフトレジスタ５０６は複数個の累積加算器５０８ａ〜５０８ｎの出力を保持する事が可能なシフトレジスタである。なお、累積加算器５０８ａ〜５０８ｎの出力は所定の有効ビットのみシフトレジスタ５０６に接続する。
【００５４】
なお、演算回路の並列度の制御方法として、参照データや出力データの制御と共に乗算器の入力データを０にスタックさせる場合について説明したが、これに限らない。例えば、乗算器の入力データを０にスタックさせる代わりに、対応するレジスタ及び演算器の動作を制御する方法でも良い。例えば演算器毎に動作を制御する動作クロックを停止させる事で実現可能である。その場合、乗算器５０７ａ〜ｎ及び累積加算器５０８ａ〜ｎのクロック毎に論理積素子を挿入し、制御信号を接続すればよい。即ち演算器毎にクロックの供給を制御する事で演算処理の並列度を制御する。更に、乗算器５０７ａ〜ｎ及び累積加算器５０８ａ〜ｎに供給する電源を制御する等の方法でも良い。
【００５５】
図１０は非線形変換処理部５０９の構成を示すものである。非線形変換処理部５０９は、ルックアップテーブルで構成する非線形変換処理器１３０１及びセレクタ１３０２を含む。非線形変換処理器１３０１はルックアップテーブルに基づいて、入力Ｉｎに累積加算器の出力データである積和演算結果に対応するアドレスデータとしてＲＯＭ等に保持されたデータを参照する。ＲＯＭには予めアドレス値に対応する出力Ｏｕｔの非線形関係が記録されているものとする。セレクタ１３０２は、非線形処理変換しない場合、累積加算器の出力データである積和演算結果をそのままセレクタ１３０２の出力データとして出力する。
【００５６】
セレクタ１３０２は選択信号Ｓｅｌｅｃｔが制御部５０１に接続され、制御部５０１内の「非線形変換」のレジスタ値に従って制御される。ここで変換処理したデータはＲＡＭ５００の所定アドレスに格納する。ここでの格納アドレスも制御部５０１のレジスタ群６０２の設定とシーケンス制御部６０１の動作に従って制御される。以上、制御部５０１はレジスタ群６０２の内容に従って、各タイミング信号及びデータ転送を制御することで階層的なコンボリューション演算を並列に処理する。
【００５７】
図１１は本実施形態の演算回路２２によるコンボリューション演算の並列処理の例を説明する図である。図１１はラスタスキャンされたデータ座標を示す。並列処理する参照データ面１００４の各ブロック（模式的に示す最小一升）がラスタスキャン順でＲＡＭ５００に格納された入力画像又は前階層の演算結果の画素を示すものであるとする。参照データ面１００４の各画素は座標１００１においてｉｎｐｕｔ（ｘ，ｙ）で示し、ｘは水平方向位置を示し、ｙは垂直方向位置を示す。並列処理の算出対象となる特徴面１００３の各ブロックがラスタスキャン順の演算結果の画素を示すものとする。算出対象である特徴面１００３の各画素は座標１００２においてｏｕｔｐｕｔ（ｘ，ｙ）で示し、ｘは水平方向位置を示し、ｙは垂直方向位置を示す。
【００５８】
特徴面の領域１００３は、図２の演算回路２２の複数の演算器が同時にコンボリューション演算して算出する特徴面データの領域を示す。特徴面の領域１００３に示す各画素は座標１００２においてｏｕｔｐｕｔ（ｘ，６）で示し、ｘは５〜１２である。図１１に示す例では、特徴面の８つの注目画素位置のコンボリューション演算を同時に処理する。また、それぞれの注目画素位置では、演算器番号０〜７に対応する乗算器５０７ａ〜５０７ｎ、累積加算器５０８ａ〜５０８ｎがそれぞれ演算処理を実行する。並列に処理する参照データ面１００４に示す各画素は、特徴面の領域１００３を算出するための参照画素データの領域を示す。図１１に示す例では、カーネルサイズが水平方向「１１」垂直方向「１３」の場合を想定している。演算回路２２の並列度が８の場合、水平方向に同時に算出する幅は「１８」であるので、参照データ面の領域１００４のサイズは、水平方向が「１８」であり、垂直方向が「１３」である。演算回路２２は、参照データ面の領域１００４のコンボリューション演算を同時に処理し、特徴面の領域１００３を同時に算出する。このように、参照データ面の水平方向に８画素単位、垂直方向に１ライン単位で走査させながら、並列に２次元のコンボリューション演算を実行する。なお、本実施形態では、水平方向に並ぶ複数の特徴面のデータを並列に算出する場合に限らず、垂直方向に連続する特徴面データを並列に算出する構成にしても良い。この場合、記憶部５０２にはカーネルの１列の重み係数がロードされ、記憶部５０３には「並列度＋カーネルの垂直方向サイズ−１」個の水平方向に連続する参照データがロードされる。なお、フィルタサイズは、並列に演算する方向によってカーネルの垂直方向サイズ又は水平方向サイズである。図１１では、カーネルの垂直方向サイズを例に説明した。
【００５９】
図１２は本実施形態の並列演算回路２２によるコンボリューション演算の動作を説明するタイムチャートである。図１２は１つの特徴面を算出するためのコンボリューション演算処理の一部を説明する図である。また、図１２に示す信号は全て図示しないクロック信号に基づいて同期動作し、クロック信号単位で１回の積和演算を処理するものとする。Ｌｏａｄ１信号は記憶部５０２にカーネルの重み係数データをロードするためのイネーブル信号を示す。制御部５０１は当該信号が有効（信号レベルが１）の期間にＲＡＭ５００からカーネルの１行分の重み係数データを読み出し、記憶部５０２に書き込む。カーネルの１行の大きさ（重み係数のデータサイズ）は図５に示すレジスタ群６０２に保持されている。また、制御部５０１はレジスタ群６０２で指定する重み係数のアドレスポインタ情報、重み係数のデータサイズ及び参照するデータ面数等を元に読み出すデータのアドレスを決定する。ここで、ＲＡＭ５００のデータ幅は３２ｂｉｔであり、重み係数のデータ幅は８ｂｉｔであるとすると、記憶部５０２に水平方向１行分の１１個の重み係数を書き込む場合、３クロックでロード処理を完了する。
【００６０】
以降、ＲＡＭ５００に対する読み出し／書き込みサイクルは全て１クロックで完了するものとする。制御部５０１は、重み係数のロードが完了すると、次に参照データのロードを開始するためにＬｏａｄ３信号を有効化する。Ｌｏａｄ３信号もＬｏａｄ１信号と同様に信号レベル１の場合が有効化された状態であるとする。
【００６１】
制御部５０１はＬｏａｄ３信号の有効化と同時にＲＡＭ５００から参照データを取り出し、記憶部５０３にセットする。セットするデータの数はレジスタ群６０２に保持されているカーネルの大きさ及び並列度から決定する。また、制御部５０１は、レジスタ群６０２で指定する参照データのアドレスポインタ情報、参照データのサイズ及び参照データ面の数を元にＲＡＭ５００から読み出すデータのアドレスを決定する。参照データの有効桁は８ｂｉｔであるため、記憶部５０３に、例えば１８個の参照データを書き込む場合、５サイクルで書き込みシーケンスを完了する。図１１に示す例の場合は、カーネルの水平方向サイズが１１、演算並列度が８である事から並列度１１＋８−１＝１８個の参照データをロードする必要がある。
【００６２】
＊ＣＬＲ信号は累積加算器５０８を初期化するための信号であり、当該信号の値が０の場合、累積加算器のレジスタ９０２の値は０に初期化される。制御部５０１は新たな特徴面位置のコンボリューション演算開始前に＊ＣＬＲ信号の値を０に設定する。
【００６３】
Ｌｏａｄ２信号はシフトレジスタ５０４の初期化を指示するための信号であり、当該信号の値が１でかつＥｎａｂｌｅ１信号が有効（信号レベル１）の場合、記憶部５０２に保持する複数の重み係数データがシフトレジスタ５０４に一括ロードされる。Ｅｎａｂｌｅ１信号はシフトレジスタのデータ遷移を制御する信号である。図１２に示すようにＥｎａｂｌｅ１信号は動作中に常に設定されているため、Ｌｏａｄ２信号の値が１の場合、クロック信号に応じて記憶部５０２の出力をラッチし、Ｌｏａｄ２信号の値が０の場合、クロック信号に応じてシフト処理を継続する。
【００６４】
制御部５０１のシーケンス制御部６０１はカーネルの水平方向のデータサイズに応じたクロック数をカウントするとＬｏａｄ２信号を有効化する。
【００６５】
更に、シフト動作を停止させると同時に記憶部５０２に保持する重み係数データをシフトレジスタ５０４に一括ロードする。即ち、カーネルの水平方向単位で一行の重み係数を一括ロードし、ロードした重み係数を動作クロックに応じてシフトアウトする。
【００６６】
Ｌｏａｄ４信号はシフトレジスタ５０５の初期化を指示するための信号であり、Ｌｏａｄ４信号の値が１でかつＥｎａｂｌｅ２信号が有効（信号レベル１）の場合、記憶部５０３に保持する参照データがシフトレジスタ５０５に一括ロードされる。
【００６７】
なお、Ｅｎａｂｌｅ２信号はシフトレジスタのデータ遷移を制御する信号である。図１２に示すようにＥｎａｂｌｅ２信号の値は動作中に１に設定されているため、Ｌｏａｄ４信号の値が１である場合、クロック信号に応じて記憶部５０３の出力をラッチし、Ｌｏａｄ４信号の値が０の場合、クロック信号に応じてシフト処理を継続する。
【００６８】
制御部５０１のシーケンス制御部６０１はカーネルの水平方向のデータサイズに応じたクロック数をカウントするとＬｏａｄ４信号を有効化し、シフト動作を停止させると同時に記憶部５０３に保持する参照データを一括ロードする。
【００６９】
即ち、シーケンス制御部６０１はコンボリューション演算処理におけるカーネルの１行単位で必要な参照データを記憶部５０３からシフトレジスタ５０５に一括ロードし、シフトレジスタ５０５はロードした参照データを動作クロックに応じてシフトする。また、制御部５０１はＬｏａｄ４信号をＬｏａｄ２信号と同一タイミングで制御する。
【００７０】
なお、Ｅｎａｂｌｅ１信号及びＥｎａｂｌｅ２信号は、図１２に示す「水平方向演算サイクル」において、記憶部５０２及び記憶部５０３からシフトレジスタ５０４及びシフトレジスタ５０５へデータロードが間に合わない場合がある。この場合は、シーケンス制御部６０１はＥｎａｂｌｅ１信号及びＥｎａｂｌｅ２信号を非有効化することで演算器の動作を停止し、データロード時間を確保する。シーケンス制御部６０１は、その際、累積加算器５０８ａ〜５０８ｎのラッチ信号も非有効化する。累積加算器５０８ａ〜５０８ｎはクロックに同期して積和演算を継続しているため、シフトレジスタ５０４及びシフトレジスタ５０５のシフト動作に従って算出する特徴面の複数の位置に対して、同時にカーネルサイズに応じた積和演算処理を実行する。
【００７１】
具体的には、シフトレジスタ５０４及びシフトレジスタ５０５のシフト動作期間（図１２中の水平方向演算サイクル期間）中に複数の特徴面の画素位置のカーネル１行分の積和演算がなされることになる。さらに、図１２に示すカーネル演算区間において、カーネルの列単位の演算を重み係数及び参照データを入替ながら垂直方向に繰り返すことで並列度に応じた二次元のコンボリューション演算結果が得られる。
【００７２】
このように、制御部５０１はカーネルサイズ及び並列度に応じて各信号を制御する事で、積和演算処理と積和演算処理に必要なデータ（重み係数データ及び参照データ）のＲＡＭ５００からの供給を並行に処理する。図１２に示す例の場合、水平方向演算サイクル内に、参照データのＲＡＭ５００から記憶部５０３へのロード及び重み係数のＲＡＭ５００から記憶部５０２へのロードが完了しているため、データロードに要する時間が演算速度に影響を与えることはない。しかしながら、コンボリューション演算のカーネルサイズによっては、ＲＡＭ５００から記憶部５０２や記憶部５０３へのデータロードに要する時間が水平方向演算サイクル内に収まらない場合がある。
【００７３】
図１３はカーネルサイズと並列度とを変えた場合のデータロードサイクル（データロードに要する時間）と水平方向演算サイクルの関係を示す図である。図１３は図１２に示す水平方向演算サイクル単位のデータロードサイクルを算出する例である。
【００７４】
並列度は同時に動作する乗算器５０７ａ〜５０７ｎと累積加算器５０８ａ〜５０８ｎのペアの数を示す。「参照データロード数」は図１２に示す「水平方向演算サイクル」内に、ＲＡＭ５００から記憶部５０３にロードする次の演算に必要な参照データの数を示す。参照データロード数は「並列度＋カーネルの水平方向サイズ−１」である。「重み係数ロード数」は図１２に示す「水平方向演算サイクル」内に、ＲＡＭ５００から記憶部５０２にロードする重み係数のデータ数を示す。
【００７５】
本実施形態の場合、次の演算に必要なデータロードサイクルの総数に相当する「総ロードサイクル」は以下の式を用いて算出できる。
【００７６】
総ロードサイクル＝ＩＮＴ（（参照データロード数＋３）÷４）＋ＩＮＴ（（重み係数ロード数＋３）÷４）                                    （２）
ここで、ＩＮＴ（ｎ）はｎを超えない最大の整数を求める関数である。参照データと重み係数データは夫々８ｂｉｔ（１バイト）である。
【００７７】
なお、式（２）は、前述した様にデータバスの幅は３２ｂｉｔである（即ち１回のアクセスで４バイト転送可能である）場合の算出式である。また、１回のメモリアクセスは１サイクルで完了するものとする。
【００７８】
図１３に示す「カーネル１行の演算サイクル」は、カーネル１行分のコンボリューション演算を行うためのサイクル数である。「カーネル１行の演算サイクル」はカーネルの水平方向サイズの値に相当する。「所要サイクル」はカーネル１行分のコンボリューション演算を行うために必要なサイクル数を示す。図１３に示すように、「総ロードサイクル」が「カーネル１行の演算サイクル」より小さい場合、「カーネル１行の演算サイクル」が「所要サイクル」の値に相当する。この場合、演算処理時間が処理時間を決定することになる（即ち演算ボトルネック）。図１３においてカーネルサイズが１３×１３の場合、「総ロードサイクル」が「カーネル１行の演算サイクル」より小さいので、「所要サイクル」の値は「カーネル１行の演算サイクル」の値と同じである。カーネルサイズが大きい場合、所要サイクルは常に「カーネル演算サイクル」に等しい。
【００７９】
一方、「総ロードサイクル」が「カーネル１行の演算サイクル」より大きい場合、「総ロードサイクル」が「所要サイクル」の値に相当する。この場合、データ転送時間が処理時間を決定する（即ちメモリアクセスボトルネック）。カーネルサイズが小さい場合（図１３においてカーネルサイズが３×３である場合）、所要サイクルは並列度に応じて変化する。並列度が７を超えると、「総ロードサイクル」が「カーネル１行の演算サイクル」を超えるので、データ転送がボトルネックとなり、「所要サイクル」が「カーネル１行の演算サイクル」より大きい「総ロードサイクル」の値となる。
【００８０】
このような場合、図２に示す演算回路の制御部５０１は、ＲＡＭ５００へアクセス完了（記憶部５０２及び記憶部５０３へのデータロード及び非線形変換処理部５０９のデータセーブ）を優先する。即ち、Ｅｎａｂｌｅ１信号、Ｅｎａｂｌｅ２信号、Ｅｎａｂｌｅ３信号及び累積加算器のＬａｔｃｈ  Ｅｎａｂｌｅ信号等を制御する。それによって、シフトレジスタ５０４とシフトレジスタ５０５とのシフト動作及び累積加算器５０８ａ〜５０８ｎの動作を停止し、積和演算処理の開始をデータロードの完了まで遅延させる。
【００８１】
「１画素当たり処理時間」はカーネル１行分のコンボリューション演算を並列に実行する際の、１画素当たりの処理時間を表す値である。「１画素当たり処理時間」は以下の式で定義する。
【００８２】
１画素当たり処理時間＝所要サイクル÷並列度    ‥  （３）
カーネルサイズが大きい場合（図１３においてカーネルサイズが１３×１３の場合）「１画素当たり処理時間」は並列度と共に低下する。即ち、並列度が大きいほど全体の処理時間が短くなる。一方、カーネルサイズが小さい場合（図１３においてカーネルサイズが３×３の場合）、例えば、並列度が７では、並列度が６に比べて「一画素当たり処理時間」が大きくなる。即ち、並列度を上げたにもかかわらず、処理時間が増大する。並列度を８にした場合であっても、「一画素当たり処理時間」は並列度が６の場合と同じである。即ち、並列度を上げたにもかかわらず、処理時間は変わらない。これは、データ転送がボトルネックとなって、ＲＡＭ５００から記憶部５０２及び記憶部５０３へデータをロードする時間が乗算器５０７ａ〜５０７ｎ及び累積加算器５０８ａ〜５０８ｎの演算処理の時間より長いためである。
【００８３】
並列度が８の場合、乗算器５０７ａ〜５０７ｎ及び累積加算器５０８ａ〜５０８ｎの同時動作数が８であり、並列度６の場合に比べて多いため、演算時のピーク消費電流がより大きい。デバイスのダイナミックな消費電力は電流値の２乗和に比例するため、消費電力の観点から並列度は出来るだけ低いことが望ましい。
【００８４】
従って、本実施形態では、制御部５０１は演算回路２２の並列度の最大値に設定された場合に、演算処理時間とデータ転送時間と同じ程度同じ程度になるカーネルサイズ（フィルタサイズ）を所定値とする。カーネルサイズ（フィルタサイズ）が所定値以下である場合はメモリアクセスボトルネックになるので、フィルタサイズに基づいて制御部５０１は演算回路２２の並列度を最大値より低く設定し、演算処理時間とデータ転送時間とを同じ程度にする。例えば、カーネルサイズ（フィルタサイズ）が３×３の場合、制御部５０１は、演算回路２２の並列度を６に設定する。これにより、コンボリューション演算の処理速度は変わらず、消費電力を低減することが可能になる。なお、演算回路２２の並列度を毎回算出するのではなく、カーネルサイズ（フィルタサイズ）と演算回路２２の並列度との対応関係を示すデータテーブルを予めＲＡＭ５００に保持することができる。制御部５０１はＲＡＭ５００に保持されたデータテーブルを参照することによって、演算回路２２の並列度を設定することができる。
【００８５】
本実施形態では、このような観点からカーネルサイズに応じて並列度を設定する。並列度の設定は、前述した様に、図６に示すレジスタの内容に従う。図２において制御部５０１は当該レジスタに記された並列度に従って並列演算回路の動作を制御する。例えば、並列処理が可能な演算器（乗算器５０７ａ〜５０７ｎ及び累積加算器５０８ａ〜５０８ｎ）の数が８であっても、カーネルサイズが３×３の場合、並列度を６に設定して演算器を動作させる。
【００８６】
制御部５０１は、この場合、ＲＡＭ５００から記憶部５０３には並列度が６に対応する数の参照データをロードし、演算処理を開始する。演算器制御データ生成部５１２は、演算処理に先立ち、レジスタ群６０２に記された「並列度」情報に従って、演算器制御信号５１４を生成する。例えば、並列度が６の場合、演算器制御データ生成部５１２は、演算器並列信号「１１１１１１００」を生成する。各ビットが夫々の制御信号を示し、１が動作演算器に対応し、０が停止演算器に対応する。
【００８７】
演算器制御部５１７はコンボリューション演算開始のタイミングでＥｎａｂｌｅ４信号を有効化し、当該制御信号をマスクレジスタにラッチする。ラッチした各信号（演算器を直接制御する信号５１３ａ〜５１３ｎ）はコンボリューション演算中の乗算器５０７ａ〜５０７ｎの動作を制御する。具体的には乗算器０〜乗算器５及び累積加算器０〜累積加算器５のみに演算動作をさせる。
【００８８】
Ｌｏａｄ５信号は累積加算器の結果をシフトレジスタ５０６に並列にロードするための信号であり、制御部５０１は対象となる特徴面の並列処理単位の積和演算が終了するとＬｏａｄ５信号及びＥｎａｂｌｅ３信号の値に１を設定する。図１２は結合先の特徴面が１つの場合の例（即ち１組のコンボリューション演算のみで特徴面を算出する場合）を示す。
【００８９】
シフトレジスタ５０６はＬｏａｄ５信号の値が１で、Ｅｎａｂｌｅ３信号の値が１である場合、累積加算器５０８の出力を一括ロードする。このタイミングでは計算済みのコンボリューション演算結果がシフトレジスタ５０６にラッチされる。制御部５０１はシフトレジスタ５０４及びシフトレジスタ５０５のシフト動作中に記憶部５０２及び記憶部５０３へのデータロードが完了している場合、Ｅｎａｂｌｅ３の信号を有効化し、シフトレジスタ５０６に保持する乗算結果をシフトアウトする。シフトアウトした演算結果は非線形変換処理部５０９で変換処理された後、制御部５０１により、レジスタ群６０２に記された演算結果格納先ポインタ及び参照データのサイズに従ってＲＡＭ５００の所定のアドレスに格納される。
【００９０】
ＲＡＭ５００から記憶部５０２及び記憶部５０３へのデータロードの間隙で制御部５０１はＥｎａｂｌｅ３信号を有効化して、シフトレジスタ５０６から演算結果をシフトアウトする。ここでも、制御部５０１はレジスタ群６０２に記された「並列度」情報に従ってシフトアウトするデータ数を制御する。並列度が６の場合、６演算結果をシフトアウトする。
【００９１】
以上のように、制御部５０１はレジスタ群６０２に記された「並列度」情報に従って並列度を決定し、各部を制御する。
【００９２】
制御部５０１は、記憶部５０２と記憶部５０３及び非線形変換処理部５０９の３つの処理部のＲＡＭ５００に対するアクセスを調停し、積和演算処理と当該３つの処理部のＲＡＭ５００へのアクセスをパイプライン化する。
【００９３】
なお、非線形変換処理部５０９は記憶部５０２及び記憶部５０３に比べてＲＡＭ５００に対するアクセス頻度が低いため最も低い優先順位で動作する。即ち、記憶部５０２及び記憶部５０３のアクセスの間隙となるタイムスロットで非線形変換処理部５０９のアクセスを行う。
【００９４】
図１４は本実施形態の演算回路２２を含む画像処理装置の動作を説明するフローチャートである。以下、フローチャートは、ＣＰＵ２７が制御プログラムを実行することにより実現されるものとする。なお、本実施形態ではパターン認識を行う画像処理装置を例に説明するが、本実施形態の画像処理装置はパターン認識処理に限らず、オブジェクト検出などの処理にも適用できる。
【００９５】
ステップＳ１０１では画像処理装置のパターン認識処理の開始に先立ち、ＣＰＵ２７が各種初期化処理を実行する。ＣＰＵ２７は、画像処理装置のＣＮＮ処理部である演算回路２２の動作に必要な重み係数をＲＯＭ２８からＲＡＭ５００に転送すると共に、演算回路２２の動作、即ちＣＮＮ処理のパラメータを定義する為の各種レジスタの設定を行う。具体的に、ＣＰＵ２７は演算回路２２の制御部５０１に存在する複数のレジスタ群６０２に所定の値を設定する。
【００９６】
更に、ステップＳ１０２はカーネルのサイズやデータ転送時間に基づいて並列度を設定する。並列度は、前述した様に、カーネルのサイズやメモリのアクセスサイクル等から予め決定するものである。ステップＳ１０２の処理が終了すると、ステップＳ１０３に進み、各ハードウェアモジュールが起動し、一連のパターン認識動作を開始する。
【００９７】
まず、ステップＳ１０４では画像入力モジュール２０が、画像センサーの出力する信号をディジタルデータに変換し、フレーム単位で図示しない（画像入力モジュール２０に内蔵する）フレームバッファに格納する。更に、フレームバッファへの格納が完了すると、所定の開始信号に基づいて、前処理モジュール２５が画像変換処理を開始する。前処理モジュール２５はフレームバッファ上の画像データから輝度データを抽出し、コントラスト補正処理を行う。輝度データは、線形変換処理により、ＲＧＢ画像データからＹＩＱ（Ｎａｔｉｏｎａｌ  Ｔｅｌｅｖｉｓｉｏｎ  Ｓｔａｎｄａｒｄ  Ｃｏｍｍｉｔｔｅｅが規定する表色系）画像データに線形変換する事で生成する。コントラスト補正の手法は一般的に知られているコントラスト補正処理を適用して輝度データ（Ｙデータ）のコントラストを強調する。
【００９８】
前処理モジュール２５はコントラスト補正処理後の輝度データを処理用画像としてＲＡＭ５００に格納する。更にステップＳ１０４では、顔候補検出モジュール３１が動作する。顔候補検出モジュール３１はフレームバッファに格納されたＹＩＱカラー画像データから肌色領域を特定し、特定結果を処理対象領域情報としてＲＡＭ５００に格納し、処理対象領域の画像の取得が終了する。１枚の画像データに対する処理が終了すると、顔候補検出モジュール３１は図示しない完了信号（割り込み信号）を有効にする。完了信号を受信したＣＰＵ２７は、次に、ステップＳ１０５に進み、演算回路２２を起動し、ＣＮＮ処理によって高精度なパターン認識処理を実行する。演算回路２２は、前処理モジュール２５の処理結果である補正後輝度画像データと顔候補検出モジュール３１の処理結果である処理対象領域に関する情報を利用して、処理対象領域の画像データに対してのみ並列にコンボリューション演算を実行する。
【００９９】
ステップＳ１０５において、演算回路２２は、レジスタ群６０２の設定値に従ってコンボリューション演算で使用するカーネルを選択する。更に、ステップＳ１０６において、レジスタ群６０２の設定値に従って、並列に動作する演算器を指定する。次に、演算回路２２は、ステップＳ１０７において、ステップＳ１０５で選択したコンボリューション演算用のカーネル（例えば図３に示す３０４１ａ〜ｂ等）を用いて、ステップＳ１０６で指定した複数の演算器でコンボリューション演算を並列に処理する。ステップＳ１０８において、演算回路２２は、全ての特徴面に対する処理が終了したかを判定する。全ての特徴面に対する処理が終了するとステップＳ１０９に進む。図３の例では、全ての特徴面に対する処理を終了する場合は、特徴面３０７の算出が終了した場合である。ステップＳ１０９において、演算回路２２は、ＣＰＵ２７に対して全ての特徴面に対する処理の終了を通知する割り込み信号を生成する。ステップＳ１１０において、ステップＳ１０４からステップＳ１０９までの処理を画像全てに対して実行する。
【０１００】
ＣＰＵ２７は制御部５０１からの終了通知割り込みを受信すると、ＤＭＡＣ２６を起動し、ＲＡＭ５００上の最終特徴面データをＣＰＵバス３０上のＲＡＭ２９に転送する。ＣＰＵ２７はＲＡＭ５００におかれた最終層検出結果から検出対象である所定の物体の位置や大きさなどの情報を取得する。具体的には最終検出結果を二値化処理しラベリング等の処理によりオブジェクト位置やサイズを抽出する。
【０１０１】
一般的なコンボリューションの並列演算回路では、カーネルに対して演算器を割り付ける構成を取ることが多い。図２０はカーネルサイズが２×２の４つの係数を４つの並列乗算器２１００で並列処理する場合の例を示している。この場合、カーネルと並列演算器が依存関係を有しているため、参照データの供給能力等に応じて同時に動作する演算器の数（並列度）を変えることは容易ではない。一方、本実施形態の構成では、生成する特徴面の画素位置毎の並列処理であるため、そもそもカーネルと演算器に依存関係がなく、簡単な制御で動作条件に応じて演算の並列度を変更することができる。
【０１０２】
本実施形態によれば、ＣＮＮ処理を並列に高速処理する並列演算回路において、カーネルのサイズや参照データの供給能力に基づいて並列に演算する演算回路２２の並列度を決定する。これによって、演算回路２２の演算処理速度が低下することなく、無駄な回路動作を抑えて消費電力を低減させることが可能になる。なお、本実施形態では、データ転送がボトルネックになる場合の例として、カーネルのサイズが小さい場合について説明したが、これに限定せず、データ転送がボトルネックになる他の場合にも本件を適用できる。
【０１０３】
（第２の実施形態）
本実施形態の画像処理装置の構成は、第１の実施形態と同じであるので、以下では、本実施形態が第１の実施形態と異なる処理について説明。図１５は本発明の第２の実施形態の画像処理装置の処理例を模式的に説明する図である。図１５の処理では、画像処理装置は、入力画像における顔候補領域のデータサイズに応じて演算回路の並列度を変更する。
【０１０４】
ここで、入力画像中の顔画像領域を認識する処理を例に説明する。入力画像データ１５０１は、画像入力モジュール２０から入力される画像データである。入力画像データ１５０１は顔候補検出モジュール３１による顔候補の検出処理１５０２を経て、コンボリューション演算１５０６で高精度な認識処理を行う領域に関する領域限定情報１５０３（座標情報）が生成される。領域限定情報１５０３がコンボリューション演算１５０６の入力画像データ１５０１における処理対象領域に関する情報である。座標データ１５０４ａと座標データ１５０４ｂとに示される領域（白抜き領域）にあるデータが入力画像データ１５０１の処理対象データとなる。顔候補の検出処理１５０２では、処理負荷の低い簡単な処理で入力画像における顔候補領域を取得する。顔候補領域の取得法としては、特定の色情報を含む矩形領域や楕円領域を抽出する方法や、前フレームの抽出結果（動画像に適用した場合）を利用する方法等、様々な方法が適用可能である。顔候補領域の画素データは、コンボリューション演算１５０６によって演算処理する処理対象データである。
【０１０５】
本実施形態では、顔候補領域の大きさに基づいて、演算回路２２は各演算器１５０７の実行を制御する。ここで、コンボリューション演算１５０６は図２に示す演算回路によって実行される。具体的に、並列に演算される特徴面の各画素１５０７は図２における乗算器５０７ａ〜５０７ｎ及び累積加算器５０８ａ〜５０８ｎによって算出され、各演算器１５０７の制御は図２における演算器制御部５１７によって実行される。また、図１５では並列演算回路の並列度が８の場合の例を示している。すなわち、並列に処理する各演算器１５０７は水平方向に連続する８個の注目画素位置のコンボリューション演算処理を同時に実行する。なお、図１５では、各演算器１５０７の位置を中心とした画素領域の入力画像データを参照してコンボリューション演算を行う。
【０１０６】
各演算器１５０７は８画素単位で演算処理を繰り返し、画像データをスキャンする事で、一枚の画像データに対するコンボリューション演算を完了する。なお、ＣＮＮ処理を実行する場合、複数の特徴面を算出するための複数のフィルタ係数（カーネル係数）を用いてコンボリューション演算を繰り返し実行する。
【０１０７】
なお、本実施形態の演算回路では顔の認識処理に限らず、他の物体の認識処理にも適用できる。他の物体の認識処理では、顔候補領域の検出処理を認識対象物体の候補領域の検出処理に置き換えて、同様に処理することができる。
【０１０８】
本実施形態では、演算器制御信号生成部５１７は、顔候補領域の検出処理１５０２で得られた顔候補領域（顔候補領域を示す座標データ）から並列に処理する各演算器を制御するための信号を生成する。演算器制御信号生成部５１７では各演算器１５０７の動作に同期し、かつ演算の種別（コンボリューションのカーネルサイズ等）に応じたタイミングで制御信号を出力する。
【０１０９】
以下、図１６に示すフローチャートを用いて本実施形態の画像処理装置の処理を説明する。なお、画像処理装置の構成及び演算回路２２の構成は夫々第１の実施形態と同じである。
【０１１０】
ステップＳ１６０１では画像処理装置の処理開始に先立ち、ＣＰＵ２７が各種初期化処理を実行する。ＣＰＵ２７は、画像処理装置のＣＮＮ処理部である演算回路２２の動作に必要な重み係数をＲＯＭ２８からＲＡＭ５００に転送すると共に、演算回路２２の動作、即ちＣＮＮ処理のパラメータを定義する為の各種レジスタ設定を行う。具体的にはＣＰＵ２７は演算回路２２の制御部５０１に存在する複数のレジスタ群６０２に所定の値を設定する。
【０１１１】
各種初期化が終了すると、ステップＳ１６０２に進み、ＣＰＵ２７は各ハードウェアモジュールを起動し、一連の顔認識処理を開始する。まず、ステップＳ１６０３では画像入力モジュール２０が、画像センサーの出力する信号をディジタルデータに変換し、フレーム単位で図示しない（画像入力モジュール２０に内蔵する）フレームバッファに格納する。更に、フレームバッファへの格納が完了すると、所定の開始信号に基づいて、前処理モジュール２５が画像変換処理を開始する。前処理モジュール２５は前記フレームバッファ上の画像データから輝度データを抽出し、コントラスト補正処理を行う。前処理モジュール２５はコントラスト補正処理後の輝度データを検出用画像としてＲＡＭ５００に格納する。
【０１１２】
更に、ステップＳ１６０３では、顔候補検出モジュール３１が動作する。顔候補検出モジュール３１はフレームバッファに格納されたＹＩＱカラー画像データから肌色領域を特定定し、画像データにおける肌色領域を含む矩形領域を顔候補領域として取得する。また、コンボリューション演算のための顔候補領域を含む処理対象領域を取得する。１枚の画像データに対する領域取得処理が終了すると、顔候補検出モジュール３１は図示しない完了信号（割り込み信号）を有効にする。完了信号を受信したＣＰＵ２７は次に、ステップＳ１６０４に進み、演算回路２２を起動し、高精度な顔認識処理を実行する。演算回路２２は、前処理モジュール２５で得られた補正後輝度画像データと、顔候補検出モジュール３１で取得した顔候補領域（処理対象領域）を利用して、処理対象領域の画像データに対してのみ並列にコンボリューション演算処理を実行する。本実施形態では、顔候補検出モジュール３１は、入力画像データにおける肌色領域を顔候補領域として取得する場合について説明したが、認識対象の形状情報等の他の特徴を利用した様々な方法を適用して認識対象の候補領域を取得することが可能である。また、外部から指定された領域限定情報によって認識対象の候補領域を取得してもよい。例えば、ＣＰＵ２７が所定の条件に従って領域限定情報を予め設定し、所定の小領域を切り出して認識対象の候補領域として取得することができる。また、候補領域が矩形領域に限らず、楕円等他の形状で表現することもできる。
【０１１３】
本実施形態では、まず、ステップＳ１６０４では、顔候補検出モジュール３１は、ステップＳ１６０３で取得した顔候補領域から顔候補領域のサイズを特定する。ここで特定する顔候補領域のサイズは、並列演算の方向と同じ方向の顔候補領域のサイズ（顔候補領域の幅方向の画素数或いは高さ方向の画素数）である。次に、ステップＳ１６０５では、取得したサイズに応じて、並列演算する際の並列度を決定する。
【０１１４】
図１７は本実施形態における並列度の決定方法について説明する図である。並列度を決定する際に、参照データとなる入力画像データ及び演算結果である特徴面データの何れを用いても同じ結果であるが、説明を簡単にするために、図１７では演算結果である特徴面データを用いて説明する。図１７（ａ）は従来の並列演算の演算結果を示す図である。画像データ１７０１は演算結果の画像データ面（特徴面）を示す。図１７（ａ）及び。図１７（ｂ）の白抜きの領域（マスク）は演算結果の画像データ面１７０１において、入力データ画像における顔候補領域に対応する特徴面の領域１７０２を示す。この白抜きの領域は、演算回路２２が顔候補領域のデータを参照してコンボリューション演算処理して算出する特徴面であって、その大きさは入力画像データにおける顔候補領域の大きさと対応するものである。以下、この白抜きの領域を算出対象領域と称する。
【０１１５】
図１７（ａ）は、並列に演算可能な演算器（乗算器５０７ａ〜５０７ｎ及び累積加算器５０８ａ〜５０８ｎ）の数が８の場合を示す。算出対象領域１７０２に対する演算を並列に処理する場合、ブロック１７０３ａ及びブロック１７０３ｂのそれぞれで示す８個の演算器による２回の繰返しの処理で当該算出対象領域１７０２の１行の画素を算出する。しかしながら、ブロック１７０３ｂで示す８個の演算器が処理する場合、必要な演算は演算器番号０及び１の２点の演算器であり、演算器番号２〜７で示す演算器は不要な演算処理を実行する。
【０１１６】
本実施形態では図１７（ｂ）に示す様に、算出対象領域１７０２のサイズに応じて演算回路２２の並列度を決定する。図１７（ｂ）の場合、並列度を５に設定する。この場合、ブロック１７０４ａで示す５個の演算器及びブロック１７０４ｂで示す５個の演算器のどちらも、演算器（乗算器５０７ａ〜５０７ｎ及び累積加算器５０８ａ〜５０８ｎ）は必要な演算のみを実行する。この場合は、並列度を８とした場合と同様に、２回の繰返し処理で算出対象領域の一行の画素を算出可能である。即ち、並列度を下げた場合であっても、処理速度は同じである。
【０１１７】
算出対象領域のサイズが並列に動作可能な演算器の数（最大並列度）の整数倍でない場合、最適な並列度は、例えば、以下の式で算出できる。
【０１１８】
最適な並列度＝ｎ−ＩＮＴ（（ｎ−ｍ）／（ＩＮＴ（ｗ／ｎ）＋１））      ‥  （４）
ここで、Ｗは算出対象領域のサイズを示し、ｎは並列に動作可能な演算器の数（最大並列度）を示し、ｍはｗ／ｎの剰余を示し、ＩＮＴ（ｘ）は数値ｘを超えない最大の整数を返す関数を示す。
【０１１９】
式（４）に従えば、処理速度が低下する事なく、最も低い並列度で演算処理することが可能になる。即ち、処理速度を低下させることなく、消費電力を低減することができる。
【０１２０】
また、上記式（４）を用いて並列度を毎回算出するのではなく、予め算出した値を保持したデータテーブルに、演算器制御部５１７に含まれる演算器制御データ生成部５１２が参照することで並列度を決定することも可能である。例えば、算出対象領域の幅又は高さと演算回路２２の並列度との対応関係を保持するデータテーブルがＲＡＭ５００に保持されたとする。演算器制御データ生成部５１２が、ＲＡＭ５００に保持されたテーブルにアクセスすることによって、演算回路２２の並列度を制御することはできる。図１８はデータテーブルの１例であり、算出対象領域の幅が９から１２までの間にある場合、並列度を低くになるように制御する。特徴面における算出対象領域のデータサイズは、入力画像データにおける顔候補領域のデータサイズと対応関係にあるので、顔候補領域のデータサイズと並列度との対応関係を保持するテーブルを用いることができる。この場合は、顔候補検出モジュール３１で取得した顔候補領域のデータサイズから直接に演算回路２２の並列度を制御することができるので、処理が簡単である。
【０１２１】
このように、演算器制御部５１７がテーブルを利用する場合、本実施形態に係る演算回路２２の制御処理をより少ない回路規模で実現する事ができる。
【０１２２】
並列度の制御は、第１の実施形態と同様に演算器制御部５１７が乗算器５０７ａ〜５０７ｎの動作を制御することで実現する。また、制御部５０１は演算器制御部５１７で決定した並列度に従って、演算処理全体の動作を制御する。
【０１２３】
ステップＳ１６０６において、演算回路２２は決定した並列度でコンボリューション演算を実行する。ステップＳ１６０７において、全ての特徴面に対する演算処理が終了すると、ステップＳ１６０８に進み、演算回路２２は、ＣＰＵ２７に対して割り込み信号を生成する。なお、全ての特徴面に対する演算処理が終了する場合は、図３に示す特徴面３０７の算出が終了した場合である。
【０１２４】
ステップＳ１６０９において、ステップＳ１６０３からステップＳ１６０８までの処理を画像全てに対して実行する。
【０１２５】
以上、本実施形態によれば、算出対象領域のサイズ（並列に処理する方向と同じ方向の算出対象領域のサイズ）に従って並列度を決定することで、処理速度を維持しながら、消費電力を低減させることが可能になる。
【０１２６】
本実施形態は、画像入力モジュール２０から入力された一枚の入力画像データに対して、顔候補検出モジュール３１が複数の肌色領域を特定し、一枚の入力画像データから複数の顔候補領域を取得し、処理対象領域を取得することがある。この場合は、複数の処理対象領域のそれぞれに対して、逐次に図１６に示す処理を行うことによって、全ての処理対象領域に対してＣＮＮ処理を行うことができる。この場合の演算回路の並列度の制御は上述した通りである。
【０１２７】
また、複数の処理対象領域をまとめて図１６に示す処理を行うことによって全ての処理対象領域に対してＣＮＮ処理を行うことができる。この場合、演算器制御部５１７が処理対象領域の数に応じて並列度を制御する。
【０１２８】
例えば、複数の処理対象領域の数が少ない場合、演算回路２２の処理時間が規定する時間より短い可能性がある。この場合、演算回路２２の並列度を下げることで消費電力を低減させることができる。つまり、画像処理装置が規定する処理時間内で処理可能な最低の並列度を設定する。
【０１２９】
並列度の決定は、例えば、演算器制御データ生成部５１２にテーブルデータを持たせることで簡単に実現可能である。即ち、処理対象領域の数と対応する並列度との対応関係を保持するテーブルデータをＲＡＭ５００に保持することが可能である。或いは、所定の判定しきい値を設定する複数のレジスタを有し、当該レジスタ値との比較により決定する等の方法でも良い。制御部５０１は演算器制御部５１７で決定した並列度に従って、演算処理全体の動作を制御する。
【０１３０】
以上のように、一枚の画像において複数の処理対象領域がある場合でも、処理対象領域の数に従って並列度を決定することで、消費電力を低減させる事が可能になる。
【０１３１】
（第３の実施形態）
本実施形態の画像処理装置の構成は、第１の実施形態と同じであるので、以下では、本実施形態が第１の実施形態と異なる処理について説明する。本実施形態の階層的なＣＮＮ処理では、階層的に複数回のフィルタ演算処理を行うが、不図示の処理部が階層毎にサブサンプリング処理を行い、サブサンプリング処理した特徴面をＲＡＭ５００に保持させる。階層的なＣＮＮ処理において、サブサンプリング処理は前階層のコンボリューション演算結果を間引いて次階層の参照データとする場合とコンボリューション演算結果に対してプーリング処理して次階層の参照データとする場合がある。プーリング処理は前階層で生成した特徴面に対して平均値フィルタや最大値フィルタを用いて特徴面を縮小する。本実施形態の処理部がサブサンプリング処理又はプーリング処理の何れか又は両方の処理を行うものである。
【０１３２】
一般的にサブサンプル処理では特徴面を水平方向・垂直方向に１／２倍あるいは１／４倍等に縮小処理する。ＣＮＮ処理では処理部がサブサンプリング処理等の処理を行うために、後段の特徴面のサイズが入力画像に対して小さくなることが多い。図１９は処理部がサブサンプリング処理を行った場合の特徴面の例を示す図である。特徴面２００１、特徴面２００２及び特徴面２００３はそれぞれ第１層、第２層、第３層の処理対象の特徴面であり、特徴面２００２は水平・垂直共に１／２倍にサブサンプリングし、特徴面２００３では更に１／２倍にサブサンプリングされている。この様な場合、並列処理領域２００４に示すように、水平方向８並列の演算器では、特徴面２００２及び特徴２００３に対して処理する場合、無駄な演算動作が発生する。なお、処理部がプーリング処理を行う場合でも同様である。
【０１３３】
本実施形態では、演算器制御データ生成部５１２は、階層毎のサブサンプリングの状況に基づいて並列に動作する演算器の数（並列度）を制御する。即ち、演算回路２２が特徴面２００２に対して処理する場合、演算器６及び演算器７の動作を停止し、並列度６で処理する。また、演算回路２２が特徴面２００３に対して処理する場合、演算器３〜７の動作を停止し、並列度３で処理する。
【０１３４】
以上、本実施形態の並列演算回路は並列に動作する演算器の個数単位で並列度を制御可能であるため、演算対象データ（参照データ）のサイズに応じて演算器を有効に活用して消費電力を低減することが可能である。つまり、処理対象領域（参照データ）となる特徴面の大きさに基づいて、並列に動作する演算器の数（並列度）を制御することで、無駄な演算動作を排除し、消費電力を低減することができる。
【０１３５】
（その他の実施形態）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【０１３６】
５００  ＲＡＭ
５０１  制御部
５０２  記憶部
５０３  記憶部
５０４  シフトレジスタ
５０５  シフトレジスタ
５０６  シフトレジスタ
５０７ａ〜５０７ｎ  乗算器
５０８ａ〜５０８ｎ  累積加算器
５０９  非線形変換部
【図１】
2018032190.tif 000004
【図２】
2018032190.tif 000005
【図３】
2018032190.tif 000006
【図４】
2018032190.tif 000007
【図５】
2018032190.tif 000008
【図６】
2018032190.tif 000009
【図７】
2018032190.tif 000010
【図８】
2018032190.tif 000011
【図９】
2018032190.tif 000012
【図１０】
2018032190.tif 000013
【図１１】
2018032190.tif 000014
【図１２】
2018032190.tif 000015
【図１３】
2018032190.tif 000016
【図１４】
2018032190.tif 000017
【図１５】
2018032190.tif 000018
【図１６】
2018032190.tif 000019
【図１７】
2018032190.tif 000020
【図１８】
2018032190.tif 000021
【図１９】
2018032190.tif 000022
【図２０】
2018032190.tif 000023