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