(57)【要約】【課題】ニューラルネットワークに従う演算を行う情報処理装置において、必要とされるメモリ量を抑えながら、演算を高速化する。【解決手段】第１のメモリ及び第２のメモリへの、ニューラルネットワークにおける畳み込み演算処理に用いる重みデータの書き込みと、第１のメモリ及び第２のメモリからの、畳み込み演算処理に用いる重みデータの読み出しと、を制御する。第１のメモリと第２のメモリとの少なくとも一方から読み出した重みデータを用いて、畳み込み演算処理を行う。第１のメモリから第１の重みデータを読み出して第１の重みデータを用いた畳み込み演算処理を行う際に、並列して第２のメモリへの第２の重みデータの書き込みを行う第１の動作と、第１のメモリ及び第２のメモリの双方から第１の重みデータを読み出して第１の重みデータを用いた畳み込み演算処理を行う第２の動作と、を切り替えながら制御を行う。【選択図】  図１
2020112998.tif 000002
【特許請求の範囲】
【請求項１】
ニューラルネットワークを用いた処理を行う情報処理装置であって、
第１のメモリ及び第２のメモリと、
前記第１のメモリ及び前記第２のメモリへの、前記ニューラルネットワークにおける畳み込み演算処理に用いる重みデータの書き込みと、前記第１のメモリ及び前記第２のメモリからの、前記畳み込み演算処理に用いる重みデータの読み出しと、を制御する制御手段と、
前記第１のメモリと前記第２のメモリとの少なくとも一方から読み出した前記重みデータを用いて、前記畳み込み演算処理を行う処理手段と、を備え、
前記制御手段は、
前記処理手段が前記第１のメモリから第１の重みデータを読み出して前記第１の重みデータを用いた前記畳み込み演算処理を行う際に、並列して前記第２のメモリへの第２の重みデータの書き込みを行う第１の動作と、
前記処理手段が前記第１のメモリ及び前記第２のメモリの双方から第１の重みデータを読み出して前記第１の重みデータを用いた前記畳み込み演算処理を行う第２の動作と、
を切り替えながら前記制御を行うことを特徴とする、情報処理装置。
【請求項２】
前記処理手段が前記第１の重みデータ、前記第２の重みデータ、及び第３の重みデータを順に用いる場合において、
前記第１の動作においては、前記第１のメモリに前記第１の重みデータが書き込まれ、前記第１のメモリへの前記第１の重みデータの書き込みの完了から前記第３の重みデータの書き込みまでの間に、前記第１のメモリからの前記第１の重みデータの読み出しと、前記第２のメモリへの前記第２の重みデータの書き込みと、が並列して行われ、
前記第２の動作においては、前記第１のメモリ及び前記第２のメモリに前記第１の重みデータが書き込まれ、前記第１の重みデータの書き込みの完了から前記第２の重みデータの書き込みまでの間に、前記第１のメモリ及び前記第２のメモリから前記第１の重みデータが読み出される
ことを特徴とする、請求項１に記載の情報処理装置。
【請求項３】
前記制御手段は、前記重みデータのサイズを示す情報を取得し、前記サイズを示す情報に基づいて、前記第１の動作を選択するか前記第２の動作を選択するかを判定することを特徴とする、請求項１又は２に記載の情報処理装置。
【請求項４】
前記制御手段は、予め用意されている、前記重みデータの書き込み方法又は読み出し方法を指定する制御情報に基づいて、前記第１の動作を選択するか前記第２の動作を選択するかを判定することを特徴とする、請求項１又は２に記載の情報処理装置。
【請求項５】
前記第１の重みデータを前記第１のメモリに格納した状態で、前記第２の重みデータを前記第２のメモリに格納可能である場合には、前記第１の動作が選択され、それ以外の場合には前記第２の動作が選択されることを特徴とする、請求項１から４のいずれか１項に記載の情報処理装置。
【請求項６】
前記ニューラルネットワークを用いた処理は、順次処理される複数の処理単位を含み、前記第１の重みデータは第１の処理単位での畳み込み演算処理に用いられる重みデータであり、前記第２の重みデータは第２の処理単位での畳み込み演算処理に用いられる重みデータであることを特徴とする、請求項１から５のいずれか１項に記載の情報処理装置。
【請求項７】
前記複数の処理単位のうち１つの処理単位は、前記ニューラルネットワークの１つの階層における畳み込み演算処理の少なくとも一部であり、前記複数の処理単位の他の１つの処理単位は、前記ニューラルネットワークの各階層における畳み込み演算処理の少なくとも一部を、２以上の階層について含んでいることを特徴とする、請求項６に記載の情報処理装置。
【請求項８】
前記複数の処理単位のうち１つの処理単位は、前記ニューラルネットワークの１つの階層の全領域についての畳み込み演算処理であり、前記複数の処理単位の他の１つの処理単位は、前記ニューラルネットワークの２以上の階層にわたって第１の領域についての畳み込み演算処理を行った後に、前記２以上の階層にわたって第２の領域についての畳み込み演算処理を行う処理であることを特徴とする、請求項６に記載の情報処理装置。
【請求項９】
前記第１のメモリ及び前記第２のメモリは、それぞれ異なるメモリデバイス上のメモリ領域であることを特徴とする、請求項１から８のいずれか１項に記載の情報処理装置。
【請求項１０】
前記第１のメモリ及び前記第２のメモリは、それぞれ、複数の領域に同時にアクセス可能な単一のメモリデバイス上の異なるメモリ領域であることを特徴とする、請求項１から８のいずれか１項に記載の情報処理装置。
【請求項１１】
前記制御手段による制御に従い、前記第１のメモリ及び前記第２のメモリに対して、前記重みデータの書き込みと前記重みデータの読み出しとを指示するメモリコントローラをさらに備えることを特徴とする、請求項１から１０のいずれか１項に記載の情報処理装置。
【請求項１２】
前記情報処理装置は、
認識対象となるデータを取得する取得手段と、
前記データを前記ニューラルネットワークに入力することにより得られた特徴情報に基づいて、前記データにおいて認識されたパターンを示す情報を出力する認識手段と、
をさらに備えることを特徴とする、請求項１から１１のいずれか１項に記載の情報処理装置。
【請求項１３】
前記認識対象となるデータは画像データであり、前記認識手段は、前記画像データにおいて認識されたオブジェクトを示す情報を出力することを特徴とする、請求項１２に記載の情報処理装置。
【請求項１４】
ニューラルネットワークを用いた処理を行う情報処理装置が行うメモリ制御方法であって、
前記情報処理装置は、第１のメモリ及び第２のメモリを備え、
前記メモリ制御方法は、
前記第１のメモリ及び前記第２のメモリへの、前記ニューラルネットワークにおける畳み込み演算処理に用いる重みデータの書き込みと、前記第１のメモリ及び前記第２のメモリからの、前記畳み込み演算処理に用いる重みデータの読み出しと、を制御する制御工程と、
前記第１のメモリと前記第２のメモリとの少なくとも一方から読み出した前記重みデータを用いて、前記畳み込み演算処理を行う処理工程と、を備え、
前記制御工程では、
前記処理工程で前記第１のメモリから第１の重みデータを読み出して前記第１の重みデータを用いた前記畳み込み演算処理を行う際に、並列して前記第２のメモリへの第２の重みデータの書き込みを行う第１の動作と、
前記処理工程で前記第１のメモリ及び前記第２のメモリの双方から第１の重みデータを読み出して前記第１の重みデータを用いた前記畳み込み演算処理を行う第２の動作と、
を切り替えながら前記制御を行うことを特徴とする、メモリ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置及びメモリ制御方法に関し、特にパターン認識処理等のニューラルネットワークを用いた処理におけるメモリ制御に関する。
【背景技術】
【０００２】
画像認識又は音声認識等のパターン認識を含む様々な分野において、ニューラルネットワークに代表される階層的な演算手法が広く利用されている。そして、ニューラルネットワークを高性能かつ安価に実装するための手法も提案されている。
【０００３】
図５は、ニューラルネットワークの一例として、ＣＮＮ畳み込みニューラルネットワーク（Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋｓ、以下ＣＮＮと略記する）の構成例を示す。図５は、入力層５０１、第１階層５０７の特徴面５０２ａ〜５０２ｃ、第２階層５０８の特徴面５０３ａ〜５０３ｃ、第３階層５０９の特徴面５０４ａ〜５０４ｃ、第４階層５１０の特徴面５０５ａ〜５０５ｃ、及び第５階層の特徴面５０６を示す。入力層５０１は、ＣＮＮへの入力データに相当し、例えば画像データに対してＣＮＮ演算を行う場合には所定サイズの画像データに相当する。特徴面は、所定の特徴抽出演算（畳み込み演算及び非線形処理）の処理結果に相当するデータ面である。特徴面は画像データに対する処理結果であるため、面として表現することができる。５２４、５２５ａ〜５２５ｃ、５２６ａ〜５２６ｃ、５２７ａ〜５２７ｃ、及び５２８ａ〜５２８ｃは、１回の畳み込み演算において参照される領域を示す。また、５１１ａ〜５１１ｃ、５１２ａ〜５１４ｃ、５１５ａ〜５１７ｃ、５１８ａ〜５２０ｃ、及び５２１〜５２３は、畳み込み演算に使用される２次元の重み（カーネル）を示す。ＣＮＮは、さらに多数の特徴面及び階層を有していてもよい。
【０００４】
カーネルのサイズがｃｏｌｕｍｎＳｉｚｅ×ｒｏｗＳｉｚｅである２次元の畳み込み演算は、式（１）に示す積和演算により実現することができる。
2020112998.tif 000003
式（１）において、ｉｎｐｕｔ（ｘ，ｙ）は２次元座標（ｘ，ｙ）での参照画素値であり、ｏｕｔｐｕｔ（ｘ，ｙ）は２次元座標（ｘ，ｙ）での演算結果である。ｗｅｉｇｈｔ（ｃｏｌｕｍｎ，ｒｏｗ）は１回の畳み込み演算で参照される領域内の位置（ｃｏｌｕｍｎ，ｒｏｗ）についての重み係数である。ｃｏｌｕｍｎＳｉｚｅ及びｒｏｗＳｉｚｅは、カーネルの水平及び垂直方向のサイズである。
【０００５】
このように、ＣＮＮ演算においては、前階層の特徴面のメモリへの書き込み、カーネルのメモリへの書き込み、メモリから読み出されたデータを用いた積和演算、及び積和演算により得られた次階層の特徴面の出力、が繰り返される。
【０００６】
近年のディープラーニング技術の発展によりニューラルネットワークは大規模化している。ここで、カーネルを読み込むバッファメモリのサイズを小さくするために、ＣＮＮ演算の進行に応じてバッファメモリ中のカーネルを入れ替えることができる。特に、ＣＮＮ演算を高速化することを目的としてハードウェアアクセラレータを用いる場合、アクセラレータ外のメモリから必要なカーネルを取得し、アクセラレータ内のバッファメモリに保持されるカーネルを入れ替えることができる。このような構成によれば、アクセラレータの回路規模を小さくすることができる。
【０００７】
特許文献１は、特徴面及びカーネルを読み込むバッファメモリのサイズをさらに削減することを目的として、ＣＮＮのネットワーク構成に合わせてカーネルのバッファ処理方式を切り替えることを提案している。特許文献１は、例えば、バッファメモリが複数の階層についてのカーネルを保持するリングバッファ方式と、バッファメモリが１つの階層についてのカーネルを保持するフレームバッファ方式と、を切り替えることを提案している。より具体的には、特徴面を格納するためのメモリと、重みを格納するためのメモリの合計が最小となるように、階層毎に上記２つの処理方式が切り替えられる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１８−１４７１８２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
バッファメモリのカーネルを入れ替える構成においては、バッファメモリにカーネルを転送する時間のために、ＣＮＮ演算が遅くなる可能性がある。このようなカーネルの転送時間を隠ぺいするためには、バッファメモリに同時にアクセス可能な２つの領域を設け、一方の領域から演算に使用するカーネルを読み出し、並列してもう一方の領域に次の演算で使用するカーネルを書き込むことができる。
【００１０】
しかしながらこのような方式では、バッファメモリに同時にアクセスできない１つの領域を設ける場合と比較して、２倍のメモリ容量が必要となり、回路規模が増大するという課題がある。特に、特許文献１のように、バッファメモリが複数の階層についてのカーネルを保持するバッファ方式を用いる場合には、カーネルを保持するために必要なメモリ容量が増加する。反対に、回路規模を抑えるためにカーネルを保持するバッファメモリのサイズを小さくすると、処理可能なＣＮＮの規模が制限されることになる。
【００１１】
本発明は、ニューラルネットワークに従う演算を行う情報処理装置において、必要とされるメモリ量を抑えながら、演算を高速化するための手法を提案する。
【課題を解決するための手段】
【００１２】
本発明の目的を達成するために、例えば、本発明の情報処理装置は以下の構成を備える。すなわち、
ニューラルネットワークを用いた処理を行う情報処理装置であって、
第１のメモリ及び第２のメモリと、
前記第１のメモリ及び前記第２のメモリへの、前記ニューラルネットワークにおける畳み込み演算処理に用いる重みデータの書き込みと、前記第１のメモリ及び前記第２のメモリからの、前記畳み込み演算処理に用いる重みデータの読み出しと、を制御する制御手段と、
前記第１のメモリと前記第２のメモリとの少なくとも一方から読み出した前記重みデータを用いて、前記畳み込み演算処理を行う処理手段と、を備え、
前記制御手段は、
前記処理手段が前記第１のメモリから第１の重みデータを読み出して前記第１の重みデータを用いた前記畳み込み演算処理を行う際に、並列して前記第２のメモリへの第２の重みデータの書き込みを行う第１の動作と、
前記処理手段が前記第１のメモリ及び前記第２のメモリの双方から第１の重みデータを読み出して前記第１の重みデータを用いた前記畳み込み演算処理を行う第２の動作と、
を切り替えながら前記制御を行うことを特徴とする。
【発明の効果】
【００１３】
ニューラルネットワークに従う演算を行う情報処理装置において、必要とされるメモリ量を抑えながら、演算を高速化できる。
【図面の簡単な説明】
【００１４】
【図１】ニューラルネットワークを用いた処理を行う構成の一例を示す図。
【図２】認識処理を行う情報処理装置の構成の一例を示す図。
【図３】パターン認識処理の結果の例を示す図。
【図４】一実施形態に係るパターン認識処理の流れを示すフローチャート。
【図５】ＣＮＮの構成例を示す図。
【図６】ＣＮＮの演算ハードウェアの構成例を示す図。
【図７】一実施形態における重み格納部の使用状態を示す図。
【図８】ＣＮＮの処理方式を説明する図。
【図９】一実施形態で用いられるネットワーク情報を示す図。
【図１０】一実施形態で用いられるネットワーク情報を示す図。
【図１１】一実施形態で用いられるネットワーク情報を示す図。
【図１２】一実施形態で用いられるネットワーク情報を示す図。
【発明を実施するための形態】
【００１５】
以下、図面を参照して本発明の実施形態を説明する。しかしながら、以下の実施形態は特許請求の範囲に係る本発明を限定するものではなく、様々な変形が可能である。例えば、以下の実施形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。一方で本発明は、別々の実施形態において説明された特徴の組み合わせも包含している。各実施形態における同じ若しくは同様の構成には、同じ参照番号を付し、重複する説明を省略することがある。
【００１６】
［実施形態１］
図１は、実施形態１に係る、ニューラルネットワークを用いた処理を行う情報処理装置のシステム構成例を示す。また、図２は、実施形態１に係る情報処理装置である認識処理部２０７を有し、パターン認識を行う情報処理装置のシステム構成例を示す。本実施形態におけるパターン認識の種類は特に限定されない。例えば、パターン認識には、画像データにおいて所定のパターン（例えばオブジェクト）を検出する処理、及び音声データにおいて所定のパターン（例えば単語）を検出する処理が含まれる。以下では、画像データからのパターン認識を行う例について説明する。
【００１７】
まず、図２に係る情報処理装置の構成について説明する。画像入力部２０１は、認識対象となるデータを取得する。例えば、画像入力部２０１はパターン認識対象の画像を取得することができる。画像入力部２０１は、例えば撮像装置であってもよい。例えば、画像入力部２０１は、光学系、光電変換デバイス、及び光電変換デバイスを制御するドライバ回路、ＡＤコンバーター、各種の画像補正処理を行う信号処理回路、及びフレームバッファ等を有していてもよい。光電変換デバイスとしては、ＣＣＤ（Ｃｈａｒｇｅ−Ｃｏｕｐｌｅｄ  Ｄｅｖｉｃｅｓ）又はＣＭＯＳ（Ｃｏｍｐｌｉｍｅｎｔａｒｙ  Ｍｅｔａｌ  Ｏｘｉｄｅ  Ｓｅｍｉｃｏｎｄｕｃｔｏｒ）センサ等が挙げられる。また、画像入力部２０１は、撮像装置又は記憶装置から画像データを取得するインタフェースであってもよい。
【００１８】
前処理部２０２は、パターン認識処理を効果的に行うための前処理を行う。前処理としては、例えば、色変換処理及びコントラスト補正処理等の画像データ変換処理が挙げられる。本実施形態において前処理部２０２は画像データ変換処理を行うためのハードウェアを有している。一方で、ＣＰＵ２０４がプログラムに従ってこのような変換処理を行ってもよい。画像入力部２０１から入力された画像データは、前処理部２０２で処理された後にＲＡＭ２０６に格納される。
【００１９】
表示部２０３は、ＣＲＴ又は液晶ディスプレイ等の表示装置である。表示部２０３は、図２に示す情報処理装置にケーブル等を介して接続された外部ディスプレイであってもよい。表示部２０３は、画像及びパターン認識結果を表示することができる。表示部２０３は、パターン認識結果を示す画像を表示してもよく、例えばオブジェクト検出を行う場合には入力画像に対して検出結果を示す枠を重畳することにより得られた画像を表示してもよい。
【００２０】
認識処理部２０７はニューラルネットワークを用いた処理を行う。認識処理部２０７の具体的な構成については後述する。本実施形態において、認識処理部２０７は、画像入力部２０１が取得し、前処理部２０２による処理を受けた認識対象となるデータを、ニューラルネットワークに入力することにより得られる、特徴情報を生成する。このように認識処理部２０７は、認識対象となるデータに対する階層的特徴抽出処理を行うことができる。
【００２１】
ＣＰＵ２０４は、情報処理システム全体の動作を制御する。また、ＣＰＵ２０４は、認識処理部２０７により得られた処理結果に対する後処理を行うことができる。例えばＣＰＵ２０４は、プログラムに従って動作することにより、得られた特徴情報を参照して、認識対象のデータにおいて認識されたパターンを示す情報を生成及び出力することができる。具体例として、認識処理部２０７は認識対象となる画像データの各位置において、特定のパターン（例えば人体又は顔などのオブジェクト）が存在するか否を示す情報、又は特定のパターンの大きさを示す情報を生成してもよい。この場合、ＣＰＵ２０４は、パターン認識結果として、画像データ中の特定のパターン（例えばオブジェクト）の位置又は大きさを示す情報を生成することができる。もっとも、一実施形態に係る情報処理装置は、パターンを示す情報を生成するための専用のハードウェアを有していてもよい。
【００２２】
ＲＯＭ２０５及びＲＡＭ２０６は、処理に必要なプログラム、データ、及び作業領域などをＣＰＵ２０４に提供する。処理に必要なプログラムがＲＯＭ２０５に格納されている場合、プログラムは一時的にＲＡＭ２０６に読み込まれ、そしてＣＰＵ２０４によりプログラムが実行される。本実施形態に係る情報処理装置は、ＲＯＭ２０５の代わりに、これらのプログラム又はデータを格納する記憶媒体を有していてもよい。ＲＡＭ２０６は、処理に必要なデータ以外に、前処理部２０２による前処理後の画像データ、認識処理部２０７による処理結果、ＣＮＮのネットワーク情報（後述）、及びＣＮＮ演算に用いられるカーネル（重みデータ）などを格納することができる。２０８はバスであり、情報処理装置の各構成要素を相互接続する。
【００２３】
以下、認識処理部２０７の構成について詳細に説明する。本実施形態において認識処理部２０７は、ＣＮＮを用いた処理を行う。以下では、認識処理部２０７が図５に示す構成を有するＣＮＮを用いる場合について説明する。ＣＮＮで用いられる重みは、２次元のカーネルに相当する。以下の例では、使用されるカーネルのサイズは全て３×３であり、１要素あたり１バイトである。また、特徴面は、隣接する階層の全ての特徴面と結合しているため、ある特徴面は前の階層の全ての特徴面を用いて算出される。
【００２４】
ＣＮＮ演算では、複数のカーネルを画素単位で走査しながら積和演算が繰り返される。それぞれのカーネルは、バックプロパゲーション学習などの手法を用いて予め決定することができる。また、積和演算の結果に対して、非線形変換を行うことにより特徴面を算出することもできる。図６は、本実施形態におけるＣＮＮ演算を実行可能なハードウェアの構成例であり、後述する処理部１０６は図６に示す構成を有していてもよい。図５の特徴面５０３ａは、前階層である第１階層５０７の３つの特徴面５０２ａ〜５０２ｃを用いて算出される。この場合、処理部６０１がまず各特徴面５０２ａ〜５０２ｃに対する畳み込み演算を実行する。次に、加算部６０２が各特徴面５０２ａ〜５０２ｃに対する畳み込み演算の結果を累積加算する。最後に、変換部６０３が累積加算の結果に対してＲｅＬＵ（Ｒｅｃｔｉｆｉｅｄ  Ｌｉｎｅａｒ  Ｕｎｉｔ）関数又はロジスティック関数などを利用した非線形変換処理を行う。以上の処理を、特徴面全体に対して１画素ずつ走査しながら処理することで、特徴面５０３ａが算出される。なお、本明細書においては、ある階層の特徴面を用いた処理のことを、この階層に対する処理と呼び、この際に用いるカーネルのことを、この階層についてのカーネルと呼ぶ。
【００２５】
図１は、認識処理部２０７の構成を示す図である。第１の重み格納部１０３（第１のメモリ）及び第２の重み格納部１０４（第２のメモリ）は、認識処理部２０７が有している、カーネルを格納するためのバッファメモリである。本実施形態において、第１の重み格納部１０３及び第２の重み格納部１０４は、同時にアクセス可能である。一方で、本実施形態において、第１の重み格納部１０３は、書き込み中には読み出しができず、読み出し中には書き込みができない。第２の重み格納部１０４も同様である。本実施形態において、第１の重み格納部１０３及び第２の重み格納部１０４は、異なるメモリデバイスであり、より具体的にはそれぞれ異なるメモリデバイス上のメモリ領域である。
【００２６】
本実施形態では、第１の重み格納部１０３及び第２の重み格納部１０４のデータ幅は、カーネルのサイズに従って設定されており、９バイトである。また、第１の重み格納部１０３及び第２の重み格納部１０４のワード数は、第２階層５０８〜第４階層５１０に対するフレームバッファ方式の処理における、１階層あたりの最大カーネル数に従って設定されており、９ワードである。このような構成により、フレームバッファ方式の処理において重み格納部をダブルバッファ方式で使用することができる。このように、本実施形態において、それぞれの重み格納部は３×３サイズのカーネルを９個分格納可能である。
【００２７】
ＤＭＡＣ１０２、読出部１０５、及び書込部１０７は、制御部１０８による制御に従い、第１の重み格納部１０３及び第２の重み格納部１０４に対して、重みデータの書き込みと重みデータの読み出しとを指示するメモリコントローラである。
【００２８】
ＤＭＡＣ１０２は、ＲＡＭ２０６から前処理後の画像データ及びカーネルを読み出し、それぞれ画像格納部１０１及び書込部１０７に送信する。また、ＤＭＡＣ１０２は、ＣＮＮのネットワーク情報をＲＡＭ２０６から読み出して制御部１０８に送信する。そして、ＤＭＡＣ１０２は、ＣＮＮ演算の完了後、画像格納部１０１に格納されたＣＮＮ演算の処理結果をＲＡＭ２０６に格納する。
【００２９】
ネットワーク情報とは、ＣＮＮ演算を制御するための情報である。ネットワーク情報には、例えばＣＮＮ演算の順序及び方式が定義されていてもよい。図９は、ネットワーク情報の一例として、本実施形態で用いられるネットワーク情報を示す。図９に示すように、ネットワーク情報は、処理単位のインデックス、各処理単位の処理方式、処理対象の階層番号、並びに各階層の特徴面数、特徴面サイズ、及びカーネルサイズを含むことができる。本実施形態において、ネットワーク情報は予め用意されており、例えばＲＯＭ２０５又はＲＡＭ２０６等に格納されている。
【００３０】
処理単位とはカーネルを入れ替える単位のことである。すなわち、１つのカーネル群を用いて１つの処理単位についての演算が行われ、次に別のカーネル群を用いて別の処理単位についての演算が行われる。ニューラルネットワークを用いた処理は、複数の処理単位を含んでいる。それぞれの処理単位は、ニューラルネットワークにおける畳み込み演算処理の一部であり、順次処理される。以下では、Ｎ番目の処理単位で用いられるカーネル群のことを、単にＮ番目のカーネルと呼ぶ。例えば、Ｎ番目のカーネルはＮ番目の処理単位での畳み込み演算処理に用いられる重みデータであり、Ｎ＋１番目のカーネルはＮ＋１番目の処理単位での畳み込み演算処理に用いられる重みデータである。
【００３１】
処理方式は、各処理単位における演算順序を示す。本実施形態においては、処理形式としてフレームバッファ方式及びリングバッファ方式が用いられる。処理方式がフレームバッファ方式の場合、１つの処理単位は１階層に対する処理に相当し、リングバッファ方式の場合、１つの処理単位は複数階層に対する処理を含むことができる。図９に示す例では、入力層５０１及び第１階層５０７に対する処理はリングバッファ方式で行われる。また、第２階層５０８〜第４階層５１０に対する処理はフレームバッファ方式で行われる。
【００３２】
図８（Ａ）は、フレームバッファ方式の演算を説明する図である。フレームバッファ方式では、１階層ずつ順にＣＮＮ演算が行われる。本実施形態において、フレームバッファ方式の１つの処理単位は、ニューラルネットワークの１つの階層の全領域についての畳み込み演算処理である。この際には、演算が行われる１つの階層についてのカーネルがバッファメモリに格納される。例えば、第２階層５０８に対する処理を行う場合には、カーネル５１５ａ〜ｃ、５１６ａ〜ｃ、及び５１７ａ〜ｃがバッファメモリに格納される。そして、特徴面５０３ａ〜ｃに対する、カーネル５１５ａ〜５１７ａを用いたＣＮＮ演算により、特徴面５０４ａが算出される。同様に、カーネル５１５ｂ〜５１７ｂ及び５１５ｃ〜５１７ｃを用いたＣＮＮ演算により、特徴面５０４ｂ及び５０４ｃがそれぞれ算出される。
【００３３】
図８（Ｂ）は、リングバッファ方式の演算を説明する図である。リングバッファ方式では、複数階層についての部分的な処理が繰り返される。本実施形態において、リングバッファ方式の１つの処理単位では、ニューラルネットワークの２以上の階層にわたって第１の領域についての畳み込み演算処理を行った後に、２以上の階層にわたって第２の領域についての畳み込み演算処理が行われる。例えば、特徴面５０６の領域８０６を得るためには、第４階層５１０の特徴面５０５ａ〜５０５ｃの一部である領域５２８ａ〜５２８ｃに対するＣＮＮ演算が行われる。このために、カーネル５２１〜５２３がバッファメモリに格納される。また、領域５２８ａ〜５２８ｃを算出するために、第３階層５０９の特徴面５０４ａ〜５０４ｃの領域５２７ａ〜５２７ｃに対するＣＮＮ演算も行われる。このために、カーネル５１８ａ〜５２０ｃもバッファメモリに格納される。このように、処理対象の各階層についてのカーネルがバッファメモリに格納され、階層を跨ってＣＮＮ演算が行われる。その後、別の領域についても階層を跨ったＣＮＮ演算が行われる。
【００３４】
なお、本実施形態に係る情報処理装置は、ＣＮＮ演算に必要な画像データ又は特徴面を格納するバッファメモリ（不図示）を有することができる。例えば、上記のようにフレームバッファ方式で第２階層５０８に対する処理を行う場合、このバッファメモリは演算に必要な特徴面５０３ａ〜ｃを格納することができる。また、上記のようにリングバッファ方式で領域８０６を得る場合、このバッファメモリは演算に必要な領域５２７ａ〜５２７ｃ及び領域５２８ａ〜５２８ｃなどを格納することができる。
【００３５】
書込部１０７は、制御部１０８からの制御信号に従ってＤＭＡＣ１０２から受信したカーネルを第１の重み格納部１０３及び第２の重み格納部１０４に格納する。制御部１０８から入力される制御信号は、格納するカーネルの数を示す信号、及び格納先の重み格納部を示す信号を含むことができる。書込部１０７は、指定された重み格納部に、先頭アドレスから順番に、指定された数のカーネルを格納する。格納先として第１の重み格納部１０３が指定され、かつ指定されたカーネルの数が第１の重み格納部１０３のワード数よりも大きい場合、書込部１０７は、第１の重み格納部１０３の全アドレスにカーネルを格納する。そして、書込部１０７は、残りのカーネルを第２の重み格納部１０４に、先頭アドレスから順番に格納する。
【００３６】
読出部１０５は、制御部１０８からの制御信号に従って、第１の重み格納部１０３及び第２の重み格納部１０４に格納されたカーネルを読み出して処理部１０６に送信する。制御部１０８から入力される制御信号は、読み出し元の重み格納部を示す信号及び読み出すカーネルのアドレスを示す信号を含むことができる。読出部１０５は、指定された重み格納部の指定されたアドレスからカーネルを読み出して処理部１０６に送信する。
【００３７】
処理部１０６は、入力データとして画像格納部１０１から画像データを読み出し、読出部１０５から受信したカーネルを用いて、階層単位でＣＮＮ演算を実行する。そして、処理部１０６は、演算結果を画像格納部１０１に格納する。処理部１０６は、例えば、図６に示すハードウェアを用いて実現することができる。
【００３８】
制御部１０８は、ＤＭＡＣ１０２から受信したネットワーク情報に基づいて、ＤＭＡＣ１０２、書込部１０７、読出部１０５、及び処理部１０６を制御する。制御部１０８は、第１の重み格納部１０３及び第２の重み格納部１０４がどの処理単位についてのカーネルを格納しているかを示す情報を保持することができる。本実施形態において制御部１０８は、この情報を参照及び更新することにより、カーネルの格納方法を制御するメモリ制御を行う。より具体的には、本実施形態において制御部１０８は、第１の重み格納部１０３（第１のメモリ）及び第２の重み格納部１０４（第２のメモリ）への、ニューラルネットワークにおける畳み込み演算処理に用いるカーネルの書き込みを制御する。また、制御部１０８は、第１の重み格納部１０３及び第２の重み格納部１０４からの処理部１０６への、畳み込み演算処理に用いるカーネルの読み出しを制御する。
【００３９】
本実施形態において制御部１０８は、制御方式として第１の動作と第２の動作とを切り替えながら、カーネルの書き込み及び読み出しの制御を行うことができる。第１の動作においては、第１のメモリへの第１の重みデータの書き込みが行われ、続けて第１のメモリからの第１の重みデータの読み出し及び第２のメモリへの第２の重みデータの書き込みが並列して行われる。本明細書においては、第１の動作で用いられるこのような方式をダブルバッファ方式と呼ぶ。この方式においては、重みデータの読み出し及び書き込みが並列して行われる。
【００４０】
一方で、第２の動作においては、第１のメモリ及び第２のメモリへの第１の重みデータの書き込みが行われ、続けて第１のメモリ及び第２のメモリからの第１の重みデータの読み出しが行われる。本明細書においては、第２の動作で用いられるこのような方式をシングルバッファ方式と呼ぶ。この方式においては、重みデータの読み出しと書き込みとを排他的に実行することができる。
【００４１】
＜情報処理装置の動作＞
以下、本実施形態に係る情報処理装置の動作を示すフローチャートである図４を参照して、情報処理装置の動作、とりわけダブルバッファ方式とシングルバッファ方式の切り替えについて説明する。以下では、ＣＮＮを用いて画像中の顔を検出する一例について説明する。
【００４２】
ステップＳ４０１でＣＰＵ２０４は、ＤＭＡＣ１０２にネットワーク情報を転送するよう指示する。ＤＭＡＣ１０２はＲＡＭ２０６からネットワーク情報を読み出して制御部１０８に転送する。
【００４３】
ステップＳ４０２で制御部１０８は、ＤＭＡＣ１０２に入力画像を転送するよう指示する。ＤＭＡＣ１０２はＲＡＭ２０６に格納された前処理後の画像データを読み出して画像格納部１０１に格納する。転送の完了後、処理はステップＳ４０３に進む。
【００４４】
ステップＳ４０３で制御部１０８は、Ｎ番目のカーネルが第１の重み格納部１０３又は第２の重み格納部１０４に格納済であるかどうかを判定する。ここで、Ｎは図９における処理単位のインデックスに相当し、初期値は１である。制御部１０８は、第１の重み格納部１０３及び第２の重み格納部１０４の状態を示す情報を参照して、この判断を行うことができる。Ｎ番目のカーネルが少なくとも一方の重み格納部に格納されている場合、処理はステップＳ４０５に進み、いずれの重み格納部にも格納されていない場合、処理はステップＳ４０４に進む。
【００４５】
ステップＳ４０４では、Ｎ番目のカーネルが重み格納部に格納される。具体的には、制御部１０８はＤＭＡＣ１０２にＮ番目のカーネルを書込部１０７に転送するように指示する。制御部１０８は、ネットワーク情報を参照して、Ｎ番目の処理単位の処理方式がフレームバッファ方式である場合は、階層番号で指定された１階層についてのカーネルを転送するよう指示することができる。一方、制御部１０８は、Ｎ番目の処理単位の処理方式がリングバッファ方式である場合は、階層番号で指定された処理対象の階層についてのカーネルを転送するよう指示することができる。ＤＭＡＣ１０２は、指定されたカーネルをＲＡＭ２０６から読み出して書込部１０７に送信する。
【００４６】
格納先としては、第１の重み格納部１０３及び第２の重み格納部１０４のいずれも選択可能であるが、本実施例では、ステップＳ４０４においては、常に少なくとも第１の重み格納部１０３が選択される。そして、指定されたカーネルが第１の重み格納部１０３に収まらない場合には、第２の重み格納部１０４も選択される。例えば制御部１０８は、ネットワーク情報を参照してＮ番目のカーネルの数を算出することができる。そして、制御部１０８は、書込部１０７に対して、格納するカーネルの数を指定する。カーネルの数が第１の重み格納部１０３のワード数以下である場合、制御部１０８は、カーネルを第１の重み格納部１０３に格納するように書込部１０７に指示する。また制御部１０８は、第１の重み格納部１０３がＮ番目のカーネルを保持していることを示すように、重み格納部が格納するカーネルを示す情報を更新する。一方、カーネルの数が第１の重み格納部１０３のワード数よりも大きい場合、制御部１０８はカーネルを第１の重み格納部１０３及び第２の重み格納部１０４に格納するように書込部１０７に指示する。また制御部１０８は、第１の重み格納部１０３及び第２の重み格納部１０４がＮ番目のカーネルを保持していることを示すように、重み格納部が格納するカーネルを示す情報を更新する。書込部１０７は、ＤＭＡＣ１０２から受信したカーネルを、制御部１０８からの指定に従って第１の重み格納部１０３及び指定された場合には第２の重み格納部１０４に格納する。
【００４７】
ステップＳ４０５で制御部１０８は、Ｎ＋１番目のカーネルを第１の重み格納部１０３又は第２の重み格納部１０４に格納可能であるかどうかを判定する。本実施形態の場合、制御部１０８は、カーネルのサイズを示す情報を取得し、このサイズを示す情報に基づいて、ダブルバッファ方式（第１の動作，Ｓ４０６）を選択するかシングルバッファ方式（第２の動作，Ｓ４０７）を選択するかを判定する。本実施形態においては、ネットワーク情報がカーネルのサイズを示す情報を含んでいる。制御部１０８は、例えば、Ｎ番目のカーネルを第１の重み格納部１０３（又は第２の重み格納部１０４）に格納した状態で、Ｎ＋１番目のカーネルを第２の重み格納部１０４（又は第２の重み格納部１０４）に格納可能どうかを判定できる。そして、制御部１０８は、格納可能な場合にはダブルバッファ方式の動作を選択し、それ以外の場合にはシングルバッファ方式の動作を選択することができる。制御部１０８、具体例として、次の３つの条件がともに成立する場合にＮ＋１番目のカーネルを格納可能であると判定することができる。
条件１．Ｎ番目のカーネルが第１の重み格納部１０３又は第２の重み格納部１０４のいずれか一方にのみ格納されている。
条件２．Ｎ＋１番目のカーネルが第１の重み格納部１０３又は第２の重み格納部１０４のうち、Ｎ番目のカーネルを保持している重み格納部とは異なる重み格納部に収まる。
条件３．Ｎ番目の処理単位が最後の処理単位ではない。
Ｎ＋１番目のカーネルを格納可能である場合、処理はステップＳ４０６に進み、格納できない場合、処理はステップＳ４０７に進む。
【００４８】
ステップＳ４０６では、Ｎ＋１番目のカーネルの格納と、Ｎ番目の処理単位についてのＣＮＮ演算とが並列に実行される。Ｎ＋１番目のカーネルを格納するために、制御部１０８は、まず書込部１０７に格納するカーネルの数を指定する。制御部１０８は、カーネルの格納先としてＮ番目のカーネルの格納先とは異なる重み格納部を指定する。つまり、制御部１０８は、Ｎ番目のカーネルの格納先として第１の重み格納部１０３を指定した場合は、Ｎ＋１番目のカーネルの格納先として第２の重み格納部１０４を指定する。一方、制御部１０８は、Ｎ番目のカーネルの格納先として第２の重み格納部１０４を指定した場合は、Ｎ＋１番目のカーネルの格納先として第１の重み格納部１０３を指定する。また、制御部１０８は重み格納部の指定方法に合わせて、重み格納部が格納するカーネルを示す情報を更新する。そして、制御部１０８はＮ＋１番目のカーネルを書込部１０７に転送するように、ＤＭＡＣ１０２に指示する。書込部１０７は、ＤＭＡＣ１０２から受信したカーネルを、制御部１０８からの指定に従って第１の重み格納部１０３又は第２の重み格納部１０４に格納する。
【００４９】
さらに制御部１０８は、Ｎ番目の処理単位のＣＮＮ演算を実行するために、ネットワーク情報を参照し、処理部１０６に処理方式、処理対象の階層番号、並びに処理対象の各階層の特徴面数、特徴面サイズ、及びカーネルサイズを指示する。そして、制御部１０８は、処理方式に合わせて、読出部１０５に対して、カーネルが読み出される重み格納部と、カーネルのアドレスとを順次指定する。ここで、制御部１０８は、Ｎ番目のカーネルが読み出される重み格納部としては、同じステップＳ４０６でＮ＋１番目のカーネルの格納先として指定した重み格納部とは異なる重み格納部を指定する。つまり、制御部１０８は、Ｎ＋１番目のカーネルの格納先として第１の重み格納部１０３を指定した場合は、読出部１０５に対して第２の重み格納部１０４を指定する。一方、制御部１０８は、Ｎ＋１番目のカーネルの格納先として第２の重み格納部１０４を指定した場合は、読出部１０５に対して第１の重み格納部１０３を指定する。読出部１０５は、制御部１０８の指定に従って、重み格納部からカーネルを読み出し、処理部１０６に送る。処理部１０６は、制御部１０８から指定された階層の特徴面を画像格納部１０１から読み出し、読出部１０５から受信したカーネルを用いて、指定された処理方式に従ってＣＮＮ演算を実行する。そして処理部１０６は、演算結果データである特徴面を画像格納部１０１に格納する。
【００５０】
ステップＳ４０７では、Ｎ番目の処理単位のＣＮＮ演算処理を実行する。制御部１０８は第１の重み格納部１０３に格納されたカーネルを使用する場合は読出部１０５に読出し元として第１の重み格納部１０３を指定し、第１の重み格納部１０３におけるカーネルのアドレスを指定する。一方、第２の重み格納部１０４に格納されたカーネルを使用する場合は読出部１０５に読出し元として第２の重み格納部１０４を指定し、第２の重み格納部１０４におけるカーネルのアドレスを指定する。このように制御部１０８は、第１の重み格納部１０３及び第２の重み格納部１０４の双方から、処理部１０６による演算に必要なカーネルを読み出すように、読出部１０５を制御することができる。その他のＣＮＮ演算処理の内容についてはステップＳ４０６と同様である。
【００５１】
ステップＳ４０８で制御部１０８は、全処理単位の処理が完了したかどうかを判定する。全処理単位の処理が完了した場合、処理はステップＳ４１０に進む。一方、未処理の処理単位が残っている場合、処理はステップＳ４０９に進む。
【００５２】
ステップＳ４０９では、制御部１０８が処理単位のインデックスを１だけインクリメントする。その後、ステップＳ４０３〜Ｓ４０７において次の処理単位が処理される。図５に示すＣＮＮに従う処理を行う場合、ループを４回繰り返すことにより最終的な特徴面５０６が得られる。
【００５３】
ステップＳ４１０で制御部１０８は、ＤＭＡＣ１０２にＣＮＮ演算の処理結果を転送するよう指示する。ＤＭＡＣ１０２はこの指示に従い、画像格納部１０１から最終的な特徴面５０６を読み出してＲＡＭ２０６に転送する。
【００５４】
ステップＳ４１１でＣＰＵ２０４は、ＲＡＭ２０６に格納された特徴面を用いて顔の検出位置を判定する。図３は、パターン認識結果を模式的に示す図である。特徴面３０１における画素値が大きいことは、その画素が顔の中心位置である可能性が高いことを示す。ＣＰＵ２０４は、特徴面３０１を用いて顔の位置及び大きさ等の情報を抽出することができる。さらにＣＰＵ２０４は、この情報を基に顔の位置を示す検出枠３０２〜３０４を生成し、入力画像に重畳して表示部２０３に表示させることができる。
【００５５】
以上のように、ステップＳ４０５における判断に従って、ステップＳ４０６におけるダブルバッファ方式の動作と、ステップＳ４０７におけるシングルバッファ方式の動作と、が切り替えられる。ステップＳ４０６においては、処理部１０６が第１の重み格納部１０３からＮ番目のカーネル（第１の重みデータ）を読み出し、Ｎ番目のカーネルを用いた畳み込み演算処理を行うことができる。また、これと並列して、第２の重み格納部１０４へのＮ＋１番目のカーネル（第２の重みデータ）の書き込みが行われる（第１の動作）。本実施形態においては、Ｎ番目のカーネルが、第１の重み格納部１０３に格納されており、Ｎ＋１番目のカーネルを第２の重み格納部１０４に格納できる場合、このような動作が行われる。Ｎ番目のカーネルは、同じループのステップＳ４０４又は以前のループのステップＳ４０６で第１の重み格納部１０３に格納されている。また、Ｎ番目のカーネルの読み出し及びＮ＋１番目のカーネルの書き込みは、第１の重み格納部１０３へのＮ番目のカーネルの書き込みの完了からＮ＋２番目のカーネル（第３の重みデータ）の書き込み（次のループ）までの間に行われる。ここで、処理部１０６はＮ番目のカーネル、Ｎ＋１番目のカーネル、及びＮ＋２番目のカーネルを順に用いるものとする。
【００５６】
ステップＳ４０６においては、処理部１０６が第２の重み格納部１０４からＮ番目のカーネルを読み出し、Ｎ番目のカーネルを用いた畳み込み演算処理を行うこともできる。これと並列して、第２の重み格納部１０３へのＮ＋１番目のカーネルの書き込みが行われる。本実施形態においては、Ｎ番目のカーネルが第２の重み格納部１０４に格納されており、Ｎ＋１番目のカーネルを第１の重み格納部１０３に格納できる場合、このような動作が行われる。
【００５７】
一方で、ステップＳ４０７においては、処理部１０６が第１の重み格納部１０３及び第２の重み格納部１０４の双方からＮ番目のカーネルを読み出してＮ番目のカーネルを用いた畳み込み演算処理を行うことができる（第２の動作）。ここで、Ｎ番目のカーネルは、同じループのステップＳ４０４で第１の重み格納部１０３及び第２の重み格納部１０４に格納されている。本実施形態においては、Ｎ番目のカーネルが前のループにおいて第１の重み格納部１０３又は第２の重み格納部１０４に格納できなかった場合、第２の動作が行われる。第１の重み格納部１０３及び第２の重み格納部１０４からのＮ番目のカーネルの読み出しは、Ｎ番目のカーネルの書き込みの完了（Ｓ４０４）からＮ＋１番目のカーネルの書き込み（次のループ）までの間に行われる。
【００５８】
なお、本実施形態においては、Ｎ番目のカーネルが第１の重み格納部１０３又は第２の重み格納部１０４の一方のみに格納されており、Ｎ＋１番目のカーネルを他方に格納できない場合も、シングルバッファ方式の動作が行われる。この場合処理部１０６は、第１の重み格納部１０３又は第２の重み格納部１０４の一方からＮ番目のカーネルを読み出してこれを用いた畳み込み演算処理を行う一方で、並列した他方へのカーネルの書き込みを行わないように、制御を行う。もっとも、このような場合に、処理がステップＳ４０５からＳ４０６に進み、ダブルバッファ方式の動作が行われてもよい。この場合、ステップＳ４０６において処理部１０６は、第１の重み格納部１０３又は第２の重み格納部１０４の一方からＮ番目のカーネルを読み出してこれを用いた畳み込み演算処理を行うように、制御を行うことができる。また処理部１０６は、これと並列して、第１の重み格納部１０３又は第２の重み格納部１０４の他方への、Ｎ＋１番目のカーネルの一部の書き込みを行うように、制御を行うことができる。
【００５９】
図７は、図５に示す構成を有するＣＮＮ演算を、図９に示すネットワーク情報に基づいて処理する場合の、第１の重み格納部１０３及び第２の重み格納部１０４の状態を示す。図７には、上部から順にアドレス０番地、１番地、……が示されており、１アドレスには１つのカーネルを格納可能である。また、Ｋａ，ｂは１つのカーネルを示す。ａは階層番号を示し、ｂは１階層の中でのカーネルの番号を示す。ここで、入力層の階層番号は０とする。図中の矢印は、重み格納部に対するアクセスが書き込みであるか読み出しであるかを示す。以下、各ループ（Ｎ＝１〜４）のステップＳ４０３〜Ｓ４０７での動作を説明する。
【００６０】
・１回目のループ（Ｎ＝１）
最初の処理であるため、ステップＳ４０３で制御部１０８は１番目のカーネルは未格納と判定する。ステップＳ４０４で制御部１０８は、ネットワーク情報から、１番目の処理単位は、入力層５０１及び第１階層５０７に対するリングバッファ方式の処理であることを読み取る。そして制御部１０８は、入力層５０１、第１階層５０７、及び第２階層５０８の特徴面数に基づいて、１番目のカーネル数を算出する。図５の例では特徴面は隣接する階層の全ての特徴面と結合している。したがって、カーネル数は１（入力層５０１の特徴面数）×３（第１階層５０７の特徴面数）＋３（第１階層５０７の特徴面数）×３（第２階層５０８の特徴面数）＝１２である。
【００６１】
そして、制御部１０８は書込部１０７にカーネル数として１２を指定し、格納先として第１の重み格納部１０３を指定する。また、制御部１０８は、重み格納部が格納するカーネルを示す情報を、第１の重み格納部１０３及び第２の重み格納部１０４が１番目のカーネルを格納していることを示すように更新する。書込部１０７は、図７（Ａ）に示すように、ＤＭＡＣ１０２から受信したカーネルのうち、５１１ａ〜５１４ｂの９個を第１の重み格納部１０３に格納し、残りの５１２ｃ〜５１４ｃの３個を第２の重み格納部１０４に書き込む。
【００６２】
１番目のカーネルが第１の重み格納部１０３及び第２の重み格納部１０４の両方に格納されているため、ステップＳ４０５の条件１は満たされず、処理はステップＳ４０７に進む。ステップＳ４０７で制御部１０８は、ネットワーク情報を参照して、処理部１０６にリングバッファ方式の処理を指定する。また、制御部１０８は、処理部１０６に対し、処理対象の階層番号として０及び１、入力層５０１の特徴面数として１、第１階層５０７の特徴面数として３、及びカーネルサイズとして３×３を設定する。そして制御部１０８は、リングバッファ方式によるＣＮＮ演算に合わせて、ＣＮＮ演算に必要なカーネルを格納する重み格納部及びアドレスを、読出部１０５に対して指定する。ここで制御部１０８は、入力層５０１についてのカーネル５１１ａ〜ｃ及び第１階層についてのカーネル５１２ａ〜５１４ｃのうち、必要なカーネルを選択することができる。処理部１０６は、画像格納部１０１から読み出した特徴面と読出部１０５から受信したカーネルとを用いて、入力層５０１及び第１階層５０７に対するリングバッファ方式のＣＮＮ演算を行う。
【００６３】
・２回目のループ（Ｎ＝２）
ステップＳ４０３で制御部１０８は、重み格納部が格納するカーネルを示す情報を参照して、２番目のカーネルは未格納と判定する。ステップＳ４０４で制御部１０８はネットワーク情報から、２番目の処理単位は第２階層５０８に対するフレームバッファ方式の処理であることを読み取る。そして、制御部１０８は１回目のループと同様の方法で２番目のカーネル数（９）を算出し、書込部１０７にカーネル数として９及び格納先として第１の重み格納部１０３を指定する。さらに、制御部１０８は、第１の重み格納部１０３に２番目のカーネルを格納している状態を示すように、重み格納部が格納するカーネルを示す情報を更新する。書込部１０７は、図７（Ｂ）に示すように、ＤＭＡＣ１０２から受信したカーネル５１５ａ〜５１７ｃを第１の重み格納部１０３に格納する。
【００６４】
２番目のカーネル５１５ａ〜５１７ｃは第１の重み格納部１０３にのみ格納されているため、ステップＳ４０５の条件１は成立する。また、３番目の処理単位は第３階層５０９に対するフレームバッファ方式の処理であり、使用するカーネルはカーネル５１８ａ〜５２０ｃの９個であるため、条件２も成立する。さらに、３番目の処理単位は最後の処理単位ではないため、ステップＳ４０５の条件３も成立する。このようにステップＳ４０５の条件１〜３が全て満たされるため、処理はステップＳ４０６に進む。
【００６５】
ステップＳ４０６で制御部１０８は、書込部１０７にカーネル数として９及び格納先として第２の重み格納部１０４を指定する。また制御部１０８は、第２の重み格納部１０３に３番目のカーネルを格納している状態を示すように、重み格納部が格納するカーネルを示す情報を更新する。そして、ＤＭＡＣ１０２に第３階層についてのカーネル５１８ａ〜５２０ｃを転送するよう指示することで、図７（Ｃ）に示すように第２の重み格納部１０４にこれらのカーネルを格納する。
【００６６】
併せてステップＳ４０６で制御部１０８はネットワーク情報を参照して、処理部１０６に対して、処理方式としてフレームバッファ方式、処理対象の階層番号として２、特徴面数として３、及びカーネルサイズとして３×３を指定する。そして、フレームバッファ方式によるＣＮＮ演算に合わせて、制御部１０８は、第２階層についてのカーネル５１５ａ〜５１７ｃのうち必要なカーネルを格納する重み格納部及びアドレスを読出部１０５に通知する。処理部１０６は、画像格納部１０１から読み出した特徴面及び読出部１０５から受信したカーネルを用いて、第２階層５０８に対するフレームバッファ方式の処理を行う。
【００６７】
・３回目のループ（Ｎ＝３）
３回目のループは２回目のループと同様であるため詳細は省略する。ステップＳ４０３で制御部１０８は、第３階層についてのカーネル５１８ａ〜５２０ｃは第２の重み格納部１０４に格納済と判定し、処理はステップＳ４０５に進む。ここでも、ステップＳ４０５の条件１〜３が全て満たされ、処理はステップＳ４０６に進む。ステップＳ４０６で制御部１０８は、書込部１０７にカーネルの数として３（５２１〜５２３）、カーネルの格納先として第１の重み格納部１０３を指定し、さらに重み格納部が格納するカーネルを示す情報を更新する。そして、図７（Ｄ）に示すように第１の重み格納部１０３に第４階層についてのカーネル５２１〜５２３が格納される。併せてステップＳ４０６で制御部１０８は、ネットワーク情報を参照して、処理部１０６に対して第３階層に対するＣＮＮ演算を行わせる。
【００６８】
・４回目のループ（Ｎ＝４）
ステップＳ４０３で制御部１０８は、２〜３回目のループと同様に、第４階層についてのカーネル５２１〜５２３は第１の重み格納部１０４に格納済と判定し、処理はステップＳ４０５に進む。第４の処理単位は最後の処理単位であるため、ステップＳ４０５の条件３は満たされず、処理はステップＳ４０７に進む。ステップＳ４０７で制御部１０８は、ネットワーク情報を参照して、処理部１０６に対して処理方式としてフレームバッファ方式、処理対象の階層番号として４、特徴面数として３、及びカーネルサイズとして３×３を指定する。そして制御部１０８は、フレームバッファ方式によるＣＮＮ演算に合わせて、第４階層についてのカーネル５２１〜５２３のうちＣＮＮ演算に必要なカーネルを格納する重み格納部及びアドレスを読出部１０５に通知する。処理部１０６は、画像格納部１０１から読み出した特徴面と、読出部１０５から受信したカーネルとを用いて、第４階層５１０に対するフレームバッファ方式の処理を行う。
【００６９】
図５に示す構成のＣＮＮ演算を、図９に示したネットワーク情報に基づいて行う場合、全ての処理単位をダブルバッファ方式により処理するためには、重み格納部のワード数が十分に大きい必要がある。すなわち、この場合に必要なメモリ容量は、（９＋１２）×９＝１８９バイトである。このように、少なくとも一方の重み格納部のワード数を、全ての処理単位のうちの最大のカーネルの総数（１２）以上にする必要がある。これに対して、本実施形態で必要とされるメモリ容量は（９＋９）×９＝１６２バイトであり、全ての処理単位をダブルバッファ方式で処理する場合と比較してメモリ容量を約１４％削減することができる。一方で、本実施形態によれば、２回目及び３回目の処理ループをダブルバッファ方式で処理することができるため、処理を高速化できる。
【００７０】
本実施形態の構成は、別のネットワーク構成を用いる場合にも適用可能である。例えば、ＣＮＮ演算を図１０に示すネットワーク情報に基づいて行う場合でも、やはりメモリ削減効果が得られる。図１０の構成では、１番目の処理単位（リングバッファ方式の処理）に必要なカーネルの総数は、１６＋１６×３２＋３２×６４＋６４×６４＝６６７２である。また、２〜４番目の処理単位（フレームバッファ方式の処理）に必要なカーネルの総数は６４×６４＝４０９６である。
【００７１】
このように、全ての処理単位をダブルバッファ方式により処理するためには、少なくとも一方の重み格納部のワード数が６６７２以上、メモリ容量が（４０９６＋６６７２）×９＝９４．６Ｋバイト以上である必要がある。それに対し、本実施形態において必要なメモリ容量は（４０９６＋４０９６）×９＝７２．０Ｋバイトであり、メモリ容量を２２．６Ｋバイト削減することが可能となる。
【００７２】
本実施形態においては、図９のネットワーク情報に従って、リングバッファ方式の処理においては２つのメモリが連結されてシングルバッファ方式で使用された。また、フレームバッファ方式の処理においては２つのメモリがダブルバッファ方式で使用された。しかしながら、本実施形態は異なる方式の処理にも適用可能である。例えば、処理方式としてフレームバッファ処理が採用される際に、１階層についての重みのサイズに応じてシングルバッファ方式とダブルバッファ方式とが切り替えられてもよい。図１１は、このような構成で用いることができるネットワーク情報の例を示す。
【００７３】
以上説明したように、本実施形態においては、ニューラルネットワークの重み格納用のメモリとして２つのメモリが使用される。そして、連続する２つの処理単位の重みをそれぞれ一方のメモリに格納可能である場合には、重みの書き込みと読み出しとが並列して実行される。また、それ以外の場合には重みの書き込みと読み出しとが順次実行される。このような構成により、ニューラルネットワークを用いた演算処理を、シングルバッファ方式のみを用いる場合よりも高速に、ダブルバッファ方式のみを用いる場合よりも小容量のメモリで、行うことが可能となる。
【００７４】
［実施形態２］
実施形態１では、制御部１０８はネットワーク情報に基づいてシングルバッファ方式とダブルバッファ方式を切り替えた。しかしながら、切り替えの制御方法はこのような方法には限られない。実施形態２では、予め用意されている、重みデータの書き込み方法又は読み出し方法を指定する制御情報に基づいて、ダブルバッファ方式（第１の動作）を選択するかシングルバッファ方式（第２の動作）を選択するかが判定される。例えば、実施形態１のような処理手順を示す制御情報に従って、制御部１０８が動作してもよい。このような構成によれば、制御部１０８の構成を単純化することが可能となり、回路規模を削減することができる。
【００７５】
この制御情報としては、図１２に示すネットワーク情報を用いることができる。図１２に示すネットワーク情報は、図９と同様のネットワーク情報に加えて、以下の４つの情報をさらに含んでいる。すなわち、このネットワーク情報は、各処理単位の重みを格納済みかどうかを示す「重み格納済」情報、及び次の処理単位の重みを格納できるかどうかを示す「次の重み格納可」情報を含んでいる。また、このネットワーク情報はさらに、各処理単位の重みの格納先を示す「重み格納先」情報、及び各処理単位のカーネル数を示す「カーネル数」情報を含んでいる。
【００７６】
実施形態２に係る構成及び処理は実施形態１と同様であり、以下では異なる点を説明する。ステップＳ４０３で制御部１０８は、ネットワーク情報からＮ番目の処理単位の「重み格納済」情報を読み取る。「重み格納済」情報がＹＥＳである場合、処理はステップＳ４０４に進み、ＮＯである場合、処理はステップＳ４０５に進む。
【００７７】
ステップＳ４０４で制御部１０８は、ネットワーク情報からＮ番目の処理単位の「重み格納先」及び「カーネル数」情報を読み取る。ここで、「重み格納先」として第１の重み格納部１０３と第２の重み格納部１０４の双方が指定されている場合、２つの重み格納部は連結されてシングルバッファ方式で使用される。これらの情報に従って、制御部１０８は、実施形態１と同様にＤＭＡＣ１０２及び書込部１０７を制御する。
【００７８】
ステップＳ４０５で制御部１０８は、ネットワーク情報からＮ番目の処理単位の「次の重み格納可」情報を読み取る。「次の重み格納可」情報がＹＥＳである場合、処理はステップＳ４０６に進み、ＮＯである場合、処理はステップＳ４０７に進む。
【００７９】
ステップＳ４０６で制御部１０８は、Ｎ＋１番目の処理単位の「重み格納先」及び「カーネル数」情報を読み取る。これらの情報に従って、制御部１０８は、実施形態１と同様にＤＭＡＣ１０２、読出部１０５、及び書込部１０７を制御する。こうして、ダブルバッファ方式の動作が行われる。ステップＳ４０７で制御部１０８は、実施形態１と同様に、シングルバッファ方式に従う制御を行う。
【００８０】
［その他の実施形態］
上述の実施形態においては、第１の重み格納部１０３及び第２の重み格納部１０４は別個のメモリデバイスであり、一方の重み格納部への書き込みと、他方の重み格納部からの読み出しを並列に実行可能であった。しかしながら、第１の重み格納部１０３及び第２の重み格納部１０４として、書き込みと読み出しを並列に実行可能な別の構成を採用することができる。例えば、第１の重み格納部１０３及び第２の重み格納部１０４は、それぞれ、複数の領域に同時にアクセス可能な単一のメモリデバイス上の異なるメモリ領域であってもよい。例えば、デュアルポートメモリに設定された２つの重み格納領域が、それぞれ第１の重み格納部１０３及び第２の重み格納部１０４であってもよい。このような実施形態においても、ステップＳ４０６で制御部１０８は、書込部１０７及び読出部１０５が並列して動作するように制御することができる。一方、ステップＳ４０４及びＳ４０７で制御部１０８は、重みの書き込みと読み出しとを排他的に実行するよう制御することができる。例えば、制御部１０８は、ステップＳ４０４では書込部１０７のみが動作し、ステップＳ４０７では読出部１０５のみが動作するように、制御を行うことができる。
【００８１】
もっとも、書き込みと読み出しとが、ダブルバッファ方式では完全に並列して行われ、シングルバッファ方式では完全に排他的に行われることは、必須ではない。例えば、ダブルバッファ方式において、書き込みと読み出しとが時分割方式で並列実行可能であってもよい。例えば、第１の重み格納部１０３及び第２の重み格納部１０４として、シングルポートメモリ上の２つのメモリ領域と、書き込みと読み出しを調停する調停回路と、を用いることができる。このような構成によっても、書込部１０７による重みの書込みと、読出部１０５による重みの読出しと、を並列して行うことができる。この場合、ステップＳ４０６のうち、処理部１０６による演算処理が行われているが、読出部１０５による重みの読み出しが行われていない期間において、書込部１０７による重みの書込みを行うことができる。このように、処理部１０６が一方の重み格納部から重みデータを読み出してこの畳み込み演算処理を行う際に、並列して他方の重み格納部への重みデータの書き込みを行うことにより、独立した重みデータの書き込み期間が不要となり、処理速度が向上する。
【００８２】
また、シングルバッファ方式において、処理部１０６は第１の重み格納部１０３及び第２の重み格納部１０４から交互に同じ処理単位の重みデータを読み出すことができる。この際、一方の重み格納部からの重みデータの読み出しが終了した後には、この重み格納部への別の処理単位の重みデータの格納と並行して、処理部１０６が他方の重み格納部からの重みデータの読み出しを継続してもよい。
【００８３】
また、上述の実施形態に係る情報処理装置は、２つの重み格納部を有していたが、３つ以上の重み格納部を有していてもよい。例えば、Ｐ個の重み格納部を有している情報処理装置において、ある処理単位の重みを格納するためにＱ（Ｑ≦Ｐ）個のメモリが必要である場合には、この重みを連結されたＱ個のメモリに格納することができる。この際、次の処理単位の重みをＰ−Ｑ個のメモリに格納可能であれば、次の処理単位の重みを残りのメモリに格納することができる。このような構成によっても、重みの読み出しと書き込みとが並列に行われ、処理が高速化される。
【００８４】
また、上述の実施形態においては、２つの重み格納部のサイズは同じであるが、２つの重み格納部のサイズが異なっていてもよい。それぞれの重み格納部のサイズは、ネットワーク構成、処理速度、及び回路規模などのバランスを考慮して設定することができる。
【００８５】
上述の実施形態においては、フレームバッファ方式で処理される１つの処理単位は１つの階層を含み、リングバッファ方式で処理される１つの処理単位は複数の階層を含んでいた。しかしながら、フレームバッファ方式で処理される１つの処理単位が複数の階層を含んでもよいし、リングバッファ方式で処理される１つの処理単位が１つの階層のみを含んでいてもよい。このような場合でも、処理単位である１つの階層毎にダブルバッファ方式とシングルバッファ方式とを切り替えることができる。さらには、フレームバッファ処理及びリングバッファ処理以外の処理方式を用いることもできる。
【００８６】
また、上述の実施形態においては、１つの処理単位はニューラルネットワークの１つ又は複数の階層における畳み込み演算処理に相当した。しかしながら、１つの処理単位は、ニューラルネットワークを用いた処理のうち、任意の一部分であってもよい。例えば、１つの処理単位が、ニューラルネットワークの１つの階層における畳み込み演算処理の少なくとも一部であってもよい。具体例としては、１つの処理単位が１つの階層の１つの領域についての畳み込み演算処理であって、別の処理単位が同じ階層の別の領域についての畳み込み演算処理であってもよい。さらに、１つの処理単位が、ニューラルネットワークの各階層における畳み込み演算処理の少なくとも一部を、２以上の階層について含んでいてもよい。
【００８７】
（その他の実施例）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００８８】
１０２：ＤＭＡＣ、１０３：第１の重み格納部、１０４：第２の重み格納部、１０５：読出部、１０６：処理部、１０７：書込部、１０８：制御部
【図１】
2020112998.tif 000004
【図２】
2020112998.tif 000005
【図３】
2020112998.tif 000006
【図４】
2020112998.tif 000007
【図５】
2020112998.tif 000008
【図６】
2020112998.tif 000009
【図７】
2020112998.tif 000010
【図８】
2020112998.tif 000011
【図９】
2020112998.tif 000012
【図１０】
2020112998.tif 000013
【図１１】
2020112998.tif 000014
【図１２】
2020112998.tif 000015