(57)【要約】  演算処理装置において、演算制御部は、出力特徴量マップの特定のピクセルを算出するためのフィルタ処理および累積加算処理の途中で、一旦途中結果を前記累積加算結果格納メモリに格納して別のピクセルの処理を行い、すべてのピクセルについて累積加算処理の途中結果を前記累積加算結果格納メモリに格納し終えたら最初のピクセルに戻り、前記累積加算結果格納メモリに格納した値を読み出して累積加算処理の初期値とし、累積加算処理の続きを実行するよう制御する。
2020075287.tif 000002
【特許請求の範囲】
【請求項１】
Ｃｏｎｖｏｌｕｔｉｏｎ処理とＦｕｌｌＣｏｎｎｅｃｔ処理を行うディープラーニング用の演算処理装置であって、
入力特徴量マップデータを格納するデータ格納メモリと、前記データ格納メモリを管理および制御するデータ格納メモリ制御回路とを有するデータ格納メモリ管理部と；
フィルタ係数を格納するフィルタ係数格納メモリと、前記フィルタ係数格納メモリを管理および制御するフィルタ係数格納メモリ制御回路とを有するフィルタ係数格納メモリ管理部と；
前記入力特徴量マップデータおよび出力特徴量マップデータを格納する外部メモリと；
前記外部メモリから、前記入力特徴量マップデータを取得するデータ入力部と；
前記外部メモリから、前記フィルタ係数を取得するフィルタ係数入力部と；
入力Ｎ並列、出力Ｍ並列の構成（Ｎ、Ｍ≧１の正数）で、前記データ格納メモリから前記入力特徴量マップデータを取得し、前記フィルタ係数格納メモリから前記フィルタ係数を取得して、フィルタ処理、累積加算処理、非線形演算処理およびプーリング処理を行う演算部と；
前記演算部から出力されるＭ並列のデータを連結して、出力特徴量マップデータとして前記外部メモリに出力するデータ出力部と；
入力特徴量マップの各ピクセル単位で累積加算処理の途中結果を一時的に記録しておく累積加算結果格納メモリと、
有効データを受けてアドレスを生成し前記累積加算結果格納メモリに書き込む累積加算結果格納メモリ格納部と、
前記累積加算結果格納メモリから指定したデータを読み出す累積加算結果格納メモリ読み出し部と、
からなる累積加算結果格納メモリ管理部と；
前記演算処理装置内を制御するコントローラと；
を有し、
前記演算部は、
Ｎ並列でフィルタ処理を実行するフィルタ演算部と、
前記フィルタ演算部の演算結果を全て累積加算する第１加算器と、
前記第１加算器の累積加算処理の結果を後段で累積加算する第２加算器と、
前記第２加算器の累積加算処理の結果を保持するフリップフロップと、
前記演算部内を制御する演算制御部と、
を有し、
前記演算制御部は、出力特徴量マップの特定のピクセルを算出するためのフィルタ処理および累積加算処理の途中で、フィルタ処理および累積加算処理に必要な全ての入力特徴量マップデータを前記データ格納メモリに格納することができない場合、または、フィルタ処理および累積加算処理に必要な全てのフィルタ係数を前記フィルタ係数格納メモリに格納することができない場合に、一旦途中結果を前記累積加算結果格納メモリに格納して別のピクセルの処理を行い、すべてのピクセルについて累積加算処理の途中結果を前記累積加算結果格納メモリに格納し終えたら最初のピクセルに戻り、前記累積加算結果格納メモリに格納した値を読み出して累積加算処理の初期値とし、累積加算処理の続きを実行するよう制御することを特徴とする演算処理装置。
【請求項２】
前記演算制御部は、前記フィルタ係数格納メモリに格納されているすべてのフィルタ係数で実行可能なフィルタ処理および累積加算処理を終えた時に、一旦途中結果を前記累積加算結果格納メモリに格納し、前記フィルタ係数格納メモリに格納されているフィルタ係数が更新されたら累積加算処理の続きを実行するように制御する
請求項１に記載の演算処理装置。
【請求項３】
前記演算制御部は、入力可能なすべての入力特徴量マップデータで実行可能なすべてのフィルタ処理および累積加算処理を終えた時に、一旦途中結果を前記累積加算結果格納メモリに格納し、前記データ格納メモリに格納されている入力特徴量マップデータが更新されたら累積加算処理の続きを実行するように制御する
請求項１または２に記載の演算処理装置。
【請求項４】
前記累積加算結果格納メモリ管理部は、
前記累積加算結果格納メモリから累積加算途中結果を読み出して前記外部メモリに書き出す累積加算結果格納メモリ読み出し部と、
前記外部メモリから累積加算途中結果を読み込んで前記累積加算結果格納メモリに格納する累積加算結果格納メモリ格納部と、
を有し、
前記演算制御部は、出力特徴量マップの特定のピクセルを算出するためのフィルタ処理および累積加算処理の途中で、途中結果を前記累積加算結果格納メモリから前記外部メモリに書き出し、前記データ格納メモリに格納されている入力特徴量マップデータまたは前記フィルタ係数格納メモリに格納されているフィルタ係数を更新して累積加算処理を続きから実施する場合は、前記外部メモリに書き出した累積加算途中結果を前記外部メモリから前記累積加算結果格納メモリに読み込んで累積加算処理の続きを実行するように制御する
請求項１から３のいずれか１項に記載の演算処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置、より詳しくは、畳み込みニューラルネットワークを用いたディープラーニングを行う演算処理装置の回路構成に関する。
【背景技術】
【０００２】
従来、複数の処理層が階層的に接続されたニューラルネットワークを用いて演算を実行する演算処理装置がある。特に画像認識を行う演算処理装置では、畳み込みニューラルネットワーク（Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ、以下ＣＮＮという）を用いたディープラーニングが広く行われている。【０００３】
図１８は、ＣＮＮを用いたディープラーニングによる画像認識の処理の流れを示す図である。ＣＮＮを用いたディープラーニングによる画像認識では、入力された画像データ（ピクセルデータ）に対して、ＣＮＮの複数の処理層における処理が順次施されることにより、画像に含まれる対象物が認識された最終的な演算結果データが得られる。【０００４】
ＣＮＮの処理層は、畳み込み演算処理、非線形処理、縮小処理（プーリング処理）等を含むＣｏｎｖｏｌｕｔｉｏｎ処理を行うＣｏｎｖｏｌｕｔｉｏｎ層（畳み込み層）と、全ての入力（ピクセルデータ）にフィルタ係数を乗じて累積加算するＦｕｌｌＣｏｎｎｅｃｔ処理を行うＦｕｌｌＣｏｎｎｅｃｔ層（全結合層）とに大きく分類される。ただし、ＦｕｌｌＣｏｎｎｅｃｔ層がない畳み込みニューラルネットワークも存在する。【０００５】
ＣＮＮを用いたディープラーニングによる画像認識は以下のようにして行われる。まず、画像データに対して、ある領域を抽出してフィルタ係数（フィルタ係数）の異なる複数のフィルタを乗じて特徴量マップ（Ｆｅａｔｕｒｅ  Ｍａｐ、ＦＭ）を作成する畳み込み演算処理（Ｃｏｎｖｏｌｕｔｉｏｎ処理）と、特徴量マップの一部領域を縮小する縮小処理（プーリング処理）の組合せを１つの処理層として、これを複数回（複数の処理層において）行う。これらの処理が、畳み込み層（Ｃｏｎｖｏｌｕｔｉｏｎ層）の処理である。【０００６】
プーリング処理は、近傍４ｐｉｘの最大値を抽出して１／２×１／２に縮小するｍａｘ  ｐｏｏｌｉｎｇの他、近傍４ｐｉｘの平均値を求める（抽出ではない）ａｖｅｒａｇｅ  ｐｏｏｌｉｎｇなどのバリエーションがある。【０００７】
図１９は、Ｃｏｎｖｏｌｕｔｉｏｎ処理の流れを示す図である。まず、入力された画像データに対して、夫々にフィルタ係数の異なるフィルタ処理を行い、これらを全て累積加算することにより、１ピクセルに対応するデータができる。作成されたデータに対し、非線形変換および縮小処理（プーリング処理）を行い、以上の処理を画像データの全ピクセルに対して行うことで、出力特徴量マップ（ｏＦＭ）が1面分生成される。これを複数回繰り返すことでｏＦＭを複数面生成する。実際の回路では上記全てがパイプライン処理される。【０００８】
さらに、上記出力特徴量マップ（ｏＦＭ）を入力特徴量マップ（ｉＦＭ）として、さらにフィルタ係数の異なるフィルタ処理を行うことにより、上述のＣｏｎｖｏｌｕｔｉｏｎ処理を繰り返す。このようにして複数回のＣｏｎｖｏｌｕｔｉｏｎ処理を行い、出力特徴量マップ（ｏＦＭ）を得る。【０００９】
Ｃｏｎｖｏｌｕｔｉｏｎ処理が進み、ＦＭをある程度まで小さくしたところで、画像データを１次元のデータ列と読み変える。１次元のデータ列の各データに対して各々異なる係数を乗じて累積加算を行うＦｕｌｌＣｏｎｎｅｃｔ処理を複数回（複数の処理層において）行う。これらの処理が、全結合層（ＦｕｌｌＣｏｎｎｅｃｔ層）の処理である。【００１０】
そして、ＦｕｌｌＣｏｎｎｅｃｔ処理の後、最終的な演算結果である被写体推定結果として、画像に含まれる対象物が検出された確率（被写体検出の確率）が出力される。図１８の例では、最終的な演算結果データとして、犬が検出された確率は０．０１（１％）、猫が検出された確率は０．０４（４％）、ボートが検出された確率は０．９４（９４％）、鳥が検出された確率は０．０２（２％）である。【００１１】
このようにして、ＣＮＮを用いたディープラーニングによる画像認識は、高い認識率を実現できる。しかし、検出する被写体の種類を増やしたり、被写体検出精度を上げるためには、ネットワークを大きくする必要がある。そうするとデータ格納バッファやフィルタ係数格納バッファが必然的に大容量になるが、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）にはあまり大容量のメモリを搭載できない。【００１２】
また、画像認識処理におけるディープラーニングでは、（Ｋ−１）層目とＫ層目におけるＦＭ（Ｆｅａｔｕｒｅ  Ｍａｐ）サイズとＦＭ数（ＦＭの面数）の関係は次式のような関係になる場合が多く、回路としてメモリサイズを決定する際には最適化が困難である。【００１３】
ＦＭサイズ［Ｋ］＝１／４×ＦＭサイズ［Ｋ−１］
ＦＭ数［Ｋ］＝２×ＦＭ数［Ｋ−１］【００１４】
例えば、ＣＮＮのバリエーションの１つであるＹｏｌｏ＿ｖ２に対応可能な回路のメモリのサイズを考える場合、ＦＭサイズとＦＭ数の最大値だけで決定しようとすると１ＧＢ程度必要となる。実際には、ＦＭ数とＦＭサイズは反比例的関係があるため、計算上メモリは３ＭＢ程度あれば十分ではあるが、電池駆動のモバイル機器に搭載するＡＳＩＣとしては、できるだけ消費電力やチップコストを小さくしたいニーズがあるため、メモリを極力小さくする工夫が必要となってくる。【００１５】
このような問題があることから、ＣＮＮは一般的には高性能ＰＣやＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を用いたソフトウエア処理で実装される。しかし、高速処理を実現するためには処理の重い部分をハードウェアで構成する必要がある。このようなハードウェア実装の例が、特許文献１に記載されている。【００１６】
特許文献１は、複数の演算処理ユニットの中にそれぞれ、演算ブロックと複数のメモリを搭載することにより演算処理の効率化を図るようにした演算処理装置を開示している。演算ブロックとそれと対になるバッファとは、中継部を介して畳み込み演算処理を並列に実行すると共に、演算部間で累積加算データを授受する。その結果、入力のネットワークが大きくても一度に活性化処理への入力を作成できる。
【先行技術文献】
【特許文献】
【００１７】
【特許文献１】特開２０１７−１５１６０４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１８】
特許文献１の構成は、上下関係のある（方向性を有する）非対称な構成であり、累積加算途中結果が演算ブロックすべてをカスケード接続して通過する。そのため、大きなネットワークに対応しようとすると、累積加算途中結果が何度も中継部と冗長データ保持部を経由しなければならず、長いカスケード接続パスが形成され、処理時間が掛かってしまう。また、巨大なネットワークを細かく分割した場合は、同じデータまたはフィルタ係数をＤＲＡＭ（外部メモリ）から複数回、読み込みする（再読み込みする）ことにより、ＤＲＡＭへのアクセス量が増える可能性がある。しかし、特許文献１にはこのような可能性を回避するための具体的な制御方法の記載がなく、考慮されていない。【００１９】
上述の事情を踏まえ、本発明は、フィルタ係数が多すぎてＷＢＵＦに入りきらない時や、ｉＦＭ数が多すぎてＩＢＵＦに入りきらない時に、一度に計算できなくなるという問題を回避することができる演算処理装置を提供することを目的とする。
【課題を解決するための手段】
【００２０】
本発明の第一の態様は、Ｃｏｎｖｏｌｕｔｉｏｎ処理とＦｕｌｌＣｏｎｎｅｃｔ処理を行うディープラーニング用の演算処理装置であって、入力特徴量マップデータを格納するデータ格納メモリと、前記データ格納メモリを管理および制御するデータ格納メモリ制御回路とを有するデータ格納メモリ管理部と；フィルタ係数を格納するフィルタ係数格納メモリと、前記フィルタ係数格納メモリを管理および制御するフィルタ係数格納メモリ制御回路とを有するフィルタ係数格納メモリ管理部と；前記入力特徴量マップデータおよび出力特徴量マップデータを格納する外部メモリと；前記外部メモリから、前記入力特徴量マップデータを取得するデータ入力部と；前記外部メモリから、前記フィルタ係数を取得するフィルタ係数入力部と；入力Ｎ並列、出力Ｍ並列の構成（Ｎ、Ｍ≧１の正数）で、前記データ格納メモリから前記入力特徴量マップデータを取得し、前記フィルタ係数格納メモリから前記フィルタ係数を取得して、フィルタ処理、累積加算処理、非線形演算処理およびプーリング処理を行う演算部と；前記演算部から出力されるＭ並列のデータを連結して、出力特徴量マップデータとして前記外部メモリに出力するデータ出力部と；入力特徴量マップの各ピクセル単位で累積加算処理の途中結果を一時的に記録しておく累積加算結果格納メモリと、有効データを受けてアドレスを生成し前記累積加算結果格納メモリに書き込む累積加算結果格納メモリ格納部と、前記累積加算結果格納メモリから指定したデータを読み出す累積加算結果格納メモリ読み出し部と、からなる累積加算結果格納メモリ管理部と；前記演算処理装置内を制御するコントローラと；を有し、前記演算部は、Ｎ並列でフィルタ処理を実行するフィルタ演算部と、前記フィルタ演算部の演算結果を全て累積加算する第１加算器と、前記第１加算器の累積加算処理の結果を後段で累積加算する第２加算器と、前記第２加算器の累積加算処理の結果を保持するフリップフロップと、前記演算部内を制御する演算制御部と、を有し、前記演算制御部は、出力特徴量マップの特定のピクセルを算出するためのフィルタ処理および累積加算処理の途中で、フィルタ処理および累積加算処理に必要な全ての入力特徴量マップデータを前記データ格納メモリに格納することができない場合、または、フィルタ処理および累積加算処理に必要な全てのフィルタ係数を前記フィルタ係数格納メモリに格納することができない場合に、一旦途中結果を前記累積加算結果格納メモリに格納して別のピクセルの処理を行い、すべてのピクセルについて累積加算処理の途中結果を前記累積加算結果格納メモリに格納し終えたら最初のピクセルに戻り、前記累積加算結果格納メモリに格納した値を読み出して累積加算処理の初期値とし、累積加算処理の続きを実行するよう制御することを特徴とする。【００２１】
前記演算制御部は、前記フィルタ係数格納メモリに格納されているすべてのフィルタ係数で実行可能なフィルタ処理および累積加算処理を終えた時に、一旦途中結果を前記累積加算結果格納メモリに格納し、前記フィルタ係数格納メモリに格納されているフィルタ係数が更新されたら累積加算処理の続きを実行するように制御してもよい。【００２２】
前記演算制御部は、入力可能なすべての入力特徴量マップデータで実行可能なすべてのフィルタ処理および累積加算処理を終えた時に、一旦途中結果を前記累積加算結果格納メモリに格納し、前記データ格納メモリに格納されている入力特徴量マップデータが更新されたら累積加算処理の続きを実行するように制御してもよい。【００２３】
前記累積加算結果格納メモリ管理部は、前記累積加算結果格納メモリから累積加算途中結果を読み出して前記外部メモリに書き出す累積加算結果格納メモリ読み出し部と、前記外部メモリから累積加算途中結果を読み込んで前記累積加算結果格納メモリに格納する累積加算結果格納メモリ格納部と、を有し、前記演算制御部は、出力特徴量マップの特定のピクセルを算出するためのフィルタ処理および累積加算処理の途中で、途中結果を前記累積加算結果格納メモリから前記外部メモリに書き出し、前記データ格納メモリに格納されている入力特徴量マップデータまたは前記フィルタ係数格納メモリに格納されているフィルタ係数を更新して累積加算処理を続きから実施する場合は、前記外部メモリに書き出した累積加算途中結果を前記外部メモリから前記累積加算結果格納メモリに読み込んで累積加算処理の続きを実行するように制御してもよい。
【発明の効果】
【００２４】
本発明の各態様に係る演算処理装置によれば、ｉＦＭサイズのピクセル単位で、累積加算の途中結果を一時保存することができるので、ＩＢＵＦに全てのｉＦＭデータが入りきらなくなったり、ＷＢＵＦにフィルタ係数が入りきらなくなったりすることで一度に計算できなくなるという問題を回避することができる。
【図面の簡単な説明】
【００２５】
【図１】Ｃｏｎｖｏｌｕｔｉｏｎ処理によって、入力特徴量マップ（ｉＦＭ）から出力特徴量マップ（ｏＦＭ）を得るイメージ図である。
【図２】Ｃｏｎｖｏｌｕｔｉｏｎ処理において、フィルタ係数を格納しているＷＢＵＦ（フィルタ係数格納メモリ）が不足している場合を示すイメージ図である。
【図３】本発明の第１実施形態に係る演算処理装置における、Ｃｏｎｖｏｌｕｔｉｏｎ処理においてフィルタ係数を途中で１回更新する場合の動作を示すイメージ図である。
【図４】本発明の第１実施形態に係る演算処理装置の全体構成を示すブロック図である。
【図５】本発明の第１実施形態に係る演算処理装置における、ＳＢＵＦ管理部の構成を示すブロック図である。
【図６】本発明の第１実施形態に係る演算処理装置の演算部の構成を示す図である。
【図７Ａ】本発明の第１実施形態に係る演算処理装置において、演算制御部が行う制御の流れを示すフローチャートである。
【図７Ｂ】図７ＡのステップＳ２におけるフィルタ係数更新制御の流れを示すフローチャートである。
【図８】本発明の第２実施形態において、ｉＦＭデータを分割して演算部に入力するイメージ図である。
【図９】本発明の第２実施形態に係る演算処理装置における、Ｃｏｎｖｏｌｕｔｉｏｎ処理においてｉＦＭデータを途中でｎ１回更新する場合の動作を示すイメージ図である。
【図１０Ａ】本発明の第２実施形態に係る演算処理装置において、演算制御部が行う制御を示すフローチャートである。
【図１０Ｂ】図１０ＡのステップＳ２２におけるｉＦＭデータ更新制御の流れを示すフローチャートである。
【図１１】本発明の第３実施形態に係る演算処理装置において、ｉＦＭデータおよびフィルタ係数を途中で更新するイメージ図である。
【図１２Ａ】本発明の第３実施形態に係る演算処理装置において、演算制御部が行う制御を示すフローチャートである。
【図１２Ｂ】図１２ＡのステップＳ４２におけるｉＦＭデータ更新制御およびステップＳ４４におけるフィルタ係数更新制御の流れを示すフローチャートである。
【図１３】１つの出力チャネルが生成しなければならないｏＦＭ数ｍ＝２のケースにおいて、２つのＳＢＵＦをそれぞれのｏＦＭ用として用意した場合の、Ｃｏｎｖｏｌｕｔｉｏｎ処理イメージを示す図である。
【図１４】本発明の第４実施形態に係る演算処理装置におけるＣｏｎｖｏｌｕｔｉｏｎ処理のイメージを示す図である。
【図１５】本発明の第４実施形態に係る演算処理装置の全体構成を示すブロック図である。
【図１６】本発明の第４実施形態に係る演算処理装置におけるＳＢＵＦ管理部の構成を示すブロック図である。
【図１７Ａ】本発明の第４実施形態に係る演算処理装置において、演算制御部が行う制御を示すフローチャートである。
【図１７Ｂ】図１７ＡのステップＳ７２におけるｉＦＭデータ更新制御の流れを示すフローチャートである。
【図１７Ｃ】図１７ＡのステップＳ７６におけるフィルタ係数更新制御の流れを示すフローチャートである。
【図１７Ｄ】図１７ＡのステップＳ７４におけるＳＢＵＦ更新制御の流れを示すフローチャートである。
【図１７Ｅ】図１７ＡのステップＳ８２におけるＳＢＵＦ退避制御の流れを示すフローチャートである。
【図１８】ＣＮＮを用いたディープラーニングによる画像認識の処理の流れを示す図である。
【図１９】従来技術に係るＣｏｎｖｏｌｕｔｉｏｎ処理の流れを示す図である。
【発明を実施するための形態】
【００２６】
本発明の実施形態について、図面を用いて説明する。まず、本発明の実施形態の構成を採用する背景について説明する。
【００２７】
図１は、Ｃｏｎｖｏｌｕｔｉｏｎ処理によって、入力特徴量マップ（ｉＦＭ）から出力特徴量マップ（ｏＦＭ）を得るイメージ図である。ｉＦＭに、フィルタ処理、累積加算、非線形変換、プーリング（縮小）などの処理を施すことにより、ｏＦＭを得る。ｏＦＭの１ピクセル（１画素）を計算するのに必要な情報として、出力（ｏＦＭの１ピクセル）に対応するｉＦＭの座標の近傍にある全てのピクセルの情報（ｉＦＭデータおよびフィルタ係数）が必要である。
【００２８】
図２は、Ｃｏｎｖｏｌｕｔｉｏｎ処理において、フィルタ係数を格納しているＷＢＵＦ（フィルタ係数格納メモリ）が不足している場合を示すイメージ図である。図２の例では、６枚のｉＦＭの座標（Ｘ，Ｙ）の近傍にある９ピクセルの情報（ｉＦＭデータおよびフィルタ係数）から、ｏＦＭの座標（Ｘ，Ｙ）の１ピクセルのデータ（ｏＦＭデータ）を算出する。この際、ＩＢＵＦ（データ格納メモリ）から読み出した各々のｉＦＭデータに対して、ＷＢＵＦ（フィルタ係数格納メモリ）から読み出したフィルタ係数を掛けて累積加算する。
【００２９】
図２のように、ＷＢＵＦの大きさが小さい場合、全てのｉＦＭデータに対応するフィルタ係数をＷＢＵＦに格納することができない。図２の例では、ＷＢＵＦは、３枚のｉＦＭデータに対応するフィルタ係数しか格納することができない。この場合、前半の３枚のｉＦＭデータに各々対応するフィルタ係数を掛けて累積加算し、結果（累積加算結果）を一時的に記憶する（ステップ１）。次にＷＢＵＦに格納されているフィルタ係数を更新し（ステップ２）、後半の３枚のｉＦＭに各々対応するフィルタ係数を掛けてさらに累積加算する（ステップ３）。そして、（ステップ１）の累積加算結果と（ステップ３）の累積加算結果を足し合わせる。その後、非線形処理およびブーリング処理を施すことにより、ｏＦＭの座標（Ｘ，Ｙ）の１ピクセルのデータ（ｏＦＭデータ）を得る。
【００３０】
この場合、ｏＦＭの次の座標のピクセルのデータ（ｏＦＭデータ）を算出する際、ＷＢＵＦに格納されているフィルタ係数が更新されているため、ＷＢＵＦは再度、ＤＲＡＭからフィルタ係数を読み直す必要が生じる。このようなフィルタ係数の読み直しを、ピクセル数分行うため、ＤＲＡＭの帯域を消費し、電力的にも無駄が生じる。
【００３１】
（第１実施形態）
次に、本発明の第１実施形態について、図面を用いて説明する。図３は、本実施形態における、Ｃｏｎｖｏｌｕｔｉｏｎ処理においてフィルタ係数を途中で１回更新する場合の動作を示すイメージ図である。Ｃｏｎｖｏｌｕｔｉｏｎ処理は、入力される全てのｉＦＭデータに異なるフィルタ係数をかけ、それらを全て積算する事でｏＦＭの１ピクセルのデータ（ｏＦＭデータ）が算出される。
【００３２】
ｉＦＭ数（枚数）＝Ｎ、ｏＦＭ数（枚数）＝Ｍ、フィルタカーネルサイズを３×３（＝９）とすると、フィルタ係数の総要素数は９×Ｎ×Ｍとなる。Ｎ、Ｍはネットワークによって変わるが、数千万を超える巨大な大きさとなる場合がある。このような場合、全てのフィルタ係数を保存できる巨大なＷＢＵＦを置くことは不可能なので、途中でＷＢＵＦに格納されるデータを更新する必要がある。しかし、ＷＢＵＦのサイズがｏＦＭの１ピクセルのデータ（ｏＦＭデータ）を形成する事すらできない小さい容量の場合（具体的には９Ｎより小さい場合）、ｏＦＭのピクセル単位でフィルタ係数を読み直さなければならなくなり、非常に効率が悪い。
【００３３】
そこで本実施形態では、ｉＦＭのサイズ（ｉＦＭ１枚分）と同じ（または、より大きい）容量を持つＳＲＡＭ（以降ＳＢＵＦ（累積加算結果格納メモリ）と呼称）を用意する。そして、ＷＢＵＦに格納されているフィルタ係数で実行可能な全ての累積加算を行い、その途中結果（累積加算結果）を、ＳＢＵＦ（累積加算結果格納メモリ）にピクセル単位で書き込む（格納する）。図３の例では、前半の３枚のｉＦＭデータに各々対応するフィルタ係数を掛けて累積加算し、その途中結果を、ＳＢＵＦ（累積加算結果格納メモリ）に格納する。そして、ＷＢＵＦに格納されるフィルタ係数を更新して続きの累積加算（後半の３枚の累積加算）を開始する時は、ＳＢＵＦから取り出した値を累積加算初期値として、後半の３枚のｉＦＭデータに各々対応するフィルタ係数を掛けて累積加算する。そして、この累積加算結果に、非線形処理およびブーリング処理を施すことにより、ｏＦＭの１ピクセルのデータ（ｏＦＭデータ）を得る。
【００３４】
図４は、本実施形態に係る演算処理装置の全体構成を示すブロック図である。演算処理装置１は、コントローラ２と、データ入力部３と、フィルタ係数入力部４と、ＩＢＵＦ（データ格納メモリ）管理部５と、ＷＢＵＦ（フィルタ係数格納メモリ）管理部６と、演算部（演算ブロック）７と、データ出力部８と、ＳＢＵＦ（累積加算結果格納メモリ）管理部１１を備える。データ入力部３と、フィルタ係数入力部４と、データ出力部８は、バス１０を介して、ＤＲＡＭ（外部メモリ）９と接続されている。演算処理装置１は、入力特徴量マップ（ｉＦＭ）から出力特徴量マップ（ｏＦＭ）を生成する。
【００３５】
ＩＢＵＦ管理部５は、入力特徴量マップ（ｉＦＭ）データ格納用のメモリ（データ格納メモリ、ＩＢＵＦ）と、データ格納メモリの管理・制御回路（データ格納メモリ制御回路）を有する。ＩＢＵＦは、それぞれが複数のＳＲＡＭから構成される。
【００３６】
ＩＢＵＦ管理部５は、入力データ（ｉＦＭデータ）中の有効データ数をカウントして座標に変換し、さらにそれをＩＢＵＦアドレス（ＩＢＵＦにおけるアドレス）に変換し、データをデータ格納メモリに格納するとともに、所定の方法でｉＦＭデータをＩＢＵＦから取り出す。
【００３７】
ＷＢＵＦ管理部６は、フィルタ係数格納用のメモリ（フィルタ係数格納メモリ、ＷＢＵＦ）と、フィルタ係数格納メモリの管理・制御回路（フィルタ係数格納メモリ制御回路）を有する。ＷＢＵＦ管理部６は、ＩＢＵＦ管理部５のステータスを参照して、ＩＢＵＦ管理部５から取り出すデータに対応するフィルタ係数をＷＢＵＦから取り出す。
【００３８】
ＤＲＡＭ９は、ｉＦＭデータ、ｏＦＭデータおよびフィルタ係数を格納する。データ入力部３は、ＤＲＡＭ９から所定の方法で、入力特徴量マップ（ｉＦＭ）を取得し、ＩＢＵＦ（データ格納メモリ）管理部５に渡す。データ出力部８は、ＤＲＡＭ９に所定の方法で、出力特徴量マップ（ｏＦＭ）データを書き出す。具体的には、データ出力部８は、演算部７から出力されるＭ並列のデータを連結してＤＲＡＭ９に出力する。フィルタ係数入力部４は、ＤＲＡＭ９から所定の方法で、フィルタ係数を取得し、ＷＢＵＦ（フィルタ係数格納メモリ）管理部６に渡す。
【００３９】
図５は、ＳＢＵＦ管理部１１の構成を示すブロック図である。ＳＢＵＦ管理部１１は、ＳＢＵＦ（累積加算結果格納メモリ）格納部１１１と、ＳＢＵＦ（累積加算結果格納メモリ）１１２と、ＳＢＵＦ（累積加算結果格納メモリ）読み出し部１１３を備える。ＳＢＵＦ１１２は、ｉＦＭの各ピクセル単位（画素単位）で累積加算の途中結果を一時的に格納するためのバッファである。ＳＢＵＦ読み出し部１１３は、ＳＢＵＦ１１２から所望のデータ（累積加算結果）を読み出す。ＳＢＵＦ格納部１１１は、有効データ（累積加算結果）を受け取るとアドレスを生成してＳＢＵＦ１１２に書き込む。
【００４０】
演算部７は、ＩＢＵＦ（データ格納メモリ）管理部５からデータ、ＷＢＵＦ（フィルタ係数格納メモリ）管理部６からフィルタ係数を取得する。また、演算部７は、ＳＢＵＦ読み出し部１１３がＳＢＵＦ１１２から読み出したデータ（累積加算結果）を取得して、フィルタ処理・累積加算・非線形演算・プーリング処理等のデータ処理を行う。演算部７がデータ処理を施したデータ（累積加算結果）は、ＳＢＵＦ格納部１１１によって、ＳＢＵＦ１１２に格納される。コントローラ２は、回路全体の制御を行う。
【００４１】
ＣＮＮでは、複数の処理層において、必要な層数分の処理が繰り返し実行される。そして、演算処理装置１は最終出力データとして被写体推定結果を出力し、この最終出力データを、プロセッサ（回路でもよい）を用いて処理することにより被写体推定結果を得る。
【００４２】
図６は、本実施形態に係る演算処理装置の演算部７の構成を示す図である。演算部７の入力チャネル数はＮ（Ｎは１以上の正数）、すなわち入力データ（ｉＦＭデータ）はＮ次元であり、Ｎ次元の入力データが並列して処理される（入力Ｎ並列）。
【００４３】
演算部７の出力チャネル数はＭ（Ｍは１以上の正数）、すなわち出力データはＭ次元であり、Ｍ次元の入力データが並列して出力される（出力Ｍ並列）。図６に示すように、１つの層において、各チャネル（ｉｃｈ＿０〜ｉｃｈ＿Ｎ−１）ごとに、ｉＦＭデータ（ｄ＿０〜ｄ＿Ｎ−１）とフィルタ係数（ｋ＿０〜ｋ＿Ｎ−１）が入力され、１個のｏＦＭデータを出力する。この処理がＭ層、並行して行われ、Ｍ個のｏＦＭデータｏｃｈ＿０〜ｏｃｈ＿Ｍ−１が出力される。
【００４４】
このように、演算部７は、入力チャネル数をＮ、出力チャネル数をＭとして、並列度がＮ×Ｍとなる構成を取る。入力チャネル数Ｎおよび出力チャネル数Ｍの大きさは、ＣＮＮの大きさに応じて設定（変更）することができるので、処理性能や回路規模を勘案して適切に設定する。
【００４５】
演算部７は、演算部内各部の制御を行う演算制御部７１を備える。また、演算部７は、各層ごとに、フィルタ演算部７２と、第１加算器７３と、第２加算器７４と、ＦＦ（フリップフロップ）７５と、非線形変換部７６と、プーリング処理部７７を備える。面ごとに全く同じ回路が存在し、このような層がＭ個ある。
【００４６】
演算制御部７１が、演算部７の前段に対してリクエストを発行することにより、所定のデータがフィルタ演算部７２に入力される。フィルタ演算部７２は、内部で乗算器と加算器がＮ並列で同時に実行できるように構成されており、入力データのフィルタ処理を行い、フィルタ処理の結果をＮ並列で出力する。
【００４７】
第１加算器７３は、Ｎ並列で実行され出力されたフィルタ演算部７２におけるフィルタ処理の結果を全て加算する。すなわち、第１加算器７３は、空間方向の累積加算器ということができる。第２加算器７４は、時分割で入力される第１加算器７３の演算結果を累積加算する。すなわち、第２加算器７４は、時間方向の累積加算器ということができる。
【００４８】
本実施形態では、第２加算器７４は、初期値をゼロとして処理をスタートするケースと、ＳＢＵＦ（累積加算結果格納メモリ）１１２に格納されている値を初期値として処理をスタートするケースの２通りがある。すなわち、図６に示すスイッチボックス７８において、第２加算器７４の初期値の入力が、ゼロとＳＢＵＦ管理部１１から取得した値（累積加算途中結果）とで切り替わる。
【００４９】
この切り替えは、現在行われている累積加算のフェーズに基づいて、コントローラ２が行う。具体的には、１回の演算（フェーズ）ごとに、コントローラ２から演算制御部７１に演算結果の書き出し先などの指示が来て、演算が終了するとコントローラ２に演算終了を通知する。その際、コントローラ２は現在行われている累積加算のフェーズから判断して、第２加算器７４の初期値の入力を切り替える指示を行う。
【００５０】
演算制御部７１は、第２加算器７４およびＦＦ７５によって、ＷＢＵＦに格納されているフィルタ係数で実行可能な全ての累積加算を行い、その途中結果（累積加算途中結果）を、ＳＢＵＦ（累積加算結果格納メモリ）１１２にピクセル単位で書き込む（格納する）。第２加算器７４の後段には、累積加算の結果を保持するためのＦＦ７５が設けられている。
【００５１】
演算制御部７１は、ｏＦＭの特定のピクセル（画素）のデータ（ｏＦＭデータ）を算出するためのフィルタ処理・累積加算処理の途中で、一旦途中結果をＳＢＵＦ１１２に格納し、ｏＦＭの別のピクセルの処理を行うように制御する。そして、演算制御部７１は、全てのピクセルについて累積加算途中結果をＳＢＵＦ１１２に格納し終えたら最初のピクセルに戻り、ＳＢＵＦ１１２に格納した値を読み出して累積加算処理の初期値とし、累積加算の続きを実行するように制御する。
【００５２】
本実施形態では、累積加算途中結果をＳＢＵＦ１１２に格納するタイミングは、ＷＢＵＦに格納されている全てのフィルタ係数で実行可能なフィルタ・累積加算処理を終えた時とし、ＷＢＵＦに格納されているフィルタ係数が更新されたら処理の続きを実施するように制御する。
【００５３】
非線形変換部７６は、第２加算器７４およびＦＦ７５での累積加算の結果に対して、Ａｃｔｉｖａｔｅ関数などによる非線形演算処理を行う。具体的な実装は特に規定しないが、例えば折れ線近似により非線形演算処理を行う。
【００５４】
プーリング処理部７７は、非線形変換部７６から入力された複数のデータの中から最大値を選択出力（Ｍａｘ  Ｐｏｏｌｉｎｇ）する、平均値を算出（Ａｖｅｒａｇｅ  Ｐｏｏｌｉｎｇ）する、などのプーリング処理を行う。なお、非線形変換部７６とプーリング処理部７７における処理は、演算制御部７１により省略する事が可能となっている。
【００５５】
このような構成により、演算部７において、入力チャネル数Ｎおよび出力チャネル数Ｍの大きさは、ＣＮＮの大きさに応じて設定（変更）することができるので、処理性能や回路規模を勘案して適切に設定する。また、上下関係がないＮ並列処理のため、累積加算はトーナメント式であり、カスケード接続のような長いパスが生じず、レイテンシが短い。
【００５６】
図７Ａは、本実施形態に係る演算処理装置において、演算制御部が行う制御の流れを示すフローチャートである。Ｃｏｎｖｏｌｕｔｉｏｎ処理が開始されると、まず、「ｉＦＭ数ループ１」に入る（ステップＳ１）。そして、ＷＢＵＦに格納されているフィルタ係数を更新する（ステップＳ２）。次に、「ｉＦＭ数ループ２」に入る（ステップＳ３）。
【００５７】
次に、「演算部実行ループ」に入る（ステップＳ４）。そして、「係数格納判定」を行う（ステップＳ５）。「係数格納判定」では、ＷＢＵＦに格納されているフィルタ係数が所望のものか否かを判定する。「係数格納判定」結果がＯＫの場合は、「データ格納判定」に進む（ステップＳ６）。「係数格納判定」結果がＯＫでない場合は、「係数格納判定」結果がＯＫになるまで待機する。
【００５８】
ステップＳ６の「データ格納判定」では、ＩＢＵＦに格納されているｉＦＭデータが所望のものか否かを判定する。「データ格納判定」結果がＯＫの場合は、「演算部実行」に進む（ステップＳ７）。「データ格納判定」結果がＯＫでない場合は、「データ格納判定」結果がＯＫになるまで待機する。
【００５９】
ステップＳ７の「演算部実行」では、演算部がフィルタ・累積加算処理を行う。ＷＢＵＦに格納されている全てのフィルタ係数で実行可能なフィルタ・累積加算処理を終えると、フローは終了する。そうでない場合は、各ステップＳ１、Ｓ３、Ｓ４に戻って、処理を繰り返す。
【００６０】
ｉＦＭデータ数がｎ１×ｎ２×Ｎで、「ｉＦＭ数ループ１」（ステップＳ１）の回数＝ｎ１、「ｉＦＭ数ループ２」（ステップＳ３）の回数＝ｎ２と設定すると、第２加算器７４による累積加算はｎ２回、ＳＢＵＦ１１２に一旦中間結果として書き出す回数はｎ１回となる。
【００６１】
図７Ｂは、図７ＡのステップＳ２におけるフィルタ係数更新制御の流れを示すフローチャートである。まず、ステップＳ１１において、ＷＢＵＦにフィルタ係数を読み込む。そして、ステップＳ１２において、フィルタ係数の更新回数をカウントする。フィルタ係数更新が最初の場合はステップＳ１３に進み、累積加算初期値をゼロとする。フィルタ係数更新が最初でない場合はステップＳ１４に進み、累積加算初期値をＳＢＵＦに格納されている値とする。
【００６２】
次に、ステップＳ１５において、フィルタ係数の更新回数をカウントする。フィルタ係数更新が最後の場合はステップＳ１６に進み、データ（累積加算結果）の出力先を非線形変換部とする。フィルタ係数更新が最後でない場合はステップＳ１７に進み、データ（累積加算結果）の出力先をＳＢＵＦとする。
【００６３】
なお、フィルタ係数更新制御において、累積加算初期値（ステップＳ１３またはＳ１４）およびデータ（累積加算結果）の出力先（ステップＳ１６またはＳ１７）はステータス情報として演算部の演算制御部に渡され、演算制御部ではそのステータスに従って各部スイッチを制御する。
【００６４】
（第２実施形態）
本発明の第１実施形態は、フィルタ係数が多い場合（ＷＢＵＦが小さい場合）に対処するものであったが、フィルタ係数でなく、ｉＦＭデータが多すぎるケースでも同様の問題が起こる。すなわち、ｉＦＭデータの一部しかＩＢＵＦに格納できないケースを考える。このとき、ｏＦＭの１ピクセル（１画素）のデータ（ｏＦＭデータ）を算出するためにＩＢＵＦに格納されているｉＦＭデータを途中で更新すると、ｏＦＭの次のピクセルのデータ（ｏＦＭデータ）を算出するためにｉＦＭデータの読み直しが必要となってしまう。
【００６５】
なお、ｏＦＭの１ピクセルの処理に必要なｉＦＭデータは同一ピクセルの近傍情報だけである。しかし、たとえ局所領域だけをＩＢＵＦに格納するとしても、ネットワークが巨大化して数千のｉＦＭデータが必要となった場合や、規模削減のためにＩＢＵＦを極限まで削減する場合、データバッファ（ＩＢＵＦ）が不足し、ｉＦＭデータを分割して読み込むことは避けられない。
【００６６】
そこで、本発明の第２実施形態では、ｉＦＭデータが多すぎる場合（ＩＢＵＦが小さい場合）に対処できるようにする。なお、ＳＢＵＦ（累積加算結果格納メモリ）を設ける点は第１実施形態と同じである。図８は、本実施形態において、ｉＦＭデータを分割して演算部に入力するイメージ図である。
【００６７】
まずｉＦＭデータをｎ２×Ｎ面のデータバッファ（ＩＢＵＦ＿０〜ＩＢＵＦ＿Ｎ−１）に格納する。演算部で第２加算器７４（時間方向の累積加算器）による累積加算はｎ２回実施され、途中結果（累積加算途中結果）をＳＢＵＦ（累積加算結果格納メモリ）１１２に書き出す。全てのピクセルに対して途中結果を書き出したら、次のｉＦＭデータをｎ２×Ｎ面読みこみ、累積加算途中結果を初期値としてＳＢＵＦ１１２から取り出して累積加算演算を継続する。これをｎ１回繰り返すことでｎ×Ｎ（＝ｎ１×ｎ２×Ｎ）面の処理ができる。
【００６８】
図９は、本実施形態における、Ｃｏｎｖｏｌｕｔｉｏｎ処理においてｉＦＭデータを途中でｎ１回更新する場合の動作を示すイメージ図である。まず、最初のｉＦＭ群（ｉＦＭ＿０）の各データに対してフィルタ係数を掛けて累積加算を行い、途中結果（累積加算途中結果）をＳＢＵＦ（累積加算結果格納メモリ）１１２に書き出す。そして、最初のｉＦＭ群（ｉＦＭ＿０）を使用してできる全ての計算を行う。
【００６９】
次に、２番目のｉＦＭ群（ｉＦＭ＿１）をＩＢＵＦに読み込む。そして、累積加算途中結果を初期値としてＳＢＵＦ１１２から取り出して、２番目のｉＦＭ群（ｉＦＭ＿１）の各データに対してフィルタ係数を掛けて累積加算を行い、途中結果（累積加算途中結果）をＳＢＵＦ（累積加算結果格納メモリ）１１２に書き出す。そして、２番目のｉＦＭ群（ｉＦＭ＿１）を使用してできる全ての計算を行う。
【００７０】
同じ動作を、ｎ１番目のｉＦＭ群（ｉＦＭ＿ｎ１）まで繰り返し、得られた累積加算結果に対して、非線形処理・縮小処理などのプーリング処理を行うことにより、ｏＦＭの１ピクセル（１画素）のデータ（ｏＦＭデータ）が得られる。このように、できる所までの全ての計算を行う点は、第１実施形態と同じである。
【００７１】
本実施形態を行う構成は、図４〜図６に示す第１実施形態の構成と同じであるので説明を省略する。第１実施形態と異なる点として、第２加算器７４は、ＩＢＵＦに格納されているｉＦＭデータで実行可能な全ての累積加算を行い、その途中結果（累積加算途中結果）を、ＳＢＵＦ（累積加算結果格納メモリ）１１２にピクセル単位で書き込む（格納する）。
【００７２】
また、本実施形態では、累積加算途中結果をＳＢＵＦ１１２に格納するタイミングは、入力可能なｉＦＭデータで実行可能な全てのフィルタ・累積加算処理を終えた時とし、ｉＦＭデータが更新されたら処理の続きを実施するように制御する。
【００７３】
図１０Ａは、本実施形態に係る演算処理装置において、演算制御部が行う制御を示すフローチャートである。Ｃｏｎｖｏｌｕｔｉｏｎ処理が開始されると、まず、「ｉＦＭ数ループ１」に入る（ステップＳ２１）。そして、ＩＢＵＦに格納されているｉＦＭデータを更新する（ステップＳ２２）。次に、「ｉＦＭ数ループ２」に入る（ステップＳ２３）。
【００７４】
次に、「演算部実行ループ」に入る（ステップＳ２４）。そして、「係数格納判定」を行う（ステップＳ２５）。「係数格納判定」では、ＷＢＵＦに格納されているフィルタ係数が所望のものか否かを判定する。「係数格納判定」結果がＯＫの場合は、「データ格納判定」に進む（ステップＳ２６）。「係数格納判定」結果がＯＫでない場合は、「係数格納判定」結果がＯＫになるまで待機する。
【００７５】
ステップＳ２６の「データ格納判定」では、ＩＢＵＦに格納されているｉＦＭデータが所望のものか否かを判定する。「データ格納判定」結果がＯＫの場合は、「演算部実行」に進む（ステップＳ２７）。「データ格納判定」結果がＯＫでない場合は、「データ格納判定」結果がＯＫになるまで待機する。
【００７６】
ステップＳ２７の「演算部実行」では、演算部がフィルタ・累積加算処理を行う。ＩＢＵＦに格納されている全てのｉＦＭデータで実行可能なフィルタ・累積加算処理を終えると、フローは終了する。そうでない場合は、各ステップＳ２１、Ｓ２３、Ｓ２４に戻って、処理を繰り返す。
【００７７】
図１０Ｂは、図１０ＡのステップＳ２２におけるｉＦＭデータ更新制御の流れを示すフローチャートである。まず、ステップＳ３１において、ＩＢＵＦにｉＦＭデータを読み込む。そして、ステップＳ３２において、ｉＦＭデータの更新回数をカウントする。ｉＦＭデータ更新が最初の場合はステップＳ３３に進み、累積加算初期値をゼロとする。ｉＦＭデータ更新が最初でない場合はステップＳ３４に進み、累積加算初期値をＳＢＵＦに格納されている値とする。
【００７８】
次に、ステップＳ３５において、ｉＦＭデータの更新回数をカウントする。ｉＦＭデータ更新が最後の場合はステップＳ３６に進み、データ（累積加算結果）の出力先を非線形変換部とする。ｉＦＭデータ更新が最後でない場合はステップＳ３７に進み、データ（累積加算結果）の出力先をＳＢＵＦとする。
【００７９】
なお、ｉＦＭデータ更新制御において、累積加算初期値（ステップＳ３３またはＳ３４）およびデータ（累積加算結果）の出力先（ステップＳ３６またはＳ３７）はステータス情報として演算部の演算制御部に渡され、演算制御部ではそのステータスに従って各部スイッチを制御する。
【００８０】
（第３実施形態）
第１実施形態は全てのフィルタ係数がＷＢＵＦに格納できないケースであり、第２実施形態は全てのｉＦＭデータがＩＢＵＦに格納できないケースであったが、両方が同時に発生するケースもある。すなわち、第３実施形態として、全てのフィルタ係数がＷＢＵＦに格納できず、かつ、全てのｉＦＭデータがＩＢＵＦに格納できないケースについて説明する。
【００８１】
図１１は、本実施形態において、ｉＦＭデータおよびフィルタ係数を途中で更新するイメージ図である。図１１は、ｉＦＭ群数ｎ１＝２で、フィルタ係数更新が１回の例である。
【００８２】
まず、最初のｉＦＭ群（ｉＦＭ＿０）の各データに対してフィルタ係数を掛けて累積加算を行い、途中結果（累積加算途中結果）をＳＢＵＦ（累積加算結果格納メモリ）１１２に書き出す。
【００８３】
次にＷＢＵＦに格納されるフィルタ係数群を更新する。そして、累積加算途中結果を初期値としてＳＢＵＦ１１２から取り出して、ｉＦＭ群（ｉＦＭ＿０）の各データに対してフィルタ係数を掛けて累積加算を行い、途中結果（累積加算途中結果）をＳＢＵＦ１１２に書き出す。このように、最初のｉＦＭ群（ｉＦＭ＿０）を使用してできる全ての計算を行う。
【００８４】
次に、ＩＢＵＦに格納されるｉＦＭ群を更新し（２番目のｉＦＭ群（ｉＦＭ＿１）をＩＢＵＦに読み込み）、かつ、ＷＢＵＦに格納されるフィルタ係数群を更新する。そして、累積加算途中結果を初期値としてＳＢＵＦ１１２から取り出して、２番目のｉＦＭ群（ｉＦＭ＿１）の各データに対してフィルタ係数を掛けて累積加算を行い、途中結果（累積加算途中結果）をＳＢＵＦ（累積加算結果格納メモリ）１１２に書き出す。
【００８５】
次にＷＢＵＦに格納されているフィルタ係数を更新する。そして、累積加算途中結果を初期値としてＳＢＵＦ１１２から取り出して、２番目のｉＦＭ群（ｉＦＭ＿１）の各データに対してフィルタ係数を掛けて累積加算を行い、途中結果（累積加算途中結果）をＳＢＵＦ（累積加算結果格納メモリ）１１２に書き出す。このように、２番目のｉＦＭ群（ｉＦＭ＿１）を使用してできる全ての計算を行う。
【００８６】
このようにして得られた累積加算結果に対して、非線形処理・縮小処理などのプーリング処理を行うことにより、ｏＦＭの１ピクセル（１画素）のデータ（ｏＦＭデータ）が得られる。このように、できる所までの全ての計算を行う点は、第１実施形態および第２実施形態と同じである。
【００８７】
このように、本実施形態では、ＷＢＵＦとＩＢＵＦの両方が不足する場合にも対応できる。
【００８８】
図１２Ａは、本実施形態に係る演算処理装置において、演算制御部が行う制御を示すフローチャートである。図１２Ａは、フィルタ係数群の更新頻度がｉＦＭデータの更新頻度より多い場合の例を示す。更新頻度の多い方が内側のループになる。
【００８９】
Ｃｏｎｖｏｌｕｔｉｏｎ処理が開始されると、まず、「ｉＦＭ数ループ１」に入る（ステップＳ４１）。そして、ＩＢＵＦに格納されているｉＦＭデータを更新する（ステップＳ４２）。次に、「ｉＦＭ数ループ２」に入る（ステップＳ４３）。そして、ＷＢＵＦに格納されているフィルタ係数を更新する（ステップＳ４４）。次に、「ｉＦＭ数ループ３」に入る（ステップＳ４５）。
【００９０】
次に、「演算部実行ループ」に入る（ステップＳ４６）。そして、「係数格納判定」を行う（ステップＳ４７）。「係数格納判定」では、ＷＢＵＦに格納されているフィルタ係数が所望のものか否かを判定する。「係数格納判定」結果がＯＫの場合は、「データ格納判定」に進む（ステップＳ４８）。「係数格納判定」結果がＯＫでない場合は、「係数格納判定」結果がＯＫになるまで待機する。
【００９１】
ステップＳ４８の「データ格納判定」では、ＩＢＵＦに格納されているｉＦＭデータが所望のものか否かを判定する。「データ格納判定」結果がＯＫの場合は、「演算部実行」に進む（ステップＳ４９）。「データ格納判定」結果がＯＫでない場合は、「データ格納判定」結果がＯＫになるまで待機する。
【００９２】
ステップＳ４９の「演算部実行」では、演算部がフィルタ・累積加算処理を行う。ＩＢＵＦに格納されている全てのｉＦＭデータで実行可能なフィルタ・累積加算処理を終えると、フローは終了する。そうでない場合は、各ステップＳ４１、Ｓ４３、Ｓ４６に戻って、処理を繰り返す。
【００９３】
図１２Ｂは、図１２ＡのステップＳ４２におけるｉＦＭデータ更新制御およびステップＳ４４におけるフィルタ係数更新制御の流れを示すフローチャートである。
【００９４】
まず、外側のループであるｉＦＭデータの更新制御を行う。ステップＳ５１において、ＩＢＵＦにｉＦＭデータを読み込む。そして、ステップＳ５２において、ｉＦＭデータの更新回数をカウントする。ｉＦＭデータ更新が最初の場合はステップＳ５３に進み、値Ｓｉ１をゼロとする。ｉＦＭデータ更新が最初でない場合はステップＳ５４に進み、値Ｓｉ１をＳＢＵＦに格納されている値とする。
【００９５】
そして、ステップＳ５５において、ｉＦＭデータの更新回数をカウントする。ｉＦＭデータ更新が最後の場合はステップＳ５６に進み、Ｏｄ１を非線形変換部とする。ｉＦＭデータ更新が最後でない場合はステップＳ５７に進み、Ｏｄ１をＳＢＵＦとする。
【００９６】
次に、内側のループであるフィルタ係数の更新制御を行う。ステップＳ６１において、ＷＢＵＦにフィルタ係数を読み込む。そして、ステップＳ６２において、フィルタ係数の更新回数をカウントする。フィルタ係数更新が最初の場合はステップＳ６３に進み、累積加算初期値を値Ｓｉ１とする。フィルタ係数更新が最初でない場合はステップＳ６４に進み、累積加算初期値をＳＢＵＦに格納されている値とする。
【００９７】
そして、ステップＳ６５において、フィルタ係数の更新回数をカウントする。フィルタ係数更新が最後の場合はステップＳ６６に進み、データ（累積加算結果）の出力先をＯｄ１とする。フィルタ係数更新が最後でない場合はステップＳ６７に進み、データ（累積加算結果）の出力先をＳＢＵＦとする。
【００９８】
なお、ｉＦＭデータ更新制御およびフィルタ係数制御において、値Ｓｉ１（ステップＳ５３またはＳ５４）、Ｏｄ１（ステップＳ５６またはＳ５７）、累積加算初期値（ステップＳ６３またはＳ６４）およびデータ（累積加算結果）の出力先（ステップＳ６６またはＳ６７）はステータス情報として演算部の演算制御部に渡され、演算制御部ではそのステータスに従って各部スイッチを制御する。
【００９９】
上述の制御フローでは、ループ数をｎとして、ｎ＝ｎ１×ｎ２×ｎ３と分割している。ただし、「ｉＦＭ数ループ１」（ステップＳ４１）の回数＝ｎ１、「ｉＦＭ数ループ２」（ステップＳ４３）の回数＝ｎ２、「ｉＦＭ数ループ３」（ステップＳ４５）の回数＝ｎ３である。このとき、第２加算器７４による累積加算はｎ３回、ＳＢＵＦに一旦中間結果として書き出す回数はｎ１×ｎ２回となる。
【０１００】
このように、第１実施形態〜第３実施形態では、動画に対応する高速処理を可能とし、かつＣＮＮのフィルタサイズが変更可能である構成により、Ｃｏｎｖｏｌｕｔｉｏｎ処理とＦｕｌｌＣｏｎｎｅｃｔ処理のどちらにも容易に対応可能な構成において、入力Ｎ並列・出力Ｍ並列の回路で、ｉＦＭ数＞Ｎ、ｏＦＭ数＞Ｍでも対応する具体的な制御、さらに、Ｎ、Ｍが増大して分割入力が必要な程、ｉＦＭ数やパラメータ数が多くなるケースに対応する方法を示した。すなわち、ＣＮＮのネットワークが拡大しても対応することができる。
【０１０１】
（第４実施形態）
１つの出力チャネルから複数のｏＦＭを出力するケースにおいて、ｏＦＭ数が出力並列度Ｍを上回る面数を必要とする場合について考える。図１１に示す処理では、フィルタ係数およびｉＦＭを、ともにこの処理の間に更新し、１つのｏＦＭのデータを生成している。この処理において、さらに、１つの出力チャネルが生成しなければならないｏＦＭ数がｍ（ｍ＞１）であったとすると、図１１に示す処理をｍ回繰り返して処理する方法が考えられる。
【０１０２】
この方法では、ＩＢＵＦが順次書き換わっているので、ｉＦＭ全てをｍ回読み直す必要が生じる。このため、ＤＲＡＭアクセス量が多くなり、所望の性能を得られなくなる。そこで、複数のＳＢＵＦをそれぞれのｏＦＭ用に用意すれば、ＳＢＵＦは累積加算結果をｍ面分全て格納することができ、読み直しを防ぐことができるが、回路規模が増大してしまう。
【０１０３】
そのような例として、図１３は、１つの出力チャネルが生成しなければならないｏＦＭ数ｍ＝２のケースにおいて、２つのＳＢＵＦをそれぞれのｏＦＭ用として用意した場合の、Ｃｏｎｖｏｌｕｔｉｏｎ処理イメージを示す図である。２つのｏＦＭのデータ（ｏＦＭ０とｏＦＭ１）を生成するため、読み直しを防ぐには、ｏＦＭ０の累積加算結果を格納する第１のＳＢＵＦとｏＦＭ１の累積加算結果を格納する第２のＳＢＵＦが必要となる。
【０１０４】
まず、ｏＦＭ０データ用として、最初のｉＦＭ群（ｎ１＝０）の各データに対してフィルタ係数を掛けて累積加算を行い、累積加算途中結果を第１のＳＢＵＦに格納する。そして、ＷＢＵＦに格納されているフィルタ係数を更新した後、第１のＳＢＵＦの値を初期値として累積加算を行い、累積加算途中結果を第１のＳＢＵＦに格納する。
【０１０５】
次に、ｏＦＭ１データ用として、ＷＢＵＦに格納されているフィルタ係数を更新した後、最初のｉＦＭ群（ｎ１＝０）の各データに対してフィルタ係数を掛けて累積加算を行い、累積加算途中結果を第２のＳＢＵＦに格納する。そして、ＷＢＵＦに格納されているフィルタ係数を更新した後、第２のＳＢＵＦの値を初期値として累積加算を行い、累積加算途中結果を第２のＳＢＵＦに格納する。
【０１０６】
次に、２番目のｉＦＭ群（ｎ１＝１）をＩＢＵＦに読み込む。そして、ｏＦＭ０データ用として、第１のＳＢＵＦの値を初期値として、２番目のｉＦＭ群（ｎ１＝１）の各データに対してフィルタ係数を掛けて累積加算を行い、累積加算途中結果を第１のＳＢＵＦに格納する。そして、ＷＢＵＦに格納されているフィルタ係数を更新した後、第１のＳＢＵＦの値を初期値として累積加算を行い、累積加算途中結果を第１のＳＢＵＦに格納する。
【０１０７】
次に、ｏＦＭ１データ用として、ＷＢＵＦに格納されているフィルタ係数を更新した後、第２のＳＢＵＦの値を初期値として、２番目のｉＦＭ群（ｎ１＝１）の各データに対してフィルタ係数を掛けて累積加算を行い、累積加算途中結果を第２のＳＢＵＦに格納する。そして、ＷＢＵＦに格納されているフィルタ係数を更新した後、第２のＳＢＵＦの値を初期値として累積加算を行い、累積加算途中結果を第２のＳＢＵＦに格納する。
【０１０８】
このようにして得られた累積加算結果（最終的に、第１および第２のＳＢＵＦに格納された値）に対して、非線形処理・縮小処理などのプーリング処理を行うことにより、２つのｏＦＭのデータが得られる。
【０１０９】
このように、ｏＦＭ数が出力並列度Ｍを上回る面数を必要とする場合、読み直しを防ぐには、ＳＢＵＦは１つの出力チャネルが出力するｏＦＭの面数分のＳＢＵＦを設ける必要があり、これによりＳＲＡＭが増加し回路規模が増大する。
【０１１０】
そこで、第４実施形態として、ｏＦＭ数が増えても規模を増加せずに対応できる方法について説明する。図１４は、本実施形態に係る演算処理装置におけるＣｏｎｖｏｌｕｔｉｏｎ処理のイメージを示す図である。
【０１１１】
本実施形態においても、第１実施形態〜第３実施形態と同様に、ｉＦＭのサイズ（ｉＦＭ１枚分）と同じ（または、より大きい）容量を持つＳＢＵＦを用意する。すなわち、ＳＢＵＦは、累積加算の途中結果を、ｉＦＭ１面の全画素分、格納できる大きさである。
【０１１２】
本実施形態では、１つのｏＦＭ分の処理の途中で作成される累積加算途中結果を一旦ＤＲＡＭに書き出す。これをｍ面分行う。ｉＦＭを更新して累積加算を続きから実施する場合は、出力した累積加算途中結果をＤＲＡＭから読み込んで継続処理する。
【０１１３】
本実施形態の処理の流れを、図１４を用いて説明する。図１４は、図１３と同様に、２つのｏＦＭのデータ（ｏＦＭ０とｏＦＭ１）を生成する場合のＣｏｎｖｏｌｕｔｉｏｎ処理イメージを示す。
【０１１４】
まず、ｏＦＭ０データ用として、最初のｉＦＭ群（ｎ１＝０）の各データに対してフィルタ係数を掛けて累積加算を行い、累積加算途中結果をＳＢＵＦに格納する。そして、ＷＢＵＦに格納されているフィルタ係数を更新した後、ＳＢＵＦの値を初期値として累積加算を行い、累積加算途中結果をＳＢＵＦに格納する。ＳＢＵＦに格納された累積加算途中結果は、ｏＦＭ０データの中間結果として順次ＤＲＡＭに転送される。
【０１１５】
次に、ｏＦＭ１データ用として、ＷＢＵＦに格納されているフィルタ係数を更新した後、最初のｉＦＭ群（ｎ１＝０）の各データに対してフィルタ係数を掛けて累積加算を行い、累積加算途中結果をＳＢＵＦに格納する。そして、ＷＢＵＦに格納されているフィルタ係数を更新した後、ＳＢＵＦの値を初期値として累積加算を行い、累積加算途中結果をＳＢＵＦに格納する。ＳＢＵＦに格納された累積加算途中結果は、ｏＦＭ１データの中間結果として順次ＤＲＡＭに転送される。
【０１１６】
次に、２番目のｉＦＭ群（ｎ１＝１）をＩＢＵＦに読み込む。そして、ｏＦＭ０データ用として、ＤＲＡＭに格納されたｏＦＭ０データの中間結果を初期値とするためにＳＢＵＦに格納する。次に、ＳＢＵＦの値を初期値として２番目のｉＦＭ群（ｎ１＝１）の各データに対してフィルタ係数を掛けて累積加算を行い、累積加算途中結果をＳＢＵＦに格納する。そして、ＷＢＵＦに格納されているフィルタ係数を更新した後、ＳＢＵＦの値を初期値として累積加算を行い、累積加算途中結果をＳＢＵＦに格納する。このようにして得られた累積加算結果に対して、非線形処理・縮小処理などのプーリング処理を行うことにより、ｏＦＭ０のデータを得る。
【０１１７】
次に、ｏＦＭ１データ用として、ＷＢＵＦに格納されているフィルタ係数を更新した後、ＤＲＡＭに格納されたｏＦＭ１データの中間結果を初期値とするためにＳＢＵＦに格納する。次に、ＳＢＵＦの値を初期値として２番目のｉＦＭ群（ｎ１＝１）の各データに対してフィルタ係数を掛けて累積加算を行い、累積加算途中結果をＳＢＵＦに格納する。そして、ＷＢＵＦに格納されているフィルタ係数を更新した後、ＳＢＵＦの値を初期値として累積加算を行い、累積加算途中結果を第２のＳＢＵＦに格納する。このようにして得られた累積加算結果に対して、非線形処理・縮小処理などのプーリング処理を行うことにより、ｏＦＭ１のデータを得る。
【０１１８】
このように、ＤＲＡＭから取得したデータは一旦ＳＢＵＦに格納される。そうすると、ＳＢＵＦに初期値が入っているこれまでのケースと同じ状態になって、そこからこれまでどおり処理がスタートできる。処理の最後も、ＤＲＡＭに出す前に非線形処理等を施してしまう。
【０１１９】
本実施形態は、累積加算途中結果をＤＲＡＭに出力する事で処理速度が低下してしまうデメリットがある。しかし、本実施形態の処理は、ほぼ回路の増大なしに対応できるため、多少の性能劣化を許容できれば、最新のネットワークに対応することができる。
【０１２０】
次に、本実施形態の処理を行うための構成について説明する。図１５は、本実施形態に係る演算処理装置の全体構成を示すブロック図である。図１５に示す演算処理装置２０は、図１に示す第１実施形態の演算処理装置１と、ＳＢＵＦ（累積加算結果格納メモリ）管理部の構成が異なる。
【０１２１】
図１６は、本実施形態のＳＢＵＦ管理部２１の構成を示すブロック図である。ＳＢＵＦ管理部２１は、ＳＢＵＦ制御部２１０と、第１のＳＢＵＦ格納部２１１と、第２のＳＢＵＦ格納部２１２と、ＳＢＵＦ１１２と、第１のＳＢＵＦ読み出し部２１３と、第２のＳＢＵＦ読み出し部２１４とを備える。
【０１２２】
ＳＢＵＦ１１２は、ｉＦＭの各ピクセル単位（画素単位）で累積加算の途中結果を一時的に格納するためのバッファである。第１のＳＢＵＦ格納部２１１および第１のＳＢＵＦ読み出し部２１３は、ＤＲＡＭに対して値を読み書きするためのＩ／Ｆである。
【０１２３】
第１のＳＢＵＦ格納部２１１は、データ入力部３を介してＤＲＡＭ９からデータ（中間結果）を受け取ると、アドレスを生成してＳＢＵＦ１１２に書き込む。第２のＳＢＵＦ格納部２１２は、演算部７から有効データ（累積加算途中結果）を受け取ると、アドレスを生成してＳＢＵＦ１１２に書き込む。
【０１２４】
第１のＳＢＵＦ読み出し部２１３は、ＳＢＵＦ１１２から所望のデータ（中間結果）を読み出し、データ出力部８を介してＤＲＡＭ９に書き込む。第２のＳＢＵＦ読み出し部２１４は、ＳＢＵＦ１１２から所望のデータ（累積加算途中結果）を読み出し、累積加算の初期値として演算部７に出力する。
【０１２５】
演算部７の構成は、図６に示す第１実施形態の演算部の構成と同じであるので、説明を省略する。演算部７は、ＩＢＵＦ（データ格納メモリ）管理部５からデータ、ＷＢＵＦ（フィルタ係数格納メモリ）管理部６からフィルタ係数を取得する。また、演算部７は、第２のＳＢＵＦ読み出し部２１４がＳＢＵＦ１１２から読み出したデータ（累積加算途中結果）を取得して、フィルタ処理・累積加算・非線形演算・プーリング処理等のデータ処理を行う。演算部７がデータ処理を施したデータ（累積加算途中結果）は、第２のＳＢＵＦ格納部２１２によって、ＳＢＵＦ１１２に格納される。
【０１２６】
ＳＢＵＦ制御部２１０は、ＤＲＡＭからＳＢＵＦへの初期値（累積加算途中結果）のロード、およびＳＢＵＦからＤＲＡＭへの中間結果のライトを制御する。ＤＲＡＭからＳＢＵＦへの初期値のロードでは、上述のように、第１のＳＢＵＦ格納部２１１が、データ入力部３を介してＤＲＡＭ９からデータ（初期値）を受け取り、アドレスを生成してＳＢＵＦ１１２に書き込む。
【０１２７】
具体的には、ＤＲＡＭからの入力時には、ＳＢＵＦ制御部２１０は、上位のコントローラ２からｒｔｒｉｇ（読み込みトリガー）が入力されると、ＤＲＡＭ９からデータを取得しＳＢＵＦ１１２に取り込む。取り込みを完了したら、ＳＢＵＦ制御部２１０はｒｅｎｄ（読み取り終了）信号を上位のコントローラ２に送信して次の動作を待つ。
【０１２８】
ＳＢＵＦからＤＲＡＭへの結果のライトでは、上述のように、第１のＳＢＵＦ読み出し部２１３が、ＳＢＵＦ１１２から所望のデータ（中間結果）を読み出し、データ出力部８を介してＤＲＡＭ９に書き込む。具体的には、ＤＲＡＭへの出力時には、ＳＢＵＦ制御部２１０から上位のコントローラ２にｗｔｒｉｇ（書き込みトリガー）信号が出力されると、ＳＢＵＦ内のデータが全てデータ出力部８に出力され、終了したら、ＳＢＵＦ制御部２１０はｒｅｎｄ（読み取り終了）信号を上位のコントローラ２に送信して次の動作を待つ。
【０１２９】
また、ＳＢＵＦ制御部２１０は、第１のＳＢＵＦ格納部２１１、第２のＳＢＵＦ格納部２１２、第１のＳＢＵＦ読み出し部２１３、および第２のＳＢＵＦ読み出し部２１４を制御する。具体的には、ＳＢＵＦ制御部２１０は、指示を行う時にはｔｒｉｇ（トリガー）信号を出力し、処理が終了するとｅｎｄ（終了）信号を受け取る。
【０１３０】
データ入力部３は、ＳＢＵＦ管理部２１からのリクエストにより、累積加算途中結果（中間結果）をＤＲＡＭ９からロードする。データ出力部８は、ＳＢＵＦ管理部２１からのリクエストにより、累積加算途中結果（中間結果）をＤＲＡＭ９にライトする。
【０１３１】
このような構成により、入力・出力とも膨大なＦＭとなる場合への対応ができる。
【０１３２】
図１７Ａは、本実施形態に係る演算処理装置において、演算制御部が行う制御を示すフローチャートである。
【０１３３】
Ｃｏｎｖｏｌｕｔｉｏｎ処理が開始されると、まず、「ｉＦＭ数ループ１」に入る（ステップＳ７１）。そして、ＩＢＵＦに格納されているｉＦＭデータを更新する（ステップＳ７２）。次に、「ｏＦＭ数ループ」に入る（ステップＳ７３）。そして、ＳＢＵＦに格納されているデータを更新する（ステップＳ７４）。次に、「ｉＦＭ数ループ２」に入る（ステップＳ７５）。そして、ＷＢＵＦに格納されているフィルタ係数を更新する（ステップＳ７６）。次に、「ｉＦＭ数ループ３」に入る（ステップＳ７７）。
【０１３４】
次に、「演算部実行ループ」に入る（ステップＳ７８）。そして、「係数格納判定」を行う（ステップＳ７９）。「係数格納判定」では、ＷＢＵＦに格納されているフィルタ係数が所望のものか否かを判定する。「係数格納判定」結果がＯＫの場合は、「データ格納判定」に進む（ステップＳ８０）。「係数格納判定」結果がＯＫでない場合は、「係数格納判定」結果がＯＫになるまで待機する。
【０１３５】
ステップＳ８０の「データ格納判定」では、ＩＢＵＦに格納されているｉＦＭデータが所望のものか否かを判定する。「データ格納判定」結果がＯＫの場合は、「演算部実行」に進む（ステップＳ８１）。「データ格納判定」結果がＯＫでない場合は、「データ格納判定」結果がＯＫになるまで待機する。
【０１３６】
ステップＳ８１の「演算部実行」では、演算部がフィルタ・累積加算処理を行う。ＩＢＵＦに格納されている全てのｉＦＭデータで実行可能なフィルタ・累積加算処理を終えると、「ＳＢＵＦ退避」に進む（ステップＳ８２）。そうでない場合は、各ステップＳ７５、Ｓ７７、Ｓ７８に戻って、処理を繰り返す。
【０１３７】
ステップＳ８２の「ＳＢＵＦ退避」では、ＳＢＵＦに格納されているデータをＤＲＡＭに退避させる。その後、各ステップＳ７１、Ｓ７３に戻って、処理を繰り返し、全ての演算が終わるとフローは終了する。
【０１３８】
図１７Ｂは、図１７ＡのステップＳ７２におけるｉＦＭデータ更新制御の流れを示すフローチャートである。まず、ステップＳ９１において、ＩＢＵＦにｉＦＭデータを読み込む。そして、ステップＳ９２において、ｉＦＭデータの更新回数をカウントする。ｉＦＭデータ更新が最初の場合はステップＳ９３に進み、値Ｓｉ１をゼロとする。ｉＦＭデータ更新が最初でない場合はステップＳ９４に進み、値Ｓｉ１をＳＢＵＦに格納されている値とする。
【０１３９】
そして、ステップＳ９５において、ｉＦＭデータの更新回数をカウントする。ｉＦＭデータ更新が最後の場合はステップＳ９６に進み、Ｏｄ１を非線形変換部とする。ｉＦＭデータ更新が最後でない場合はステップＳ９７に進み、Ｏｄ１をＳＢＵＦとする。
【０１４０】
図１７Ｃは、図１７ＡのステップＳ７６におけるフィルタ係数更新制御の流れを示すフローチャートである。まず、ステップＳ１０１において、ＷＢＵＦにフィルタ係数を読み込む。そして、ステップＳ１０２において、フィルタ係数の更新回数をカウントする。フィルタ係数更新が最初の場合はステップＳ１０３に進み、累積加算初期値を値Ｓｉ１とする。フィルタ係数更新が最初でない場合はステップＳ１０４に進み、累積加算初期値をＳＢＵＦに格納されている値とする。
【０１４１】
そして、ステップＳ１０５において、フィルタ係数の更新回数をカウントする。フィルタ係数更新が最後の場合はステップＳ１０６に進み、データ（累積加算結果）の出力先をＯｄ１とする。フィルタ係数更新が最後でない場合はステップＳ１０７に進み、データ（累積加算結果）の出力先をＳＢＵＦとする。
【０１４２】
なお、図１７ＢのｉＦＭデータ更新制御および図１７Ｃのフィルタ係数制御において、値Ｓｉ１（ステップＳ９３またはＳ９４）、Ｏｄ１（ステップＳ９６またはＳ９７）、累積加算初期値（ステップＳ１０３またはＳ１０４）およびデータ（累積加算結果）の出力先（ステップＳ１０６またはＳ１０７）はステータス情報として演算部の演算制御部に渡され、演算制御部ではそのステータスに従って各部スイッチを制御する。
【０１４３】
図１７Ｄは、図１７ＡのステップＳ７４におけるＳＢＵＦ更新制御の流れを示すフローチャートである。ステップＳ１１１において、ｉＦＭループ１の回数を判定する。ｉＦＭループ１が最初の場合は処理を行わない（終了する）。ｉＦＭループ１が最初でない場合はステップＳ１１２に進み、ＤＲＡＭからＳＢＵＦ値をリードする。
【０１４４】
図１７Ｅは、図１７ＡのステップＳ８２におけるＳＢＵＦ退避制御の流れを示すフローチャートである。ステップＳ１２１において、ｉＦＭループ１の回数を判定する。ｉＦＭループ１が最後の場合は処理を行わない（終了する）。ｉＦＭループ１が最後でない場合はステップＳ１２２に進み、ＳＢＵＦ値をＤＲＡＭにライトする。
【０１４５】
上述の制御フローでは、ループ数をｎとして、ｎ＝ｎ１×ｎ２×ｎ３と分割している。ただし、「ｉＦＭ数ループ１」（ステップＳ７１）の回数＝ｎ１、「ｉＦＭ数ループ２」（ステップＳ７５）の回数＝ｎ２、「ｉＦＭ数ループ３」（ステップＳ７７）の回数＝ｎ３である。このとき、第２加算器７４による累積加算はｎ３回、ＳＢＵＦに一旦中間結果として書き出す回数はｎ２回、ＤＲＡＭに中間結果を書き出す回数はｎ１回となる。
【０１４６】
図１７Ａの制御フローは、フィルタ係数群の更新頻度がｉＦＭ群の更新頻度よりも多いことを前提としている。逆に、フィルタ係数群の更新頻度がｉＦＭ群の更新頻度よりも少ないことはないとする。なぜなら、ｉＦＭ群を先に更新してしまうと、フィルタ係数を更新したときにｉＦＭ群を再度読み直さなければならなくなるためである。
【０１４７】
以上、本発明の一実施形態について説明したが、本発明の技術範囲は上記実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲において構成要素の組み合わせを変えたり、各構成要素に種々の変更を加えたり、削除したりすることができる。
【０１４８】
各構成要素は、それぞれの構成要素に係る機能や処理を説明するためのものである。複数の構成要素に係る機能や処理を、１つの構成（回路）が同時に実現してもよい。
【０１４９】
各構成要素は、それぞれもしくは全体として、１個又は複数のプロセッサ、論理回路、メモリ、入出力インタフェース及びコンピュータ読み取り可能な記録媒体などからなるコンピュータで実現するようにしてもよい。その場合、各構成要素もしくは全体の機能を実現するためのプログラムを記録媒体に記録しておき、記録されたプログラムをコンピュータシステムに読み込ませ、実行することによって、上述した種々の機能や処理を実現してもよい。
【０１５０】
この場合、例えば、プロセッサは、ＣＰＵ、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）、およびＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の少なくとも１つである。例えば、論理回路は、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）およびＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）の少なくとも１つである。
【０１５１】
また、ここでいう「コンピュータシステム」とは、ＯＳや周辺機器などのハードウェアを含むものであってもよい。また、「コンピュータシステム」は、ＷＷＷシステムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、フラッシュメモリなどの書き込み可能な不揮発性メモリ、ＣＤ−ＲＯＭなどの可搬媒体、コンピュータシステムに内蔵されるハードディスクなどの記憶装置をいう。
【０１５２】
さらに「コンピュータ読み取り可能な記録媒体」とは、インターネットなどのネットワークや電話回線などの通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ（例えばＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））のように、一定時間プログラムを保持しているものも含むものとする。
【０１５３】
また、上記プログラムは、このプログラムを記憶装置などに格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネットなどのネットワーク（通信網）や電話回線などの通信回線（通信線）のように情報を伝送する機能を有する媒体をいう。また、上記プログラムは、前述した機能の一部を実現するためのものであってもよい。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現するもの、いわゆる差分ファイル（差分プログラム）であってもよい。
【産業上の利用可能性】
【０１５４】
本発明は、畳み込みニューラルネットワークを用いたディープラーニングを行う演算処理装置に広く適用できる。
【符号の説明】
【０１５５】
１、２０  演算処理装置
２  コントローラ
３  データ入力部
４  フィルタ係数入力部
５  ＩＢＵＦ管理部（データ格納メモリ管理部）
６  ＷＢＵＦ管理部（フィルタ係数格納メモリ管理部）
７  演算部
８  データ出力部
９  ＤＲＡＭ（外部メモリ）
１０  バス
１１、２１  ＳＢＵＦ管理部（累積加算結果格納メモリ管理部）
７１  演算制御部
７２  フィルタ演算部
７３  第１加算器
７４  第２加算器
７５  ＦＦ（フリップフロップ）
７６  非線形変換部
７７  プーリング処理部
１１１  ＳＢＵＦ格納部（累積加算結果格納メモリ格納部）
１１２  ＳＢＵＦ（累積加算結果格納メモリ）
１１３  ＳＢＵＦ読み出し部（累積加算結果格納メモリ読み出し部）
２１０  ＳＢＵＦ制御部（累積加算結果格納メモリ制御部）
２１１  第１ＳＢＵＦ格納部（累積加算結果格納メモリ格納部）
２１２  第２ＳＢＵＦ格納部（累積加算結果格納メモリ格納部）
２１３  第１ＳＢＵＦ読み出し部（累積加算結果格納メモリ読み出し部）
２１４  第２ＳＢＵＦ読み出し部（累積加算結果格納メモリ読み出し部）
【図１】
2020075287.tif 000003
【図２】
2020075287.tif 000004
【図３】
2020075287.tif 000005
【図４】
2020075287.tif 000006
【図５】
2020075287.tif 000007
【図６】
2020075287.tif 000008
【図７Ａ】
2020075287.tif 000009
【図７Ｂ】
2020075287.tif 000010
【図８】
2020075287.tif 000011
【図９】
2020075287.tif 000012
【図１０Ａ】
2020075287.tif 000013
【図１０Ｂ】
2020075287.tif 000014
【図１１】
2020075287.tif 000015
【図１２Ａ】
2020075287.tif 000016
【図１２Ｂ】
2020075287.tif 000017
【図１３】
2020075287.tif 000018
【図１４】
2020075287.tif 000019
【図１５】
2020075287.tif 000020
【図１６】
2020075287.tif 000021
【図１７Ａ】
2020075287.tif 000022
【図１７Ｂ】
2020075287.tif 000023
【図１７Ｃ】
2020075287.tif 000024
【図１７Ｄ】
2020075287.tif 000025
【図１７Ｅ】
2020075287.tif 000026
【図１８】
2020075287.tif 000027
【図１９】
2020075287.tif 000028
【国際調査報告】
2020075287.tif 000029
2020075287.tif 000030