(57)【要約】【課題】コンボリューション演算を簡易な構成で高速に実行することができるコンボリューション演算回路、階層的コンボリューション演算回路及び物体認識装置を提供する。【解決手段】制御部１０１、記憶部１０２〜１０３、シフトレジスタ１０４〜１０６、複数の乗算器１０７、複数の累積加算器１０８及び非線形変換処理部１０９がＣＮＮ処理部に設けられている。ＣＮＮ処理部は、列方向に並列処理を行う階層的コンボリューション演算回路として機能する。【選択図】図２
2010134697.tif 000002
【特許請求の範囲】
【請求項１】
複数の乗算器と、
前記複数の乗算器の第１の入力にデータを供給する第１のシフトレジスタと、
前記第１のシフトレジスタに供給する複数のデータを保持する第１の記憶手段と、
前記複数の乗算器の第２の入力にデータを供給する第２のシフトレジスタと、
前記第２のシフトレジスタに供給する複数のデータを保持する第２の記憶手段と、
前記複数の乗算器の出力を累積する複数の累積加算器と、
前記複数の累積加算器の出力を所定のタイミングでラッチする第３の記憶手段と、
前記第１の記憶手段及び前記第２の記憶手段に保持するデータを所定の領域に格納し、前記第３の記憶手段の出力を所定の領域に格納する第４の記憶手段と、
前記第１の記憶手段、前記第２の記憶手段、前記第３の記憶手段、前記第４の記憶手段、前記第１のシフトレジスタ、前記第２のシフトレジスタ及び前記累積加算器の動作を制御する制御手段と、
を有し、
前記制御手段は、
前記第１の記憶手段に保持された複数のデータを所定のタイミングで前記第１のシフトレジスタにセットし、
前記第２の記憶手段に保持された複数のデータを所定のタイミングで前記第２のシフトレジスタにセットし、
前記第１のシフトレジスタ及び前記第２のシフトレジスタを前記累積加算器の動作と同期してシフト動作させ、
前記シフト動作の期間中に前記第４の記憶手段に格納されているデータを前記第１の記憶手段又は第２の記憶手段の少なくとも一方に転送することを特徴とするコンボリューション演算回路。
【請求項２】
前記第３の記憶手段は、前記乗算器の数以上のレジスタを含むシフトレジスタであることを特徴とする請求項１に記載のコンボリューション演算回路。
【請求項３】
前記第３の記憶手段の出力を非線形変換する非線形変換手段を有することを特徴とする請求項１又は２に記載のコンボリューション演算回路。
【請求項４】
前記制御手段は、前記シフト動作の期間中に、前記第３の記憶手段に保持した演算結果又は前記非線形変換手段による非線形変換の結果を前記第４の記憶手段の所定の領域に格納することを特徴とする請求項３に記載のコンボリューション演算回路。
【請求項５】
前記第１のシフトレジスタのレジスタ長及び第１の記憶手段の記憶容量は、前記乗算器の数と２次元のコンボリューションカーネルの列又は行のサイズとの和から１を減じて得られる値以上であり、
前記第１のシフトレジスタにデータをセットする所定のタイミングは、コンボリューション演算の列方向又は行方向の処理の開始又は終了のタイミングであることを特徴とする請求項１乃至４のいずれか１項に記載のコンボリューション演算回路。
【請求項６】
前記第２のシフトレジスタのレジスタ長及び第２の記憶手段の記憶容量は、２次元のコンボリューションカーネルの列又は行のサイズ以上であり、
前記第２のシフトレジスタにデータをセットする所定のタイミングは、コンボリューション演算の列方向又は行方向の処理の開始又は終了のタイミングであることを特徴とする請求項１乃至５のいずれか１項に記載のコンボリューション演算回路。
【請求項７】
前記第２のシフトレジスタのレジスタ長及び第２の記憶手段の記憶容量は、２次元のコンボリューションカーネル係数の数以上であり、
前記第２のシフトレジスタにデータをセットする所定のタイミングは、１つのコンボリューション演算の処理開始又は終了のタイミングであることを特徴とする請求項１乃至５のいずれか１項に記載のコンボリューション演算回路。
【請求項８】
乗算器と、
前記乗算器の第１の入力にデータを供給する第１の記憶手段と、
前記乗算器の第２の入力にデータを供給する第２の記憶手段と、
前記乗算器の出力を累積する累積加算器と、
前記累積加算器の出力をラッチする第３の記憶手段と、
を備えたコンボリューション演算手段と、
前記第１の記憶手段及び前記第２の記憶手段に供給するデータを所定の領域に格納し、前記第３の記憶手段からの出力を所定の領域に格納する第４の記憶手段と、
前記第４の記憶手段及び前記コンボリューション演算手段の動作を制御する制御手段と、
を有し、
前記第４の記憶手段を前記制御手段に対して共通のアドレス空間にマッピングし、
前記制御手段は、前記第４の記憶手段における読み出しアドレス及び書き込みアドレスを制御し、前記第４の記憶手段から前記第１の記憶手段及び前記第２の記憶手段へのデータ転送及び前記第３の記憶手段から前記第４の記憶手段へのデータ転送を実行して、前記第４の記憶手段に格納されている処理の対象のデータに対するコンボリューション演算を行い、更に、前記コンボリューション演算の結果に対して再びコンボリューション演算を行うことを特徴とする階層的コンボリューション演算回路。
【請求項９】
前記制御手段は、外部からのアクセスが可能な記憶領域を有し、前記記憶領域の内容に従って階層的な結合関係を決定することを特徴とする請求項８に記載の階層的コンボリューション演算回路。
【請求項１０】
前記制御手段は、外部からのアクセスが可能な記憶領域を有し、前記記憶領域の内容に従って前記外部からのアクセスが可能な記憶領域のアドレスを決定することを特徴とする請求項９に記載の階層的コンボリューション演算回路。
【請求項１１】
前記制御手段は、前記外部からのアクセスが可能な記憶領域を階層的な結合を決定するための情報を、結合する前階層の全てのデータ領域に対するコンボリューション演算処理の単位で有することと特徴とする請求項９又は１０に記載の階層的コンボリューション演算回路。
【請求項１２】
前記制御手段は、前記外部からのアクセスが可能な記憶領域の内容に基づいて、前記第４の記憶手段からの読み出しアドレスを決定することを特徴とする請求項９乃至１１のいずれか１項に記載の階層的コンボリューション演算回路。
【請求項１３】
前記制御手段は、前記外部からのアクセスが可能な記憶領域の内容に基づいて、前記第４の記憶手段への書き込みアドレスを決定することを特徴とする請求項９乃至１２のいずれか１項に記載の階層的コンボリューション演算回路。
【請求項１４】
前記外部からのアクセスが可能な記憶領域の内容は、結合する前階層のデータへのポインタに関する情報を含むことを特徴とする請求項９乃至１３のいずれか１項に記載の階層的コンボリューション演算回路。
【請求項１５】
前記外部からのアクセスが可能な記憶領域の内容は、処理の対象の特徴データの格納先へのポインタに関する情報を含むことを特徴とする請求項９乃至１４のいずれか１項に記載の階層的コンボリューション演算回路。
【請求項１６】
前記外部からのアクセスが可能な記憶領域の内容は、結合する前階層の数を規定する情報を含むことを特徴とする請求項９乃至１５のいずれか１項に記載の階層的コンボリューション演算回路。
【請求項１７】
前記外部からのアクセスが可能な記憶領域の内容は、結合する前階層の全てのデータ領域に対するコンボリューション演算処理の単位が最終の処理であるか否かを規定する情報を含むことを特徴とする請求項９乃至１６のいずれか１項に記載の階層的コンボリューション演算回路。
【請求項１８】
前記外部からのアクセスが可能な記憶領域の内容は、重み係数のサイズに関する情報を含むことを特徴とする請求項９乃至１７のいずれか１項に記載の階層的コンボリューション演算回路。
【請求項１９】
前記外部からのアクセスが可能な記憶領域の内容は、重み係数データへのポインタに関する情報を含むことを特徴とする請求項９乃至１８のいずれか１項に記載の階層的コンボリューション演算回路。
【請求項２０】
前記制御手段は、前記外部からのアクセスが可能な記憶領域の内容に従って非線形変換の有無を決定することを特徴とする請求項９乃至１９のいずれか１項に記載の階層的コンボリューション演算回路。
【請求項２１】
請求項１乃至７のいずれか１項に記載のコンボリューション演算回路を有することを特徴とする物体認識装置。
【請求項２２】
請求項８乃至２０のいずれか１項に記載の階層的コンボリューション演算回路を有することを特徴とする物体認識装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パターン認識等に好適なコンボリューション演算回路、階層的コンボリューション演算回路及び物体認識装置に関する。
【背景技術】
【０００２】
パターン認識装置、予測システム・制御装置等に、ニューラルネットワークを利用した信号処理装置が広く応用されている。一般的に、ニューラルネットワークはマイクロプロセッサ上で動作するソフトウェアとして実現される場合が多く、パーソナルコンピュータ又はワークステーション等のアプリケーションソフトウェアとして提供されている。一方、画像データ等の大容量データに対する高速な処理装置への適用を目的として、ニューラルネットワークをアナログハードウェア又はディジタルハードウェアで実現する技術も提案されている。例えば、特許文献１には、一般的な多層パーセプトロン型ニューラルネットワークをディジタルハードウェアで実現する技術が提案されている。
【０００３】
ニューラルネットワークの中でも、Convolutional Neural Networks（以下ＣＮＮと略記する）とよばれる演算方法は認識対象の変動に対して頑健なパターン認識を可能にする方法として知られている。このような方法を適用した例として、特許文献２に、画像データを用いた顔認識を行う技術が提案されている。
【０００４】
ここで、ＣＮＮ演算の例について説明する。図１３は、ＣＮＮ演算の例を示すネットワーク構成図である。図２１において、入力層３０１は、画像データに対してＣＮＮ演算を行う場合のラスタスキャンされた所定サイズの画像データを示す。特徴面３０３ａ〜３０３ｃは第１段目の階層３０８の特徴面を示す。特徴面とは、所定の特徴抽出フィルタ（コンボリューション演算及び非線形処理）の検出結果を示すデータ面であり、例えば顔を検出する場合、目、口又は鼻等の検出結果を示すデータ面である。ラスタスキャンされた画像データに対する検出結果であるため、検出結果も面で表される。特徴面３０３ａ〜３０３ｃは、入力層３０１に対するコンボリューション演算及び非線形処理により生成される。例えば、特徴面３０３ａは、フィルタカーネル３０２１ａに模式的に示すコンボリューションフィルタ演算及び演算結果の非線形変換により得られる。なお、図３中のフィルタカーネル３０２１ｂ及び３０２１ｃは、夫々特徴面３０３ｂ及び３０３ｃを生成する際に使用されるフィルタカーネルである。
【０００５】
図１４は、コンボリューションフィルタの例を示す図である。図２２において、データ列４１は、ラスタスキャンされた参照画素を示すデータ列であり、フィルタカーネル４２は、参照画素に対するフィルタカーネルの例である。この例は、カーネルサイズが１１×１１のＦＩＲ（finite Impulse Response）フィルタ演算を行うことに相当する。ＦＩＲフィルタは以下の数１に示す積和演算により処理される。
【０００６】
【数１】
2010134697.tif 000003
【０００７】
ここで、「ｉｎｐｕｔ（ｘ，ｙ）」は座標（ｘ，ｙ）での参照画素値を示し、「ｏｕｔｐｕｔ（ｘ，ｙ）」は座標（ｘ，ｙ）でのＦＩＲフィルタ演算結果を示す。また、「ｗｅｉｇｈｔ（ｃｏｌｕｍｎ，ｒｏｗ）」は座標（ｘ＋ｃｏｌｕｍｎ，ｙ＋ｒｏｗ）でのＦＩＲフィルタ係数を示し、「ｃｏｌｕｍｎＳｉｚｅ」及び「ｒｏｗＳｉｚｅ」はフィルタカーネルサイズを示す。
【０００８】
そして、特徴面３０３ａを算出する場合、データ列４１は入力層３０１に相当し、フィルタカーネル４２はフィルタカーネル３０２１ａに相当する。ＣＮＮ演算では複数のフィルタカーネルを画素単位で走査しながら積和演算を繰り返し、最終的な積和結果を非線形変換することにより特徴面を生成する。なお、特徴面３０３ａを算出する場合は、前階層との結合数が１であるため、フィルタカーネルは１つである。
【０００９】
次に、第２段目の階層３０９の特徴面３０５ａを生成する演算について説明する。図１５は、特徴面３０５ａを生成する演算を説明する図である。特徴面３０５ａは前段の階層３０８の３つの特徴面３０３ａ〜３０３ｃと結合している。従って、特徴面３０５ａのデータを算出する場合、特徴面３０３ａに対してはフィルタカーネル３０４１ａで模式的に示すカーネルを用いたフィルタ演算を行い、この結果を累積加算器５０１に保持する。同様に、特徴面３０３ｂ及び３０３ｃに対しては、夫々フィルタカーネル３０４２ａ及び３０４３ａのフィルタ演算を行い、これらの結果を累積加算器５０１に蓄積する。これらの３種類のフィルタ演算の終了後、ロジスティック関数又は双曲正接関数（ｔａｎｈ関数）を利用した非線形変換処理５０２を行う。以上の処理を画像全体に対して１画素ずつ走査しながら処理することにより、特徴面３０５ａを生成する。
【００１０】
同様に、特徴面３０５ｂの生成の際には、前段の階層３０８の特徴面３０３ａ〜３０３ｃに対するフィルタカーネル３０４１ｂ、３０４２ｂ及び３０４３ｂによる３つのコンボリューションフィルタ演算を行う。また、第３段目の階層３１０の特徴面３０７の生成の際には、前段の階層３０９の特徴面３０５ａ〜３０５ｂに対するフィルタカーネル３０６１及び３０６２による２つのコンボリューションフィルタ演算を行う。
【００１１】
なお、各フィルタ係数はパーセプトロン学習又はバックプロパゲーション学習等の一般的な方法を用いて、予め学習により決定されている。物体の検出又は認識等においては、１０×１０以上の大きなサイズのフィルタカーネルを使用することが多い。
【００１２】
【特許文献１】特開平２−２３６６５９号公報
【特許文献２】特開平１０−０２１４０６号公報
【特許文献３】特開２００４−１２８９７５号公報
【発明の開示】
【発明が解決しようとする課題】
【００１３】
このように、ＣＮＮ演算では多数の大きなカーネルサイズのフィルタが階層的に利用されるため、膨大な回数のコンボリューション演算が必要とされ、ソフトウェアで実現する場合、高価な高性能プロセッサが必要になる。
【００１４】
また、ハードウェアにより実現する場合であっても、特許文献１で提案されているような１つの演算ユニットによるシリアル処理による回路では十分な性能の装置を実現できない。特許文献１には、シリアル処理する回路を複数組み合わせて高速な処理を実現する方法に関する記載もあるが、任意のネットワークに対応する高性能なハードウェアを同一の回路で実現することは困難である。更に、特許文献１には、積和演算ユニットを複数設けた構成も記載されているが、同時に動作する各積和演算ユニットに夫々異なる重み係数を与える回路構成となっている。このため、ＣＮＮ演算等の大きなサイズのカーネルを複数使用するコンボリューション演算を高速に実現するためには回路規模が増大する。
【００１５】
また、特許文献３には、積和演算ユニットに共通の重み係数を設定し、入力データをシフトさせながら並列に取り出すことで高速に並列コンボリューション演算を実行する画像処理装置が提案されている。但し、この装置に設けられる回路は演算器の数と同じポートを有するマルチポートメモリを利用する回路である。このため、一般的なシングルポートメモリシステムに適用すると、入力データの投入がボトルネックになり演算器の並列度に応じた性能を引き出すことができない。また、ＣＮＮ演算のように、大きなフィルタカーネルサイズの重み係数を複数用意し、積和演算単位で複数の重み係数を選択しながら処理する場合、重み係数の設定がボトルネックになり、並列度に応じた性能を引き出すことができない。
【００１６】
そもそも、これらの従来の技術は、一般的な多層パーセプトロン型のニューラルネットワーク又は一般的なＦＩＲフィルタの実現を目的としたものである。このため、ＣＮＮ演算のような複雑な階層的コンボリューション演算を簡易な構成で柔軟に構成することは困難である。
【００１７】
本発明は、コンボリューション演算を簡易な構成で高速に実行することができるコンボリューション演算回路、階層的コンボリューション演算回路及び物体認識装置を提供することを目的とする。
【課題を解決するための手段】
【００１８】
本願発明者は、前記課題を解決すべく鋭意検討を重ねた結果、以下に示す発明の諸態様に想到した。
【００１９】
本発明に係るコンボリューション演算回路は、複数の乗算器と、前記複数の乗算器の第１の入力にデータを供給する第１のシフトレジスタと、前記第１のシフトレジスタに供給する複数のデータを保持する第１の記憶手段と、前記複数の乗算器の第２の入力にデータを供給する第２のシフトレジスタと、前記第２のシフトレジスタに供給する複数のデータを保持する第２の記憶手段と、前記複数の乗算器の出力を累積する複数の累積加算器と、前記複数の累積加算器の出力を所定のタイミングでラッチする第３の記憶手段と、前記第１の記憶手段及び前記第２の記憶手段に保持するデータを所定の領域に格納し、前記第３の記憶手段の出力を所定の領域に格納する第４の記憶手段と、前記第１の記憶手段、前記第２の記憶手段、前記第３の記憶手段、前記第４の記憶手段、前記第１のシフトレジスタ、前記第２のシフトレジスタ及び前記累積加算器の動作を制御する制御手段と、を有し、前記制御手段は、前記第１の記憶手段に保持された複数のデータを所定のタイミングで前記第１のシフトレジスタにセットし、前記第２の記憶手段に保持された複数のデータを所定のタイミングで前記第２のシフトレジスタにセットし、前記第１のシフトレジスタ及び前記第２のシフトレジスタを前記累積加算器の動作と同期してシフト動作させ、前記シフト動作の期間中に前記第４の記憶手段に格納されているデータを前記第１の記憶手段又は第２の記憶手段の少なくとも一方に転送することを特徴とする。
【００２０】
本発明に係る階層的コンボリューション演算回路は、乗算器と、前記乗算器の第１の入力にデータを供給する第１の記憶手段と、前記乗算器の第２の入力にデータを供給する第２の記憶手段と、前記乗算器の出力を累積する累積加算器と、前記累積加算器の出力をラッチする第３の記憶手段と、を備えたコンボリューション演算手段と、前記第１の記憶手段及び前記第２の記憶手段に供給するデータを所定の領域に格納し、前記第３の記憶手段からの出力を所定の領域に格納する第４の記憶手段と、前記第４の記憶手段及び前記コンボリューション演算手段の動作を制御する制御手段と、を有し、前記第４の記憶手段を前記制御手段に対して共通のアドレス空間にマッピングし、前記制御手段は、前記第４の記憶手段における読み出しアドレス及び書き込みアドレスを制御し、前記第４の記憶手段から前記第１の記憶手段及び前記第２の記憶手段へのデータ転送及び前記第３の記憶手段から前記第４の記憶手段へのデータ転送を実行して、前記第４の記憶手段に格納されている処理の対象のデータに対するコンボリューション演算を行い、更に、前記コンボリューション演算の結果に対して再びコンボリューション演算を行うことを特徴とする。
【００２１】
本発明に係る物体認識装置は、上記のコンボリューション演算回路又は階層的コンボリューション演算回路を有することを特徴とする。
【発明の効果】
【００２２】
本発明によれば、コンボリューション演算を簡易な構成で高速に実行することができる。
【発明を実施するための最良の形態】
【００２３】
以下、本発明の実施形態について添付の図面を参照して具体的に説明する。
【００２４】
（第１の実施形態）
先ず、本発明の第１の実施形態について説明する。図１は、本発明の第１の実施形態に係る階層的コンボリューション演算回路を具備した物体検出装置の構成を示すブロック図である。この物体検出装置（物体認識装置）は、２次元のコンボリューション演算を行い、画像データから特定の物体を検出する機能を有する。
【００２５】
この物体検出装置（物体認識装置）には、図１に示すように、画像入力部２０、ＣＮＮ処理部２２、ブリッジ２４、前処理部２５、ＤＭＡＣ（Direct Memory Access Controller）２６及びＲＡＭ１００（第４の記憶部）が設けられている。更に、ＣＰＵ（Central Processing Unit）２７、ＲＯＭ２８及びＲＡＭ１００も設けられている。そして、画像入力部２０、ＣＮＮ処理部２２、前処理部２５及びＤＭＡＣ２６が画像バス２３を介して互いに接続され、ＣＰＵ２７、ＲＯＭ２８及びＲＡＭ２９がＣＰＵバス３０を介して互いに接続されている。また、ブリッジ２４により画像バス２３とＣＰＵバス３０との間のデータ転送が可能となっている。
【００２６】
画像入力部２０には、光学系、ＣＣＤ（Charge-Coupled Devices）又はＣＭＯＳ（Complementary Metal Oxide Semiconductor）センサ等の光電変換デバイスが設けられている。更に、センサを制御するドライバー回路、ＡＤコンバータ、各種画像補正を司る信号処理回路及びフレームバッファ等も設けられている。
【００２７】
ＣＮＮ処理部２２は、階層的コンボリューション演算回路として機能する。ＲＡＭ１００は、ＣＮＮ処理部２２の演算作業バッファとして使用される。なお、ＣＮＮ処理部２２の構成等の詳細については、図２を参照しながら後述する。
【００２８】
前処理部２５は、ＣＮＮ演算による検出処理を効果的に行うための種々の前処理を行う。例えば、色変換処理及びコントラスト補正処理等の画像データ変換処理をハードウェアで処理する。
【００２９】
ＤＭＡＣ２６は、画像バス２３上の画像入力部２０、ＣＮＮ処理部２２及び前処理部２５とＣＰＵバス３０との間のデータ転送を司る。
【００３０】
ＲＯＭ（Read Only Memory）２８は、ＣＰＵ２７の動作を規定する命令及びパラメータデータを格納しており、ＣＰＵ２７は、これらを読み出しつつ当該物体検出装置の全体の動作を制御する。その際に、ＲＡＭ２９がＣＰＵ２７の作業領域として使用される。なお、ＣＰＵ２７はブリッジ２４を介して画像バス２３上のＲＡＭ１００にアクセスすることも可能である。
【００３１】
次に、ＣＮＮ処理部２２の詳細について説明する。図２は、ＣＮＮ処理部２２の構成を示すブロック図である。上述のように、ＣＮＮ処理部２２は、階層的コンボリューション演算回路として機能する。ここでは、ＣＮＮ処理部２２が列方向に並列処理を行うこととする。
【００３２】
ＣＮＮ処理部２２には、図２に示すように、制御部１０１、記憶部１０２〜１０３、シフトレジスタ１０４〜１０６、２つの入力を備えた複数の乗算器１０７、複数の累積加算器１０８及び非線形変換処理部１０９が設けられている。
【００３３】
制御部１０１には、ＣＮＮ処理部２２自体の基本的な動作を決定するレジスタ群、当該レジスタ群に設定されたレジスタ値に基づいて種々の信号のタイミングを制御するシーケンサ、及びＲＡＭ１００へのアクセス調停を行うメモリ制御部等が設けられている。なお、制御部１０１の構成等の詳細については、図３を参照しながら後述する。
【００３４】
記憶部１０２（第２の記憶手段）はＲＡＭ１００に保持された重み係数データを一時的に保持する。重み係数が８ｂｉｔで表されるデータの場合、記憶部１０２は８ｂｉｔ幅の複数のレジスタで構成される。また、記憶部１０２は並列処理する方向と同じ方向のフィルタカーネルサイズと同じサイズ以上のレジスタ（記憶容量）を有する。例えば、列方向のフィルタカーネルサイズが「１１」の場合、当該レジスタの数は少なくとも「１１」あればよい。つまり、想定される最大フィルタサイズのレジスタ数で構成することが好ましい。
【００３５】
記憶部１０３（第１の記憶手段）はＲＡＭ１００に格納された参照データを一時的に保持する。参照データが８ｂｉｔで表されるデータの場合、記憶部１０３は８ｂｉｔ幅の複数のレジスタで構成される。記憶部１０３は「並列に処理するデータの数（レジスタ長）」＋「並列処理する方向と同じ方向のフィルタカーネルサイズ−１」以上の個数のレジスタ（記憶容量）を有する。ここでのレジスタ個数は一度に処理する（並列演算する）位置の特徴面データが参照するデータを得るために必要な値であり、この値以上の個数のレジスタが設けられていればよい。例えば，列方向のフィルタカーネルサイズが「１２」、演算並列度が「１２」の場合、少なくとも２３個の８ｂｉｔレジスタが設けられていればよい。
【００３６】
シフトレジスタ１０４（第２のシフトレジスタ）、１０５（第１のシフトレジスタ）及び１０６（第３の記憶手段）はデータロード機能を備えている。例えば、シフトレジスタ１０４及び１０５は、夫々記憶部１０２及び１０３と同じｂｉｔ幅の複数のレジスタで構成されており、シフトレジスタ１０６は、累積加算器１０８の出力の有効ｂｉｔと同じｂｉｔ数以上の複数のレジスタで構成されている。
【００３７】
図３は、シフトレジスタ１０４〜１０６の構成の例を示す図である。この例では、シフトレジスタに４個のレジスタが設けられているとする。このシフトレジスタには、４個の多ｂｉｔフリップフロップ８０１ａ〜８０１ｄが設けられており、これらがＣＬＯＣＫ信号に同期して所定ｂｉｔのデータをラッチする。フリップフロップ８０１ａ〜８０１ｄにはイネーブル信号（Ｅｎａｂｌｅ信号）が与えられ、フリップフロップ８０１ａ〜８０１ｄは、Ｅｎａｂｌｅ信号が１の場合にＣＬＯＣＫ信号の立ち上がりでデータをラッチする。一方、Ｅｎａｂｌｅ信号が０の場合に前クロックでラッチしたデータをそのまま保持する。つまり、状態遷移が生じない。また、３個のセレクタ８０２ａ〜８０２ｃが設けられており、これらは、選択信号（Ｌｏａｄ信号）が０の場合に信号ＯＵＴｘ（ｘ：０〜２）を選択し、１の場合に信号ＩＮｘ（ｘ：１〜３）を選択する。即ち、セレクタ８０２ａ〜８０２ｃは、Ｌｏａｄ信号に応じてシフト動作又はロード動作を選択する。
【００３８】
そして、図２中のＬｏａｄ２信号、Ｌｏａｄ４信号及びＬｏａｄ５信号は、図３中のＬｏａｄ信号に相当し、図２中のＥｎａｂｌｅ１信号、Ｅｎａｂｌｅ２信号及びＥｎａｂｌｅ３信号が図３中のＥｎａｂｌｅ信号に相当する。このような構成により、並列度が高い場合であってもセレクタの複雑化等による配線数の増大及び遅延の増大の少ない高速な回路を構築することが可能になる。
【００３９】
制御部１０１は、シフトレジスタ１０４のシフト動作中にＲＡＭ１００から次の列の積和演算処理に必要な係数を当該レジスタにロードする。また、制御部１０１は、シフトレジスタ１０５のシフト動作中にＲＡＭ１００から次の列処理に必要な参照データをロードする。そして、シフトレジスタ１０４は初期データのロード（記憶部１０２からの一括ロード）後に、列方向のフィルタカーネルサイズと同じクロック数だけシフト動作を実行し、乗算器１０７に対して重み係数データを連続して供給する。つまり、図３中の信号ＯＵＴｎ（シフトレジスタの最終段出力）が全ての乗算器１０７に供給される。また、シフトレジスタ１０５は記憶部１０３から初期データがロードされると、列方向のフィルタカーネルサイズと同じクロック数だけシフト動作を実行し、乗算器１０７に対して複数の参照データを同時に供給する。つまり、図３中の信号ＯＵＴ１〜ＯＵＴｎが全ての乗算器１０７に同時に供給される。シフトレジスタ１０４及びシフトレジスタ１０５は互いに同期して動作し、これらからのデータが乗算器１０７の第１の入力及び第２の入力に供給される。以上の処理により、積和演算処理及びＲＡＭ１００からのデータロードをフィルタカーネルの列単位でパイプライン化することが可能になる。
【００４０】
図４は、累積加算器１０８の構成を示す図である。累積加算器１０８には、図４に示すように、加算器９０１及びレジスタ９０２が含まれており、累積加算器１０８は、Ｌａｔｃｈ  Ｅｎａｂｌｅ信号に従って入力データの累積和を保持する。Ｌａｔｃｈ  Ｅｎａｂｌｅ信号は、クロック信号に同期した信号である。累積加算器１０８により得られた累積和は、対象とする特徴面に対応する全フィルタカーネルの演算終了後、シフトレジスタ１０６にロードされ、所定のタイミングで非線形変換処理部１０９に送られる。乗算器１０７及び累積加算器１０８としては、例えば、夫々同一クロックで動作する同一のものが１２個並んで設けられている。そして、シフトレジスタ１０６は、例えば、１２個の累積加算器１０８の出力を保持することが可能なフリップフロップを含んでいる。累積加算器１０８の出力は所定の有効ビットのみシフトレジスタ１０６に出力される。
【００４１】
図５は、非線形変換処理部１０９の構成を示す図である。非線形変換処理部１０９には、ルックアップテーブル（ＬＵＴ）１３０１及びセレクタ１３０２が設けられている。ＬＵＴ１３０１は、積和演算結果をアドレスデータ（Ｉｎ）としてＲＯＭ等に保持されたデータを参照する。ＲＯＭには、例えば予めアドレス値に対応する出力の非線形関係が記録されている。セレクタ１３０２は、非線形処理変換しない場合に積和演算結果をそのまま出力する（Ｏｕｔ）。セレクタ１３０２への選択信号（Ｓｅｌｅｃｔ）は制御部１０１から供給されている。つまり、セレクタ１３０２は、制御部１０１内の「非線形変換」レジスタ（後述）の値に従って制御される。なお、後述のように、「非線形変換」レジスタを含むレジスタセット１１０１ａ〜１１０１ｃ（図７参照）は、特徴面単位で構成される。このため、非線形変換処理の有無も特徴面単位で選択可能である。このように、非線形変換の有無を特徴面単位で選択可能にすることで、非線形変換処理を含む階層と含まない階層が混在した大規模ネットワークを構築することが可能になる。また、非線形変換処理部１０９により得られたデータは、ＲＡＭ１００の所定のアドレスに格納される。この格納アドレスも制御部１０１のレジスタ群６０２の設定及びシーケンス制御部６０１（図６参照）の動作に従って制御される。
【００４２】
次に、制御部１０１の詳細について説明する。図６は、制御部１０１の構成を示すブロック図である。
【００４３】
制御部１０１には、図６に示すように、シーケンス制御部６０１、レジスタ群６０２（記憶領域）及びメモリ制御部６０５が設けられている。
【００４４】
シーケンス制御部６０１は、レジスタ群６０２に設定された情報に従って、ＣＮＮ処理部２２の動作を制御する種々の制御信号６０４を入出力する。同様に、シーケンス制御部６０１はメモリ制御部６０５を制御する制御信号６０６を生成する。シーケンス制御部６０１は、例えば、バイナリカウンタ又はジョンソンカウンタ等からなるシーケンサにより構成される。
【００４５】
レジスタ群６０２は、複数のレジスタセットを含み、１つの階層的な処理を行うための情報が当該レジスタセット毎に保持される。レジスタ群６０２は外部からのアクセスが可能に構成されている。図７は、レジスタ群６０２に設定される情報の例を示す図である。この例では、３つのレジスタセット１１０１ａ、１１０１ｂ及び１１０１ｃがレジスタ群６０２に含まれており、これらのうちの１つが１つの特徴面を処理するために必要な情報を保持する。レジスタ群６０２にはブリッジ２４及び画像バス２３を介してＣＰＵ２７から予め所定の値が書き込まれる。ここでは、レジスタセット１１０１ａ〜１１０１ｃ内の各レジスタが３２ｂｉｔ長であるとする。
【００４６】
図７中の「最終層指定」レジスタは、当該レジスタセットに対応する特徴面が最終層か否かを指定するレジスタであり、当該レジスタ値が１の場合、対象特徴面の処理を終了すると検出処理を終了する。
【００４７】
図７中の「参照データ面の数」レジスタは、対象特徴面と接続する前階層の特徴面（データ領域）数を指定するレジスタであり、例えば、図１３に示す特徴面３０５ａを演算する場合「３」が設定される。
【００４８】
図７中の「非線形変換」レジスタは、非線形変換の有無を指定するレジスタであり、当該レジスタに「１」が設定されている場合、非線形変換処理を行い、当該レジスタに「０」が設定されている場合、非線形変換処理を行わない。
【００４９】
図７中の「演算結果格納先ポインタ」レジスタは、対象とする特徴面の演算結果を保持するためのＲＡＭ１００上の先頭ポインタを示すアドレスを指定するレジスタであり、当該ポインタ値を先頭ポインタとして演算結果をラスタスキャン順に格納する。
【００５０】
図７中の「フィルタカーネルの水平サイズ」レジスタ及び「フィルタカーネルの垂直サイズ」レジスタは、当該特徴面の演算に使用するフィルタカーネルのサイズを指定するレジスタである。
【００５１】
図７中の「重み係数格納先」レジスタは、当該特徴面の演算に使用する重み係数のＲＡＭ１００上の格納先アドレスを示すレジスタである。例えば、重み係数データは「参照データ面の数」レジスタと同じ数の係数の組を有し、「重み係数格納先」レジスタで指定されるアドレスからラスタスキャン順に格納されている。即ち、「フィルタカーネルの水平サイズ」×「フィルタカーネルの垂直サイズ」×「参照データ面の数」の個数の係数データがＲＡＭ１００に格納されている。
【００５２】
図７中の「参照データの垂直サイズ」レジスタ及び「参照データの水平サイズ」レジスタは、夫々参照画像データの水平方向画素数及び垂直方向ライン数を示すレジスタである。また、参照データは、図７中の「参照データ格納先ポインタ」レジスタの示すアドレスを先頭としてＲＡＭ１００上にラスタスキャン順に格納されている。即ち「参照データの水平サイズ」×「参照データの垂直サイズ」×「参照データ面の数」の個数の参照データがＲＡＭ１００に格納されている。
【００５３】
このような複数のレジスタが各特徴面単位に設けられている。演算対象とする特徴面の「参照データ格納ポインタ」レジスタの内容が前階層結合対象特徴面の「演算結果格納先ポインタ」である場合、前階層の特徴面と対象となる特徴面が結合されていることになる。従って、ここでのレジスタ設定（ポインタ設定）だけで任意の階層的結合関係を特徴面単位に構築することが可能である。
【００５４】
図８は、ＲＡＭ１００に格納される参照データ、重み係数データ及び演算結果のメモリマップの例を示す図である。ここでは、前階層の結合数が３であるとする（例えば、図１３において３０５ａを算出する場合の例）。このような場合、領域１５０１〜１５０３は３つの参照データを格納する領域であり、領域１５０４〜１５０６は参照画像に対応するフィルタカーネル係数を格納する領域であり、領域１５０７は特徴面３０５ａの演算結果を格納する領域である。例えば、各領域にはラスタスキャンされたデータが格納される。従って、制御部１０１はレジスタ群６０２に格納された先頭ポインタ情報及びサイズに関する情報に基づいて、必要な参照画像データ及びフィルタカーネル係数データにアクセスすることが可能である。また、次の階層の特徴面の演算時には、演算結果が格納された領域１５０７を参照データの格納領域として指定する（レジスタ群６０２への設定）だけで、不要なデータの転送を行わずに、高速に処理することが可能である。
【００５５】
シーケンス制御部６０１は、上記の「フィルタカーネルの水平サイズ」レジスタ、「フィルタカーネル垂直サイズ」レジスタ、「参照データの水平サイズ」レジスタ及び「参照データの垂直サイズ」レジスタ等の内容に従って演算動作タイミングに関わるシーケンス制御を行う。
【００５６】
メモリ制御部６０５は、シーケンス制御部６０１の生成する制御信号６０６に従って、参照データ６０７、重み係数データ６０８及び演算結果データ６０９のＲＡＭ１００からの読み出及びＲＡＭ１００への書き込みを調停する。具体的には、画像バス２３を介したメモリへのアクセス、参照データ６０７の読み出し、重み係数データ６０８の読み出し、演算結果データ６０９の書き出しを制御する。なお、ＲＡＭ１００のデータ幅及び各バス（データ６０７〜６０９）のデータ幅は、例えば全て３２ｂｉｔである。
【００５７】
次に、このように構成された物体検出装置の動作について説明する。図９（ａ）は、第１の実施形態に係る物体検出装置の動作を示すフローチャートである。
【００５８】
先ず、ステップＳ７０１において、検出処理の開始に先立ち、ＣＰＵ２７が各種初期化処理を実行する。例えば、ＣＰＵ２７は、ＣＮＮ処理部２２の動作に必要な重み係数をＲＯＭ２８からＲＡＭ１００に転送すると共に、ＣＮＮ処理部２２の動作、即ちＣＮＮネットワークの構成を定義する為の各種レジスタ設定を行う。具体的には、ＣＮＮ処理部２２の制御部に存在する複数のレジスタ（図７参照）に所定の値を設定する。同様に、前処理部２５等のレジスタに対しても動作に必要な値を書き込む。
【００５９】
次いで、ステップＳ７０２において、画像入力部２０が、画像センサの出力する信号をディジタルデータに変換し、フレーム単位でフレームバッファ（図示せず）に格納する。
【００６０】
その後、ステップＳ７０３において、前処理部２５が、所定の信号に基づいて画像変換処理を行う。即ち、前処理部２５は、画像入力部２０のフレームバッファ上の画像データから輝度データを抽出し、コントラスト補正処理を行う（ステップＳ７０３）。輝度データの抽出では、例えば、一般的な線形変換処理によりＲＧＢ画像データから輝度データを生成する。また、コントラスト補正では、例えば、一般的に知られているコントラスト補正処理を適用してコントラストを強調する。前処理部２５は、コントラスト補正処理後の輝度データを検出用画像としてＲＡＭ１００に格納する。
【００６１】
そして、１フレームの画像データに対して前処理が完了すると、前処理部２５が完了信号（図示せず）を有効にし、ＣＮＮ処理部２２が当該完了信号に基づいて物体の検出処理を開始する（ステップＳ７０４〜Ｓ７０５）。
【００６２】
物体の検出処理では、ＣＮＮ処理部２２は特徴面単位（例えば図１３に示す３０３ａ〜ｃ等）でコンボリューション演算を行う（ステップＳ７０４）。そして、全ての特徴面に対する処理を終了すると（図１３の場合、特徴面３０７の算出を終了した場合）、ＣＰＵ２７に対して割り込み信号を生成する（ステップＳ７０６）。つまり、制御部１０１が１つの特徴面のコンボリューション演算処理（ステップＳ７０４）を終了すると、レジスタセット１１０１ａの「最終層指定」レジスタの内容に従って（ステップＳ７０５）、最終層ではない場合、次の特徴面の処理を開始する。制御部１０１は、次特徴面を処理する場合、レジスタ群６０２の次のアドレスに存在するレジスタセットの内容に従って同様のコンボリューション演算処理を行う。レジスタセットが最終層を示している場合、制御部１０１は所定のコンボリューション演算処理の終了後、ＣＰＵ２７に対して終了通知割り込みを発生する。例えば、動画像から所定の物体を検出するような場合、ＣＰＵ２７は以上の処理をフレーム画像単位に連続処理する（ステップＳ７０７）。割り込み処理の詳細については、図９（ｂ）を参照しながら後述する。
【００６３】
図１０は、並列処理（コンボリューション演算処理）の具体例を示す図である。図１０にはラスタスキャンされたデータ座標を示してある。１００１は参照データ面を表し、各ブロック（模式的に示す最小一升）がラスタスキャン順でＲＡＭ１００に格納された前階層の演算結果（ｉｎｐｕｔ（ｘ，ｙ）、ｘ：水平方向位置、ｙ：垂直方向位置）を示す。１００４は対象となる特徴データ面を表し、各ブロックがラスタスキャンされた演算結果（ｏｕｔｐｕｔ（ｘ，ｙ）、ｘ：水平方向位置、ｙ：垂直方向位置）を示す。また、１００２ａ及び１００２ｂは、夫々ｏｕｔｐｕｔ（５，５）、ｏｕｔｐｕｔ（５，６）位置の特徴面データを算出する場合のフィルタ演算に必要な参照データ範囲を示す。ここでは、フィルタのカーネルサイズは水平方向に「１１」、垂直方向に「１２」である。１００３は同時にフィルタ演算する特徴面データの領域を示し、例えば並列度が１２の場合、ｏｕｔｐｕｔ（５，ｙ）：ｙ＝５〜１６の特徴面位置のデータを同時に演算する。従って、本実施形態では、並列処理の対象である領域（１００３）を水平方向に１画素単位、垂直方向に１２ライン単位で走査させながらフィルタ演算を行い、二次元データ列に対して高速にフィルタ演算を行う。
【００６４】
図１１は、第１の実施形態におけるコンボリューション演算の処理時の動作を示すタイムチャートである。図１１には、１つの特徴面のコンボリューション演算処理動作（ステップＳ７０４）の一部を示してある。また、図１１に示す信号は全てクロック信号（図示せず）に基づいて同期動作する。
【００６５】
Ｌｏａｄ１信号は、記憶部１０２に重みデータをロードするイネーブル信号を示す。制御部１０１はＬｏａｄ信号１が有効（信号レベルが１）の期間に、ＲＡＭ１００から１列分の重みデータを読み出し、記憶部１０２に書き込む。フィルタカーネルの１列の大きさはレジスタ群６０２に保持されている。また、制御部１０１は、レジスタ群６０２で指定する重み係数のアドレスポインタ情報、重み係数サイズ及び参照するデータ面の数に基づいて、読み出すデータのアドレスを決定する。ＲＡＭ１００のデータ幅は３２ｂｉｔであり、重み係数のデータ幅は８ｂｉｔであるので、記憶部１０２に列方向１２個の重み係数を書き込む場合（図１０に示す例）、３クロックでロード処理を完了する。なお、以後、ＲＡＭ１００に対する読み出し及び書き込みサイクルは全て１クロックで完了するものとする。
【００６６】
制御部１０１は、重み係数のロードが完了すると、次に参照データのロードを開始するためにＬｏａｄ３信号を有効化する。Ｌｏａｄ３信号もＬｏａｄ１信号と同様に信号レベル１の場合が有効化された状態である。制御部１０１はＬｏａｄ３信号の有効化と同時にＲＡＭ１００から参照データを取り出し、記憶部１０３にセットする。セットするデータの数はレジスタ群６０２に保持されているフィルタカーネルの大きさ及び並列度から決定する。また、制御部１０１は、レジスタ群６０２で指定する参照データのアドレスポインタ情報、参照データのサイズ及び参照データ面の数に基づいて、ＲＡＭ１００から読み出すデータのアドレスを決定する。参照データの有効桁は８ｂｉｔであるため、記憶部１０３に例えば２３個の参照データを書き込む場合、６サイクルで書き込みシーケンスを完了する。図１０に示す例の場合、フィルタカーネルの水平方向サイズが１２、演算並列度が１２であるため、並列度が２３（１２＋１２−１＝２３個）のデータをロードする必要がある。
【００６７】
＊ＣＬＲ信号は、累積加算器１０８を初期化させる信号であり、＊ＣＬＲ信号が０の場合、累積加算器１０８のレジスタ９０２が０に初期化される。制御部１０１は、新たな特徴面の位置のコンボリューション演算開始前に、この＊ＣＬＲ信号を０にする。
【００６８】
Ｌｏａｄ２信号は、シフトレジスタ１０４の初期化を指示する信号であり、Ｌｏａｄ２信号が１で、かつＥｎａｂｌｅ１信号が有効（信号レベル１）の場合、記憶部１０２に保持する複数の重み係数データがシフトレジスタ１０４に一括ロードされる。Ｅｎａｂｌｅ１信号はシフトレジスタのデータ遷移を制御する信号であるが、図１１に示すように動作中は常に１に設定されている。従って、Ｌｏａｄ２信号が１の場合、クロック信号に応じて記憶部１０２の出力をラッチし、Ｌｏａｄ２信号が０の場合、クロック信号に応じてシフト処理を継続する。制御部１０１のシーケンス制御部６０１は、フィルタカーネルの列方向サイズに応じたクロック数をカウントするとＬｏａｄ２信号を有効化し、シフト動作を停止させると同時に、記憶部１０２に保持する重み係数データをシフトレジスタ１０４に一括ロードする。即ち、フィルタカーネルの水平方向単位で重み係数を一括ロードし、ロードした係数を動作クロックに応じてシフトアウトする。
【００６９】
Ｌｏａｄ４信号は、シフトレジスタ１０５の初期化を指示する信号であり、Ｌｏａｄ４信号が１で、かつＥｎａｂｌｅ２信号が有効（信号レベル１）の場合、記憶部１０３に保持する参照データがシフトレジスタ１０５に一括ロードされる。なお、Ｅｎａｂｌｅ２信号はシフトレジスタのデータ遷移を制御する信号であるが、図１１に示すように動作中は常に１に設定されている。このため、Ｌｏａｄ４信号が１の場合、クロック信号に応じて記憶部１０３の出力をラッチし、Ｌｏａｄ４信号が０の場合、クロック信号に応じてシフト処理を継続する。制御部１０１のシーケンス制御部６０１は、フィルタカーネルの列方向サイズに応じたクロック数をカウントするとＬｏａｄ４信号を有効化し、シフト動作を停止させると同時に、記憶部１０３に保持する参照データを一括ロードする。即ち、フィルタカーネルの１列単位で必要な参照データを一括ロードし、ロードした参照データを動作クロックに応じてシフトする。このように、制御部１０１はＬｏａｄ４信号をＬｏａｄ２信号と同一のタイミングで制御する。
【００７０】
累積加算器１０８はクロックに同期して積和演算を継続している。従って、シフトレジスタ１０４及び１０５のシフト動作に従って算出する特徴面の複数の点に対して同時にフィルタカーネルサイズに応じた積和演算処理を実行する。具体的には、シフトレジスタ１０４及び１０５のシフト動作期間（図１１中の積和演算処理区間）中にフィルタカーネルの１列分の積和演算がなされる。このような列単位の演算を重み係数及び参照データを入れ替ながら水平方向に繰り返し、並列度の数に応じた二次元のコンボリューション演算結果が生成される。また、制御部１０１はカーネルサイズ及び並列度に応じて各信号を制御し、積和演算処理及び積和演算処理に必要なデータ（重み係数データ及び参照データ）のＲＡＭ１００からの供給を並行に実行する。
【００７１】
Ｌｏａｄ５信号は、累積加算器の結果をシフトレジスタ１０６に並列にロードする信号であり、制御部１０１は対象となる特徴面の並列処理単位の積和演算が終了すると、Ｌｏａｄ５信号及びＥｎａｂｌｅ３信号に１を出力する（図示せず）。シフトレジスタ１０６は、Ｌｏａｄ５信号が１で、かつＥｎａｂｌｅ３信号が１の場合、累積加算器１０８の出力を一括ロードする。なお、図１１に示すタイミングでは、計算済みのコンボリューション演算結果がシフトレジスタ１０６にラッチされているものとする。制御部１０１は、シフトレジスタ１０４及び１０５のシフト動作中に記憶部１０２及び１０３へのデータロードが完了している場合、Ｅｎａｂｌｅ３の信号を有効化し、シフトレジスタ１０６に保持する演算結果をシフトアウトする。つまり、信号ＯＵＴｎ（シフトレジスタ１０６の最終段出力）を非線形変換処理部１０９に向けて出力させる。シフトアウトした演算結果は非線形変換処理部１０９によって変換処理され、その後、制御部１０１により、レジスタ群６０２に記された演算結果格納先ポインタ及び参照データのサイズに従ってＲＡＭ１００の所定のアドレスに格納される。
【００７２】
このように、制御部１０１は記憶部１０２、記憶部１０３及び非線形変換処理部１０９の３つの処理部のＲＡＭ１００に対するアクセスを調停し、積和演算処理及び当該３つの処理部（１０２、１０３及び１０９）のＲＡＭ１００へのアクセスをパイプライン化する。図１０に示す例の場合、「列単位の積和演算に必要なクロック数（１２）」が「重み係数ロードクロック数（３）＋参照データロードクロック数（６）＋結果データ格納クロック数（１）」より大きい。このため、メモリアクセスに要する時間は積和演算時間内に隠蔽される。なお、非線形変換処理部１０９は記憶部１０２及び１０３に比べてＲＡＭ１００に対するアクセス頻度が低いため、最も低い優先順位で動作する。即ち、記憶部１０２及び１０３のアクセスの間隙となるタイムスロットでアクセスを行う。
【００７３】
また、本実施形態では、ＲＡＭ１００に対する参照データの読み出し、重み係数の読み出し及び演算結果の書き出しを積和演算処理期間に並行処理する。従って、「積和演算時間（フィルタカーネルの水平サイズ×フィルタカーネルの垂直サイズ）＋シフトレジスタへのロード時間（フィルタカーネルの水平サイズ）」×結合する前階層の特徴面数」分のクロックで、並列度分の数のコンボリューション演算処理が完了する。
【００７４】
但し、フィルタカーネルが小さい場合等、並列度とフィルタカーネルとの関係によっては、ＲＡＭ１００へのアクセスを積和演算期間中に完全にパイプライン化できない場合もある。このような場合、制御部１０１はＲＡＭ１００へアクセス完了を優先し、Ｅｎａｂｌｅ１信号、Ｅｎａｂｌｅ２信号及びＥｎａｂｌｅ３信号及び累積加算器のＬａｔｃｈ  Ｅｎａｂｌｅ信号を制御して積和演算処理の開始を遅延させることが好ましい。つまり、記憶部１０２及び１０３へのデータロード及び非線形変換処理部１０９のデータセーブを行うことが好ましい。
【００７５】
ここで、コンボリューション演算処理の終了に伴う割り込み処理について説明する。図９（ｂ）は、割り込み処理時の動作を示すフローチャートである。
【００７６】
割り込み処理時には、ＣＰＵ２７が制御部１０１からの終了通知割り込みを受信すると、ステップＳ７０８において、ＤＭＡＣ２６を起動し、ＲＡＭ１００上の最終特徴面データをＣＰＵバス３０上のＲＡＭ２９に転送する。
【００７７】
次いで、ＣＰＵ２７はＲＡＭ２９に記憶されている最終層検出結果から検出対象である所定の物体の位置及び大きさ等の情報を取得する。具体的には、最終検出結果を二値化処理し、ラベリング等の処理によりオブジェクト位置及びサイズ等を抽出する。
【００７８】
このようにして一連の処理が終了する。
【００７９】
そして、本実施形態によれば、少ない回路規模（レジスタサイズ等）で並列度と同じ方向のフィルタカーネルサイズ単位で演算及びメモリアクセスをパイプライン化し、高速に階層的なコンボリューション演算処理を行うことが可能である。また、参照データ及び演算結果データを同一のメモリ空間上に配置する回路構成であるため、レジスタの設定だけで複雑な階層的コンボリューション演算処理に柔軟に対応することが可能である。
【００８０】
つまり、階層的なコンボリューション演算を低コストで高速に実現することができる。また、同一の回路で様々な階層的結合を有するコンボリューション演算を高速に処理することができる。
【００８１】
（第２の実施形態）
次に、本発明の第２の実施形態について説明する。第２の実施形態では、記憶部１０２及びシフトレジスタ１０４の構成及び制御タイミングが第１の実施形態と相違しており、他の構成等は第１の実施形態と同様である。第１の実施形態では、シフトレジスタ１０４はコンボリューションカーネルの列単位で記憶部１０２からデータをロードしている。即ち、制御部１０１はＬａｏｄ２信号及びＬｏａｄ４信号を同じタイミングで駆動している。これに対し、第２の実施形態では、記憶部１０２及びシフトレジスタ１０４が、夫々１つのコンボリューションカーネル係数の数と同じか、それ以上の長さのレジスタ及びシフトレジスタで構成されている。
【００８２】
図１２は、第２の実施形態におけるコンボリューション演算の処理時の動作を示すタイムチャートである。ここでは、フィルタカーネルのサイズが３×３であるとする。図１２中の各信号は図１１のものと同一であり、図１２に示すタイムチャートは、積和演算中のＲＡＭ１００に対するデータアクセスに関連している。
【００８３】
新たなコンボリューションカーネルに対する演算を開始する場合、制御部１０１はＬｏａｄ２信号を有効にして記憶部１０２に保持する全ての重み係数をシフトレジスタ１０４に一括ロードする。
【００８４】
積和演算処理期間中、制御部１０１は、先ずＬｏａｄ３信号を有効化すると同時に、次の列のコンボリューション演算を行うための参照データをＲＡＭ１００又は記憶部１０３にロードする。１列の処理に必要な参照データのロードを完了すると、次に、制御部１０１はＬｏａｄ１信号を有効化し、次のコンボリューションカーネルの重み係数をＲＡＭ１００から記憶部１０２に転送する。制御部１０１は次のフィルタカーネル１列分のコンボリューション演算処理を終了すると、Ｌｏａｄ４信号を有効化して記憶部１０３に保持した次の列の参照データをシフトレジスタ１０５に一括ロードする。
【００８５】
ロード後、Ｌｏａｄ３信号を有効化して次の列の参照データをＲＡＭ１００から記憶部１０３に転送する。その際に、Ｌｏａｄ１信号を無効にする。制御部１０１は参照データの転送が終了すると、再びＬｏａｄ１信号を有効化してＲＡＭ１００から記憶部１０２へのフィルタカーネル係数の転送を再開する。次のフィルタカーネルの全係数の転送が終了すると、制御部１０１はＥｎａｂｌｅ３信号を有効化して、非線形変換処理結果をＲＡＭ１００に格納する。
【００８６】
本実施形態では、参照データのロードを優先し、その間隙に次のカーネルの係数を記憶部１０２にロードする。
【００８７】
このような第２の実施形態では、１つのフィルタカーネル単位で重み係数データを記憶部１０２及びシフトレジスタ１０４に保持するため、記憶部１０２からシフトレジスタ１０４へのロード回数が第１の実施形態よりも減少する。図１２に示す例では、図１１に示す例と比較して２回分だけロード回数が減少する。従って、ロード回数の減少分だけ記憶部１０２へのデータロードに関するＲＡＭ１００へのアクセス回数を増やすことが可能になる。このため、記憶部１０３及び非線形変換処理部１０９の積和演算期間中のＲＡＭ１００へのアクセス回数を増加させることができ、フィルタカーネルサイズが小さい場合等、積和演算の処理開始が遅れる条件の場合であっても、その遅れサイクル数を減少することができる。
【００８８】
なお、これらの実施形態では、積和演算部の並列度を１２としているが、本発明はこれに限るわけではなく、回路規模及び必要な性能に応じて任意の並列度を有する回路に適用することが可能である。
【００８９】
また、これらの実施形態では、記憶部１０２及び１０３がレジスタで構成されているが、本発明はこれに限るわけではなく、高速なメモリ等を用いてもよい。
【００９０】
また、並列処理の方向は、図１０に示すような列方向に限定されず、行方向に連続する複数の特徴面データを並列に処理する構成を採用してもよい。この場合、記憶部１０２にはフィルタカーネルの１行の重み係数がロードされ、記憶部１０３には「並列度＋フィルタカーネルの行方向サイズ−１」個の行方向に連続する参照データがロードされる。また、シフトレジスタ１０４及び１０５はフィルタカーネルの行方向サイズ単位で初期値がロードされ、行方向サイズのシフト動作を行う。以上の処理をフィルタカーネルの列方向サイズ繰り返せば、第１の実施形態と同様の特徴面データを算出することが可能である。
【００９１】
また、これらの実施形態では、制御部１０１にレジスタ群６０２が内蔵されているが、レジスタ群６０２に相当する構成を外部のメモリ上に配置してもよい。例えばＲＡＭ１００上の所定のアドレスを制御部１０１のレジスタ群として共通のアドレス空間にマッピングする構成でもよい。この場合、レジスタセットをＣＮＮ処理部２２に設ける必要がなくなるため、ＣＮＮ処理部２２の回路規模を削減できる。更に、レジスタセットの容量に制限がなくなるため、同じハードウェアで特徴面の多い複雑な階層的ネットワークを構築することも可能になる。
【００９２】
また、最低限のレジスタセットを内蔵すると共に、選択信号に従って外部のメモリもレジスタ群の代替として使用できるようにしてもよい。このような構成の場合、搭載するレジスタセットのみで構築可能なネットワークはより高速に処理可能であり、更に同一の回路で複雑なネットワークを構築することも可能になる。
【００９３】
また、これらの実施形態では、画像入力部２０に画像センサ等を具備する光学的な画像入力手段が設けられているが、ネットワーク装置又はハードディスク等の記録装置等か得られた画像データに対して処理を行ってもよい。
【００９４】
更に、これらの実施形態では、ＣＰＵ２７と組み合わせて動作する構成が採用されているが、全て専用ハードウェアにより構成したシステムに適用してもよい。逆に、本発明の実施形態は、例えばコンピュータがプログラムを実行することによって実現することもできる。また、プログラムをコンピュータに供給するための手段、例えばかかるプログラムを記録したＣＤ−ＲＯＭ等のコンピュータ読み取り可能な記録媒体又はかかるプログラムを伝送するインターネット等の伝送媒体も本発明の実施形態として適用することができる。また、上記のプログラムも本発明の実施形態として適用することができる。上記のプログラム、記録媒体、伝送媒体及びプログラムプロダクトは、本発明の範疇に含まれる。
【図面の簡単な説明】
【００９５】
【図１】本発明の第１の実施形態に係る階層的コンボリューション演算回路を具備した物体検出装置の構成を示すブロック図である。
【図２】ＣＮＮ処理部２２の構成を示すブロック図である。
【図３】シフトレジスタ１０４〜１０６の構成の例を示す図である。
【図４】累積加算器１０８の構成を示す図である。
【図５】非線形変換処理部１０９の構成を示す図である。
【図６】制御部１０１の構成を示すブロック図である。
【図７】レジスタ群６０２に設定される情報の例を示す図である。
【図８】ＲＡＭ１００に格納される参照データ、重み係数データ及び演算結果のメモリマップの例を示す図である。
【図９】第１の実施形態に係る物体検出装置の動作を示すフローチャートである。
【図１０】並列処理（コンボリューション演算処理）の具体例を示す図である。
【図１１】第１の実施形態におけるコンボリューション演算の処理時の動作を示すタイムチャートである。
【図１２】第２の実施形態におけるコンボリューション演算の処理時の動作を示すタイムチャートである。
【図１３】ＣＮＮ演算の例を示すネットワーク構成図である。
【図１４】コンボリューションフィルタの例を示す図である。
【図１５】特徴面３０５ａを生成する演算を説明する図である。
【符号の説明】
【００９６】
１０１：ＲＡＭ
１０１：制御部
１０２、１０３：記憶部
１０４、１０５、１０６：シフトレジスタ
１０７：乗算器
１０８：累積加算器
１０９：非線形変換処理部
【図１】
2010134697.tif 000004
【図２】
2010134697.tif 000005
【図３】
2010134697.tif 000006
【図４】
2010134697.tif 000007
【図５】
2010134697.tif 000008
【図６】
2010134697.tif 000009
【図７】
2010134697.tif 000010
【図８】
2010134697.tif 000011
【図９】
2010134697.tif 000012
【図１０】
2010134697.tif 000013
【図１１】
2010134697.tif 000014
【図１２】
2010134697.tif 000015
【図１３】
2010134697.tif 000016
【図１４】
2010134697.tif 000017
【図１５】
2010134697.tif 000018