(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-05
(45)【発行日】2024-01-16
(54)【発明の名称】情報処理装置、情報処理方法
(51)【国際特許分類】
G06F 17/16 20060101AFI20240109BHJP
G06N 3/063 20230101ALI20240109BHJP
【FI】
G06F17/16 M
G06N3/063
(21)【出願番号】P 2022169395
(22)【出願日】2022-10-21
(62)【分割の表示】P 2018188612の分割
【原出願日】2018-10-03
【審査請求日】2022-11-21
(73)【特許権者】
【識別番号】000001007
【氏名又は名称】キヤノン株式会社
(74)【代理人】
【識別番号】110003281
【氏名又は名称】弁理士法人大塚国際特許事務所
(72)【発明者】
【氏名】チン ソクイ
【審査官】坂東 博司
(56)【参考文献】
【文献】特開2017-079017(JP,A)
【文献】国際公開第2006/068196(WO,A1)
【文献】特開2012-022363(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/16
G06N 3/063
(57)【特許請求の範囲】
【請求項1】
複数の層を有するネットワークにおける層
の複数のフィルタ係数と複数のデータとの乗算演算を実行する複数の乗算手段と、
前記複数の乗算手段による複数の
乗算演算結果を
、それぞれの乗算演算結果をシフト
量に基づいて2のべき乗で乗算することによりシフトする複数のシフト演算手段と、
入力データの桁数および該入力データのビット幅に基づいて、前記
複数のシフト演算手段に対応する前記シフト
量を
、前記ネットワークのそれぞれの層について設定する制御手段と、
前記複数のシフト演算手段によりシフトされた複数の
乗算演算結果の総和を計算する加算手段と、
を備え、
前記
複数の乗算手段の数は、前記
複数のシフト演算手段の数に対応することを特徴とする情報処理装置。
【請求項2】
前記複数の乗算手段は、前記複数の層のそれぞれについての乗算演算を同一の回路で実行することを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記複数の乗算手段は、前記複数の層のそれぞれについての乗算演算を同一の回路で順次実行することを特徴とする請求項2に記載の情報処理装置。
【請求項4】
前記制御手段は、前記層への入力データのビット幅に応じてフィルタ係数の転送回数を切り替えることを特徴とする請求項1に記載の情報処理装置。
【請求項5】
前記乗算手段は、前記乗算演算とともに加算演算を実行することを特徴とする請求項1に記載の情報処理装置。
【請求項6】
複数の層を有するネットワークにおける層
の複数のデータを
、該複数のデータのそれぞれをシフト
量に基づいて2のべき乗で乗算することによりシフトする複数のシフト演算手段と、
入力データの桁数および該入力データのビット幅に基づいて
、前記
複数のシフト演算手段に対応するシフト
量を
、前記ネットワークのそれぞれの層について設定する制御手段と、
前記複数のシフト演算手段によりシフトされた複数のデータと複数のフィルタ係数との乗算演算を実行する複数の乗算手段と、
前記複数の乗算手段により計算された複数の
乗算演算結果の総和を計算する加算手段と、
を備え、
前記
複数の乗算手段の数は、前記
複数のシフト演算手段の数に対応することを特徴とする情報処理装置。
【請求項7】
前記複数の乗算手段と前記複数のシフト演算手段とは並列に動作することを特徴とする請求項1または6に記載の情報処理装置。
【請求項8】
前記加算手段は、ある層に対する前記総和を該層の次の層のデータとしてメモリに格納することを特徴とする請求項1または6に記載の情報処理装置。
【請求項9】
更に、
前記総和に対して活性化処理を行う活性化手段を備えることを特徴とする請求項1または6に記載の情報処理装置。
【請求項10】
更に、
前記活性化処理の結果に対してプーリング処理を行うプーリング手段を備えることを特徴とする請求項9に記載の情報処理装置。
【請求項11】
前記プーリング手段は、ある層に対する前記プーリング処理を行った結果を、該層の次の層のデータとしてメモリに格納することを特徴とする請求項10に記載の情報処理装置。
【請求項12】
更に、
前記メモリに格納されたデータに基づいて、動画像における各フレームに対する画像処理および/または画像認識を行う手段を備えることを特徴とする請求項8に記載の情報処理装置。
【請求項13】
前記
入力データのビット幅は、2ビット、4ビット、または8ビットであることを特徴とする請求項1または6に記載の情報処理装置。
【請求項14】
前記複数の乗算手段で演算されるデータのビット幅は、前記入力データのビット幅より短いことを特徴とする請求項1または6に記載の情報処理装置。
【請求項15】
前記乗算手段では、1ビットの演算を行うことを特徴とする請求項6に記載の情報処理装置。
【請求項16】
情報処理装置であって、
複数の演算手段であって、複数の層を含むネットワークの層に入力されるデータのビット幅が前記演算手段のビット幅と同じである場合には、該ネットワークの層の複数のフィルタ係数と複数のデータとの乗算を、該複数の演算手段の演算結果の和が計算される前に該複数のデータをビットシフトすることなく行い、前記層に入力されるデータのビット幅が前記演算手段のビット幅の倍数である場合には、前記複数のフィルタ係数と前記複数のデータとの乗算を、前記複数の演算手段の演算結果の和が計算される前にシフト量に基づいて該複数のデータをビットシフトすることで行い、ここで、前記層に入力されるデータは、前記複数のデータに分割される、該複数の演算手段と、
前記ネットワークのそれぞれの層について、該層に入力されるデータの桁に基づいて、前記シフト量を設定する制御手段と
を備えることを特徴とする情報処理装置。
【請求項17】
情報処理装置が行う情報処理方法であって、
前記情報処理装置の複数の乗算手段が、複数の層を有するネットワークにおける層
の複数のフィルタ係数と複数のデータとの乗算演算を実行する工程と、
前記情報処理装置の複数のシフト演算手段が、前記複数の乗算手段による複数の
乗算演算結果を
、それぞれの乗算演算結果をシフト
量に基づいて2のべき乗で乗算することによりシフトする工程と、
前記情報処理装置の制御手段が、
入力データの桁数および該入力データのビット幅に基づいて、前記
複数のシフト演算手段に対応する前記シフト
量を
、前記ネットワークのそれぞれの層について設定する工程と、
前記情報処理装置の加算手段が、前記複数のシフト演算手段によりシフトされた複数の
乗算演算結果の総和を計算する工程と、
を備え、
前記
複数の乗算手段の数は、前記
複数のシフト演算手段の数に対応することを特徴とする情報処理方法。
【請求項18】
情報処理装置が行う情報処理方法であって、
前記情報処理装置の複数のシフト演算手段が、複数の層を有するネットワークにおける層
の複数のデータを
、該複数のデータのそれぞれをシフト
量に基づいて2のべき乗で乗算することによりシフトする工程と、
前記情報処理装置の制御手段が、
入力データの桁数および該入力データのビット幅に基づいて
、前記
複数のシフト演算手段に対応するシフト
量を
、前記ネットワークのそれぞれの層について設定する工程と、
前記情報処理装置の複数の乗算手段が、前記複数のシフト演算手段によりシフトされた複数のデータと複数のフィルタ係数との乗算演算を実行する工程と、
前記情報処理装置の加算手段が、前記複数の乗算手段により計算された複数の
乗算演算結果の総和を計算する工程と、
を備え、
前記
複数の乗算手段の数は、前記
複数のシフト演算手段の数に対応することを特徴とする情報処理方法。
【請求項19】
情報処理装置が行う情報処理方法であって、
前記情報処理装置の複数の演算手段が、複数の層を含むネットワークの層に入力されるデータのビット幅が前記演算手段のビット幅と同じである場合には、該ネットワークの層の複数のフィルタ係数と複数のデータとの乗算を、該複数の演算手段の演算結果の和が計算される前に該複数のデータをビットシフトすることなく行い、前記層に入力されるデータのビット幅が前記演算手段のビット幅の倍数である場合には、前記複数のフィルタ係数と前記複数のデータとの乗算を、前記複数の演算手段の演算結果の和が計算される前にシフト量に基づいて該複数のデータをビットシフトすることで行い、ここで、前記層に入力されるデータは、前記複数のデータに分割される、工程と、
前記情報処理装置の制御手段が、前記ネットワークのそれぞれの層について、該層に入力されるデータの桁に基づいて、前記シフト量を設定する工程と
を備えることを特徴とする情報処理方法。
【請求項20】
コンピュータを、請求項1乃至
16の何れか1項に記載の情報処理装置の各手段として機能させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、複数の階層を有するネットワークにおける演算技術に関するものである。
【背景技術】
【0002】
近年、深層学習の進歩により、画像認識の精度が上がっている。畳み込みニューラルネットワーク(Convolutional Neural Networks : CNN)は、深層学習に用いられる手法として知られている。CNNでは、複数のレイヤ(階層)が階層的に接続されており、各レイヤの中に複数枚の特徴画像がある。
図2に、レイヤの数が4(レイヤ1~4)であって、各レイヤの中に特徴画像が4枚あるネットワークの例を示す。
図2において特徴画像(i,j)は、レイヤiにおけるj枚目の特徴画像を表す。学習したフィルタ係数と特徴画像の画素(特徴データ)を用いてフィルタ処理の結果を計算する。フィルタ処理は積和演算であり、複数の乗算と累積加算を含んでいる。
図2の矢印は積和演算を意味する。
【0003】
現レイヤにおける特徴画像は、前レイヤにおける特徴画像と前レイヤに対応するフィルタ係数とを用いて計算する。現レイヤにおける1枚の特徴画像を計算するためには、前レイヤにおける複数枚の特徴画像の情報が必要である。現レイヤにおける特徴画像を計算するための畳み込み演算の計算式は以下の通りである。
【0004】
【0005】
ここで、Oi,j(n)は、現レイヤにおけるn枚目の特徴画像中の位置(i,j)に対応する積和演算結果を表す変数である。この(式1)では、前レイヤの中に特徴画像がM枚あり、m枚目の特徴画像において位置(i,j)における特徴データををIi,j(m)と表している。フィルタ係数(C1,1(m,n)~CX,Y(m,n))は(X×Y)個あり、特徴画像によって異なる。現レイヤにおけるn枚目の特徴画像を算出するための積和演算回数は(M×X×Y)回である。畳み込み演算を行った後に、現レイヤの情報に基づき、積和演算結果Oi,j(n)を用いて活性化処理やプーリング等の処理を行い、現レイヤの特徴画像を計算する。
【0006】
CNNでは、積和演算の回数が多いため、携帯端末や車載機器等の組み込みシステムに適用する場合、効率的なデータ並列処理装置が求められる。処理データのビット幅を削減すると、畳み込み演算結果を計算する演算器のコストが小さくなるため、演算器の並列度を上げることが可能になる。非特許文献1では、レイヤ毎にデータのビット幅が異なるネットワークを処理するハードウェアの構成が提案されている。
【先行技術文献】
【非特許文献】
【0007】
【文献】Y. Li, et al., A 7.663-TOPS 8.2-W Energy-efficient FPGA Accelerator for Binary Convolutional Neural Networks, Proceedings of the 2017 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays, Pages 290-291, Feb. 2017
【文献】K. Lee, et al., A 502-GOPS and 0.984-mW Dual-Mode Intelligent ADAS SoC With Real-Time Semiglobal Matching and Intention Prediction for Smart Automotive Black Box System, IEEE Journal of Solid-State Circuits, Vol. 52, No. 1, Pages 139-150, Jan. 2017
【発明の概要】
【発明が解決しようとする課題】
【0008】
非特許文献1に記載の手法では、異なる種類の演算器でレイヤ毎にビット幅が異なるCNNを処理する。入力レイヤの特徴データのビット幅が8ビットであり、中間レイヤの特徴データのビット幅が2ビットの場合、8ビットのデータ専用の畳み込み演算器と2ビットのデータ専用の畳み込み演算器が必要である。
【0009】
8ビットのデータのレイヤと2ビットのデータのレイヤをパイプライン方式で処理し、データを並行して処理することができるが、レイヤ毎の畳み込み処理の計算量が異なる場合には、ハードウェアの利用効率が低下する。また、2ビットと8ビットの間のビット幅(4ビット等)の特徴データを処理する場合、専用の畳み込み演算器がないため、8ビットのデータ専用の畳み込み演算器を利用することになり、効率が下がる。
【0010】
非特許文献2に記載の手法では、複数種類のビット幅の特徴データを処理可能なSIMD(シングルインストラクションマルチプルデータ)構成のRNN(Reccurent Neural Network)専用ハードウェアが提案されている。同じハードウェアで8ビット、16ビット、32ビットのデータを処理可能であるが、並行して出力されたデータの総和を計算する際に、一旦メモリに保持してからもう一回SIMDのコマンドを実行する必要があり、処理時間が長くなる。本発明では、複数の階層を有するネットワークの中に複数種類のビット幅の特徴データがあっても効率的な処理を実現するための技術を提供する。
【課題を解決するための手段】
【0011】
本発明の一様態は、複数の層を有するネットワークにおける層の複数のフィルタ係数と複数のデータとの乗算演算を実行する複数の乗算手段と、
前記複数の乗算手段による複数の乗算演算結果を、それぞれの乗算演算結果をシフト量に基づいて2のべき乗で乗算することによりシフトする複数のシフト演算手段と、
入力データの桁数および該入力データのビット幅に基づいて、前記複数のシフト演算手段に対応する前記シフト量を、前記ネットワークのそれぞれの層について設定する制御手段と、
前記複数のシフト演算手段によりシフトされた複数の乗算演算結果の総和を計算する加算手段と、
を備え、
前記複数の乗算手段の数は、前記複数のシフト演算手段の数に対応することを特徴とする。
【発明の効果】
【0012】
本発明の構成によれば、複数の階層を有するネットワークの中に複数種類のビット幅の特徴データがあっても効率的な処理を実現することができる。
【図面の簡単な説明】
【0013】
【
図3】情報処理装置のハードウェア構成例を示すブロック図。
【
図4】データ処理部305の構成例を示すブロック図。
【
図5】積和演算部402とシフト演算部403の構成例を示すブロック図。
【
図7】データ処理部305の構成例を示すブロック図。
【
図8】積和演算部702とシフト演算部701の構成例を示すブロック図。
【
図10】特徴データが8ビット/2ビット/4ビットの例を示す図。
【発明を実施するための形態】
【0014】
以下、添付図面を参照し、本発明の実施形態について説明する。なお、以下説明する実施形態は、本発明を具体的に実施した場合の一例を示すもので、特許請求の範囲に記載した構成の具体的な実施形態の1つである。
【0015】
[第1の実施形態]
先ず、本実施形態に係る情報処理装置のハードウェア構成例について、
図3のブロック図を用いて説明する。情報処理装置には、PC(パーソナルコンピュータ)、タブレット型端末装置、スマートフォンなどのコンピュータ装置を適用することができる。また、この情報処理装置は、これらの機器などに組み込む組み込み機器であっても構わない。
【0016】
入力部301は、キーボード、マウス、タッチパネルなどのユーザインターフェースにより構成されており、ユーザが操作することで各種の指示をCPU306に対して入力することができる。
【0017】
データ保存部302は、ハードディスクドライブ装置等の大容量情報記憶装置である。データ保存部302には、OS(オペレーティングシステム)、CPU306が実行する各種のコンピュータプログラム、CPU306が各種の処理を実行する際に用いるデータ等、情報処理装置にて使用される各種の情報が保存されている。データ保存部302に保存されているデータには、画像処理部309による処理対象となる画像も含まれている。また以下の説明において既知の情報として説明する情報は、このデータ保存部302に保存されている。データ保存部302に保存されているコンピュータプログラムやデータは、CPU306やデータ処理部305や画像処理部309などによりRAM308などにロードされ、CPU306やデータ処理部305や画像処理部309などの処理対象となる。
【0018】
なお、データ保存部302は、記憶媒体(フレキシブルディスク、CD-ROM、CD-R、DVD、メモリーカード、CFカード、スマートメディア、SDカード、メモリスティック、xDピクチャーカード、USBメモリ等)であっても良い。この場合、情報処理装置は、このような記憶媒体に対する情報の読み書きを行う装置を有する必要がある。
【0019】
通信部303は、外部の機器との間のデータ通信を行うための通信インターフェースとして機能するものであり、情報処理装置において処理の実行に必要な情報等をこの通信部303によって外部から取得するようにしても良い。また、情報処理装置が行った処理の結果を通信部303によって外部の機器に対して送信しても良い。
【0020】
表示部304は、液晶画面やタッチパネル画面などにより構成されており、CPU306やデータ処理部305や画像処理部309による処理結果を画像や文字などでもって表示することができる。なお、表示部304は、プロジェクタ装置などの投影装置であっても良い。また、入力部301と表示部304とを一体化させてタッチスクリーン装置のような、指示入力の受け付け機能と表示機能とを有する装置を形成しても良い。
【0021】
データ処理部305は、画像処理部309によってRAM308に書き込まれた画像を用いて
図1のフローチャートに従った処理を実行することでCNNの計算を行い、該計算によって得られた結果をデータ保存部302やRAM308等に出力する。なお、データ処理部305による処理対象となる画像は、画像処理部309によってRAM308に書き込まれた画像に限らず、例えば、他の装置によって入力された画像であっても良い。データ処理部305については、
図4を用いて後述する。
【0022】
CPU306は、ROM307やRAM308に格納されているコンピュータプログラムやデータを用いて各種の処理を実行する。これによりCPU306は、情報処理装置全体の動作制御を行う。
【0023】
ROM307には、情報処理装置の設定データや起動プログラムなどの書換不要の情報が格納されている。RAM308は、データ保存部302やROM307からロードされたコンピュータプログラムやデータ、通信部303が外部から受信した情報、を格納するためのエリアを有する。またRAM308は、CPU306やデータ処理部305や画像処理部309が各種の処理を実行する際に用いるワークエリアを有する。このようにRAM308は、各種のエリアを適宜提供することができる。
【0024】
画像処理部309は、CPU306からの指示に従って、データ保存部302に保存されている画像を読み出し、該画像中の各画素の画素値のレンジ調整を行ってから、該画像をRAM308に書き込む。
【0025】
上記の入力部301、データ保存部302、通信部303、表示部304、データ処理部305、CPU306、ROM307、RAM308、画像処理部309、は何れもバス310に接続されている。
【0026】
なお、情報処理装置のハードウェア構成は
図3に示した構成に限らない。例えば、
図3の構成を複数の装置で実現させても良い。また、入力部301、データ保存部302、表示部304、といった機器を情報処理装置が有することに限らず、このような機器を情報処理装置と通信路を介して接続するようにしても良い。
【0027】
また、RAM308に格納するものとして説明する情報の一部若しくは全部をデータ保存部302に格納するようにしても良いし、データ保存部302に格納するものとして説明する情報の一部若しくは全部をRAM308に格納するようにしても良い。あるいは、RAM308の一部をデータ保存部302として用いるようにしても良いし、通信部303が通信する相手の機器の記憶装置を、通信部303を介して利用するというように仮想的に構成するようにしても良い。
【0028】
また、
図3ではCPU306は1つとしているが、情報処理装置が有するCPU306の数は1に限らず、複数であっても良い。また、データ処理部305や画像処理部309はハードウェアとして実装するようにしても良いし、コンピュータプログラムとして実装するようにしても良い。後者の場合、このコンピュータプログラムはデータ保存部302に格納され、CPU306が該コンピュータプログラムを実行することでデータ処理部305や画像処理部309の機能を実現させることになる。
【0029】
なお、CPU306は、データ処理部305による処理の結果に基づき、通信部303やデータ保存部302から取得する動画像における各フレームに対する画像処理および/または画像認識を行う。CPU306による画像処理や画像認識の結果は、RAM308やデータ保存部302に保存される、もしくは通信部303を介して外部の機器に対して出力される。また、CPU306による画像処理や画像認識の結果は、表示部304に画像や文字として表示されても良いし、情報処理装置が音声出力機能を有する場合には、音声として出力するようにしても良い。
【0030】
<処理対象ネットワーク>
本実施形態では処理対象ネットワークとしてCNNを用いる。処理対象ネットワークの構成例を
図2に示す。
図2の処理対象ネットワークの詳細については上記の通りである。なお、処理対象ネットワークの積和演算の計算量、特徴画像のサイズ、枚数、ビット数等の情報はデータ保存部302等に保存されている。
【0031】
図2の処理対象ネットワークのレイヤの数は4(レイヤ1~4)であり、各レイヤの中に特徴画像が4枚ある。上記の通り、特徴画像(i,j)は、レイヤiにおけるj枚目の特徴画像を表す。また、レイヤにより、レイヤ中の特徴画像のビット幅が異なる。レイヤ1の特徴画像のビット幅は8ビットであり、レイヤ2の特徴画像のビット幅は2ビットであり、レイヤ3の特徴画像のビット幅は4ビットであり、レイヤ4の特徴画像のビット幅は8ビットである。最初のレイヤ(レイヤ1)と最後のレイヤ(レイヤ4)は入出力画像の情報を保持するため、中間レイヤ(レイヤ2,3)のビット幅(それぞれ2ビット、4ビット)より大きいビット幅(8ビット)を使用することが多い。特徴画像は複数の画素(特徴データ)で構成されている。
【0032】
ここで、データ処理部305によるレイヤ1~4のそれぞれの特徴画像の計算(生成)について説明する。レイヤ1における8ビットの特徴画像(1,1)、(1,2)、(1,3)、(1,4)と、フィルタ係数と、を用いて上記の(式1)に従った積和演算を行う。そして、この積和演算の結果から、レイヤ2における2ビットの特徴画像(2,1)、(2,2)、(2,3)、(2,4)を生成する。
【0033】
そして、レイヤ2における2ビットの特徴画像(2,1)、(2,2)、(2,3)、(2,4)と、フィルタ係数と、を用いて上記の(式1)に従った積和演算を行う。そして、この積和演算の結果から、レイヤ3における4ビットの特徴画像(3,1)、(3,2)、(3,3)、(3,4)を生成する。
【0034】
そして、レイヤ3における4ビットの特徴画像(3,1)、(3,2)、(3,3)、(3,4)と、フィルタ係数と、を用いて上記の(式1)に従った積和演算を行う。そして、この積和演算の結果から、レイヤ4における8ビットの特徴画像(4,1)、(4,2)、(4,3)、(4,4)を生成する。
【0035】
<データ処理部305の構成例>
データ処理部305の構成例を
図4に示す。データメモリ401は、各レイヤにおけるそれぞれの特徴画像を構成する特徴データを保持しており、係数メモリ404はフィルタ係数を保持している。積和演算部402は、係数メモリ404に保持されているフィルタ係数と、データメモリ401に保持されている特徴データと、を用いた積和演算を行うことで、積和演算結果を計算する。シフト演算部403は、積和演算部402によるそれぞれの積和演算結果をシフトし、加算部406は、シフトされた複数の積和演算結果を足し合わせて「シフトされた積和演算結果の総和」を求める。処理部407は、加算部406が求めた「シフトされた積和演算結果の総和」に基づいて、活性化・プーリングの処理結果を計算し、該計算した活性化・プーリングの処理結果をデータメモリ401に格納する。制御部405は、データ処理部305全体の動作制御を行う。
【0036】
データ処理部305によるデータ処理について、
図1のフローチャートに従って説明する。ステップS101では、制御部405は、複数枚の入力特徴画像の特徴データとフィルタ係数とをRAM308から読み出し、該読み出した特徴データをデータメモリ401に格納し、該読み出したフィルタ係数を係数メモリ404に格納する。
【0037】
ステップS102では、制御部405は、レイヤについてのループを開始し、未処理のレイヤのうち1つを以下の処理対象レイヤとする。ここでは一例としてレイヤ1~4の順に処理対象とするため、最初はレイヤ1が処理対象レイヤとなる。
【0038】
ステップS103では、制御部405は、シフト演算部403のシフトパラメータをレイヤ情報に応じて設定する。ステップS104では、制御部405は、出力特徴画像のループを開始し、出力特徴データを順番に計算する。ステップS105では、制御部405は、加算部406に保存されている積和演算結果を初期化してゼロに設定する。加算部406は総和計算の機能を備えている。
【0039】
ステップS106では、制御部405は、入力特徴画像のループを開始し、入力特徴データを順番に処理する。ステップS107では、制御部405による制御の元で、積和演算部402、シフト演算部403のそれぞれは上記の積和演算、シフト演算を行う。ステップS107における処理の詳細(ステップS115~ステップS117)については後述する。
【0040】
ステップS108では、加算部406は、複数の積和演算結果を足し合わせて「シフトされた積和演算結果の総和」を求める。ステップS109では、制御部405は、入力特徴画像のループの終了判定をする。全ての入力特徴画像の処理が終わった場合にはステップS110に進み、未処理の入力画像特徴が残っている場合には、ステップS107に戻り、次の未処理の入力特徴画像の処理を開始する。ステップS110では、処理部407は、加算部406が求めた「シフトされた積和演算結果の総和」に基づき、以下の(式2)に従って活性化処理結果を計算する。
【0041】
【0042】
ここで、f(・)は活性化関数であり、xは入力データである。この例ではReLU(Rectified Linear Unit)を用いて活性化関数を実現したが、ReLUに限らず、他の非線形の関数、または量子化関数で実現してもよい。なお、必要に応じて活性化処理結果のビット幅に調整する。
【0043】
ステップS111では、処理部407はレイヤの情報に応じて、活性化処理結果に基づいてプーリング処理を行うことで、活性化・プーリングの処理結果を計算する。ステップS112では、処理部407は、ステップS111で計算した活性化・プーリングの処理結果を、次のレイヤの特徴画像としてデータメモリ401に格納する。
【0044】
ステップS113では、制御部405は、出力特徴画像のループの終了判定をする。全ての出力特徴画像の処理が終わった場合にはステップS114に進み、未処理の出力画像特徴が残ってる場合には、ステップS105に戻り、未処理の出力画像特徴について処理を開始する。
【0045】
ステップS114では、制御部405はレイヤのループの終了判定をする。全てのレイヤの処理が終わった場合、
図1のフローチャートに従った処理は終了し、未処理のレイヤが残っている場合には、ステップS103に戻り、未処理のレイヤについて処理を開始する。
【0046】
<積和演算・シフト演算>
ステップS107における積和演算・シフト演算(ステップS115~ステップS117)について説明する。ステップS115では、制御部405は、データメモリ401から特徴データを読み出して積和演算部402に転送すると共に、係数メモリ404からフィルタ係数を読み出して積和演算部402に転送する。ここで、フィルタ係数の個数と転送回数は特徴データのビット幅により異なる。
【0047】
ステップS116では、積和演算部402は、特徴データとフィルタ係数とに基づいて積和演算結果を計算する。ステップS117では、シフト演算部403は、ステップS116で得られた積和演算結果を、ステップS103で設定されていたシフトパラメータに基づいてシフトする。
【0048】
<ビット幅が異なる場合の詳細説明>
本実施形態では、ビット幅が異なるデータを処理することが可能である。
図10(A)には、8ビットの特徴データを処理する場合における積和演算部402、シフト演算部403、加算部406の動作を示している。
図10(B)には、2ビットの特徴データを処理する場合における積和演算部402、シフト演算部403、加算部406の動作を示している。
【0049】
特徴データが8ビットの場合、
図10(A)に示す如く、積和演算部402は8ビットの特徴データ1001(値:234)を2ビットのデータ(2ビットデータ)ごとに分割する。そして積和演算部402は、該分割した4個の2ビットデータ(値:2、2、2、3)と共通のフィルタ係数とを用いて4つの積和演算結果を計算し、シフト演算部403は、4個のシフトパラメータに基づいて4つの積和演算結果をシフトする。そして加算部406は、シフトされた4つの積和演算結果を足し合わせて1個の特徴データ(8ビットの入力特徴データの積和演算結果)を計算する。このように、データ処理部305は1個の8ビットの入力特徴データを処理できる。
【0050】
特徴データが2ビットの場合、
図10(B)に示す如く、積和演算部402は4個の2ビットデータ1002(値:2、2、2、3)と4個のフィルタ係数とを用いて、4つの積和演算結果を計算する。シフト演算部403は、1個のシフトパラメータに基づいて、4つの積和演算結果をシフトする。シフトパラメータはゼロのため、シフト演算前後の結果は同じである。そして加算部406は、4つの積和演算結果を足し合わせて1個の特徴データ(4個の2ビットの入力特徴データの積和演算結果の総和)を計算する。このように、データ処理部305は4個の2ビットの入力特徴データを並列に処理できる。
【0051】
ここで、入力特徴画像の枚数をMとし、フィルタサイズを1×1とする。フィルタサイズが1画素であり、変数x、yの値は定数であるため、Oi,j(n)はIi,j(n)を用いて計算する。積和演算の計算(式1)が以下のように簡略化される。
【0052】
【0053】
フィルタサイズが1×1以上の場合、積和演算部402はフィルタ係数と入力特徴データとの畳み込み演算結果を計算するが、フィルタサイズが1×1の場合、積和演算部402はI(m)とC(m,n)の積を計算する。
【0054】
処理対象の特徴データはビット幅がαビットとビット幅がβビットの2種類であるとする。
図4に示した積和演算部402は積和演算結果を計算するαビットのデータの積和演算ユニットがP個あり、シフト演算部403はシフト演算結果を計算するαビットのデータの積和演算ユニットがP個ある。α、β、Pは以下の条件を満たしている。
【0055】
【0056】
入力特徴データI’(β)のビット幅がβビットの場合、加算部406の出力は以下の(式5)で表され、(式6)、(式7)、(式8)が前提条件になる。
【0057】
【0058】
O(n)はn枚目の出力特徴画像の積和演算結果であり、I(α),p(m)はαビットのデータの積和演算ユニットの入力データであり、Cp(m,n)はフィルタ係数であり、S(p)はシフトパラメータである。変数mはαビットの入力特徴画像グループ(1グループ=P枚)の番号(積和演算部402の処理番号)であり、変数pは積和演算ユニット、シフト演算ユニットの番号であり、変数nは出力特徴画像の番号である。シフト演算は2のべき乗の処理で表現される。
【0059】
フィルタ係数Cp(m,n)は(式6)に示す如く、m枚目のβビットの特徴画像が対応しているフィルタ係数C’(m,n)である。αビットの入力特徴画像グループはフィルタ係数が共通となるため、pを省略することができる。P個の積和演算ユニットに並列に供給するフィルタ係数の個数は1個であり、転送回数は1回である。
【0060】
【0061】
ここでは、入力特徴データI’(β)をP個のαビットのデータI(α),p(m)に分割する。シフトパラメータS(p)の値は(式7)に示す如く、積和演算ユニットの番号pと分割されたデータのビット幅αに基づいて計算する。
【0062】
【0063】
βビットの入力特徴データI’(β)は式(8)に示す如く、分割されたP個のαビットのデータI(α),p(m)で表現される。
【0064】
【0065】
ここで、(式6)、(式7)、(式8)を(式5)に代入すると、出力データO(n)の式は以下の(式9)となる。
【0066】
【0067】
一方、入力特徴データI’(α)のビット幅がαビットの場合、加算部406の出力は以下の(式10)で表され、(式11)、(式12)、(式13)が前提条件になる。
【0068】
【0069】
O(n)はn枚目の出力特徴画像の積和演算結果であり、I(α),p(m)はαビットのデータの積和演算ユニットの入力データであり、Cp(m,n)はフィルタ係数であり、S(p)はシフトパラメータである。変数mはαビットの入力特徴画像グループ(1グループ=P枚)の番号(積和演算部402の処理番号)であり、変数pは積和演算ユニット、シフト演算ユニットの番号であり、変数nは出力特徴画像の番号である。シフト演算は2のべき乗の処理で表現される。
【0070】
フィルタ係数Cp(m,n)は第{(m-1)×P+p}枚目のαビットの特徴画像が対応しているフィルタ係数C’((m-1)×P+p,n)である。積和演算ユニットの番号pによりフィルタ係数が異なるため、P個の積和演算ユニットに並列に供給するフィルタ係数の個数はP個であり、転送回数はP回である。
【0071】
【0072】
入力特徴データI’(α)はαビットのデータの積和演算ユニットの入力データI(α),p(m)になり、シフトパラメータS(p)の値は(式12)に示す如く常に0である。
【0073】
【0074】
P個のαビットの入力特徴データI’(α)をそのまま積和演算ユニットに入力するが、P個の入力データはそれぞれ異なる特徴画像の特徴データである。特徴画像の番号は、積和演算ユニットの番号pと、積和演算ユニットの個数Pと、積和演算部402の処理番号mで以下の(式13)に示す如く表現される。
【0075】
【0076】
ここで、(式11)、(式12)、(式13)を(式10)に代入すると、出力データO(n)の式は以下の(式14)となる。
【0077】
【0078】
シフトパラメータS(p)の値とフィルタ係数の個数を変更することにより、ビット幅がαビットの特徴データI’(α)とビット幅がβビットの特徴データI’(β)を、同じ演算器(積和演算部402、シフト演算部403、加算部406)で処理することができる。
【0079】
<ビット幅が異なる場合の処理例>
図5と
図10(A)、(B)は、P=4、β=8、α=2の場合の構成例である。積和演算部402は入力データのビット幅が2ビットであり、シフト演算部403は入力データのビット幅が6ビットであり、加算部406の入力データのビット幅が12ビットである。
【0080】
図5のハードウェア構成を用いて
図2の処理対象ネットワークを処理した場合の処理時間の例を
図6に示す。
図6(A)と
図10(A)にレイヤ1(8ビットのデータ、入力特徴画像枚数M=4)を処理した場合の例を示す。特徴画像(1,1)の特徴データI’
(8)(1)は8ビットであり、(式8)に基づいて4つに分割された4つのデータI
(2),1(1)-I
(2),4(1)を、積和演算部402に入力する。入力特徴データとシフトパラメータとフィルタ係数C(m,n)を用いてシフト演算結果を計算し、加算部406に入力し、初期値ゼロと足し合わせる。計算結果はシフト演算結果になり、加算部406に保持される。所要時間は1msである。
【0081】
特徴画像(1,2)の特徴データI’(8)(2)は8ビットであり、(式8)に基づいて分割された4つのデータI(2),1(2)-I(2),4(2)を、積和演算部402に入力する。入力特徴データとシフトパラメータとフィルタ係数C(m,n)を用いてシフト演算結果を計算し、加算部406に入力し、前の結果に加算する。所要時間は1msである。
【0082】
特徴画像(1,2)と同じように、特徴画像(1,3)と特徴画像(1,4)を順番に処理し、シフト演算結果を累積し、加算結果を計算する。所要時間は2msである。最後に処理部407を通して、特徴画像(2,1)の特徴データを出力する。4枚の特徴画像の処理時間は4msである。
【0083】
図6(B)と
図10(B)にレイヤ2(2ビットのデータ、入力特徴画像枚数M=4)を処理した場合の例を示す。特徴画像(2,1)-(2,4)の特徴データI’
(2)(1)-I’
(2)(4)は2ビットであり、(式13)に基づいて4つのデータI
(2),1(1)-I
(2),4(1)を、積和演算部402に並列に入力する。入力特徴データとシフトパラメータとフィルタ係数Cp(m,n)を用いてシフト演算結果を計算し、加算部406に入力し、初期値ゼロと足し合わせ、計算結果はシフト演算結果になる。最後に、処理部407を通して、特徴画像(3,1)の特徴データを出力する。4枚の特徴画像の処理時間は1msである。
【0084】
図6(A)、(B)と
図10(A)、(B)に示す如く、入力特徴データが8ビットの場合、出力データあたりの処理時間は4msであり、入力特徴データが2ビットの場合、出力データあたりの処理時間は1msである。共通のデータ処理部305でビット幅が異なるデータを効率よく処理することが可能である。
【0085】
[第2の実施形態]
以下では、第1の実施形態との差分について説明し、以下で特に触れない限りは第1の実施形態と同様であるものとする。
【0086】
<シフト演算と積和演算の順番>
第1の実施形態では、積和演算の後にシフト演算を行う例について説明したが、積和演算とシフト演算の順番を入れ替えても処理結果は同じである。積和演算とシフト演算の順番が入れ替わった場合、
図1のフローチャートの一部が変更される。ステップS107は
図9のステップS901~ステップS903になる。
【0087】
本実施形態に係るデータ処理部305の構成例を
図7に示す。シフト演算部701は、データメモリ401に格納されている特徴データをシフトパラメータに基づいてシフトし、積和演算部702は、シフトされた特徴データとフィルタ係数とに基づいて積和演算結果を計算する。
【0088】
<シフト演算・積和演算>
ステップS107で行われる積和演算・シフト演算(ステップS901~ステップS903)について説明する。ステップS901では、制御部704は、データメモリ401から特徴データを読み出し、係数メモリ703からフィルタ係数を読み出す。ステップS902では、シフト演算部701は、ステップS103で設定されていたシフトパラメータに基づき、特徴データをシフトする。ステップS903では、積和演算部702は、シフトされた特徴データとフィルタ係数とに基づいて積和演算結果を計算する。
【0089】
<ビット幅が異なる場合の詳細説明>
本実施形態では、シフト演算部701はシフト結果を計算するαビットのデータのシフト演算ユニットがP個あり、積和演算部702は積和演算結果を計算するαビットのデータの積和演算ユニットがP個ある。積和演算部702の出力は(式15)で表され、(式5)に示したシフト演算部403の出力と等価である。
【0090】
【0091】
図8に、P=4、β=8、α=2の場合の例を示す。シフト演算部701は入力データのビット幅が2ビットであり、積和演算部702は入力データのビット幅が8ビットであり、加算部406の入力データのビット幅が12ビットである。シフト演算部701と積和演算部702はビット幅により回路規模が異なるため、シフト演算部701(シフト演算部403)と積和演算部702(積和演算部402)の順番を入れ替えることにより、全体的な回路規模を削減することが可能である。
【0092】
[第3の実施形態]
第1,2の実施形態では、入力特徴データのビット幅がαビット(積和演算ユニットのビット幅)、βビット(積和演算ユニットのビット幅と積和演算ユニット数の積)である例について説明したが、制限があるわけでなく、α、β以外のビット幅でも良い。
【0093】
<入力特徴データのビット幅がγビットの場合>
本実施形態では、ビット幅がγビットの入力特徴データを処理することが可能である。
図10(C)に特徴データが4ビットの例を示す。特徴データが4ビットの場合、
図10(C)に示す如く、積和演算部402は2個の4ビットの特徴データ1003(値:10、14)を2ビットずつ分割する。そして積和演算部402は、該分割された4個の2ビットのデータ(値:2、2、2、3)と2個のフィルタ係数を用いて、4つの積和演算結果を計算する。シフト演算部403は、2個のシフトパラメータに基づいて、4つの積和演算結果をシフトする。加算部406は、シフトされた4つの積和演算結果を足し合わせて1個の特徴データ(2個の4ビットの入力特徴データの積和演算結果の総和)を計算する。このように、データ処理部305は2個の4ビットの入力特徴データを並列に処理できる。γは入力特徴データのビット幅であり、γの値はβと異なる。α、β、Pは第1の実施形態と同じ定義であり、γ、α、P’は以下の条件を満たしている。
【0094】
【0095】
γはβより小さく、PはP’の倍数である。入力特徴データI’(γ)のビット幅がγビットの場合、加算部406の出力データO(n)は以下の(式17)で表され、(式18)、(式19)、(式20)が前提条件になる。
【0096】
【0097】
O(n)はn枚目の出力特徴画像の積和演算結果であり、I(α),p(m)はαビットのデータの積和演算ユニットの入力データであり、Cp(m,n)はフィルタ係数であり、S(p)はシフトパラメータである。変数mはαビットの入力特徴画像グループ(1グループ=P枚)の番号(積和演算部402の処理番号)であり。積和演算ユニットとシフト演算ユニットはそれぞれP/P’セットに分かれており、変数qは積和演算ユニットのセットの番号である。変数pはセット内の積和演算ユニット、シフト演算ユニットの番号であり、変数nは出力特徴画像の番号である。シフト演算は2のべき乗の処理で表現される。
【0098】
フィルタ係数Cp,q(m,n)は第{(m-1)×P/P’+q}枚目のγビットの特徴画像が対応しているフィルタ係数C’((m-1)×P/P’+q,n)である。フィルタ係数は積和演算ユニットのセット番号qに基づいて計算する。フィルタ係数の一部が共通するため、P個の積和演算ユニットに並列に供給するフィルタ係数の個数はP/P’個であり、転送回数はP/P’回である。
【0099】
【0100】
ここでは、入力特徴データI’(γ)をP’個のαビットのデータI(α),p(m)に分割する。シフトパラメータS(.)は積和演算ユニットのビット幅αと積和演算ユニットの番号pに基づいて計算する。
【0101】
【0102】
γビットの入力特徴データI’(γ)は分割されたP’個のαビットのデータI(α),p,q(m)で表現される。
【0103】
【0104】
(式18)、(式19)、(式20)を(式17)に代入すると、出力データO(n)の式は以下の(式21)になる。
【0105】
【0106】
シフトパラメータS(p,q)の値とフィルタ係数の個数を設定することにより、ビット幅がγビットの特徴データI’(γ)を、第1の実施形態と同じ演算器(積和演算部402、シフト演算部403、加算部406)で処理することができる。
【0107】
<ビット幅が異なる場合の処理例>
図5と
図10(C)に、P=4、β=8、α=2の場合の構成例を示し、
図5のハードウェア構成を用いて
図2の処理対象ネットワークを処理した場合の処理時間の例を
図6に示す。
【0108】
図6(C)と
図10(C)にP’=2、γ=4で、レイヤ3(4ビットのデータ、入力特徴画像枚数M=4)を処理した場合の例を示す。特徴画像(3,1)と(3,2)の特徴データI’
(4),(1)、I’
(4),(2)は4ビットであり、(式20)に基づいて分割された4つのデータI
(2),1(1)-I
(2),4(1)を、積和演算部402に入力する。入力特徴データとシフトパラメータとフィルタ係数C(m,n)を用いて、シフト演算結果を計算し、加算部406に入力し、初期値ゼロと足し合わせる。計算結果はシフト演算結果になり、加算部406に保持される。所要時間は1msである。
【0109】
特徴画像(3,3)と(3,4)の特徴データI’(4),(3)、I’(4),(4)は4ビットであり、(式20)に基づいて分割された4つのデータI(2),1(2)-I(2),4(2)を、積和演算部402に入力する。入力特徴データとシフトパラメータとフィルタ係数C(m,n)を用いて、シフト演算結果を計算し、加算部406に入力し、前の結果に加算する。所要時間は1msである。最後に処理部407を通して、特徴画像(4,1)の特徴データを出力する。4枚の特徴画像の処理時間は2msである。
【0110】
このように、本実施形態では、ビット幅がαビット(積和演算ユニットのビット幅)、βビット(積和演算ユニットのビット幅αと積和演算ユニットの数Pの積)以外の特徴データも処理できるため、柔軟性が高いというメリットがある。
【0111】
[第4の実施形態]
第1の実施形態では、処理部407で活性化処理を実行する例について説明したが、活性化処理は処理部407で実行することに限らず、他の装置、例えば、CPU306が活性化処理を実行するようにしても良い。これは他の処理についても同様で、上記の各実施形態では、上記の様々な処理の主体については一例を示したに過ぎず、上記の各実施形態で説明した主体とは異なる主体であっても良い。
【0112】
また、第1の実施形態では、レイヤ情報に応じて活性化・プーリング処理を実行するようにした。しかし、場合によっては、活性化・プーリング処理を省略するようにしても良い。
【0113】
また、第1~3の実施形態では、フィルタサイズ(フィルタの高さと幅)が1×1であるケースについて説明したが、フィルタサイズは1×1に限らず、他のサイズであっても良い。このように、上記の各実施形態における説明で使用した数値はあくまでも具体的な説明を行うために例示した数値であって、上記の各実施形態にて説明した数値に限定されることを意図したものではない。
【0114】
フィルタサイズが小さい場合、フィルタ係数を保持するメモリ(係数メモリ404、703)の容量もより少なくてすむというメリットがある。フィルタの幅と高さの最小値は1である。
【0115】
また、第1~3の実施形態では、入力特徴画像の枚数をM、出力特徴画像の枚数をN、とした。しかし、M,Nに適用可能な数値は特定の数値に限らない。このように、上記の様々な変数に適用可能な数値は特定の数値に限らない。
【0116】
また、第1~3の実施形態では、フィルタ係数を係数メモリ404、703に保持し、特徴データをデータメモリ401に保持するようにしたが、フィルタ係数や特徴データを保持するメモリは特定のメモリに限らない。例えば、フィルタ係数や特徴データを積和演算部402、702が有するメモリに保持しても良いし、RAM308に保持しても良い。
【0117】
また、フィルタ係数のビット幅は特定のビット幅に限らない。また、第1~3の実施形態では、処理対象ネットワークとしてCNNを用いたが、処理対象ネットワークはCNNに限らず、RNNやMLP(多層パーセプトロン)等のような他の種類の複数のレイヤが階層的に接続されているネットワークであっても良い。
【0118】
(その他の実施形態)
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
【符号の説明】
【0119】
401:データメモリ 402:積和演算部 403:シフト演算部 404:係数メモリ 405:制御部 406:加算部 407:処理部