(57)【要約】【課題】  ニューラルネットワークの階層処理において、処理切替え時に制御データセットの転送のためのオーバーヘッドが発生する。【解決手段】  入力データに対し、ニューラルネットワークに対応する階層的な演算処理を実行するデータ処理装置に、前記ニューラルネットワークに対応する階層的な演算処理を、予め定められた複数の処理単位に分割し、該分割した処理単位ごとに処理に用いる制御データをセットとした複数の制御データセットを保持する保持手段と、前記保持手段から前記複数の制御データセットを順に転送する転送手段と、前記転送手段から転送された１つの制御データセットを用いて、当該制御データセットに対応する前記分割した処理単位の演算処理を行う演算処理手段とを備える。【選択図】  図１
2020140546.tif 000002
【特許請求の範囲】
【請求項１】
入力データに対し、ニューラルネットワークに対応する階層的な演算処理を実行するデータ処理装置であって、
前記ニューラルネットワークに対応する階層的な演算処理を、予め定められた複数の処理単位に分割し、該分割した処理単位ごとに処理に用いる制御データをセットとした複数の制御データセットを保持する保持手段と、
前記保持手段から前記複数の制御データセットを順に転送する転送手段と、
前記転送手段から転送された１つの制御データセットを用いて、当該制御データセットに対応する前記分割した処理単位の演算処理を行う演算処理手段とを備えることを特徴とするデータ処理装置。
【請求項２】
前記処理単位は、前記ニューラルネットワークの階層単位であることを特徴とする請求項１記載のデータ処理装置。
【請求項３】
前記処理単位は、前記ニューラルネットワークの特徴面単位であることを特徴とする請求項１記載のデータ処理装置。
【請求項４】
前記制御データは、前記演算処理の重み係数と動作パラメタとを含むことを特徴とする請求項１記載のデータ処理装置。
【請求項５】
前記処理単位は、該処理単位の処理に必要な重み係数のメモリ量が、前記演算手段の参照するメモリにおける重み係数の格納部のメモリサイズ以下となるように定められていることを特徴とする請求項４記載のデータ処理装置。
【請求項６】
前記演算処理手段は、演算処理の実行と並列に、次の演算処理に使用する重み係数を重み係数格納部へ格納することを特徴とする請求項４記載のデータ処理装置。
【請求項７】
前記演算処理手段は、演算の実行と並列に次の処理に使用する動作パラメタをレジスタへ設定することを特徴とする請求項４記載のデータ処理装置。
【請求項８】
前記処理単位は、該処理単位の処理に必要な特徴面を保持するためのメモリ量が、前記演算手段の参照するメモリにおける特徴面の格納部のメモリサイズ以下となるように定められていることを特徴とする請求項１記載のデータ処理装置。
【請求項９】
前記転送手段は、複数のデータセットを連続して転送することを特徴とする請求項１記載のデータ処理装置。
【請求項１０】
入力データに対し、ニューラルネットワークに対応する階層的な演算処理を実行するデータ処理方法であって、
前記ニューラルネットワークに対応する階層的な演算処理を、予め定められた複数の処理単位に分割し、該分割した処理単位ごとに処理に用いる制御データをセットとした複数の制御データセットを保持手段に保持する保持工程と、
前記保持手段から前記複数の制御データセットを順に転送する転送工程と、
前記転送手段から転送された１つの制御データセットを用いて、当該制御データセットに対応する前記分割した処理単位の演算処理を行う演算処理工程とを備えることを特徴とするデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ニューラルネットワークに対応する階層的な演算処理を実行するデータ処理装置及びその方法に関するものである。
【背景技術】
【０００２】
Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋｓ（以下ＣＮＮと略記する）に代表される階層的な演算手法が認識対象の変動に対して頑健なパターン認識を可能にする手法として注目されている。例えば、非特許文献１では様々な応用例・実装例が開示されている。
【０００３】
図９は簡単なＣＮＮの例を示すネットワーク構成図である。９０１は入力層であり、画像データに対してＣＮＮ処理を行う場合、所定サイズの画像データに相当する。９０３ａ〜９０３ｄは第１階層（９０８）の特徴面を、９０５ａ〜９０５ｄは第２階層（９０９）の特徴面、９０７は第３階層９１０の特徴面を示す。
【０００４】
特徴面とは、所定の特徴抽出演算（コンボリューション演算及び非線形処理）の処理結果に相当するデータ面である。特徴面は上位階層で所定の対象を認識するための特徴抽出結果に相当し、画像データに対する処理結果であるため、処理結果も面で表す。９０３ａ〜９０３ｄは９０１に対応するコンボリューション演算と非線形処理により生成されるものである。例えば、９０３ａは９０２１ａに模式的に示す２次元のコンボリューション演算と演算結果の非線形変換により算出する。
【０００５】
例えば、カーネル（係数マトリクス）サイズがｃｏｌｕｍｎＳｉｚｅ×ｒｏｗＳｉｚｅの２次元のコンボリューション演算は、以下に示すような積和演算により処理する。
【０００６】
【数１】
2020140546.tif 000003
【０００７】
ここで、
ｉｎｐｕｔ（ｘ，ｙ）：座標（ｘ、ｙ）での参照画素値
ｏｕｔｐｕｔ（ｘ，ｙ）：座標（ｘ、ｙ）での演算結果
ｗｅｉｇｈｔ（ｃｏｌｕｍｎ，ｒｏｗ）：ｏｕｔｐｕｔ（ｘ、ｙ）の演算に使用する重み係数
ｃｏｌｕｍｎＳｉｚｅ、ｒｏｗＳｉｚｅ：コンボリューションカーネルサイズ
である。
【０００８】
ＣＮＮ処理では、複数のコンボリューションカーネルを画素単位で走査しながら積和演算を繰り返し、最終的な積和結果を非線形変換する事で特徴面を算出する。なお、９０３ａを算出する場合は前階層との結合数が１であるため、コンボリューションカーネルは１つである。ここで、９０２１ｂ、９０２１ｃ、９０２１ｄはそれぞれ特徴面９０３ｂ、９０３ｃ、９０３ｄを算出する際に使用されるコンボリューションカーネルである。
【０００９】
図１０は、特徴面９０５ａを算出す場合の例を説明する図である。特徴面９０５ａは４つの前階層（９０８）の特徴面９０３ａ〜ｄと結合している。特徴面９０５ａのデータを算出する場合、特徴面９０３ａに対しては９０４１ａで模式的に示すカーネルを用いたフィルタ演算を行い、結果を累積加算器１００２に保持する。
【００１０】
同様に特徴面９０３ｂ、９０３ｃ、９０４ｃに対しては、それぞれカーネル９０４２ａ、９０４３ａ、９０４４ａで示すカーネルのコンボリューション演算を行い（１００１）、その結果を累積加算器１００２に蓄積する。４種類のコンボリューション演算の終了後、ロジスティック関数や双曲正接関数（ｔａｎｈ関数）を利用した非線形変換処理を行う（１００３）。
【００１１】
以上の処理を画像全体に対して１画素ずつ走査しながら処理する事で、特徴面９０５ａを算出する。同様に、特徴面９０５ｂは、前階層（９０８）の特徴面に対して９０４１ｂ／９０４２ｂ／９０４３ｂ／９０４４ｂで示す３つのコンボリューション演算を用いて算出する。更に特徴面９０７は前階層（９０９）の特徴面９０５ａ〜ｄに対して９０６１、９０６２、９０６３、９０６４で示す４つのコンボリューション演算を用いて算出する。なお、各カーネル係数はパーセプトロン学習やバックプロパゲーション学習等の一般的な手法を用いて予め学習により決定されているものとする。
【００１２】
近年のディープネットと呼ばれる大規模な結合ネットワークでは、１つの特徴面を生成するために参照するデータ面の数、すなわち、結合数が増えており、それに伴い演算に必要な重み係数が増えている。さらに、認識精度の向上のため、階層数も増えており、階層毎の動作パラメタサイズも増えている。
【００１３】
ＣＮＮ演算を行うＣＮＮ処理ハードウェアを、組み込みシステムに実装してネットワーク処理をする場合、ＣＮＮ処理ハードウェアは、階層毎に、入力データと重み係数との演算を行う。そして演算結果を次の階層の入力データとし、次の階層の重み係数との演算を行うことを繰り返し、最終的なパターン認識結果を得る。
【００１４】
例えば、特許文献１では、ＣＮＮ処理に必要な各階層の重み係数や各階層の情報を内部のメモリへ転送し、内部のメモリから演算部へ効率よく転送しながら演算を行う。
【先行技術文献】
【特許文献】
【００１５】
【特許文献１】特表２０１８−５２１３７４号公報
【非特許文献】
【００１６】
【非特許文献１】Ｙａｎｎ  ＬｅＣｕｎ，Ｋｏｒａｙ  Ｋａｖｕｋｖｕｏｇｌｕ  ａｎｄ  Ｃｌeｍｅｎｔ  Ｆａｒａｂｅｔ：Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｔｗｏｒｋｓ  ａｎｄ  Ａｐｐｌｉｃａｔｉｏｎｓ  ｉｎ  Ｖｉｓｉｏｎ，Ｐｒｏｃ．Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｃｉｒｃｕｉｔｓ  ａｎｄ  Ｓｙｓｔｅｍｓ  （ＩＳＣＡＳ’１０），ＩＥＥＥ，２０１０。
【発明の概要】
【発明が解決しようとする課題】
【００１７】
ハードウェア組み込みシステムに実装する場合、このように内部に大容量メモリを備えて全階層処理に必要な重み係数や動作パラメタを格納し、演算に使用することはコストの観点から望ましくない。そのため全階層の重み係数や動作パラメタは、安価なＲＯＭやＤＲＡＭ等の外部メモリに格納し、１つの階層的な処理に使用する重み係数や動作パラメタのみを内部メモリと内部レジスタに格納し、使用する。
【００１８】
このとき、各階層の処理ごとに、外部メモリからＣＮＮ処理ハードウェアへ、データ量の大きい重み係数や動作パラメタを転送してから処理を開始する。組み込みシステムでは一般的に、外部メモリや内部バスはＣＮＮ処理ハードウェア以外の機能ブロックも共有して使用するため、ＣＮＮ処理ハードウェアがデータリードのリクエストを出してから、リードデータが到着するまでのメモリレイテンシが大きくなる。そのため各階層の切り替え時に処理の準備に時間がかかってしまう。
【００１９】
一方、様々なニューラルネットワークを高速に処理する要求があり、高速で柔軟な処理制御が必要となっている。ＣＮＮ処理ハードウェアを制御する制御プロセッサがニューラルネットワークに応じて処理制御を行うと、処理対象のニューラルネットワーク変更時、ファームウェアも変更する必要があり、ファームウェアの開発コストが増加してしまう。
【課題を解決するための手段】
【００２０】
本発明の１態様によれば、入力データに対し、ニューラルネットワークに対応する階層的な演算処理を実行するデータ処理装置に、前記ニューラルネットワークに対応する階層的な演算処理を、予め定められた複数の処理単位に分割し、該分割した処理単位ごとに処理に用いる制御データをセットとした複数の制御データセットを保持する保持手段と、前記保持手段から前記複数の制御データセットを順に転送する転送手段と、前記転送手段から転送された１つの制御データセットを用いて、当該制御データセットに対応する前記分割した処理単位の演算処理を行う演算処理手段とを備える。
【発明の効果】
【００２１】
本発明によれば、１つの層のＣＮＮ処理中に、次階層のＣＮＮ処理に必要な重み係数と動作パラメタを転送することで、各層の切り替え時にデータ転送時間を隠ぺいし、階層的な演算処理の処理性能を向上させることができる。
【００２２】
さらに、処理対象のニューラルネットワークを変更するとき、処理単位に分割した動作パラメタと重み係数のデータセットを生成し、読み込み、実行することで、ニューラルネットワークに応じて制御プロセッサの処理制御を変更することなくニューラルネットワークの変更が可能となる。
【図面の簡単な説明】
【００２３】
【図１】実施形態に関するＣＮＮ演算処理部のブロック図。
【図２】データ分配部１０１が受信するデータフォーマットを示す図。
【図３】動作設定レジスタ群を示す図。
【図４】ＣＮＮ演算処理部６０１の特徴面生成処理のフローチャート。
【図５】ＣＮＮ演算処理部６０１を動作させるためのデータセットを示す図。
【図６】本発明に関するパターン認識装置を利用した画像処理システムの構成例を示す図。
【図７】ネットワークの処理に必要なメモリ量と処理単位を示す図。
【図８】画像処理システムのシーケンス図。
【図９】ＣＮＮの例を示すネットワーク構成図。
【図１０】特徴面９０５ａを算出す場合の例を説明する図。
【発明を実施するための形態】
【００２４】
以下、図面を参照しながら本発明の好適な実施形態について詳細に説明する。
【００２５】
（実施形態１）
図１〜図８を参照して本発明の実施形態１を説明する。
【００２６】
図６は本発明に関するパターン認識装置を利用した画像処理システムの構成例を示すものである。当該システムは画像データから特定の物体の領域を検出する機能を有する。図６において６００は画像入力部であり、光学系、ＣＣＤ（Ｃｈａｒｇｅ−Ｃｏｕｐｌｅｄ  Ｄｅｖｉｃｅｓ）又はＣＭＯＳ（Ｃｏｍｐｌｉｍｅｎｔａｒｙ  Ｍｅｔａｌ  Ｏｘｉｄｅ  Ｓｅｍｉｃｏｎｄｕｃｔｏｒ）センサー等の光電変換デバイスを有する。また画像入力部６００は、センサーを制御するドライバー回路／ＡＤコンバーター／各種画像補正を司る信号処理回路／フレームバッファ等を備える。
【００２７】
６０１は、本実施形態に関する演算装置を含むＣＮＮ演算処理部である。６０５はＤＭＡＣ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ）であり、画像バス６０２上の各処理部とＣＰＵバス６０９間のデータ転送を司るデータ転送部である。６０３はブリッジであり、画像バス６０２とＣＰＵバス６０９のブリッジ機能を提供する。６０４は前処理部であり、パターン認識処理を効果的に行うための各種前処理を行う。具体的には色変換処理／コントラスト補正処理等の画像データ変換処理をハードウェアで処理する。６０６はＣＰＵであり、画像処理システム全体の動作を制御する。
【００２８】
６０７はＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）であり、ＣＰＵ６０６の動作を規定する命令や動作パラメタデータ、及び、ＣＮＮ演算処理部６０１を動作させるための制御データセットを格納するデータ保持部である。制御データセットは、処理するニューラルネットワークに応じた重み係数と動作パラメタを含む（以下、単にデータセットとも表現する）。データセットはＤＭＡＣ６０５を介してパターン認識処理部に入力される。６０８はＣＰＵ６０６の動作に必要なメモリであり、ＲＡＭが使用される。
【００２９】
画像入力部６００から入力された画像データは前処理部６０４で処理され、一旦ＲＡＭ６０８に格納する。その後、ＲＡＭ６０８からＤＭＡＣ６０５を介してＣＮＮ演算処理部６０１に入力する。ＣＮＮ演算処理部６０１は前記データセットに従い、入力された前処理後の画像データに対して画素単位で所定の判別処理を行い、入力画像中の所定の物体の領域を判定する。判定結果はＤＭＡＣ６０５を介してＲＡＭ６０８に格納する。
【００３０】
図１に、ＣＮＮ演算処理部６０１のブロック図を示す。各ブロックの機能について説明する。１０１はＤＭＡＣ６０５から送信されるデータを受信し、内部のブロックへ送信するデータ分配部である。データのヘッダに付加された行き先を示す指示子と転送長を参照し、該当するブロックへデータを送信する。データの送受信は標準的な二線ハンドシェイクプロトコル（Ｖａｌｉｄ／Ｒｅａｄｙ）を使って行われるものとする。
【００３１】
図２に、データ分配部１０１が受信するデータフォーマットを示し、データ分配部１０１の動作について説明する。受信データ幅は３２ビットとする。２０１はヘッダ、２０２はデータボディである。ヘッダの下位８ビットの「ＤＳＴ」フィールドは行き先を示し、上位２４ビットの「ＬＥＮＧＴＨ」フィールドはデータボディの転送長（バイト数）を示す。予め内部のブロックにユニークなＩＤを付加し、ＤＳＴフィールドの値と一致したＩＤのブロックへＬＥＮＧＴＨ分のデータボディを送信する。例えば、図２に示すデータを受信すると、最初のデータは、ヘッダはＤＳＴ＝０、ＬＥＮＧＴＨ＝Ｎであるので、ＩＤが０の内部ブロックへＮバイトのデータボディを送信する。続くデータは、ヘッダはＤＳＴ＝１、ＬＥＮＧＴＨ＝Ｍであるので、ＩＤが１の内部ブロックへＭバイトのデータボディを送信する。なお、行き先を示すＩＤがアドレスであっても良い。
【００３２】
１０２はＣＮＮ演算処理部６０１の全体を制御する制御部であり、内部に動作設定レジスタ群を備える。動作設定レジスタ群は複数の動作設定レジスタセットを含み、１つの特徴面生成処理を行うための情報が当該動作設定レジスタセット毎に保持される。制御部１０２の動作設定レジスタ群は８つの動作設定レジスタセットを備えるものとする。設定する値は、動作パラメタとしてＲＯＭ６０７に配置されており、制御部１０２は、ＤＭＡＣ６０５、データ分配部１０１経由で受信し、内部の動作設定レジスタセットに設定する。制御部１０２のＩＤは「０」とする。
【００３３】
設定したレジスタ値は、後述する重み係数格納部１０３、特徴面格納部１０４、畳み込み演算部１０５へ、処理制御信号として配る。処理制御信号はレジスタ値の他に処理開始を指示する信号を含み、１つ以上の動作設定レジスタセットが設定されたときに処理開始指示をする。
【００３４】
図３は動作設定レジスタセットを示す図である。「最終層指定」レジスタは、本動作設定レジスタセットにより生成する特徴面が最終層か否かを指定するレジスタであり、１の場合、特徴面の生成処理を終了すると検出処理結果は外部へ出力する。「参照特徴面の数」レジスタは、生成特徴面と接続する前階層の特徴面数を指定するレジスタであり、例えば図９に示す特徴面９０５ａ〜ｄを演算する場合「４」が設定される。「非線形変換」レジスタは、非線形変換の有無を指定するレジスタであり、１が設定されている場合、非線形変換処理を行い、０が設定されている場合非線形変換処理を行わない。
【００３５】
「演算結果格納先ポインタ」レジスタは、生成特徴面の演算結果を保持する後述の特徴面格納部１０４の先頭ポインタを示すアドレスを指定するレジスタであり、当該ポインタ値を先頭ポインタとして演算結果をラスタスキャン順に格納する。「フィルタカーネルの水平サイズ」及び「フィルタカーネルの垂直サイズ」レジスタは生成特徴面の演算に使用するフィルタカーネルのサイズを指定するレジスタである。
【００３６】
「重み係数格納先ポインタ」レジスタは生成特徴面の演算に使用する重み係数を保持する、後述の重み係数格納部１０３の格納先アドレスを示すレジスタである。例えば、重み係数データは「参照特徴面の数」レジスタと同じ数の係数の組を有し、「重み係数格納先ポインタ」レジスタで指定されるアドレスからラスタスキャン順に格納されている。すなわち、「フィルタカーネルの水平サイズ」×「フィルタカーネルの垂直サイズ」×「参照特徴面の数」の数の係数データが重み係数格納部１０３に格納されている。
【００３７】
「参照特徴面の水平サイズ」及び「参照特徴面の垂直サイズ」レジスタはそれぞれ参照特徴面の水平方向画素数及び垂直方向ライン数を示すレジスタである。「参照特徴面格納先ポインタ」レジスタは、参照特徴面を保持する後述の特徴面格納部１０４の先頭ポインタを示すアドレスを指定するレジスタであり、該当ポインタ値を先頭ポインタとし参照特徴面がラスタスキャン順に格納されている。すなわち、「参照特徴面の水平サイズ」×「参照特徴面の垂直サイズ」×「参照特徴面の数」の数の特徴面データが特徴面格納部１０４に格納されている。
【００３８】
このような複数のレジスタが各特徴面単位に設けられている。生成特徴面の「参照特徴格納ポインタ」レジスタの内容が前階層結合対象特徴面の「演算結果格納先ポインタ」である場合、前階層の特徴面と生成特徴面が結合されていることになる。従って、ここでのレジスタ設定だけで任意の階層的結合関係を特徴面単位に構築することが可能である。ＲＯＭ６０７に配置される動作パラメタはこのようなレジスタセットが生成特徴面の数分連続するデータ構造であり、制御部１０２は、８セットある動作設定レジスタセットに順に設定する。８セットすべてに設定すると、二線ハンドシェイク信号のＲｅａｄｙをネゲートし、続く動作パラメタデータを受信しない。先に設定した動作設定レジスタセットの処理が完了と、処理が完了した動作レジスタセットは解放され、次の動作パラメタデータを受信し、設定する。
【００３９】
１０３は、重み係数データを格納する重み係数格納部であり、メモリとメモリ制御部で構成される。メモリの読み出しアドレスを示すリードポインタ、書き込みアドレスを示すライトポインタを備え、メモリをリングバッファとして使用する。通常のリングバッファであればメモリの空き容量は、ライトポインタとリードポインタにより管理されるが、後述する図４のフローチャートによると、同一の重み係数が複数回読み出されて使用される。最後の読み出しが終わったときにその重み係数のメモリ領域を解放し、ライトポインタとの差分でメモリの空き容量を管理する。メモリに空き容量がないときは、二線ハンドシェイク信号のＲｅａｄｙをネゲートし、データを受信しない。重み係数格納部１０３のＩＤは「１」とする。
【００４０】
制御部１０２より処理開始指示を受けると、レジスタ「重み係数格納先ポインタ」、「フィルタカーネルの水平サイズ」、「フィルタカーネルの垂直サイズ」、「参照特徴面の数」の値を参照する。リードポインタを「重み係数格納先ポインタ」レジスタ値に更新し、「フィルタカーネルの水平サイズ」×「フィルタカーネルの垂直サイズ」×「参照特徴面の数」の重み係数を読み出し、後述の畳み込み演算部１０５へ送信する。また、ライトポインタは初期化時にメモリの先頭アドレスに更新する。データ分配部１０１より重み係数を受信するとライトポインタの示すアドレスへデータを格納し、ライトポインタをインクリメントする。ライトポインタがメモリの最終アドレスまで到達するとメモリの先頭アドレスに戻す。
【００４１】
１０４は、特徴面データを格納する特徴面格納部であり、メモリとメモリ制御部で構成される。メモリの読み出しアドレスを示すリードポインタと、書き込みアドレスを示すライトポインタを備える。特徴面格納部１０４のＩＤは「２」とする。
【００４２】
特徴面格納部１０４は、制御部１０２より処理開始指示を受ける。すると、レジスタ「参照特徴面格納先ポインタ」、「参照特徴面の水平サイズ」、「参照特徴面の垂直サイズ」、「参照特徴面の数」、「フィルタカーネルの水平サイズ」、「フィルタカーネルの垂直サイズ」の値を参照する。そして、式（１）に示した参照画素値を読み出し、後述の畳み込み演算部１０５へ送信する。具体的には、リードポインタを「参照特徴面格納先ポインタ」レジスタ値に更新する。「フィルタカーネルの水平サイズ」（＝ｃｏｌｕｍｎＳｉｚｅ）「フィルタカーネルの垂直サイズ」（＝ｒｏｗＳｉｚｅ）で１枚目の参照特徴面座標（０，０）を決定する。そしてこの座標での参照画素値（−ｃｏｌｕｍｎＳｉｚｅ／２、−ｒｏｗＳｉｚｅ／２）〜（ｃｏｌｕｍｎＳｉｚｅ／２、ｒｏｗＳｉｚｅ／２）を読み出し、送信する。続いて２枚目の参照特徴面座標（０，０）での参照画素値、３枚目の参照特徴面（０，０）における参照画素値・・・の順に「参照特徴面の数」読み出し、送信する。その後、参照特徴面を水平方向に１画素ずつずらして参照特徴面（１，０）における参照画素値（１−ｃｏｌｕｍｎＳｉｚｅ／２、−ｒｏｗＳｉｚｅ／２）〜（１＋ｃｏｌｕｍｎＳｉｚｅ／２、ｒｏｗＳｉｚｅ／２）を同様に「参照特徴面の数」分送信する。このようにして「参照特徴面の水平サイズ」分水平方向にずらして参照特徴面を送信する。次は垂直方向に１ラインずつずらした参照特徴面（０，１）での参照画素値（−ｃｏｌｕｍｎＳｉｚｅ／２、１−ｒｏｗＳｉｚｅ／２）〜（ｃｏｌｕｍｎＳｉｚｅ／２、１＋ｒｏｗＳｉｚｅ／２）を同様に送信する。「参照特徴面の垂直サイズ」分ライン方向にずらして送信すると処理を完了する。
【００４３】
また、特徴面格納部１０４は、制御部１０２より処理開始指示を受けると、参照特徴面の読み出しと送信を行うのと同時に、後述の畳み込み演算部１０５から演算結果である生成特徴面を受信し、メモリに書き込む。この処理はレジスタ「最終層指定」、「演算結果格納先ポインタ」、「参照特徴面の水平サイズ」「参照特徴面の垂直サイズ」の値を参照する。具体的には、ライトポインタを「演算結果格納先ポインタ」レジスタ値に更新する。「最終層指定」レジスタが０のとき、生成特徴面を受信し、ライトポインタのアドレスにデータを格納する。ライトポインタはインクリメントする。「参照特徴面の水平サイズ」×「参照特徴面の垂直サイズ」の演算結果を受信すると処理が完了する。「最終層指定」レジスタが１のときは生成特徴面の受信は行わない。
【００４４】
また、ライトポインタは、初期化時にメモリの先頭アドレスに更新する。制御データ分配部１０１より画像データを受信するとライトポインタが示すアドレスにデータを格納し、ライトポインタをインクリメントする。入力層処理時のみ画像データを受信する。
【００４５】
１０５は、畳み込み演算を行う畳み込み演算部である。制御部１０２より処理開始指示を受けると、重み係数格納部１０３と特徴面格納部１０４からデータを受信し、畳み込み演算を行う。「フィルタカーネル水平サイズ」×「フィルタカーネル垂直サイズ」の重み係数と参照画素値を受信すると畳み込み演算を行い、演算結果を内部の累積加算器に保持し、演算結果を累積する。「参照特徴面の数」分の演算結果を累積加算した結果を、レジスタ「非線形変換」の値が１のとき、非線形変換処理をし、演算結果を特徴面格納部１０４へ送信する。レジスタ「非線形変換」の値が０のとき、非線形変換処理は行わず演算結果を特徴面格納部１０４へ送信する。また、「最終層指定」が１のときは演算結果を外部へ送信し、ＤＭＡＣ６０５を介してＲＡＭ６０８へ格納する。
【００４６】
ＣＮＮ演算処理部６０１による特徴面生成処理のフローチャートを図４に示す。ＣＮＮ演算処理部６０１は、制御部１０２の動作設定レジスタ群のうち、１つ以上のレジスタセットが設定されるとフローチャートの処理を開始する。Ｓ４０１にて、制御部１０２は、重み格納部１０３、特徴面格納部１０４、畳み込み演算部１０５へ処理開始指示を出す。Ｓ４０２は最も外側のループで「参照特徴面の垂直サイズ」のループ、Ｓ４０３は「参照特徴面の水平サイズ」のループである。つまり、参照特徴面をラスタ順にスキャンし、特徴面をラスタ順に生成する。
【００４７】
続くループＳ４０４は「参照特徴面の数」、Ｓ４０５は「フィルタカーネル垂直サイズ」、Ｓ４０６は「フィルタカーネル水平サイズ」である。つまり、参照特徴面毎に、参照画素範囲の参照画素値が、ラスタ順に処理される。Ｓ４０７は重み係数格納部１０３が参照特徴面の重み係数を読み出すステップであり、重読み出す重み係数の座標は、Ｓ４０４、Ｓ４０５のループ変数により決定する。Ｓ４０８は特徴面格納部１０４が参照特徴面の画素値を読み出すステップであり、読み出す画素値の座標はＳ４０２、Ｓ４０３、Ｓ４０５、Ｓ４０６のループ変数により決定する。
【００４８】
Ｓ４０９は、畳み込み演算部１０５がＳ４０７、Ｓ４０８にて読み出した画素値と重み係数を畳み込み演算し、その結果を累積するステップである。畳み込み演算部１０５は、Ｓ４０４のループが終了すると、Ｓ４１０にて「非線形変換」レジスタを参照し、１であると、Ｓ４１１へ遷移し、非線形変換処理を行う。レジスタ値が０であるとき、Ｓ４１１をスキップする。Ｓ４１２は畳み込み演算部１０５が「最終層指定」レジスタを参照し、１であるとき、Ｓ４１３にて、検出処理結果を外部へ送信する。レジスタ値が０であるとき、Ｓ４１４にて演算結果を特徴面格納部１０４へ送信する。特徴面格納部１０４はライトポインタに従い演算結果を格納する。
【００４９】
１枚の特徴面生成処理が完了すると、フローチャートの処理は完了となる。処理済の重み係数格納メモリ領域と、レジスタセットを解放する。
【００５０】
図５に、ＲＡＭ６０８に格納された、前処理部６０４で処理された処理対象の画像データと、ＲＯＭ６０７に格納されたＣＮＮ演算処理部６０１を動作させるためのデータセットの一例を示す。図７に示すネットワーク構成を処理するためのデータセットである。画像データを入力として、第１階層の特徴面９０３ａ〜ｄを順に生成し、続いて生成した第１階層９０８の特徴面を入力として、第２階層の特徴面９０５ａ〜ｄを順に生成する。引き続き第２階層の特徴面９１０を入力として、第３階層の特徴面９０７の特徴面を生成する一連の処理をするためのデータセットである。
【００５１】
５０１はＲＡＭ６０８に格納された画像データ、５０２〜５０７はＲＯＭ６０７に格納されたデータセットであり、ＤＭＡＣ６０５は、５０１〜５０７の順にデータをＣＮＮ演算処理部６０１へ送信する。５０１は処理対象の画像データであり、ヘッダは、行き先を示す指示子ＤＳＴ＝２、ＬＥＮＧＴＨ＝画像データの転送長である。つまり、５０１のデータ部は分配部１０１を経由して特徴面格納部へと送信される。
【００５２】
５０２は第１階層の重み係数であり、ヘッダは、行き先を示す指示子ＤＳＴ＝１、ＬＥＮＧＴＨ＝重み係数の転送長である。つまり、５０２のデータ部は分配部１０１を経由して重み係数格納部１０３へと送信される。データは、９０２１ａ〜ｄの重み係数を含む。重み係数は演算に使用する順に並べるものとする。
【００５３】
５０３は第１階層９０８の特徴面を生成するための動作パラメタであり、ヘッダは、行き先を示す指示子ＤＳＴ＝０、ＬＥＮＧＴＨ＝レジスタセットの転送長である。つまり、５０３のデータ部（動作パラメタ）は分配部１０１を経由して制御部１０２へと送信される。動作パラメタは、図３に示す第１階層の特徴面９０３ａ〜ｄを生成するために動作設定レジスタセットに設定する値である。レジスタ「参照特徴面の水平サイズ」の設定値は、入力層９０１の水平サイズ、レジスタ「参照特徴面の垂直サイズ」の設定値は入力層９０１の垂直サイズ、レジスタ「参照特徴面格納先ポインタ」の設定値は特徴面格納部メモリの先頭アドレスとなる。動作パラメタは処理する順、ここでは９０３ａ〜ｄの順に並べるものとする。
【００５４】
５０４、５０５は第２階層の重み係数９０４１ａ〜ｄ、９０４２ａ〜ｄ、９０４３ａ〜ｄ、９０４４ａ〜ｄと、第２階層の特徴面９０５ａ〜ｄを生成するための動作パラメタである。重み係数は演算に使用する順、９０４１ａ〜９０４４ａ、９０４１ｂ〜９０４４ｂ、９０４１ｃ〜９０４４ｃ、９０４１ｄ〜９０４４ｄ、に並べるものとする。動作パラメタに含まれる、レジスタ「参照特徴面の水平サイズ」、「参照面特徴面の垂直サイズ」の設定値は第１階層９０８の特徴面の水平サイズ、垂直サイズである。また、レジスタ「参照特徴面格納先ポインタ」の設定値は、５０３の中で指定した演算結果格納先ポインタのアドレスである。
【００５５】
５０６、５０７は、第３階層の重み係数９０６１〜９０６４と第３階層の特徴面９０７を生成するための動作パラメタである。動作パラメタに含まれる、レジスタ「最終層指定」の設定値は１である。レジスタ「参照特徴面の水平サイズ」、「参照面特徴面の垂直サイズ」の設定値は第２階層９０９の特徴面の水平サイズ、垂直サイズであり、レジスタ「参照特徴面格納先ポインタ」の設定値は、５０５の中で指定した演算結果格納先ポインタのアドレスである。ここでは、５０３、５０５、５０７の動作パラメタ値そのものを、制御部１０２がレジスタセット群に設定するが、制御部１０２が動作パラメタから値を算出し、レジスタセットへ設定してもよい。
【００５６】
図５に示すように、ＣＮＮ演算処理部６０１を動作させるためのデータセットは、ある処理単位の重み係数と動作パラメタ（生成するレジスタセットの設定値）のペアで構成する。処理対象のネットワークの情報と図１のハードウェアの構成に基づいて処理単位を決定する。処理単位の決定に作用するハードウェアの構成とは、具体的には、重み係数格納部１０３のメモリサイズや特徴面格納部１０４のメモリサイズである。単位当たりの処理に必要な重み係数のメモリ量が、重み係数格納部１０３のメモリサイズ以下になるよう決定する。且つ、単位当たりの処理に必要な特徴面のメモリ量が、特徴面格納部１０４のメモリサイズ以下になるよう決定する。つまり、ハードウェアで処理可能なように決定する。
【００５７】
各階層を処理するときに必要な重み係数を保持するために必要なメモリ量Ｗｌ、特徴面を保持するために必要なメモリ量Ｓｌ、は、
Ｗｌ＝Ｗｘ（ｌ，ｆ，ｆ’）×Ｗｙ（ｌ，ｆ，ｆ’）×（Ｆｌ×Ｆｌ−１）
Ｓｌ＝（ＩＸ×ＩＹ）×（Ｆｌ＋Ｆｌ−１）
ｌ：生成対象となる階層番号（１，２，…）
ｆ：生成特徴面番号
ｆ’：参照特徴面番号
Ｗｘ（ｌ，ｆ，ｆ’）：カーネルサイズ水平方向
Ｗｙ（ｌ，ｆ，ｆ’）：カーネルサイズ垂直方向
Ｆｔ：生成特徴面数
Ｆｔ−１：参照特徴面数
ＩＸ，ＩＹ：入力画像サイズ（水平方向，垂直方向）
として表すことができる。
【００５８】
図９のネットワークを階層単位で処理するときに必要なメモリ量を図７の７０１に示す。図９のネットワークの入力画像サイズは３２×３２とする。第１階層の参照特徴面数は１、生成特徴面数は４である。カーネルフィルタのサイズを３×３とするとき、４枚の特徴面を生成するために使用する重み係数９０２１ａ〜ｄのサイズは、係数マトリクスの１要素あたりのデータを１バイトとすると、３×３×４＝３６バイトである。特徴面のデータ量は、３２×３２×５＝５１２０バイトである。
【００５９】
第２階層のカーネルフィルタのサイズを５×５とするとき、４枚の特徴面を生成するために使用する重み係数９０４１ａ〜ｄ、９０４２ａ〜ｄ、９０４３ａ〜ｄ、９０４４ａ〜ｄのサイズは同様に算出すると４００バイトとなる。また、特徴面のデータ量は８１９２バイトである。第３階層のカーネルフィルタのサイズを７×７とするとき、４枚の特徴面を生成するために使用する重み係数９０６１〜９０６４のサイズは同様に算出すると１９６バイト、特徴面のデータ量５１２０バイトである。
【００６０】
ここでは重み係数格納部１０３のメモリサイズを４３６バイト、特徴面格納部１０４のメモリサイズが１６Ｋバイトとする。各階層の処理に必要な重み係数のメモリ量が、重み係数格納部１０３のメモリサイズ以下、必要な特徴面のメモリ量が、特徴面格納部１０４のメモリサイズ以下であるので、処理単位を階層単位とし、図５に示すデータセットとなる。処理単位の決め方の他の例を述べる。図９のネットワークの第２階層の特徴面数が８の場合、階層単位で処理するときに必要なメモリ量は７０２に示す通り、第２階層の重み係数は８００バイト、特徴面のデータ量は１２２８８バイトである。重み係数格納部１０３のメモリサイズを超えるため、階層単位で処理できないので１つの階層を複数回に分けて処理する。７０３のように第２階層の処理を、重み係数格納部１０３に格納可能な２分割とし、４つの処理とする。データセットは４セットとなる。
【００６１】
さらに他の例として、特徴面格納部１０４のメモリサイズが８Ｋバイトのハードウェアで、７０２に示すネットワークを処理する場合について述べる。第２階層の特徴面のデータ量は１２２８８バイトであり、特徴面格納部１０４のメモリサイズを超える。この場合、入力画像を分割して複数回処理する。７０４は、３２×３２を、３２×１６の２ブロックに分割して、特徴面格納部１０４に格納可能な処理単位とした。データセットは６セットとなる。なお、データセットを３セットとし、同一のデータセットを２回使用してもよい。また、全階層の重み係数が格納可能であれば、２回目は重み係数を転送しなくてもよい。また、全階層の動作パラメタが格納可能であれば、２回目は動作パラメタを転送しなくてもよい。
【００６２】
図６の画像処理システムにて、画像データ１枚を図５のデータセットにより処理する動作について、図８のシーケンス図を用いて説明する。図８はＣＰＵ６０６、ＤＭＡＣ６０５、制御部１０２、重み係数格納部１０３、特徴面格納部１０４、畳み込み演算部１０５のそれぞれの動作と相互作用を時系列に示している。
【００６３】
画像入力部６００が画像データを受信すると前処理部６０４が処理を行い、画像データをＲＡＭ６０８に格納する。１枚分の画像データ処理が完了するとＣＰＵ６０６に通知する（８０１）。ＣＰＵ６０６は、ＣＮＮ演算処理部６０１へ初期化を指示し、重み係数格納部１０３、特徴面格納部１０４は、それぞれのライトポインタをメモリの先頭アドレスに更新する（８０２）。ＣＰＵ６０６は、ＲＡＭ６０８の画像データ領域の直前のアドレスに、５０１に示す画像データのＬＥＮＧＴＨとＤＳＴ（＝２）を付加する（８０３）。
【００６４】
その後、ＤＭＡＣ６０５にデータ転送元に５０１の先頭アドレス、転送先にＣＮＮ演算処理部６０１、転送長に５０１のサイズを設定し、起動すると、ＤＭＡＣ６０５はＲＡＭ６０８からＣＮＮ演算処理部６０１へ５０１領域を転送する（８０４）。図８に図示しないデータ分配部１０１は、ヘッダのＤＳＴが２であるため、特徴面格納部１０４へ送信し、特徴面格納部１０４はライトポインタが示すメモリの先頭アドレスから画像データを格納する（８０５）。ＤＭＡＣ６０５は全データの転送完了後、ＣＰＵ６０６へ完了を通知する。
【００６５】
ＣＰＵ６０６は、完了通知を受けると、ＤＭＡＣ６０５のデータ転送元に５０２の先頭アドレス、転送先にＣＮＮ演算処理部６０１、転送長に５０２〜５０７の合計サイズを設定する。そして、起動すると、ＤＭＡＣ６０５は、ＲＯＭ６０７からＣＮＮ演算処理部６０１へ５０２領域を転送する（８０６）。データ分配部１０１はヘッダのＤＳＴが１であるため、重み係数格納部１０３へ送信し、重み係数格納部１０３はメモリの空き領域があるときはデータを受信し、メモリのライトポインタの示すメモリの先頭アドレスから順に重み係数を格納する（８０７）。ＤＭＡＣ６０５は５０２領域の転送完了後、引き続き５０３領域を転送する（８０８）。データ分配部１０１はヘッダのＤＳＴが０であるため、制御部１０２へ送信し、制御部１０２は第１階層の特徴面９０３ａ〜ｄの４つのレジスタセットを動作設定レジスタへ設定する（８０９）。
【００６６】
動作設定レジスタ１セット以上に値が設定されため、図４のフローチャートに従い特徴面生成処理が開始する。最初に、第１階層の特徴面９０３ａを生成するレジスタセットを処理する。制御部１０２は重み格納部１０３、特徴面格納部１０４、畳み込み演算部１０５へ処理開始指示を出す（Ｓ４０１）。重み格納部１０３、特徴面格納部１０４、畳み込み演算部１０５は、９０３ａのレジスタセットの各レジスタ値を参照する。それにより、Ｓ４０７−Ｓ４０９を「フィルタカーネル水平サイズ」×「フィルタカーネル垂直サイズ」×「参照特徴面の数」回、繰り返し実行する（８１０）。
【００６７】
さらに、９０３ａのレジスタセットの各レジスタ値を参照し、８１０、Ｓ４１０、Ｓ４１４を「参照特徴面の水平サイズ」×「参照特徴面の垂直サイズ」回、繰り返し実行し、第１階層の特徴面９０３ａの生成が完了する（８１１）。完了時に、処理済の重み係数格納メモリ領域と、レジスタセットが解放される。第１階層の特徴面９０３ａの生成処理（８１１）と並列に、ＤＭＡＣ６０５は５０３領域の転送完了後、引き続き５０４領域を転送する（８１２）。
【００６８】
データ分配部１０１はヘッダのＤＳＴが１であるため、重み係数格納部１０３へ送信する。重み係数格納部１０３は第１階層の重み係数５０２が格納されており、まだメモリの空き領域があるため、データを受信しメモリに格納する（８１３）。ＤＭＡＣ６０５は５０４領域の転送完了後、引き続き５０５領域を転送する（８１４）。データ分配部１０１はヘッダのＤＳＴが０であるため、制御部１０２へ送信する。制御部１０２は第１階層の４つのレジスタセット５０３が設定されており、まだレジスタセットの空きがあるため、データを受信し、第２階層の特徴面９０５ａ〜ｄの４つのレジスタセットを動作設定レジスタへ設定する（８１５）。
【００６９】
ＤＭＡＣ６０５は、５０５領域の転送完了後、引き続き５０６領域を転送する（８１６）。データ分配部１０１はヘッダのＤＳＴが１であるため、重み係数格納部１０３へ送信する。重み係数格納部１０３は第１階層の重み係数５０２と第２階層の重み係数５０４が格納されており、メモリに空き領域がないため、二線ハンドシェイク信号を制御し、データを受信しない（８１７）。第１階層の特徴面９０３ａ生成完了後に、処理済の重み係数９０２１ａ格納メモリ領域が解放された後に、受信する（８１８）。
【００７０】
第１階層の特徴面９０３ａ生成完了後、特徴面９０３ａのレジスタセットも解放する。９０９にて４セット設定しており、特徴面９０３ｂ〜ｄのレジスタセットについても同様に処理する。第１階層の最後の特徴面９０３ｄの生成完了時、第２階層の重み係数は（８１３）にて既に格納済みである。動作設定レジスタも（８１５）にて既に設定済みである。従って制御部１０２はすぐに処理開始を指示し、第２階層特徴面９０５ａの生成を開始する（８１９）。
【００７１】
ＤＭＡＣ６０５は、５０６領域の転送完了後、引き続き５０７領域を転送する（８２０）。データ分配部１０１はヘッダのＤＳＴが０であるため、制御部１０２へ送信する。制御１０２は第１階層の４つのレジスタセットは解放されており、第２階層の４つのレジスタセット５０５が設定されている状態である。レジスタセットの空きがあるため、データを受信し、第３階層の特徴面９０７の１つのレジスタセットを動作設定レジスタへ設定する（８２１）。ＤＭＡＣ６０５は５０２〜５０７全データの転送完了後、ＣＰＵ６０６へ完了を通知する。ＣＰＵ６０６は完了通知を受けると、ＤＭＡＣ６０５のデータ転送元にＣＮＮ演算処理部６０１、転送先にＲＡＭ６０８、転送長に検出処理結果のサイズを設定し、起動する。
【００７２】
一方、ＣＮＮ演算処理部６０１は引き続き特徴面生成処理をしており、第３階層の特徴面９０７の生成では、「最終層指定」レジスタは１であるため、畳み込み演算部１０５は検出処理結果を外部へ出力する。出力された検出処理結果は、ＤＭＡＣ６０５がＲＡＭ６０８へ転送する（８２２）。
【００７３】
以上、説明したように本実施形態の処理装置によれば、各階層の特徴面生成完了時に次階層の処理に必要な重み係数は既に重み係数格納部に格納されており、また、次階層のレジスタセットのうち少なくとも１セット以上は動作設定レジスタに設定されている。そのため階層の切り替え時にデータ準備の時間を省き、すぐに演算処理が開始可能であるため、パターン認識装置の処理性能を向上させることができる。
【００７４】
また、処理対象のニューラルネットを変更するときは、７０３、７０４に示すようにハードウェア処理装置で実行可能な処理単位にし、対応するデータセットにより動作させる。
【００７５】
ＣＰＵ６０６がＤＭＡＣ６０５に設定するデータセットの転送長が異なるだけで、制御手順は図８と変わらない。
【００７６】
本実施形態の処理装置によれば、処理対象のニューラルネットワークを変更するとき、ハードウェア処理装置で実行可能な処理単位に分割したデータセットに基づいて動作する。これにより、ニューラルネットワークに応じて制御プロセッサの処理制御を変更することなくニューラルネットワークの変更が可能となる。
【００７７】
（その他の実施形態）
上記実施形態では特徴抽出処理としてＣＮＮ演算処理の場合について説明したが、これに限るわけではなく、パーセプトロン等他の様々な階層的な処理に適用可能である。
【００７８】
また上記実施形態では、畳み込み演算をハードウェアで構成する場合について説明したが、本発明はこれに限るわけではない。全ての処理を汎用のプロセッサでソフトウェア処理する場合にも適用可能である。
【符号の説明】
【００７９】
１０１  データ分配部
１０２  制御部
１０３  重み係数格納部
１０４  特徴面格納部
１０５  畳み込み演算部
６０１  ＣＮＮ演算処理部
【図１】
2020140546.tif 000004
【図２】
2020140546.tif 000005
【図３】
2020140546.tif 000006
【図４】
2020140546.tif 000007
【図５】
2020140546.tif 000008
【図６】
2020140546.tif 000009
【図７】
2020140546.tif 000010
【図８】
2020140546.tif 000011
【図９】
2020140546.tif 000012
【図１０】
2020140546.tif 000013