(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-12-26
(45)【発行日】2024-01-10
(54)【発明の名称】演算処理装置
(51)【国際特許分類】
G06F 17/16 20060101AFI20231227BHJP
G06N 3/063 20230101ALI20231227BHJP
【FI】
G06F17/16 B
G06N3/063
(21)【出願番号】P 2021551021
(86)(22)【出願日】2019-10-09
(86)【国際出願番号】 JP2019039897
(87)【国際公開番号】W WO2021070303
(87)【国際公開日】2021-04-15
【審査請求日】2022-10-03
(73)【特許権者】
【識別番号】000000376
【氏名又は名称】オリンパス株式会社
(74)【代理人】
【識別番号】100149548
【氏名又は名称】松沼 泰史
(74)【代理人】
【識別番号】100139686
【氏名又は名称】鈴木 史朗
(74)【代理人】
【識別番号】100147267
【氏名又は名称】大槻 真紀子
(74)【代理人】
【識別番号】100207789
【氏名又は名称】石田 良平
(72)【発明者】
【氏名】古川 英明
【審査官】坂東 博司
(56)【参考文献】
【文献】特開2018-32190(JP,A)
【文献】特開2018-67154(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/16
G06N 3/063
(57)【特許請求の範囲】
【請求項1】
Convolution処理とFullConnect処理を行うディープラーニング用の演算処理装置であって、
入力特徴量マップデータを格納するデータ格納メモリと、前記データ格納メモリを管理および制御するデータ格納メモリ制御部とを有するデータ格納メモリ管理部と;
フィルタ係数を格納するフィルタ係数格納メモリと、前記フィルタ係数格納メモリを管理および制御するフィルタ係数格納メモリ制御部とを有するフィルタ係数格納メモリ管理部と;
前記入力特徴量マップデータおよび出力特徴量マップデータを格納する外部メモリと;
前記外部メモリから、前記入力特徴量マップデータを取得するデータ入力部と;
前記外部メモリから、前記フィルタ係数を取得するフィルタ係数入力部と;
入力N並列、出力M並列の構成(N、M≧1の正数)で、前記データ格納メモリから前記入力特徴量マップデータを取得し、前記フィルタ係数格納メモリから前記フィルタ係数を取得して、フィルタ処理、累積加算処理、非線形演算処理およびプーリング処理を行う演算部と;
前記演算部から出力されるM並列のデータを連結して、出力特徴量マップデータとして前記外部メモリに出力するデータ出力部と;
前記演算処理装置内を制御するコントローラと;
を有し、
前記演算部は、
N並列でフィルタ処理を実行するフィルタ演算部と、
前記フィルタ演算部のN/k個の演算結果を累積加算するk個の第1加算器と、
前記第1加算器の後段に設けられ、前記第1加算器の出力を分岐して、第1処理側と第2処理側とで切り替えるセレクタと、
前記セレクタが前記第1処理側に分岐した場合に、k個の前記第1加算器の累積加算処理の結果を累積加算する第2加算器と、
前記第2加算器の累積加算処理の結果を後段で累積加算する第3加算器と、
前記第3加算器の累積加算処理の結果に対して非線形演算処理を行う第1非線形変換部と、
前記第1非線形変換部の処理結果に対してプーリング処理を行う第1プーリング処理部と、
前記セレクタが前記第2処理側に分岐した場合に、前記第1加算器の累積加算処理の結果に対して非線形演算処理を行う第2非線形変換部と、
前記第2非線形変換部で非線形処理された、k個の前記第1加算器の累積加算処理の結果が入力され、同時に入力されたデータに対してプーリング処理を行う第2プーリング処理部と、
前記演算部内を制御する演算制御部と、
を有し、
前記データ格納メモリ管理部は、前記演算部に入力される前記入力特徴量マップデータの数≦N/kの時に、k個の異なるデータ格納メモリに同じデータを書き込み、
前記演算制御部は、前記入力特徴量マップデータの数≦N/kの時は、前記セレクタが前記第2処理側に分岐するよう制御する演算処理装置。
【請求項2】
前記データ格納メモリ制御部は、第1モードにおいて、
前記データ格納メモリへの書き込み時に、k個の異なるデータ格納メモリの同一アドレスに同一のデータを書き込むよう制御し、
前記データ格納メモリをN/k個ずつk個のグループに分類し、前記データ格納メモリからの読み出し時に、各グループでアドレスを変えて、互いに縦および/または横に数画素ずれたアドレスにアクセスするよう制御する
請求項1に記載の演算処理装置。
【請求項3】
前記データ格納メモリ制御部は、第2モードにおいて、
前記データ格納メモリへの書き込み時に、k個の異なるデータ格納メモリにおいて、同一データを、縦および/または横に数画素ずれたアドレスに書き込むように制御し、
前記データ格納メモリからの読み出し時に、同一アドレスで全ての前記データ格納メモリにアクセスする
請求項1に記載の演算処理装置。
【請求項4】
Convolution処理とFullConnect処理を行うディープラーニング用の演算処理装置であって、
入力特徴量マップデータを格納するデータ格納メモリと、前記データ格納メモリを管理および制御するデータ格納メモリ制御部とを有するデータ格納メモリ管理部と;
フィルタ係数を格納するフィルタ係数格納メモリと、前記フィルタ係数格納メモリを管理および制御するフィルタ係数格納メモリ制御部とを有するフィルタ係数格納メモリ管理部と;
前記入力特徴量マップデータおよび出力特徴量マップデータを格納する外部メモリと;
前記外部メモリから、前記入力特徴量マップデータを取得するデータ入力部と;
前記外部メモリから、前記フィルタ係数を取得するフィルタ係数入力部と;
入力N並列、出力M並列の構成(N、M≧1の正数)で、前記データ格納メモリから前記入力特徴量マップデータを取得し、前記フィルタ係数格納メモリから前記フィルタ係数を取得して、フィルタ処理、累積加算処理、非線形演算処理およびプーリング処理を行う演算部と;
前記演算部から出力されるM並列のデータを連結して、出力特徴量マップデータとして前記外部メモリに出力するデータ出力部と;
前記演算処理装置内を制御するコントローラと;
を有し、
前記演算部は、
N並列でフィルタ処理を実行するフィルタ演算部と、
前記フィルタ演算部のN/k個の演算結果を累積加算するk個の第1加算器と、
前記第1加算器の後段に設けられ、前記第1加算器の出力を分岐して、第1処理側と第2処理側とで切り替えるセレクタと、
前記セレクタが前記第1処理側に分岐した場合に、k個の前記第1加算器の累積加算処理の結果を累積加算する第2加算器と、
前記第2加算器の累積加算処理の結果を後段で累積加算する第3加算器と、
前記第3加算器の累積加算処理の結果に対して非線形演算処理を行う第1非線形変換部と、
前記第1非線形変換部の処理結果に対してプーリング処理を行う第1プーリング処理部と、
前記セレクタが前記第2処理側に分岐した場合に、前記第1加算器の累積加算処理の結果に対してプーリング処理を行う第2プーリング処理部と、
前記第2プーリング処理部の後段に設けられ、前記第2プーリング処理部でプーリング処理された前記第1加算器の累積加算処理の結果に対して非線演算処理を行う第2線形変換部と、
前記演算部内を制御する演算制御部と、
を有し、
前記データ格納メモリ管理部は、前記演算部に入力される前記入力特徴量マップデータの数≦N/kの時に、k個の異なるデータ格納メモリに同じデータを書き込み、
前記演算制御部は、前記入力特徴量マップデータの数≦N/kの時は、前記セレクタが前記第2処理側に分岐するよう制御する演算処理装置。
【請求項5】
前記第1非線形変換部と前記第2線形変換部は同一の構成であり、前記第1処理側と前記第2処理側で共用されている、請求項4に記載の演算処理装置。
【請求項6】
前記第2プーリング処理部は、走査方向に対して垂直方向と水平方向とで別々に、プーリング処理を行い、
前記垂直方向のプーリング処理および前記水平方向のプーリング処理は、各々、トリガ信号が入力されるタイミングで実行され、
前記演算制御部は、予め設定したタイミングで、前記トリガ信号を出力する請求項1に記載の演算処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、演算処理装置、より詳しくは、畳み込みニューラルネットワークを用いたディープラーニングを行う演算処理装置の回路構成に関する。
【背景技術】
【0002】
従来、複数の処理層が階層的に接続されたニューラルネットワークを用いて演算を実行する演算処理装置がある。特に画像認識を行う演算処理装置では、畳み込みニューラルネットワーク(Convolutional Neural Network、以下CNNという)を用いたディープラーニングが広く行われている。
【0003】
図28は、CNNを用いたディープラーニングによる画像認識の処理の流れを示す図である。CNNを用いたディープラーニングによる画像認識では、入力された画像データ(ピクセルデータ)に対して、CNNの複数の処理層における処理が順次施されることにより、画像に含まれる対象物が認識された最終的な演算結果データが得られる。
【0004】
CNNの処理層は、畳み込み演算処理、非線形処理、縮小処理(プーリング処理)等を含むConvolution処理を行うConvolution層と、全ての入力データ(ピクセルデータ)にフィルタ係数を乗じて累積加算するFullConnect処理を行うFullConnect層(全結合層)とに大きく分類される。ただし、FullConnect層がない畳み込みニューラルネットワークも存在する。
【0005】
CNNを用いたディープラーニングによる画像認識は以下のようにして行われる。まず、画像データに対して、ある領域を抽出してフィルタ係数の異なる複数のフィルタを乗じて特徴量マップ(Feature Map、FM)を作成する畳み込み演算処理と、特徴量マップの一部領域を縮小する縮小処理(プーリング処理)の組合せを1つの処理層として、これを複数回(複数の処理層において)行う。これらの処理が、Convolution層の処理である。
【0006】
プーリング処理は、近傍4ピクセルの最大値を抽出して1/2×1/2に縮小するmax poolingの他、近傍4ピクセルの平均値を求める(抽出ではない)average poolingなどのバリエーションがある。
【0007】
図29は、Convolution処理の流れを示す図である。最初に、画像データから1ピクセルおよびその近傍のピクセル(
図29の例では近傍8ピクセル)を抽出して、夫々にフィルタ係数の異なるフィルタ処理を行い(畳み込み演算処理)、これらを全て累積加算することにより、1ピクセルに対応するデータができる。作成されたデータに対し、非線形変換および縮小処理(プーリング処理)を行い、以上の処理を画像データの全ピクセルに対して行うことで、出力特徴量マップ(oFM)が1面分生成される。これを複数回繰り返すことでoFMを複数面生成する。実際の回路では上記全てがパイプライン処理される。
【0008】
生成された出力特徴量マップ(oFM)を、次のConvolution処理の入力特徴量マップ(iFM)として、さらにフィルタ係数の異なるフィルタ処理を行うことにより、Convolution処理を繰り返す。このようにして複数回のConvolution処理を行い、出力特徴量マップ(oFM)を得る。
【0009】
Convolution処理が進み、特徴量マップ(FM)をある程度まで小さくしたところで、画像データを1次元のデータ列と読み変える。この1次元のデータ列の各データに対して、各々異なる係数を乗じて累積加算を行うFullConnect処理を複数回(複数の処理層において)行う。これらの処理が、全結合層(FullConnect層)の処理である。
【0010】
そして、FullConnect処理の後、最終的な演算結果である被写体推定結果として、画像に含まれる対象物が検出された確率(被写体検出の確率)が出力される。
図28の例では、最終的な演算結果データとして、犬が検出された確率は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)を用いたソフトウエア処理で実装される。しかし、CNNの高速処理を実現するためには処理の重い部分をハードウェアで構成する必要がある。このようなハードウェア実装の例が、非特許文献1に記載されている。非特許文献1は、FPGA(Field-Programmable Gate Array)プラットフォームをベースとしたディープCNN用のアクセラレータを開示している。
【先行技術文献】
【非特許文献】
【0016】
【文献】Optimizing FPGA-based Accelerator Design FOR Deep Convolutional Neural Networks, Proceedings OF the 2015 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays
【発明の概要】
【発明が解決しようとする課題】
【0017】
CNNの浅い層では、iFM数(iFMの面数)が回路の入力並列度Nより極端に少なくなることがある。この場合、使わない回路が動作しないように電源遮断するなどで消費電力を削減することも考えられる。しかし、DeepLearningは大変重い処理であるから、搭載されている回路をできるだけ活用して処理時間を短くする方がより有効である。
【0018】
非特許文献1では、1層目のiFM数が3個であるのに対しFPGAのコンフィギュレーションは7個である例が記載されている。非特許文献1では、具体的にどのように動作させるかについての言及がないが、仮に7個のコンフィギュレーションのうちの3個しか使用していないとすると、搭載されている回路の半分以上が動作していないことになる。
【0019】
出力側についても、非特許文献1では、2層目のoFM数が20であるのに対しFPGAのコンフィギュレーションは64である例が記載されている。具体的にどのように動作させるかについての言及はないが、仮に64のうち20しか使っていないとすると、搭載されている回路の2/3以上が動作していないことになる。
【0020】
また、プーリング処理では、例えば2×2の最大値プーリング処理の場合、入力された4個のデータから最大値を1個だけ抽出する。これによりデータレートは1/4となり、処理後のFMサイズは縦・横半分のサイズになる。しかし設定によっては、同じ位置データを重複処理して、結果的にデータレートが変化せず、FMのサイズが変化しないことがある。これを他の層と同じように画一的に処理すると、演算部での処理時間が4倍に増えることになり、動画対応のような高速処理をする上で問題となる。非特許文献1では、このような速度低下への対策について言及していない。
【0021】
上述の事情を踏まえ、本発明は、畳み込みニューラルネットワークを用いたディープラーニングを行う演算処理装置において、プーリング処理の実行に必要なデータを並列処理で実行できるようにすることで、処理時間を短縮する演算処理装置を提供することを目的とする。
【課題を解決するための手段】
【0022】
本発明の第一の態様は、Convolution処理とFullConnect処理を行うディープラーニング用の演算処理装置であって、入力特徴量マップデータを格納するデータ格納メモリと、前記データ格納メモリを管理および制御するデータ格納メモリ制御部とを有するデータ格納メモリ管理部と;フィルタ係数を格納するフィルタ係数格納メモリと、前記フィルタ係数格納メモリを管理および制御するフィルタ係数格納メモリ制御部とを有するフィルタ係数格納メモリ管理部と;前記入力特徴量マップデータおよび出力特徴量マップデータを格納する外部メモリと;前記外部メモリから、前記入力特徴量マップデータを取得するデータ入力部と;前記外部メモリから、前記フィルタ係数を取得するフィルタ係数入力部と;入力N並列、出力M並列の構成(N、M≧1の正数)で、前記データ格納メモリから前記入力特徴量マップデータを取得し、前記フィルタ係数格納メモリから前記フィルタ係数を取得して、フィルタ処理、累積加算処理、非線形演算処理およびプーリング処理を行う演算部と;前記演算部から出力されるM並列のデータを連結して、出力特徴量マップデータとして前記外部メモリに出力するデータ出力部と;前記演算処理装置内を制御するコントローラと;を有し、前記演算部は、N並列でフィルタ処理を実行するフィルタ演算部と、前記フィルタ演算部のN/k個の演算結果を累積加算するk個の第1加算器と、前記第1加算器の後段に設けられ、前記第1加算器の出力を分岐して、第1処理側と第2処理側とで切り替えるセレクタと、前記セレクタが前記第1処理側に分岐した場合に、k個の前記第1加算器の累積加算処理の結果を累積加算する第2加算器と、前記第2加算器の累積加算処理の結果を後段で累積加算する第3加算器と、前記第3加算器の累積加算処理の結果に対して非線形演算処理を行う第1非線形変換部と、前記第1非線形変換部の処理結果に対してプーリング処理を行う第1プーリング処理部と、前記セレクタが前記第2処理側に分岐した場合に、前記第1加算器の累積加算処理の結果に対して非線形演算処理を行う第2非線形変換部と、前記第2非線形変換部で非線形処理された、k個の前記第1加算器の累積加算処理の結果が入力され、同時に入力されたデータに対してプーリング処理を行う第2プーリング処理部と、前記演算部内を制御する演算制御部と、を有し、前記データ格納メモリ管理部は、前記演算部に入力される前記入力特徴量マップデータの数≦N/kの時に、k個の異なるデータ格納メモリに同じデータを書き込み、前記演算制御部は、前記入力特徴量マップデータの数≦N/kの時は、前記セレクタが前記第2処理側に分岐するよう制御する演算処理装置である。
【0023】
前記データ格納メモリ制御部は、第1モードにおいて、前記データ格納メモリへの書き込み時に、k個の異なるデータ格納メモリの同一アドレスに同一のデータを書き込むよう制御し、前記データ格納メモリをN/k個ずつk個のグループに分類し、前記データ格納メモリからの読み出し時に、各グループでアドレスを変えて、互いに縦および/または横に数画素ずれたアドレスにアクセスするよう制御してもよい。
【0024】
前記データ格納メモリ制御部は、第2モードにおいて、前記データ格納メモリへの書き込み時に、k個の異なるデータ格納メモリにおいて、同一データを、縦および/または横に数画素ずれたアドレスに書き込むように制御し、前記データ格納メモリからの読み出し時に、同一アドレスで全ての前記データ格納メモリにアクセスしてもよい。
【0025】
本発明の第一の態様は、Convolution処理とFullConnect処理を行うディープラーニング用の演算処理装置であって、入力特徴量マップデータを格納するデータ格納メモリと、前記データ格納メモリを管理および制御するデータ格納メモリ制御部とを有するデータ格納メモリ管理部と;フィルタ係数を格納するフィルタ係数格納メモリと、前記フィルタ係数格納メモリを管理および制御するフィルタ係数格納メモリ制御部とを有するフィルタ係数格納メモリ管理部と;前記入力特徴量マップデータおよび出力特徴量マップデータを格納する外部メモリと;前記外部メモリから、前記入力特徴量マップデータを取得するデータ入力部と;前記外部メモリから、前記フィルタ係数を取得するフィルタ係数入力部と;入力N並列、出力M並列の構成(N、M≧1の正数)で、前記データ格納メモリから前記入力特徴量マップデータを取得し、前記フィルタ係数格納メモリから前記フィルタ係数を取得して、フィルタ処理、累積加算処理、非線形演算処理およびプーリング処理を行う演算部と;前記演算部から出力されるM並列のデータを連結して、出力特徴量マップデータとして前記外部メモリに出力するデータ出力部と;前記演算処理装置内を制御するコントローラと;を有し、前記演算部は、N並列でフィルタ処理を実行するフィルタ演算部と、前記フィルタ演算部のN/k個の演算結果を累積加算するk個の第1加算器と、前記第1加算器の後段に設けられ、前記第1加算器の出力を分岐して、第1処理側と第2処理側とで切り替えるセレクタと、前記セレクタが前記第1処理側に分岐した場合に、k個の前記第1加算器の累積加算処理の結果を累積加算する第2加算器と、前記第2加算器の累積加算処理の結果を後段で累積加算する第3加算器と、前記第3加算器の累積加算処理の結果に対して非線形演算処理を行う第1非線形変換部と、前記第1非線形変換部の処理結果に対してプーリング処理を行う第1プーリング処理部と、前記セレクタが前記第2処理側に分岐した場合に、前記第1加算器の累積加算処理の結果に対してプーリング処理を行う第2プーリング処理部と、前記第2プーリング処理部の後段に設けられ、前記第2プーリング処理部でプーリング処理された前記第1加算器の累積加算処理の結果に対して非線演算処理を行う第2線形変換部と、前記演算部内を制御する演算制御部と、を有し、前記データ格納メモリ管理部は、前記演算部に入力される前記入力特徴量マップデータの数≦N/kの時に、k個の異なるデータ格納メモリに同じデータを書き込み、前記演算制御部は、前記入力特徴量マップデータの数≦N/kの時は、前記セレクタが前記第2処理側に分岐するよう制御する演算処理装置である。
前記第1非線形変換部と前記第2線形変換部は同一の構成であってもよく、前記第1処理側と前記第2処理側で共用されていてもよい。
【0026】
前記第2プーリング処理部は、走査方向に対して垂直方向と水平方向とで別々に、プーリング処理を行い、前記垂直方向のプーリング処理および前記水平方向のプーリング処理は、各々、トリガ信号が入力されるタイミングで実行され、前記演算制御部は、予め設定したタイミングで、前記トリガ信号を出力してもよい。
【発明の効果】
【0027】
本発明の各態様によれば、畳み込みニューラルネットワークを用いたディープラーニングを行う演算処理装置において、プーリング処理の実行に必要なデータを並列処理で実行できるようにすることで、処理時間を短縮することができる。
【図面の簡単な説明】
【0028】
【
図1】Convolution処理によって、入力特徴量マップ(iFM)から出力特徴量マップ(oFM)を得るイメージ図である。
【
図2】本発明の実施形態に係る演算処理装置の全体構成を示すブロック図である。
【
図3】本発明の第1実施形態に係る演算処理装置の演算部の構成を示す図である。
【
図5】本発明の第1実施形態の変形例に係る演算処理装置の演算部の構成を示す図である。
【
図6】本発明の第1実施形態に係る演算処理装置のIBUF(データ格納メモリ)管理部の構成を示す図である。
【
図7】本発明の第1実施形態に係る演算処理装置のIBUF管理部のwe生成部分を詳細に示した図である。
【
図8】非線形変換が単調増加関数である場合の、非線形変換部の入力と出力の関係を示す図である。
【
図9】本発明の第1実施形態の変形例に係る演算処理装置の演算部の構成を示す図である。
【
図10】本発明の第1実施形態の変形例に係る演算処理装置の演算部の構成を示す図である。
【
図11】本発明の第1実施形態の変形例に係る演算処理装置の演算部の第1プーリング処理部の構成を示す図である。
【
図12】本発明の第1実施形態の変形例に係る演算処理装置のIBUF管理部のwe生成部分を詳細に示した図である。
【
図13A】通常のプーリング処理における、iFMの処理過程を示す図である。
【
図13B】Yolo_tiny_v2の6層目のプーリング処理における、iFMの処理過程を示す図である。
【
図14】本実施形態の第2実施形態に係る演算処理装置の第1プーリング処理部の構成を示す図である。
【
図15】非線形変換処理後のFMのピクセルイメージを示す図である。
【
図16】通常のプーリング処理で、操作方向を水平方向とした場合の、第1プーリング処理部の実行波形を示す図である。
【
図17】stride=1時の、操作方向を水平方向とした場合の、第2プーリング処理部の実行波形を示す図である。
【
図18】本実施形態の第2実施形態に係る演算処理装置の、第1プーリング処理部の実行波形を示す図である。
【
図19】本実施形態の第3実施形態に係る演算処理装置において、2個の出力チャネルグループで分担して、1個のoFMを作成するイメージ図である。
【
図20】本実施形態の第3実施形態に係る演算処理装置のIBUF管理部の出力側の構成を示す図である。
【
図21】本実施形態の第3実施形態に係る演算処理装置のIBUF管理部の、DBUFodd、DBUFevenにおけるデータの格納イメージを示す図である。
【
図22】本実施形態の第3実施形態に係る演算処理装置において、2個の出力チャネルグループで処理するiFM上の位置の違いのイメージを示す図である。
【
図23A】通常処理時の、演算部から出力されるoFMデータのイメージ図である。
【
図23B】1個のoFMを2個の出力チャネルグループでライン分担して処理した場合の、演算部から出力されるoFMデータのイメージ図である。
【
図24】通常処理時の、k層目の処理から(k+1)層目の処理への流れを示す図である。
【
図25】ライン分担処理時の、k層目の処理から(k+1)層目の処理への流れを示す図である。
【
図26A】ライン分担処理時の、IBUFへの具体的なデータの書き込みイメージを示す図である。
【
図26B】領域分担処理時の、IBUFへの具体的なデータの書き込みイメージを示す図である。
【
図27】本実施形態の第3実施形態に係る演算処理装置のIBUF管理部の全体構成を示す図である。
【
図28】CNNを用いたディープラーニングによる画像認識の処理の流れを示す図である。
【
図29】従来技術に係るConvolution処理の流れを示す図である。
【発明を実施するための形態】
【0029】
本発明の実施形態について、図面を用いて説明する。まず、本発明の実施形態の構成を採用する背景について説明する。
【0030】
図1は、Convolution処理によって、入力特徴量マップ(iFM)から出力特徴量マップ(oFM)を得るイメージ図である。Convolution処理は、入力される全てのiFMデータに異なるフィルタ係数をかけ(フィルタ処理)、それらを全て累積加算し、非線形変換、プーリング(縮小処理)などの処理を施すことにより、oFMデータを得る。oFMデータの1ピクセル(1画素)を計算するのに必要な情報として、出力(oFMの1ピクセル)に対応するiFMデータの座標の近傍にある全てのピクセルの情報(iFMデータおよびフィルタ係数)が必要である。
【0031】
Convolution処理は、入力N並列(Nは1以上の正数)、すなわちiFM数(iFMの面数)=Nであり、N次元の入力データが並列して処理される(入力N並列)。また、出力M並列(Mは1以上の正数)、すなわちoFM数(oFMの面数)=Mであり、M次元のデータが並列して出力される(出力M並列)。
【0032】
(第1実施形態)
次に、本発明の第1実施形態について、図面を用いて説明する。
図2は、本実施形態に係る演算処理装置の全体構成を示すブロック図である。演算処理装置1は、コントローラ2と、データ入力部3と、フィルタ係数入力部4と、IBUF(データ格納メモリ)管理部5と、WBUF(フィルタ係数格納メモリ)管理部6と、演算部(演算ブロック)7と、データ出力部8を備える。データ入力部3と、フィルタ係数入力部4と、データ出力部8は、バス10を介して、DRAM(外部メモリ)9と接続されている。演算処理装置1は、入力特徴量マップ(iFM)から出力特徴量マップ(oFM)を生成する。
【0033】
IBUF管理部5は、入力特徴量マップ(iFM)データ格納用のメモリ(データ格納メモリ、IBUF)と、データ格納メモリの管理・制御回路(データ格納メモリ制御部)を有する。IBUFは、それぞれが複数のSRAMから構成される。
【0034】
IBUF管理部5は、入力データ(iFMデータ)中の有効データ数をカウントして座標に変換し、さらにそれをIBUFアドレス(IBUFにおけるアドレス)に変換し、データをIBUFに格納するとともに、所定の方法でiFMデータをIBUFから取り出す。
【0035】
WBUF管理部6は、フィルタ係数格納用のメモリ(フィルタ係数格納メモリ、WBUF)と、フィルタ係数格納メモリの管理・制御回路(フィルタ係数格納メモリ制御部)を有する。WBUF管理部6は、IBUF管理部5のステータスを参照して、IBUF管理部5から取り出すデータに対応するフィルタ係数をWBUFから取り出す。
【0036】
DRAM9は、iFMデータ、oFMデータおよびフィルタ係数を格納する。データ入力部3は、DRAM9から所定の方法で、入力特徴量マップ(iFM)を取得し、IBUF(データ格納メモリ)管理部5に渡す。データ出力部8は、DRAM9に所定の方法で、出力特徴量マップ(oFM)データを書き出す。具体的には、データ出力部8は、演算部7から出力されたM並列のデータを連結してDRAM9に出力する。フィルタ係数入力部4は、DRAM9から所定の方法で、フィルタ係数を取得し、WBUF(フィルタ係数格納メモリ)管理部6に渡す。
【0037】
演算部7は、IBUF(データ格納メモリ)管理部5からデータ、WBUF(フィルタ係数格納メモリ)管理部6からフィルタ係数を取得して、フィルタ処理・累積加算・非線形演算・プーリング処理等のデータ処理を行う。演算部7がデータ処理を施したデータ(累積加算結果)は、データ出力部8を介して、DRAM9に格納される。コントローラ2は、回路全体の制御を行う。
【0038】
CNNでは、複数の処理層において、必要な層数分の処理が繰り返し実行される。そして、演算処理装置1は最終出力データとして被写体推定結果を出力し、この最終出力データを、プロセッサ(回路でもよい)を用いて処理することにより被写体推定結果を得る。
【0039】
図3は、本実施形態に係る演算処理装置の演算部7の構成を示す図である。演算部7の入力チャネル数はN(Nは1以上の正数)であり、N次元の入力データが並列して処理される(入力N並列)。演算部7の出力チャネル数はM(Mは1以上の正数)であり、M次元のデータが並列して出力される(出力M並列)。
【0040】
1つの層(面)において、iFMデータ(d_0~d_15)とフィルタ係数(k_0~k_15)が入力され、1個のoFMデータを出力する。この処理がM層(M面)、並行して行われ、M個のoFMデータ(oCh_0~oCh_M-1)が出力される。
【0041】
このように、演算部7は、入力チャネル数をN、出力チャネル数をMとして、並列度がN×Mとなる構成を取る。入力チャネル数Nおよび出力チャネル数Mの大きさは、CNNの大きさに応じて設定(変更)することができるので、処理性能や回路規模を勘案して適切に設定する。
【0042】
本実施形態は、演算部7が演算可能な入力チャネル数Nよりも、実際に演算部7に入力されるiFM数が少ない場合に、未稼働回路を活用することで演算処理の高速化を図ったものである。なお、分かりやすくするため、以下の条件で説明する。
・入力並列度N=16
・出力並列度M=16
・iFM数=3(RGBの3面)
・oFM数=16
・フィルタサイズ 3×3
・プーリング実行単位(プーリングサイズ) k=2×2
【0043】
この場合、1つのチャネルグループで1つのiFMを処理しようとすると、入力16チャネルのうち13チャネルが未稼働となってしまう。そこで、未稼働回路を有効活用する。
【0044】
演算部7は、演算部内各部の制御を行う演算制御部71を備える。また、演算部7は、各層(面)ごとに、フィルタ演算部72と、k個の第1加算器81と、セレクタ82と、第2加算器83と、第3加算器74と、FF(フリップフロップ)75と、第1非線形変換部76と、第1プーリング処理部77と、第2非線形変換部86と、第2プーリング処理部87とを備える。各層(面)ごとに同じ回路が存在し、このような各(面)がM個ある。
【0045】
演算制御部71が、演算部7の前段に対してリクエストを発行することにより、所定のデータがフィルタ演算部72に入力される。フィルタ演算部72は、内部で乗算器と加算器がN並列で同時に実行できるように構成されており、入力データのフィルタ処理を行い、フィルタ処理の結果をN並列で出力する。
【0046】
第1加算器81の各々は、フィルタ演算部72におけるN/k個のフィルタ処理結果を累積加算する。
図3の例では、N=16、k=4なので、第1加算器81の各々は、16/4=4個のフィルタ処理結果を累積加算している。
【0047】
第1加算器81の後段にはセレクタ82が設けられ、第1加算器81の出力を分岐して切り替える。切り替えの条件は、演算部7に入力されるiFM数とN/kのどちらが大きいかによる。なお、
図3の例では、セレクタ82は各第1加算器81に対応してk個あるが、第1加算器81の出力を1つのセレクタ82で共通に切り替えるように構成してもよい。
【0048】
iFM数>N/kの場合、演算制御部71は、通常処理(第1処理)を行うようにセレクタ82を切り替える設定・制御を行う。具体的には、第1加算器81の出力が、第2加算器83に入力されるようにセレクタ82が切り替えられる。第2加算器83は、入力されたk個の第1加算器81の累積加算処理の結果を累積加算する。すなわち、通常処理時には、第1加算器81が、N個(
図3では16個)の入力チャネルをk個ずつ(
図3では4個ずつ)に分けて1回目の加算を行い、第2加算器83が2回目の加算で全入力分の加算を行う。
【0049】
第3加算器74は、時分割で入力される第2加算器83の累積加算処理の結果を後段で累積加算する。第3加算器74の後段には、累積加算の結果を保持するためのFF75が設けられている。
【0050】
第1非線形変換部76は、第3加算器74およびFF75での累積加算の結果に対して、Activate関数などによる非線形演算処理を行う。具体的な実装は特に規定しないが、例えば折れ線近似により非線形演算処理を行う。
【0051】
第1プーリング処理部77は、第1非線形変換部76から入力された複数のデータの中から最大値を選択出力(最大値プーリング)する、平均値を算出(平均値プーリング)する、などのプーリング処理を行う。なお、第1非線形変換部76と第1プーリング処理部77における処理は、演算制御部71により省略することができる。
【0052】
iFM数≦N/kの場合、演算制御部71は、並列処理(第2処理)を行うようにセレクタ82を切り替える設定・制御を行う。ここで、並列処理とは、未稼働回路を活用することで、プーリング処理の実行に必要なデータを通常処理と並列で実行する処理のことを言う。これにより、処理時間を短縮し、演算処理の高速化を図ることができる。並列処理を行うことが選択された場合、第1加算器81の出力が、第2非線形変換部86に入力されるようにセレクタ82が切り替えられる。
【0053】
第2非線形変換部86は、k個の第1加算器81の累積加算処理の結果に対してActivate関数などの非線形変換(非線形処理)を行う。第2プーリング処理部87は、第2非線形変換部86で非線形処理された、k個の第1加算器81の累積加算処理の結果が入力され、同時に入力されたデータに対してプーリング処理を行う。
【0054】
すなわち、iFM数が少ない時は、第1加算器81の出力が並列処理側に送られて、個別に非線形変換が施された後、k個(
図3では4個)のデータ同時入力のプーリング処理が実行される。プーリング処理は、平均値プーリングの場合は加算してk(
図3では4)で割り(2ビットシフト)、maxプーリングの場合は最大値を取得する。
【0055】
図4は、プーリング処理のイメージを示す図である。入力データが4×4ピクセル、フィルタサイズが3×3ピクセルの場合、フィルタ処理によって、3×3ピクセルのデータが4個作られる。プーリング実行単位k=2×2の場合、フィルタ処理後の4個のデータが揃ってプーリング処理が1回実行される。従って、4個(一般的にはk個)のデータを同時に演算できれば、処理時間を短縮し、演算処理の高速化を図ることができる。上述の
図3の構成によれば、第2非線形変換部86が4個(一般的にはk個)あるので、プーリング処理の実行に必要なデータを通常処理と並列で実行することができる。したがって、入力チャネルが空いている時、通常処理と並列してプーリングに必要なデータ生成を一度に実行することができる。
【0056】
(変形例)
なお、
図3の上側(並列処理側)と下側(通常処理側)は排他利用されるので、セレクタ82で切り替えることにより、第1非線形変換部76を第2非線形変換部86として利用できる構成にしてもよい。
図5はこのような演算部7の構成を示す図である。
【0057】
4個あるセレクタ82のうちの1個(セレクタ82´)は、セレクタ84を介して第1非線形変換部76の入力に接続している。そして第1非線形変換部76の出力はセレクタ85に接続し、出力先を第1プーリング処理部77と第2プーリング処理部87とから選択できるようにしている。
【0058】
iFM数>N/kの場合、演算制御部71は、通常処理(第1処理)を行うようにセレクタ82を切り替える設定・制御を行う。すなわち、第1加算器81の出力が、第2加算器83に入力されるようにセレクタ82が切り替えられる。第2加算器83は、入力されたk個の第1加算器81の累積加算処理の結果を累積加算し、第3加算器74は、時分割で入力される第2加算器83の累積加算処理の結果を後段で累積加算する。第3加算器74の後段には、累積加算の結果を保持するためのFF75が設けられている。
【0059】
FF75と第1非線形変換部76の間にはセレクタ84が設けられており、第1非線形変換部76の入力を、通常処理側と並列処理側とで切り替えることができる。通常処理の場合は、第1非線形変換部76は、第3加算器74およびFF75での累積加算の結果に対して、Activate関数などによる非線形演算処理を行う。
【0060】
第1非線形変換部76の後段にはセレクタ85が設けられており、第1非線形変換部76の出力を、通常処理側と並列処理側とで切り替えることができる。通常処理の場合は、第1非線形変換部76によって処理されたデータは第1プーリング処理部77に入力される。第1プーリング処理部77は、第1非線形変換部76から入力された複数のデータの中から最大値を選択出力(最大値プーリング)する、平均値を算出(平均値プーリング)する、などのプーリング処理を行う。
【0061】
iFM数≦N/kの場合、演算制御部71は、並列処理(第2処理)を行うようにセレクタ82を切り替える設定・制御を行う。すなわち、第1加算器81の出力が、第2非線形変換部86に入力されるようにセレクタ82が切り替えられる。このとき、4個あるセレクタ82のうちの1個(セレクタ82´)は、セレクタ84を介して第1非線形変換部76の入力に接続している。すなわち4個ある第1加算器81のうちの1個(第1加算器81´)の出力は、第1非線形変換部76に入力される。
【0062】
第2非線形変換部86は、(k-1)個(
図5では3個)の第1加算器81の累積加算処理の結果に対してActivate関数などの非線形変換(非線形処理)を行う。同時に、第1非線形変換部76は、第1加算器81´の累積加算処理の結果に対してActivate関数などの非線形変換(非線形処理)を行う。そして、第1非線形変換部76の出力が、第2プーリング処理部87に入力されるようにセレクタ85が切り替えられる。
【0063】
第2プーリング処理部87は、第2非線形変換部86および第1非線形変換部76で非線形処理された、k個(
図5では4個)の第1加算器81(第1加算器81´を含む)の累積加算処理の結果が入力され、同時に入力されたデータに対してプーリング処理を行う。このような構成により、第2非線形変換部86の数を1個減らすことができ、回路構成を小さくすることができる。
【0064】
(IBUFへのデータの格納・読み出し方法)
次に、本実施形態におけるIBUF(データ格納メモリ)へのデータの格納・読み出し方法について説明する。
図6は、本実施形態のIBUF(データ格納メモリ)管理部5の構成を示す図である。
【0065】
IBUF管理部5は、IBUF(データ格納メモリ)にデータを格納するIBUF格納部51と、複数のIBUFが配置されているIBUFアレイ52と、IBUFからデータを読み出すIBUF読み出し部53とを備える。IBUF格納部51とIBUF読み出し部53は、前述のデータ格納メモリ制御部に含まれる。入力N並列の場合、N個のIBUFを使用する。例えば、
図6に示すように、入力並列度N=16の場合、16個のIBUF(IBUF0~IBUF15)を使用する。
【0066】
IBUF格納部51は、iFMデータが入力されると、入力データ中の有効データ数をカウントして座標に変換し(座標生成)、さらにそれをIBUFアドレスに変換し(アドレス変換)、iFMデータ(data)とともにIBUFに格納する。
【0067】
IBUF管理部5のデータ格納メモリ制御部は、IBUFへの書き込みおよびIBUFからの読み出しの制御を行うが、この制御にはいくつかのモードがある。以下は、1つのモード(第1モード)の場合の制御である。IBUF格納部51は、iFM数≦N/kの場合、IBUFをN/k個ずつk個のグループに分類し、IBUFへの書き込み時に、別々のグループに属するk個の異なるIBUFの同一アドレスに同一のデータを書き込む。
【0068】
例えば、N=16、k=4の場合、IBUF格納部51は、IBUF(IBUF0~IBUF15)を以下の4グループに分ける。
・IBUF0~3
・IBUF4~7
・IBUF8~11
・IBUF12~15
【0069】
そして、IBUF格納部51は、IBUFへの書き込み時に、別々のグループに属する4個のIBUF(例えばIBUF0、IBUF4、IBUF8、IBUF12)の同一アドレスに同一のデータを書き込む。書き込みは、mode信号によりweの生成を切り替えることで実現できる。
図7は、
図6のIBUF格納部51のwe生成部分を詳細に示した図である。これにより、IBUF0~3と同じデータがIBUF4~7、IBUF8~11、IBUF12~15に複製される。
【0070】
IBUF読み出し部53は、IBUFからの読み出し時に、縦および/または横に1画素(または数画素)ずれた部分を読み出す。これは、データアクセスの際に、各グループでアドレッシングを変えて、互いに縦および/または横に数画素ずれたアドレスにアクセスすることで実現できる。例えば、IBUF0~3、IBUF4~7、IBUF8~11、IBUF12~15のそれぞれに1本ずつアドレスを生成することで、
図4の左のように縦および/または横に1画素ずれた位置からデータを読み出すことができる。
【0071】
(IBUFへのデータの格納・読み出し方法の変形例)
IBUFへのデータの格納・読み出し方法の別の例について説明する。本例は、上述の第1モードとは別のモード(第2モード)の場合の制御である。IBUF格納部51は、iFM数≦N/kの場合、IBUFをN/k個ずつk個のグループに分類する。そして、IBUF格納部51は、IBUFへの書き込み時に、別々のグループに属するk個の異なるIBUFにおいて、同一のデータを、縦および/または横に数画素(例えば1画素)ずれたアドレスに書き込む。すなわち、各グループの同一アドレスに数画素(例えば1画素)ずれたデータが格納されるように書き込む。
【0072】
IBUF読み出し部53は、IBUFからの読み出し時に、アクセスするアドレスを変えることはせず、全てのIBUFに同一アドレスでアクセスする。同一アドレスから読み出すことができるので、読み出しが楽になる。
【0073】
書き込み時のwe生成については上述の例と同様であり、書き込むアドレスをIBUF0~3、IBUF4~7、IBUF8~11、IBUF12~15で1画素ずれるように生成する。このようにすることで、読み出し時のアドレスは共通化できる。
【0074】
以上は入力16並列の場合で説明したが、それ以上の入力並列度である場合、例えば入力32並列で構成されていた場合は、プーリング処理を一度に実行できる3ch×4並列を2セット持つことができるので、さらに倍速で演算可能となる。あるいは、プーリングサイズが3×3になっても、3ch×9並列の構成として9並列で3×3プーリングを一度に実施するようにも構成することができる。
【0075】
(非線形処理の変形例)
非線形処理は、通常、Sigmoid/ReLU/Tanhなどの活性化関数の処理部であるが、これらはほぼ単調増加関数である。
図8は、非線形変換f(x)が単調増加関数である場合の、非線形変換部の入力(x1~x4)と出力(f(x1)~f(x4))の関係を示す図である。
【0076】
プーリング処理が最大値プーリングである場合を考える。この場合、非線形処理後の結果(f(x1)~f(x4))に対してプーリング処理する場合、f(x1)~f(x4)のうちから最大のf(x4)を出力する。一方、先にプーリング処理してから非線形処理する場合は、x1~x4のうちの最大のx4に対して非線形処理を行うのでf(x4)を出力する。すなわち、以下の式が成立し、結果は変わらない。
max(f(x1),f(x2),f(x3),f(x4))=f(max(x1,x2,x3,x4))
【0077】
すなわち、非線形変換fが単調増加関数であれば、最大値プーリング処理と非線形変換fを入れ替え可能である。従って、非線形変換特性が単調増加関数で、かつプーリング処理が最大値プーリング処理のみである、という条件が満たされていれば、非線形処理はプーリング処理後の1つのデータに対して行えば良いので、回路規模がさらに削減できる。
【0078】
図9および
図10は、このように、非線形処理とプーリング処理の順序を入れ替えた、演算部7の構成を示す図である。
図9では、並列処理側パスのプーリング処理(第2プーリング処理部87)と非線形変換の順序を入れ替え、さらに並列処理側パスと通常処理側パスが排他動作することを利用して、通常処理側の非線形変換部76を、並列処理と通常処理とで共用している。具体的には、並列処理側の第2プーリング処理部87の出力と通常処理側のFF75の出力とが、セレクタ88で切り替えられて、非線形変換部76に入力される。このような構成にすることで、最大値抽出回路が1個増えるだけで、処理が4倍速となる。
【0079】
非線形変換部76を共用しない場合は、例えば
図3において、第2非線形変換部86と第2プーリング処理部87の順序を入れ替え、
図10に示すように、第2プーリング処理部87の後段に第2非線形変換部86が設けられるようにすればよい。
【0080】
(プーリング処理の変形例)
以上述べてきた方法は、「入力並列度N≧iFM数×プーリングサイズ」を満たすので並列実行可能である。しかし、iFM数がもう少し増えて、「入力並列度N<iFM数×プーリングサイズ」となった場合は、対応できない。例えば、N=16、iFM数=8(プーリングサイズは2×2)の場合、16<8×2×2=32となり、以上述べてきた方法では対応できず、並列実行は不可能である。しかし、プーリング処理を1度に行うのでなく、垂直方向・水平方向に分けて数サイクルで実行することで、「入力並列度N<iFM数×プーリングサイズ」の場合も並列実行可能となる。
【0081】
図11は、走査方向に対して垂直方向・水平方向に別々にプーリング処理する場合の、第2プーリング処理部87の構成を示す図である。なお、演算部7全体の構成は
図9に示すものであるとする。
【0082】
iFM数≦4(一般的にはプーリングサイズk)の場合、プーリング処理は、
図11に示す第2プーリング処理部87内の上側のパスを通り、以上述べてきた方法と同じプーリング処理がなされる。
【0083】
4<iFM数≦8の場合、プーリング処理は、
図11の第2プーリング処理部87内の下側のパスを通る。すなわち、走査方向に対して垂直方向・水平方向に別々にプーリング処理がなされる。なお、同時入力されるデータは垂直方向・水平方向のどちらか1方向のみであり、数サイクルかけてプーリング処理に必要なデータが全て入力される。前記垂直方向のプーリング処理および前記水平方向のプーリング処理は、各々、トリガ信号が入力されるタイミングで実行される。演算制御部71は、予め設定したタイミングで、垂直プーリング処理および水平プーリング処理を実行するトリガ信号を出力する。
【0084】
第2プーリング処理部87の4個の入力ポートはそれぞれFM4面分の加算結果であり、このうちの2本ずつを加算するので、垂直プーリング処理直前の2つのポートはFM8面分の加算結果となる。このような構成で垂直方向・水平方向にプーリング処理することで、最大8面までのFMに対して2並列で実行可能となる。
【0085】
なお、4<iFM数≦8の場合は、IBUF0~7のデータがIBUF8~15に複製されることになるので、IBUF管理部5にも少々構造の追加が必要となる。
図12は、このようなIBUF管理部5のwe生成部分を詳細に示した図である。
【0086】
図11において、プーリング処理が最大値プーリングの場合は、垂直プーリング処理部/水平プーリング処理部の両方で最大値を抽出する。プーリング処理が平均値プーリングの場合は、垂直プーリング処理部/水平プーリング処理部では2つの加算結果を出すが、水平プーリング処理部は最後に4で除する(2ビットシフト)することで平均値を取得できる。
【0087】
(第2実施形態)
本発明の第2実施形態について説明する。第1実施形態では、回路として使われない部分を有効活用することによってCNNの処理速度を上げる提案をした。第2実施形態では、CNNのバリエーションの1つであるYolo_tiny_v2の6層目で発生する冗長な処理を回避して処理時間を短縮する。第2実施形態では、第2プーリング処理部87における処理が第1実施形態と異なるだけであり、それ以外の基本構成は第1実施形態と同じである。そこで、以下、第2プーリング処理部87における処理だけを説明する。
【0088】
図13Aおよび
図13Bは、フィルタ処理のカーネルサイズが3×3、プーリング処理単位が2×2の場合の、iFMの処理過程を示す図である。
図13Aは通常のプーリング処理を示し、重心移動量が2(stride=2)である。
図13BはYolo_tiny_v2の6層目におけるプーリング処理を示し、重心移動量が1(stride=1)である。
【0089】
通常は
図13Aに示すように、iFMは、フィルタ処理後の結果で見た時に、オーバーラップしないように処理される。プーリング処理単位が2×2であるので、プーリング処理によってiFMは縦横半分のサイズとなって出力される。これは、プーリング処理時のピクセル重心が、プーリング処理単位と同じ2ピクセル単位で動く事を前提とした時の動きである。重心移動量はstrideと言うパラメータで設定され、この例の場合はstride=2である。
【0090】
問題となるのは、設定上、stride=1があり得ることで、実際、Yolo_tiny_v2では6層目でstride=1となる。stride=1時の動作は
図13Bのようになり、フィルタ処理後の結果でオーバーラップが発生する。そのため、フィルタ処理自体は同じデータに対して数度実行することになり、処理時間の低下に繋がる。
【0091】
本実施形態ではこれを解決するために、プーリング処理を垂直方向・水平方向に分けて、別々に実行パルスを与える事で対応する。
図14は、本実施形態の第2プーリング処理部87の構成を示す図である。処理の走査方向に対して垂直方向と水平方向とで別々に、それぞれが演算制御部からの実行パルスを受けて、プーリング処理を実行するように動作する。すなわち、垂直方向のプーリング処理を行う垂直プーリング処理部と、水平方向のプーリング処理を行う水平プーリング処理部の各々は、トリガ(実行パルス)が入力されるタイミングでプーリング処理を行う。演算制御部71は、予め設定したタイミングで、水平プーリング処理および垂直プーリング処理を実行するトリガ信号を出力する。
【0092】
具体的には、以下のようにプーリング処理が行われる。
図15は、非線形変換後(フィルタ処理後)のFMのピクセルイメージを示す図である。
図16は、通常のプーリング処理(stride=2)で、操作方向を水平方向とした場合の、第2プーリング処理部87の実行波形を示す図である。
図15に示すiFMデータが
図16に示すように第2プーリング処理部87に順次入力され、順次プーリング処理が実行される。
【0093】
プーリング処理は、最大値プーリングの場合は最大値をとっていき、平均値プーリングの場合は加算して全部終わったら画素数で割る。例えば、
図16において、垂直プーリングの結果p1は、最大値プーリングの場合D11とD21のうち大きい方を選択し、平均値プーリングの場合D11+D21を計算する。水平プーリングの結果o1は、最大値プーリングの場合p1とp2のうち大きい方を選択し、平均値プーリングの場合(p1+p2)÷4を計算する
【0094】
図17は、stride=1時の、操作方向を水平方向とした場合の、第2プーリング処理部87の実行波形を示す図である。
図16と比較して、水平プーリングの実行パルス間隔が半分になっている。
【0095】
このようにして、stride=1であってもパイプライン処理的にプーリングを実行することができる。また、垂直方向・水平方向のプーリング処理を分けることで一度に処理するデータ数が減るので、待ち合わせ用のFFの数が削減でき、最大値算出(もしくは全加算)回路も小さくなり、回路規模を小さくできる。
【0096】
また、このようにプーリング処理を制御するようにしておくと、例えばプーリングサイズが3×3でstride=2のような複雑な設定でも、待ち合わせのFF等を追加する必要があるが、容易に対応できる。
図18は、プーリングサイズが3×3でstride=2の場合の、第2プーリング処理部87の実行波形を示す図である。
【0097】
stride=1時、縦方向のオーバーラップを避けるためにラインメモリを設置して垂直プーリング結果を保持しておくことも可能であるが、1ライン分のメモリが必要となる。ラインメモリはFMサイズの上限を規定してしまうため、本明細書では今後考案される新規ネットワークへの対応も勘案して搭載していないが、問題がなければそのような改良も可能である。この場合、ラインメモリとその制御が追加されるだけなので図示は省略する。
【0098】
(第3実施形態)
本発明の第3実施形態について説明する。第1実施形態では、演算部の入力側に未使用の回路がある場合に、未使用部分を有効活用する方法を提案したが、第3実施形態は、演算部の出力側に未使用の回路がある場合に、未使用部分を有効活用する方法に関する。
【0099】
演算部の基本的な動きとしては、全てのiFMを入力として1個のoFMを生成するが、複数の出力チャネルグループで分担して1個のoFMを作成してもよい。出力並列度をMとして、例えば、oFM数=M/2の場合、1個のoFMを2個の出力チャネルグループで分担して作成することができる。
【0100】
図19は、2個の出力チャネルグループ(出力チャネルAと出力チャネルB)で分担して、1個のoFMを作成するイメージ図である。2個の出力チャネルグループによる分担の方法として、
図19の左の図は、oFMをライン単位(奇数ラインと偶数ライン)で分担する例(ライン分担)を示し、
図19の右の図は、oFMを左右の領域に分割して分担する例(領域分担)を示す。同様に、出力並列度をMとして、oFM数≦M/2の場合、1個のoFMを複数の領域に分割し、各領域を複数の出力チャネルグループで分担して処理することができる。
【0101】
このような処理を実行するには、IBUF読み出し部53でのデータの読み出しアドレスを適切に設定することで容易に対応できる。ただし、異なる2個の出力チャネルグループからの出力を合わせて1個のoFMデータが出力される。そのため、次の層での入力時には1個のFMデータとなるように、異なる2個の出力チャネルグループからの出力を統合できるフォーマットを定義する必要がある。
【0102】
以降の説明は、
図19の左の図のように、2個の出力チャネルグループでoFMの奇数ラインと偶数ラインを分担して処理する場合を例に行う。ただし、1個のoFMを分担する出力チャネルグループの数は2個に限定されず、3個や4個の出力チャネルグループで分担してもよい。
【0103】
図20は、本実施形態のIBUF(データ格納メモリ)管理部5の出力側の構成を示す図である。IBUF読み出し部53において、IBUFからデータをリードする時に、奇数ライン用のデータと偶数ライン用のデータを別個に用意する必要がある。そこで、データをいったん保存するためのDBUF57(第2のデータ格納メモリ)を用意し、まずはIBUFからDBUFにデータを転送する。DBUF57の前段の第1制御部56は、oFMを複数の領域に分割し、それぞれの領域を処理するために必要なデータを取り出してDBUF57に書き込む。奇数ライン用のデータはDBUFoddに保存され、偶数ライン用のデータはDBUFevenに保存される。
【0104】
ここで、出力並列度をMとして、M個の出力チャネルoCh.0~oCh.(M-1)のうち、出力チャネルoCh.0~oCh.(2/M-1)が前半の出力チャネルグループに属し、出力チャネルoCh.(2/M-1)~oCh.(M-1)が後半の出力チャネルグループに属するとする。そして、前半の出力チャネルグループがoFMの奇数ラインを処理し、後半の出力チャネルグループがoFMの偶数ラインを処理するとする。
【0105】
IBUF読み出し部53は、DBUFoddに保存されたデータを、前半の出力チャネルグループに、奇数ライン処理に必要なデータ(data_odd)として、転送する。同様に、IBUF読み出し部53は、DBUFevenに保存されたデータを、後半の出力チャネルグループに、偶数ライン処理に必要なデータ(data_even)として、転送する。
【0106】
図21は、DBUFodd、DBUFevenにおけるデータの格納イメージを示す図である。oFMの第1ライン目を生成するために必要なiFMは、iFM上で第1ラインと第2ラインの領域であり、oFMの第2ライン目を生成するために必要なiFMは、iFM上で第2ラインと第3ラインの領域である。すなわち、iFM上にオーバーラップする領域があるので、その部分はDBUFoddとDBUFevenの両方に格納される。
【0107】
各DBUF57の後段(
図20の第2制御部58)では、DBUF57に格納されたデータから、oFM1画素の生成に必要なデータを順次リードする。第2制御部58は、DBUF57から所定の方法でデータを取得する制御を行う。この読み出し制御により、前半の出力チャネルグループにはdata_oddが、後半の出力チャネルグループにはdata_evenが供給される。
【0108】
図22は、2個の出力チャネルグループで処理するiFM上の位置の違いのイメージを示す図である。
図22の左側は前半の出力チャネルグループで処理する位置を示し、
図22の右側は後半の出力チャネルグループで処理する位置を示す。
図22に示すように、前半の出力チャネルグループと後半の出力チャネルグループで1ラインずれた領域の処理を同時に行うことができる。
【0109】
次に、上述のような処理で演算部を経由して出力されるoFMデータについて説明する。
図23Aおよび
図23Bは、演算部から出力されるoFMデータのイメージ図である。
図23Aは、通常処理時、すなわち、1個のoFMを1個の出力チャネルグループで処理する場合を示す。出力並列度をMとして、1個のoFMはM枚のFM(oFM0、oFM1、oFM2、…)からなり、M個の出力チャネル(oCh.0、oCh.1、oCh.2、…)から各FMの同じ位置のデータが出力される。
【0110】
図23Bは、1個のoFMを2個の出力チャネルグループでライン分担して処理した場合を示す。
図23Bに示すように、前半の出力チャネルグループの出力チャネル(oCh.0、oCh.1、oCh.2、…、oCh.M/2-1)は各FMの同じ位置のデータを出力し、後半の出力チャネルグループの出力チャネル(oCh.M/2、oCh.M/2+1、oCh.M/2+2、…、oCh.M-1)は各FMの1ラインずれた位置のデータを出力する。このように、ライン分担で処理した場合、前半の出力チャネルグループと後半の出力チャネルグループが、同じoFM上の1ラインずれた位置のデータを出力していることになる。
【0111】
このように異なる2個の出力チャネルグループから出力されたoFMデータのフォーマットを、次の層((k+1)層目)で1個のiFMとして入力するため、(k+1)層目処理時に、データ入力部3に動作選択信号(mode)を入力して制御を切り替える。
【0112】
以降の説明では、さらに簡単化するために、入力並列度N=16、出力並列度M=16、oFM数=M/2=8とする。また、D(k)をoCh.kから出力されるデータと定義し、D0_16を全てのoCh.から出力されるデータ(D(0)~D(16-1))を連結したものと定義する。
【0113】
最初に、通常処理、すなわち、分担処理をしない場合について説明する。
図24は、通常処理時の、k層目の処理から(k+1)層目の処理への流れを示す図である。
図24では、k層目の演算部の出力は、D0_16の前半部分だけが有効で、D0_16の後半部分は未使用の状態となっている。(k+1)層目に、この状態のD0_16を入力することになる。D0_16を一度のバースト転送で取得できる場合は、未使用データを入力する事になるので転送効率が悪い。
【0114】
次に、ライン分担処理時について説明する。
図25は、ライン分担処理時の、k層目の処理から(k+1)層目の処理への流れを示す図である。(k+1)層目に入力されるD0_16Nでは、通常処理時に未使用であった後半部分にも前半部分と同じiFMデータ(1ライン下にずれた位置のデータ)がある。IBUF格納部に格納されたD0_16Nは、2つのデータに分けられて、別々にIBUFに出力される。
【0115】
図26Aおよび
図26Bは、IBUFへの具体的なデータの書き込みイメージを示す図である。
図26Aはライン分担処理時を示し、
図26Bは領域分担処理時を示す。
図26Aに示すように、ライン分担処理時は、1画素下方向にずれるようにアドレッシングされる。
図26Bに示すように、領域分担処理時は、1ラインの半分だけずれた位置関係なので、アドレッシングも半ライン分ずれることになる。
【0116】
図27は、本実施形態のIBUF管理部5の全体構成を示す図である。上述の処理を実現するために、IBUF格納部51は、モード判定して制御を変える制御部54とデータ保持・セレクタ部55を有する。制御部54は、同一サイクルで入力されるiFMを保持し、数サイクルに分けて同一IBUFに書き込むように制御するモードを持つ。これにより、oFM数≦M/2の時に処理を並列化して実行時間を短縮することができる。それ以外のIBUF格納部51内の構成は、
図6と同じである。また、IBUF読出部53において、通常処理時はDBUF57を経由せず、IBUFデータを直接取り出すパス(data2、req2)を使用する。
【0117】
このような構成により、1個のFMを複数の出力チャネルグループで同時処理し、次の層への入力時にそれらのデータを復元処理することが可能となり、処理時間が高速化できる。
【0118】
以上、本発明の実施形態について説明したが、本発明の技術範囲は上記実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲において構成要素の組み合わせを変えたり、各構成要素に種々の変更を加えたり、削除したりすることができる。
【0119】
各構成要素は、それぞれの構成要素に係る機能や処理を説明するためのものである。複数の構成要素に係る機能や処理を、1つの構成(回路)が同時に実現してもよい。
【0120】
各構成要素は、それぞれもしくは全体として、1個又は複数のプロセッサ、論理回路、メモリ、入出力インタフェース及びコンピュータ読み取り可能な記録媒体などからなるコンピュータで実現するようにしてもよい。その場合、各構成要素もしくは全体の機能を実現するためのプログラムを記録媒体に記録しておき、記録されたプログラムをコンピュータシステムに読み込ませ、実行することによって、上述した種々の機能や処理を実現してもよい。
【0121】
この場合、例えば、プロセッサは、CPU、DSP(Digital Signal Processor)、およびGPU(Graphics Processing Unit)の少なくとも1つである。例えば、論理回路は、ASIC(Application Specific Integrated Circuit)およびFPGA(Field-Programmable Gate Array)の少なくとも1つである。
【0122】
また、ここでいう「コンピュータシステム」とは、OSや周辺機器などのハードウェアを含むものであってもよい。また、「コンピュータシステム」は、WWWシステムを利用している場合であれば、ホームページ提供環境(あるいは表示環境)も含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、フラッシュメモリなどの書き込み可能な不揮発性メモリ、CD-ROMなどの可搬媒体、コンピュータシステムに内蔵されるハードディスクなどの記憶装置をいう。
【0123】
さらに「コンピュータ読み取り可能な記録媒体」とは、インターネットなどのネットワークや電話回線などの通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ(例えばDRAM(Dynamic Random Access Memory))のように、一定時間プログラムを保持しているものも含むものとする。
【0124】
また、上記プログラムは、このプログラムを記憶装置などに格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネットなどのネットワーク(通信網)や電話回線などの通信回線(通信線)のように情報を伝送する機能を有する媒体をいう。また、上記プログラムは、前述した機能の一部を実現するためのものであってもよい。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現するもの、いわゆる差分ファイル(差分プログラム)であってもよい。
【産業上の利用可能性】
【0125】
本発明は、畳み込みニューラルネットワークを用いたディープラーニングを行う演算処理装置に広く適用できる。
【符号の説明】
【0126】
1 演算処理装置
2 コントローラ
3 データ入力部
4 フィルタ係数入力部
5 IBUF管理部(データ格納メモリ管理部)
6 WBUF管理部(フィルタ係数格納メモリ管理部)
7 演算部
8 データ出力部
9 DRAM(外部メモリ)
10 バス
51 IBUF格納部(データ格納メモリ制御部)
52 IBUFアレイ(データ格納メモリ)
53 IBUF読み出し部(データ格納メモリ制御部)
54 制御部
55 データ保持・セレクタ部
56 第1制御部
57 DBUF(第2のデータ格納メモリ)
58 第2制御部
71 演算制御部
72 フィルタ演算部
74 第3加算器
75 FF(フリップフロップ)
76 第1非線形変換部
77 第1プーリング処理部
81、81´ 第1加算器
82、82´ セレクタ
83 第2加算器
84 セレクタ
85 セレクタ
86 第2非線形変換部
87 第2プーリング処理部
88 セレクタ