(57)【特許請求の範囲】
【請求項１】
階層的に接続された複数の処理層による演算を実行する演算処理装置（１０）であって、
前記演算を行う演算部（１１）と、
前記演算部による演算結果データを格納する外部メモリ（１３）と、
前記演算部から前記外部メモリに書き出すデータ、および、前記外部メモリから前記演算部に読み出すデータを一時的に保持するバッファ（１２）と、
を備え、
前記バッファは、データ保持領域およびリングバッファ領域を有し、
前記演算部から前記外部メモリにデータを書き出す場合には、当該データの一部を前記データ保持領域に保持し、前記データ保持領域に保持しなかった残りのデータを、前記リングバッファ領域を介して先入先出方式により前記外部メモリに書き出し、
前記外部メモリから前記演算部にデータを読み出す場合には、前記データ保持領域に保持されているデータを前記演算部に読み出し、前記データ保持領域に保持されていない残りのデータを、前記リングバッファ領域を介して先入先出方式により前記演算部に読み出す演算処理装置。
【請求項２】
前記バッファは、前記処理層ごとに、前記データ保持領域と前記リングバッファ領域との境界を変更可能である請求項１に記載の演算処理装置。
【請求項３】
前記演算部は、入力されるデータに含まれる複数の特徴にそれぞれ対応する複数の特徴マップを生成し、
前記データ保持領域は、複数の前記特徴マップにそれぞれ対応する複数の領域に分けられている請求項１または２に記載の演算処理装置。
【請求項４】
前階層の演算処理が完了する前に、次階層の演算処理に必要なデータを前記外部メモリから前記演算部に読み出す処理を開始する請求項１から３の何れか１項に記載の演算処理装置。
【請求項５】
前記リングバッファ領域のアドレス数は２のＮ乗（Ｎは０以上の整数）で設定されている請求項１から４の何れか１項に記載の演算処理装置。
【請求項６】
前記演算部は、複数の前記処理層が階層的に接続されたニューラルネットワークによる演算を行う請求項１から５の何れか１項に記載の演算処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置に関する。
【背景技術】
【０００２】
従来より、複数の処理層が階層的に接続されたニューラルネットワークによる演算を実行する演算処理装置が考えられている。特に画像認識を行う演算処理装置においては、いわゆる畳み込みニューラルネットワーク（ＣＮＮ：Convolutional Neural Network）が中核的な存在となっている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許第５１８４８２４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
この種の演算処理装置において、前階層から演算部に入力される入力データは、外部メモリからバッファを介して先入先出方式により読み出される。また、次階層に出力する出力データは、外部メモリにバッファを介して先入先出方式により書き出される。即ち、従来の演算処理装置では、全ての入力データを外部メモリから読み出し、また、全ての出力データを外部メモリに書き出すため、演算処理の遅延を招いてしまう。
【０００５】
そこで、本発明は、階層的に接続された複数の処理層による演算を実行する演算処理装置において、外部メモリに書き出すデータ量および外部メモリから読み出すデータ量を低減し、演算処理の遅延を抑えることを目的とする。
【課題を解決するための手段】
【０００６】
本発明に係る演算処理装置は、階層的に接続された複数の処理層による演算を実行する演算処理装置であり、前記演算を行う演算部と、前記演算部による演算結果データを格納する外部メモリと、前記演算部から前記外部メモリに書き出すデータ、および、前記外部メモリから前記演算部に読み出すデータを一時的に保持するバッファバッファと、を備える。バッファは、データ保持領域およびリングバッファ領域を有する。バッファは、前記演算部から前記外部メモリにデータを書き出す場合には、当該データの一部を前記データ保持領域に保持し、前記データ保持領域に保持しなかった残りのデータを、前記リングバッファ領域を介して先入先出方式により前記外部メモリに書き出す。また、バッファは、前記外部メモリから前記演算部にデータを読み出す場合には、前記データ保持領域に保持されているデータを前記演算部に読み出し、前記データ保持領域に保持されていない残りのデータを、前記リングバッファ領域を介して先入先出方式により前記演算部に読み出す。
【０００７】
本発明に係る演算処理装置は、前階層から入力される入力データの一部および次階層に出力する出力データの一部を外部メモリではなく、バッファ内部のデータ保持領域に保持する。従って、外部メモリに書き出すデータ量および外部メモリから読み出すデータ量を低減することができ、演算処理の遅延を抑えることができる。
【図面の簡単な説明】
【０００８】
【図１】畳み込みニューラルネットワークの構成例を概念的に示す図
【図２】中間層における演算処理の流れを視覚的に示す図（その１）
【図３】中間層における演算処理の流れを視覚的に示す図（その２）
【図４】特徴量抽出処理に用いられる一般的な演算式および関数を示す図
【図５】本実施形態に係る演算処理装置の構成例を概略的に示すブロック図
【図６】バッファの構成例を概略的に示す図（その１）
【図７】バッファの構成例を概略的に示す図（その２）
【図８】演算処理装置の動作例を示す図（その１）
【図９】演算処理装置の動作例を示す図（その２）
【図１０】演算処理装置の動作例を示す図（その３）
【図１１】演算処理装置の動作例を示す図（その４）
【図１２】演算処理装置の動作例を示す図（その５）
【図１３】演算処理装置によるデータ書き出し処理の一例を示すフローチャート
【図１４】演算処理装置によるデータ書き出し処理の一例を視覚的に示す図
【図１５】演算処理装置によるデータ読み出し処理の一例を示すフローチャート
【図１６】演算処理装置によるデータ読み出し処理の一例を視覚的に示す図
【図１７】従来技術における読み出しデータ量の変化の一例を示す図
【図１８】本実施形態における読み出しデータ量の変化の一例を示す図
【図１９】第２実施形態に係るものであり、異なる階層の演算処理におけるバッファの構成例を示す図
【図２０】第３実施形態に係るものであり、データ書き出し処理時におけるバッファの構成例を示す図
【図２１】第３実施形態に係るものであり、データ読み出し処理時におけるバッファの構成例を示す図
【図２２】第４実施形態に係るものであり、データ書き出し処理時におけるバッファの構成例を示す図
【図２３】第４実施形態に係るものであり、データ読み出し処理時におけるバッファの構成例を示す図
【図２４】第５実施形態に係るものであり、演算処理装置の動作例を概略的に示す図
【図２５】第５実施形態における読み出しデータ量の変化の一例を示す図
【図２６】第６実施形態に係るバッファの構成例を概略的に示す図
【発明を実施するための形態】
【０００９】
以下、演算処理装置の複数の実施形態について図面を参照しながら説明する。なお、各実施形態において実質的に同一の要素には同一の符号を付し、説明を省略する。
（ニューラルネットワーク）
図１には、詳しくは後述する演算処理装置１０に適用されるニューラルネットワーク、この場合、畳み込みニューラルネットワークの構成を概念的に示している。畳み込みニューラルネットワークＮは、入力データである画像データＤ１から所定の形状やパターンを認識する画像認識技術に応用されるものであり、中間層Ｎａと全結合層Ｎｂとを有する。中間層Ｎａは、複数の特徴量抽出処理層Ｎａ１，Ｎａ２・・・が階層的に接続された構成である。各特徴量抽出処理層Ｎａ１，Ｎａ２・・・は、それぞれ畳み込み層Ｃおよびプーリング層Ｐを備える。
【００１０】
次に、中間層Ｎａにおける処理の流れについて説明する。図２に例示するように、第１層目の特徴量抽出処理層Ｎａ１では、演算処理装置は、入力される画像データＤ１を例えばラスタスキャンにより所定サイズごとに走査する。そして、走査したデータに対して周知の特徴量抽出処理を施すことにより入力画像に含まれる複数の特徴量を抽出する。なお、第１層目の特徴量抽出処理層Ｎａ１では、例えば水平方向に延びる線状の特徴量や斜め方向に延びる線状の特徴量などといった比較的シンプルな単独の特徴量を抽出する。このとき、演算処理装置は、入力画像に含まれる複数の特徴にそれぞれ対応する複数の特徴マップを生成する。
【００１１】
第２層目の特徴量抽出処理層Ｎａ２では、演算処理装置は、前階層の特徴量抽出処理層Ｎａ１から入力される入力データを例えばラスタスキャンにより所定サイズごとに走査する。そして、走査したデータに対して周知の特徴量抽出処理を施すことにより入力画像に含まれる複数の特徴量を抽出する。なお、第２層目の特徴量抽出処理層Ｎａ２では、第１層目の特徴量抽出処理層Ｎａ１で抽出された複数の特徴量の空間的な位置関係などを考慮しながら統合させることで、より高次元の複合的な特徴量を抽出する。このとき、演算処理装置は、入力画像に含まれる複数の特徴にそれぞれ対応する複数の特徴マップを生成する。
【００１２】
第３層目の特徴量抽出処理層Ｎａ３では、演算処理装置は、前階層の特徴量抽出処理層Ｎａ２から入力される入力データを例えばラスタスキャンにより所定サイズごとに走査する。そして、走査したデータに対して周知の特徴量抽出処理を施すことにより入力画像に含まれる複数の特徴量を抽出する。なお、第３層目の特徴量抽出処理層Ｎａ３では、第２層目の特徴量抽出処理層Ｎａ２で抽出された複数の特徴量の空間的な位置関係などを考慮しながら統合させることで、より高次元の複合的な特徴量を抽出する。このとき、演算処理装置は、入力画像に含まれる複数の特徴にそれぞれ対応する複数の特徴マップを生成する。このように、複数の特徴量抽出処理層による特徴量の抽出処理を繰り返すことで、演算処理装置は、画像データＤ１に含まれる検出対象物体の画像認識を行う。
【００１３】
演算処理装置は、中間層Ｎａにおいて複数の特徴量抽出処理層Ｎａ１，Ｎａ２，Ｎａ３・・・による処理を繰り返すことで入力画像データＤ１に含まれる種々の特徴量を高次元で抽出していく。そして、演算処理装置は、中間層Ｎａの処理により得られた結果を中間演算結果データとして全結合層Ｎｂに出力する。
【００１４】
全結合層Ｎｂは、中間層Ｎａから得られる複数の中間演算結果データを結合して最終的な演算結果データを出力する。即ち、全結合層Ｎｂは、中間層Ｎａから得られる複数の中間演算結果データを結合し、さらに、その結合結果に対して重み係数を異ならせながら積和演算を行うことにより、最終的な演算結果データ、即ち、入力データである画像データＤ１に含まれる検出対象物を認識した画像データを出力する。このとき、積和演算による演算結果の値が大きい部分が検出対象物の一部または全部として認識される。
【００１５】
次に、演算処理装置による特徴量抽出処理の流れについて説明する。図３に例示するように、演算処理装置は、前階層の特徴量抽出処理層から入力される入力データＤｎを所定サイズ、この場合、図にてハッチングで示す３×３画素ごとのフィルタサイズにより走査する。なお、画素サイズは、３×３画素に限られず、例えば５×５画素など適宜変更することができる。
【００１６】
そして、演算処理装置は、走査したデータに対して、それぞれ周知の畳み込み演算を行う。そして、演算処理装置は、畳み込み演算後のデータに対して周知の活性化処理を行い、畳み込み層Ｃの出力とする。そして、演算処理装置は、畳み込み層Ｃの出力データＣｎに対して、所定サイズ、この場合、２×２画素ごとに周知のプーリング処理を行い、プーリング層Ｐの出力とする。そして、演算処理装置は、プーリング層Ｐの出力データＰｎを次の階層の特徴量抽出処理層に出力する。なお、画素サイズは、２×２画素に限られず適宜変更することができる。
【００１７】
図４には、畳み込み演算処理に用いられる畳み込み関数、活性化処理に用いられる関数、プーリング処理に用いられる関数の一般的な例を示している。即ち、畳み込み関数Ｙｉｊは、直前の層の出力Ｘｉｊに学習により得られる重み係数Ｗｐ，ｑを乗算した値を累積する関数となっている。なお、「Ｎ」は１サイクルの畳み込み演算処理により処理される画素サイズを示す。即ち、例えば１演算サイクルの画素サイズが「３×３」画素である場合、Ｎの値は「２」である。また、畳み込み関数Ｙｉｊは、累積値に所定のバイアス値を加算する関数としてもよい。また、畳み込み関数は、全結合処理にも対応し得る積和演算が可能な関数であれば、種々の関数を採用することができる。また、活性化処理には、周知のロジスティックジグモイド関数やＲｅＬＵ関数（Rectified Linear Units）などが用いられる。また、プーリング処理には、入力されるデータの最大値を出力する周知の最大プーリング関数や、入力されるデータの平均値を出力する周知の平均プーリング関数などが用いられる。
【００１８】
上述した畳み込みニューラルネットワークＮによれば、コンボルーション層Ｃによる処理およびプーリング層Ｐによる処理が繰り返されることにより、より高次元の特徴量の抽出が可能となる。次に、この畳み込みニューラルネットワークＮを適用した演算処理装置に係る実施形態について説明する。
【００１９】
（第１実施形態）
図５に例示する演算処理装置１０は、演算部１１、バッファ１２、外部メモリ１３などを備える。演算部１１は、この場合、複数の演算ブロック１１ａを備える。演算ブロック１１ａは、それぞれ、図示しない畳み込み演算処理部、活性化処理部、プーリング処理部などを備えている。畳み込み演算処理部は、前階層から入力される入力データに対して周知の畳み込み演算処理を実行して、その処理結果データを活性化処理部に出力する。活性化処理部は、畳み込み演算処理部による処理結果データに対して周知の活性化処理を実行して、その処理結果データをプーリング処理部に出力する。プーリング処理部は、活性化処理部による処理結果データに対して周知のプーリング処理を実行して、その処理結果データを出力する。
【００２０】
演算部１１は、演算ブロック１１ａにより、前階層から入力される入力データから特徴量を抽出する処理を行って次階層に出力データを出力する。なお、演算部１１は、ソフトウェアにより構成してもよいし、ハードウェアにより構成してもよいし、ソフトウェアとハードウェアの組み合わせにより実現してもよい。また、演算部１１は、１つの演算ブロック１１ａを備える構成としてもよい。
【００２１】
バッファ１２は、上述した演算部１１による演算処理において、前階層から入力される入力データおよび次階層に出力する出力データを一時的に保持するものである。この場合、演算処理装置１０は、演算ブロック１１ａに対応して複数のバッファ１２を備えている。バッファ１２は、それぞれ、２つのバッファ機能部１２ａ，１２ｂと、２つのスイッチング機能部１４を備える。スイッチング機能部１４は、バッファ機能部１２ａ，１２ｂを、演算部１１へのデータ読み出し用および演算部１１からのデータ書き出し用に切り換える機能を有する。即ち、スイッチング機能部１４は、例えば、バッファ機能部１２ａをデータ読み出し用として機能させる場合にはバッファ機能部１２ｂをデータ書き出し用として機能させるように切り換える。また、スイッチング機能部１４は、バッファ機能部１２ａをデータ書き出し用として機能させる場合にはバッファ機能部１２ｂをデータ読み出し用として機能させるように切り換える。
【００２２】
図６に例示するように、バッファ１２は、バッファ機能部１２ａ，１２ｂを、それぞれ１つのバッファ領域で構成し、その１つのバッファ領域をデータ保持領域Ｒ１とリングバッファ領域Ｒ２に分ける構成としてもよい。この場合、バッファ領域とデータ保持領域は連続している。また、図７に例示するように、バッファ１２は、バッファ機能部１２ａ，１２ｂを、それぞれ２つのバッファ領域で構成し、一方のバッファ領域をデータ保持領域Ｒ１、他方のバッファ領域をリングバッファ領域Ｒ２とすることで、データ保持領域Ｒ１とリングバッファ領域Ｒ２を物理的に分割した構成としてもよい。
【００２３】
外部メモリ１３は、例えば、Ｄｏｕｂｌｅ−Ｄａｔａ−Ｒａｔｅ−ＳＤＲＡＭなどで構成される記憶媒体であり、入力画像データＤ１や、演算部１１による演算結果データなどを記憶する。外部メモリ１３は、この場合、インターコネクト部１５を介して複数のバッファ１２に接続されている。インターコネクト部１５は、外部メモリ１３から演算部１１に読み出されるデータを各バッファ１２に振り分ける。また、インターコネクト部１５は、演算部１１から外部メモリ１３に複数のバッファ１２を介して書き出されるデータを集約する。なお、演算処理装置１０が備えるバッファ１２が１つである場合は、インターコネクト部１５は省略することができる。
【００２４】
演算処理装置１０には、外部メモリ１３に書き出すデータ量および外部メモリ１３から読み出すデータ量を低減して演算処理の遅延を抑えるための工夫が施されている。即ち、図８に例示するように、演算処理装置１０は、外部メモリ１３に格納されている入力画像データＤ１を走査して読み込む。このとき、演算処理装置１０は、バッファ機能部１２ａ，１２ｂのうち何れか一方、この場合、バッファ機能部１２ａをデータ読み出し用に切り換え、他方、この場合、バッファ機能部１２ｂをデータ書き出し用に切り換えているものとする。そして、演算処理装置１０は、データ読み出し用のバッファ機能部１２ａのリングバッファ領域Ｒ２を介して、入力画像データＤ１、つまり、入力画像データＤ１を所定サイズごとに捜査したデータｄ１［１］，ｄ１［２］，ｄ１［３］，・・・，ｄ１［ｎ］を先入先出方式により演算部１１に読み出す。
【００２５】
また、図９に例示するように、演算処理装置１０は、演算部１１により入力画像データｄ１［１］，ｄ１［２］，ｄ１［３］，・・・，ｄ１［ｎ］に対し演算処理を実行し、演算結果データｄ２［１］，ｄ２［２］，ｄ２［３］，・・・，ｄ２［ｎ］を出力する。このとき、演算処理装置１０は、出力データｄ２［１］，ｄ２［２］，ｄ２［３］，・・・，ｄ２［ｎ］の一部を、データ書き出し用のバッファ機能部１２ｂのデータ保持領域Ｒ１に格納する。この場合、演算処理装置１０は、複数の出力データｄ２［１］，ｄ２［２］，ｄ２［３］，・・・，ｄ２［ｎ］のうち先頭の出力データｄ２［１］〜ｄ２［１０］をバッファ機能部１２ｂのデータ保持領域Ｒ１に格納する。そして、演算処理装置１０は、バッファ機能部１２ｂのデータ保持領域Ｒ１に保持されていない残りの出力データｄ２［１１］，ｄ２［１２］，ｄ２［１３］，・・・，ｄ２［ｎ］を、バッファ機能部１２ｂのリングバッファ領域Ｒ２を介して先入先出方式により外部メモリ１３に書き出す。外部メモリ１３に書き出された出力データｄ２［１１］，ｄ２［１２］，ｄ２［１３］，・・・，ｄ２［ｎ］は、次階層の演算、つまり、入力画像データＤ２から特徴量を抽出するための入力データとして用いられる。なお、図８に例示したデータ読み出し処理と図９に例示したデータ書き出し処理は、この場合、並列的に行われる。
【００２６】
次に、図１０に例示するように、演算処理装置１０は、入力画像データＤ２からの特徴量抽出処理に用いられる入力データｄ２［１］，ｄ２［２］，ｄ２［３］，・・・，ｄ２［ｎ］を読み出す処理に移行する。このとき、演算処理装置１０は、まず、前階層の処理においてデータ書き出し用であったバッファ機能部１２ｂをデータ読み出し用に切り換え、前階層の処理においてデータ読み出し用であったバッファ機能部１２ａをデータ書き出し用に切り換える。そして、演算処理装置１０は、バッファ機能部１２ｂのデータ保持領域Ｒ１に格納されているデータｄ２［１］〜ｄ２［１０］を演算部１１に読み出す。そして、演算処理装置１０は、残りのデータｄ２［１１］，ｄ２［１２］，ｄ２［１３］，・・・，ｄ２［ｎ］を、バッファ機能部１２ｂのリングバッファ領域Ｒ２を介して先入先出方式により演算部１１に読み出す。これにより、演算部１１には、入力画像データＤ２からの特徴量抽出処理に必要な全ての入力データｄ２［１］〜ｄ２［ｎ］が読み込まれる。
【００２７】
また、図１１に例示するように、演算処理装置１０は、演算部１１により入力画像データｄ２［１］，ｄ２［２］，ｄ２［３］，・・・，ｄ２［ｎ］に対し演算処理を実行し、演算結果データｄ３［１］，ｄ３［２］，ｄ３［３］，・・・，ｄ３［ｎ］を出力する。このとき、演算処理装置１０は、出力データｄ３［１］，ｄ３［２］，ｄ３［３］，・・・，ｄ３［ｎ］の一部を、データ書き出し用のバッファ機能部１２ａのデータ保持領域Ｒ１に格納する。この場合、演算処理装置１０は、複数の出力データｄ３［１］，ｄ３［２］，ｄ３［３］，・・・，ｄ３［ｎ］のうち先頭の出力データｄ３［１］〜ｄ３［１０］をバッファ機能部１２ａのデータ保持領域Ｒ１に格納する。そして、演算処理装置１０は、バッファ機能部１２ａのデータ保持領域Ｒ１に保持されていない残りの出力データｄ３［１１］，ｄ３［１２］，ｄ３［１３］，・・・，ｄ３［ｎ］を、バッファ機能部１２ａのリングバッファ保持領域Ｒ２を介して先入先出方式により外部メモリ１３に書き出す。外部メモリ１３に書き出された出力データｄ３［１１］，ｄ３［１２］，ｄ３［１３］，・・・，ｄ３［ｎ］は、次階層の演算、つまり、入力画像データＤ３から特徴量を抽出するための入力データとして用いられる。なお、図１０に例示したデータ読み出し処理と図１１に例示したデータ書き出し処理は、この場合、並列的に行われる。
【００２８】
次に、図１２に例示するように、演算処理装置１０は、入力画像データＤ３からの特徴量抽出処理に用いられる入力データｄ３［１］，ｄ３［２］，ｄ３［３］，・・・，ｄ３［ｎ］を読み出す処理に移行する。このとき、演算処理装置１０は、まず、前階層の処理においてデータ書き出し用であったバッファ機能部１２ａをデータ読み出し用に切り換え、前階層の処理においてデータ読み出し用であったバッファ機能部１２ｂをデータ書き出し用に切り換える。そして、演算処理装置１０は、バッファ機能部１２ａのデータ保持領域Ｒ１に格納されているデータｄ３［１］〜ｄ３［１０］を演算部１１に読み出す。そして、演算処理装置１０は、残りのデータｄ３［１１］，ｄ３［１２］，ｄ３［１３］，・・・，ｄ３［ｎ］を、バッファ機能部１２ａのリングバッファ領域Ｒ２を介して先入先出方式により演算部１１に読み出す。これにより、演算部１１には、入力画像データＤ３からの特徴量抽出処理に必要な全てのデータｄ３［１］〜ｄ３［ｎ］が読み込まれる。以降、演算処理装置１０は、上述した処理を繰り返し実行していく。
【００２９】
以上の通り、演算処理装置１０は、次階層に出力する出力データを外部メモリ１３に書き出す場合には、その出力データの一部をデータ保持領域に保持し、残りの出力データを外部メモリ１３に書き出す。そして、演算処理装置１０は、前階層から入力される入力データを外部メモリ１３から読み出す場合には、データ保持領域に保持されている入力データの一部を演算部１１に読み出し、残りの入力データを外部メモリ１３から読み出して演算部１１に送る。
【００３０】
次に、演算処理装置１０の動作例について説明する。
（データの書き出し処理）
図１３に例示するように、演算処理装置１０は、データ保持領域に全ての書き出しデータ、つまり、演算部１１が出力する全てのデータを保持可能であるか否かを判断する（Ａ１）。演算処理装置１０は、演算部１１が出力する全てのデータをデータ保持領域に保持可能である場合（Ａ１：ＹＥＳ）には、演算部１１が出力するデータをデータ保持領域に順次格納していき（Ａ２）、全てのデータをデータ保持領域に格納すると（Ａ３：ＹＥＳ）、この処理を終了する。
【００３１】
一方、演算処理装置１０は、演算部１１が出力する全てのデータをデータ保持領域に保持できない場合（Ａ１：ＮＯ）には、バッファ１２にデータ保持領域が存在するか否かを確認する（Ａ４）。演算処理装置１０は、データ保持領域が存在する場合（Ａ４：ＹＥＳ）には、演算部１１が出力するデータをデータ保持領域に順次格納していく（Ａ５）。そして、演算処理装置１０は、データ保持領域に余裕が無くなると（Ａ６：ＮＯ）、その後は、演算部１１が出力するデータをリングバッファ領域に順次格納していく（Ａ７）。なお、演算処理装置１０は、バッファ１２にデータ保持領域が存在しない場合（Ａ４：ＮＯ）にも、演算部１１が出力するデータをリングバッファ領域に順次格納していく（Ａ７）。
【００３２】
また、演算処理装置１０は、演算部１１が出力するデータをリングバッファ領域に格納していく処理と並行して、リングバッファ領域に格納したデータを外部メモリ１３に順次書き出していく処理も実行する（Ａ７）。即ち、演算処理装置１０は、リングバッファ領域に一時的に保持したデータを先入先出方式により外部メモリ１３に順次書き出していく。そして、演算処理装置１０は、演算部１１が出力する全てのデータを外部メモリ１３に書き出すと（Ａ８：ＹＥＳ）、この処理を終了する。なお、ステップＡ８における「全ての出力データ」は、演算部１１が出力するデータの一部をデータ保持領域に保持する場合は当該データ保持領域に保持していない全てのデータを意味し、演算部１１が出力するデータの一部をデータ保持領域に保持しない場合は演算部１１が出力する全ての出力データを意味する。
【００３３】
図１４に例示するように、上述のデータの書き出し処理によれば、演算部１１が出力するデータは、まず、データ保持領域に格納される。そして、データ保持領域に余裕が無くなると、その後、演算部１１が出力するデータは、リングバッファ領域を介して先入先出方式により外部メモリ１３に書き出されていく。
【００３４】
（データの読み出し処理）
図１５に例示するように、演算処理装置１０は、外部メモリ１３からデータの読み出しが必要であるか否かを確認する（Ｂ１）。即ち、特徴量の抽出処理に必要な全てのデータがデータ保持領域に格納されているのであれば、外部メモリ１３からのデータの読み出しは不要である。よって、演算処理装置１０は、特徴量の抽出処理に必要な全てのデータがデータ保持領域に格納されているか否かを確認し、外部メモリ１３からのデータの読み出しの要否を判断する。演算処理装置１０は、外部メモリ１３からのデータの読み出しが不要である場合（Ｂ１：ＮＯ）には、データ保持領域からデータを順次読み出していき（Ｂ２）、データ保持領域に保持されている全てのデータを読み出すと（Ｂ３：ＹＥＳ）、この処理を終了する。
【００３５】
一方、演算処理装置１０は、外部メモリ１３からのデータの読み出しが必要である場合（Ｂ１：ＹＥＳ）には、データ保持領域にデータが格納されているか否かを確認する（Ｂ４）。演算処理装置１０は、データ保持領域にデータが格納されている場合（Ｂ４：ＹＥＳ）には、データ保持領域からデータを順次読み出していく（Ｂ５）。そして、演算処理装置１０は、データ保持領域に格納されている全てのデータを読み出すと（Ｂ６：ＹＥＳ）、外部メモリ１３からのデータの読み出しを開始し、読み出したデータをリングバッファ領域に順次格納していく（Ｂ７）。なお、演算処理装置１０は、データ保持領域にデータが格納されていない場合（Ｂ４：ＮＯ）にも、外部メモリ１３からのデータの読み出しを開始し、読み出したデータをリングバッファ領域に順次格納していく（Ｂ７）。
【００３６】
また、演算処理装置１０は、外部メモリ１３から読み出したデータをリングバッファ領域に格納していく処理と並行して、リングバッファ領域に格納したデータを演算部１１に順次読み出していく処理も実行する（Ｂ７）。即ち、演算処理装置１０は、外部メモリ１３から読み出してリングバッファ領域に一時的に保持したデータを先入先出方式により演算部１１に順次読み出していく。そして、演算処理装置１０は、特徴量の抽出処理に必要な全てのデータを演算部１１に読み出すと（Ｂ８：ＹＥＳ）、この処理を終了する。なお、ステップＢ８における「全ての出力データ」は、特徴量の抽出処理に必要なデータの一部がデータ保持領域に保持されている場合は当該データ保持領域に保持されていない全てのデータを意味し、特徴量の抽出処理に必要なデータの一部がデータ保持領域に保持されていない場合は外部メモリ１３から読み出す全てのデータを意味する。
【００３７】
図１６に例示するように、上述のデータの読み出し処理によれば、まず、データ保持領域に保持されているデータが演算部１１に順次読み出される。そして、データ保持領域に保持されている全てのデータの読み出しが完了すると、その後、外部メモリ１３から読み出されたデータがリングバッファ領域を介して先入先出方式により演算部１１に読み出されていく。
【００３８】
本実施形態に係る演算処理装置１０は、演算部１１が出力するデータを外部メモリ１３に書き出す場合には、当該データの一部をデータ保持領域に保持する。そして、演算処理装置１０は、データ保持領域に保持しなかった残りのデータを先入先出方式により外部メモリ１３に書き出す。また、演算処理装置１０は、外部メモリ１３から演算部１１にデータを読み出す場合には、データ保持領域に保持されているデータ、つまり、特徴量の抽出処理に必要なデータの一部を演算部１１に読み出す。そして、演算処理装置１０は、データ保持領域に保持されていない残りのデータを外部メモリ１３から読み出して先入先出方式により演算部１１に読み出す。
【００３９】
即ち、演算処理装置１０によれば、前階層から入力される入力データの一部および次階層に出力する出力データの一部を外部メモリ１３ではなく、バッファ１２内部のデータ保持領域に保持するようにした。従って、全ての入力データを外部メモリから読み出し、また、全ての出力データを外部メモリに書き出す従来技術に比べ、外部メモリ１３に書き出すデータ量および外部メモリ１３から読み出すデータ量を低減することができ、演算処理の遅延を抑えることができる。
【００４０】
即ち、図１７に例示する従来技術における読み出しデータのデータ量の変化と図１８に例示する本実施形態における読み出しデータのデータ量の変化とを比較すると、第１層目の処理では、時刻Ｔ０から、外部メモリからバッファへのデータの読み出しが開始される。そして、時刻Ｔ１において、バッファに読み出されたデータ総量が演算処理を実行可能な閾値量Ｌ１を超えると、バッファから演算部へのデータの転送が開始される。なお、バッファから演算部へのデータの転送が行われている間も、外部メモリからバッファへのデータの読み出しは継続される。また、入力画像データに対する水平方向への走査が完了すると、不要となったラインのデータは順次消去される。外部メモリからバッファへのデータの読み出し量よりも順次消去されるデータ量が多い場合、バッファに格納されているデータ総量が閾値量Ｌ１よりも少なくなり、この場合、演算部１１の演算処理が停止する。よって、時刻Ｔ１から第１層目の処理の完了時刻である時刻Ｔ２においては、演算部１１による演算処理が間欠的に行われることとなる。
【００４１】
そして、第２層目の演算処理では、図１７に例示する従来技術と図１８に例示する本実施形態とで動作が異なってくる。即ち、従来技術では、特徴量の抽出処理に必要な全てのデータを外部メモリから読み出すことから、バッファに読み出されたデータ総量が演算処理を実行可能な閾値量Ｌ２を超えるまで、つまり、時刻Ｔ３〜Ｔ４の間は、演算部１１による演算処理を実行することができない。一方、本実施形態では、特徴量の抽出処理に必要な一部のデータを外部メモリ１３ではなくバッファ１２から読み出すことから、バッファ１２に読み出されたデータ総量が閾値量Ｌ２を超えるまでの時間を短縮することができる。即ち、本実施形態によれば、第２層目以降の各処理層の特に初期において、外部メモリ１３から読み出すデータ量を低減することができ、演算処理の遅延を抑えることができる。
【００４２】
（第２実施形態）
図１９に例示するように、本実施形態では、バッファ１２は、複数の処理層ごとに、データ保持領域とリングバッファ領域との境界アドレスを変更可能に構成されている。この構成によれば、次階層の演算処理において、前階層の演算処理時よりもリングバッファ領域を大きくすることができる。入力画像データに対する水平方向の１ライン目から４ライン目のデータをデータ保持領域に保持するようにした場合、次階層の演算処理において１ライン目から４ライン目のデータを保持するのに必要なデータ保持領域は、前階層の演算処理において１ライン目から４ライン目のデータを保持するのに必要なデータ保持領域よりも小さくなる。前階層の演算処理におけるプーリング処理によりデータ量が減少するからである。よって、処理層ごとに境界アドレスを調整することで、各処理層において必要な大きさのデータ保持領域を形成し、残りのバッファ資源をリングバッファ領域に割り当てることができ、限りのあるバッファ資源を有効に活用することができる。
【００４３】
なお、バッファ１２の各アドレスのデータサイズＤは、入力画像データの横幅Ｗを基準として決めるとよい。即ち、プーリング処理によりデータ量は概ね１／２ほどとなる。そのため、次階層の演算処理において、データ保持領域やリングバッファ領域のデータサイズＤを１／２にしても、必要なライン数のデータ、この場合、１ライン目から４ライン目のデータを十分に格納することができる。また、データ保持領域の深さＬを１／２にしても、必要なライン数のデータを十分に格納することができる。そして、前階層の半分のサイズのデータ保持領域により次階層の演算処理の初期に必要なデータを保持することができ、メモリ資源を有効に活用することができる。必要なライン数は、演算処理においてフィルタを走査するのに最低限必要なライン数であり、具体的には、演算処理におけるフィルタサイズに依存する。例えば、フィルタサイズを３×３画素、マージンを１とした場合、必要なライン数はフィルタサイズ「３」＋マージン「１」により「４」ラインとなる。なお、マージンは、例えば演算処理システムにおける読み出し処理の遅延などを考慮して適宜変更して設定することができる。
【００４４】
（第３実施形態）
本実施形態は、データの読み出し処理時において、データ保持領域からデータを読み出した後に、空になったデータ保持領域をリングバッファ領域として用いる実施形態である。即ち、図２０には、演算部１１からのデータの書き出し処理時におけるバッファ１２の構成例を示している。このデータ書き出し処理時において、リングバッファ領域は「０ｘ００００」〜「０ｘ０００７」、データ保持領域は「０ｘ０００８」〜「０ｘ０００Ｆ」に設定されている。そして、状態１では、書き込みアドレスＷａの初期値がデータ保持領域の先頭アドレス「０ｘ０００８」に設定され、データの書き込みが開始される。そして、状態２に示すように、データが書き込まれるたびに書き込みアドレスＷａが増加され、データがデータ保持領域に順次書き込まれていく。そして、状態３に示すように、書き込みアドレスＷａがデータ保持領域の最終アドレス「０ｘ０００Ｆ」まで移行すると、状態４に示すように、書き込みアドレスＷａがリングバッファ領域の先頭アドレス「０ｘ００００」に移行する。そして、データが書き込まれるたびに書き込みアドレスＷａが増加され、データがリングバッファ領域に順次書き込まれていく。そして、状態５に示すように、読み出しアドレスＲａが設定され、データが外部メモリ１３に読み出されるたびに読み出しアドレスＲａが増加される。これにより、リングバッファ領域において、書き込みアドレスＷａに演算部１１からのデータが書き込まれるとともに読み出しアドレスＲａから外部メモリ１３にデータが読み出される。これにより、いわゆる先入先出方式によりリングバッファ領域のデータが外部メモリ１３に順次読み出されていく。なお、データ保持領域の各アドレスには、それぞれ１回だけデータが書き込まれる。
【００４５】
図２１には、演算部１１へのデータの読み出し処理時におけるバッファ１２の構成例を示している。このデータ読み出し処理時において、リングバッファ領域は「０ｘ００００〜０ｘ０００Ｆ」に設定されている。即ち、前階層においてデータ保持領域として機能した領域も含めバッファ１２の全体がリングバッファ領域として設定されている。そして、状態１では、読み出しアドレスＲａの初期値が、前階層においてデータ保持領域の先頭アドレスであった「０Ｘ０００８」に設定され、データの読み出しが開始される。そして、状態２に示すように、データが読み出されるたびに読み出しアドレスＲａが増加され、データが演算部１１に順次読み出されていく。そして、状態３に示すように、前階層においてデータ保持領域の最終アドレスであった「０ｘ０００Ｆ」のデータの読み出しが行われる前に、リングバッファ領域の先頭アドレス「０Ｘ００００」から外部メモリ１３からのデータの書き込みが行われる。そして、データが書き込まれるたびに書き込みアドレスＷａが増加され、データがリングバッファ領域に順次書き込まれていく。そして、状態４に示すように、「０ｘ０００Ｆ」のデータの読み出しが完了すると、読み出しアドレスＲａがリングバッファ領域の先頭アドレス「０ｘ００００」に移行する。そして、データが読み出されるたびに読み出しアドレスＲａが増加され、データがリングバッファ領域から順次読み出されていく。そして、状態５に示すように、リングバッファ領域において、書き込みアドレスＷａに外部メモリ１３からデータが書き込まれるとともに読み出しアドレスＲａから演算部１１にデータが順次読み出される。これにより、いわゆる先入先出方式によりリングバッファ領域のデータが演算部１１に読み出されていく。
【００４６】
以上の通り、本実施形態によれば、データの読み出し処理時において空になったデータ保持領域もリングバッファ領域として用いることで、限りあるメモリ資源を有効に活用することができる。
【００４７】
（第４実施形態）
本実施形態は、各処理層における演算処理により生成される複数の特徴マップにそれぞれ対応付けてデータ保持領域を分ける実施形態である。即ち、図２２に例示するように、演算部１１からのデータの書き出し処理時において、データ保持領域には、演算部１１が出力するデータが特徴マップごとに格納されていく。即ち、特徴マップＭ［０］のデータは、データ保持領域の先頭アドレスに格納され、以降、特徴マップＭ［１］，Ｍ［２］のデータが順次格納されていき、特徴マップＭ［３］のデータがデータ保持領域の最終アドレスに格納される。なお、データ保持領域に格納できない特徴マップＭ［４］以降のデータが存在する場合には、リングバッファ領域を介して先入先出方式により外部メモリ１３に書き出す。
【００４８】
一方、演算部１１へのデータの読み出し処理時においては、図２３に例示するように、データ保持領域の先頭アドレスから特徴マップＭ［０］，Ｍ［１］，Ｍ［２］，Ｍ［３］のデータを順次読み出していく。そして、データ保持領域のデータを全て読み出すと、リングバッファ領域を介して外部メモリ１３から残りの特徴マップデータを順次読み出していく。なお、この場合も、空になったデータ保持領域は、リングバッファ領域として利用するように構成するとよい。
【００４９】
本実施形態によれば、各処理層における演算処理により複数の特徴マップが生成される場合であっても、外部メモリ１３に書き出すデータ量および外部メモリ１３から読み出すデータ量を低減することができ、演算処理の遅延を抑えることができる。
【００５０】
（第５実施形態）
図２４に例示するように、演算処理装置１０は、前階層の演算処理が完了する前に、次階層の演算処理に必要なデータを外部メモリ１３から演算部１１に読み出す処理を開始する。本実施形態によれば、図２５に例示するように、次階層の演算処理の初期において、演算部１１に読み込まれるデータ量を十分に確保することができる。よって、データ量の不足による演算処理の停止を回避することができ、特に時刻Ｔ３以降に示すように、演算処理を停止させることなく連続的に行うことができる。よって、演算処理時間の短縮を図ることができる。
【００５１】
（第６実施形態）
図２６に例示するように、バッファ１２において、リングバッファ領域のアドレス数は、８個、つまり、２の３乗個で設定されている。この領域構成において、リングバッファ領域の最終アドレス「０ｘ０００７」つまり２進数で表現すると「０１１１」と、リングバッファ領域を越えた最初のアドレス「０ｘ０００８」つまり２進数で表現すると「１０００」との論理積を計算することにより、リングバッファ領域の先頭アドレスを特定してみる。即ち、「０１１１」と「１０００」との論理積を計算すると「００００」つまり１６進数で表現すると「０ｘ００００」が得られる。本実施形態によれば、リングバッファ領域のアドレス数は２のＮ乗で設定されているので、２進数の論理積演算によりリングバッファ領域の先頭アドレスを容易に特定することができる。そのため、例えばアドレス「０ｘ０００６」，「０ｘ０００７」，「０ｘ０００８」のデータを読み込む場合には、これらのアドレスをそれぞれ「０１１１」でマスクすることにより、「０ｘ０００６」，「０ｘ０００７」，「０ｘ００００」を得ることができ、「０ｘ０００８」のデータをリングバッファ領域の「０ｘ００００」から読み出せばよいことを容易に求めることができる。よって、データを読み込む際に読み出しアドレスがリングバッファ領域を越えたか否かの判断などを不要とすることができ、処理の簡素化を図ることができる。また、２進数の論理積演算を実行する回路は比較的簡素であり、回路構成の複雑化を回避することができる。なお、Ｎは０以上の整数である。
【００５２】
（その他の実施形態）
本発明は、上述した実施形態に限定されるものではなく、その要旨を逸脱しない範囲で種々の実施形態に適用可能である。
例えば、データ保持領域には、演算部１１から出力するデータの先頭ではなく、途中や末尾のデータを保持するようにしてもよい。また、データ保持領域に保持するデータ数量は、適宜変更して実施することができる。なお、データ保持領域に保持するデータ数量を多くするほど、演算処理の遅延を一層抑えることができる。
【符号の説明】
【００５３】
図面中、１０は演算処理装置、１１は演算部、１２はバッファ、１３は外部メモリを示す。
【図１】
0006631262.tif 000002
【図２】
0006631262.tif 000003
【図３】
0006631262.tif 000004
【図４】
0006631262.tif 000005
【図５】
0006631262.tif 000006
【図６】
0006631262.tif 000007
【図７】
0006631262.tif 000008
【図８】
0006631262.tif 000009
【図９】
0006631262.tif 000010
【図１０】
0006631262.tif 000011
【図１１】
0006631262.tif 000012
【図１２】
0006631262.tif 000013
【図１３】
0006631262.tif 000014
【図１４】
0006631262.tif 000015
【図１５】
0006631262.tif 000016
【図１６】
0006631262.tif 000017
【図１７】
0006631262.tif 000018
【図１８】
0006631262.tif 000019
【図１９】
0006631262.tif 000020
【図２０】
0006631262.tif 000021
【図２１】
0006631262.tif 000022
【図２２】
0006631262.tif 000023
【図２３】
0006631262.tif 000024
【図２４】
0006631262.tif 000025
【図２５】
0006631262.tif 000026
【図２６】
0006631262.tif 000027