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