(57)【要約】【課題】ＣＮＮ演算等の、空間的な配置関係に基く階層的な演算処理を、入力データの分割を行うことなく、少ないメモリで実現可能にする。【解決手段】入力データに演算を施して演算結果を生成する複数の処理ノードが階層的に接続されたネットワーク演算を実行する演算処理装置は、ネットワーク演算を実現するための、前記複数の処理ノードの各々が実行する所定の処理単位の演算の実行順序を規定したシーケンス情報に基づいて、演算処理を実行すべき処理ノードを順次に指定し、指定された処理ノードによる演算処理を上記処理単位で実行して演算結果を得る。そして、演算処理装置は、複数の処理ノードの各々に対してメモリの部分領域をリングバッファとして割り当て、上記処理単位の演算結果の量に対応したメモリ領域を単位としてデータの書き込み先を循環させながら、上記演算結果をメモリに書き込む。【選択図】      図１
2008310700.tif 000002
【特許請求の範囲】
【請求項１】
入力データに演算処理を施す論理的な複数の処理ノードが階層的に接続されたネットワーク演算を実行する演算処理装置であって、
前記複数の処理ノードの各々が実行する予め定められた処理単位の演算の実行順序を規定したシーケンス情報に基づいて、前記複数の処理ノードから、演算処理を実行すべき処理ノードを順次に指定する指定手段と、
前記指定手段で指定された処理ノードによる演算処理を前記処理単位で実行して演算結果を得る実行手段と、
前記複数の処理ノードの各々に対してメモリの部分領域をリングバッファとして割り当て、前記処理単位の演算結果の量に対応したメモリ領域を単位としてデータの書き込み先を循環させながら、前記実行手段によって得られた各処理ノードの演算結果を対応するリングバッファに書き込むメモリ制御手段とを備えることを特徴とする演算処理装置。
【請求項２】
前記メモリ制御手段は、前記ネットワーク演算における前記複数の処理ノードの論理的な接続状態に基づいて、各処理ノードへのリングバッファの割り当てを決定することを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記メモリ制御手段は、処理ノードに割り当てられるリングバッファの循環数を、当該処理ノードの後段に接続されている処理ノードが前記処理単位の演算を実行する際に参照するデータのサイズに基づいて決定することを特徴とする請求項２に記載の演算処理装置。
【請求項４】
前記入力データは２次元の画像データであり、
前記実行手段は、前記画像データの水平方向の１ラインを単位として演算処理を実行して水平方向の１ライン分の演算結果を取得し、
前記メモリ制御手段は、水平方向の１ライン分のメモリ領域を単位としてデータの書き込み先を循環させることを特徴とする請求項１乃至３のいずれか１項に記載の演算処理装置。
【請求項５】
前記指定手段は、ネットワーク演算の変更に応じて、前記シーケンス情報を変更し、
前記メモリ制御手段は、変更後のネットワーク演算における処理ノードの接続構造に基づいて、前記メモリの、処理ノードへの部分領域の割り当てを変更することを特徴とする請求項２に記載の演算処理装置。
【請求項６】
前記リングバッファにおける、前記演算結果の書き込み先を示す循環位置を、前記複数の処理ノードのそれぞれに関して保持する保持手段を更に備えることを特徴とする請求項１乃至５のいずれか１項に記載の演算処理装置。
【請求項７】
前記メモリ制御手段は、前記リングバッファの循環数を、処理ノード毎に設定することを特徴とする請求項１乃至６のいずれか１項に記載の演算処理装置。
【請求項８】
前記メモリ制御手段は、前記リングバッファの循環数を、前記ネットワークにおける処理ノードが属する階層毎に設定することを特徴とする請求項１乃至６のいずれか１項に記載の演算処理装置。
【請求項９】
前記メモリが連続するアドレス空間を有するメモリであり、前記複数の処理ノードの各々に前記メモリの異なるアドレス空間が割り当てられることで、前記メモリが共有されることを特徴とする請求項１乃至８のいずれか１項に記載の演算処理装置。
【請求項１０】
前記ネットワークの演算処理がコンボリューショナルニューラルネットワークの演算処理であることを特徴とする請求項１乃至９のいずれか１項に記載の演算処理装置。
【請求項１１】
入力データに演算処理を施す論理的な複数の処理ノードが階層的に接続されたネットワーク演算を実行する演算処理装置の制御方法であって、
前記複数の処理ノードの各々が実行する予め定められた処理単位の演算の実行順序を規定したシーケンス情報に基づいて、前記複数の処理ノードから、演算処理を実行すべき処理ノードを順次に指定する指定工程と、
前記指定工程で指定された処理ノードによる演算処理を前記処理単位で実行して演算結果を得る実行工程と、
前記複数の処理ノードの各々に対してメモリの部分領域をリングバッファとして割り当て、前記処理単位の演算結果の量に対応したメモリ領域を単位としてデータの書き込み先を循環させながら、前記実行工程によって得られた各処理ノードの演算結果を対応するリングバッファに書き込むメモリ制御工程とを備えることを特徴とする演算処理装置の制御方法。
【請求項１２】
前記メモリ制御工程は、前記ネットワーク演算における前記複数の処理ノードの論理的な接続状態に基づいて、各処理ノードへのリングバッファの割り当てを決定することを特徴とする請求項１１に記載の演算処理装置の制御方法。
【請求項１３】
前記メモリ制御工程は、処理ノードに割り当てられるリングバッファの循環数を、当該処理ノードの後段に接続されている処理ノードが前記処理単位の演算を実行する際に参照するデータのサイズに基づいて決定することを特徴とする請求項１２に記載の演算処理装置の制御方法。
【請求項１４】
前記入力データは２次元の画像データであり、
前記実行工程は、前記画像データの水平方向の１ラインを単位として演算処理を実行して水平方向の１ライン分の演算結果を取得し、
前記メモリ制御工程は、水平方向の１ライン分のメモリ領域を単位としてデータの書き込み先を循環させることを特徴とする請求項１１乃至１３のいずれか１項に記載の演算処理装置の制御方法。
【請求項１５】
前記指定工程は、ネットワーク演算の変更に応じて、前記シーケンス情報を変更し、
前記メモリ制御工程は、変更後のネットワーク演算における処理ノードの接続構造に基づいて、前記メモリの、処理ノードへの部分領域の割り当てを変更することを特徴とする請求項１２に記載の演算処理装置の制御方法。
【請求項１６】
前記リングバッファにおける、前記演算結果の書き込み先を示す循環位置を、前記複数の処理ノードのそれぞれに関して保持する保持工程を更に備えることを特徴とする請求項１１乃至１５のいずれか１項に記載の演算処理装置の制御方法。
【請求項１７】
前記メモリ制御工程は、前記リングバッファの循環数を、処理ノード毎に設定することを特徴とする請求項１１乃至１６のいずれか１項に記載の演算処理装置の制御方法。
【請求項１８】
前記メモリ制御工程は、前記リングバッファの循環数を、前記ネットワークにおける処理ノードが属する階層毎に設定することを特徴とする請求項１１乃至１６のいずれか１項に記載の演算処理装置の制御方法。
【請求項１９】
前記メモリが連続するアドレス空間を有するメモリであり、前記複数の処理ノードの各々に前記メモリの異なるアドレス空間が割り当てられることで、前記メモリが共有されることを特徴とする請求項１１乃至１８のいずれか１項に記載の演算処理装置の制御方法。
【請求項２０】
前記ネットワークの演算処理がコンボリューショナルニューラルネットワークの演算処理であることを特徴とする請求項１１乃至１９のいずれか１項に記載の演算処理装置の制御方法。
【請求項２１】
請求項１１乃至２０のいずれか１項に記載の制御方法をコンピュータに実行させるためのコンピュータプログラム。
【請求項２２】
請求項１１乃至２０のいずれか１項に記載の制御方法をコンピュータに実行させるためのコンピュータプログラムを格納したことを特徴とするコンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パターン識別装置、パターン識別システムや階層的なフィルタ演算処理装置等に適用される階層的演算処理方法及び装置に関するものである。
【背景技術】
【０００２】
パターン識別システムや予測システム・制御システム等への応用として、ニューラルネットワークを利用した信号処理装置が広く利用されている。ニューラルネットワークはマイクロプロセッサ上で動作するソフトウェアとして実現される事が多く、パーソナルコンピュータやワークステーション等のアプリケーションソフトウェアとして提供されている。
【０００３】
図２は一般的な階層結合型ニューラルネットワークを利用する画像処理装置の概念的な構成例を示す図である。２１は検出対象としての、例えば、ラスタスキャンされた画像データである。演算ユニット２２は、３階層のニューラルネットワークで構成され、画像データ２１の中から所定の物体を検出する演算ユニットである。２３は演算結果に相当する出力データ面である。演算ユニット２２は、画像データ２１内の所定の画像領域２４を走査参照しながら処理を行う事で、画像データ２１の中に存在する検出対象を検出する。出力データ面２３は検出対象の画像データ２１と同じサイズのデータ面であり、演算ユニット２２が画像データ２１の全ての領域を走査しながら処理することにより得られた検出出力が走査順に格納すされる。演算ユニット２２は対象物が検出された位置で大きな値を出力する事から、当該出力データ面２３を走査する事で対象物の画像面内の位置を把握する事ができる。
【０００４】
演算ユニット２２において、２５，２６、２７は夫々ニューラルネットワークの階層を示し、各階層に所定の数のニューロン２８が存在する。第１階層２５は参照画像の画素数と同じ数のニューロン２８を有する。各ニューロンは所定の重み係数でフィードフォワード結合される。
【０００５】
図３は１つのニューロン２８の構成を示す図である。in_1〜in_nはニューロンの入力値であり、第２階層以降では、前階層ニューロンの出力値である。乗算器３１ａ、３１ｂ…３１ｎは、学習によって得られた係数w_1〜w_nを各前階層ニューロンの出力値に乗じた結果を出力する。累積加算器３２は、乗算器３１ａ、３１ｂ…３１ｎからの乗算結果を累積加算する。非線形変換処理部３３は、累積加算器３２からの累積加算結果を、ロジスティック関数や双曲正接関数（tanh関数）等により非線形変換し、その変換結果を検出結果outとして出力する。この種の階層型ニューラルネットワークにおいて、夫々のニューロンに必要な重み係数w_1〜w_nは、一般的に知られているバックプロパゲーション等の学習アルゴリズムを使用して、検出する対象物毎に決定されている。
【０００６】
このような階層結合型ニューラルネットワークを組み込み機器等へ高性能かつ安価に実装する事を目的として、アナログハードウェアやディジタルハードウェアで階層結合型ニューラルネットワークを実現する手法が提案されている。
【０００７】
例えば、特許文献１では、単層のアナログニューラルネットワークハードウェアを時分割多重利用する事で多層化を実現する階層構造ニューラルネットのアーキテクチャが開示されている。又、特許文献２ではディジタルハードウェアにより実現する方法が開示されている。一方、ニューラルネットワークの中でもConvolutional Neural Networks（以下ＣＮＮと略記する）と呼ばれる演算手法は、識別対象の変動に対して頑健なパターン認識を可能にする手法として知られている。例えば、特許文献３及び特許文献４では画像中の対象物識別や検出に適用した例が提案されている。
【０００８】
図４は簡単なＣＮＮの例を示す論理的なネットワーク構成図である。ここでは、第１階層４０６の特徴数が３、第２階層４１０の特徴数が２、第３階層４１１の特徴数が１の３階層ＣＮＮの例を示している。４０１は画像データであり、ラスタスキャンされた画像データに相当する。画像データ４０１はＣＮＮ演算への入力データである。４０３ａ〜４０３ｃは第１階層４０６の特徴面を示す。特徴面とは、所定の特徴抽出フィルタ（コンボリューション演算の累積和及び非線形処理）で前階層のデータを走査しながら演算して得られた処理結果を示す画像データ面である。特徴面はラスタスキャンされた画像データに対する検出結果であるため、検出結果も面で表される。特徴面４０３ａ〜４０３ｃは画像データ４０１から夫々対応する特徴抽出フィルタにより生成される。例えば、特徴面４０３ａ〜４０３ｃは、夫々２次元のコンボリューションフィルタ４０４ａ〜４０４ｃの演算結果を非線形変換することにより生成される。なお、４０２は、コンボリューションフィルタ４０４ａ〜４０４ｃのコンボリューション演算に必要な参照画像領域を示す。
【０００９】
例えば、カーネルサイズ（水平方向の長さと垂直方向の高さ）が１１×１１のコンボリューションフィルタ演算は以下に示すような積和演算により処理される。
【００１０】
【数１】
2008310700.tif 000003
ここで、
input(x,y)：座標(ｘ、ｙ)での参照画素値、
output(x,y)：座標(ｘ、ｙ)での演算結果、
weight(column,row)：座標(ｘ+column、ｙ+row)での重み係数、
columnSize=11, rowSize=11：フィルタカーネルサイズ（フィルタタップ数）である。
【００１１】
コンボリューションフィルタ４０４ａ〜４０４ｃは夫々異なる係数のコンボリューションフィルタカーネルである。また、特徴面によってコンボリューションカーネルのサイズも異なる。
【００１２】
ＣＮＮ演算では複数のフィルタカーネルを画素単位で走査しながら積和演算を繰り返し、最終的な積和結果を非線形変換する事で特徴面が生成される。特徴面４０３ａを算出する場合は前階層との結合数が１であるため、フィルタカーネルは１つ（コンボリューションフィルタ４０４ａ）である。一方、特徴面４０７ａ及び４０７ｂを計算する場合、前階層との結合数が３であるため夫々４０９ａ〜４０９ｃ及び４０９ｄ〜４０９ｅに相当する３つのコンボリューションフィルタの演算結果が累積加算される。つまり、特徴面４０７ａは、コンボリューションフィルタ４０９ａ〜４０９ｃの出力を累積加算し、最後に非線形変換処理する事によって得る。
【００１３】
ここで、コンボリューションフィルタ４０９ａ〜４０９ｅは何れも異なるフィルタ係数のコンボリューションカーネルである。またコンボリューションフィルタ４０９ａ〜４０９ｃと、コンボリューションフィルタ４０９ｄ〜４０９ｅは図示するように異なるカーネルサイズを有する。各コンボリューションフィルタの累積加算及び非線形変換処理の基本的構成は図３に示すニューロンの構成と同じである。即ち、コンボリューションカーネルの係数が重み係数w_1〜w_nに相当する。特徴面４０７ａ、４０７ｂ、４０８の様に複数の前階層特徴面と結合される場合、複数のコンボリューションカーネル演算結果は累積加算器３２で蓄積される事になる。即ち、総結合数はコンボリューションカーネルサイズ×前階層の特徴数に相当する。
【００１４】
図５はＣＮＮ演算における図形検出処理の一例を説明する図である。５１ａ〜５１ｃは第１階層の特徴抽出対象を模式的に示す図であり、それぞれ水平方向のエッジ及び斜め方向のエッジを抽出する様に学習されたコンボリューションカーネルである。５２ａ、５２ｂは複数の第１階層の特徴抽出結果とその空間的な配置関係から決定される図形である。５３は最終的に抽出する図形を示している。なお、図形５３は複数の第２階層特徴抽出結果とその空間配置関係から決定される。また、コンボリューションカーネルの各フィルタ係数は特徴毎にパーセプトロン学習やバックプロパゲーション学習等の一般的な手法を用いて予め学習により決定されているものとする。物体の検出や認識等においては、１０×１０以上の大きなサイズのフィルタカーネルを使用する事が多い。また、一般的に特徴毎にコンボリューションカーネルのサイズは異なる。
【００１５】
このように、ＣＮＮ演算は、特徴抽出毎に画像面単位で結果を保持しながら階層的に結合する事で、プリミティブな特徴とその空間的な配置関係に基づく頑健なパターン検出を実現する。
【特許文献１】特許第２６７９７３０号明細書
【特許文献２】特開平３−５５６５８号公報
【特許文献３】特開平１０−０２１４０６号公報
【特許文献４】特開２００２−３５８５００号公報
【発明の開示】
【発明が解決しようとする課題】
【００１６】
図２で説明した様に、一般的な階層型ニューラルネットワークを利用した画像中の物体検出装置において、演算処理に必要なメモリサイズは、入出力画像バッファを除くと、各ニューロン出力を保持するためのバッファメモリがあれば十分である。即ち、ニューロン数と等価な数の所定ビット数のメモリがあれば所望の演算処理を実行できる。
【００１７】
一方、ＣＮＮ演算の場合、前階層の複数の特徴抽出結果の空間的配置に基いて特徴抽出が行われるため、各階層間で所定サイズのデータバッファが必要になる。例えば、図４に例示したＣＮＮ演算の構成の場合、５個の特徴面４０３ａ〜４０３ｃ、４０７ａ〜４０７ｂ（バッファメモリ）が必要になる。すなわち、入出力画像バッファのほかに、画像サイズ×５の容量のメモリサイズが必要となり、一般的な階層型ニューラルネットに比べ処理に必要なメモリサイズが増大する。
【００１８】
特許文献３及び特許文献４に開示されている手法も特徴抽出結果を画像面で保持する手法であり、上記と同様に、処理に必要なメモリサイズは一般的な階層型ニューラルネットワークによる方式に比べて大きくなる。
【００１９】
その結果、特に、ハードウェアにより上述のようなＣＮＮ演算構成を実現する場合、ＬＳＩの内部にサイズの大きいＲＡＭ（Random Access Memory）を用意する必要が生じることになり、回路規模が増大してしまう。また、ＣＮＮ演算構成をソフトウェアにより実現する場合であっても、組み込み機器に実装する場合、システムに必要なメモリ量が増大する事で同様にコストが上昇する。
【００２０】
一方、メモリの増大を避ける手法として、入力するデータを領域分割して投入する方法が利用されている。しかしながら、参照領域が広い演算を階層的に処理する場合、入力するデータを広い範囲でオーバーラップさせて分割投入する必要があるため、処理対象領域が増加し、処理速度が低下する。
【００２１】
本発明はこのような問題点を解決するためになされたものであり、ＣＮＮ演算等の、空間的な配置関係に基く階層的な演算処理を、入力データの分割を行うことなく、少ないメモリで実現可能にすることを目的とする。
【課題を解決するための手段】
【００２２】
上記の目的を達成するための本発明の一態様による演算処理装置は、
入力データに演算処理を施す論理的な複数の処理ノードが階層的に接続されたネットワーク演算を実行する演算処理装置であって、
前記複数の処理ノードの各々が実行する予め定められた処理単位の演算の実行順序を規定したシーケンス情報に基づいて、前記複数の処理ノードから、演算処理を実行すべき処理ノードを順次に指定する指定手段と、
前記指定手段で指定された処理ノードによる演算処理を前記処理単位で実行して演算結果を得る実行手段と、
前記複数の処理ノードの各々に対してメモリの部分領域をリングバッファとして割り当て、前記処理単位の演算結果の量に対応したメモリ領域を単位としてデータの書き込み先を循環させながら、前記実行手段によって得られた各処理ノードの演算結果を対応するリングバッファに書き込むメモリ制御手段とを備える。
【００２３】
また、上記の目的を達成するための本発明の他の態様による演算処理方法は、
入力データに演算処理を施す論理的な複数の処理ノードが階層的に接続されたネットワーク演算を実行する演算処理装置の制御方法であって、
前記複数の処理ノードの各々が実行する予め定められた処理単位の演算の実行順序を規定したシーケンス情報に基づいて、前記複数の処理ノードから、演算処理を実行すべき処理ノードを順次に指定する指定工程と、
前記指定工程で指定された処理ノードによる演算処理を前記処理単位で実行して演算結果を得る実行工程と、
前記複数の処理ノードの各々に対してメモリの部分領域をリングバッファとして割り当て、前記処理単位の演算結果の量に対応したメモリ領域を単位としてデータの書き込み先を循環させながら、前記実行工程によって得られた各処理ノードの演算結果を対応するリングバッファに書き込むメモリ制御工程とを備える。
【発明の効果】
【００２４】
本発明によれば、中間演算結果を介して演算部を階層的に接続する多階層のネットワーク演算を少ないメモリで高速に処理する事が可能になる。
【発明を実施するための最良の形態】
【００２５】
以下、添付の図面を参照して本発明の好適な実施形態を説明する。
【００２６】
＜第１実施形態＞
第１実施形態の動作の詳細について図１、図６、図７、図８を用いて説明する。
【００２７】
図６は第１実施形態による階層的演算処理回路を具備した画像処理装置（本実施形態ではパターン検出装置として用いられる）の構成例を示すブロック図である。当該パターン検出装置は画像データ中の特定の物体（画像パターン）を検出する機能を有する。
【００２８】
図６において、６１は画像入力部であり、光学系、ＣＣＤ（Charge-CoupledDevices）又はＣＭＯＳ（Complimentary Metal Oxide Semiconductor）センサ等の光電変換デバイスを具備する。さらに、画像入力部６１は、光電変換デバイスを制御するドライバ回路、ＡＤコンバータ、各種画像補正を司る信号処理回路、フレームバッファ等を有する。６２は前処理部であり、検出処理を効果的に行うための各種前処理を行う。具体的には、前処理部６２は、色変換処理／コントラスト補正処理等の画像データ変換をハードウェアで処理する。ＣＮＮ処理部６３は階層的演算処理回路を含み、特徴検出処理部として機能する。ＣＮＮ処理部６３の詳細は図１を用いて後述する。
【００２９】
６６はＤＭＡＣ（Direct Memory Access Controller）であり、画像バス６４上の各処理部間及び画像バス６４上のデバイスとＣＰＵバス６７上のＲＡＭ７０との間のデータ転送を司る。６５はブリッジであり、画像バス６４とＣＰＵバス６７とのブリッジ機能を提供する。６８はＣＰＵであり、本装置全体の動作を制御する。６９はＲＯＭ（ReadOnly Memory）であり、ＣＰＵ６８の動作を規定する命令や各種演算に必要なパラメータデータを格納する。例えば、ＣＮＮ処理部６３の動作に必要な重み係数、ネットワーク結合情報、シーケンス情報等がＲＯＭ６９に格納される。ＲＡＭ７０はＣＰＵ６８の動作に必要なメモリ（RAM：RandomAccess Memory）である。ＲＡＭ７０はＤＲＡＭ（Dynamic RAM）等の比較的容量の大きいメモリで構成される。ＣＰＵ６８はブリッジ６５を介して画像バス６４上の各種処理部にアクセスする事が可能である。図６に示されるように画像バス６４とＣＰＵバス６７とを分離する事で、ハードウェアによる画像入力部６１、前処理部６２、ＣＮＮ処理部６３の各処理部とＣＰＵ６８とは同時に動作することが可能である。
【００３０】
図１はＣＮＮ処理部６３の詳細な構成を示すブロック図である。ＣＮＮ処理部６３は、所定の条件に従って、時分割で論理的な処理ノード（後述）に対応する演算を実行する事でＣＮＮネットワーク全体の演算を処理する。
【００３１】
図１において、１０１は演算部であり、所定のデータ群に対してコンボリューション演算と非線形処理とを実行する。図１２は演算部１０１のより具体的な構成例を示す図である。図１２において、乗算器１２０１は、カーネル選択信号に従って係数選択部１２０４が選択し出力する重み係数と、同期して入力される入力データとを乗じる。累積加算器１２０２は、乗算器１２０１の出力を、前段に接続された処理ノードの数だけ累積する。非線形変換処理部１２０３は、ロジスティック関数やtanh関数を用いて、累積加算器１２０２による累積加算結果を非線形変換する。なお、非線形変換は、各入力値に対する所定の関数値を列挙する関数テーブルで実現されてもよい。重み係数記憶部１２０５は、検出対象に応じた複数の重み係数データを格納する。重み係数記憶部１２０５はＲＡＭ等により構成される。係数選択部１２０４は、ネットワーク構成管理部１０８からの選択信号に従って、対応する重み係数を重み係数記憶部１２０５から順次読み出す。
【００３２】
本実施形態において、演算部１０１は論理的な処理ノードに対応してライン単位で時分割処理を行う。図２２はライン単位で演算部１０１が処理を実行する場合の様子を模式的に説明する図である。
【００３３】
図２２において、２２０１は演算対象データ面（参照データ面）を表している。演算対象画像２２０１内の模式的に示された最小一升が、ラスタスキャン順で表わされた入力画像の画素又は前階層の処理ノードでの演算結果画素（input(x,y)、ｘ：水平方向位置、ｙ：垂直方向位置）を示す。また、２２０２は演算結果画像を表している。演算結果画像２２０２内の模式的に示された最小一升が、ラスタスキャン順の演算結果画素（output(x,y)、ｘ：水平方向位置、ｙ：垂直方向位置）を表している。
【００３４】
演算対象画像２２０１における太線内の領域２２０３はoutput(6,7)位置のコンボリューション演算を処理する場合の参照データの領域を示す。２２０３はコンボリューションカーネルのサイズが水平方向「１１」、垂直方向「１３」の場合を示している。
【００３５】
演算結果画像２２０２における太線内の領域２２０４は、演算対象画像２２０１に対してライン単位の演算（水平方向１行分の演算）を行った結果が格納された領域を示す。領域２２０４内の格子状の網掛け領域（左右の端の５画素）は、コンボリューションカーネルのサイズに依存して発生する周辺領域（演算が行われない領域）の画素である。階層的処理においてこの周辺領域をどう扱うか（削除するか、デフォルト値を埋め込むか等）は、本発明において本質的でなく、周知のどのような手法を適用してもかまわないが、ここでは例えば、デフォルト値を埋め込むとする。
【００３６】
図２２から明らかなように、単位演算（水平方向１行分の演算）を行う場合には、演算対象画像２２０１のうちの、少なくとも、網掛けにより示した領域２２０５のサイズの領域が必要となる。ここで、領域２２０５の水平方向サイズは演算対象画像と同じサイズ、垂直方向サイズはコンボリューションカーネルの垂直方向サイズとなる。領域２２０４の演算結果データを得る単位演算を、単位演算対象画像領域をずらしながら行うことで、演算対象画像２２０１の全領域にわたって１つのコンボリューション演算を行うことができる。尚、以下では、演算結果画素、演算結果画像及び演算結果データを総称して演算結果と記載する。
【００３７】
図１に戻り、１０２はメモリであり、ＲＡＭにより構成され、入力画像／中間層の特徴抽出結果／最終検出結果等を格納する。メモリ１０２はコンボリューション演算を高速に実行するため、高速にランダムアクセス可能なＳＲＡＭ（Static RAM）を使用することが好ましい。
【００３８】
１０３はメモリアクセス制御部であり、メモリ１０２に対するアドレスの生成、リード／ライト信号制御、及びデータバスの方向制御等を司る。メモリアクセス制御部１０３はリングバッファ設定部１０４-1〜１０４-nの出力に従ってメモリにアクセスする。
【００３９】
１０４-1〜１０４-nは、ＣＮＮ演算の論理的な処理ノード毎に独立してメモリ１０２をリングバッファとして利用するためのリングバッファ設定部である。以下、リングバッファ設定部の任意の一つを指す場合は、リングバッファ設定部１０４と記載する。リングバッファ設定部１０４は、リングバッファのサイズを指定するリングサイズ設定部１０６、リングバッファの動作状況を保持するリングカウンタ１０５及びメモリ１０２上の物理アドレスを決定するためのオフセットアドレス設定部１０７等を具備する。リングバッファ設定部１０４-1〜-nからの出力であるリングカウンタ値、オフセットアドレス値は、それぞれセレクタ１１２１、１１２２で選択される。
【００４０】
１０８はネットワーク構成管理部であり、１つの演算部１０１を利用して論理的な階層ネットワーク処理を実現するための構成とその動作を決定する。ネットワーク構成情報設定部１１０は、階層ネットワークの論理的な階層結合関係を指定する構成情報をテーブルデータ（構成情報テーブル）として保持する。この構成情報テーブルはレジスタやＲＡＭで構成される。ネットワーク構成管理部１０８は、この構成情報テーブルに従ってメモリアクセス制御部１０３や演算部１０１の動作を制御するシーケンサを内蔵する。後述するシーケンス制御部１０９はライン単位のシーケンス制御を司るが、ネットワーク構成管理部１０８のシーケンサは論理的な処理ノードが１ライン分の演算を処理するためのシーケンスを制御する。
【００４１】
１０９はシーケンス制御部であり、シーケンス情報設定部１１１に記述されたシーケンス情報に従って、所定の演算処理単位での演算処理順を制御する。図２２によって上述したように、本実施形態における所定の演算処理単位とは、水平方向１行分である。よって、シーケンス制御部１０９は、例えばライン単位で論理的な処理ノードを切り替えながら、複数の処理ノードの処理を時分割で実行するための処理順を制御する。シーケンス情報設定部１１１はシーケンス情報を保持するＲＡＭ等により構成される。
【００４２】
１１３はＣＰＵバスアクセス制御部であり、ＣＰＵ６８がＣＮＮ処理部６３内の各種レジスタやメモリにアクセスするためのバスインターフェースである。ＣＮＮ処理部６３内の各種設定データは当該インターフェースを介してＣＰＵ６８によって書き込まれる。ここで、書き込まれる設定データとしては、リングサイズ設定部１０６内のバッファサイズ、ネットワーク構成情報設定部１１０内の構成情報テーブル、シーケンス情報設定部１１１内のシーケンス情報が挙げられる。また、演算部１０１内の重み係数記憶部１２０５（図１２）への重み係数の設定も行われる。
【００４３】
図７は本実施形態で実現するＣＮＮネットワークとバッファメモリの関係を説明する図である。図７は図４で説明したＣＮＮネットワークを本実施形態のＣＮＮ処理部６３に適用した場合の例を説明する図である。
【００４４】
図７において、７０１は入力層であり、所定サイズの検出対象画像データである。７０３ａ〜７０３ｃは第１階層７０６の演算出力である特徴面を格納するリングバッファを表す。また、図７において、リングバッファ７０３ａ〜７０３ｃの大きさは、それぞれの特徴面を格納するために割り当てられたメモリの部分領域の大きさに対応している。すなわち、入力層７０１に対するコンボリューションカーネル７０４ａ〜７０４ｃ（コンボリューション演算及び非線形変換）による演算結果である特徴面が夫々独立したサイズを有する、メモリの部分領域（リングバッファ７０３ａ〜７０３ｃ）に格納される。後述するように、この部分領域はリングバッファとして制御される。第１階層７０６の演算結果である特徴面は論理的には入力層７０１と同じサイズのデータ面となるが、ここでは所定高さのリングバッファ７０３ａ及び７０３ｂに格納される。これらのリングバッファは、幅が入力画像と同じであり、ライン単位で循環するバンドバッファである。
【００４５】
図１３は本実施形態のリングバッファの動作を模式的に説明する図である。ここでは説明のためリングバッファの高さ（循環数）を６とする。また、Ｌ１〜Ｌ８でラスタスキャン順に入力される８ライン分の画像データ１３００を６ライン分のリングバッファで参照する場合の例を説明する。１３０１はリングバッファに６ライン分のデータが充填された状態を表す。この場合、リングカウンタ１０５は０〜５の値を循環し、格納状態１３０１の場合、リングカウンタ１０５の値は「５」となる。次の処理単位ではリングバッファの先頭行にＬ７が充填され、リングカウンタ１０５は０となる。この場合、格納状態１３０２となり、Ｌ２〜Ｌ７を参照する事が可能になる。更に次の処理単位では、２行目位置にＬ８が充填され、リングカウンタ１０５は１となる。この場合、格納状態１３０３となり、Ｌ３〜Ｌ８を参照する事が可能になる。このように、リングバッファは、予め定められた処理単位の演算を処理ノードが実行して得られる演算結果の量に対応したメモリ領域を単位として循環する。すなわち、リングカウンタ１０５には、演算結果データの書き込み先を示すための循環位置が保持される。そして、このようなリングカウンタ１０５をネットワーク演算を構成する複数の処理ノードのそれぞれに関して設けることで、処理ノード毎に演算結果データの書き込み先を示す循環位置が保持される。
【００４６】
本実施形態において、リングバッファの高さ（循環数）は、後段に結合する全てのコンボリューションカーネルのサイズによって決定される。例えばリングバッファ７０３ａの場合、コンボリューションカーネル７０９ａと７０９ｄの高さ（垂直方向サイズ）のうち大きい値をリングバッファ高さとする。同様にリングバッファ７０３ｂ、７０３ｃの高さは、夫々コンボリューションカーネル７０９ｂ／７０９ｅ、７０９ｃ／７０９ｆのカーネルサイズから決定される。
【００４７】
また、第２階層７１０の演算結果である特徴面を格納するためのリングバッファ７０７ａ、７０７ｂでは、夫々コンボリューションカーネル７１２ａ、７１２ｂの高さがリングバッファの高さとなる。なお、リングバッファ７０３ｃのサイズは、カーネルサイズによって規定されてもよいが、本実施形態では、ＣＰＵ６８が判定処理に使用する特徴検出データであるため、入力画像データと同じサイズのバッファが割り当てられている。ＣＰＵ６８は、バッファ７１３に格納された最終階層７１１の特徴面及びリングバッファ７０３ｃに保持された第１階層７０６の特徴面を参照して検出対象画像の存在を判定する。
【００４８】
この様に、本実施形態では、中間層の特徴面を保持するリングバッファ７０３ａ、７０３ｂ、７０３ｃ,７０７ａ、７０７ｂをネットワークの結合状態及び目的に応じて夫々異なるサイズのメモリ領域にアサインする。これにより、ＣＮＮネットワークを実現する際に必要なメモリ量を最小化する。
【００４９】
以下、図８に示すフローチャートを用いて本実施形態の動作を詳細に説明する。図８では、ＣＰＵ６８の動作とＣＮＮ処理部６３の動作が１つのフローチャート上に記述されている。図８中「ＣＮＮ処理部動作」と明記したフロー（ステップＳ８１１〜Ｓ８２０）がＣＮＮ処理部６３の動作を示す。
【００５０】
まず、ステップＳ８０１において、検出処理の開始に先立ち、ＣＰＵ６８が各種初期化処理を実行する。各処理部はＣＰＵ６８の初期化指示に従って内部のレジスタ・メモリ等を初期化する。
【００５１】
次にステップＳ８０２で、検出する対象（検出対象画像データ）が選択される。ここでは、予め用意されている検出対象から所望の検出対象が選択される。本実施形態のＣＮＮ処理部６３では、コンボリューションカーネルの重み係数、シーケンス情報、ネットワーク構成情報等を入れ替える事で、同一のハードウェアで様々なＣＮＮを構成し、様々な検出対象に対応する。
【００５２】
以降、ＣＰＵ６８はブリッジ６５及び画像バス６４を介してＣＮＮ処理部６３にアクセスし、ＣＰＵバスアクセス制御部１１３を介して所定のレジスタやメモリにデータを設定する。検出対象が決定されると、ステップＳ８０３において、ＣＰＵ６８は、決定された検出対象に応じた重み係数を演算部１０１内の重み係数記憶部１２０５に設定する。なお、重み係数は、検出対象毎に、学習によって生成されたコンボリューションカーネルの係数データである。
【００５３】
ステップＳ８０４において、ＣＰＵ６８は、ネットワーク構成管理部１０８のネットワーク構成情報設定部１１０にネットワーク構成情報を設定する。ネットワーク構成情報はネットワークの結合関係を指定する構成情報テーブルである。尚、ネットワーク構成情報も重み係数と同様に検出対象に応じて異なるデータが設定される。
【００５４】
図９はネットワーク構成情報（ネットワーク構成情報テーブル）のデータ構成例を示す図である。図９において、「指定処理ノード」は図７に示す論理的なネットワークの処理ノードに対応し、第１処理ノード〜第６処理ノードはそれぞれ特徴面を算出する論理的な処理ノードである。第１処理ノード〜第６処理ノードにより算出された特徴面は、それぞれリングバッファ７０３ａ〜７０３ｃ、７０７ａ〜７０７ｂ、７１３に格納される。論理的な処理ノードとは、演算部１０１を時分割利用する事により実現する論理的な演算処理単位である。図９に示すネットワークは図１４に示す論理的なネットワーク構造で表現する事が出来る。ここで第０処理ノードは入力画像データ面に対応する処理ノードであり、実際には演算は実行しない。
【００５５】
「接続ノード数」は処理ノードが演算時に必要とする下位層の接続数を示す。例えば第４処理ノードの場合、３つの下位層に接続する。ネットワーク構成管理部１０８の内部シーケンサは当該接続数に応じてメモリアクセスと演算を制御する。
【００５６】
「隣接下層処理ノード」は処理ノードの演算時に必要とする下位層の処理ノード（前段に接続される処理ノード）を指定する情報である。例えば第４処理ノードの場合、第１処理ノード、第２処理ノード、第３処理ノードに接続される。つまり、第４処理ノードの演算時には、第１〜３処理ノードの演算結果（リングバッファ７０３ａ〜７０３ｃに保持された特徴面）が参照データとして使用される。
【００５７】
「演算種別」は実行する演算の種別を示す情報であり、ＣＮＮ演算の場合、演算種別に応じて重み係数が選択される。演算部１０１が図１２に示す構成の場合、「演算種別」に記述された演算種別番号が重み係数を選択するための「カーネル選択信号」に相当する。なお、ＣＮＮ処理の場合、処理ノード毎に異なる演算（異なる重み係数のコンボリューション演算）が実行される。
【００５８】
また、図９のネットワーク構成情報テーブルにおいて、「参照データ幅」は「演算種別」に対応するコンボリューションカーネルの幅に相当し、「参照データ高さ」は「演算種別」に対応するコンボリューションカーネルの高さに相当する。
【００５９】
次に、ステップＳ８０５において、ＣＰＵ６８は、シーケンス制御部１０９のシーケンス情報設定部１１１にシーケンス情報を設定する。シーケンス情報は時分割処理する演算処理単位（本実施形態ではライン単位）のシーケンス動作を規定するテーブル情報である。図１０にシーケンス情報テーブルのデータ構成例を示す。「シーケンス番号」はライン単位で更新するシーケンス番号、「処理ノード番号」はシーケンス番号に対応する論理的な実行処理ノードを示す。即ち、シーケンス番号１では処理ノード１に対して演算処理を実行し、シーケンス番号２では処理ノード２に対して処理を実行する。各処理ノードでは、１回の実行指示により、例えば１ラインを処理単位とした演算（コンボリューション演算＋非線形変換）が実行される。従って、シーケンス情報には、複数の処理ノードによる、予め定められた処理単位の演算の実行順序が規定されていることになる。そして、本実施形態では、入力データは２次元の画像データであり、予め定められた処理単位の演算処理として、当該画像データの水平方向の１ラインの演算処理を実行する。その結果、１つのシーケンス番号に対応した演算処理では、水平方向の１ライン分の演算結果が取得され、メモリ１０２の当該処理ノードに対応する部分領域にその演算結果が保持されることになる。そして、メモリ１０２には、１ライン分のメモリ領域を単位としてデータの書き込み先を循環するリングバッファが、それぞれの処理ノードに対応して割り当てられた部分領域に形成される。
【００６０】
次にステップＳ８０６〜Ｓ８０７において、ＣＰＵ６８は、リングバッファの動作に必要な情報を設定する。本実施形態において、ＣＰＵ６８は、メモリ１０２へのバンドバッファの割り当て、各バンドバッファの高さ（リングバッファの循環数）を、ネットワーク演算における複数の処理ノードの論理的な接続状態に基づいて決定する。すなわち、ＣＰＵ６８は、リングバッファの動作に必要な情報を、論理的な処理ノードの数に対応する数のレジスタセット（リングバッファ設定部１０４）に設定する。図９のネットワーク構成情報テーブルによって示されるネットワーク構造の場合、６個のリングバッファ設定部（１０４-1〜１０４−６）に所定の値が設定される。リングサイズ設定部１０６には、対応する論理的な処理ノードのリングバッファの高さ（リングカウンタの循環数）が設定される。オフセットアドレス設定部１０７には、対応する処理ノードのリングバッファ先頭アドレスが設定される。図１１は図７に示すネットワークを実現する場合の処理ノードとオフセットアドレス及びリングバッファ（バンドバッファ）の高さの関係を示すメモリマップである。ADRｘ（ｘ：0〜６）がオフセットアドレス、BHｘ（ｘ：０〜２）がリングバッファの高さに相当する（実際の設定値は「高さ-1」）。また、WIDTHは画像データの幅を示す。尚、第０処理ノードは入力画像データを保持するフレームバッファ領域である。
【００６１】
本実施形態では、このようにメモリ１０２を複数の領域に分割して、各領域をサイズの異なるリングバッファ或いはフレームバッファとして利用する。例えば、図７に示す演算処理の場合、第１処理ノードと第２処理ノードがBH1、第０処理ノードと第３処理ノードと第６処理ノードがBH0、第４処理ノードと第５処理ノードがBH2である。BH0はフレームメモリに相当する高さである（即ち、入力画像データの高さと同じ）。すなわち、処理ノードに割り当てられるリングバッファの循環数は、当該処理ノードの後段に接続されている処理ノードが所定の処理単位の演算を実行する際に参照する参照データのサイズに基づいて決定される。以上のように、ステップＳ８０６では、実行すべきネットワーク演算における、各処理ノードの演算処理内容や処理ノードの階層的な接続関係に応じてリングバッファが構成される。
【００６２】
各種設定を終了すると処理はステップＳ８０８に進む。ステップＳ８０８において、ＣＰＵ６８は、画像入力部６１、前処理部６２、ＣＮＮ処理部６３に対して処理（演算）の開始を指示する。ステップＳ８０９において、ＣＰＵ６８から処理の開始が指示された画像入力部６１は、１フレーム分の画像データを取得し、図示しない内部バッファに格納する。格納を終了するとＣＰＵ６８に対して画像取得終了割り込みを発生する。ステップＳ８１０において、ＣＰＵ６８は割り込みを検知すると、ＤＭＡＣ６６を起動して、ステップＳ８０９で取得した画像データを前処理部６２の内部メモリ（図示しない）に転送する。前処理部６２は画像データの転送が終了すると、前処理を開始する。前処理部６２は、例えば、予め指定されているコントラスト補正情報に従って当該画像データのコントラストを補正する。前処理部６２は補正処理を終了するとＣＰＵ６８に対して割り込みを発生する。ＣＰＵ６８は割り込みを検知するとＤＭＡＣ６６を起動し、補正された画像データをＣＮＮ処理部６３内のメモリ１０２に転送する。ＣＮＮ処理部６３は補正後画像データのメモリ１０２への転送を終了すると検出処理を開始する。
【００６３】
以下、ステップＳ８１１〜Ｓ８２０はＣＮＮ処理部６３のハードウェア処理に関する処理のフローである。
【００６４】
先ず、ステップＳ８１１において、シーケンス制御部１０９は、演算を実行すべき処理ノードを決定する。シーケンス制御部１０９は、シーケンス情報設定部１１１に保持されたシーケンス情報テーブルに従って処理ノードを決定する。例えば、図１０に示すシーケンス情報テーブルの場合、初回のシーケンスでは処理ノード番号１を選択する。シーケンス制御部１０９はシーケンス回数をカウントするシーケンスカウンタを有し、シーケンス単位（この場合ライン単位の処理毎）でカウントアップする。シーケンス制御部１０９は、シーケンスカウンタをアドレスとして、図１０の如きシーケンス情報テーブルを参照する事で処理対象の処理ノードを決定する。
【００６５】
ステップＳ８１２では、処理対象となった処理ノードの演算に必要な参照データがメモリ１０２から読み出され、演算部１０１に設定される。
【００６６】
先ず、ネットワーク構成管理部１０８は、シーケンス制御部１０９の出力するシーケンス指示情報に従って参照データに対応するリングバッファ設定部を、リングバッファ設定部１０４-1〜１０４-ｎより選択する。例えば、ステップＳ８１１で第１処理ノードが選択された場合、図９に示すネットワーク構成情報テーブルの内容に従って、「接続ノード数が１」「接続先ノードが第０処理ノード」「演算種別１」が決定される。ネットワーク構成管理部１０８は、ネットワーク構成情報テーブルの内容に従ってノード選択信号を出力し、参照データに対応するリングバッファ設定部１０４の出力を選択する。この場合、第０処理ノードに対応する選択信号が出力される。選択されたリングバッファ設定部１０４の情報に従って、メモリアクセス制御部１０３は読み出すメモリの先頭アドレスを生成する。
【００６７】
図１６はメモリアクセス制御部１０３の内部を説明する図である。１６０１は制御部であり、ネットワーク構成管理部１０８の出力する動作制御信号に従って各処理部への信号及びメモリ１０２に対するメモリ制御信号を生成する。メモリ制御信号は、例えば、メモリ１０２に対するリード／ライト信号である。１６０２は列カウンタであり、行方向（列位置）の画素数をカウントする。１６０７はウインドウカウンタであり、列番号方向（水平方向）に連続する複数の参照画素を取り出す場合の参照ウインドウ幅（図１５の１５０２）に対応したカウンタである。この参照ウインドウ幅は、コンボリューションカーネルの幅に相当する。ウインドウカウンタ１６０７は、参照ウインドウ幅分の画素数をカウントすると、当該参照ウインドウ幅の次の行の画素を指すようにカウント値が更新される。従って、列カウンタ１６０２と、ウインドウカウンタ１６０７と、アドレス変換部１６０５が生成する行先頭アドレスの値を加算器１６０３で加算する事で１行分のデータにアクセスするためのアドレス（行を指定するためのアドレス）が生成される。
なお、列カウンタ１６０２、ウインドウカウンタ１６０７には、ネットワーク構成管理部１０８が保持するネットワーク構成情報テーブル（図９）の内容に従って演算種別の変更毎にカウント数が設定される。
【００６８】
双方向制御部１６０４は、メモリ１０２との間のデータバスの双方向制御を司るバッファであり、制御部１６０１の出力するバッファ制御信号に従って方向制御を実行する。参照データキャッシュ１６０６は、コンボリューション演算に必要な参照データを一時的に保持するキャッシュメモリである。上述のアドレス変換結果に基づいてメモリ１０２から読み出された参照データは、参照データキャッシュ１６０６に格納される。制御部１６０１は、ウインドウカウンタ１６０７を更新しながら参照データキャッシュ１６０６を制御する事で、列番号方向（水平方向）に連続する参照データをキャッシュする。そして、演算部１０１は該キャッシュに格納された参照データを順次読み出しながらコンボリューション演算を実行する。
【００６９】
図１５はメモリアクセス制御部１０３の参照データ読み出し動作を説明する図である。以下図１６及び図１５を用いてメモリアクセス制御部１０３の動作についてより具体的に説明する。
【００７０】
図１５に於いて１５０１はある処理ノードに割り当てられたリングバッファ（ライン単位で循環利用するバンドバッファ）である。また、１５０２は演算するコンボリューションカーネルの参照ウインドウに相当する大きさを示す。更に、１５０３はコンボリューションカーネルの重み係数列セットを示す。ここではコンボリューションカーネルサイズが６×６の場合について説明する。重み系数列セット１５０３において、W00〜W05は１行目のデータ列に対する重み系数列、W10〜W15は２行目のデータ列に対する重み係数列であり、以下同様に各データ列に対する重み係数列が示されている。コンボリューション演算時は当該係数値と対応する位置の参照データの積和演算処理を実行する。
【００７１】
WIDTHは特徴面の幅（即ち本実施形態の場合、入力画像データの幅に相当）、L3〜L8は特徴面の３行目から８行目のラインデータであることを示す。またA1〜A6は夫々対応するラインのバンドバッファ上の先頭メモリアドレスとする。
【００７２】
メモリアクセス制御部１０３のアドレス変換部１６０５は、セレクタ１１２１，１１２２によって選択されたリングカウンタ１０５のリングカウンタ値とオフセットアドレス設定部１０７のオフセットアドレス値から、参照データの先頭アドレスを算出する。ここで「オフセットアドレス値」は、図１５のA1に相当する。リングカウンタ値は現在までの最終処理ラインが保持されている行を示すポインタである。例えば、リングカウンタ値が１で、フィルタカーネル（＝コンボリューションカーネル）の高さが６の場合、参照するデータの先頭ラインはA3で示すラインとなる。先頭アドレスが決定されると、制御部１６０１は、ウインドウカウンタ１６０７の値を更新しながらメモリアドレスを出力し、L3ラインの連続する参照データをメモリ１０２から読み出す。即ち、ウインドウカウンタ１６０７は、列番号方向（水平方向）に連続する参照データを取り出すためのカウンタとして動作する。尚、ウインドウカウンタ１６０７には参照領域の幅に対応する値（実際には幅−１）がカウントアップデータとしてロードされているものとする。ここでは、列番号方向に６個の連続するデータが読み出され、読み出されたデータは参照データキャッシュ１６０６に格納される。データの読み出しが完了する（即ち参照領域の幅に対応するカウント動作を終了すると）と、ウインドウカウンタは次の行の０番目の画素を指すように初期化される。次にアドレス変換部１６０５からのアドレス値と列カウンタ及びウインドウカウンタのカウント値により、A4のアドレスが成され、上記と同様に、参照領域におけるL4ラインの参照データが参照データキャッシュ１６０６に格納される。以降L5〜L8迄の参照データを順次に参照データキャッシュ１６０６に格納する。即ち、メモリアクセス制御部１０３は、リングカウンタ値を基にリングバッファ上の先頭行を把握し、各行の参照領域幅分の参照データを参照データキャッシュ１６０６に格納する。
【００７３】
ここで、参照される各行の先頭アドレスは、例えば、以下の演算式に基づいて算出する事が可能である。以下の式に対して、参照ライン毎にｎを０から（フィルタカーネルの高さ−１）まで順次インクリメントする事で参照ラインの先頭アドレスを取得する。
Address(n)
＝OffsetAddress
＋(mod(RingCtr−(FilterHeight−1)＋RingHeight＋n,RingHeight))×WIDTH
ここで、
Address(n)：ｎライン目の参照データ行先頭アドレス、
n：ライン番号昇順、
OffsetAddress：オフセットアドレス値（A１に相当するアドレス）、
RingCtr：リングカウンタ出力値、
RingHeight：リングバッファ高さ、
mod(x,y)：ｘのｙに対する剰余、
WIDTH：特徴データの幅、とする。
【００７４】
上記演算式はリングカウンタの値を基準にして、参照ラインのアドレスを演算するための算出法の一例である。図１５に示す例の場合、ｎとアドレスの関係を（ｎ，アドレス）の形式で列挙すると、（0，A3）、（1，A4）、（2，A5）、（3，A6）、（4，A1）（5，A2）となる。即ちリングカウンタが指し示すライン（A2を先頭アドレスとするライン）を最新のアドレスとして、過去のラインをラスタスキャン順に指定する事に相当する。
【００７５】
上述のアドレス変換処理はアドレス変換部１６０５が実行する。制御部１６０１がアドレス変換部１６０５に対して所定のタイミングでｎを出力する事で順次先頭アドレスが生成される。なお、参照ラインアドレスの取得法は上記演算式に限るわけではなく、どのような方法でも良い。又、図１５の例ではリングバッファの高さとフィルタカーネルの高さが同じ場合の例を示しているが、リングバッファの高さがフィルタカーネルの高さより大きい場合も同様に算出する事が可能である。
【００７６】
図８に戻り、上記のように参照データ群のメモリ１０２から参照データキャッシュ１６０６へのキャッシュを終了すると、処理はステップＳ８１２からステップＳ８１３に進む。ステップＳ８１３において、演算部１０１はコンボリューション演算処理を開始する。すなわち、ネットワーク構成管理部１０８は、ネットワーク構成情報テーブル（図９）に記録された「演算種別」情報に従って演算部１０１の重み係数を指定し、演算部１０１を駆動する。演算部１０１はメモリアクセス制御部１０３の参照データキャッシュ１６０６に格納されている参照データを読み出し、コンボリューション演算処理を実行する。
【００７７】
そして、ステップＳ８１４、Ｓ８１５により、全ての接続先処理ノード（隣接下層処理ノード）について実行されたコンボリューション演算の結果が累積加算される。以下、より具体的に説明する。
【００７８】
ステップＳ８１５では、ＣＮＮ処理部６３は、接続先処理ノードの数を判定する。例えば、図９に示す例において、処理対象ノードが第４処理ノードの場合、接続先ノード数は３である。この場合、ネットワーク構成情報テーブルの内容に従って第１処理ノードの演算結果、第２処理ノードの演算結果、第３処理ノードの演算結果の夫々に対するコンボリューション演算処理が順次実行され、それら演算処理結果を累積加算器１２０２に保持される。各処理ノードに対する参照データの読み出しと演算のシーケンスは前述した方法と同じである。即ち、メモリアクセス制御部１０３は、処理ノード毎に異なるリングカウンタ値、オフセットアドレス等の情報に従って演算対象の参照データ群をメモリ１０２から参照データキャッシュ１６０６に読み出す。そして、演算部１０１は当該キャッシュデータに対してコンボリューション演算を実行する。
【００７９】
全ての接続先ノードに対する演算を終了すると、処理はステップＳ８１５からステップＳ８１６へ進み、非線形変換処理部１２０３は累積加算器１２０２の出力を非線形変換する。次に、ステップＳ８１７において、変換結果をメモリ１０２に格納する。以下、変換結果のメモリ１０２への格納処理についてより具体的に説明する。
【００８０】
ネットワーク構成管理部１０８は自身の処理ノードに関するリングバッファ設定部１０４を選択する。例えば、第１処理ノードを演算している場合、ネットワーク構成管理部１０８は第１処理ノードに対応するリングバッファ設定部１０４を選択する。メモリアクセス制御部１０３は、選択されたリングバッファ設定部１０４のリングカウンタ１０５が示す行の次の行を先頭アドレスとしてメモリアドレスを生成する。なお、ライト動作時は制御部１６０１によって、ウインドウカウンタ１６０７は０に初期化されている。メモリアクセス制御部１０３は生成した先頭アドレスに演算結果を書き込む。書き込みを終了すると列カウンタ１６０２の値を１インクリメントする。列カウンタ１６０２は１つの演算結果を書き込む毎に１つインクリメントされる。従って、次の処理時は１列分（水平方向に１画素分の位置）だけずれた領域の参照データ群が読み出される。
【００８１】
図１７は、以上で説明した演算の様子を、ネットワーク構成管理部１０８、メモリアクセス制御部１０３、演算部１０１別に模式的にタイムチャート化した図である。上段がネットワーク構成管理部１０８の動作を示し、メモリアクセス制御部１０３及び演算部１０１はネットワーク構成管理部１０８の指示に従って各処理を実行する。
【００８２】
上述したように、ネットワーク構成管理部１０８は、シーケンス制御部１０９からのシーケンス制御指示情報に従って処理ノードを選択する（１７０１）。そして、ネットワーク構成情報テーブルを参照して、接続ノード数を設定する（１７０２）。続いて、ネットワーク構成管理部１０８は、選択された処理ノードに関する情報（リングカウンタ値、オフセットアドレス値等）をメモリアクセス制御部１０３に通知し、参照データの読み出しを指示する（１７０３）。メモリアクセス制御部１０３は、通知されたリングカウンタ値、オフセットアドレス値を用いてメモリ１０２から参照データを読み出し、参照データキャッシュ１６０６にキャッシュする（１７０４，１７０５）。メモリアクセス制御部１０３による参照データの読み出しが完了すると、ネットワーク構成管理部１０８は、演算部１０１に対して、演算の開始を指示する。演算部１０１は、参照データキャッシュ１６０６にキャッシュされた参照データを読み出してコンボリューション演算処理を実行する（１７０６，１７０７）。演算部１０１におけるコンボリューション演算処理が完了すると、ネットワーク構成管理部１０８は、次の処理ノードについて同様の処理（１７０９〜１７１３）を繰り返す。隣接する下層の全ての処理ノードについてコンボリューション演算を完了すると、ネットワーク構成管理部１０８は、演算部１０１に非線形変換処理を実行させ（１７１４）、特徴面における１画素の演算結果を得る。この演算結果をメモリ１０２に格納するために、ネットワーク構成管理部１０８は、上記処理対象の処理ノードに関する情報（リングカウンタ値、オフセットアドレス値等）をメモリアクセス制御部１０３に通知し、演算結果の書込みを指示する。メモリアクセス制御部１０３は、通知されたリングカウンタ値、オフセットアドレス値を用いてメモリ１０２の、当該処理ノードに対応する部分領域に演算結果を書き込む（１７１６，１７１７）。そして、次の画素について上記処理を実行するために、列カウンタを１６０２をインクリメントする（１７１８）。以上の１７０３〜１７１８の処理を１行分繰り返すことで、特徴面の１行分の演算結果が得られる。
【００８３】
図８に戻り、ステップＳ８１２〜Ｓ８１７の処理を１ライン分繰り返し、１ライン分の処理が終了すると、すなわち、予め定められた処理単位の演算を終了すると、処理はステップＳ８１８からステップＳ８１９へ進む。ステップＳ８１９において、ネットワーク構成管理部１０８は、処理中の演算ノードに対応するリングバッファ設定部１０４のリングカウンタ１０５をインクリメントする。リングカウンタ１０５の更新は１ラインの処理終了毎に行われる。なお、リングカウンタ１０５は、カウント値がリングサイズ設定部１０６の値に等しくなった場合は、０に初期化される。つまり、リングカウンタ１０５は、リングサイズを基準にして循環する。こうして、リングカウンタ１０５のカウンタ値は、リングバッファにおける演算結果の書込み先のメモリ領域を示すものであり、リングカウンタの循環状態を示すものである。この様に、メモリ１０２に対するアクセスを論理的な処理ノード毎にリングカウンタ１０５の動作に伴って処理する事で、メモリ１０２上の複数の部分領域をサイズ（循環数）の異なる複数のリングバッファとして独立に使用する事になる。即ち、図１１で示すメモリマップ上の複数の領域を夫々リングバッファとして利用する事になる。
【００８４】
次に、ステップＳ８２０において、ＣＮＮ処理部６３は、全ての処理ノードが演算を終了したか否かを判定する。ここではシーケンス情報テーブル（図１０）に記述された全てのシーケンスを終了したか否かを判定する。なお、シーケンス制御部１０９は図示しないシーケンスカウンタを予め設定されたシーケンス数と比較する事で終了判定を行う。演算が終了していない場合、処理はステップＳ８２０からステップＳ８１１に戻る。シーケンス制御部１０９はシーケンスカウンタを更新し、カウンタ値に対応するテーブルを参照する事で次に処理する処理ノード番号を取得する。処理ノードを決定すると、シーケンス指示情報に従ってネットワーク構成管理部１０８は次の処理ノードに対する処理を開始する。異なる処理ノードを処理する場合も、リングバッファ及び演算に関する各種パラメータが異なるだけであり、前述した処理と同様の動作が繰り返される。
【００８５】
尚、図１０に示す様に、演算処理は下位層から順次リングバッファに特徴データを格納しながら処理を進める。図２３は図７に示す階層的ネットワークにおけるライン単位の演算処理の進行を模式的に説明する図である。図中、斜線によって塗りつぶした領域がバッファ上の処理済データの量を示す。
【００８６】
先ず、第１階層の特徴面を算出する処理ノード１〜３をライン単位に繰り返し実行し、リングバッファ７０３ａ〜７０３ｃに結果を充填する（図２３の（ａ）の状態）。第２階層の特徴面を算出するために必要な量（高さ）の結果がリングバッファ７０３ａ〜７０３ｃに格納されると、処理ノード１〜５がライン単位で繰り返し実行される。リングバッファ７０３ａ〜７０３ｂは順次リング動作を繰り返し、リングバッファ７０３ｃには演算結果が順次格納されていく。更に、リングバッファとしてのリングバッファ７０７ａ、７０７ｂにも順次演算結果が格納されていく（図２３の（ｂ）の状態）。
【００８７】
次に、第３階層の特徴面を算出するために必要な量（高さ）の結果がリングバッファ７０７ａ、７０７ｂに格納されると、処理ノード１〜６がライン単位に繰り返し実行される。この状態でリングバッファ７０３ａ〜７０３ｂは順次リング動作を繰り返し、リングバッファ７０３ｃには演算結果が順次格納されていく。更に、リングバッファ７０７ａ、７０７ｂも順次リング動作を繰り返し、バッファ７１３に最終結果がライン単位で順次格納されていく（図２３の（ｃ）の状態）。
【００８８】
以上のシーケンスで下位層からライン単位で処理を進める事で、所望の最終特徴データがバッファ７１３に、所望の中間データがリングバッファ７０３ｃに生成される。
【００８９】
このように論理的な処理ノードをライン単位で切り替えながら時分割で実行することにより、処理ノードの変更に伴うオーバーヘッドの影響が少なく、更に必要なメモリサイズも少なくすることができる。
【００９０】
また、リングバッファを処理ノード毎に独立に制御する事で、任意の中間データをフレームデータとして保持する事も可能である。図２３の例では、例えばリングバッファ７０３ｃに保持されるデータがそのようなフレームデータに該当する。
【００９１】
以上、ステップＳ８１１〜Ｓ８２０の処理を繰り返す事で、所定のＣＮＮネットワークに基づく各特徴面の演算がライン単位で、時分割で実行される。そして、ステップＳ８２０で最終の処理ノードが終了したと判定されると、例えば図７のバッファ７１３には最終的な階層における特徴面の全データが格納されていることになる。また、この時点で、リングバッファ７０３ｃには処理ノード３によって算出された特徴面の全データが格納されていることになる。
【００９２】
ＣＮＮ処理部６３は全てのシーケンスを終了すると（Ｓ８２０でＹＥＳ）、ＣＰＵ６８に対して割り込みを発生する。ＣＰＵ６８はこの割り込みを検知すると、ステップＳ８２１において判定処理を開始する。すなわち、ＣＰＵ６８は、ＤＭＡＣ６６を起動して特徴検出データ１及び特徴検出データ２（図７）をＲＡＭ７０に転送する。ＣＰＵ６８はＲＡＭ７０上の特徴データを利用して対象物の検出状況を判定する。ステップＳ８２１の判定処理は、例えば、所定のしきい値で特徴データを２値化しその重心を取得する等の方法で対象物の有無を判定する。例えば、特徴データ１の結果を検出対象の有無を判定するために利用し、特徴データ２を検出対象付近のテクスチャ等を把握するために利用するというように構成することが可能である。
【００９３】
検出対象を変更する場合、処理はステップＳ８２２からステップＳ８０２に戻り、各種パラメータが再設定される。即ち、ステップＳ８０３〜Ｓ８０７で検出対象に応じた重み係数、ネットワーク構成情報、シーケンス情報がそれぞれ更新される。更にステップＳ８０６〜Ｓ８０７でリングバッファ設定部１０４のリングカウンタも新たな重み係数及びネットワーク構成情報に応じて再設定される。これにより、論理的な処理ノードは、検出対象に応じて、メモリ１０２上の異領域を異なるサイズのリングバッファとして利用し、処理を行う。即ち、検出対象に対応したＣＮＮのための図１１に示すメモリマップが構成される。このように、本実施形態によれば、検出対象の変更に応じて変更された、変更後のネットワーク演算における処理ノードの接続構造に基づいて、シーケンス情報が変更されると共に、メモリ１０２の、処理ノードへの部分領域の割り当てが変更される。
【００９４】
一方、検出対象を変更しない場合、処理はステップＳ８２２からステップＳ８２３に進む。ステップＳ８２３では、処理を終了するか否かが判定され、終了しない場合は、ステップＳ８２４に処理が進む。ステップＳ８２４、Ｓ８２５において、ＣＮＮ処理部６３は、それぞれのリングバッファ設定部１０４のリングカウンタ１０５及びシーケンス制御部１０９の内部カウンタ等を初期化する。そして、処理はステップＳ８０９に戻り、画像データの取得から処理を再開する。即ち次のフレーム画像に対して同じ検出処理が実行される。ステップＳ８２３で検出処理の終了が指示された場合は、本処理を終了する。
【００９５】
以上のように、第１実施形態によれば、論理的な処理ノードに毎にリングバッファを制御するリングバッファ設定部１０４を設け、ネットワーク構成と目的に応じてリングバッファのサイズ（循環数）を設定するように構成した。そして、この構成において、ライン単位に論理的な処理ノードを時分割で実行させながら演算を行うようにしている。そのため、最小のメモリサイズでコンボリューショナルニューラルネットワーク等の階層的な演算処理を高速に処理する事が可能になる。
【００９６】
更に、１つのハードウェア或いはソフトウエアで、様々な結合関係（結合係数のサイズ、結合ネットワーク関係、必要とする中間データ）の多階層のネットワーク演算を少ないメモリで高速に処理する事が出来る。
【００９７】
＜第２実施形態＞
第１実施形態では全ての論理的な処理ノード毎にリングバッファのサイズを設定可能な構成について説明したが、本発明はこれに限るわけではない。例えば、階層毎にのみリングバッファのサイズが異なるように構成しても良い。すなわち、リングバッファのサイズ（循環数）を、ネットワークにおける処理ノードが属する階層毎に設定可能にしてもよい。第2実施形態ではこのような構成について説明する。
【００９８】
図１９は階層毎にリングバッファのサイズを規定する場合のＣＮＮ処理部６３の構成を示す。図１８は図１９に示すＣＮＮ処理部６３で実現するＣＮＮネットワークの構成例を示す図である。図１８は階層毎にのみリングバッファのサイズが異なる。即ち、第１階層１８０６のバッファメモリ１８０３ａ〜１８０３ｃ及び第２階層１８１０のバッファメモリ１８０７ａ〜１８０７ｂを、夫々同じサイズのリングバッファで構成する。そのため、図１８に示される構成では、図７に示される構成と比較して第１階層の第３特徴のリングバッファサイズが異なる。
【００９９】
以下、第２実施形態では第１実施形態との違いについて説明する。第２実施形態においても、第１実施形態と同様に、ＣＮＮ処理部６３は論理的な処理ノード毎にリングバッファ設定部１９４-1〜１９４-nを有する。以下、リングバッファ設定部の任意の一つを指す場合は、リングバッファ設定部１９４と記載する。リングバッファ設定部１９４は夫々リングカウンタ１０５とオフセットアドレス設定部１０７を有する。また、第２実施形態によるＣＮＮ処理部６３は、論理的な階層毎に設けられたリングサイズ設定部１９６１ａ、１９６１ｂを有する。２つのリングサイズ設定部１９６１ａ，１９６１ｂが設けられた構成では、図１８に示されるような階層数が３までの演算に対応することができる。
【０１００】
リングサイズ設定部１９６１ａ、１９６１ｂは夫々複数のリングバッファ設定部１９４に接続されているものとする。但し、各リングバッファ設定部には１つのリングサイズ設定部が接続される。即ち、リングバッファ設定部１９４-1〜１９４-nがリングサイズ設定部１９６１ａ，ｂによってグルーピングされている。図２０にリングサイズ設定部とリングバッファ設定部の関係を図示する。
【０１０１】
図１８において、第１階層１８０６のリングバッファの制御に利用されるリングバッファ設定部には、リングサイズ設定部１９６１ａが接続される。また、第２階層１８１０のリングバッファの制御に利用されるリングバッファ設定部には、リングサイズ設定部１９６１ｂが接続される。演算時、処理ノードに対応するリングバッファ設定部１９４の選択は、ネットワーク構成管理部１０８が保持するネットワーク構成情報テーブルに従って行われる。
【０１０２】
以下、第２実施形態の処理フローに関して、図８を用いて第１実施形態との違いについて説明する。第２実施形態では、ステップＳ８０６で、リングサイズ設定部１９６１ａ、ｂへのリングバッファサイズの設定が階層毎に行われる。また、階層毎にグルーピングされたリングバッファ設定部１９４-1〜１９４-nの中から、構成するネットワークに対応するリングバッファ設定部が選択され、オフセットアドレスが設定される。なお、リングサイズ設定部１９６１ａ、ｂには、図１８に示す論理的なネットワークを構成する場合、第１階層、第２階層のリングバッファ高さに相当する値が設定される。
【０１０３】
以降の処理は第１実施形態と同じであるので説明を省略する。図１８に示すネットワークを処理する場合、以上の設定でネットワーク構成管理部１０８が所定の論理処理ノードに対応するリングバッファ設定部をリングバッファ設定部１９４-1〜１９４-nより選択しながら処理を進める。こうして、第２実施形態においても、第１実施形態と同様にライン単位で処理が実行されていく。
【０１０４】
以上説明した第２実施形態によれば、リングサイズ設定部を構成するレジスタの数を更に削減する事が可能になる。
【０１０５】
＜第３実施形態＞
第１、第２実施形態ではＣＮＮ処理部６３をハードウェアで実現する場合について説明したが、本発明はＣＮＮ処理部６３をソフトウェアにより実現する場合にも適用することが可能である。図２１は、ソフトウェアで実現する場合の画像処理装置（パターン検出装置）の構成例を示すブロック図である。図２１に示す構成は、図６に示す構成からＣＮＮ処理部６３を取り除き、ランダムアクセス可能な高速メモリ２１０３（以下、ＲＡＭ２１０３）を追加したものであるため、その違いを中心に説明する。
【０１０６】
ＣＰＵ６８は、ステップＳ８１０における前処理部６２の処理の終了割り込みを受け付けると、ＤＭＡＣ６６を起動して前処理部６２内のメモリに格納する補正後画像データをＲＡＭ２１０３に転送する。ＣＰＵ６８は、ＲＡＭ２１０３に格納した画像データに対して、ステップＳ８１１〜ステップＳ８２０の処理をソフトウェアにより実行する。その場合、ＣＮＮ演算処理の動作に必要なワークメモリとしてＲＡＭ２１０３が使用される。即ち、ＣＰＵ６８は、ＲＡＭ２１０３上に図１１で示すメモリマップを構成し、処理ノードに対応する領域をリングバッファとして使用する。
【０１０７】
また、第１実施形態のＣＮＮ処理部６３に存在するリングバッファ設定部１０４等はソフトウェア上の変数として構成され、例えばＲＡＭ７０上にアサインされる。
【０１０８】
第３実施形態の場合もハードウェアにより構成する場合と同様に、処理に必要なバッファメモリを削減する事が可能になる。図２１に示す構成の場合、一般的な階層ネットワーク演算に比べて、ＲＡＭ２１０３を少ないメモリで実現する事が出来る。また、ＲＡＭ２１０３を用意せずにＲＡＭ７０をワークメモリとして利用する場合であっても同様である。
【０１０９】
＜他の実施形態＞
上述の各実施形態では、メモリ１０２の連続するアドレス空間に複数の処理ノードに対応した複数の部分領域を割り当て、リングカウンタ１０５を使用して、メモリ１０２の各部分領域をライン単位で循環しながら使用する方法について説明した。しかしながら、本発明はこのようなメモリの使用方法に限るわけではない。例えば、リングカウンタに対応するメモリアドレステーブルを有し、当該テーブルを参照する事で、不連続な領域を所定の処理単位で割り当てながら処理する等の方法でも良い。即ち、本発明で規定するリングバッファとは、狭義のリングバッファ或いは循環バッファに限定されるものではない。
【０１１０】
また、上記各実施形態では、シーケンス情報テーブル（図１０）の内容に従って論理的な処理ノードをライン単位で時分割処理する場合について説明したが、他の方法を適用しても良い。例えば、読み取り側バッファと書き込みバッファの利用状況から、処理ノードの実行を適応的にスケジューリングする等の方法でも良い。
【０１１１】
また、上記各実施形態では、特徴抽出結果を入力層と同じ解像度で保持する場合の例について説明したが、特徴面を入力面に対してサブサンプリングする場合に対しても同様に適用可能である。
【０１１２】
また、上記各実施形態では、最も効率の良い処理単位としてライン単位でシーケンス制御する場合について説明したが本発明はこれに限るわけではない。例えば、１ライン以下の単位やブロック単位でシーケンス制御する場合にも適用可能である。
【０１１３】
また、上記実施形態では、コンボリューショナルニューラルネットワーク演算への適用を説明したが本発明はこれに限るわけではない。所定の参照領域を必要とする様々な階層的な演算処理に対して本発明を適用することが可能である。更に、２次元演算に限るわけでもない。
【０１１４】
また、上記各実施形態では、リングバッファ設定部１０４、１９４をレジスタとして提供する場合について説明したが、他のパラメータメモリやメモリ１０２と共有される構成にしてもよい。例えば、メモリ１０２上の所定のアドレスがリングバッファ設定部１０４、１９４に保持されるデータの格納先にマッピングされる構成にしても良い。その場合、回路リソースをより有効に利用できる。即ち、より柔軟なネットワーク構成を実現する事が可能になる。
【０１１５】
また、上記各実施形態では、参照データキャッシュ１６０６に２次元の参照データを全て取り込んだ後に演算部１０１を起動する場合について説明したが、これに限られるものではない。コンボリューション演算等の場合、参照ウインドウ内の１行単位で演算部１０１を駆動する様に制御する事も可能である。この場合、ウインドウカウンタ１６０７のデクリメントに伴う連続する列番号方向（水平方向）の参照データの読み出しを終了すると、次のラインの参照データ読み出し処理開始前に演算部１０１を駆動する。そして、演算部１０１は、読み出したデータに対するコンボリューション演算を実行する。演算が終了すると次のラインの参照データ読み出しを開始する。以上の処理を繰り返す。この場合、参照データキャッシュのサイズが参照データ幅分のみで良いため、少ないキャッシュ容量で階層演算を実現する事が出来る。
【０１１６】
また、第２実施形態では、リングサイズ設定部１９６１ａ，ｂを階層毎に有する場合について説明したが、リングバッファ設定部１０４を階層毎に有する構成でも良い。その場合は階層処理単位でリングカウンタを更新する様に制御する。論理的な処理ノードの動作シーケンスに制限が生じる（必ず階層単位でシーケンスする必要が生じる）が、より回路規模を削減する事が出来る。
【０１１７】
また、各実施形態ではリングサイズ設定部がリングバッファサイズを任意に設定可能な場合（レジスタやＲＡＭにより構成する場合）について説明したが、リングサイズ設定部の全て或いは一部でリングバッファサイズが固定的な値として設定される構成でも良い。
【０１１８】
以上、実施形態を詳述したが、本発明は、例えば、システム、装置、方法、プログラムもしくは記憶媒体等としての実施態様をとることが可能である。具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
【０１１９】
尚、本発明は、ソフトウェアのプログラムをシステム或いは装置に直接或いは遠隔から供給し、そのシステム或いは装置のコンピュータが該供給されたプログラムコードを読み出して実行することによって前述した実施形態の機能が達成される場合を含む。この場合、供給されるプログラムは実施形態で図に示したフローチャートに対応したプログラムである。
【０１２０】
従って、本発明の機能処理をコンピュータで実現するために、該コンピュータにインストールされるプログラムコード自体も本発明を実現するものである。つまり、本発明は、本発明の機能処理を実現するためのコンピュータプログラム自体も含まれる。
【０１２１】
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、ＯＳに供給するスクリプトデータ等の形態であっても良い。
【０１２２】
プログラムを供給するためのコンピュータ読み取り可能な記録媒体としては以下が挙げられる。例えば、フロッピー（登録商標）ディスク、ハードディスク、光ディスク、光磁気ディスク、ＭＯ、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ、磁気テープ、不揮発性のメモリカード、ＲＯＭ、ＤＶＤ（ＤＶＤ−ＲＯＭ，ＤＶＤ−Ｒ）などである。
【０１２３】
その他、プログラムの供給方法としては、クライアントコンピュータのブラウザを用いてインターネットのホームページに接続し、該ホームページから本発明のコンピュータプログラムをハードディスク等の記録媒体にダウンロードすることが挙げられる。この場合、ダウンロードされるプログラムは、圧縮され自動インストール機能を含むファイルであってもよい。また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるホームページからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるＷＷＷサーバも、本発明に含まれるものである。
【０１２４】
また、本発明のプログラムを暗号化してＣＤ−ＲＯＭ等の記憶媒体に格納してユーザに配布するという形態をとることもできる。この場合、所定の条件をクリアしたユーザに、インターネットを介してホームページから暗号を解く鍵情報をダウンロードさせ、その鍵情報を使用して暗号化されたプログラムを実行し、プログラムをコンピュータにインストールさせるようにもできる。
【０１２５】
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される他、そのプログラムの指示に基づき、コンピュータ上で稼動しているＯＳなどとの協働で実施形態の機能が実現されてもよい。この場合、ＯＳなどが、実際の処理の一部または全部を行ない、その処理によって前述した実施形態の機能が実現される。
【０１２６】
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれて前述の実施形態の機能の一部或いは全てが実現されてもよい。この場合、機能拡張ボードや機能拡張ユニットにプログラムが書き込まれた後、そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行なう。
【図面の簡単な説明】
【０１２７】
【図１】第１実施形態によるＣＮＮ処理部の構成例を示すブロック図である。
【図２】階層結合型ニューラルネットワークの構成例を説明する図である。
【図３】ニューロンの構成を示す図である。
【図４】ＣＮＮのネットワーク構成例を説明する図である。
【図５】ＣＮＮの特徴抽出の例を説明する図である。
【図６】第１実施形態による階層的演算処理を利用した画像処理装置（パターン検出装置）の構成例を示すブロック図である。
【図７】第１実施形態に関するＣＮＮのネットワークの構成例を説明する図である。
【図８】第１実施形態によるパタン検出装置の動作を説明するフローチャートである。
【図９】ネットワーク構成情報テーブルのデータ構成例を示す図である。
【図１０】シーケンス情報テーブルのデータ構成例を示す図である。
【図１１】メモリの割り当てを説明する図である。
【図１２】演算処部の構成例を示すブロック図である。
【図１３】リングバッファの例を説明する図である。
【図１４】処理ノードの論理的な接続構成を説明する図である。
【図１５】参照データ群の読み出しを説明する図である。
【図１６】メモリアクセス制御部１０３の構成を説明する図である。
【図１７】ＣＮＮ演算単位の動作タイミングを説明する図である。
【図１８】第２実施形態によるＣＮＮネットワークの構成を説明する図である。
【図１９】第１実施形態によるＣＮＮ処理部の構成例を示すブロック図である。
【図２０】第２実施形態によるリングバッファ設定部とリングサイズ設定部の関係を説明する図である。
【図２１】第２実施形態による画像処理装置（パターン検出装置）の構成例を示すブロック図である。
【図２２】ライン単位で演算部１０１が処理を実行する場合の様子を模式的に説明する図である。
【図２３】図７に示す階層的ネットワークにおけるライン単位の演算処理の進行を模式的に説明する図である。
【図１】
2008310700.tif 000004
【図２】
2008310700.tif 000005
【図３】
2008310700.tif 000006
【図４】
2008310700.tif 000007
【図５】
2008310700.tif 000008
【図６】
2008310700.tif 000009
【図７】
2008310700.tif 000010
【図８】
2008310700.tif 000011
【図９】
2008310700.tif 000012
【図１０】
2008310700.tif 000013
【図１１】
2008310700.tif 000014
【図１２】
2008310700.tif 000015
【図１３】
2008310700.tif 000016
【図１４】
2008310700.tif 000017
【図１５】
2008310700.tif 000018
【図１６】
2008310700.tif 000019
【図１７】
2008310700.tif 000020
【図１８】
2008310700.tif 000021
【図１９】
2008310700.tif 000022
【図２０】
2008310700.tif 000023
【図２１】
2008310700.tif 000024
【図２２】
2008310700.tif 000025
【図２３】
2008310700.tif 000026