IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ キヤノン株式会社の特許一覧

<>
  • 特許-情報処理装置及びメモリ制御方法 図1
  • 特許-情報処理装置及びメモリ制御方法 図2
  • 特許-情報処理装置及びメモリ制御方法 図3
  • 特許-情報処理装置及びメモリ制御方法 図4
  • 特許-情報処理装置及びメモリ制御方法 図5
  • 特許-情報処理装置及びメモリ制御方法 図6
  • 特許-情報処理装置及びメモリ制御方法 図7
  • 特許-情報処理装置及びメモリ制御方法 図8
  • 特許-情報処理装置及びメモリ制御方法 図9
  • 特許-情報処理装置及びメモリ制御方法 図10
  • 特許-情報処理装置及びメモリ制御方法 図11
  • 特許-情報処理装置及びメモリ制御方法 図12
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-10-18
(45)【発行日】2024-10-28
(54)【発明の名称】情報処理装置及びメモリ制御方法
(51)【国際特許分類】
   G06N 3/063 20230101AFI20241021BHJP
   G06N 3/0464 20230101ALI20241021BHJP
   G06F 17/10 20060101ALI20241021BHJP
   G06F 12/06 20060101ALI20241021BHJP
【FI】
G06N3/063
G06N3/0464
G06F17/10 A
G06F12/06 525B
【請求項の数】 11
(21)【出願番号】P 2023019466
(22)【出願日】2023-02-10
(62)【分割の表示】P 2019002778の分割
【原出願日】2019-01-10
(65)【公開番号】P2023058636
(43)【公開日】2023-04-25
【審査請求日】2023-02-10
(73)【特許権者】
【識別番号】000001007
【氏名又は名称】キヤノン株式会社
(74)【代理人】
【識別番号】110003281
【氏名又は名称】弁理士法人大塚国際特許事務所
(72)【発明者】
【氏名】中嶋 大介
(72)【発明者】
【氏名】チン ソクイ
【審査官】坂庭 剛史
(56)【参考文献】
【文献】特開2018-147182(JP,A)
【文献】米国特許出願公開第2018/0314671(US,A1)
【文献】特開2018-073103(JP,A)
【文献】特開2015-197702(JP,A)
【文献】特開2006-171244(JP,A)
【文献】特開平02-310777(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/063
G06N 3/0464
G06F 17/10
G06F 12/06
(57)【特許請求の範囲】
【請求項1】
ニューラルネットワークを用いた処理を行う情報処理装置であって、
第1のメモリ及び第2のメモリと、
書き込み手段及び読み出し手段と、
前記第1のメモリ及び前記第2のメモリへの、前記ニューラルネットワークにおける畳み込み演算処理に用いる重みデータの書き込みと、前記第1のメモリ及び前記第2のメモリからの、前記畳み込み演算処理に用いる重みデータの読み出しと、の制御を行う制御手段と、
前記第1のメモリと前記第2のメモリとの少なくとも一方から読み出した前記重みデータを用いて、前記畳み込み演算処理を行う処理手段と、を備え、
前記制御手段は、前記重みデータのサイズを示す情報に基づいて、
前記書き込み手段が第1の重みデータを前記第1のメモリに書き込み、前記書き込み手段が第2の重みデータを前記第2のメモリに書き込む間に並行して、前記読み出し手段が前記第1の重みデータを前記第1のメモリから読み出し前記処理手段が前記第1の重みデータを用いて畳み込み演算処理を実行する第1の動作と、
前記書き込み手段が、前記第1の重みデータを前記第1のメモリ及び第2のメモリに書き込み、前記読み出し手段は前記第1のメモリ及び前記第2のメモリの両方から前記第1の重みデータを読み出し、前記処理手段は前記第1の重みデータを用いて畳み込み演算処理を実行する第2の動作と、
を切り替えながら前記制御を行うことを特徴とする、情報処理装置。
【請求項2】
前記処理手段が前記第1の重みデータ、前記第2の重みデータ、及び第3の重みデータを順に用いる場合において、
前記第1の動作においては、前記第1のメモリに前記第1の重みデータが書き込まれ、前記第1のメモリへの前記第1の重みデータの書き込みの完了から前記第3の重みデータの書き込みまでの間に、前記第1のメモリからの前記第1の重みデータの読み出しと、前記第2のメモリへの前記第2の重みデータの書き込みと、が並列して行われ、
前記第2の動作においては、前記第1のメモリ及び前記第2のメモリに前記第1の重みデータが書き込まれ、前記第1の重みデータの書き込みの完了から前記第2の重みデータの書き込みまでの間に、前記第1のメモリ及び前記第2のメモリから前記第1の重みデータが読み出される
ことを特徴とする、請求項1に記載の情報処理装置。
【請求項3】
前記ニューラルネットワークを用いた処理は、順次処理される複数の処理単位を含み、前記第1の重みデータは第1の処理単位での畳み込み演算処理に用いられる重みデータであり、前記第2の重みデータは第2の処理単位での畳み込み演算処理に用いられる重みデータであることを特徴とする、請求項1からのいずれか1項に記載の情報処理装置。
【請求項4】
前記複数の処理単位のうち1つの処理単位は、前記ニューラルネットワークの1つの階層における畳み込み演算処理の少なくとも一部であり、前記複数の処理単位の他の1つの処理単位は、前記ニューラルネットワークの各階層における畳み込み演算処理の少なくとも一部を、2以上の各階層について含んでいることを特徴とする、請求項に記載の情報処理装置。
【請求項5】
前記複数の処理単位のうち1つの処理単位は、前記ニューラルネットワークの1つの階層の全領域についての畳み込み演算処理であり、前記複数の処理単位の他の1つの処理単位は、前記ニューラルネットワークの2以上の階層にわたって第1の領域についての畳み込み演算処理を行った後に、前記2以上の階層にわたって第2の領域についての畳み込み演算処理を行う処理であることを特徴とする、請求項に記載の情報処理装置。
【請求項6】
前記第1のメモリ及び前記第2のメモリは、それぞれ異なるメモリデバイス上のメモリ領域であることを特徴とする、請求項1からのいずれか1項に記載の情報処理装置。
【請求項7】
前記第1のメモリ及び前記第2のメモリは、それぞれ、複数の領域に同時にアクセス可能な単一のメモリデバイス上の異なるメモリ領域であることを特徴とする、請求項1からのいずれか1項に記載の情報処理装置。
【請求項8】
前記制御手段による制御に従い、前記第1のメモリ及び前記第2のメモリに対して、前記重みデータの書き込みと前記重みデータの読み出しとを指示するメモリコントローラをさらに備えることを特徴とする、請求項1からのいずれか1項に記載の情報処理装置。
【請求項9】
前記情報処理装置は、
認識対象となるデータを取得する取得手段と、
前記データを前記ニューラルネットワークに入力することにより得られた特徴情報に基づいて、前記データにおいて認識されたパターンを示す情報を出力する認識手段と、
をさらに備えることを特徴とする、請求項1からのいずれか1項に記載の情報処理装置。
【請求項10】
前記認識対象となるデータは画像データであり、前記認識手段は、前記画像データにおいて認識されたオブジェクトを示す情報を出力することを特徴とする、請求項に記載の情報処理装置。
【請求項11】
ニューラルネットワークを用いた処理を行う情報処理装置が行うメモリ制御方法であって、
前記情報処理装置は、第1のメモリ第2のメモリ、書き込み手段、読み出し手段、及び処理手段を備え、
前記メモリ制御方法は、
前記第1のメモリ及び前記第2のメモリへの、前記ニューラルネットワークにおける畳み込み演算処理に用いる重みデータの書き込みと、前記第1のメモリ及び前記第2のメモリからの、前記畳み込み演算処理に用いる重みデータの読み出しと、の制御を行う制御工程と、
前記処理手段が、前記第1のメモリと前記第2のメモリとの少なくとも一方から読み出した前記重みデータを用いて、前記畳み込み演算処理を行う処理工程と、を備え、
前記制御工程では、前記重みデータのサイズを示す情報に基づいて、
前記書き込み手段が第1の重みデータを前記第1のメモリに書き込み、前記書き込み手段が第2の重みデータを前記第2のメモリに書き込む間に並行して、前記読み出し手段が前記第1の重みデータを前記第1のメモリから読み出し前記処理手段が前記第1の重みデータを用いて畳み込み演算処理を実行する第1の動作と、
前記書き込み手段が、前記第1の重みデータを前記第1のメモリ及び第2のメモリに書き込み、前記読み出し手段は前記第1のメモリ及び前記第2のメモリの両方から前記第1の重みデータを読み出し、前記処理手段は前記第1の重みデータを用いて畳み込み演算処理を実行する第2の動作と、
を切り替えながら前記制御を行うことを特徴とする、メモリ制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置及びメモリ制御方法に関し、特にパターン認識処理等のニューラルネットワークを用いた処理におけるメモリ制御に関する。
【背景技術】
【0002】
画像認識又は音声認識等のパターン認識を含む様々な分野において、ニューラルネットワークに代表される階層的な演算手法が広く利用されている。そして、ニューラルネットワークを高性能かつ安価に実装するための手法も提案されている。
【0003】
図5は、ニューラルネットワークの一例として、CNN畳み込みニューラルネットワーク(Convolutional Neural Networks、以下CNNと略記する)の構成例を示す。図5は、入力層501、第1階層507の特徴面502a~502c、第2階層508の特徴面503a~503c、第3階層509の特徴面504a~504c、第4階層510の特徴面505a~505c、及び第5階層の特徴面506を示す。入力層501は、CNNへの入力データに相当し、例えば画像データに対してCNN演算を行う場合には所定サイズの画像データに相当する。特徴面は、所定の特徴抽出演算(畳み込み演算及び非線形処理)の処理結果に相当するデータ面である。特徴面は画像データに対する処理結果であるため、面として表現することができる。524、525a~525c、526a~526c、527a~527c、及び528a~528cは、1回の畳み込み演算において参照される領域を示す。また、511a~511c、512a~514c、515a~517c、518a~520c、及び521~523は、畳み込み演算に使用される2次元の重み(カーネル)を示す。CNNは、さらに多数の特徴面及び階層を有していてもよい。
【0004】
カーネルのサイズがcolumnSize×rowSizeである2次元の畳み込み演算は、式(1)に示す積和演算により実現することができる。
式(1)において、input(x,y)は2次元座標(x,y)での参照画素値であり、output(x,y)は2次元座標(x,y)での演算結果である。weight(column,row)は1回の畳み込み演算で参照される領域内の位置(column,row)についての重み係数である。columnSize及びrowSizeは、カーネルの水平及び垂直方向のサイズである。
【0005】
このように、CNN演算においては、前階層の特徴面のメモリへの書き込み、カーネルのメモリへの書き込み、メモリから読み出されたデータを用いた積和演算、及び積和演算により得られた次階層の特徴面の出力、が繰り返される。
【0006】
近年のディープラーニング技術の発展によりニューラルネットワークは大規模化している。ここで、カーネルを読み込むバッファメモリのサイズを小さくするために、CNN演算の進行に応じてバッファメモリ中のカーネルを入れ替えることができる。特に、CNN演算を高速化することを目的としてハードウェアアクセラレータを用いる場合、アクセラレータ外のメモリから必要なカーネルを取得し、アクセラレータ内のバッファメモリに保持されるカーネルを入れ替えることができる。このような構成によれば、アクセラレータの回路規模を小さくすることができる。
【0007】
特許文献1は、特徴面及びカーネルを読み込むバッファメモリのサイズをさらに削減することを目的として、CNNのネットワーク構成に合わせてカーネルのバッファ処理方式を切り替えることを提案している。特許文献1は、例えば、バッファメモリが複数の階層についてのカーネルを保持するリングバッファ方式と、バッファメモリが1つの階層についてのカーネルを保持するフレームバッファ方式と、を切り替えることを提案している。より具体的には、特徴面を格納するためのメモリと、重みを格納するためのメモリの合計が最小となるように、階層毎に上記2つの処理方式が切り替えられる。
【先行技術文献】
【特許文献】
【0008】
【文献】特開2018-147182号公報
【発明の概要】
【発明が解決しようとする課題】
【0009】
バッファメモリのカーネルを入れ替える構成においては、バッファメモリにカーネルを転送する時間のために、CNN演算が遅くなる可能性がある。このようなカーネルの転送時間を隠ぺいするためには、バッファメモリに同時にアクセス可能な2つの領域を設け、一方の領域から演算に使用するカーネルを読み出し、並列してもう一方の領域に次の演算で使用するカーネルを書き込むことができる。
【0010】
しかしながらこのような方式では、バッファメモリに同時にアクセスできない1つの領域を設ける場合と比較して、2倍のメモリ容量が必要となり、回路規模が増大するという課題がある。特に、特許文献1のように、バッファメモリが複数の階層についてのカーネルを保持するバッファ方式を用いる場合には、カーネルを保持するために必要なメモリ容量が増加する。反対に、回路規模を抑えるためにカーネルを保持するバッファメモリのサイズを小さくすると、処理可能なCNNの規模が制限されることになる。
【0011】
本発明は、ニューラルネットワークに従う演算を行う情報処理装置において、必要とされるメモリ量を抑えながら、演算を高速化するための手法を提案する。
【課題を解決するための手段】
【0012】
本発明の目的を達成するために、例えば、本発明の情報処理装置は以下の構成を備える。すなわち、
ニューラルネットワークを用いた処理を行う情報処理装置であって、
第1のメモリ及び第2のメモリと、
書き込み手段及び読み出し手段と、
前記第1のメモリ及び前記第2のメモリへの、前記ニューラルネットワークにおける畳み込み演算処理に用いる重みデータの書き込みと、前記第1のメモリ及び前記第2のメモリからの、前記畳み込み演算処理に用いる重みデータの読み出しと、の制御を行う制御手段と、
前記第1のメモリと前記第2のメモリとの少なくとも一方から読み出した前記重みデータを用いて、前記畳み込み演算処理を行う処理手段と、を備え、
前記制御手段は、前記重みデータのサイズを示す情報に基づいて、
前記書き込み手段が第1の重みデータを前記第1のメモリに書き込み、前記書き込み手段が第2の重みデータを前記第2のメモリに書き込む間に並行して、前記読み出し手段が前記第1の重みデータを前記第1のメモリから読み出し前記処理手段が前記第1の重みデータを用いて畳み込み演算処理を実行する第1の動作と、
前記書き込み手段が、前記第1の重みデータを前記第1のメモリ及び第2のメモリに書き込み、前記読み出し手段は前記第1のメモリ及び前記第2のメモリの両方から前記第1の重みデータを読み出し、前記処理手段は前記第1の重みデータを用いて畳み込み演算処理を実行する第2の動作と、
を切り替えながら前記制御を行うことを特徴とする。
【発明の効果】
【0013】
ニューラルネットワークに従う演算を行う情報処理装置において、必要とされるメモリ量を抑えながら、演算を高速化できる。
【図面の簡単な説明】
【0014】
図1】ニューラルネットワークを用いた処理を行う構成の一例を示す図。
図2】認識処理を行う情報処理装置の構成の一例を示す図。
図3】パターン認識処理の結果の例を示す図。
図4】一実施形態に係るパターン認識処理の流れを示すフローチャート。
図5】CNNの構成例を示す図。
図6】CNNの演算ハードウェアの構成例を示す図。
図7】一実施形態における重み格納部の使用状態を示す図。
図8】CNNの処理方式を説明する図。
図9】一実施形態で用いられるネットワーク情報を示す図。
図10】一実施形態で用いられるネットワーク情報を示す図。
図11】一実施形態で用いられるネットワーク情報を示す図。
図12】一実施形態で用いられるネットワーク情報を示す図。
【発明を実施するための形態】
【0015】
以下、図面を参照して本発明の実施形態を説明する。しかしながら、以下の実施形態は特許請求の範囲に係る本発明を限定するものではなく、様々な変形が可能である。例えば、以下の実施形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。一方で本発明は、別々の実施形態において説明された特徴の組み合わせも包含している。各実施形態における同じ若しくは同様の構成には、同じ参照番号を付し、重複する説明を省略することがある。
【0016】
[実施形態1]
図1は、実施形態1に係る、ニューラルネットワークを用いた処理を行う情報処理装置のシステム構成例を示す。また、図2は、実施形態1に係る情報処理装置である認識処理部207を有し、パターン認識を行う情報処理装置のシステム構成例を示す。本実施形態におけるパターン認識の種類は特に限定されない。例えば、パターン認識には、画像データにおいて所定のパターン(例えばオブジェクト)を検出する処理、及び音声データにおいて所定のパターン(例えば単語)を検出する処理が含まれる。以下では、画像データからのパターン認識を行う例について説明する。
【0017】
まず、図2に係る情報処理装置の構成について説明する。画像入力部201は、認識対象となるデータを取得する。例えば、画像入力部201はパターン認識対象の画像を取得することができる。画像入力部201は、例えば撮像装置であってもよい。例えば、画像入力部201は、光学系、光電変換デバイス、及び光電変換デバイスを制御するドライバ回路、ADコンバーター、各種の画像補正処理を行う信号処理回路、及びフレームバッファ等を有していてもよい。光電変換デバイスとしては、CCD(Charge-Coupled Devices)又はCMOS(Complimentary Metal Oxide Semiconductor)センサ等が挙げられる。また、画像入力部201は、撮像装置又は記憶装置から画像データを取得するインタフェースであってもよい。
【0018】
前処理部202は、パターン認識処理を効果的に行うための前処理を行う。前処理としては、例えば、色変換処理及びコントラスト補正処理等の画像データ変換処理が挙げられる。本実施形態において前処理部202は画像データ変換処理を行うためのハードウェアを有している。一方で、CPU204がプログラムに従ってこのような変換処理を行ってもよい。画像入力部201から入力された画像データは、前処理部202で処理された後にRAM206に格納される。
【0019】
表示部203は、CRT又は液晶ディスプレイ等の表示装置である。表示部203は、図2に示す情報処理装置にケーブル等を介して接続された外部ディスプレイであってもよい。表示部203は、画像及びパターン認識結果を表示することができる。表示部203は、パターン認識結果を示す画像を表示してもよく、例えばオブジェクト検出を行う場合には入力画像に対して検出結果を示す枠を重畳することにより得られた画像を表示してもよい。
【0020】
認識処理部207はニューラルネットワークを用いた処理を行う。認識処理部207の具体的な構成については後述する。本実施形態において、認識処理部207は、画像入力部201が取得し、前処理部202による処理を受けた認識対象となるデータを、ニューラルネットワークに入力することにより得られる、特徴情報を生成する。このように認識処理部207は、認識対象となるデータに対する階層的特徴抽出処理を行うことができる。
【0021】
CPU204は、情報処理システム全体の動作を制御する。また、CPU204は、認識処理部207により得られた処理結果に対する後処理を行うことができる。例えばCPU204は、プログラムに従って動作することにより、得られた特徴情報を参照して、認識対象のデータにおいて認識されたパターンを示す情報を生成及び出力することができる。具体例として、認識処理部207は認識対象となる画像データの各位置において、特定のパターン(例えば人体又は顔などのオブジェクト)が存在するか否を示す情報、又は特定のパターンの大きさを示す情報を生成してもよい。この場合、CPU204は、パターン認識結果として、画像データ中の特定のパターン(例えばオブジェクト)の位置又は大きさを示す情報を生成することができる。もっとも、一実施形態に係る情報処理装置は、パターンを示す情報を生成するための専用のハードウェアを有していてもよい。
【0022】
ROM205及びRAM206は、処理に必要なプログラム、データ、及び作業領域などをCPU204に提供する。処理に必要なプログラムがROM205に格納されている場合、プログラムは一時的にRAM206に読み込まれ、そしてCPU204によりプログラムが実行される。本実施形態に係る情報処理装置は、ROM205の代わりに、これらのプログラム又はデータを格納する記憶媒体を有していてもよい。RAM206は、処理に必要なデータ以外に、前処理部202による前処理後の画像データ、認識処理部207による処理結果、CNNのネットワーク情報(後述)、及びCNN演算に用いられるカーネル(重みデータ)などを格納することができる。208はバスであり、情報処理装置の各構成要素を相互接続する。
【0023】
以下、認識処理部207の構成について詳細に説明する。本実施形態において認識処理部207は、CNNを用いた処理を行う。以下では、認識処理部207が図5に示す構成を有するCNNを用いる場合について説明する。CNNで用いられる重みは、2次元のカーネルに相当する。以下の例では、使用されるカーネルのサイズは全て3×3であり、1要素あたり1バイトである。また、特徴面は、隣接する階層の全ての特徴面と結合しているため、ある特徴面は前の階層の全ての特徴面を用いて算出される。
【0024】
CNN演算では、複数のカーネルを画素単位で走査しながら積和演算が繰り返される。それぞれのカーネルは、バックプロパゲーション学習などの手法を用いて予め決定することができる。また、積和演算の結果に対して、非線形変換を行うことにより特徴面を算出することもできる。図6は、本実施形態におけるCNN演算を実行可能なハードウェアの構成例であり、後述する処理部106は図6に示す構成を有していてもよい。図5の特徴面503aは、前階層である第1階層507の3つの特徴面502a~502cを用いて算出される。この場合、処理部601がまず各特徴面502a~502cに対する畳み込み演算を実行する。次に、加算部602が各特徴面502a~502cに対する畳み込み演算の結果を累積加算する。最後に、変換部603が累積加算の結果に対してReLU(Rectified Linear Unit)関数又はロジスティック関数などを利用した非線形変換処理を行う。以上の処理を、特徴面全体に対して1画素ずつ走査しながら処理することで、特徴面503aが算出される。なお、本明細書においては、ある階層の特徴面を用いた処理のことを、この階層に対する処理と呼び、この際に用いるカーネルのことを、この階層についてのカーネルと呼ぶ。
【0025】
図1は、認識処理部207の構成を示す図である。第1の重み格納部103(第1のメモリ)及び第2の重み格納部104(第2のメモリ)は、認識処理部207が有している、カーネルを格納するためのバッファメモリである。本実施形態において、第1の重み格納部103及び第2の重み格納部104は、同時にアクセス可能である。一方で、本実施形態において、第1の重み格納部103は、書き込み中には読み出しができず、読み出し中には書き込みができない。第2の重み格納部104も同様である。本実施形態において、第1の重み格納部103及び第2の重み格納部104は、異なるメモリデバイスであり、より具体的にはそれぞれ異なるメモリデバイス上のメモリ領域である。
【0026】
本実施形態では、第1の重み格納部103及び第2の重み格納部104のデータ幅は、カーネルのサイズに従って設定されており、9バイトである。また、第1の重み格納部103及び第2の重み格納部104のワード数は、第2階層508~第4階層510に対するフレームバッファ方式の処理における、1階層あたりの最大カーネル数に従って設定されており、9ワードである。このような構成により、フレームバッファ方式の処理において重み格納部をダブルバッファ方式で使用することができる。このように、本実施形態において、それぞれの重み格納部は3×3サイズのカーネルを9個分格納可能である。
【0027】
DMAC102、読出部105、及び書込部107は、制御部108による制御に従い、第1の重み格納部103及び第2の重み格納部104に対して、重みデータの書き込みと重みデータの読み出しとを指示するメモリコントローラである。
【0028】
DMAC102は、RAM206から前処理後の画像データ及びカーネルを読み出し、それぞれ画像格納部101及び書込部107に送信する。また、DMAC102は、CNNのネットワーク情報をRAM206から読み出して制御部108に送信する。そして、DMAC102は、CNN演算の完了後、画像格納部101に格納されたCNN演算の処理結果をRAM206に格納する。
【0029】
ネットワーク情報とは、CNN演算を制御するための情報である。ネットワーク情報には、例えばCNN演算の順序及び方式が定義されていてもよい。図9は、ネットワーク情報の一例として、本実施形態で用いられるネットワーク情報を示す。図9に示すように、ネットワーク情報は、処理単位のインデックス、各処理単位の処理方式、処理対象の階層番号、並びに各階層の特徴面数、特徴面サイズ、及びカーネルサイズを含むことができる。本実施形態において、ネットワーク情報は予め用意されており、例えばROM205又はRAM206等に格納されている。
【0030】
処理単位とはカーネルを入れ替える単位のことである。すなわち、1つのカーネル群を用いて1つの処理単位についての演算が行われ、次に別のカーネル群を用いて別の処理単位についての演算が行われる。ニューラルネットワークを用いた処理は、複数の処理単位を含んでいる。それぞれの処理単位は、ニューラルネットワークにおける畳み込み演算処理の一部であり、順次処理される。以下では、N番目の処理単位で用いられるカーネル群のことを、単にN番目のカーネルと呼ぶ。例えば、N番目のカーネルはN番目の処理単位での畳み込み演算処理に用いられる重みデータであり、N+1番目のカーネルはN+1番目の処理単位での畳み込み演算処理に用いられる重みデータである。
【0031】
処理方式は、各処理単位における演算順序を示す。本実施形態においては、処理形式としてフレームバッファ方式及びリングバッファ方式が用いられる。処理方式がフレームバッファ方式の場合、1つの処理単位は1階層に対する処理に相当し、リングバッファ方式の場合、1つの処理単位は複数階層に対する処理を含むことができる。図9に示す例では、入力層501及び第1階層507に対する処理はリングバッファ方式で行われる。また、第2階層508~第4階層510に対する処理はフレームバッファ方式で行われる。
【0032】
図8(A)は、フレームバッファ方式の演算を説明する図である。フレームバッファ方式では、1階層ずつ順にCNN演算が行われる。本実施形態において、フレームバッファ方式の1つの処理単位は、ニューラルネットワークの1つの階層の全領域についての畳み込み演算処理である。この際には、演算が行われる1つの階層についてのカーネルがバッファメモリに格納される。例えば、第2階層508に対する処理を行う場合には、カーネル515a~c、516a~c、及び517a~cがバッファメモリに格納される。そして、特徴面503a~cに対する、カーネル515a~517aを用いたCNN演算により、特徴面504aが算出される。同様に、カーネル515b~517b及び515c~517cを用いたCNN演算により、特徴面504b及び504cがそれぞれ算出される。
【0033】
図8(B)は、リングバッファ方式の演算を説明する図である。リングバッファ方式では、複数階層についての部分的な処理が繰り返される。本実施形態において、リングバッファ方式の1つの処理単位では、ニューラルネットワークの2以上の階層にわたって第1の領域についての畳み込み演算処理を行った後に、2以上の階層にわたって第2の領域についての畳み込み演算処理が行われる。例えば、特徴面506の領域806を得るためには、第4階層510の特徴面505a~505cの一部である領域528a~528cに対するCNN演算が行われる。このために、カーネル521~523がバッファメモリに格納される。また、領域528a~528cを算出するために、第3階層509の特徴面504a~504cの領域527a~527cに対するCNN演算も行われる。このために、カーネル518a~520cもバッファメモリに格納される。このように、処理対象の各階層についてのカーネルがバッファメモリに格納され、階層を跨ってCNN演算が行われる。その後、別の領域についても階層を跨ったCNN演算が行われる。
【0034】
なお、本実施形態に係る情報処理装置は、CNN演算に必要な画像データ又は特徴面を格納するバッファメモリ(不図示)を有することができる。例えば、上記のようにフレームバッファ方式で第2階層508に対する処理を行う場合、このバッファメモリは演算に必要な特徴面503a~cを格納することができる。また、上記のようにリングバッファ方式で領域806を得る場合、このバッファメモリは演算に必要な領域527a~527c及び領域528a~528cなどを格納することができる。
【0035】
書込部107は、制御部108からの制御信号に従ってDMAC102から受信したカーネルを第1の重み格納部103及び第2の重み格納部104に格納する。制御部108から入力される制御信号は、格納するカーネルの数を示す信号、及び格納先の重み格納部を示す信号を含むことができる。書込部107は、指定された重み格納部に、先頭アドレスから順番に、指定された数のカーネルを格納する。格納先として第1の重み格納部103が指定され、かつ指定されたカーネルの数が第1の重み格納部103のワード数よりも大きい場合、書込部107は、第1の重み格納部103の全アドレスにカーネルを格納する。そして、書込部107は、残りのカーネルを第2の重み格納部104に、先頭アドレスから順番に格納する。
【0036】
読出部105は、制御部108からの制御信号に従って、第1の重み格納部103及び第2の重み格納部104に格納されたカーネルを読み出して処理部106に送信する。制御部108から入力される制御信号は、読み出し元の重み格納部を示す信号及び読み出すカーネルのアドレスを示す信号を含むことができる。読出部105は、指定された重み格納部の指定されたアドレスからカーネルを読み出して処理部106に送信する。
【0037】
処理部106は、入力データとして画像格納部101から画像データを読み出し、読出部105から受信したカーネルを用いて、階層単位でCNN演算を実行する。そして、処理部106は、演算結果を画像格納部101に格納する。処理部106は、例えば、図6に示すハードウェアを用いて実現することができる。
【0038】
制御部108は、DMAC102から受信したネットワーク情報に基づいて、DMAC102、書込部107、読出部105、及び処理部106を制御する。制御部108は、第1の重み格納部103及び第2の重み格納部104がどの処理単位についてのカーネルを格納しているかを示す情報を保持することができる。本実施形態において制御部108は、この情報を参照及び更新することにより、カーネルの格納方法を制御するメモリ制御を行う。より具体的には、本実施形態において制御部108は、第1の重み格納部103(第1のメモリ)及び第2の重み格納部104(第2のメモリ)への、ニューラルネットワークにおける畳み込み演算処理に用いるカーネルの書き込みを制御する。また、制御部108は、第1の重み格納部103及び第2の重み格納部104からの処理部106への、畳み込み演算処理に用いるカーネルの読み出しを制御する。
【0039】
本実施形態において制御部108は、制御方式として第1の動作と第2の動作とを切り替えながら、カーネルの書き込み及び読み出しの制御を行うことができる。第1の動作においては、第1のメモリへの第1の重みデータの書き込みが行われ、続けて第1のメモリからの第1の重みデータの読み出し及び第2のメモリへの第2の重みデータの書き込みが並列して行われる。本明細書においては、第1の動作で用いられるこのような方式をダブルバッファ方式と呼ぶ。この方式においては、重みデータの読み出し及び書き込みが並列して行われる。
【0040】
一方で、第2の動作においては、第1のメモリ及び第2のメモリへの第1の重みデータの書き込みが行われ、続けて第1のメモリ及び第2のメモリからの第1の重みデータの読み出しが行われる。本明細書においては、第2の動作で用いられるこのような方式をシングルバッファ方式と呼ぶ。この方式においては、重みデータの読み出しと書き込みとを排他的に実行することができる。
【0041】
<情報処理装置の動作>
以下、本実施形態に係る情報処理装置の動作を示すフローチャートである図4を参照して、情報処理装置の動作、とりわけダブルバッファ方式とシングルバッファ方式の切り替えについて説明する。以下では、CNNを用いて画像中の顔を検出する一例について説明する。
【0042】
ステップS401でCPU204は、DMAC102にネットワーク情報を転送するよう指示する。DMAC102はRAM206からネットワーク情報を読み出して制御部108に転送する。
【0043】
ステップS402で制御部108は、DMAC102に入力画像を転送するよう指示する。DMAC102はRAM206に格納された前処理後の画像データを読み出して画像格納部101に格納する。転送の完了後、処理はステップS403に進む。
【0044】
ステップS403で制御部108は、N番目のカーネルが第1の重み格納部103又は第2の重み格納部104に格納済であるかどうかを判定する。ここで、Nは図9における処理単位のインデックスに相当し、初期値は1である。制御部108は、第1の重み格納部103及び第2の重み格納部104の状態を示す情報を参照して、この判断を行うことができる。N番目のカーネルが少なくとも一方の重み格納部に格納されている場合、処理はステップS405に進み、いずれの重み格納部にも格納されていない場合、処理はステップS404に進む。
【0045】
ステップS404では、N番目のカーネルが重み格納部に格納される。具体的には、制御部108はDMAC102にN番目のカーネルを書込部107に転送するように指示する。制御部108は、ネットワーク情報を参照して、N番目の処理単位の処理方式がフレームバッファ方式である場合は、階層番号で指定された1階層についてのカーネルを転送するよう指示することができる。一方、制御部108は、N番目の処理単位の処理方式がリングバッファ方式である場合は、階層番号で指定された処理対象の階層についてのカーネルを転送するよう指示することができる。DMAC102は、指定されたカーネルをRAM206から読み出して書込部107に送信する。
【0046】
格納先としては、第1の重み格納部103及び第2の重み格納部104のいずれも選択可能であるが、本実施例では、ステップS404においては、常に少なくとも第1の重み格納部103が選択される。そして、指定されたカーネルが第1の重み格納部103に収まらない場合には、第2の重み格納部104も選択される。例えば制御部108は、ネットワーク情報を参照してN番目のカーネルの数を算出することができる。そして、制御部108は、書込部107に対して、格納するカーネルの数を指定する。カーネルの数が第1の重み格納部103のワード数以下である場合、制御部108は、カーネルを第1の重み格納部103に格納するように書込部107に指示する。また制御部108は、第1の重み格納部103がN番目のカーネルを保持していることを示すように、重み格納部が格納するカーネルを示す情報を更新する。一方、カーネルの数が第1の重み格納部103のワード数よりも大きい場合、制御部108はカーネルを第1の重み格納部103及び第2の重み格納部104に格納するように書込部107に指示する。また制御部108は、第1の重み格納部103及び第2の重み格納部104がN番目のカーネルを保持していることを示すように、重み格納部が格納するカーネルを示す情報を更新する。書込部107は、DMAC102から受信したカーネルを、制御部108からの指定に従って第1の重み格納部103及び指定された場合には第2の重み格納部104に格納する。
【0047】
ステップS405で制御部108は、N+1番目のカーネルを第1の重み格納部103又は第2の重み格納部104に格納可能であるかどうかを判定する。本実施形態の場合、制御部108は、カーネルのサイズを示す情報を取得し、このサイズを示す情報に基づいて、ダブルバッファ方式(第1の動作,S406)を選択するかシングルバッファ方式(第2の動作,S407)を選択するかを判定する。本実施形態においては、ネットワーク情報がカーネルのサイズを示す情報を含んでいる。制御部108は、例えば、N番目のカーネルを第1の重み格納部103(又は第2の重み格納部104)に格納した状態で、N+1番目のカーネルを第2の重み格納部104(又は第2の重み格納部104)に格納可能どうかを判定できる。そして、制御部108は、格納可能な場合にはダブルバッファ方式の動作を選択し、それ以外の場合にはシングルバッファ方式の動作を選択することができる。制御部108、具体例として、次の3つの条件がともに成立する場合にN+1番目のカーネルを格納可能であると判定することができる。
条件1.N番目のカーネルが第1の重み格納部103又は第2の重み格納部104のいずれか一方にのみ格納されている。
条件2.N+1番目のカーネルが第1の重み格納部103又は第2の重み格納部104のうち、N番目のカーネルを保持している重み格納部とは異なる重み格納部に収まる。
条件3.N番目の処理単位が最後の処理単位ではない。
N+1番目のカーネルを格納可能である場合、処理はステップS406に進み、格納できない場合、処理はステップS407に進む。
【0048】
ステップS406では、N+1番目のカーネルの格納と、N番目の処理単位についてのCNN演算とが並列に実行される。N+1番目のカーネルを格納するために、制御部108は、まず書込部107に格納するカーネルの数を指定する。制御部108は、カーネルの格納先としてN番目のカーネルの格納先とは異なる重み格納部を指定する。つまり、制御部108は、N番目のカーネルの格納先として第1の重み格納部103を指定した場合は、N+1番目のカーネルの格納先として第2の重み格納部104を指定する。一方、制御部108は、N番目のカーネルの格納先として第2の重み格納部104を指定した場合は、N+1番目のカーネルの格納先として第1の重み格納部103を指定する。また、制御部108は重み格納部の指定方法に合わせて、重み格納部が格納するカーネルを示す情報を更新する。そして、制御部108はN+1番目のカーネルを書込部107に転送するように、DMAC102に指示する。書込部107は、DMAC102から受信したカーネルを、制御部108からの指定に従って第1の重み格納部103又は第2の重み格納部104に格納する。
【0049】
さらに制御部108は、N番目の処理単位のCNN演算を実行するために、ネットワーク情報を参照し、処理部106に処理方式、処理対象の階層番号、並びに処理対象の各階層の特徴面数、特徴面サイズ、及びカーネルサイズを指示する。そして、制御部108は、処理方式に合わせて、読出部105に対して、カーネルが読み出される重み格納部と、カーネルのアドレスとを順次指定する。ここで、制御部108は、N番目のカーネルが読み出される重み格納部としては、同じステップS406でN+1番目のカーネルの格納先として指定した重み格納部とは異なる重み格納部を指定する。つまり、制御部108は、N+1番目のカーネルの格納先として第1の重み格納部103を指定した場合は、読出部105に対して第2の重み格納部104を指定する。一方、制御部108は、N+1番目のカーネルの格納先として第2の重み格納部104を指定した場合は、読出部105に対して第1の重み格納部103を指定する。読出部105は、制御部108の指定に従って、重み格納部からカーネルを読み出し、処理部106に送る。処理部106は、制御部108から指定された階層の特徴面を画像格納部101から読み出し、読出部105から受信したカーネルを用いて、指定された処理方式に従ってCNN演算を実行する。そして処理部106は、演算結果データである特徴面を画像格納部101に格納する。
【0050】
ステップS407では、N番目の処理単位のCNN演算処理を実行する。制御部108は第1の重み格納部103に格納されたカーネルを使用する場合は読出部105に読出し元として第1の重み格納部103を指定し、第1の重み格納部103におけるカーネルのアドレスを指定する。一方、第2の重み格納部104に格納されたカーネルを使用する場合は読出部105に読出し元として第2の重み格納部104を指定し、第2の重み格納部104におけるカーネルのアドレスを指定する。このように制御部108は、第1の重み格納部103及び第2の重み格納部104の双方から、処理部106による演算に必要なカーネルを読み出すように、読出部105を制御することができる。その他のCNN演算処理の内容についてはステップS406と同様である。
【0051】
ステップS408で制御部108は、全処理単位の処理が完了したかどうかを判定する。全処理単位の処理が完了した場合、処理はステップS410に進む。一方、未処理の処理単位が残っている場合、処理はステップS409に進む。
【0052】
ステップS409では、制御部108が処理単位のインデックスを1だけインクリメントする。その後、ステップS403~S407において次の処理単位が処理される。図5に示すCNNに従う処理を行う場合、ループを4回繰り返すことにより最終的な特徴面506が得られる。
【0053】
ステップS410で制御部108は、DMAC102にCNN演算の処理結果を転送するよう指示する。DMAC102はこの指示に従い、画像格納部101から最終的な特徴面506を読み出してRAM206に転送する。
【0054】
ステップS411でCPU204は、RAM206に格納された特徴面を用いて顔の検出位置を判定する。図3は、パターン認識結果を模式的に示す図である。特徴面301における画素値が大きいことは、その画素が顔の中心位置である可能性が高いことを示す。CPU204は、特徴面301を用いて顔の位置及び大きさ等の情報を抽出することができる。さらにCPU204は、この情報を基に顔の位置を示す検出枠302~304を生成し、入力画像に重畳して表示部203に表示させることができる。
【0055】
以上のように、ステップS405における判断に従って、ステップS406におけるダブルバッファ方式の動作と、ステップS407におけるシングルバッファ方式の動作と、が切り替えられる。ステップS406においては、処理部106が第1の重み格納部103からN番目のカーネル(第1の重みデータ)を読み出し、N番目のカーネルを用いた畳み込み演算処理を行うことができる。また、これと並列して、第2の重み格納部104へのN+1番目のカーネル(第2の重みデータ)の書き込みが行われる(第1の動作)。本実施形態においては、N番目のカーネルが、第1の重み格納部103に格納されており、N+1番目のカーネルを第2の重み格納部104に格納できる場合、このような動作が行われる。N番目のカーネルは、同じループのステップS404又は以前のループのステップS406で第1の重み格納部103に格納されている。また、N番目のカーネルの読み出し及びN+1番目のカーネルの書き込みは、第1の重み格納部103へのN番目のカーネルの書き込みの完了からN+2番目のカーネル(第3の重みデータ)の書き込み(次のループ)までの間に行われる。ここで、処理部106はN番目のカーネル、N+1番目のカーネル、及びN+2番目のカーネルを順に用いるものとする。
【0056】
ステップS406においては、処理部106が第2の重み格納部104からN番目のカーネルを読み出し、N番目のカーネルを用いた畳み込み演算処理を行うこともできる。これと並列して、第2の重み格納部103へのN+1番目のカーネルの書き込みが行われる。本実施形態においては、N番目のカーネルが第2の重み格納部104に格納されており、N+1番目のカーネルを第1の重み格納部103に格納できる場合、このような動作が行われる。
【0057】
一方で、ステップS407においては、処理部106が第1の重み格納部103及び第2の重み格納部104の双方からN番目のカーネルを読み出してN番目のカーネルを用いた畳み込み演算処理を行うことができる(第2の動作)。ここで、N番目のカーネルは、同じループのステップS404で第1の重み格納部103及び第2の重み格納部104に格納されている。本実施形態においては、N番目のカーネルが前のループにおいて第1の重み格納部103又は第2の重み格納部104に格納できなかった場合、第2の動作が行われる。第1の重み格納部103及び第2の重み格納部104からのN番目のカーネルの読み出しは、N番目のカーネルの書き込みの完了(S404)からN+1番目のカーネルの書き込み(次のループ)までの間に行われる。
【0058】
なお、本実施形態においては、N番目のカーネルが第1の重み格納部103又は第2の重み格納部104の一方のみに格納されており、N+1番目のカーネルを他方に格納できない場合も、シングルバッファ方式の動作が行われる。この場合処理部106は、第1の重み格納部103又は第2の重み格納部104の一方からN番目のカーネルを読み出してこれを用いた畳み込み演算処理を行う一方で、並列した他方へのカーネルの書き込みを行わないように、制御を行う。もっとも、このような場合に、処理がステップS405からS406に進み、ダブルバッファ方式の動作が行われてもよい。この場合、ステップS406において処理部106は、第1の重み格納部103又は第2の重み格納部104の一方からN番目のカーネルを読み出してこれを用いた畳み込み演算処理を行うように、制御を行うことができる。また処理部106は、これと並列して、第1の重み格納部103又は第2の重み格納部104の他方への、N+1番目のカーネルの一部の書き込みを行うように、制御を行うことができる。
【0059】
図7は、図5に示す構成を有するCNN演算を、図9に示すネットワーク情報に基づいて処理する場合の、第1の重み格納部103及び第2の重み格納部104の状態を示す。図7には、上部から順にアドレス0番地、1番地、……が示されており、1アドレスには1つのカーネルを格納可能である。また、Ka,bは1つのカーネルを示す。aは階層番号を示し、bは1階層の中でのカーネルの番号を示す。ここで、入力層の階層番号は0とする。図中の矢印は、重み格納部に対するアクセスが書き込みであるか読み出しであるかを示す。以下、各ループ(N=1~4)のステップS403~S407での動作を説明する。
【0060】
・1回目のループ(N=1)
最初の処理であるため、ステップS403で制御部108は1番目のカーネルは未格納と判定する。ステップS404で制御部108は、ネットワーク情報から、1番目の処理単位は、入力層501及び第1階層507に対するリングバッファ方式の処理であることを読み取る。そして制御部108は、入力層501、第1階層507、及び第2階層508の特徴面数に基づいて、1番目のカーネル数を算出する。図5の例では特徴面は隣接する階層の全ての特徴面と結合している。したがって、カーネル数は1(入力層501の特徴面数)×3(第1階層507の特徴面数)+3(第1階層507の特徴面数)×3(第2階層508の特徴面数)=12である。
【0061】
そして、制御部108は書込部107にカーネル数として12を指定し、格納先として第1の重み格納部103を指定する。また、制御部108は、重み格納部が格納するカーネルを示す情報を、第1の重み格納部103及び第2の重み格納部104が1番目のカーネルを格納していることを示すように更新する。書込部107は、図7(A)に示すように、DMAC102から受信したカーネルのうち、511a~514bの9個を第1の重み格納部103に格納し、残りの512c~514cの3個を第2の重み格納部104に書き込む。
【0062】
1番目のカーネルが第1の重み格納部103及び第2の重み格納部104の両方に格納されているため、ステップS405の条件1は満たされず、処理はステップS407に進む。ステップS407で制御部108は、ネットワーク情報を参照して、処理部106にリングバッファ方式の処理を指定する。また、制御部108は、処理部106に対し、処理対象の階層番号として0及び1、入力層501の特徴面数として1、第1階層507の特徴面数として3、及びカーネルサイズとして3×3を設定する。そして制御部108は、リングバッファ方式によるCNN演算に合わせて、CNN演算に必要なカーネルを格納する重み格納部及びアドレスを、読出部105に対して指定する。ここで制御部108は、入力層501についてのカーネル511a~c及び第1階層についてのカーネル512a~514cのうち、必要なカーネルを選択することができる。処理部106は、画像格納部101から読み出した特徴面と読出部105から受信したカーネルとを用いて、入力層501及び第1階層507に対するリングバッファ方式のCNN演算を行う。
【0063】
・2回目のループ(N=2)
ステップS403で制御部108は、重み格納部が格納するカーネルを示す情報を参照して、2番目のカーネルは未格納と判定する。ステップS404で制御部108はネットワーク情報から、2番目の処理単位は第2階層508に対するフレームバッファ方式の処理であることを読み取る。そして、制御部108は1回目のループと同様の方法で2番目のカーネル数(9)を算出し、書込部107にカーネル数として9及び格納先として第1の重み格納部103を指定する。さらに、制御部108は、第1の重み格納部103に2番目のカーネルを格納している状態を示すように、重み格納部が格納するカーネルを示す情報を更新する。書込部107は、図7(B)に示すように、DMAC102から受信したカーネル515a~517cを第1の重み格納部103に格納する。
【0064】
2番目のカーネル515a~517cは第1の重み格納部103にのみ格納されているため、ステップS405の条件1は成立する。また、3番目の処理単位は第3階層509に対するフレームバッファ方式の処理であり、使用するカーネルはカーネル518a~520cの9個であるため、条件2も成立する。さらに、3番目の処理単位は最後の処理単位ではないため、ステップS405の条件3も成立する。このようにステップS405の条件1~3が全て満たされるため、処理はステップS406に進む。
【0065】
ステップS406で制御部108は、書込部107にカーネル数として9及び格納先として第2の重み格納部104を指定する。また制御部108は、第2の重み格納部103に3番目のカーネルを格納している状態を示すように、重み格納部が格納するカーネルを示す情報を更新する。そして、DMAC102に第3階層についてのカーネル518a~520cを転送するよう指示することで、図7(C)に示すように第2の重み格納部104にこれらのカーネルを格納する。
【0066】
併せてステップS406で制御部108はネットワーク情報を参照して、処理部106に対して、処理方式としてフレームバッファ方式、処理対象の階層番号として2、特徴面数として3、及びカーネルサイズとして3×3を指定する。そして、フレームバッファ方式によるCNN演算に合わせて、制御部108は、第2階層についてのカーネル515a~517cのうち必要なカーネルを格納する重み格納部及びアドレスを読出部105に通知する。処理部106は、画像格納部101から読み出した特徴面及び読出部105から受信したカーネルを用いて、第2階層508に対するフレームバッファ方式の処理を行う。
【0067】
・3回目のループ(N=3)
3回目のループは2回目のループと同様であるため詳細は省略する。ステップS403で制御部108は、第3階層についてのカーネル518a~520cは第2の重み格納部104に格納済と判定し、処理はステップS405に進む。ここでも、ステップS405の条件1~3が全て満たされ、処理はステップS406に進む。ステップS406で制御部108は、書込部107にカーネルの数として3(521~523)、カーネルの格納先として第1の重み格納部103を指定し、さらに重み格納部が格納するカーネルを示す情報を更新する。そして、図7(D)に示すように第1の重み格納部103に第4階層についてのカーネル521~523が格納される。併せてステップS406で制御部108は、ネットワーク情報を参照して、処理部106に対して第3階層に対するCNN演算を行わせる。
【0068】
・4回目のループ(N=4)
ステップS403で制御部108は、2~3回目のループと同様に、第4階層についてのカーネル521~523は第1の重み格納部104に格納済と判定し、処理はステップS405に進む。第4の処理単位は最後の処理単位であるため、ステップS405の条件3は満たされず、処理はステップS407に進む。ステップS407で制御部108は、ネットワーク情報を参照して、処理部106に対して処理方式としてフレームバッファ方式、処理対象の階層番号として4、特徴面数として3、及びカーネルサイズとして3×3を指定する。そして制御部108は、フレームバッファ方式によるCNN演算に合わせて、第4階層についてのカーネル521~523のうちCNN演算に必要なカーネルを格納する重み格納部及びアドレスを読出部105に通知する。処理部106は、画像格納部101から読み出した特徴面と、読出部105から受信したカーネルとを用いて、第4階層510に対するフレームバッファ方式の処理を行う。
【0069】
図5に示す構成のCNN演算を、図9に示したネットワーク情報に基づいて行う場合、全ての処理単位をダブルバッファ方式により処理するためには、重み格納部のワード数が十分に大きい必要がある。すなわち、この場合に必要なメモリ容量は、(9+12)×9=189バイトである。このように、少なくとも一方の重み格納部のワード数を、全ての処理単位のうちの最大のカーネルの総数(12)以上にする必要がある。これに対して、本実施形態で必要とされるメモリ容量は(9+9)×9=162バイトであり、全ての処理単位をダブルバッファ方式で処理する場合と比較してメモリ容量を約14%削減することができる。一方で、本実施形態によれば、2回目及び3回目の処理ループをダブルバッファ方式で処理することができるため、処理を高速化できる。
【0070】
本実施形態の構成は、別のネットワーク構成を用いる場合にも適用可能である。例えば、CNN演算を図10に示すネットワーク情報に基づいて行う場合でも、やはりメモリ削減効果が得られる。図10の構成では、1番目の処理単位(リングバッファ方式の処理)に必要なカーネルの総数は、16+16×32+32×64+64×64=6672である。また、2~4番目の処理単位(フレームバッファ方式の処理)に必要なカーネルの総数は64×64=4096である。
【0071】
このように、全ての処理単位をダブルバッファ方式により処理するためには、少なくとも一方の重み格納部のワード数が6672以上、メモリ容量が(4096+6672)×9=94.6Kバイト以上である必要がある。それに対し、本実施形態において必要なメモリ容量は(4096+4096)×9=72.0Kバイトであり、メモリ容量を22.6Kバイト削減することが可能となる。
【0072】
本実施形態においては、図9のネットワーク情報に従って、リングバッファ方式の処理においては2つのメモリが連結されてシングルバッファ方式で使用された。また、フレームバッファ方式の処理においては2つのメモリがダブルバッファ方式で使用された。しかしながら、本実施形態は異なる方式の処理にも適用可能である。例えば、処理方式としてフレームバッファ処理が採用される際に、1階層についての重みのサイズに応じてシングルバッファ方式とダブルバッファ方式とが切り替えられてもよい。図11は、このような構成で用いることができるネットワーク情報の例を示す。
【0073】
以上説明したように、本実施形態においては、ニューラルネットワークの重み格納用のメモリとして2つのメモリが使用される。そして、連続する2つの処理単位の重みをそれぞれ一方のメモリに格納可能である場合には、重みの書き込みと読み出しとが並列して実行される。また、それ以外の場合には重みの書き込みと読み出しとが順次実行される。このような構成により、ニューラルネットワークを用いた演算処理を、シングルバッファ方式のみを用いる場合よりも高速に、ダブルバッファ方式のみを用いる場合よりも小容量のメモリで、行うことが可能となる。
【0074】
[実施形態2]
実施形態1では、制御部108はネットワーク情報に基づいてシングルバッファ方式とダブルバッファ方式を切り替えた。しかしながら、切り替えの制御方法はこのような方法には限られない。実施形態2では、予め用意されている、重みデータの書き込み方法又は読み出し方法を指定する制御情報に基づいて、ダブルバッファ方式(第1の動作)を選択するかシングルバッファ方式(第2の動作)を選択するかが判定される。例えば、実施形態1のような処理手順を示す制御情報に従って、制御部108が動作してもよい。このような構成によれば、制御部108の構成を単純化することが可能となり、回路規模を削減することができる。
【0075】
この制御情報としては、図12に示すネットワーク情報を用いることができる。図12に示すネットワーク情報は、図9と同様のネットワーク情報に加えて、以下の4つの情報をさらに含んでいる。すなわち、このネットワーク情報は、各処理単位の重みを格納済みかどうかを示す「重み格納済」情報、及び次の処理単位の重みを格納できるかどうかを示す「次の重み格納可」情報を含んでいる。また、このネットワーク情報はさらに、各処理単位の重みの格納先を示す「重み格納先」情報、及び各処理単位のカーネル数を示す「カーネル数」情報を含んでいる。
【0076】
実施形態2に係る構成及び処理は実施形態1と同様であり、以下では異なる点を説明する。ステップS403で制御部108は、ネットワーク情報からN番目の処理単位の「重み格納済」情報を読み取る。「重み格納済」情報がYESである場合、処理はステップS404に進み、NOである場合、処理はステップS405に進む。
【0077】
ステップS404で制御部108は、ネットワーク情報からN番目の処理単位の「重み格納先」及び「カーネル数」情報を読み取る。ここで、「重み格納先」として第1の重み格納部103と第2の重み格納部104の双方が指定されている場合、2つの重み格納部は連結されてシングルバッファ方式で使用される。これらの情報に従って、制御部108は、実施形態1と同様にDMAC102及び書込部107を制御する。
【0078】
ステップS405で制御部108は、ネットワーク情報からN番目の処理単位の「次の重み格納可」情報を読み取る。「次の重み格納可」情報がYESである場合、処理はステップS406に進み、NOである場合、処理はステップS407に進む。
【0079】
ステップS406で制御部108は、N+1番目の処理単位の「重み格納先」及び「カーネル数」情報を読み取る。これらの情報に従って、制御部108は、実施形態1と同様にDMAC102、読出部105、及び書込部107を制御する。こうして、ダブルバッファ方式の動作が行われる。ステップS407で制御部108は、実施形態1と同様に、シングルバッファ方式に従う制御を行う。
【0080】
[その他の実施形態]
上述の実施形態においては、第1の重み格納部103及び第2の重み格納部104は別個のメモリデバイスであり、一方の重み格納部への書き込みと、他方の重み格納部からの読み出しを並列に実行可能であった。しかしながら、第1の重み格納部103及び第2の重み格納部104として、書き込みと読み出しを並列に実行可能な別の構成を採用することができる。例えば、第1の重み格納部103及び第2の重み格納部104は、それぞれ、複数の領域に同時にアクセス可能な単一のメモリデバイス上の異なるメモリ領域であってもよい。例えば、デュアルポートメモリに設定された2つの重み格納領域が、それぞれ第1の重み格納部103及び第2の重み格納部104であってもよい。このような実施形態においても、ステップS406で制御部108は、書込部107及び読出部105が並列して動作するように制御することができる。一方、ステップS404及びS407で制御部108は、重みの書き込みと読み出しとを排他的に実行するよう制御することができる。例えば、制御部108は、ステップS404では書込部107のみが動作し、ステップS407では読出部105のみが動作するように、制御を行うことができる。
【0081】
もっとも、書き込みと読み出しとが、ダブルバッファ方式では完全に並列して行われ、シングルバッファ方式では完全に排他的に行われることは、必須ではない。例えば、ダブルバッファ方式において、書き込みと読み出しとが時分割方式で並列実行可能であってもよい。例えば、第1の重み格納部103及び第2の重み格納部104として、シングルポートメモリ上の2つのメモリ領域と、書き込みと読み出しを調停する調停回路と、を用いることができる。このような構成によっても、書込部107による重みの書込みと、読出部105による重みの読出しと、を並列して行うことができる。この場合、ステップS406のうち、処理部106による演算処理が行われているが、読出部105による重みの読み出しが行われていない期間において、書込部107による重みの書込みを行うことができる。このように、処理部106が一方の重み格納部から重みデータを読み出してこの畳み込み演算処理を行う際に、並列して他方の重み格納部への重みデータの書き込みを行うことにより、独立した重みデータの書き込み期間が不要となり、処理速度が向上する。
【0082】
また、シングルバッファ方式において、処理部106は第1の重み格納部103及び第2の重み格納部104から交互に同じ処理単位の重みデータを読み出すことができる。この際、一方の重み格納部からの重みデータの読み出しが終了した後には、この重み格納部への別の処理単位の重みデータの格納と並行して、処理部106が他方の重み格納部からの重みデータの読み出しを継続してもよい。
【0083】
また、上述の実施形態に係る情報処理装置は、2つの重み格納部を有していたが、3つ以上の重み格納部を有していてもよい。例えば、P個の重み格納部を有している情報処理装置において、ある処理単位の重みを格納するためにQ(Q≦P)個のメモリが必要である場合には、この重みを連結されたQ個のメモリに格納することができる。この際、次の処理単位の重みをP-Q個のメモリに格納可能であれば、次の処理単位の重みを残りのメモリに格納することができる。このような構成によっても、重みの読み出しと書き込みとが並列に行われ、処理が高速化される。
【0084】
また、上述の実施形態においては、2つの重み格納部のサイズは同じであるが、2つの重み格納部のサイズが異なっていてもよい。それぞれの重み格納部のサイズは、ネットワーク構成、処理速度、及び回路規模などのバランスを考慮して設定することができる。
【0085】
上述の実施形態においては、フレームバッファ方式で処理される1つの処理単位は1つの階層を含み、リングバッファ方式で処理される1つの処理単位は複数の階層を含んでいた。しかしながら、フレームバッファ方式で処理される1つの処理単位が複数の階層を含んでもよいし、リングバッファ方式で処理される1つの処理単位が1つの階層のみを含んでいてもよい。このような場合でも、処理単位である1つの階層毎にダブルバッファ方式とシングルバッファ方式とを切り替えることができる。さらには、フレームバッファ処理及びリングバッファ処理以外の処理方式を用いることもできる。
【0086】
また、上述の実施形態においては、1つの処理単位はニューラルネットワークの1つ又は複数の階層における畳み込み演算処理に相当した。しかしながら、1つの処理単位は、ニューラルネットワークを用いた処理のうち、任意の一部分であってもよい。例えば、1つの処理単位が、ニューラルネットワークの1つの階層における畳み込み演算処理の少なくとも一部であってもよい。具体例としては、1つの処理単位が1つの階層の1つの領域についての畳み込み演算処理であって、別の処理単位が同じ階層の別の領域についての畳み込み演算処理であってもよい。さらに、1つの処理単位が、ニューラルネットワークの各階層における畳み込み演算処理の少なくとも一部を、2以上の階層について含んでいてもよい。
【0087】
(その他の実施例)
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
【符号の説明】
【0088】
102:DMAC、103:第1の重み格納部、104:第2の重み格納部、105:読出部、106:処理部、107:書込部、108:制御部
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12