(57)【要約】  演算処理装置の演算部は、乗算器および第１加算器を有し前記フィルタ処理を行うフィルタ処理部と、Ｎ並列で実行される前記フィルタ処理の結果を全て累積加算する前記累積加算処理を行う第２加算器と、前記累積加算処理の結果に対し前記非線形演算処理を行う非線形変換部と、前記非線形演算処理の結果に対し前記プーリング処理を行うプーリング処理部と、前記フィルタ処理部、前記第２加算器、前記非線形変換部、および前記プーリング処理部を制御する演算制御部と、を有する。
2019216376.tif 000002
【特許請求の範囲】
【請求項１】
Ｃｏｎｖｏｌｕｔｉｏｎ処理とＦｕｌｌＣｏｎｎｅｃｔ処理を行うディープラーニング用の演算処理装置であって、
入力特徴量マップデータを格納するデータ格納メモリ、および前記データ格納メモリを制御するデータ格納メモリ制御回路を有するデータ格納メモリ管理部と、
係数を格納する係数格納メモリ、および前記係数格納メモリを制御する係数格納メモリ制御回路を有する係数格納メモリ管理部と、
格納用外部メモリから、前記入力特徴量マップデータを取得するデータ入力部と、
格納用外部メモリから、前記係数を取得する係数入力部と、
前記格納用外部メモリに、出力特徴量マップデータを書き出すデータ出力部と、
入力Ｎ並列、出力Ｍ並列の構成（Ｎ、Ｍ≧１）で、前記データ格納メモリから前記入力特徴量マップデータを取得し、前記係数格納メモリから前記係数を取得して、フィルタ処理、累積加算処理、非線形演算処理およびプーリング処理を行う演算部と、
前記データ格納メモリ管理部、前記係数格納メモリ管理部、前記データ入力部、前記データ出力部、および前記演算部を制御するコントローラと、
を有し、
前記データ格納メモリ管理部は、前記入力特徴量マップデータを前記データ格納メモリから取り出し、
前記係数格納メモリ管理部は、前記データ格納メモリ管理部のステータスを参照して、前記データ格納メモリ管理部から取り出すデータに対応する係数を前記係数格納メモリから取り出し、
前記データ出力部は、前記演算部から出力されるＭ並列のデータを連結して前記格納用外部メモリに出力し、
前記演算部は、
乗算器および第１加算器を有し前記フィルタ処理を行うフィルタ処理部と、
Ｎ並列で実行される前記フィルタ処理の結果を全て累積加算する前記累積加算処理を行う第２加算器と、
前記累積加算処理の結果に対し前記非線形演算処理を行う非線形変換部と、
前記非線形演算処理の結果に対し前記プーリング処理を行うプーリング処理部と、
前記フィルタ処理部、前記第２加算器、前記非線形変換部、および前記プーリング処理部を制御する演算制御部と、
を有し、
前記演算制御部は、ＦｕｌｌＣｏｎｎｅｃｔ処理時は、
入力の１次元データ列（要素数ｎ）を所定サイズ（Ｆｘ×Ｆｙ）のデータ列Ｎ面分に換算する処理を行うように演算部を制御し（ただし、ｎ≦Ｆｘ×Ｆｙ×Ｎ、ＦｘとＦｙの少なくとも１つが２以上）、
フィルタサイズを前記所定サイズ（Ｆｘ×Ｆｙ）に設定し、
出力の１次元データ列（要素数ｍ）として、出力特徴量マップデータのサイズが１×１、要素数がｍとなるように演算部を制御する
演算処理装置。
【請求項２】
前記データ格納メモリは、プーリング処理後の１データを算出するために必要なデータセットを格納するバッファを備え、前記バッファは前記データ格納メモリから読み出したデータを蓄積する、請求項１に記載の演算処理装置。
【請求項３】
演算実行判定部は、入力された前記入力特徴量マップデータおよび前記係数の少なくとも一方がゼロの場合、前記フィルタ処理部に演算スルーを通知し、
前記演算実行判定部から演算スルーが通知された場合、前記フィルタ処理部は演算処理を停止する
請求項１または２に記載の演算処理装置。
【請求項４】
前記係数格納メモリ管理部は、前記データ格納メモリから読み出した前記入力特徴量マップデータがゼロか否かを検出するデータゼロ検出部を有し、
前記係数格納メモリのうち、対応するデータ格納メモリから読み出した前記入力特徴量マップデータがゼロでない係数格納メモリにのみにアクセスして前記係数を取り出し、
前記演算実行判定部は、係数がゼロの部分を検出し、その結果と前記データゼロ検出部の結果との論理和がゼロの場合、前記フィルタ処理部に演算スルーを通知する
請求項３に記載の演算処理装置。
【請求項５】
Ｎ並列である前記データ格納メモリ管理部は、
前記係数格納メモリに格納されたＮ×Ｍ個の係数のうち、Ｎ並列全ての係数がゼロか否かを検出して、係数ゼロ検出信号を出力する係数ゼロ検出部と、
前記データ格納メモリのうち、前記係数ゼロ検出信号がゼロでない係数に対応するデータ格納メモリからのみ前記入力特徴量マップデータを取り出すＳＲＡＭ読み出し制御部と、
を備え、
前記演算実行判定部は、入力特徴量マップデータがゼロの部分を検出し、その結果と前記係数ゼロ検出部の結果との論理和がゼロの場合、前記フィルタ処理部に演算スルーを通知する
請求項３または４に記載の演算処理装置。
【請求項６】
前記格納用外部メモリは、１次元以上の位置情報とその位置における高次の要素を持つデータ列である高次元データ列が格納され、
前記データ入力部は、前記格納用外部メモリからバースト転送により前記高次元データ列を取得し、取得した前記高次元データ列を前記データ格納メモリ管理部に転送し、
前記データ出力部は、前記演算部から出力される同一座標のデータを、高次元データ列としてバースト転送単位でまとめて出力し、
前記データ格納メモリ管理部は、
前記データ入力部が前記格納用外部メモリから取得した前記高次元データ列を、前記演算部で取り扱う座標に変換する内部座標変換部と、
前記座標に基づき、前記データ格納メモリへの書き込み制御信号を作成するデータ格納メモリ書き込み制御部と、
前記データ格納メモリと、
前記演算部のリクエストを受けて、前記データ格納メモリから所定の順序で必要なデータをアクセスするデータ格納メモリ読み出し制御部と、
を備える
請求項１に記載の演算処理装置。
【請求項７】
前記格納用外部メモリは、１次元以上の位置情報とその位置における高次の要素を持つデータ列である高次元データ列が格納され、
前記格納用外部メモリに格納される前記高次元データ列は、次元の座標情報と座標毎に高次の特徴量を有する特徴量マップであり、１つの座標に対応するデータ量がバースト転送量の１単位以上となり、
前記データ入力部は、入力する特徴量マップの面数と座標に基づいて、前記格納用外部メモリにアクセスするリードアドレスを算出し、バースト転送により前記格納用外部メモリから高次元データ列を取得し、取得した高次元データ列を前記データ格納メモリ管理部に転送し、
前記データ出力部は、出力する特徴量マップの面数と座標に基づいて前記格納用外部メモリにアクセスするライトアドレスを算出し、バースト転送により前記格納用外部メモリにデータを出力し、
前記データ格納メモリ管理部は、
座標及び補足情報を生成する内部座標変換部と、
前記補足情報に基づいて、データ格納メモリへの書き込み制御信号を生成するデータ格納メモリ書き込み制御部と、
を有し、
前記内部座標変換部は、前記データ入力部が前記格納用外部メモリから取得した高次元データ列を所定の方法でカウントすることにより、特徴量マップの前記補足情報および前記座標を生成し、
前記データ格納メモリ書き込み制御部は、特徴量マップの前記補足情報および前記座標に基づいて、書き込み対象となるデータ格納メモリへの書き込み制御信号およびライトアドレスを生成する
請求項１に記載の演算処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置、より詳しくは、畳み込みニューラルネットワークを用いたディープラーニングを行う演算処理装置の回路構成に関する。
本出願は、２０１８年５月１１日に出願された国際出願ＰＣＴ／ＪＰ２０１８／０１８３０６に基づく優先権を主張し、当該出願に記載された全ての記載内容を援用するものである。
【背景技術】
【０００２】
従来、複数の処理層が階層的に接続されたニューラルネットワークを用いて演算を実行する演算処理装置がある。特に画像認識を行う演算処理装置では、畳み込みニューラルネットワーク（Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ、以下ＣＮＮという）を用いたディープラーニングが広く行われている。【０００３】
図３３は、ＣＮＮを用いたディープラーニングの処理の流れを示す図である。ＣＮＮを用いたディープラーニングによる画像認識では、入力される画像データ（ピクセルデータ）に対して、ＣＮＮの複数の処理層における処理が順次施されることにより、画像に含まれる対象物が認識された最終的な演算結果データが得られる。ＣＮＮを用いたディープラーニングによる画像認識は、高い認識率を実現できる。【０００４】
具体的には、まず、画像データに対して、ある領域を抽出して係数（係数）の異なる複数のフィルタを乗じて特徴量マップ（ＦｅａｔｕｒｅＭａｐ、ＦＭ）を作成する畳み込み演算処理（Ｃｏｎｖｏｌｕｔｉｏｎ処理）と、特徴量マップから一部領域を抽出する縮小処理（プーリング処理）の組合せ（１つの処理層）を複数回（複数の処理層において）行う。これらの処理が、畳み込み層（Ｃｏｎｖｏｌｕｔｉｏｎ層）の処理である。【０００５】
Ｃｏｎｖｏｌｕｔｉｏｎ処理が進み、ＦＭをある程度まで小さくしたところで、画像データを１次元のデータ列と読み変える。１次元のデータ列の各データに対して各々異なる係数を乗じて累積加算を行うＦｕｌｌＣｏｎｎｅｃｔ処理を複数回（複数の処理層において）行う。これらの処理が、全結合層（ＦｕｌｌＣｏｎｎｅｃｔ層）の処理である。【０００６】
そして、ＦｕｌｌＣｏｎｎｅｃｔ処理の後、最終的な演算結果である被写体推定結果として、画像に含まれる対象物が検出された確率（被写体検出の確率）が出力される。図３３の例では、最終的な演算結果データとして、犬が検出された確率は０．０１（１％）、猫が検出された確率は０．０４（４％）、ボートが検出された確率は０．９４（９４％）、鳥が検出された確率は０．０２（２％）である。【０００７】
このように、ＣＮＮの処理層は、畳み込み演算処理、非線形処理、縮小処理（プーリング処理）等を含むＣｏｎｖｏｌｕｔｉｏｎ処理を行うＣｏｎｖｏｌｕｔｉｏｎ層（畳み込み層）と、全ての入力（ピクセルデータ）に係数を乗じて累積加算するＦｕｌｌＣｏｎｎｅｃｔ処理を行うＦｕｌｌＣｏｎｎｅｃｔ層（全結合層）とに大きく分類される。ただし、ＦｕｌｌＣｏｎｎｅｃｔ層がない畳み込みニューラルネットワークも存在する。【０００８】
図３４は、Ｃｏｎｖｏｌｕｔｉｏｎ処理の流れを示す図である。まず、入力された画像データの１画素を抽出して、係数の異なるフィルタ処理を行い、累積加算することにより、１画素に対応するデータができる。これを画像データの全画素に対して行い、全画素に対応するデータを作成する。次に、作成されたデータに対し、非線形変換および縮小処理（プーリング処理）を行い、出力特徴量マップ（ｏＦＭ）が生成される。【０００９】
さらに、出力特徴量マップ（ｏＦＭ）を入力特徴量マップ（ｉＦＭ）として、さらに係数の異なるフィルタ処理を行うことにより、上述のＣｏｎｖｏｌｕｔｉｏｎ処理を繰り返す。このようにして複数回のＣｏｎｖｏｌｕｔｉｏｎ処理を行い、出力特徴量マップ（ｏＦＭ）を得る。【００１０】
図３５は、ＦｕｌｌＣｏｎｎｅｃｔ処理の流れを示す図である。複数の入力データに対して同じ数の係数を用意して乗算し、乗算されたものを累積加算し、非線形演算を経て、１個の出力データができる。この処理を、係数を変えて複数回繰り返すことにより、複数の出力データができる。【００１１】
ＣＮＮを用いたディープラーニングによる画像認識の処理において、ＣＮＮの処理層ごとに扱うデータ単位が異なるため、処理単位やメモリの最適化が難しい。そのため、ＣＮＮを用いたディープラーニングによる画像認識は、高性能ＰＣ（ハードウェア）やＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を用いたソフトウエア処理、もしくはＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）などのコンフィギュラブル・デバイス（回路）で実装されるのが一般的である。【００１２】
特許文献１および特許文献２は、高速化のため２次元アレイ状に積和演算群を配置することにより、Ｃｏｎｖｏｌｕｔｉｏｎ処理を行う畳み込み演算処理部を構成し、この畳み込み演算処理部をＦｕｌｌＣｏｎｎｅｃｔ処理でも使用（共有）することにより、ＦｕｌｌＣｏｎｎｅｃｔ処理のための回路を減らす構成を開示している。【００１３】
特許文献３は、バースト転送が可能な画像メモリを用いた場合に、成分数の多いカラー画像データに対しても成分数の少ないモノクロ画像データに対しても、画像回転処理などを、内部メモリの増加を抑えて効率よく実行できる画像メモリ制御装置を開示している。具体的には、ＣＭＹＫＡの５成分の成分別に８ラインずつの入力バッファを５個形成し、この入力バッファから同一領域に対応する各成分の画像データを８×８画素単位のブロックで読み出す。そして、これらのブロックを同一行アドレス内の連続する列アドレスにバースト転送で格納する。
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】特開２０１６−９９７０７号公報
【特許文献２】特開２０１７−２７３１４号公報
【特許文献３】特開２０１２−１４６０３２号公報
【発明の概要】
【発明が解決しようとする課題】
【００１５】
特許文献１および特許文献２は、Ｃｏｎｖｏｌｕｔｉｏｎ処理（フィルタ演算処理）とＦｕｌｌＣｏｎｎｅｃｔ処理（行列演算処理）は処理内容が違っているという前提のもとで、回路の一部（畳み込み演算処理部）を制御的に切り替えることにより、Ｃｏｎｖｏｌｕｔｉｏｎ処理とＦｕｌｌＣｏｎｎｅｃｔ処理で共有している。すなわち、回路の一部を制御的に切り替えることにより、演算過程を変更して、Ｃｏｎｖｏｌｕｔｉｏｎ処理およびＦｕｌｌＣｏｎｎｅｃｔ処理を実現する。しかし、Ｃｏｎｖｏｌｕｔｉｏｎ処理とＦｕｌｌＣｏｎｎｅｃｔ処理で共有されているのは、回路の一部のみである。【００１６】
そのため、畳み込み演算におけるフィルタカーネルサイズが回路的に固定化される。特許文献１ではシストリックアレイにより構成された多並列演算で高速に演算を行うが、フィルタサイズはシストリックアレイのサイズで定まってしまう。特許文献２についても同様である。また、特許文献１ではＦｕｌｌＣｏｎｎｅｃｔ処理を実行する時に、フィルタカーネルサイズに対して端数を持つ特徴量マップの場合は、無効画素処理をしなければならない。【００１７】
また、ＣＮＮは、全てのｉＦＭの同じ座標（の近傍）データを入力としてｏＦＭの１画素を計算する処理である。大量のデータや係数を入出力するので、ＤＲＡＭへの配置や転送効率を十分に考慮して設計しなければいけない。類似処理として複数フレームを入力してひとつの出力フレームを得るノイズリダクションや画像データ圧縮などの処理（フレーム間の相関性を利用する処理）がある。ただし、これらはせいぜい数〜数十フレームを入力とするものである。一方ＣＮＮは、ＦＭをフレームとして考えれば（ネットワークの大きさにもよるが）数百〜数千フレームを入力とすることがある。したがって、単純にこれら類似処理と同様のデータフォーマットでＤＲＡＭアクセスすることはできない。【００１８】
ＣＮＮにおいてネットワークを拡大することはＦＭ数を増やすことと同義である。ＦＭは２次元の位置情報を有するデータ列なので、ｉＦＭは「座標（Ｘ，Ｙ）においてｉＦＭ数分の独立した要素を有するデータ列」と考えることができる。「独立した要素」＝「次元」と捉えると、ｉＦＭは高次元のデータ列である、といえる。例えばＲＧＢ画像は３次元データ列である。【００１９】
特許文献３では、１要素あたり次元（ＣＭＹＫＡ）のデータ列を、処理の基本単位となる８×８サイズのブロックに分割することでバースト転送として効率的なデータセットを形成している。また、このブロックを処理単位として、処理単位の中でデータフォーマットを変えることで画像の回転に高速に対応することができる。【００２０】
これに対して、ＣＮＮで処理したいデータの次元（＝ＦＭ数）は上述した通り数百〜数千の高次元データ列であるため、処理の基本単位や１要素自体がバースト転送単位（またはそれ以上）のサイズとなり得る。さらに層毎にフレームのサイズや次元数が変化する。加えてＣＮＮではＳｈｏｒｔｃｕｔという処理が存在することがあり、これに対応できるフォーマットでなければならない。【００２１】
上述の事情を鑑み、本発明は、ＣＮＮを用いたディープラーニングによる画像認識において、Ｃｏｎｖｏｌｕｔｉｏｎ処理とＦｕｌｌＣｏｎｎｅｃｔ処理で、回路全体を共有することができる演算処理装置を提供することを目的とする。さらに本発明は、Ｓｈｏｒｔｃｕｔ処理にも対応可能でかつＤＲＡＭ転送効率を高く維持することができる演算処理装置を提供することを目的とする。
【課題を解決するための手段】
【００２２】
本発明の第一の態様は、Ｃｏｎｖｏｌｕｔｉｏｎ処理とＦｕｌｌＣｏｎｎｅｃｔ処理を行うディープラーニング用の演算処理装置であって、入力特徴量マップデータを格納するデータ格納メモリ、および前記データ格納メモリを制御するデータ格納メモリ制御回路を有するデータ格納メモリ管理部と、係数を格納する係数格納メモリ、および前記係数格納メモリを制御する係数格納メモリ制御回路を有する係数格納メモリ管理部と、格納用外部メモリから、前記入力特徴量マップデータを取得するデータ入力部と、格納用外部メモリから、前記係数を取得する係数入力部と、前記格納用外部メモリに、出力特徴量マップデータを書き出すデータ出力部と、入力Ｎ並列、出力Ｍ並列の構成（Ｎ、Ｍ≧１）で、前記データ格納メモリから前記入力特徴量マップデータを取得し、前記係数格納メモリから前記係数を取得して、フィルタ処理、累積加算処理、非線形演算処理およびプーリング処理を行う演算部と、前記データ格納メモリ管理部、前記係数格納メモリ管理部、前記データ入力部、前記データ出力部、および前記演算部を制御するコントローラと、を有し、前記データ格納メモリ管理部は、前記入力特徴量マップデータを前記データ格納メモリから取り出し、前記係数格納メモリ管理部は、前記データ格納メモリ管理部のステータスを参照して、前記データ格納メモリ管理部から取り出すデータに対応する係数を前記係数格納メモリから取り出し、前記データ出力部は、前記演算部から出力されるＭ並列のデータを連結して前記格納用外部メモリに出力し、前記演算部は、乗算器および第１加算器を有し前記フィルタ処理を行うフィルタ処理部と、Ｎ並列で実行される前記フィルタ処理の結果を全て累積加算する前記累積加算処理を行う第２加算器と、前記累積加算処理の結果に対し前記非線形演算処理を行う非線形変換部と、前記非線形演算処理の結果に対し前記プーリング処理を行うプーリング処理部と、前記フィルタ処理部、前記第２加算器、前記非線形変換部、および前記プーリング処理部を制御する演算制御部と、を有する演算処理装置である。【００２３】
前記データ格納メモリは、プーリング処理後の１データを算出するために必要なデータセットを格納するバッファを備え、前記バッファは前記データ格納メモリから読み出したデータを蓄積してもよい。【００２４】
前記演算部の処理を制御する演算制御部をさらに有し、前記演算制御部は、ＦｕｌｌＣｏｎｎｅｃｔ処理時は、入力の１次元データ列（要素数ｎ）を所定サイズ（Ｆｘ×Ｆｙ）のデータ列Ｎ面分に換算する処理を行うように演算部を制御し（ただし、ｎ≦Ｆｘ×Ｆｙ×Ｎ、ＦｘとＦｙの少なくとも１つが２以上）、フィルタサイズを前記所定サイズ（Ｆｘ×Ｆｙ）に設定し、出力の１次元データ列（要素数ｍ）として、出力特徴量マップデータのサイズが１×１、要素数がｍとなるように演算部を制御してもよい。
Ｃｏｎｖｏｌｕｔｉｏｎ処理時はＦＭサイズとフィルタサイズは異なっていて良く、サイズの関係は採用するネットワークによって決まっている（変更するのはもちろん構わない）。上記はＦｕｌｌＣｏｎｎｅｃｔ処理時の具体的な設定方法の事を言っており、ＦｕｌｌＣｏｎｎｅｃｔの場合は、ｉＦＭサイズ＝フィルタサイズでｏＦＭがサイズ１×１である事が必要で、ｉＦＭサイズ＝フィルタサイズ＝１×１でも勿論良いが、等号が成り立ってさえいれば良いので、Ｐ×Ｑ（Ｐ≧２またはＱ≧２）でもよい、ということである。【００２５】
演算実行判定部は、入力された前記入力特徴量マップデータおよび前記係数の少なくとも一方がゼロの場合、前記フィルタ処理部に演算スルーを通知し、前記演算実行判定部から演算スルーが通知された場合、前記フィルタ処理部は演算処理を停止してもよい。【００２６】
前記係数格納メモリ管理部は、前記データ格納メモリから読み出した前記入力特徴量マップデータがゼロか否かを検出するデータゼロ検出部を有し、前記係数格納メモリのうち、対応するデータ格納メモリから読み出した前記入力特徴量マップデータがゼロでない係数格納メモリにのみにアクセスして前記係数を取り出し、前記演算実行判定部は、係数がゼロの部分を検出し、その結果と前記データゼロ検出部の結果との論理和がゼロの場合、前記フィルタ処理部に演算スルーを通知してもよい。【００２７】
Ｎ並列である前記データ格納メモリ管理部は、前記係数格納メモリに格納されたＮ×Ｍ個の係数のうち、Ｎ並列全ての係数がゼロか否かを検出して、係数ゼロ検出信号を出力する係数ゼロ検出部と、前記データ格納メモリのうち、前記係数ゼロ検出信号がゼロでない係数に対応するデータ格納メモリからのみ前記入力特徴量マップデータを取り出すＳＲＡＭ読み出し制御部と、を備え、前記演算実行判定部は、入力特徴量マップデータがゼロの部分を検出し、その結果と前記係数ゼロ検出部の結果との論理和がゼロの場合、前記フィルタ処理部に演算スルーを通知してもよい。
演算部の回路構成を入力がＮ並列、出力がＭ並列とすると、データ格納メモリ管理部はＮ並列となる。【００２８】
前記格納用外部メモリは、１次元以上の位置情報とその位置における高次の要素を持つデータ列である高次元データ列が格納され、前記データ入力部は、前記格納用外部メモリからバースト転送により前記高次元データ列を取得し、取得した前記高次元データ列を前記データ格納メモリ管理部に転送し、前記データ出力部は、前記演算部から出力される同一座標のデータを、高次元データ列としてバースト転送単位でまとめて出力し、前記データ格納メモリ管理部は、前記データ入力部が前記格納用外部メモリから取得した前記高次元データ列を、前記演算部で取り扱う座標に変換する内部座標変換部と、前記座標に基づき、前記データ格納メモリへの書き込み制御信号を作成するデータ格納メモリ書き込み制御部と、前記データ格納メモリと、前記演算部のリクエストを受けて、前記データ格納メモリから所定の順序で必要なデータをアクセスするデータ格納メモリ読み出し制御部と、を備えてもよい。【００２９】
前記格納用外部メモリは、１次元以上の位置情報とその位置における高次の要素を持つデータ列である高次元データ列が格納され、前記格納用外部メモリに格納される前記高次元データ列は、次元の座標情報と座標毎に高次の特徴量を有する特徴量マップであり、１つの座標に対応するデータ量がバースト転送量の１単位以上となり、前記データ入力部は、入力する特徴量マップの面数と座標に基づいて、前記格納用外部メモリにアクセスするリードアドレスを算出し、バースト転送により前記格納用外部メモリから高次元データ列を取得し、取得した高次元データ列を前記データ格納メモリ管理部に転送し、前記データ出力部は、出力する特徴量マップの面数と座標に基づいて前記格納用外部メモリにアクセスするライトアドレスを算出し、バースト転送により前記格納用外部メモリにデータを出力し、前記データ格納メモリ管理部は、座標及び補足情報を生成する内部座標変換部と、前記補足情報に基づいて、データ格納メモリへの書き込み制御信号を生成するデータ格納メモリ書き込み制御部と、を有し、前記内部座標変換部は、前記データ入力部が前記格納用外部メモリから取得した高次元データ列を所定の方法でカウントすることにより、特徴量マップの前記補足情報および前記座標を生成し、前記データ格納メモリ書き込み制御部は、特徴量マップの前記補足情報および前記座標に基づいて、書き込み対象となるデータ格納メモリへの書き込み制御信号およびライトアドレスを生成してもよい。
【発明の効果】
【００３０】
本発明の各態様に係る演算処理装置によれば、ＣＮＮを用いたディープラーニングによる画像認識において、Ｃｏｎｖｏｌｕｔｉｏｎ処理とＦｕｌｌＣｏｎｎｅｃｔ処理で回路の一部のみを共有するのではなく、回路の全体を共有することができる。さらに、Ｓｈｏｒｔｃｕｔ処理にも対応可能でかつＤＲＡＭ転送効率を高く維持することができる。
【図面の簡単な説明】
【００３１】
【図１】本発明の実施形態に係る演算処理装置における、ＦｕｌｌＣｏｎｎｅｃｔ層におけるデータの解釈を示すための図である。
【図２】本発明の実施形態に係る演算処理装置における、ＣＮＮを用いたディープラーニングを行う演算処理装置の構成を示すブロック図である。
【図３】本発明の実施形態に係る演算処理装置における、演算部の構成を示す図である。
【図４】本発明の実施形態に係る演算処理装置における、ｉＦＭ（入力特徴量マップ）のデータ配置およびこのデータに対応する係数を示す図である。
【図５】本発明の実施形態に係る演算処理装置における、Ｃｏｎｖｏｌｕｔｉｏｎ処理時のタイミングチャートを示す図である。
【図６】本発明の実施形態に係る演算処理装置における、各セットにおけるｉＦＭ（入力特徴量マップ）のデータ配置およびこのデータに対応する係数を示す図である。
【図７】本発明の実施形態に係る演算処理装置における、ＦｕｌｌＣｏｎｎｅｃｔ処理時のタイミングチャートを示す図である。
【図８】本発明の実施形態に係る演算処理装置における、ＦＦアレイ搭載時における、Ｃｏｎｖｏｌｕｔｉｏｎ時のＩＢＵＦ制御のコードの例を示す図である。
【図９】本発明の実施形態の第１変形例に係る演算処理装置における、ＩＢＵＦ管理部、ＷＢＵＦ管理部、および演算部の接続を示す図である。
【図１０】本発明の実施形態の第１変形例に係る演算処理装置における、演算部の内部構成を示す図である。
【図１１】本発明の実施形態の第１変形例に係る演算処理装置における、クロックゲーティングによる演算スルーの例を示す図である。
【図１２】本発明の実施形態の第１変形例に係る演算処理装置における、演算時のタイミングチャートを示す図である。
【図１３】本発明の実施形態の第２変形例に係る演算処理装置における、ＩＢＵＦ管理部、ＷＢＵＦ管理部、および演算部の接続を示す図である。
【図１４】本発明の実施形態の第２変形例に係る演算処理装置における、演算部の内部構成を示す図である。
【図１５】本発明の実施形態の第２変形例に係る演算処理装置における、演算時のタイミングチャートを示す図である。
【図１６】本発明の実施形態の第３変形例に係る演算処理装置における、ＩＢＵＦ管理部、ＷＢＵＦ管理部、および演算部の接続を示す図である。
【図１７】本発明の実施形態の第３変形例に係る演算処理装置における、演算部の内部構成を示す図である。
【図１８】本発明の実施形態の第３変形例に係る演算処理装置における、演算時のタイミングチャートを示す図である。
【図１９】ＣＮＮで処理するＦＭデータをＤＲＡＭ空間上に配置するイメージ図である。
【図２０】ＣＮＮ処理における入力データ列と出力データ列の関係を示すイメージ図である。
【図２１】通常のＣＮＮ処理を示すイメージ図である。
【図２２】Ｓｈｏｒｔｃｕｔ処理の一種であるＲｅｌｏｃａｔｅ処理の一例を示すイメージ図である。
【図２３】図２２のＲｅｌｏｃａｔｅ処理における、Ｓｈｏｒｔｃｕｔ先でのｉＦＭの取り扱いの一例を示すイメージ図である。
【図２４】Ｓｈｏｒｔｃｕｔ処理の一種であるＣｏｍｂｉｎｅ処理の一例を示すイメージ図である。
【図２５】Ｃｏｍｂｉｎｅ処理における、Ｓｈｏｒｔｃｕｔ先でのｉＦＭの取り扱いの一例を示すイメージ図である。
【図２６】ＤＲＡＭ上に配置されている高次元データ列のイメージ図である。
【図２７】高次元データ列を分割して扱う場合の、ＤＲＡＭ上に配置されている高次元データ列のイメージ図である。
【図２８Ａ】同一座標のデータが複数回のバースト転送にまたがる場合の、ＤＲＡＭ上に配置されている高次元データ列のイメージ図である。
【図２８Ｂ】同一座標のデータが複数回のバースト転送にまたがる場合の、ＤＲＡＭ上に配置されている高次元データ列のイメージ図である。
【図２９】ＩＢＵＦ管理部の構成を示すブロック図である。
【図３０】ＩＢＵＦ内のイメージ図である。
【図３１】通常処理における内部座標変換部の処理を示す図である。
【図３２】Ｓｈｏｒｔｃｕｔ処理における内部座標変換部の処理を示す図である。
【図３３】ＣＮＮを用いたディープラーニングの処理の流れを示す図である。
【図３４】従来技術に係るＣｏｎｖｏｌｕｔｉｏｎ処理の流れを示す図である。
【図３５】従来技術に係るＦｕｌｌＣｏｎｎｅｃｔ処理の流れを示す図である。
【発明を実施するための形態】
【００３２】
まず、本発明のベースとなる考え方について説明する。本発明では、ＦｕｌｌＣｏｎｎｅｃｔ層の処理は、入力特徴量マップ（ｉＦＭ）のサイズがフィルタサイズと等しく、出力特徴量マップ（ｏＦＭ）のサイズが１×１で、プーリング処理を行わない、特殊なＣｏｎｖｏｌｕｔｉｏｎ処理であると考える。この考えに基づき、Ｃｏｎｖｏｌｕｔｉｏｎ処理とＦｕｌｌＣｏｎｎｅｃｔ処理を全く同じ回路で行う。すなわち、従来技術のように、Ｃｏｎｖｏｌｕｔｉｏｎ処理とＦｕｌｌＣｏｎｎｅｃｔ処理で回路の一部のみを共有するのではなく、回路の全体を共有する。
【００３３】
ＦｕｌｌＣｏｎｎｅｃｔ層の入力（入力特徴量マップのデータ列）をｉＦＭ［ｊ］（要素数ｎ、０≦ｊ＜ｎ）、出力（出力特徴量マップのデータ列）をｏＦＭ［ｉ］（要素数ｍ、０≦ｉ＜ｍ）、ｏＦＭ［ｉ］を計算するための係数群をｋ［ｉ］［ｊ］とすると、以下の式が満たされる。
【００３４】
【数１】
2019216376.tif 000003
【００３５】
ここで、入力の１次元データ列（要素数ｎ）を所定サイズ（Ｆｘ×Ｆｙ）のデータ列Ｎ面分に換算し直す処理（ｎ≦Ｆｘ×Ｆｙ×Ｎ）を行う。Ｆｘはデータ列のｘ方向（横方向）のサイズであり、Ｆｙはデータ列のｙ方向（縦方向）のサイズであり、ＦｘとＦｙの少なくとも１つが２以上である。
【００３６】
これにより、ＦｕｌｌＣｏｎｎｅｃｔ層における１次元のデータ列を１次元以上のデータ列と考えることができる。例えば、ＦｕｌｌＣｏｎｎｅｃｔ層の入力ｉＦＭ［ｊ］を、ｉＦＭ［ｚ］［ｘ］［ｙ］（０≦ｘ＜Ｆｘ、０≦ｙ＜Ｆｙ、０≦ｊ＜ｎ、ｊ＝Ｆｙ×（ｚ×Ｆｘ＋ｘ）＋ｙ）という３次元のデータ列と解釈する。また、係数群ｋ［ｉ］［ｊ］を、ｋ［ｉ］［ｚ］［ｘ］［ｙ］（０≦ｉ＜ｍ、０≦ｘ＜Ｆｘ、０≦ｙ＜Ｆｙ、０≦ｊ＜ｎ、ｊ＝Ｆｙ×（ｚ×Ｆｘ＋ｘ）＋ｙ）という４次元のデータ列と解釈する。
【００３７】
図１は、本発明の実施形態に係る、ＦｕｌｌＣｏｎｎｅｃｔ層におけるデータの解釈を示すための図である。図３４に示すＣｏｎｖｏｌｕｔｉｏｎ層における処理と比較すると、入力特徴量マップ（ｉＦＭ）のサイズがフィルタサイズと等しい点と、出力特徴量マップ（ｏＦＭ）データのサイズが１×１であるため、プーリング処理を行わない点が異なっている。このようなＦｕｌｌＣｏｎｎｅｃｔ層におけるデータの解釈を実現するためには、Ｃｏｎｖｏｌｕｔｉｏｎ処理時とＦｕｌｌＣｏｎｎｅｃｔ処理時でフィルタサイズを変更できる、すなわちフィルタサイズが可変である必要がある。
【００３８】
図２は、上述のＦｕｌｌＣｏｎｎｅｃｔ層におけるデータの解釈を実現するための、本発明の実施形態に係る、ＣＮＮを用いたディープラーニングを行う演算処理装置の構成を示すブロック図である。
【００３９】
演算処理装置１は、コントローラ２と、データ入力部３と、係数入力部４と、ＩＢＵＦ（データ格納メモリ）管理部５と、ＷＢＵＦ（係数格納メモリ）管理部６と、演算部７と、データ出力部８を備える。データ入力部３と、係数入力部４と、データ出力部８は、バス１０を介して、ＤＲＡＭ（格納用外部メモリ）９と接続されている。
【００４０】
ＩＢＵＦ管理部５は、入力特徴量マップ（ｉＦＭ）データ格納用のメモリ（データ格納メモリ、ＩＢＵＦ）と、データ格納メモリの管理・制御回路（データ格納メモリ制御回路）を有する。ＩＢＵＦ管理部５は、入力データ中の有効データ数をカウントして座標に変換し、さらにそれをＩＢＵＦアドレスに変換したデータ（ｉＦＭデータ）をデータ格納メモリに格納するとともに、所定の方法でｉＦＭデータをデータ格納メモリから取り出す。
【００４１】
ＷＢＵＦ管理部６は、係数格納用のメモリ（係数格納メモリ、ＷＢＵＦ）と、係数格納メモリの管理・制御回路（係数格納メモリ制御回路）を有する。ＷＢＵＦ管理部６は、ＩＢＵＦ管理部５のステータスを参照して、ＩＢＵＦ管理部５から取り出すデータに対応する係数を係数格納メモリから取り出す。
【００４２】
ＤＲＡＭ（格納用外部メモリ）９は、ｉＦＭデータ、ｏＦＭデータおよび係数を格納する。データ入力部３は、ＤＲＡＭ９から所定の方法で、入力特徴量マップ（ｉＦＭ）を取得し、ＩＢＵＦ（データ格納メモリ）管理部５に渡す。データ出力部８は、ＤＲＡＭ９に所定の方法で、出力特徴量マップ（ｏＦＭ）データを書き出す。具体的には、データ出力部８は、演算部７から出力されるＭ並列のデータを連結してＤＲＡＭ９に出力する。係数入力部４は、ＤＲＡＭ９から所定の方法で、係数を取得し、ＷＢＵＦ（係数格納メモリ）管理部６に渡す。なお、格納用外部メモリ９はＤＲＡＭに限定されず、ＳＳＤなどでもよい。
【００４３】
演算部７は、ＩＢＵＦ（データ格納メモリ）管理部５からデータ、ＷＢＵＦ（係数格納メモリ）管理部６から係数を取得して、フィルタ処理・累積加算・非線形演算・プーリング処理等のデータ処理を行う。コントローラ２は、回路全体の制御を行う。
【００４４】
ＣＮＮでは、図３３に示すように、何層も類似の処理を実施する。本発明の実施形態に係る演算処理装置１を用いる場合、演算部７は、１層分の処理に必要なデータおよび係数だけを有して１層分の処理を行い、データおよび係数はＤＲＡＭ９に逐一置かれる。そして、必要な層数分の処理が繰り返し実行される。演算処理装置１は最終出力データとして被写体推定結果を出力し、この最終出力データを、プロセッサ（回路でもよい）を用いて処理することにより被写体推定結果を得る。
【００４５】
図３は、本発明の実施形態に係る、演算処理装置の演算部の構成を示す図である。演算部７の入力チャネル数はＮ（Ｎ≧１）、すなわち入力データはＮ次元であり、Ｎ次元の入力データが並列して処理される（入力Ｎ並列）。演算部７の出力チャネル数はＭ（Ｍ≧１）、すなわち出力データはＭ次元であり、Ｍ次元の入力データが並列して出力される（出力Ｍ並列）。図３に示すように、１つの層において、各チャネル（ｉｃｈ＿０〜ｉｃｈ＿Ｎ−１）ごとに、ｉＦＭデータ（ｄ＿０〜ｄ＿Ｎ−１）と係数（ｋ＿０〜ｋ＿Ｎ−１）が入力され、１個のデータを出力する。この処理がＭ層、並行して行われ、Ｍ個のデータｏｃｈ＿０〜ｏｃｈ＿Ｍ−１が出力される。
プーリングを実施する場合は「フィルタサイズ×４」セットのデータが入って初めて１個のデータが出る。プーリングをしない場合は「フィルタサイズ」セット分のデータで１個のデータが出る。
【００４６】
このように、演算部７は、入力チャネル数をＮ、出力チャネル数をＭとして、並列度がＮ×Ｍとなる構成を取る。入力チャネル数Ｎおよび出力チャネル数Ｍの大きさは、ＣＮＮの大きさに応じて設定（変更）することができるので、処理性能や回路規模を勘案して適切に設定する。
【００４７】
演算部７は、演算部内各部の制御を行う演算制御部７１を備える。また、演算部７は、各層ごとに、Ｎ個のフィルタ処理部７２と、第２加算器７５と、非線形変換部７６と、プーリング処理部７７を備える。そして、このような層がＭ個ある。すなわち、フィルタ処理部７２はＮ×Ｍ個ある。
【００４８】
演算制御部７１が、演算部７の前段に対してリクエストを発行することにより、所定のデータがフィルタ処理部７２に入力される。フィルタ処理部７２は、乗算器７３と第１加算器７４から構成され、入力データのフィルタ処理を行う。乗算器７３は、外部から入力されるＦＭデータ（特徴量マップデータ）ｄ＿０〜ｄ＿Ｎ−１と、ＦＭデータとタイミングを合わせて入力される係数ｋ＿０〜ｋ＿Ｎ−１との乗算を行う。そして、第１加算器７４が乗算の結果をフィルタサイズ分累積加算し、フィルタ処理部７２におけるフィルタ処理が完了する。すなわち、累積加算の回数に応じて、フィルタサイズを変える。Ｎ個のフィルタ処理部７２は、異なるＦＭデータに対して、同時に（並列して）上述の処理を行う。
【００４９】
第２加算器７５は、Ｎ並列で実行されるＮ個のフィルタ処理部７２におけるフィルタ処理の結果を累積加算する。非線形変換部７６は、第２加算器７５での累積加算の結果に対して、Ａｃｔｉｖａｔｅ関数などによる非線形演算処理を行う。具体的な実装は特に規定しないが、例えば折れ線近似により非線形演算処理を行う。
【００５０】
プーリング処理部７７は、非線形変換部７６から入力された複数のデータの中から最大値を選択出力（Ｍａｘ  Ｐｏｏｌｉｎｇ）する、平均値を算出（Ａｖｅｒａｇｅ  Ｐｏｏｌｉｎｇ）する、などのプーリング処理を行う。なお、非線形変換部７６とプーリング処理部７７は、ネットワークによっては動作しない事があるので、演算制御部７１によりスルーさせることができる。ＦｕｌｌＣｏｎｎｅｃｔ処理の時はプーリング処理を行わないので、プーリング処理部７７をスルーさせる。
【００５１】
演算制御部７１は、演算部７内の各部において行われる上述の処理の制御を行う。このような構成により、演算部７において、入力チャネル数Ｎおよび出力チャネル数Ｍの大きさは、ＣＮＮの大きさに応じて設定（変更）することができるので、処理性能や回路規模を勘案して適切に設定する。
【００５２】
（Ｃｏｎｖｏｌｕｔｉｏｎ処理時）
Ｃｏｎｖｏｌｕｔｉｏｎ処理時には、ＦＭサイズとフィルタサイズは異なっていてもよく、変更も可能である。また出力は２次元データである。
【００５３】
演算部７におけるＣｏｎｖｏｌｕｔｉｏｎ処理時の動作について説明する。ここでは、１つの入力チャネルに着目して、Ｃｏｎｖｏｌｕｔｉｏｎ処理することを考える。以下、フィルタサイズが３×３である場合について説明する。
【００５４】
図４（ａ）は、ｉＦＭ（入力特徴量マップ）のデータ配置を示す図であり、図４（ｂ）は、このデータに対応する係数を示す図である。図４（ａ）中のａ〜ｐは、データの値を示す（図３のｄ＿０〜ｄ＿Ｎ−１に対応する）。図４（ｂ）中のｗ１〜ｗ９は、係数の値を示す（図３のｋ＿０〜ｋ＿Ｎ−１に対応する）。すなわち、ｄ＊はデータライン、ｋ＊は係数ラインを示している。
【００５５】
図５は、Ｃｏｎｖｏｌｕｔｉｏｎ処理時のタイミングチャートを示す図である。図の左から右へと時間が流れていくものとする。まず、図４（ａ）に示すｉＦＭのデータ中のフィルタサイズ分（３×３の９個）のデータ（ａ、ｂ、ｃ、ｅ、ｆ、ｇ、ｉ、ｊ、ｋ）の各々に対し、乗算器７３において係数ｗ１〜ｗ９が乗算される。第１加算器７４は、乗算器７３による乗算結果をフィルタサイズ分（３×３の９個）累積加算する（図５のΣ）。第１加算器７４による累積加算の結果（Σ）は、フィルタ処理部７２におけるフィルタ処理結果となる。
【００５６】
第２加算器７５は、Ｎ並列に並んだ第１加算器７４の結果（Σ）の総和を取る（図５のＡ）。Ａは出力の１画素に対応する。第２加算器７５において、この総和を取る処理は、第１加算器７４からフィルタ処理結果が出力されるタイミングで行われる。そして、非線形変換部７６が、第２加算器７５によって算出された総和（Ａ）に対して、非線形変換部を行う（図５のｆ（Ａ））。
【００５７】
以上で、１つのフィルタのフィルタサイズ分（３×３の９個）のデータの処理は完了する。そして、次のフィルタのフィルタサイズ分（３×３の９個）のデータの処理へと進む。データの入力順は図５に示すように、「ａ、ｂ、ｃ、ｅ、ｆ、ｇ、ｉ、ｊ、ｋ」の次は、「ｅ、ｆ、ｇ、ｉ、ｊ、ｋ、ｍ、ｎ、ｏ」であり、その次は「ｂ、ｃ、ｄ、ｆ、ｇ、ｈ、ｊ、ｋ、ｌ」である。このように、フィルタの重心位置が図４（ａ）に示すデータで「ｆ→ｊ→ｇ→ｋ」の順に動いていく。非線形変換部７６以降にはこの順で入り、プーリング処理部７７が複数のデータに対してプーリング処理を行う。
【００５８】
（ＦｕｌｌＣｏｎｎｅｃｔ処理時）
ＦｕｌｌＣｏｎｎｅｃｔ処理時には、Ｃｏｎｖｏｌｕｔｉｏｎ処理時のＦＭサイズとフィルタサイズのサイズの条件に一定の条件を加える。ＦｕｌｌＣｏｎｎｅｃｔ処理時には、演算部７が、入力の１次元データ列（要素数ｎ）を、Ｆｘ×Ｆｙの２次元データ列Ｎ面分（Ｎ並列）に換算し直す処理を行う（ｎ≦Ｆｘ×Ｆｙ×Ｎ）。すなわち、演算部７が、フィルタサイズを所定サイズ（Ｆｘ×Ｆｙ）に設定するとともに、出力の２次元データ列（要素数ｉ×ｊ）として、ｏＦＭのサイズが１×ｎ、ｏＦＭの数がｍとなるように設定する。Ｃｏｎｖｏｌｕｔｉｏｎ処理時のフィルタサイズと同じである必要はない。Ｎは回路の入力並列度で、実装により固定されるので、大きなｎを扱うために通常はＦｘ、Ｆｙを（対応可能な範囲で）極力大きめに設定する。
【００５９】
演算部７におけるＦｕｌｌＣｏｎｎｅｃｔ処理時の動作について説明する。Ｃｏｎｖｏｌｕｔｉｏｎ処理の説明と同様に、フィルタサイズが３×３である場合について説明する。この場合、入力チャネル数がＮ（Ｎ並列）なので、入力データ列は９Ｎである。ｉＦＭデータのサイズはフィルタサイズと同じなので３×３である。すなわち、上述のＦｘ、Ｆｙは、Ｆｘ＝Ｆｙ＝３を満たす。したがって、ＦｕｌｌＣｏｎｎｅｃｔ層の入力（入力特徴量マップのデータ列）ｉＦＭ［ｊ］（要素数ｎ、０≦ｊ＜ｎ）を、ｉＦＭ［ｚ］［ｘ］［ｙ］（０≦ｘ＜３、０≦ｙ＜３、０≦ｊ＜ｎ、ｊ＝３×（ｚ×３＋ｘ）＋ｙ）という３次元のデータ列と解釈する。また、ＦｕｌｌＣｏｎｎｅｃｔ層の出力（出力特徴量マップのデータ列）ｏＦＭ［ｉ］（要素数ｍ、０≦ｉ＜ｍ）を計算するための係数群ｋ［ｉ］［ｊ］を、ｋ［ｉ］［ｚ］［ｘ］［ｙ］（０≦ｉ＜ｍ、０≦ｘ＜３、０≦ｙ＜３、０≦ｊ＜ｎ、ｊ＝３×（ｚ×３＋ｘ）＋ｙ）という４次元のデータ列と解釈する。
【００６０】
図６（ａ）は、第１セットにおけるｉＦＭ（入力特徴量マップ）のデータ配置を示す図であり、図６（ｂ）は、このデータに対応する係数を示す図である。図６（ａ）中のａ１〜ｉ１はデータの値を示し、図６（ｃ）中のｗ１１〜ｗ１９は係数の値を示す。同様に、図６（ｃ）は、第２セットにおけるｉＦＭ（入力特徴量マップ）のデータ配置を示す図であり、図６（ｄ）は、このデータに対応する係数を示す図である。図６（ｂ）中のａ２〜ｉ２はデータの値を示し、図６（ｄ）中のｗ２１〜ｗ２９は係数の値を示す。第３セット以降も同様であり、必要なだけセット数を増やせばよい。
【００６１】
図７は、ＦｕｌｌＣｏｎｎｅｃｔ処理時のタイミングチャートを示す図である。入力データが図４と図６で異なる点を考慮すれば、図７に示すＦｕｌｌＣｏｎｎｅｃｔ処理時のタイミングチャートは、図５に示すＣｏｎｖｏｌｕｔｉｏｎ処理時のタイミングチャートと全く同じ処理となる。したがって、図７の説明は省略する。ただし、このタイミングチャート以降の処理において、図５に示すＣｏｎｖｏｌｕｔｉｏｎ処理時の非線形変換出力はｏＦＭを形成する１画素のデータ（正確には、ｏＦＭを形成する１画素のデータを作成するためのプーリング処理前のデータ）でしかないのに対し、図７に示すＦｕｌｌＣｏｎｎｅｃｔ処理時の非線形変換出力はそのまま１面分のｏＦＭデータである。
【００６２】
ここで、入力データ列がフィルタサイズでちょうど割り切れない場合は、フィルタサイズで割り切れる（フィルタサイズと等しくなる）ように、値がゼロのデータを追加することにより、累積加算結果に誤差を生じることなく演算ができる。
【００６３】
上述のように、発明は、設定パラメータの変更だけで任意のフィルタサイズに対応でき、フィルタサイズ方向でなく、フィルタの種類方向にアレイ状に並列化することにより高速化を実現し、かつフィルタサイズを設定（変更）することができる構成を実現している。これにより完全同一回路でＣｏｎｖｏｌｕｔｉｏｎ処理およびＦｕｌｌＣｏｎｎｅｃｔ処理の両方に対応でき、専用制御を必要とせず、規模削減（電力削減）効果がある。加えて、フィルタサイズが可変であるため、利便性が高い。また、Ｃｏｎｖｏｌｕｔｉｏｎ処理の回路リソースをＦｕｌｌＣｏｎｎｅｃｔ処理でフル活用できる設定なので、ＦｕｌｌＣｏｎｎｅｃｔ処理も高速実行できる。
【００６４】
Ｃｏｎｖｏｌｕｔｉｏｎ処理時には、図５のタイミングチャートに示すように、データ格納メモリ（ＩＢＵＦ）から同じデータを複数回、読み出している。具体的には、図４（ａ）に示すデータにおいて、「ｆ」を中心とする９個のデータを読み出して１つの出力データを算出し、「ｊ」を中心とする９個のデータを読み出して１つの出力データを算出し、「ｇ」を中心とする９個のデータを読み出して１つの出力データを算出し、「ｋ」を中心とする９個のデータを読み出して１つの出力データを算出する。そして、４つ（２×２）のデータからプーリング処理により１つのデータを算出する。すなわち、フィルタサイズが３×３でプーリング処理の実施単位のサイズが２×２の場合、データ格納メモリから読み出すデータの種類は１６であるのに対し、読み出し回数は３×３×４＝３６となる。
【００６５】
そこで、データ格納メモリのＳＲＡＭへのアクセスの消費電力を削減するため、図４（ａ）に示す４×４の単位でデータ格納メモリからデータを取り出して保存するＦＦアレイ（バッファ）を、データ格納メモリの内部に備えてもよい。すなわち、データ格納メモリは、プーリング処理後の１データを算出するために必要なデータセット（４×４＝１６個のデータ）を格納できるＦＦアレイを備え、このＦＦアレイはＩＢＵＦから読み出したデータを蓄積する。このような構成により、ＳＲＡＭから何度も同じデータを読み出す必要がなく、メモリアクセスを減らして消費電力を低減できる。
【００６６】
図８は、ＦＦアレイ搭載時における、Ｃｏｎｖｏｌｕｔｉｏｎ時のＩＢＵＦ制御のコードの例を示す図である。なお、同等の機能を回路で実装してもよい。
【００６７】
（変形例）
上述の実施形態の変形例について説明する。本発明では、図３のように、フィルタ演算は、データと係数をピクセル単位で乗算し、累積加算器で乗算結果を累積加算することにより実現している。このとき、係数とデータの少なくともどちらか一方がゼロの場合、乗算結果はゼロとなり、累積加算の結果は更新されないので、演算が無駄となる。特に、ＤｅｅｐＬｅａｒｎｉｎｇにおいては係数の多くがゼロになる場合があり、この問題は顕著である。
【００６８】
そこで、第１変形例では、係数とデータのどちらか一方がゼロの場合、乗算と累積加算を実行しない事で消費電力を削減する。図９は、本変形例の演算処理装置に係る、ＩＢＵＦ管理部５、ＷＢＵＦ管理部６、および演算部７の接続を示す図である。
【００６９】
演算部７からリクエスト（ｒｅｑ）を受けると、ＩＢＵＦ（データ格納メモリ）管理部５のＳＲＡＭ読み出し制御部５１は、Ｎ個のＩＢＵＦ（０〜Ｎ−１）からＮ個のＦＭデータを読み出し、演算部７に送信する。また、これと同じタイミングで、ＷＢＵＦ（係数格納メモリ）管理部６のＷＢＵＦ読み出し部６１は、Ｍ個のＷＢＵＦ（０〜Ｍ−１）からＮ×Ｍ個の係数を読み出し、演算部７に送信する。本変形例では、ＩＢＵＦ管理部５のＳＲＡＭ読み出し制御部５１から、ＷＢＵＦ管理部６のＷＢＵＦ読み出し部６１へと、ステータス信号が送信される。ここで、ステータス信号とは、ＩＢＵＦ管理部５が取り出すＦＭデータの情報をＷＢＵＦ管理部６に伝える信号である。
【００７０】
図１０は、図９における演算部７の内部構成を示す図である。本変形例では、演算部７において、フィルタ処理部７２の前段に演算実行判定部７８が設けられている。演算実行判定部７８は、ＩＢＵＦから入力されたデータ（ｄａｔａ＿０、ｄａｔａ＿１、…）およびＷＢＵＦから入力された係数（ｃｏｅｆ＿０、ｃｏｅｆ＿１、…）のどちらかがゼロか否かを示す演算スルー信号（ｖｚ＿０、ｖｚ＿１、…）をフィルタ処理部７２に通知する。
【００７１】
ＩＢＵＦから入力されたデータ（ｄａｔａ＿０、ｄａｔａ＿１、…）およびＷＢＵＦから入力された係数（ｃｏｅｆ＿０、ｃｏｅｆ＿１、…）のどちらかがゼロの場合、演算スルー信号（ｖｚ＿０、ｖｚ＿１、…）の値はゼロである。ＩＢＵＦから入力されたデータ（ｄａｔａ＿０、ｄａｔａ＿１、…）およびＷＢＵＦから入力された係数（ｃｏｅｆ＿０、ｃｏｅｆ＿１、…）のどちらもゼロでない場合、演算スルー信号（ｖｚ＿０、ｖｚ＿１、…）の値は１である。
【００７２】
フィルタ処理部７２は、演算実行判定部７８から入力された演算スルー信号（ｖｚ＿０、ｖｚ＿１、…）の値がゼロの場合、乗算および累積加算の実行をＯＦＦ（演算スルー）する。「演算スルー」とは、フィルタ処理部７２における処理を停止する、または演算処理を行わないことを意味する。
【００７３】
演算スルー信号（ｖｚ＿０、ｖｚ＿１、…）は、イネーブル信号でも良いし、フィルタ処理部７２に入力されるクロックをゲーティングする（止める）ために使用するのでも良い。図１１は、クロックゲーティングによる演算スルーの例を示す図である。図中の「ＣＧ」はクロックゲーティングセルを示す。演算実行判定部７８のゼロ検出部がデータ（ｄａｔａ）または係数（ｃｏｅｆ）のゼロを検出すると、演算スルー信号（ｖｚ＿０、ｖｚ＿１、…）の値をゼロとして、クロックゲーティングセルに通知される。演算スルー信号（ｖｚ＿０、ｖｚ＿１、…）の値がゼロの場合、クロックゲーティングセルは、クロックを止める信号を送信し、フィルタ処理部７２における演算がストップする。
【００７４】
図１２は、入力の並列度をＮ＝ｎ＋１＝２、出力の並列度をＭ＝ｍ＋１＝２とした場合のタイミングチャートを示す図である。ＷＢＵＦ（係数格納メモリ）における係数の値（Ｗ）またはＩＢＵＦ（データ格納メモリ）におけるデータの値（Ｄ）がゼロの場合、演算スルー信号（ｖｚ＿０、ｖｚ＿１、…）の値がゼロとなり、乗算器における演算がスルーされ、第１加算器による演算がスルーされる。
【００７５】
このように、演算実行判定部７８は、入力された入力特徴量マップデータおよび係数の少なくとも一方がゼロの場合、フィルタ処理部７２に演算スルーを通知する。演算実行判定部７８から演算スルーが通知された場合、フィルタ処理部７２は演算をスルーする。このような構成により、第１変形例では、係数かデータのどちらかがゼロの場合、乗算と累積加算を実行しない事で消費電力を削減することができる。
【００７６】
次に、本発明の実施形態の第２変形例について説明する。第２変形例では、データにゼロが多いとき、先にデータを読んで、データがゼロの場合、係数記憶メモリへのアクセス（ＳＲＡＭリードアクセス）自体を停止する。これにより、さらに消費電力を削減する。
【００７７】
図１３は、本変形例の演算処理装置に係る、ＩＢＵＦ管理部５、ＷＢＵＦ管理部６、および演算部７の接続を示す図である。演算部７からリクエスト（ｒｅｑ）を受けると、ＩＢＵＦ（データ格納メモリ）管理部５のＳＲＡＭ読み出し制御部５１は、Ｎ個のＩＢＵＦ（０〜Ｎ−１）からＮ個のＦＭデータを読み出し、ｄｅｌａｙ回路５２を介して演算部７に送信すると同時に、ＷＢＵＦ（係数格納メモリ）管理部６のデータゼロ検出部６２へと送信する。
【００７８】
データゼロ検出部６２は、ＩＢＵＦ管理部５から送信されたＮ個のＦＭデータの各々がゼロか否かを検出し、データがゼロの場合は、そのデータの検出信号ｉｚ＊＝０（＊＝０〜Ｎ−１）とする。例えば、ＩＢＵＦ０から読み出したＦＭデータがゼロの場合は、ｉｚ０＝０とする。そして、データゼロ検出部６２は、検出信号ｉｚ＊を、ＷＢＵＦ（係数格納メモリ）管理部６のＷＢＵＦ読み出し部６１および演算部７に送信する。
【００７９】
ＷＢＵＦ（係数格納メモリ）管理部６のＷＢＵＦ読み出し部６１は、検出信号ｉｚ＊に基づいて、Ｍ個のＷＢＵＦ（０〜Ｍ−１）のうち、対応するデータがゼロでないＷＢＵＦにのみアクセスして係数を読み出し、演算部７に送信する。ＷＢＵＦにアクセスしていない（ＷＢＵＦから読み出していない）係数はゼロとして、演算部７に送信する。
【００８０】
図１４は、本変形例における、演算部７の内部構成を示す図である。演算部７の演算実行判定部７８は、ＷＢＵＦ読み出し部６１から送信された係数（ｃｏｅｆ＿０、ｃｏｅｆ＿１、…）がゼロの部分を検出し、その結果とデータゼロ検出部６２から送信された検出信号（ｉｚ＿０、ｉｚ＿１、…）との論理和を演算スルー信号（ｖｚ０、ｖｚ１、…）とする。
【００８１】
図１５は、本変形例における、演算時のタイミングチャートを示す図である。ＩＢＵＦ（データ格納メモリ）におけるデータの値（Ｄ）がゼロの場合、検出信号（ｉｚ＿０、ｉｚ＿１、…）の値がゼロとなり、対応するＷＢＵＦからの係数の読み出しが行われない（図の「←」）。そして、ＩＢＵＦ（データ格納メモリ）におけるデータの値（Ｄ）におけるゼロの検出結果と、ＷＢＵＦ（係数格納メモリ）における係数の値（Ｗ）におけるゼロの検出結果とに基づいた演算スルー信号（ｖｚ０、ｖｚ１、…）がゼロの場合、フィルタ処理部７２の乗算器７３における演算がスルーされる（図の「←」）。得られる最終結果は、第１変形例のものと同じとなる。
【００８２】
上述のように、本変形例では、ＷＢＵＦ管理部６が、ＩＢＵＦ（データ格納メモリ）から読み出したＦＭデータがゼロか否かを検出するデータゼロ検出部６２を有する。そして、ＷＢＵＦ（係数格納メモリ）管理部６のＷＢＵＦ読み出し部６１は、ＷＢＵＦ（係数格納メモリ）のうち、対応するＩＢＵＦ（データ格納メモリ）から読み出したＦＭデータがゼロでないＷＢＵＦにのみにアクセスして係数を取り出す。さらに、演算部７の演算実行判定部７８は、係数がゼロの部分を検出し、その結果とデータゼロ検出部の結果との論理和を出力する。
【００８３】
このような構成により、第２変形例では、第１変形例に加えて、データがゼロの場合、係数格納メモリへのアクセス自体を停止して、さらに消費電力を削減することができる。ゼロが多いデータの時は第２変形例が有利となる。
【００８４】
次に、本発明の実施形態の第３変形例について説明する。第３変形例では、係数にゼロが多いときに、先に係数を読んで、係数の値がゼロでなかった部分に対応するＩＢＵＦにのみアクセスする。すなわち、係数の値がゼロの部分に対応するデータリードアクセス自体を停止する。
【００８５】
図１６は、本変形例の演算処理装置に係る、ＩＢＵＦ管理部５、ＷＢＵＦ管理部６、および演算部７の接続を示す図である。演算部７からリクエスト（ｒｅｑ）を受けると、ＷＢＵＦ（係数格納メモリ）管理部６のＷＢＵＦ読み出し部６１は、Ｍ個のＷＢＵＦ（０〜Ｍ−１）にアクセスしてＮ×Ｍ個の係数を読み出し、ｄｅｌａｙ回路６３を介して、演算部７に送信すると同時に、ＩＢＵＦ（データ格納メモリ）管理部５の係数ゼロ検出部５３に送信する。さらに、ＷＢＵＦ読み出し部６１は、ステータス信号をＩＢＵＦ（データ格納メモリ）管理部５のＳＲＡＭ読み出し制御部５１に送信する。ここで、ステータス信号とは、ＷＢＵＦ管理部６が取り出す係数の情報をＩＢＵＦ管理部５に伝える信号である。
【００８６】
係数ゼロ検出部５３は、ＷＢＵＦ管理部６から送信されたＮ×Ｍ個の係数の各々がゼロか否かを検出し、Ｍ並列全ての係数（Ｍ個の係数）がゼロの場合は、係数ゼロ検出信号ｃｚ＊＝０（＊＝０〜Ｎ〜１）とする。例えば、Ｍ並列全てのＷＢＵＦ０から読み出した係数がゼロの場合は、ｃｚ０＝０とする。このように、ＩＢＵＦ管理部５はＭ並列でＩＢＵＦの出力を共有しているので、Ｍ並列全ての係数（Ｍ個の係数）がゼロか否かを検出しなければならない。
【００８７】
そして、係数ゼロ検出部５３は、係数ゼロ検出信号ｃｚ＊を、ＩＢＵＦ管理部５のＳＲＡＭ読み出し制御部５１および演算部７に送信する。ＳＲＡＭ読み出し制御部５１は、Ｎ個のＩＢＵＦ（０〜Ｎ−１）からＮ個のＦＭデータを読み出し、演算部７に送信する。
【００８８】
図１７は、本変形例における、演算部７の内部構成を示す図である。演算部７の演算実行判定部７８は、ＩＢＵＦ管理部５から送信されたＦＭデータ（ｄａｔａ＿０、ｄａｔａ＿１、…）がゼロの部分を検出し、その結果と係数ゼロ検出部５３から送信された係数ゼロ検出信号（ｃｚ＿０、ｃｚ＿１、…）との論理和を演算スルー信号（ｖｚ０、ｖｚ１、…）とする。本変形例の場合、係数がゼロであってもＦＭデータが入力される事があるが、演算実行判定部７８で係数ゼロ検出信号（ｃｚ＿０、ｃｚ＿１、…）がゼロであることを確認できるので、フィルタ処理部７２は結局動作しない。
【００８９】
図１８は、本変形例における、演算時のタイミングチャートを示す図である。ＷＢＵＦ（係数格納メモリ）におけるＭ並列全ての係数の値（Ｗ）がゼロの場合、係数ゼロ検出信号（ｃｚ＿０、ｃｚ＿１、…）の値がゼロとなり、対応するＩＢＵＦからのＦＭデータの読み出しが行われない（図の「←」）。そして、ＩＢＵＦ（データ格納メモリ）におけるデータの値（Ｄ）におけるゼロの検出結果と、ＷＢＵＦ（係数格納メモリ）における係数の値（Ｗ）におけるゼロの検出結果とに基づいた演算スルー信号（ｖｚ０、ｖｚ１、…）がゼロの場合、フィルタ処理部７２の乗算器７３における演算がスルーされる（図の「←」）。得られる最終結果は、第１変形例のものと同じとなる。
【００９０】
上述のように、本変形例では、Ｍ並列であるＩＢＵＦ管理部５の係数ゼロ検出部５３が、ＷＢＵＦ（係数格納メモリ）に格納されたＮ×Ｍ個の係数のうち、Ｍ並列全ての係数（Ｍ個の係数）がゼロか否かを検出して、係数ゼロ検出信号（ｃｚ＊）を出力する。そして、ＩＢＵＦ管理部５のＳＲＡＭ読み出し制御部５１が、ＩＢＵＦ（データ格納メモリ）のうち、係数ゼロ検出信号（ｃｚ＊）がゼロでない係数に対応するＩＢＵＦからのみＦＭデータを取り出す。演算実行判定部７８は、ＦＭデータのうちゼロの部分を検出し、その結果と係数ゼロ検出部５３の結果との論理和を出力する。
【００９１】
このような構成により、第３変形例では、第１変形例に加えて、Ｍ並列全ての係数がゼロの場合、ＳＲＡＭへのアクセス自体を停止する。これにより、さらに消費電力を削減することができる。第３変形例は係数にゼロが多い場合に有利となる。
【００９２】
（ＦＭデータのＤＲＡＭへの配置）
一般的に画像データはＤＲＡＭ上に画像イメージと対応付け易いように矩形的に（もしくはそれに準ずるような形式で）展開される。ＣＮＮを用いたＤｅｅｐＬｅａｒｎｉｎｇによる画像認識においても、取り扱うＦＭは２次元の位置情報を持つので、ＦＭデータを画像データと同様にＤＲＡＭ上に配置すると理解しやすい。
【００９３】
図１９は、ＣＮＮで処理するＦＭデータをＤＲＡＭ空間上に配置するイメージ図である。ｉＦＭデータであるｉＦＭ＿０〜ｉＦＭ＿（Ｎ−１）が、ＦＭ単位で矩形的に（横に並べて）ＤＲＡＭ空間上に配置されている。演算部７は、ＤＲＡＭからｉＦＭデータを読み込んで、畳み込み処理、加算処理、非線形処理、プーリング処理などのＣＮＮ処理を行い、得られたｏＦＭデータをＤＲＡＭに書き込む。ｏＦＭデータであるｏＦＭ＿０〜ｏＦＭ＿（Ｍ−１）も、ＦＭ単位で矩形的に（横に並べて）ＤＲＡＭ空間上に配置される。
【００９４】
ＣＮＮで取り扱うＦＭは数百〜数千枚にわたる高次元データ列であり、ＦＭをＦＭ単位で矩形的にＤＲＡＭ空間上に配置すると、図１９に示すように、ＤＲＡＭアドレスが飛び飛びとなってしまい、ＤＲＡＭ転送効率が落ちる。
【００９５】
図２０は、ＣＮＮ処理における入力データ列と出力データ列の関係を示すイメージ図である。入力データ列（ｉＦＭデータ）はＮ次元（０次〜（Ｎ−１）次）であり、ＣＮＮ処理後の出力データ（ｏＦＭデータ）はＭ次元（０次〜（Ｍ−１）次）である。ＣＮＮ処理の入出力データにおいて、出力データの座標（ｘ，ｙ）におけるＭ次元の情報を計算するために必要な入力データは、入力データの座標（ｘ'，ｙ'）近傍の（ある広がりを持った）Ｎ次元の情報全てである。すなわち、図２０に示す入力データの座標（ｘ'，ｙ'）を中心とする円で囲まれた領域のデータを用いてＣＮＮ処理を行い、出力データの座標（ｘ，ｙ）におけるＭ次元のデータを算出する。なお、実際にはＣＮＮ処理には係数も必要であるが、ここでは省略して考える。
【００９６】
このように、図２０に示す矢印の線上にある同じ座標のデータを用いて計算を行う。そのため、ＣＮＮ処理では座標単位でＤＲＡＭにアクセスできるようにデータ展開できることが望ましい。さらに、ＣＮＮには以下に説明するＳｈｏｒｔｃｕｔ処理などの特殊な処理が存在することがあり、このような特殊な処理に対応するためにも座標単位でＤＲＡＭにアクセスできることが重要である。
【００９７】
（Ｓｈｏｒｔｃｕｔ処理）
ここで、Ｓｈｏｒｔｃｕｔ処理について説明する。図２１は通常のＣＮＮ処理を示すイメージ図であり、図２２はＳｈｏｒｔｃｕｔ処理の一例を示すイメージ図である。通常のＣＮＮ処理では、２つの層の間でＣＮＮ処理が行われ、直前の層と直後の層との間に図２１に示す２つの層の間の直線で示すような入出力関係がある。ＣＮＮ処理は直前の層の出力ＦＭを入力として行われ、ＣＮＮ処理の結果が直後の層の入力ＦＭとなる。
【００９８】
採用するネットワークによってはＳｈｏｒｔｃｕｔ処理が存在する場合がある。Ｓｈｏｒｔｃｕｔ処理では、１つまたは複数の層をまたいだ（飛ばした）先の層との間で入出力関係がある。図２２はＳｈｏｒｔｃｕｔ処理の一種であるＲｅｌｏｃａｔｅ処理の一例を示し、３層目と４層目を飛ばすＳｈｏｒｔｃｕｔを行っている。すなわち、２層目の出力ＦＭ（図２２の矢印Ａ）の一部又は全部がＳｈｏｒｔｃｕｔによって５層目の入力ＦＭとなる。ただし、５層目の入力の一部には、通常パス（すなわち、３層目および４層目）を経由したＦＭ（図２２の矢印Ｂおよび矢印Ｃを経由したＦＭ）も含まれる。すなわち、通常パスを経由したＦＭとＳｈｏｒｔｃｕｔパスを経由したＦＭの総和が５層目に入力される。
【００９９】
ＣＮＮの各層には縮小処理であるｐｏｏｌｉｎｇ処理が含まれる場合があり、この場合、Ｓｈｏｒｔｃｕｔパスを経由したデータと通常パスを経由したデータのサイズが異なる。なお、層によってｐｏｏｌｉｎｇ処理が含まれない場合もある。図２２の例では、２層目の処理、４層目の処理、５層目の処理にはｐｏｏｌｉｎｇ処理が含まれ、ＦＭのサイズが縮小されている。一方、３層目の処理および６層目の処理にはｐｏｏｌｉｎｇ処理が含まれず、ＦＭのサイズが縮小されていない。
【０１００】
Ｓｈｏｒｔｃｕｔパスを経由するデータと通常パスを経由するデータのサイズが異なる場合について考える。図２３は、図２２のＲｅｌｏｃａｔｅ処理における、Ｓｈｏｒｔｃｕｔ先でのｉＦＭの取り扱いの一例を示すイメージ図である。具体的には、Ｓｈｏｒｔｃｕｔパスを経由したＦＭのサイズが、通常パスを通ったＦＭサイズの縦・横ともに２倍である場合に、Ｓｈｏｒｔｃｕｔ先である５層目の処理における、ｉＦＭの取り扱いの例を示す。
【０１０１】
図２３に示すように、Ｓｈｏｒｔｃｕｔパスを経由したＦＭを上下左右に４分割し、分割してできたＦＭの各々を１面のＦＭとみなす。これにより、Ｓｈｏｒｔｃｕｔパスを経由したＦＭを分割してできたＦＭのサイズと通常パスを経由したＦＭのサイズが同じになる。そして、Ｓｈｏｒｔｃｕｔパスを経由したＦＭを分割してできたＦＭと、通常パスを経由したＦＭ（４層目のｏＦＭ）の総和が、５層目のｉＦＭとなる。ここで、ＦＭの次元数は、位置を示す２次元を除外すれば、以下の関係を満たす。
５層目の入力の次元数＝（２層目のＳｈｏｒｔｃｕｔパスへの出力の次元数）×４＋（４層目の出力次元数）
【０１０２】
このように、Ｓｈｏｒｔｃｕｔ処理は、入力時点では異なる座標の情報だったものを、同じ座標の異なる次元情報として取り扱う点で、他の画像処理にはない特徴的な処理である。なお、Ｓｈｏｒｔｃｕｔパスを経由したＦＭの５層目での取り扱い方は多々あり、図２３は一例に過ぎない。
【０１０３】
以上、Ｓｈｏｒｔｃｕｔ処理の一種であるＲｅｌｏｃａｔｅ処理について説明したが、ネットワークによっては、逆に小さなＦＭを複数面結合して１面の大きなＦＭとして扱う処理もある（以下、Ｃｏｍｂｉｎｅ処理という）。図２４は、Ｓｈｏｒｔｃｕｔ処理の一種であるＣｏｍｂｉｎｅ処理の一例を示すイメージ図である。図２２と同様に、３層目と４層目を飛ばしてＳｈｏｒｔｃｕｔしているが、小さなＦＭを複数面結合して１面の大きなＦＭを作成して５層目のｉＦＭとしている。
【０１０４】
図２５は、Ｃｏｍｂｉｎｅ処理における、Ｓｈｏｒｔｃｕｔ先でのｉＦＭの取り扱いの一例を示すイメージ図である。具体的には、Ｓｈｏｒｔｃｕｔパスを経由したＦＭのサイズが図２４の５層目のｉＦＭサイズの縦・横ともに１／２であり、通常パスを通ったＦＭサイズが図２４の５層目のｉＦＭサイズの縦・横ともに１／８である場合に、Ｓｈｏｒｔｃｕｔ先である図２４の５層目の処理における、ｉＦＭの取り扱いの例を示す。
【０１０５】
図２５に示すように、Ｓｈｏｒｔｃｕｔパスを経由したＦＭを２×２面結合することにより１面の大きなＦＭを作成する。また、通常パスを経由したＦＭ（有効画素）と無効画素を交互に並べて８×８面結合することにより１面の大きなＦＭを作成する。これにより、Ｓｈｏｒｔｃｕｔパスを経由したＦＭのサイズと、通常パスを経由したＦＭのサイズが同じになる。そして、Ｓｈｏｒｔｃｕｔパスを経由したＦＭ（大きなＦＭ）と、通常パスを経由したＦＭ（通常パスを経由したＦＭおよび無効画素から作成した大きなＦＭ）の総和が図２４の５層目のｉＦＭとなる。
【０１０６】
Ｃｏｍｂｉｎｅ処理の場合、Ｓｈｏｒｔｃｕｔパスを経由したデータについては、ＦＭ出力時にＤＲＡＭ上でデータを隣接するように書き出すだけで対応できるので、特段の回路構成を必要とせずに実現できる。通常パスを経由したデータは拡大する必要があり、上述の無効画素として「ｐａｄｄｉｎｇ ｄａｔａ」と呼ぶ一定値のピクセルで埋める方法がある。他に、周辺画素から補間する方法などがある。ｐａｄｄｉｎｇ ｄａｔａを用いる場合は、ＩＢＵＦ読み出し制御部でＳＲＡＭアクセスせずにｐａｄｄｉｎｇ ｄａｔａを生成して出力すればよいので、特段の回路構成を必要とせずに実現できる。
【０１０７】
（ＤＲＡＭへのデータ配置方法）
上述のような入出力関係を持つデータを効率的にＤＲＡＭ上に配置・転送・処理する方法について説明する。なお、本問題領域はＤｅｅｐＬｅａｒｎｉｎｇに限定されない高次元データ列の取り扱いの問題であるから、以降の説明では極力一般化した説明をする。
【０１０８】
ＤｅｅｐＬｅａｒｎｉｎｇの用語との対応関係は以下の通りである。
「入力データ（列）」＝「ｉＦＭ（入力特徴量マップ）」
「出力データ（列）」＝「ｏＦＭ（出力特徴量マップ）」
「入力次元」＝「ｉＦＭ数」 
「出力次元」＝「ｏＦＭ数」
【０１０９】
データフォーマットについて説明する。図と説明を簡単にするため、入力データは２次元の位置情報を持つ４次元データ列で、そのサイズは３０×３０ピクセルであるとする。また、１つのピクセルについて１回のバースト転送により転送可能な次元数は４であるとする。
【０１１０】
図２６は、ＤＲＡＭ上に配置されている高次元データ列のイメージ図である。記号「Ｄ_ａ_ｂ[Ｘ][Ｙ]」は、座標位置（Ｘ，Ｙ）におけるａ次〜ｂ次のデータをビット連結したもの、と定義する。すなわち、図２６では、座標位置（０，０）〜（２９，２９）の各々における１次〜４次のデータをビット連結したもの（図２６において１つの枠で囲まれたデータ）が、ＤＲＡＭ上の左上から順番に並べて配置されている。
【０１１１】
１回のバースト転送により転送可能な次元数は４であるから、ｂ−ａ＋１＝４の時にちょうどバースト転送1回分（１バースト分）となる。したがって、図２６において１つの枠で囲まれたデータがちょうど１バースト分となる。このようにＤＲＡＭ上にデータを配置することにより、座標単位で効率よくデータを配置・転送・取得することができる。
【０１１２】
図２７は、高次元データ列を分割して扱う場合の、ＤＲＡＭ上に配置されている高次元データ列のイメージ図である。具体的には、ＤＲＡＭ上に配置されている入力データ列を上下左右に（４つに）分割し、分割してできたデータ列の各々を１５×１５のサイズの個別データとして扱う。これにより、効率を下げることなくデータを配置・転送・取得することができる。
【０１１３】
より高次元データ列を扱う時は、同一座標のデータが１回のバースト転送単位に収まらないので、１座標が複数回のバースト転送に対応付くようにアクセス制御する。図２８Ａおよび図２８Ｂは、同一座標のデータが複数回のバースト転送にまたがる場合の、ＤＲＡＭ上に配置されている高次元データ列のイメージ図である。具体的には、同一座標の１次〜８次のデータが１回のバースト転送単位に収まらないので、１次〜４次のデータをビット連結したものと５次〜８次のデータをビット連結したものが別々にＤＲＡＭ上に配置されている。すなわち、座標位置（０，０）〜（２９，２９）の各々における１次〜４次のデータをビット連結したものと５次〜８次のデータをビット連結したものが、ＤＲＡＭ上に配置されている。
【０１１４】
図２８Ａは、同一座標のデータが複数の矩形領域に分けて配置されている例である。座標位置（０，０）〜（２９，２９）の各々における、１次〜４次のデータをビット連結したもの、５次〜８次のデータをビット連結したもの、・・・が、それぞれ矩形領域に分けて配置されている。
【０１１５】
図２８Ｂは、同一座標のデータが連続するアドレスに置かれて配置されている例である。座標位置（０，０）〜（２９，２９）の各々における１次〜４次のデータをビット連結したもの、５次〜８次のデータをビット連結したもの、・・・が、連続するアドレスに置かれて配置されている。
【０１１６】
図２８Ａのように同一座標データが複数の矩形領域に分けて配置されても、図２８Ｂのように同一座標データが連続するアドレスに配置されてもよく、それらに応じた読み方・書き方をすればよい。
以上説明したように、ＦＭサイズおよび次元数が異なる複数の層からの入力を結合するＳｈｏｒｔｃｕｔ処理を効率的に実施するためには、座標単位でバースト転送可能なデータ格納が不可欠である。高次元データ列をＤＲＡＭに転送する、またはＤＲＡＭから転送する時に、バースト転送を利用することで、転送効率が落ちるのを防ぐことができる。
【０１１７】
（回路構成）
次に、上述のフォーマットのデータを扱うための回路構成について説明する。ここでも説明を簡単化するため、入力データの次元数は１６であるとする。なお、上述のフォーマットのデータを扱うための演算処理装置の全体構成は、図２と同じである。
【０１１８】
ＤＲＡＭ（格納用外部メモリ）９は、高次元データ列を格納する大容量メモリである。ここで、高次元データ列は、１次元以上の位置情報とその位置における高次の要素を持つデータ列である。そして、上述のように、高次元データ列の同一座標が、1回以上のバースト転送により取得できるように配置されている。
ＤｅｅｐＬｅａｒｎｉｎｇの場合は、格納用外部メモリに格納される高次元データ列は、次元の座標情報と座標毎に高次の特徴量を有する特徴量マップであり、１つの座標に対応するデータ量がバースト転送量の１単位以上となる。
【０１１９】
データ入力部３は、ＤＲＡＭ９から高次元データ列をバースト転送により取得し、取得した高次元データ列をＩＢＵＦ（データ格納メモリ）管理部５に転送する。
ＤｅｅｐＬｅａｒｎｉｎｇの場合は、データ入力部３は、入力する特徴量マップの面数と座標に基づいてＤＲＡＭ９にアクセスするリードアドレスを算出し、バースト転送によりＤＲＡＭ９から高次元データ列（ｉＦＭ）を取得し、取得した高次元データ列をＩＢＵＦ管理部に転送する。
【０１２０】
図２９は、上述のフォーマットのデータを扱うためのＩＢＵＦ管理部５の構成を示すブロック図である。ＩＢＵＦ管理部５は、内部座標変換部５４、ＩＢＵＦ書き込み制御部５５、ＩＢＵＦ読み出し制御部５６、およびＩＢＵＦ１〜１６を備える。
【０１２１】
内部座標変換部５４は、データ入力部３がＤＲＡＭ９から取得した高次元データ列を所定の方法でカウントすることで、演算部７で取り扱うための座標およびＩＤ（補足情報）を生成する。
ＤｅｅｐＬｅａｒｎｉｎｇの場合は、内部座標変換部５４は、特徴量マップのＩＤ（ｉＦＭＩＤ）と座標を生成する。
１回のバースト転送で取得可能なデータの次元数は４であるから、１６次元のデータを４回のバースト転送で取得できる。そのため、ＩＤの値が０、１、２、３を巡回するように変化させる。
【０１２２】
ＩＢＵＦ書き込み制御部５５は、生成した座標に基づいて、ＩＢＵＦへの書き込み制御信号を生成する。その際、ＩＤの値に応じて、下記のようにＩＢＵＦへの書き込み制御信号を生成する。
・ＩＤ＝０：入力は１次〜４次のデータであり、ＩＢＵＦ１〜ＩＢＵＦ４に格納する。
・ＩＤ＝１：入力は５次〜８次のデータであり、ＩＢＵＦ５〜ＩＢＵＦ８に格納する。
・ＩＤ＝２：入力は９次〜１２次のデータであり、ＩＢＵＦ９〜ＩＢＵＦ１２に格納する。
・ＩＤ＝３：入力は１３次〜１６次のデータであり、ＩＢＵＦ１３〜ＩＢＵＦ１６に格納する。
ＤｅｅｐＬｅａｒｎｉｎｇの場合は、ＩＢＵＦライト制御部は、特徴量マップのＩＤ（ｉＦＭＩＤ）と座標に基づいて、書き込み対象となるデータ格納メモリへの書き込み制御信号とライトアドレスを生成する。このように、ＤＲＡＭから取得したデータを、演算部での取り扱い基準（入力ＦＭの何番目のどの座標に対応するか）に変換し、ＩＢＵＦに適切に書き込む事で、演算部でのＣＮＮ処理を可能としている。
【０１２３】
図３０は、ＩＢＵＦ内のイメージ図である。書き込みアドレスは座標から求めるので、ＩＢＵＦそれぞれの同一アドレスには、図３０に示すように、同じ座標の異なる次元のデータが格納される。
【０１２４】
ＩＢＵＦ読み出し制御部５６は、演算部７のリクエストを受けて、ＩＢＵＦから所定の順序で必要なデータをアクセスする。このデータを用いて、演算部７は所定のデータ処理を行う。そして、データ出力部８は、演算部７から出力される同一座標のデータを、高次元データ列としてバースト転送単位でまとめて出力する。
ＤｅｅｐＬｅａｒｎｉｎｇの場合は、データ出力部８は、出力する特徴量マップの面数と座標に基づいてＤＲＡＭ９にアクセスするライトアドレスを算出し、バースト転送によりＤＲＡＭ９にデータを出力する。
【０１２５】
次に、内部座標変換部５４の動作例について説明する。第１の例として通常処理における内部座標変換部５４の処理について説明する。図３１は、通常処理における内部座標変換部の処理を示す図であり、図２６に示すｉＦＭから、座標とｉＦＭＩＤが生成される様子を示す。ｉＦＭＩＤは常に０であり、座標はｉＦＭイメージのままとなる。ｉＦＭＩＤが０なので、全てのデータがＩＢＵＦ１〜４に格納される。
【０１２６】
なお、この場合、ＩＢＵＦ５〜１６が未使用なので、実際には、ＩＢＵＦ１〜４をＩＢＵＦ１相当、ＩＢＵＦ５〜８をＩＢＵＦ２相当、ＩＢＵＦ９〜１２をＩＢＵＦ３相当、ＩＢＵＦ１３〜１６をＩＢＵＦ４相当、のように４つのＩＢＵＦを１つのＩＢＵＦとして無駄なく使うようにしてもよい。
【０１２７】
第２の例として Ｓｈｏｒｔｃｕｔ処理における内部座標変換部５４の処理について説明する。図３２は、Ｓｈｏｒｔｃｕｔ処理における内部座標変換部の処理を示す図であり、図２７に示すｉＦＭから、座標とｉＦＭＩＤが生成され、ＩＢＵＦに書き出される様子を示す。
【０１２８】
ｉＦＭＩＤはＦＭ内で上下左右に異なる値に設定され、各ｉＦＭＩＤ領域内で座標が左上を原点として割り当てられる。結果、図３２の一番下に示すようなデータとなり、以下のようにしてＩＢＵＦに書き出される。
・ｉＦＭＩＤ＝０の領域のデータ：ＩＢＵＦ１〜４に格納
・ｉＦＭＩＤ＝１の領域のデータ：ＩＢＵＦ５〜８に格納
・ｉＦＭＩＤ＝２の領域のデータ：ＩＢＵＦ９〜１２に格納
・ｉＦＭＩＤ＝３の領域のデータ：ＩＢＵＦ１３〜１６に格納
【０１２９】
なお、座標への変換およびＩＤの作成を行う方法は多々あるが、最も簡単な例を挙げると、入力がラスタスキャン的にストリーム入力される場合は、有効データ数をカウントすることにより変換・作成を行うことができる。
【０１３０】
また、以上の説明ではＩＢＵＦを次元毎に別のＳＲＡＭのイメージとして示している。しかし、１つ（または複数）のＳＲＡＭを仮想的に分割して、複数の次元データを１つのＳＲＡＭに格納するようにしてもよい。
【０１３１】
以上、本発明の一実施形態について説明したが、本発明の技術範囲は上記実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲において構成要素の組み合わせを変えたり、各構成要素に種々の変更を加えたり、削除したりすることができる。
【０１３２】
各構成要素は、それぞれの構成要素に係る機能や処理を説明するためのものである。複数の構成要素に係る機能や処理を、１つの構成（回路）が同時に実現してもよい。
【０１３３】
各構成要素は、それぞれもしくは全体として、１個又は複数のプロセッサ、論理回路、メモリ、入出力インタフェース及びコンピュータ読み取り可能な記録媒体などからなるコンピュータで実現するようにしてもよい。その場合、各構成要素もしくは全体の機能を実現するためのプログラムを記録媒体に記録しておき、記録されたプログラムをコンピュータシステムに読み込ませ、実行することによって、上述した種々の機能や処理を実現してもよい。
【０１３４】
この場合、例えば、プロセッサは、ＣＰＵ、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）、およびＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の少なくとも１つである。例えば、論理回路は、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）およびＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）の少なくとも１つである。
【０１３５】
また、ここでいう「コンピュータシステム」とは、ＯＳや周辺機器などのハードウェアを含むものであってもよい。また、「コンピュータシステム」は、ＷＷＷシステムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、フラッシュメモリなどの書き込み可能な不揮発性メモリ、ＣＤ−ＲＯＭなどの可搬媒体、コンピュータシステムに内蔵されるハードディスクなどの記憶装置をいう。
【０１３６】
さらに「コンピュータ読み取り可能な記録媒体」とは、インターネットなどのネットワークや電話回線などの通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ（例えばＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））のように、一定時間プログラムを保持しているものも含むものとする。
【０１３７】
また、上記プログラムは、このプログラムを記憶装置などに格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネットなどのネットワーク（通信網）や電話回線などの通信回線（通信線）のように情報を伝送する機能を有する媒体をいう。また、上記プログラムは、前述した機能の一部を実現するためのものであってもよい。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現するもの、いわゆる差分ファイル（差分プログラム）であってもよい。
【産業上の利用可能性】
【０１３８】
本発明は、畳み込みニューラルネットワークを用いたディープラーニングを行う演算処理装置に広く適用でき、Ｃｏｎｖｏｌｕｔｉｏｎ処理とＦｕｌｌＣｏｎｎｅｃｔ処理を共通の回路で行うことができる。さらに、Ｓｈｏｒｔｃｕｔ処理にも対応可能でかつＤＲＡＭ転送効率を高く維持することができる。
【符号の説明】
【０１３９】
１  演算処理装置
２  コントローラ
３  データ入力部
４  係数入力部
５  ＩＢＵＦ（データ格納メモリ）管理部
６  ＷＢＵＦ（係数格納メモリ）管理部
７  演算部
８  データ出力部
９  ＤＲＡＭ（格納用外部メモリ）
５１  ＳＲＡＭ読み出し制御部
５２  ｄｅｌａｙ回路
５３  係数ゼロ検出部
５４  内部座標変換部
５５  ＩＢＵＦ（データ格納メモリ）書き込み制御部
５６  ＩＢＵＦ（データ格納メモリ）読み出し制御部
６１  ＷＢＵＦ（係数格納メモリ）読み出し部
６２  データゼロ検出部
６３  ｄｅｌａｙ回路
７１  演算制御部
７２  フィルタ処理部
７３  乗算器
７４  第１加算器
７５  第２加算器
７６  非線形変換部
７７  プーリング処理部
７８  演算実行判定部
７９  ゼロ検出部
【図１】
2019216376.tif 000004
【図２】
2019216376.tif 000005
【図３】
2019216376.tif 000006
【図４】
2019216376.tif 000007
【図５】
2019216376.tif 000008
【図６】
2019216376.tif 000009
【図７】
2019216376.tif 000010
【図８】
2019216376.tif 000011
【図９】
2019216376.tif 000012
【図１０】
2019216376.tif 000013
【図１１】
2019216376.tif 000014
【図１２】
2019216376.tif 000015
【図１３】
2019216376.tif 000016
【図１４】
2019216376.tif 000017
【図１５】
2019216376.tif 000018
【図１６】
2019216376.tif 000019
【図１７】
2019216376.tif 000020
【図１８】
2019216376.tif 000021
【図１９】
2019216376.tif 000022
【図２０】
2019216376.tif 000023
【図２１】
2019216376.tif 000024
【図２２】
2019216376.tif 000025
【図２３】
2019216376.tif 000026
【図２４】
2019216376.tif 000027
【図２５】
2019216376.tif 000028
【図２６】
2019216376.tif 000029
【図２７】
2019216376.tif 000030
【図２８Ａ】
2019216376.tif 000031
【図２８Ｂ】
2019216376.tif 000032
【図２９】
2019216376.tif 000033
【図３０】
2019216376.tif 000034
【図３１】
2019216376.tif 000035
【図３２】
2019216376.tif 000036
【図３３】
2019216376.tif 000037
【図３４】
2019216376.tif 000038
【図３５】
2019216376.tif 000039
【国際調査報告】
2019216376.tif 000040
2019216376.tif 000041
2019216376.tif 000042