(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-01-19
(45)【発行日】2022-01-27
(54)【発明の名称】演算処理装置
(51)【国際特許分類】
G06N 3/08 20060101AFI20220120BHJP
【FI】
G06N3/08
(21)【出願番号】P 2020549920
(86)(22)【出願日】2018-10-12
(86)【国際出願番号】 JP2018038076
(87)【国際公開番号】W WO2020075287
(87)【国際公開日】2020-04-16
【審査請求日】2020-11-27
(73)【特許権者】
【識別番号】000000376
【氏名又は名称】オリンパス株式会社
(74)【代理人】
【識別番号】100149548
【氏名又は名称】松沼 泰史
(74)【代理人】
【識別番号】100139686
【氏名又は名称】鈴木 史朗
(74)【代理人】
【識別番号】100147267
【氏名又は名称】大槻 真紀子
(74)【代理人】
【識別番号】100207789
【氏名又は名称】石田 良平
(72)【発明者】
【氏名】古川 英明
【審査官】漆原 孝治
(56)【参考文献】
【文献】米国特許出願公開第2017/0323196(US,A1)
【文献】特開2015-197702(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/08
(57)【特許請求の範囲】
【請求項1】
Convolution処理とFullConnect処理を行うディープラーニング用の演算処理装置であって、
入力特徴量マップデータを格納するデータ格納メモリと、前記データ格納メモリを管理および制御するデータ格納メモリ制御回路とを有するデータ格納メモリ管理部と;
フィルタ係数を格納するフィルタ係数格納メモリと、前記フィルタ係数格納メモリを管理および制御するフィルタ係数格納メモリ制御回路とを有するフィルタ係数格納メモリ管理部と;
前記入力特徴量マップデータおよび出力特徴量マップデータを格納する外部メモリと;
前記外部メモリから、前記入力特徴量マップデータを取得するデータ入力部と;
前記外部メモリから、前記フィルタ係数を取得するフィルタ係数入力部と;
入力N並列、出力M並列の構成(N、M≧1の正数)で、前記データ格納メモリから前記入力特徴量マップデータを取得し、前記フィルタ係数格納メモリから前記フィルタ係数を取得して、フィルタ処理、累積加算処理、非線形演算処理およびプーリング処理を行う演算部と;
前記演算部から出力されるM並列のデータを連結して、出力特徴量マップデータとして前記外部メモリに出力するデータ出力部と;
入力特徴量マップの各ピクセル単位で累積加算処理の途中結果を一時的に記録しておく累積加算結果格納メモリと、
有効データを受けてアドレスを生成し前記累積加算結果格納メモリに書き込む累積加算結果格納メモリ格納部と、
前記累積加算結果格納メモリから指定したデータを読み出す累積加算結果格納メモリ読み出し部と、
からなる累積加算結果格納メモリ管理部と;
前記演算処理装置内を制御するコントローラと;
を有し、
前記演算部は、
N並列でフィルタ処理を実行するフィルタ演算部と、
前記フィルタ演算部の演算結果を全て累積加算する第1加算器と、
前記第1加算器の累積加算処理の結果を後段で累積加算する第2加算器と、
前記第2加算器の累積加算処理の結果を保持するフリップフロップと、
前記演算部内を制御する演算制御部と、
を有し、
前記演算制御部は、出力特徴量マップの特定のピクセルを算出するためのフィルタ処理および累積加算処理の途中で、フィルタ処理および累積加算処理に必要な全ての入力特徴量マップデータを前記データ格納メモリに格納することができない場合、または、フィルタ処理および累積加算処理に必要な全てのフィルタ係数を前記フィルタ係数格納メモリに格納することができない場合に、一旦途中結果を前記累積加算結果格納メモリに格納して別のピクセルの処理を行い、すべてのピクセルについて累積加算処理の途中結果を前記累積加算結果格納メモリに格納し終えたら最初のピクセルに戻り、前記累積加算結果格納メモリに格納した値を読み出して累積加算処理の初期値とし、累積加算処理の続きを実行するよう制御することを特徴とする演算処理装置。
【請求項2】
前記演算制御部は、前記フィルタ係数格納メモリに格納されているすべてのフィルタ係数で実行可能なフィルタ処理および累積加算処理を終えた時に、一旦途中結果を前記累積加算結果格納メモリに格納し、前記フィルタ係数格納メモリに格納されているフィルタ係数が更新されたら累積加算処理の続きを実行するように制御する
請求項1に記載の演算処理装置。
【請求項3】
前記演算制御部は、入力可能なすべての入力特徴量マップデータで実行可能なすべてのフィルタ処理および累積加算処理を終えた時に、一旦途中結果を前記累積加算結果格納メモリに格納し、前記データ格納メモリに格納されている入力特徴量マップデータが更新されたら累積加算処理の続きを実行するように制御する
請求項1または2に記載の演算処理装置。
【請求項4】
前記累積加算結果格納メモリ管理部は、
前記累積加算結果格納メモリから累積加算途中結果を読み出して前記外部メモリに書き出す累積加算結果格納メモリ読み出し部と、
前記外部メモリから累積加算途中結果を読み込んで前記累積加算結果格納メモリに格納する累積加算結果格納メモリ格納部と、
を有し、
前記演算制御部は、出力特徴量マップの特定のピクセルを算出するためのフィルタ処理および累積加算処理の途中で、途中結果を前記累積加算結果格納メモリから前記外部メモリに書き出し、前記データ格納メモリに格納されている入力特徴量マップデータまたは前記フィルタ係数格納メモリに格納されているフィルタ係数を更新して累積加算処理を続きから実施する場合は、前記外部メモリに書き出した累積加算途中結果を前記外部メモリから前記累積加算結果格納メモリに読み込んで累積加算処理の続きを実行するように制御する
請求項1から3のいずれか1項に記載の演算処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、演算処理装置、より詳しくは、畳み込みニューラルネットワークを用いたディープラーニングを行う演算処理装置の回路構成に関する。
【背景技術】
【0002】
従来、複数の処理層が階層的に接続されたニューラルネットワークを用いて演算を実行する演算処理装置がある。特に画像認識を行う演算処理装置では、畳み込みニューラルネットワーク(Convolutional Neural Network、以下CNNという)を用いたディープラーニングが広く行われている。
【0003】
図18は、CNNを用いたディープラーニングによる画像認識の処理の流れを示す図である。CNNを用いたディープラーニングによる画像認識では、入力された画像データ(ピクセルデータ)に対して、CNNの複数の処理層における処理が順次施されることにより、画像に含まれる対象物が認識された最終的な演算結果データが得られる。
【0004】
CNNの処理層は、畳み込み演算処理、非線形処理、縮小処理(プーリング処理)等を含むConvolution処理を行うConvolution層(畳み込み層)と、全ての入力(ピクセルデータ)にフィルタ係数を乗じて累積加算するFullConnect処理を行うFullConnect層(全結合層)とに大きく分類される。ただし、FullConnect層がない畳み込みニューラルネットワークも存在する。
【0005】
CNNを用いたディープラーニングによる画像認識は以下のようにして行われる。まず、画像データに対して、ある領域を抽出してフィルタ係数(フィルタ係数)の異なる複数のフィルタを乗じて特徴量マップ(Feature Map、FM)を作成する畳み込み演算処理(Convolution処理)と、特徴量マップの一部領域を縮小する縮小処理(プーリング処理)の組合せを1つの処理層として、これを複数回(複数の処理層において)行う。これらの処理が、畳み込み層(Convolution層)の処理である。
【0006】
プーリング処理は、近傍4pixの最大値を抽出して1/2×1/2に縮小するmax poolingの他、近傍4pixの平均値を求める(抽出ではない)average poolingなどのバリエーションがある。
【0007】
図19は、Convolution処理の流れを示す図である。まず、入力された画像データに対して、夫々にフィルタ係数の異なるフィルタ処理を行い、これらを全て累積加算することにより、1ピクセルに対応するデータができる。作成されたデータに対し、非線形変換および縮小処理(プーリング処理)を行い、以上の処理を画像データの全ピクセルに対して行うことで、出力特徴量マップ(oFM)が1面分生成される。これを複数回繰り返すことでoFMを複数面生成する。実際の回路では上記全てがパイプライン処理される。
【0008】
さらに、上記出力特徴量マップ(oFM)を入力特徴量マップ(iFM)として、さらにフィルタ係数の異なるフィルタ処理を行うことにより、上述のConvolution処理を繰り返す。このようにして複数回のConvolution処理を行い、出力特徴量マップ(oFM)を得る。
【0009】
Convolution処理が進み、FMをある程度まで小さくしたところで、画像データを1次元のデータ列と読み変える。1次元のデータ列の各データに対して各々異なる係数を乗じて累積加算を行うFullConnect処理を複数回(複数の処理層において)行う。これらの処理が、全結合層(FullConnect層)の処理である。
【0010】
そして、FullConnect処理の後、最終的な演算結果である被写体推定結果として、画像に含まれる対象物が検出された確率(被写体検出の確率)が出力される。
図18の例では、最終的な演算結果データとして、犬が検出された確率は0.01(1%)、猫が検出された確率は0.04(4%)、ボートが検出された確率は0.94(94%)、鳥が検出された確率は0.02(2%)である。
【0011】
このようにして、CNNを用いたディープラーニングによる画像認識は、高い認識率を実現できる。しかし、検出する被写体の種類を増やしたり、被写体検出精度を上げるためには、ネットワークを大きくする必要がある。そうするとデータ格納バッファやフィルタ係数格納バッファが必然的に大容量になるが、ASIC(Application Specific Integrated Circuit)にはあまり大容量のメモリを搭載できない。
【0012】
また、画像認識処理におけるディープラーニングでは、(K-1)層目とK層目におけるFM(Feature Map)サイズとFM数(FMの面数)の関係は次式のような関係になる場合が多く、回路としてメモリサイズを決定する際には最適化が困難である。
【0013】
FMサイズ[K]=1/4×FMサイズ[K-1]
FM数[K]=2×FM数[K-1]
【0014】
例えば、CNNのバリエーションの1つであるYolo_v2に対応可能な回路のメモリのサイズを考える場合、FMサイズとFM数の最大値だけで決定しようとすると1GB程度必要となる。実際には、FM数とFMサイズは反比例的関係があるため、計算上メモリは3MB程度あれば十分ではあるが、電池駆動のモバイル機器に搭載するASICとしては、できるだけ消費電力やチップコストを小さくしたいニーズがあるため、メモリを極力小さくする工夫が必要となってくる。
【0015】
このような問題があることから、CNNは一般的には高性能PCやGPU(Graphics Processing Unit)を用いたソフトウエア処理で実装される。しかし、高速処理を実現するためには処理の重い部分をハードウェアで構成する必要がある。このようなハードウェア実装の例が、特許文献1に記載されている。
【0016】
特許文献1は、複数の演算処理ユニットの中にそれぞれ、演算ブロックと複数のメモリを搭載することにより演算処理の効率化を図るようにした演算処理装置を開示している。演算ブロックとそれと対になるバッファとは、中継部を介して畳み込み演算処理を並列に実行すると共に、演算部間で累積加算データを授受する。その結果、入力のネットワークが大きくても一度に活性化処理への入力を作成できる。
【先行技術文献】
【特許文献】
【0017】
【発明の概要】
【発明が解決しようとする課題】
【0018】
特許文献1の構成は、上下関係のある(方向性を有する)非対称な構成であり、累積加算途中結果が演算ブロックすべてをカスケード接続して通過する。そのため、大きなネットワークに対応しようとすると、累積加算途中結果が何度も中継部と冗長データ保持部を経由しなければならず、長いカスケード接続パスが形成され、処理時間が掛かってしまう。また、巨大なネットワークを細かく分割した場合は、同じデータまたはフィルタ係数をDRAM(外部メモリ)から複数回、読み込みする(再読み込みする)ことにより、DRAMへのアクセス量が増える可能性がある。しかし、特許文献1にはこのような可能性を回避するための具体的な制御方法の記載がなく、考慮されていない。
【0019】
上述の事情を踏まえ、本発明は、フィルタ係数が多すぎてWBUFに入りきらない時や、iFM数が多すぎてIBUFに入りきらない時に、一度に計算できなくなるという問題を回避することができる演算処理装置を提供することを目的とする。
【課題を解決するための手段】
【0020】
本発明の第一の態様は、Convolution処理とFullConnect処理を行うディープラーニング用の演算処理装置であって、入力特徴量マップデータを格納するデータ格納メモリと、前記データ格納メモリを管理および制御するデータ格納メモリ制御回路とを有するデータ格納メモリ管理部と;フィルタ係数を格納するフィルタ係数格納メモリと、前記フィルタ係数格納メモリを管理および制御するフィルタ係数格納メモリ制御回路とを有するフィルタ係数格納メモリ管理部と;前記入力特徴量マップデータおよび出力特徴量マップデータを格納する外部メモリと;前記外部メモリから、前記入力特徴量マップデータを取得するデータ入力部と;前記外部メモリから、前記フィルタ係数を取得するフィルタ係数入力部と;入力N並列、出力M並列の構成(N、M≧1の正数)で、前記データ格納メモリから前記入力特徴量マップデータを取得し、前記フィルタ係数格納メモリから前記フィルタ係数を取得して、フィルタ処理、累積加算処理、非線形演算処理およびプーリング処理を行う演算部と;前記演算部から出力されるM並列のデータを連結して、出力特徴量マップデータとして前記外部メモリに出力するデータ出力部と;入力特徴量マップの各ピクセル単位で累積加算処理の途中結果を一時的に記録しておく累積加算結果格納メモリと、有効データを受けてアドレスを生成し前記累積加算結果格納メモリに書き込む累積加算結果格納メモリ格納部と、前記累積加算結果格納メモリから指定したデータを読み出す累積加算結果格納メモリ読み出し部と、からなる累積加算結果格納メモリ管理部と;前記演算処理装置内を制御するコントローラと;を有し、前記演算部は、N並列でフィルタ処理を実行するフィルタ演算部と、前記フィルタ演算部の演算結果を全て累積加算する第1加算器と、前記第1加算器の累積加算処理の結果を後段で累積加算する第2加算器と、前記第2加算器の累積加算処理の結果を保持するフリップフロップと、前記演算部内を制御する演算制御部と、を有し、前記演算制御部は、出力特徴量マップの特定のピクセルを算出するためのフィルタ処理および累積加算処理の途中で、フィルタ処理および累積加算処理に必要な全ての入力特徴量マップデータを前記データ格納メモリに格納することができない場合、または、フィルタ処理および累積加算処理に必要な全てのフィルタ係数を前記フィルタ係数格納メモリに格納することができない場合に、一旦途中結果を前記累積加算結果格納メモリに格納して別のピクセルの処理を行い、すべてのピクセルについて累積加算処理の途中結果を前記累積加算結果格納メモリに格納し終えたら最初のピクセルに戻り、前記累積加算結果格納メモリに格納した値を読み出して累積加算処理の初期値とし、累積加算処理の続きを実行するよう制御することを特徴とする。
【0021】
前記演算制御部は、前記フィルタ係数格納メモリに格納されているすべてのフィルタ係数で実行可能なフィルタ処理および累積加算処理を終えた時に、一旦途中結果を前記累積加算結果格納メモリに格納し、前記フィルタ係数格納メモリに格納されているフィルタ係数が更新されたら累積加算処理の続きを実行するように制御してもよい。
【0022】
前記演算制御部は、入力可能なすべての入力特徴量マップデータで実行可能なすべてのフィルタ処理および累積加算処理を終えた時に、一旦途中結果を前記累積加算結果格納メモリに格納し、前記データ格納メモリに格納されている入力特徴量マップデータが更新されたら累積加算処理の続きを実行するように制御してもよい。
【0023】
前記累積加算結果格納メモリ管理部は、前記累積加算結果格納メモリから累積加算途中結果を読み出して前記外部メモリに書き出す累積加算結果格納メモリ読み出し部と、前記外部メモリから累積加算途中結果を読み込んで前記累積加算結果格納メモリに格納する累積加算結果格納メモリ格納部と、を有し、前記演算制御部は、出力特徴量マップの特定のピクセルを算出するためのフィルタ処理および累積加算処理の途中で、途中結果を前記累積加算結果格納メモリから前記外部メモリに書き出し、前記データ格納メモリに格納されている入力特徴量マップデータまたは前記フィルタ係数格納メモリに格納されているフィルタ係数を更新して累積加算処理を続きから実施する場合は、前記外部メモリに書き出した累積加算途中結果を前記外部メモリから前記累積加算結果格納メモリに読み込んで累積加算処理の続きを実行するように制御してもよい。
【発明の効果】
【0024】
本発明の各態様に係る演算処理装置によれば、iFMサイズのピクセル単位で、累積加算の途中結果を一時保存することができるので、IBUFに全てのiFMデータが入りきらなくなったり、WBUFにフィルタ係数が入りきらなくなったりすることで一度に計算できなくなるという問題を回避することができる。
【図面の簡単な説明】
【0025】
【
図1】Convolution処理によって、入力特徴量マップ(iFM)から出力特徴量マップ(oFM)を得るイメージ図である。
【
図2】Convolution処理において、フィルタ係数を格納しているWBUF(フィルタ係数格納メモリ)が不足している場合を示すイメージ図である。
【
図3】本発明の第1実施形態に係る演算処理装置における、Convolution処理においてフィルタ係数を途中で1回更新する場合の動作を示すイメージ図である。
【
図4】本発明の第1実施形態に係る演算処理装置の全体構成を示すブロック図である。
【
図5】本発明の第1実施形態に係る演算処理装置における、SBUF管理部の構成を示すブロック図である。
【
図6】本発明の第1実施形態に係る演算処理装置の演算部の構成を示す図である。
【
図7A】本発明の第1実施形態に係る演算処理装置において、演算制御部が行う制御の流れを示すフローチャートである。
【
図7B】
図7AのステップS2におけるフィルタ係数更新制御の流れを示すフローチャートである。
【
図8】本発明の第2実施形態において、iFMデータを分割して演算部に入力するイメージ図である。
【
図9】本発明の第2実施形態に係る演算処理装置における、Convolution処理においてiFMデータを途中でn
1回更新する場合の動作を示すイメージ図である。
【
図10A】本発明の第2実施形態に係る演算処理装置において、演算制御部が行う制御を示すフローチャートである。
【
図10B】
図10AのステップS22におけるiFMデータ更新制御の流れを示すフローチャートである。
【
図11】本発明の第3実施形態に係る演算処理装置において、iFMデータおよびフィルタ係数を途中で更新するイメージ図である。
【
図12A】本発明の第3実施形態に係る演算処理装置において、演算制御部が行う制御を示すフローチャートである。
【
図12B】
図12AのステップS42におけるiFMデータ更新制御およびステップS44におけるフィルタ係数更新制御の流れを示すフローチャートである。
【
図13】1つの出力チャネルが生成しなければならないoFM数m=2のケースにおいて、2つのSBUFをそれぞれのoFM用として用意した場合の、Convolution処理イメージを示す図である。
【
図14】本発明の第4実施形態に係る演算処理装置におけるConvolution処理のイメージを示す図である。
【
図15】本発明の第4実施形態に係る演算処理装置の全体構成を示すブロック図である。
【
図16】本発明の第4実施形態に係る演算処理装置におけるSBUF管理部の構成を示すブロック図である。
【
図17A】本発明の第4実施形態に係る演算処理装置において、演算制御部が行う制御を示すフローチャートである。
【
図17B】
図17AのステップS72におけるiFMデータ更新制御の流れを示すフローチャートである。
【
図17C】
図17AのステップS76におけるフィルタ係数更新制御の流れを示すフローチャートである。
【
図17D】
図17AのステップS74におけるSBUF更新制御の流れを示すフローチャートである。
【
図17E】
図17AのステップS82におけるSBUF退避制御の流れを示すフローチャートである。
【
図18】CNNを用いたディープラーニングによる画像認識の処理の流れを示す図である。
【
図19】従来技術に係るConvolution処理の流れを示す図である。
【発明を実施するための形態】
【0026】
本発明の実施形態について、図面を用いて説明する。まず、本発明の実施形態の構成を採用する背景について説明する。
【0027】
図1は、Convolution処理によって、入力特徴量マップ(iFM)から出力特徴量マップ(oFM)を得るイメージ図である。iFMに、フィルタ処理、累積加算、非線形変換、プーリング(縮小)などの処理を施すことにより、oFMを得る。oFMの1ピクセル(1画素)を計算するのに必要な情報として、出力(oFMの1ピクセル)に対応するiFMの座標の近傍にある全てのピクセルの情報(iFMデータおよびフィルタ係数)が必要である。
【0028】
図2は、Convolution処理において、フィルタ係数を格納しているWBUF(フィルタ係数格納メモリ)が不足している場合を示すイメージ図である。
図2の例では、6枚のiFMの座標(X,Y)の近傍にある9ピクセルの情報(iFMデータおよびフィルタ係数)から、oFMの座標(X,Y)の1ピクセルのデータ(oFMデータ)を算出する。この際、IBUF(データ格納メモリ)から読み出した各々のiFMデータに対して、WBUF(フィルタ係数格納メモリ)から読み出したフィルタ係数を掛けて累積加算する。
【0029】
図2のように、WBUFの大きさが小さい場合、全てのiFMデータに対応するフィルタ係数をWBUFに格納することができない。
図2の例では、WBUFは、3枚のiFMデータに対応するフィルタ係数しか格納することができない。この場合、前半の3枚のiFMデータに各々対応するフィルタ係数を掛けて累積加算し、結果(累積加算結果)を一時的に記憶する(ステップ1)。次にWBUFに格納されているフィルタ係数を更新し(ステップ2)、後半の3枚のiFMに各々対応するフィルタ係数を掛けてさらに累積加算する(ステップ3)。そして、(ステップ1)の累積加算結果と(ステップ3)の累積加算結果を足し合わせる。その後、非線形処理およびブーリング処理を施すことにより、oFMの座標(X,Y)の1ピクセルのデータ(oFMデータ)を得る。
【0030】
この場合、oFMの次の座標のピクセルのデータ(oFMデータ)を算出する際、WBUFに格納されているフィルタ係数が更新されているため、WBUFは再度、DRAMからフィルタ係数を読み直す必要が生じる。このようなフィルタ係数の読み直しを、ピクセル数分行うため、DRAMの帯域を消費し、電力的にも無駄が生じる。
【0031】
(第1実施形態)
次に、本発明の第1実施形態について、図面を用いて説明する。
図3は、本実施形態における、Convolution処理においてフィルタ係数を途中で1回更新する場合の動作を示すイメージ図である。Convolution処理は、入力される全てのiFMデータに異なるフィルタ係数をかけ、それらを全て積算する事でoFMの1ピクセルのデータ(oFMデータ)が算出される。
【0032】
iFM数(枚数)=N、oFM数(枚数)=M、フィルタカーネルサイズを3×3(=9)とすると、フィルタ係数の総要素数は9×N×Mとなる。N、Mはネットワークによって変わるが、数千万を超える巨大な大きさとなる場合がある。このような場合、全てのフィルタ係数を保存できる巨大なWBUFを置くことは不可能なので、途中でWBUFに格納されるデータを更新する必要がある。しかし、WBUFのサイズがoFMの1ピクセルのデータ(oFMデータ)を形成する事すらできない小さい容量の場合(具体的には9Nより小さい場合)、oFMのピクセル単位でフィルタ係数を読み直さなければならなくなり、非常に効率が悪い。
【0033】
そこで本実施形態では、iFMのサイズ(iFM1枚分)と同じ(または、より大きい)容量を持つSRAM(以降SBUF(累積加算結果格納メモリ)と呼称)を用意する。そして、WBUFに格納されているフィルタ係数で実行可能な全ての累積加算を行い、その途中結果(累積加算結果)を、SBUF(累積加算結果格納メモリ)にピクセル単位で書き込む(格納する)。
図3の例では、前半の3枚のiFMデータに各々対応するフィルタ係数を掛けて累積加算し、その途中結果を、SBUF(累積加算結果格納メモリ)に格納する。そして、WBUFに格納されるフィルタ係数を更新して続きの累積加算(後半の3枚の累積加算)を開始する時は、SBUFから取り出した値を累積加算初期値として、後半の3枚のiFMデータに各々対応するフィルタ係数を掛けて累積加算する。そして、この累積加算結果に、非線形処理およびブーリング処理を施すことにより、oFMの1ピクセルのデータ(oFMデータ)を得る。
【0034】
図4は、本実施形態に係る演算処理装置の全体構成を示すブロック図である。演算処理装置1は、コントローラ2と、データ入力部3と、フィルタ係数入力部4と、IBUF(データ格納メモリ)管理部5と、WBUF(フィルタ係数格納メモリ)管理部6と、演算部(演算ブロック)7と、データ出力部8と、SBUF(累積加算結果格納メモリ)管理部11を備える。データ入力部3と、フィルタ係数入力部4と、データ出力部8は、バス10を介して、DRAM(外部メモリ)9と接続されている。演算処理装置1は、入力特徴量マップ(iFM)から出力特徴量マップ(oFM)を生成する。
【0035】
IBUF管理部5は、入力特徴量マップ(iFM)データ格納用のメモリ(データ格納メモリ、IBUF)と、データ格納メモリの管理・制御回路(データ格納メモリ制御回路)を有する。IBUFは、それぞれが複数のSRAMから構成される。
【0036】
IBUF管理部5は、入力データ(iFMデータ)中の有効データ数をカウントして座標に変換し、さらにそれをIBUFアドレス(IBUFにおけるアドレス)に変換し、データをデータ格納メモリに格納するとともに、所定の方法でiFMデータをIBUFから取り出す。
【0037】
WBUF管理部6は、フィルタ係数格納用のメモリ(フィルタ係数格納メモリ、WBUF)と、フィルタ係数格納メモリの管理・制御回路(フィルタ係数格納メモリ制御回路)を有する。WBUF管理部6は、IBUF管理部5のステータスを参照して、IBUF管理部5から取り出すデータに対応するフィルタ係数をWBUFから取り出す。
【0038】
DRAM9は、iFMデータ、oFMデータおよびフィルタ係数を格納する。データ入力部3は、DRAM9から所定の方法で、入力特徴量マップ(iFM)を取得し、IBUF(データ格納メモリ)管理部5に渡す。データ出力部8は、DRAM9に所定の方法で、出力特徴量マップ(oFM)データを書き出す。具体的には、データ出力部8は、演算部7から出力されるM並列のデータを連結してDRAM9に出力する。フィルタ係数入力部4は、DRAM9から所定の方法で、フィルタ係数を取得し、WBUF(フィルタ係数格納メモリ)管理部6に渡す。
【0039】
図5は、SBUF管理部11の構成を示すブロック図である。SBUF管理部11は、SBUF(累積加算結果格納メモリ)格納部111と、SBUF(累積加算結果格納メモリ)112と、SBUF(累積加算結果格納メモリ)読み出し部113を備える。SBUF112は、iFMの各ピクセル単位(画素単位)で累積加算の途中結果を一時的に格納するためのバッファである。SBUF読み出し部113は、SBUF112から所望のデータ(累積加算結果)を読み出す。SBUF格納部111は、有効データ(累積加算結果)を受け取るとアドレスを生成してSBUF112に書き込む。
【0040】
演算部7は、IBUF(データ格納メモリ)管理部5からデータ、WBUF(フィルタ係数格納メモリ)管理部6からフィルタ係数を取得する。また、演算部7は、SBUF読み出し部113がSBUF112から読み出したデータ(累積加算結果)を取得して、フィルタ処理・累積加算・非線形演算・プーリング処理等のデータ処理を行う。演算部7がデータ処理を施したデータ(累積加算結果)は、SBUF格納部111によって、SBUF112に格納される。コントローラ2は、回路全体の制御を行う。
【0041】
CNNでは、複数の処理層において、必要な層数分の処理が繰り返し実行される。そして、演算処理装置1は最終出力データとして被写体推定結果を出力し、この最終出力データを、プロセッサ(回路でもよい)を用いて処理することにより被写体推定結果を得る。
【0042】
図6は、本実施形態に係る演算処理装置の演算部7の構成を示す図である。演算部7の入力チャネル数はN(Nは1以上の正数)、すなわち入力データ(iFMデータ)はN次元であり、N次元の入力データが並列して処理される(入力N並列)。
【0043】
演算部7の出力チャネル数はM(Mは1以上の正数)、すなわち出力データはM次元であり、M次元の入力データが並列して出力される(出力M並列)。
図6に示すように、1つの層において、各チャネル(ich_0~ich_N-1)ごとに、iFMデータ(d_0~d_N-1)とフィルタ係数(k_0~k_N-1)が入力され、1個のoFMデータを出力する。この処理がM層、並行して行われ、M個のoFMデータoch_0~och_M-1が出力される。
【0044】
このように、演算部7は、入力チャネル数をN、出力チャネル数をMとして、並列度がN×Mとなる構成を取る。入力チャネル数Nおよび出力チャネル数Mの大きさは、CNNの大きさに応じて設定(変更)することができるので、処理性能や回路規模を勘案して適切に設定する。
【0045】
演算部7は、演算部内各部の制御を行う演算制御部71を備える。また、演算部7は、各層ごとに、フィルタ演算部72と、第1加算器73と、第2加算器74と、FF(フリップフロップ)75と、非線形変換部76と、プーリング処理部77を備える。面ごとに全く同じ回路が存在し、このような層がM個ある。
【0046】
演算制御部71が、演算部7の前段に対してリクエストを発行することにより、所定のデータがフィルタ演算部72に入力される。フィルタ演算部72は、内部で乗算器と加算器がN並列で同時に実行できるように構成されており、入力データのフィルタ処理を行い、フィルタ処理の結果をN並列で出力する。
【0047】
第1加算器73は、N並列で実行され出力されたフィルタ演算部72におけるフィルタ処理の結果を全て加算する。すなわち、第1加算器73は、空間方向の累積加算器ということができる。第2加算器74は、時分割で入力される第1加算器73の演算結果を累積加算する。すなわち、第2加算器74は、時間方向の累積加算器ということができる。
【0048】
本実施形態では、第2加算器74は、初期値をゼロとして処理をスタートするケースと、SBUF(累積加算結果格納メモリ)112に格納されている値を初期値として処理をスタートするケースの2通りがある。すなわち、
図6に示すスイッチボックス78において、第2加算器74の初期値の入力が、ゼロとSBUF管理部11から取得した値(累積加算途中結果)とで切り替わる。
【0049】
この切り替えは、現在行われている累積加算のフェーズに基づいて、コントローラ2が行う。具体的には、1回の演算(フェーズ)ごとに、コントローラ2から演算制御部71に演算結果の書き出し先などの指示が来て、演算が終了するとコントローラ2に演算終了を通知する。その際、コントローラ2は現在行われている累積加算のフェーズから判断して、第2加算器74の初期値の入力を切り替える指示を行う。
【0050】
演算制御部71は、第2加算器74およびFF75によって、WBUFに格納されているフィルタ係数で実行可能な全ての累積加算を行い、その途中結果(累積加算途中結果)を、SBUF(累積加算結果格納メモリ)112にピクセル単位で書き込む(格納する)。第2加算器74の後段には、累積加算の結果を保持するためのFF75が設けられている。
【0051】
演算制御部71は、oFMの特定のピクセル(画素)のデータ(oFMデータ)を算出するためのフィルタ処理・累積加算処理の途中で、一旦途中結果をSBUF112に格納し、oFMの別のピクセルの処理を行うように制御する。そして、演算制御部71は、全てのピクセルについて累積加算途中結果をSBUF112に格納し終えたら最初のピクセルに戻り、SBUF112に格納した値を読み出して累積加算処理の初期値とし、累積加算の続きを実行するように制御する。
【0052】
本実施形態では、累積加算途中結果をSBUF112に格納するタイミングは、WBUFに格納されている全てのフィルタ係数で実行可能なフィルタ・累積加算処理を終えた時とし、WBUFに格納されているフィルタ係数が更新されたら処理の続きを実施するように制御する。
【0053】
非線形変換部76は、第2加算器74およびFF75での累積加算の結果に対して、Activate関数などによる非線形演算処理を行う。具体的な実装は特に規定しないが、例えば折れ線近似により非線形演算処理を行う。
【0054】
プーリング処理部77は、非線形変換部76から入力された複数のデータの中から最大値を選択出力(Max Pooling)する、平均値を算出(Average Pooling)する、などのプーリング処理を行う。なお、非線形変換部76とプーリング処理部77における処理は、演算制御部71により省略する事が可能となっている。
【0055】
このような構成により、演算部7において、入力チャネル数Nおよび出力チャネル数Mの大きさは、CNNの大きさに応じて設定(変更)することができるので、処理性能や回路規模を勘案して適切に設定する。また、上下関係がないN並列処理のため、累積加算はトーナメント式であり、カスケード接続のような長いパスが生じず、レイテンシが短い。
【0056】
図7Aは、本実施形態に係る演算処理装置において、演算制御部が行う制御の流れを示すフローチャートである。Convolution処理が開始されると、まず、「iFM数ループ1」に入る(ステップS1)。そして、WBUFに格納されているフィルタ係数を更新する(ステップS2)。次に、「iFM数ループ2」に入る(ステップS3)。
【0057】
次に、「演算部実行ループ」に入る(ステップS4)。そして、「係数格納判定」を行う(ステップS5)。「係数格納判定」では、WBUFに格納されているフィルタ係数が所望のものか否かを判定する。「係数格納判定」結果がOKの場合は、「データ格納判定」に進む(ステップS6)。「係数格納判定」結果がOKでない場合は、「係数格納判定」結果がOKになるまで待機する。
【0058】
ステップS6の「データ格納判定」では、IBUFに格納されているiFMデータが所望のものか否かを判定する。「データ格納判定」結果がOKの場合は、「演算部実行」に進む(ステップS7)。「データ格納判定」結果がOKでない場合は、「データ格納判定」結果がOKになるまで待機する。
【0059】
ステップS7の「演算部実行」では、演算部がフィルタ・累積加算処理を行う。WBUFに格納されている全てのフィルタ係数で実行可能なフィルタ・累積加算処理を終えると、フローは終了する。そうでない場合は、各ステップS1、S3、S4に戻って、処理を繰り返す。
【0060】
iFMデータ数がn1×n2×Nで、「iFM数ループ1」(ステップS1)の回数=n1、「iFM数ループ2」(ステップS3)の回数=n2と設定すると、第2加算器74による累積加算はn2回、SBUF112に一旦中間結果として書き出す回数はn1回となる。
【0061】
図7Bは、
図7AのステップS2におけるフィルタ係数更新制御の流れを示すフローチャートである。まず、ステップS11において、WBUFにフィルタ係数を読み込む。そして、ステップS12において、フィルタ係数の更新回数をカウントする。フィルタ係数更新が最初の場合はステップS13に進み、累積加算初期値をゼロとする。フィルタ係数更新が最初でない場合はステップS14に進み、累積加算初期値をSBUFに格納されている値とする。
【0062】
次に、ステップS15において、フィルタ係数の更新回数をカウントする。フィルタ係数更新が最後の場合はステップS16に進み、データ(累積加算結果)の出力先を非線形変換部とする。フィルタ係数更新が最後でない場合はステップS17に進み、データ(累積加算結果)の出力先をSBUFとする。
【0063】
なお、フィルタ係数更新制御において、累積加算初期値(ステップS13またはS14)およびデータ(累積加算結果)の出力先(ステップS16またはS17)はステータス情報として演算部の演算制御部に渡され、演算制御部ではそのステータスに従って各部スイッチを制御する。
【0064】
(第2実施形態)
本発明の第1実施形態は、フィルタ係数が多い場合(WBUFが小さい場合)に対処するものであったが、フィルタ係数でなく、iFMデータが多すぎるケースでも同様の問題が起こる。すなわち、iFMデータの一部しかIBUFに格納できないケースを考える。このとき、oFMの1ピクセル(1画素)のデータ(oFMデータ)を算出するためにIBUFに格納されているiFMデータを途中で更新すると、oFMの次のピクセルのデータ(oFMデータ)を算出するためにiFMデータの読み直しが必要となってしまう。
【0065】
なお、oFMの1ピクセルの処理に必要なiFMデータは同一ピクセルの近傍情報だけである。しかし、たとえ局所領域だけをIBUFに格納するとしても、ネットワークが巨大化して数千のiFMデータが必要となった場合や、規模削減のためにIBUFを極限まで削減する場合、データバッファ(IBUF)が不足し、iFMデータを分割して読み込むことは避けられない。
【0066】
そこで、本発明の第2実施形態では、iFMデータが多すぎる場合(IBUFが小さい場合)に対処できるようにする。なお、SBUF(累積加算結果格納メモリ)を設ける点は第1実施形態と同じである。
図8は、本実施形態において、iFMデータを分割して演算部に入力するイメージ図である。
【0067】
まずiFMデータをn2×N面のデータバッファ(IBUF_0~IBUF_N-1)に格納する。演算部で第2加算器74(時間方向の累積加算器)による累積加算はn2回実施され、途中結果(累積加算途中結果)をSBUF(累積加算結果格納メモリ)112に書き出す。全てのピクセルに対して途中結果を書き出したら、次のiFMデータをn2×N面読みこみ、累積加算途中結果を初期値としてSBUF112から取り出して累積加算演算を継続する。これをn1回繰り返すことでn×N(=n1×n2×N)面の処理ができる。
【0068】
図9は、本実施形態における、Convolution処理においてiFMデータを途中でn
1回更新する場合の動作を示すイメージ図である。まず、最初のiFM群(iFM_0)の各データに対してフィルタ係数を掛けて累積加算を行い、途中結果(累積加算途中結果)をSBUF(累積加算結果格納メモリ)112に書き出す。そして、最初のiFM群(iFM_0)を使用してできる全ての計算を行う。
【0069】
次に、2番目のiFM群(iFM_1)をIBUFに読み込む。そして、累積加算途中結果を初期値としてSBUF112から取り出して、2番目のiFM群(iFM_1)の各データに対してフィルタ係数を掛けて累積加算を行い、途中結果(累積加算途中結果)をSBUF(累積加算結果格納メモリ)112に書き出す。そして、2番目のiFM群(iFM_1)を使用してできる全ての計算を行う。
【0070】
同じ動作を、n1番目のiFM群(iFM_n1)まで繰り返し、得られた累積加算結果に対して、非線形処理・縮小処理などのプーリング処理を行うことにより、oFMの1ピクセル(1画素)のデータ(oFMデータ)が得られる。このように、できる所までの全ての計算を行う点は、第1実施形態と同じである。
【0071】
本実施形態を行う構成は、
図4~
図6に示す第1実施形態の構成と同じであるので説明を省略する。第1実施形態と異なる点として、第2加算器74は、IBUFに格納されているiFMデータで実行可能な全ての累積加算を行い、その途中結果(累積加算途中結果)を、SBUF(累積加算結果格納メモリ)112にピクセル単位で書き込む(格納する)。
【0072】
また、本実施形態では、累積加算途中結果をSBUF112に格納するタイミングは、入力可能なiFMデータで実行可能な全てのフィルタ・累積加算処理を終えた時とし、iFMデータが更新されたら処理の続きを実施するように制御する。
【0073】
図10Aは、本実施形態に係る演算処理装置において、演算制御部が行う制御を示すフローチャートである。Convolution処理が開始されると、まず、「iFM数ループ1」に入る(ステップS21)。そして、IBUFに格納されているiFMデータを更新する(ステップS22)。次に、「iFM数ループ2」に入る(ステップS23)。
【0074】
次に、「演算部実行ループ」に入る(ステップS24)。そして、「係数格納判定」を行う(ステップS25)。「係数格納判定」では、WBUFに格納されているフィルタ係数が所望のものか否かを判定する。「係数格納判定」結果がOKの場合は、「データ格納判定」に進む(ステップS26)。「係数格納判定」結果がOKでない場合は、「係数格納判定」結果がOKになるまで待機する。
【0075】
ステップS26の「データ格納判定」では、IBUFに格納されているiFMデータが所望のものか否かを判定する。「データ格納判定」結果がOKの場合は、「演算部実行」に進む(ステップS27)。「データ格納判定」結果がOKでない場合は、「データ格納判定」結果がOKになるまで待機する。
【0076】
ステップS27の「演算部実行」では、演算部がフィルタ・累積加算処理を行う。IBUFに格納されている全てのiFMデータで実行可能なフィルタ・累積加算処理を終えると、フローは終了する。そうでない場合は、各ステップS21、S23、S24に戻って、処理を繰り返す。
【0077】
図10Bは、
図10AのステップS22におけるiFMデータ更新制御の流れを示すフローチャートである。まず、ステップS31において、IBUFにiFMデータを読み込む。そして、ステップS32において、iFMデータの更新回数をカウントする。iFMデータ更新が最初の場合はステップS33に進み、累積加算初期値をゼロとする。iFMデータ更新が最初でない場合はステップS34に進み、累積加算初期値をSBUFに格納されている値とする。
【0078】
次に、ステップS35において、iFMデータの更新回数をカウントする。iFMデータ更新が最後の場合はステップS36に進み、データ(累積加算結果)の出力先を非線形変換部とする。iFMデータ更新が最後でない場合はステップS37に進み、データ(累積加算結果)の出力先をSBUFとする。
【0079】
なお、iFMデータ更新制御において、累積加算初期値(ステップS33またはS34)およびデータ(累積加算結果)の出力先(ステップS36またはS37)はステータス情報として演算部の演算制御部に渡され、演算制御部ではそのステータスに従って各部スイッチを制御する。
【0080】
(第3実施形態)
第1実施形態は全てのフィルタ係数がWBUFに格納できないケースであり、第2実施形態は全てのiFMデータがIBUFに格納できないケースであったが、両方が同時に発生するケースもある。すなわち、第3実施形態として、全てのフィルタ係数がWBUFに格納できず、かつ、全てのiFMデータがIBUFに格納できないケースについて説明する。
【0081】
図11は、本実施形態において、iFMデータおよびフィルタ係数を途中で更新するイメージ図である。
図11は、iFM群数n
1=2で、フィルタ係数更新が1回の例である。
【0082】
まず、最初のiFM群(iFM_0)の各データに対してフィルタ係数を掛けて累積加算を行い、途中結果(累積加算途中結果)をSBUF(累積加算結果格納メモリ)112に書き出す。
【0083】
次にWBUFに格納されるフィルタ係数群を更新する。そして、累積加算途中結果を初期値としてSBUF112から取り出して、iFM群(iFM_0)の各データに対してフィルタ係数を掛けて累積加算を行い、途中結果(累積加算途中結果)をSBUF112に書き出す。このように、最初のiFM群(iFM_0)を使用してできる全ての計算を行う。
【0084】
次に、IBUFに格納されるiFM群を更新し(2番目のiFM群(iFM_1)をIBUFに読み込み)、かつ、WBUFに格納されるフィルタ係数群を更新する。そして、累積加算途中結果を初期値としてSBUF112から取り出して、2番目のiFM群(iFM_1)の各データに対してフィルタ係数を掛けて累積加算を行い、途中結果(累積加算途中結果)をSBUF(累積加算結果格納メモリ)112に書き出す。
【0085】
次にWBUFに格納されているフィルタ係数を更新する。そして、累積加算途中結果を初期値としてSBUF112から取り出して、2番目のiFM群(iFM_1)の各データに対してフィルタ係数を掛けて累積加算を行い、途中結果(累積加算途中結果)をSBUF(累積加算結果格納メモリ)112に書き出す。このように、2番目のiFM群(iFM_1)を使用してできる全ての計算を行う。
【0086】
このようにして得られた累積加算結果に対して、非線形処理・縮小処理などのプーリング処理を行うことにより、oFMの1ピクセル(1画素)のデータ(oFMデータ)が得られる。このように、できる所までの全ての計算を行う点は、第1実施形態および第2実施形態と同じである。
【0087】
このように、本実施形態では、WBUFとIBUFの両方が不足する場合にも対応できる。
【0088】
図12Aは、本実施形態に係る演算処理装置において、演算制御部が行う制御を示すフローチャートである。
図12Aは、フィルタ係数群の更新頻度がiFMデータの更新頻度より多い場合の例を示す。更新頻度の多い方が内側のループになる。
【0089】
Convolution処理が開始されると、まず、「iFM数ループ1」に入る(ステップS41)。そして、IBUFに格納されているiFMデータを更新する(ステップS42)。次に、「iFM数ループ2」に入る(ステップS43)。そして、WBUFに格納されているフィルタ係数を更新する(ステップS44)。次に、「iFM数ループ3」に入る(ステップS45)。
【0090】
次に、「演算部実行ループ」に入る(ステップS46)。そして、「係数格納判定」を行う(ステップS47)。「係数格納判定」では、WBUFに格納されているフィルタ係数が所望のものか否かを判定する。「係数格納判定」結果がOKの場合は、「データ格納判定」に進む(ステップS48)。「係数格納判定」結果がOKでない場合は、「係数格納判定」結果がOKになるまで待機する。
【0091】
ステップS48の「データ格納判定」では、IBUFに格納されているiFMデータが所望のものか否かを判定する。「データ格納判定」結果がOKの場合は、「演算部実行」に進む(ステップS49)。「データ格納判定」結果がOKでない場合は、「データ格納判定」結果がOKになるまで待機する。
【0092】
ステップS49の「演算部実行」では、演算部がフィルタ・累積加算処理を行う。IBUFに格納されている全てのiFMデータで実行可能なフィルタ・累積加算処理を終えると、フローは終了する。そうでない場合は、各ステップS41、S43、S46に戻って、処理を繰り返す。
【0093】
図12Bは、
図12AのステップS42におけるiFMデータ更新制御およびステップS44におけるフィルタ係数更新制御の流れを示すフローチャートである。
【0094】
まず、外側のループであるiFMデータの更新制御を行う。ステップS51において、IBUFにiFMデータを読み込む。そして、ステップS52において、iFMデータの更新回数をカウントする。iFMデータ更新が最初の場合はステップS53に進み、値Si1をゼロとする。iFMデータ更新が最初でない場合はステップS54に進み、値Si1をSBUFに格納されている値とする。
【0095】
そして、ステップS55において、iFMデータの更新回数をカウントする。iFMデータ更新が最後の場合はステップS56に進み、Od1を非線形変換部とする。iFMデータ更新が最後でない場合はステップS57に進み、Od1をSBUFとする。
【0096】
次に、内側のループであるフィルタ係数の更新制御を行う。ステップS61において、WBUFにフィルタ係数を読み込む。そして、ステップS62において、フィルタ係数の更新回数をカウントする。フィルタ係数更新が最初の場合はステップS63に進み、累積加算初期値を値Si1とする。フィルタ係数更新が最初でない場合はステップS64に進み、累積加算初期値をSBUFに格納されている値とする。
【0097】
そして、ステップS65において、フィルタ係数の更新回数をカウントする。フィルタ係数更新が最後の場合はステップS66に進み、データ(累積加算結果)の出力先をOd1とする。フィルタ係数更新が最後でない場合はステップS67に進み、データ(累積加算結果)の出力先をSBUFとする。
【0098】
なお、iFMデータ更新制御およびフィルタ係数制御において、値Si1(ステップS53またはS54)、Od1(ステップS56またはS57)、累積加算初期値(ステップS63またはS64)およびデータ(累積加算結果)の出力先(ステップS66またはS67)はステータス情報として演算部の演算制御部に渡され、演算制御部ではそのステータスに従って各部スイッチを制御する。
【0099】
上述の制御フローでは、ループ数をnとして、n=n1×n2×n3と分割している。ただし、「iFM数ループ1」(ステップS41)の回数=n1、「iFM数ループ2」(ステップS43)の回数=n2、「iFM数ループ3」(ステップS45)の回数=n3である。このとき、第2加算器74による累積加算はn3回、SBUFに一旦中間結果として書き出す回数はn1×n2回となる。
【0100】
このように、第1実施形態~第3実施形態では、動画に対応する高速処理を可能とし、かつCNNのフィルタサイズが変更可能である構成により、Convolution処理とFullConnect処理のどちらにも容易に対応可能な構成において、入力N並列・出力M並列の回路で、iFM数>N、oFM数>Mでも対応する具体的な制御、さらに、N、Mが増大して分割入力が必要な程、iFM数やパラメータ数が多くなるケースに対応する方法を示した。すなわち、CNNのネットワークが拡大しても対応することができる。
【0101】
(第4実施形態)
1つの出力チャネルから複数のoFMを出力するケースにおいて、oFM数が出力並列度Mを上回る面数を必要とする場合について考える。
図11に示す処理では、フィルタ係数およびiFMを、ともにこの処理の間に更新し、1つのoFMのデータを生成している。この処理において、さらに、1つの出力チャネルが生成しなければならないoFM数がm(m>1)であったとすると、
図11に示す処理をm回繰り返して処理する方法が考えられる。
【0102】
この方法では、IBUFが順次書き換わっているので、iFM全てをm回読み直す必要が生じる。このため、DRAMアクセス量が多くなり、所望の性能を得られなくなる。そこで、複数のSBUFをそれぞれのoFM用に用意すれば、SBUFは累積加算結果をm面分全て格納することができ、読み直しを防ぐことができるが、回路規模が増大してしまう。
【0103】
そのような例として、
図13は、1つの出力チャネルが生成しなければならないoFM数m=2のケースにおいて、2つのSBUFをそれぞれのoFM用として用意した場合の、Convolution処理イメージを示す図である。2つのoFMのデータ(oFM0とoFM1)を生成するため、読み直しを防ぐには、oFM0の累積加算結果を格納する第1のSBUFとoFM1の累積加算結果を格納する第2のSBUFが必要となる。
【0104】
まず、oFM0データ用として、最初のiFM群(n1=0)の各データに対してフィルタ係数を掛けて累積加算を行い、累積加算途中結果を第1のSBUFに格納する。そして、WBUFに格納されているフィルタ係数を更新した後、第1のSBUFの値を初期値として累積加算を行い、累積加算途中結果を第1のSBUFに格納する。
【0105】
次に、oFM1データ用として、WBUFに格納されているフィルタ係数を更新した後、最初のiFM群(n1=0)の各データに対してフィルタ係数を掛けて累積加算を行い、累積加算途中結果を第2のSBUFに格納する。そして、WBUFに格納されているフィルタ係数を更新した後、第2のSBUFの値を初期値として累積加算を行い、累積加算途中結果を第2のSBUFに格納する。
【0106】
次に、2番目のiFM群(n1=1)をIBUFに読み込む。そして、oFM0データ用として、第1のSBUFの値を初期値として、2番目のiFM群(n1=1)の各データに対してフィルタ係数を掛けて累積加算を行い、累積加算途中結果を第1のSBUFに格納する。そして、WBUFに格納されているフィルタ係数を更新した後、第1のSBUFの値を初期値として累積加算を行い、累積加算途中結果を第1のSBUFに格納する。
【0107】
次に、oFM1データ用として、WBUFに格納されているフィルタ係数を更新した後、第2のSBUFの値を初期値として、2番目のiFM群(n1=1)の各データに対してフィルタ係数を掛けて累積加算を行い、累積加算途中結果を第2のSBUFに格納する。そして、WBUFに格納されているフィルタ係数を更新した後、第2のSBUFの値を初期値として累積加算を行い、累積加算途中結果を第2のSBUFに格納する。
【0108】
このようにして得られた累積加算結果(最終的に、第1および第2のSBUFに格納された値)に対して、非線形処理・縮小処理などのプーリング処理を行うことにより、2つのoFMのデータが得られる。
【0109】
このように、oFM数が出力並列度Mを上回る面数を必要とする場合、読み直しを防ぐには、SBUFは1つの出力チャネルが出力するoFMの面数分のSBUFを設ける必要があり、これによりSRAMが増加し回路規模が増大する。
【0110】
そこで、第4実施形態として、oFM数が増えても規模を増加せずに対応できる方法について説明する。
図14は、本実施形態に係る演算処理装置におけるConvolution処理のイメージを示す図である。
【0111】
本実施形態においても、第1実施形態~第3実施形態と同様に、iFMのサイズ(iFM1枚分)と同じ(または、より大きい)容量を持つSBUFを用意する。すなわち、SBUFは、累積加算の途中結果を、iFM1面の全画素分、格納できる大きさである。
【0112】
本実施形態では、1つのoFM分の処理の途中で作成される累積加算途中結果を一旦DRAMに書き出す。これをm面分行う。iFMを更新して累積加算を続きから実施する場合は、出力した累積加算途中結果をDRAMから読み込んで継続処理する。
【0113】
本実施形態の処理の流れを、
図14を用いて説明する。
図14は、
図13と同様に、2つのoFMのデータ(oFM0とoFM1)を生成する場合のConvolution処理イメージを示す。
【0114】
まず、oFM0データ用として、最初のiFM群(n1=0)の各データに対してフィルタ係数を掛けて累積加算を行い、累積加算途中結果をSBUFに格納する。そして、WBUFに格納されているフィルタ係数を更新した後、SBUFの値を初期値として累積加算を行い、累積加算途中結果をSBUFに格納する。SBUFに格納された累積加算途中結果は、oFM0データの中間結果として順次DRAMに転送される。
【0115】
次に、oFM1データ用として、WBUFに格納されているフィルタ係数を更新した後、最初のiFM群(n1=0)の各データに対してフィルタ係数を掛けて累積加算を行い、累積加算途中結果をSBUFに格納する。そして、WBUFに格納されているフィルタ係数を更新した後、SBUFの値を初期値として累積加算を行い、累積加算途中結果をSBUFに格納する。SBUFに格納された累積加算途中結果は、oFM1データの中間結果として順次DRAMに転送される。
【0116】
次に、2番目のiFM群(n1=1)をIBUFに読み込む。そして、oFM0データ用として、DRAMに格納されたoFM0データの中間結果を初期値とするためにSBUFに格納する。次に、SBUFの値を初期値として2番目のiFM群(n1=1)の各データに対してフィルタ係数を掛けて累積加算を行い、累積加算途中結果をSBUFに格納する。そして、WBUFに格納されているフィルタ係数を更新した後、SBUFの値を初期値として累積加算を行い、累積加算途中結果をSBUFに格納する。このようにして得られた累積加算結果に対して、非線形処理・縮小処理などのプーリング処理を行うことにより、oFM0のデータを得る。
【0117】
次に、oFM1データ用として、WBUFに格納されているフィルタ係数を更新した後、DRAMに格納されたoFM1データの中間結果を初期値とするためにSBUFに格納する。次に、SBUFの値を初期値として2番目のiFM群(n1=1)の各データに対してフィルタ係数を掛けて累積加算を行い、累積加算途中結果をSBUFに格納する。そして、WBUFに格納されているフィルタ係数を更新した後、SBUFの値を初期値として累積加算を行い、累積加算途中結果を第2のSBUFに格納する。このようにして得られた累積加算結果に対して、非線形処理・縮小処理などのプーリング処理を行うことにより、oFM1のデータを得る。
【0118】
このように、DRAMから取得したデータは一旦SBUFに格納される。そうすると、SBUFに初期値が入っているこれまでのケースと同じ状態になって、そこからこれまでどおり処理がスタートできる。処理の最後も、DRAMに出す前に非線形処理等を施してしまう。
【0119】
本実施形態は、累積加算途中結果をDRAMに出力する事で処理速度が低下してしまうデメリットがある。しかし、本実施形態の処理は、ほぼ回路の増大なしに対応できるため、多少の性能劣化を許容できれば、最新のネットワークに対応することができる。
【0120】
次に、本実施形態の処理を行うための構成について説明する。
図15は、本実施形態に係る演算処理装置の全体構成を示すブロック図である。
図15に示す演算処理装置20は、
図1に示す第1実施形態の演算処理装置1と、SBUF(累積加算結果格納メモリ)管理部の構成が異なる。
【0121】
図16は、本実施形態のSBUF管理部21の構成を示すブロック図である。SBUF管理部21は、SBUF制御部210と、第1のSBUF格納部211と、第2のSBUF格納部212と、SBUF112と、第1のSBUF読み出し部213と、第2のSBUF読み出し部214とを備える。
【0122】
SBUF112は、iFMの各ピクセル単位(画素単位)で累積加算の途中結果を一時的に格納するためのバッファである。第1のSBUF格納部211および第1のSBUF読み出し部213は、DRAMに対して値を読み書きするためのI/Fである。
【0123】
第1のSBUF格納部211は、データ入力部3を介してDRAM9からデータ(中間結果)を受け取ると、アドレスを生成してSBUF112に書き込む。第2のSBUF格納部212は、演算部7から有効データ(累積加算途中結果)を受け取ると、アドレスを生成してSBUF112に書き込む。
【0124】
第1のSBUF読み出し部213は、SBUF112から所望のデータ(中間結果)を読み出し、データ出力部8を介してDRAM9に書き込む。第2のSBUF読み出し部214は、SBUF112から所望のデータ(累積加算途中結果)を読み出し、累積加算の初期値として演算部7に出力する。
【0125】
演算部7の構成は、
図6に示す第1実施形態の演算部の構成と同じであるので、説明を省略する。演算部7は、IBUF(データ格納メモリ)管理部5からデータ、WBUF(フィルタ係数格納メモリ)管理部6からフィルタ係数を取得する。また、演算部7は、第2のSBUF読み出し部214がSBUF112から読み出したデータ(累積加算途中結果)を取得して、フィルタ処理・累積加算・非線形演算・プーリング処理等のデータ処理を行う。演算部7がデータ処理を施したデータ(累積加算途中結果)は、第2のSBUF格納部212によって、SBUF112に格納される。
【0126】
SBUF制御部210は、DRAMからSBUFへの初期値(累積加算途中結果)のロード、およびSBUFからDRAMへの中間結果のライトを制御する。DRAMからSBUFへの初期値のロードでは、上述のように、第1のSBUF格納部211が、データ入力部3を介してDRAM9からデータ(初期値)を受け取り、アドレスを生成してSBUF112に書き込む。
【0127】
具体的には、DRAMからの入力時には、SBUF制御部210は、上位のコントローラ2からrtrig(読み込みトリガー)が入力されると、DRAM9からデータを取得しSBUF112に取り込む。取り込みを完了したら、SBUF制御部210はrend(読み取り終了)信号を上位のコントローラ2に送信して次の動作を待つ。
【0128】
SBUFからDRAMへの結果のライトでは、上述のように、第1のSBUF読み出し部213が、SBUF112から所望のデータ(中間結果)を読み出し、データ出力部8を介してDRAM9に書き込む。具体的には、DRAMへの出力時には、SBUF制御部210から上位のコントローラ2にwtrig(書き込みトリガー)信号が出力されると、SBUF内のデータが全てデータ出力部8に出力され、終了したら、SBUF制御部210はrend(読み取り終了)信号を上位のコントローラ2に送信して次の動作を待つ。
【0129】
また、SBUF制御部210は、第1のSBUF格納部211、第2のSBUF格納部212、第1のSBUF読み出し部213、および第2のSBUF読み出し部214を制御する。具体的には、SBUF制御部210は、指示を行う時にはtrig(トリガー)信号を出力し、処理が終了するとend(終了)信号を受け取る。
【0130】
データ入力部3は、SBUF管理部21からのリクエストにより、累積加算途中結果(中間結果)をDRAM9からロードする。データ出力部8は、SBUF管理部21からのリクエストにより、累積加算途中結果(中間結果)をDRAM9にライトする。
【0131】
このような構成により、入力・出力とも膨大なFMとなる場合への対応ができる。
【0132】
図17Aは、本実施形態に係る演算処理装置において、演算制御部が行う制御を示すフローチャートである。
【0133】
Convolution処理が開始されると、まず、「iFM数ループ1」に入る(ステップS71)。そして、IBUFに格納されているiFMデータを更新する(ステップS72)。次に、「oFM数ループ」に入る(ステップS73)。そして、SBUFに格納されているデータを更新する(ステップS74)。次に、「iFM数ループ2」に入る(ステップS75)。そして、WBUFに格納されているフィルタ係数を更新する(ステップS76)。次に、「iFM数ループ3」に入る(ステップS77)。
【0134】
次に、「演算部実行ループ」に入る(ステップS78)。そして、「係数格納判定」を行う(ステップS79)。「係数格納判定」では、WBUFに格納されているフィルタ係数が所望のものか否かを判定する。「係数格納判定」結果がOKの場合は、「データ格納判定」に進む(ステップS80)。「係数格納判定」結果がOKでない場合は、「係数格納判定」結果がOKになるまで待機する。
【0135】
ステップS80の「データ格納判定」では、IBUFに格納されているiFMデータが所望のものか否かを判定する。「データ格納判定」結果がOKの場合は、「演算部実行」に進む(ステップS81)。「データ格納判定」結果がOKでない場合は、「データ格納判定」結果がOKになるまで待機する。
【0136】
ステップS81の「演算部実行」では、演算部がフィルタ・累積加算処理を行う。IBUFに格納されている全てのiFMデータで実行可能なフィルタ・累積加算処理を終えると、「SBUF退避」に進む(ステップS82)。そうでない場合は、各ステップS75、S77、S78に戻って、処理を繰り返す。
【0137】
ステップS82の「SBUF退避」では、SBUFに格納されているデータをDRAMに退避させる。その後、各ステップS71、S73に戻って、処理を繰り返し、全ての演算が終わるとフローは終了する。
【0138】
図17Bは、
図17AのステップS72におけるiFMデータ更新制御の流れを示すフローチャートである。まず、ステップS91において、IBUFにiFMデータを読み込む。そして、ステップS92において、iFMデータの更新回数をカウントする。iFMデータ更新が最初の場合はステップS93に進み、値Si
1をゼロとする。iFMデータ更新が最初でない場合はステップS94に進み、値Si
1をSBUFに格納されている値とする。
【0139】
そして、ステップS95において、iFMデータの更新回数をカウントする。iFMデータ更新が最後の場合はステップS96に進み、Od1を非線形変換部とする。iFMデータ更新が最後でない場合はステップS97に進み、Od1をSBUFとする。
【0140】
図17Cは、
図17AのステップS76におけるフィルタ係数更新制御の流れを示すフローチャートである。まず、ステップS101において、WBUFにフィルタ係数を読み込む。そして、ステップS102において、フィルタ係数の更新回数をカウントする。フィルタ係数更新が最初の場合はステップS103に進み、累積加算初期値を値Si
1とする。フィルタ係数更新が最初でない場合はステップS104に進み、累積加算初期値をSBUFに格納されている値とする。
【0141】
そして、ステップS105において、フィルタ係数の更新回数をカウントする。フィルタ係数更新が最後の場合はステップS106に進み、データ(累積加算結果)の出力先をOd1とする。フィルタ係数更新が最後でない場合はステップS107に進み、データ(累積加算結果)の出力先をSBUFとする。
【0142】
なお、
図17BのiFMデータ更新制御および
図17Cのフィルタ係数制御において、値Si
1(ステップS93またはS94)、Od
1(ステップS96またはS97)、累積加算初期値(ステップS103またはS104)およびデータ(累積加算結果)の出力先(ステップS106またはS107)はステータス情報として演算部の演算制御部に渡され、演算制御部ではそのステータスに従って各部スイッチを制御する。
【0143】
図17Dは、
図17AのステップS74におけるSBUF更新制御の流れを示すフローチャートである。ステップS111において、iFMループ1の回数を判定する。iFMループ1が最初の場合は処理を行わない(終了する)。iFMループ1が最初でない場合はステップS112に進み、DRAMからSBUF値をリードする。
【0144】
図17Eは、
図17AのステップS82におけるSBUF退避制御の流れを示すフローチャートである。ステップS121において、iFMループ1の回数を判定する。iFMループ1が最後の場合は処理を行わない(終了する)。iFMループ1が最後でない場合はステップS122に進み、SBUF値をDRAMにライトする。
【0145】
上述の制御フローでは、ループ数をnとして、n=n1×n2×n3と分割している。ただし、「iFM数ループ1」(ステップS71)の回数=n1、「iFM数ループ2」(ステップS75)の回数=n2、「iFM数ループ3」(ステップS77)の回数=n3である。このとき、第2加算器74による累積加算はn3回、SBUFに一旦中間結果として書き出す回数はn2回、DRAMに中間結果を書き出す回数はn1回となる。
【0146】
図17Aの制御フローは、フィルタ係数群の更新頻度がiFM群の更新頻度よりも多いことを前提としている。逆に、フィルタ係数群の更新頻度がiFM群の更新頻度よりも少ないことはないとする。なぜなら、iFM群を先に更新してしまうと、フィルタ係数を更新したときにiFM群を再度読み直さなければならなくなるためである。
【0147】
以上、本発明の一実施形態について説明したが、本発明の技術範囲は上記実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲において構成要素の組み合わせを変えたり、各構成要素に種々の変更を加えたり、削除したりすることができる。
【0148】
各構成要素は、それぞれの構成要素に係る機能や処理を説明するためのものである。複数の構成要素に係る機能や処理を、1つの構成(回路)が同時に実現してもよい。
【0149】
各構成要素は、それぞれもしくは全体として、1個又は複数のプロセッサ、論理回路、メモリ、入出力インタフェース及びコンピュータ読み取り可能な記録媒体などからなるコンピュータで実現するようにしてもよい。その場合、各構成要素もしくは全体の機能を実現するためのプログラムを記録媒体に記録しておき、記録されたプログラムをコンピュータシステムに読み込ませ、実行することによって、上述した種々の機能や処理を実現してもよい。
【0150】
この場合、例えば、プロセッサは、CPU、DSP(Digital Signal Processor)、およびGPU(Graphics Processing Unit)の少なくとも1つである。例えば、論理回路は、ASIC(Application Specific Integrated Circuit)およびFPGA(Field-Programmable Gate Array)の少なくとも1つである。
【0151】
また、ここでいう「コンピュータシステム」とは、OSや周辺機器などのハードウェアを含むものであってもよい。また、「コンピュータシステム」は、WWWシステムを利用している場合であれば、ホームページ提供環境(あるいは表示環境)も含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、フラッシュメモリなどの書き込み可能な不揮発性メモリ、CD-ROMなどの可搬媒体、コンピュータシステムに内蔵されるハードディスクなどの記憶装置をいう。
【0152】
さらに「コンピュータ読み取り可能な記録媒体」とは、インターネットなどのネットワークや電話回線などの通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ(例えばDRAM(Dynamic Random Access Memory))のように、一定時間プログラムを保持しているものも含むものとする。
【0153】
また、上記プログラムは、このプログラムを記憶装置などに格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネットなどのネットワーク(通信網)や電話回線などの通信回線(通信線)のように情報を伝送する機能を有する媒体をいう。また、上記プログラムは、前述した機能の一部を実現するためのものであってもよい。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現するもの、いわゆる差分ファイル(差分プログラム)であってもよい。
【産業上の利用可能性】
【0154】
本発明は、畳み込みニューラルネットワークを用いたディープラーニングを行う演算処理装置に広く適用できる。
【符号の説明】
【0155】
1、20 演算処理装置
2 コントローラ
3 データ入力部
4 フィルタ係数入力部
5 IBUF管理部(データ格納メモリ管理部)
6 WBUF管理部(フィルタ係数格納メモリ管理部)
7 演算部
8 データ出力部
9 DRAM(外部メモリ)
10 バス
11、21 SBUF管理部(累積加算結果格納メモリ管理部)
71 演算制御部
72 フィルタ演算部
73 第1加算器
74 第2加算器
75 FF(フリップフロップ)
76 非線形変換部
77 プーリング処理部
111 SBUF格納部(累積加算結果格納メモリ格納部)
112 SBUF(累積加算結果格納メモリ)
113 SBUF読み出し部(累積加算結果格納メモリ読み出し部)
210 SBUF制御部(累積加算結果格納メモリ制御部)
211 第1SBUF格納部(累積加算結果格納メモリ格納部)
212 第2SBUF格納部(累積加算結果格納メモリ格納部)
213 第1SBUF読み出し部(累積加算結果格納メモリ読み出し部)
214 第2SBUF読み出し部(累積加算結果格納メモリ読み出し部)