(57)【要約】【課題】  複数の階層を有するネットワークの中に複数種類のビット幅の特徴データがあっても効率的な処理を実現するための技術を提供すること。【解決手段】  複数の階層を有するネットワークにおけるそれぞれの階層について、該階層の複数のデータと複数のフィルタ係数との積和演算を実行する。該複数の積和演算結果を複数のシフトパラメータに基づいてシフトする。該シフトされた複数の積和演算結果の総和を計算する。階層のビット幅に応じてシフトパラメータの値を切り替える。【選択図】  図４
2020057286.tif 000002
【特許請求の範囲】
【請求項１】
複数の階層を有するネットワークにおけるそれぞれの階層について、該階層の複数のデータと複数のフィルタ係数との積和演算を実行する複数の積和演算手段と、
前記複数の積和演算手段による複数の積和演算結果を複数のシフトパラメータに基づいてシフトする複数のシフト演算手段と、
前記複数のシフト演算手段によりシフトされた複数の積和演算結果の総和を計算する加算手段と、
前記階層のビット幅に応じて前記シフトパラメータの値を切り替える制御手段と
を備えることを特徴とする情報処理装置。
【請求項２】
前記制御手段は、前記階層のビット幅に応じてフィルタ係数の転送回数を切り替えることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記シフト演算手段は複数のシフトパラメータに基づいて前記複数の積和演算結果をシフトすることを特徴とする請求項１−２の積和演算装置。
【請求項４】
複数の階層を有するネットワークにおけるそれぞれの階層について、該階層の複数のデータを複数のシフトパラメータに基づいてシフトする複数のシフト演算手段と、
前記複数のシフト演算手段によりシフトされた複数のデータと複数のフィルタ係数との積和演算を実行する複数の積和演算手段と、
前記複数の積和演算手段により計算された複数の積和演算結果の総和を計算する加算手段と、
前記階層のビット幅に応じて前記シフトパラメータの値を切り替える制御手段と
を備えることを特徴とする情報処理装置。
【請求項５】
前記複数の積和演算手段と前記複数のシフト演算手段とは並列に動作することを特徴とする請求項１乃至４の何れか１項に記載の情報処理装置。
【請求項６】
前記加算手段は、ある階層に対する前記総和を該階層の次の階層のデータとしてメモリに格納することを特徴とする請求項１乃至５の何れか１項に記載の情報処理装置。
【請求項７】
前記加算手段は、ある階層に対する前記総和に対して活性化処理、プーリング処理を行った結果を、該階層の次の階層のデータとしてメモリに格納することを特徴とする請求項１乃至５の何れか１項に記載の情報処理装置。
【請求項８】
更に、
前記メモリに格納されたデータに基づいて、動画像における各フレームに対する画像処理および／または画像認識を行う手段を備えることを特徴とする請求項６または７に記載の情報処理装置。
【請求項９】
前記ネットワークは、階層ごとにデータのビット幅が異なることを特徴とする請求項１乃至８の何れか１項に記載の情報処理装置。
【請求項１０】
情報処理装置が行う情報処理方法であって、
前記情報処理装置の複数の積和演算手段が、複数の階層を有するネットワークにおけるそれぞれの階層について、該階層の複数のデータと複数のフィルタ係数との積和演算を実行する工程と、
前記情報処理装置の複数のシフト演算手段が、前記複数の積和演算手段による複数の積和演算結果を複数のシフトパラメータに基づいてシフトする工程と、
前記情報処理装置の加算手段が、前記複数のシフト演算手段によりシフトされた複数の積和演算結果の総和を計算する工程と、
前記情報処理装置の制御手段が、前記階層のビット幅に応じて前記シフトパラメータの値を切り替える工程と
を備えることを特徴とする情報処理方法。
【請求項１１】
情報処理装置が行う情報処理方法であって、
前記情報処理装置の複数のシフト演算手段が、複数の階層を有するネットワークにおけるそれぞれの階層について、該階層の複数のデータを複数のシフトパラメータに基づいてシフトする工程と、
前記情報処理装置の複数の積和演算手段が、前記複数のシフト演算手段によりシフトされた複数のデータと複数のフィルタ係数との積和演算を実行する工程と、
前記情報処理装置の加算手段が、前記複数の積和演算手段により計算された複数の積和演算結果の総和を計算する工程と、
前記情報処理装置の制御手段が、前記階層のビット幅に応じて前記シフトパラメータの値を切り替える工程と
を備えることを特徴とする情報処理方法。
【請求項１２】
コンピュータを、請求項１乃至９の何れか１項に記載の情報処理装置の各手段として機能させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の階層を有するネットワークにおける演算技術に関するものである。
【背景技術】
【０００２】
近年、深層学習の進歩により、画像認識の精度が上がっている。畳み込みニューラルネットワーク（Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋｓ  ：  ＣＮＮ）は、深層学習に用いられる手法として知られている。ＣＮＮでは、複数のレイヤ（階層）が階層的に接続されており、各レイヤの中に複数枚の特徴画像がある。図２に、レイヤの数が４（レイヤ１〜４）であって、各レイヤの中に特徴画像が４枚あるネットワークの例を示す。図２において特徴画像（ｉ，ｊ）は、レイヤｉにおけるｊ枚目の特徴画像を表す。学習したフィルタ係数と特徴画像の画素（特徴データ）を用いてフィルタ処理の結果を計算する。フィルタ処理は積和演算であり、複数の乗算と累積加算を含んでいる。図２の矢印は積和演算を意味する。
【０００３】
現レイヤにおける特徴画像は、前レイヤにおける特徴画像と前レイヤに対応するフィルタ係数とを用いて計算する。現レイヤにおける１枚の特徴画像を計算するためには、前レイヤにおける複数枚の特徴画像の情報が必要である。現レイヤにおける特徴画像を計算するための畳み込み演算の計算式は以下の通りである。
【０００４】
【数１】
2020057286.tif 000003
【０００５】
ここで、Ｏｉ，ｊ（ｎ）は、現レイヤにおけるｎ枚目の特徴画像中の位置（ｉ，ｊ）に対応する積和演算結果を表す変数である。この（式１）では、前レイヤの中に特徴画像がＭ枚あり、ｍ枚目の特徴画像において位置（ｉ，ｊ）における特徴データををＩｉ，ｊ（ｍ）と表している。フィルタ係数（Ｃ１，１（ｍ，ｎ）〜ＣＸ，Ｙ（ｍ，ｎ））は（Ｘ×Ｙ）個あり、特徴画像によって異なる。現レイヤにおけるｎ枚目の特徴画像を算出するための積和演算回数は（Ｍ×Ｘ×Ｙ）回である。畳み込み演算を行った後に、現レイヤの情報に基づき、積和演算結果Ｏｉ，ｊ（ｎ）を用いて活性化処理やプーリング等の処理を行い、現レイヤの特徴画像を計算する。
【０００６】
ＣＮＮでは、積和演算の回数が多いため、携帯端末や車載機器等の組み込みシステムに適用する場合、効率的なデータ並列処理装置が求められる。処理データのビット幅を削減すると、畳み込み演算結果を計算する演算器のコストが小さくなるため、演算器の並列度を上げることが可能になる。非特許文献１では、レイヤ毎にデータのビット幅が異なるネットワークを処理するハードウェアの構成が提案されている。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】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
【発明の概要】
【発明が解決しようとする課題】
【０００８】
非特許文献１に記載の手法では、異なる種類の演算器でレイヤ毎にビット幅が異なるＣＮＮを処理する。入力レイヤの特徴データのビット幅が８ビットであり、中間レイヤの特徴データのビット幅が２ビットの場合、８ビットのデータ専用の畳み込み演算器と２ビットのデータ専用の畳み込み演算器が必要である。
【０００９】
８ビットのデータのレイヤと２ビットのデータのレイヤをパイプライン方式で処理し、データを並行して処理することができるが、レイヤ毎の畳み込み処理の計算量が異なる場合には、ハードウェアの利用効率が低下する。また、２ビットと８ビットの間のビット幅（４ビット等）の特徴データを処理する場合、専用の畳み込み演算器がないため、８ビットのデータ専用の畳み込み演算器を利用することになり、効率が下がる。
【００１０】
非特許文献２に記載の手法では、複数種類のビット幅の特徴データを処理可能なＳＩＭＤ（シングルインストラクションマルチプルデータ）構成のＲＮＮ（Ｒｅｃｃｕｒｅｎｔ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ）専用ハードウェアが提案されている。同じハードウェアで８ビット、１６ビット、３２ビットのデータを処理可能であるが、並行して出力されたデータの総和を計算する際に、一旦メモリに保持してからもう一回ＳＩＭＤのコマンドを実行する必要があり、処理時間が長くなる。本発明では、複数の階層を有するネットワークの中に複数種類のビット幅の特徴データがあっても効率的な処理を実現するための技術を提供する。
【課題を解決するための手段】
【００１１】
本発明の一様態は、複数の階層を有するネットワークにおけるそれぞれの階層について、該階層の複数のデータと複数のフィルタ係数との積和演算を実行する複数の積和演算手段と、前記複数の積和演算手段による複数の積和演算結果を複数のシフトパラメータに基づいてシフトする複数のシフト演算手段と、前記複数のシフト演算手段によりシフトされた複数の積和演算結果の総和を計算する加算手段と、前記階層のビット幅に応じて前記シフトパラメータの値を切り替える制御手段とを備えることを特徴とする。
【発明の効果】
【００１２】
本発明の構成によれば、複数の階層を有するネットワークの中に複数種類のビット幅の特徴データがあっても効率的な処理を実現することができる。
【図面の簡単な説明】
【００１３】
【図１】データ処理のフローチャート。
【図２】処理対象ネットワークの構成例を示す図。
【図３】情報処理装置のハードウェア構成例を示すブロック図。
【図４】データ処理部３０５の構成例を示すブロック図。
【図５】積和演算部４０２とシフト演算部４０３の構成例を示すブロック図。
【図６】処理時間とデータの関係図。
【図７】データ処理部３０５の構成例を示すブロック図。
【図８】積和演算部７０２とシフト演算部７０１の構成例を示すブロック図。
【図９】データ処理のフローチャート。
【図１０】特徴データが８ビット／２ビット／４ビットの例を示す図。
【発明を実施するための形態】
【００１４】
以下、添付図面を参照し、本発明の実施形態について説明する。なお、以下説明する実施形態は、本発明を具体的に実施した場合の一例を示すもので、特許請求の範囲に記載した構成の具体的な実施形態の１つである。
【００１５】
［第１の実施形態］
先ず、本実施形態に係る情報処理装置のハードウェア構成例について、図３のブロック図を用いて説明する。情報処理装置には、ＰＣ（パーソナルコンピュータ）、タブレット型端末装置、スマートフォンなどのコンピュータ装置を適用することができる。また、この情報処理装置は、これらの機器などに組み込む組み込み機器であっても構わない。
【００１６】
入力部３０１は、キーボード、マウス、タッチパネルなどのユーザインターフェースにより構成されており、ユーザが操作することで各種の指示をＣＰＵ３０６に対して入力することができる。
【００１７】
データ保存部３０２は、ハードディスクドライブ装置等の大容量情報記憶装置である。データ保存部３０２には、ＯＳ（オペレーティングシステム）、ＣＰＵ３０６が実行する各種のコンピュータプログラム、ＣＰＵ３０６が各種の処理を実行する際に用いるデータ等、情報処理装置にて使用される各種の情報が保存されている。データ保存部３０２に保存されているデータには、画像処理部３０９による処理対象となる画像も含まれている。また以下の説明において既知の情報として説明する情報は、このデータ保存部３０２に保存されている。データ保存部３０２に保存されているコンピュータプログラムやデータは、ＣＰＵ３０６やデータ処理部３０５や画像処理部３０９などによりＲＡＭ３０８などにロードされ、ＣＰＵ３０６やデータ処理部３０５や画像処理部３０９などの処理対象となる。
【００１８】
なお、データ保存部３０２は、記憶媒体（フレキシブルディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＤＶＤ、メモリーカード、ＣＦカード、スマートメディア、ＳＤカード、メモリスティック、ｘＤピクチャーカード、ＵＳＢメモリ等）であっても良い。この場合、情報処理装置は、このような記憶媒体に対する情報の読み書きを行う装置を有する必要がある。
【００１９】
通信部３０３は、外部の機器との間のデータ通信を行うための通信インターフェースとして機能するものであり、情報処理装置において処理の実行に必要な情報等をこの通信部３０３によって外部から取得するようにしても良い。また、情報処理装置が行った処理の結果を通信部３０３によって外部の機器に対して送信しても良い。
【００２０】
表示部３０４は、液晶画面やタッチパネル画面などにより構成されており、ＣＰＵ３０６やデータ処理部３０５や画像処理部３０９による処理結果を画像や文字などでもって表示することができる。なお、表示部３０４は、プロジェクタ装置などの投影装置であっても良い。また、入力部３０１と表示部３０４とを一体化させてタッチスクリーン装置のような、指示入力の受け付け機能と表示機能とを有する装置を形成しても良い。
【００２１】
データ処理部３０５は、画像処理部３０９によってＲＡＭ３０８に書き込まれた画像を用いて図１のフローチャートに従った処理を実行することでＣＮＮの計算を行い、該計算によって得られた結果をデータ保存部３０２やＲＡＭ３０８等に出力する。なお、データ処理部３０５による処理対象となる画像は、画像処理部３０９によってＲＡＭ３０８に書き込まれた画像に限らず、例えば、他の装置によって入力された画像であっても良い。データ処理部３０５については、図４を用いて後述する。
【００２２】
ＣＰＵ３０６は、ＲＯＭ３０７やＲＡＭ３０８に格納されているコンピュータプログラムやデータを用いて各種の処理を実行する。これによりＣＰＵ３０６は、情報処理装置全体の動作制御を行う。
【００２３】
ＲＯＭ３０７には、情報処理装置の設定データや起動プログラムなどの書換不要の情報が格納されている。ＲＡＭ３０８は、データ保存部３０２やＲＯＭ３０７からロードされたコンピュータプログラムやデータ、通信部３０３が外部から受信した情報、を格納するためのエリアを有する。またＲＡＭ３０８は、ＣＰＵ３０６やデータ処理部３０５や画像処理部３０９が各種の処理を実行する際に用いるワークエリアを有する。このようにＲＡＭ３０８は、各種のエリアを適宜提供することができる。
【００２４】
画像処理部３０９は、ＣＰＵ３０６からの指示に従って、データ保存部３０２に保存されている画像を読み出し、該画像中の各画素の画素値のレンジ調整を行ってから、該画像をＲＡＭ３０８に書き込む。
【００２５】
上記の入力部３０１、データ保存部３０２、通信部３０３、表示部３０４、データ処理部３０５、ＣＰＵ３０６、ＲＯＭ３０７、ＲＡＭ３０８、画像処理部３０９、は何れもバス３１０に接続されている。
【００２６】
なお、情報処理装置のハードウェア構成は図３に示した構成に限らない。例えば、図３の構成を複数の装置で実現させても良い。また、入力部３０１、データ保存部３０２、表示部３０４、といった機器を情報処理装置が有することに限らず、このような機器を情報処理装置と通信路を介して接続するようにしても良い。
【００２７】
また、ＲＡＭ３０８に格納するものとして説明する情報の一部若しくは全部をデータ保存部３０２に格納するようにしても良いし、データ保存部３０２に格納するものとして説明する情報の一部若しくは全部をＲＡＭ３０８に格納するようにしても良い。あるいは、ＲＡＭ３０８の一部をデータ保存部３０２として用いるようにしても良いし、通信部３０３が通信する相手の機器の記憶装置を、通信部３０３を介して利用するというように仮想的に構成するようにしても良い。
【００２８】
また、図３ではＣＰＵ３０６は１つとしているが、情報処理装置が有するＣＰＵ３０６の数は１に限らず、複数であっても良い。また、データ処理部３０５や画像処理部３０９はハードウェアとして実装するようにしても良いし、コンピュータプログラムとして実装するようにしても良い。後者の場合、このコンピュータプログラムはデータ保存部３０２に格納され、ＣＰＵ３０６が該コンピュータプログラムを実行することでデータ処理部３０５や画像処理部３０９の機能を実現させることになる。
【００２９】
なお、ＣＰＵ３０６は、データ処理部３０５による処理の結果に基づき、通信部３０３やデータ保存部３０２から取得する動画像における各フレームに対する画像処理および／または画像認識を行う。ＣＰＵ３０６による画像処理や画像認識の結果は、ＲＡＭ３０８やデータ保存部３０２に保存される、もしくは通信部３０３を介して外部の機器に対して出力される。また、ＣＰＵ３０６による画像処理や画像認識の結果は、表示部３０４に画像や文字として表示されても良いし、情報処理装置が音声出力機能を有する場合には、音声として出力するようにしても良い。
【００３０】
＜処理対象ネットワーク＞
本実施形態では処理対象ネットワークとしてＣＮＮを用いる。処理対象ネットワークの構成例を図２に示す。図２の処理対象ネットワークの詳細については上記の通りである。なお、処理対象ネットワークの積和演算の計算量、特徴画像のサイズ、枚数、ビット数等の情報はデータ保存部３０２等に保存されている。
【００３１】
図２の処理対象ネットワークのレイヤの数は４（レイヤ１〜４）であり、各レイヤの中に特徴画像が４枚ある。上記の通り、特徴画像（ｉ，ｊ）は、レイヤｉにおけるｊ枚目の特徴画像を表す。また、レイヤにより、レイヤ中の特徴画像のビット幅が異なる。レイヤ１の特徴画像のビット幅は８ビットであり、レイヤ２の特徴画像のビット幅は２ビットであり、レイヤ３の特徴画像のビット幅は４ビットであり、レイヤ４の特徴画像のビット幅は８ビットである。最初のレイヤ（レイヤ１）と最後のレイヤ（レイヤ４）は入出力画像の情報を保持するため、中間レイヤ（レイヤ２，３）のビット幅（それぞれ２ビット、４ビット）より大きいビット幅（８ビット）を使用することが多い。特徴画像は複数の画素（特徴データ）で構成されている。
【００３２】
ここで、データ処理部３０５によるレイヤ１〜４のそれぞれの特徴画像の計算（生成）について説明する。レイヤ１における８ビットの特徴画像（１，１）、（１，２）、（１，３）、（１，４）と、フィルタ係数と、を用いて上記の（式１）に従った積和演算を行う。そして、この積和演算の結果から、レイヤ２における２ビットの特徴画像（２，１）、（２，２）、（２，３）、（２，４）を生成する。
【００３３】
そして、レイヤ２における２ビットの特徴画像（２，１）、（２，２）、（２，３）、（２，４）と、フィルタ係数と、を用いて上記の（式１）に従った積和演算を行う。そして、この積和演算の結果から、レイヤ３における４ビットの特徴画像（３，１）、（３，２）、（３，３）、（３，４）を生成する。
【００３４】
そして、レイヤ３における４ビットの特徴画像（３，１）、（３，２）、（３，３）、（３，４）と、フィルタ係数と、を用いて上記の（式１）に従った積和演算を行う。そして、この積和演算の結果から、レイヤ４における８ビットの特徴画像（４，１）、（４，２）、（４，３）、（４，４）を生成する。
【００３５】
＜データ処理部３０５の構成例＞
データ処理部３０５の構成例を図４に示す。データメモリ４０１は、各レイヤにおけるそれぞれの特徴画像を構成する特徴データを保持しており、係数メモリ４０４はフィルタ係数を保持している。積和演算部４０２は、係数メモリ４０４に保持されているフィルタ係数と、データメモリ４０１に保持されている特徴データと、を用いた積和演算を行うことで、積和演算結果を計算する。シフト演算部４０３は、積和演算部４０２によるそれぞれの積和演算結果をシフトし、加算部４０６は、シフトされた複数の積和演算結果を足し合わせて「シフトされた積和演算結果の総和」を求める。処理部４０７は、加算部４０６が求めた「シフトされた積和演算結果の総和」に基づいて、活性化・プーリングの処理結果を計算し、該計算した活性化・プーリングの処理結果をデータメモリ４０１に格納する。制御部４０５は、データ処理部３０５全体の動作制御を行う。
【００３６】
データ処理部３０５によるデータ処理について、図１のフローチャートに従って説明する。ステップＳ１０１では、制御部４０５は、複数枚の入力特徴画像の特徴データとフィルタ係数とをＲＡＭ３０８から読み出し、該読み出した特徴データをデータメモリ４０１に格納し、該読み出したフィルタ係数を係数メモリ４０４に格納する。
【００３７】
ステップＳ１０２では、制御部４０５は、レイヤについてのループを開始し、未処理のレイヤのうち１つを以下の処理対象レイヤとする。ここでは一例としてレイヤ１〜４の順に処理対象とするため、最初はレイヤ１が処理対象レイヤとなる。
【００３８】
ステップＳ１０３では、制御部４０５は、シフト演算部４０３のシフトパラメータをレイヤ情報に応じて設定する。ステップＳ１０４では、制御部４０５は、出力特徴画像のループを開始し、出力特徴データを順番に計算する。ステップＳ１０５では、制御部４０５は、加算部４０６に保存されている積和演算結果を初期化してゼロに設定する。加算部４０６は総和計算の機能を備えている。
【００３９】
ステップＳ１０６では、制御部４０５は、入力特徴画像のループを開始し、入力特徴データを順番に処理する。ステップＳ１０７では、制御部４０５による制御の元で、積和演算部４０２、シフト演算部４０３のそれぞれは上記の積和演算、シフト演算を行う。ステップＳ１０７における処理の詳細（ステップＳ１１５〜ステップＳ１１７）については後述する。
【００４０】
ステップＳ１０８では、加算部４０６は、複数の積和演算結果を足し合わせて「シフトされた積和演算結果の総和」を求める。ステップＳ１０９では、制御部４０５は、入力特徴画像のループの終了判定をする。全ての入力特徴画像の処理が終わった場合にはステップＳ１１０に進み、未処理の入力画像特徴が残っている場合には、ステップＳ１０７に戻り、次の未処理の入力特徴画像の処理を開始する。ステップＳ１１０では、処理部４０７は、加算部４０６が求めた「シフトされた積和演算結果の総和」に基づき、以下の（式２）に従って活性化処理結果を計算する。
【００４１】
【数２】
2020057286.tif 000004
【００４２】
ここで、ｆ（・）は活性化関数であり、ｘは入力データである。この例ではReLU（Rectified Linear Unit）を用いて活性化関数を実現したが、ReLUに限らず、他の非線形の関数、または量子化関数で実現してもよい。なお、必要に応じて活性化処理結果のビット幅に調整する。
【００４３】
ステップＳ１１１では、処理部４０７はレイヤの情報に応じて、活性化処理結果に基づいてプーリング処理を行うことで、活性化・プーリングの処理結果を計算する。ステップＳ１１２では、処理部４０７は、ステップＳ１１１で計算した活性化・プーリングの処理結果を、次のレイヤの特徴画像としてデータメモリ４０１に格納する。
【００４４】
ステップＳ１１３では、制御部４０５は、出力特徴画像のループの終了判定をする。全ての出力特徴画像の処理が終わった場合にはステップＳ１１４に進み、未処理の出力画像特徴が残ってる場合には、ステップＳ１０５に戻り、未処理の出力画像特徴について処理を開始する。
【００４５】
ステップＳ１１４では、制御部４０５はレイヤのループの終了判定をする。全てのレイヤの処理が終わった場合、図１のフローチャートに従った処理は終了し、未処理のレイヤが残っている場合には、ステップＳ１０３に戻り、未処理のレイヤについて処理を開始する。
【００４６】
＜積和演算・シフト演算＞
ステップＳ１０７における積和演算・シフト演算（ステップＳ１１５〜ステップＳ１１７）について説明する。ステップＳ１１５では、制御部４０５は、データメモリ４０１から特徴データを読み出して積和演算部４０２に転送すると共に、係数メモリ４０４からフィルタ係数を読み出して積和演算部４０２に転送する。ここで、フィルタ係数の個数と転送回数は特徴データのビット幅により異なる。
【００４７】
ステップＳ１１６では、積和演算部４０２は、特徴データとフィルタ係数とに基づいて積和演算結果を計算する。ステップＳ１１７では、シフト演算部４０３は、ステップＳ１１６で得られた積和演算結果を、ステップＳ１０３で設定されていたシフトパラメータに基づいてシフトする。
【００４８】
＜ビット幅が異なる場合の詳細説明＞
本実施形態では、ビット幅が異なるデータを処理することが可能である。図１０（Ａ）には、８ビットの特徴データを処理する場合における積和演算部４０２、シフト演算部４０３、加算部４０６の動作を示している。図１０（Ｂ）には、２ビットの特徴データを処理する場合における積和演算部４０２、シフト演算部４０３、加算部４０６の動作を示している。
【００４９】
特徴データが８ビットの場合、図１０（Ａ）に示す如く、積和演算部４０２は８ビットの特徴データ１００１（値：２３４）を２ビットのデータ（２ビットデータ）ごとに分割する。そして積和演算部４０２は、該分割した４個の２ビットデータ（値：２、２、２、３）と共通のフィルタ係数とを用いて４つの積和演算結果を計算し、シフト演算部４０３は、４個のシフトパラメータに基づいて４つの積和演算結果をシフトする。そして加算部４０６は、シフトされた４つの積和演算結果を足し合わせて１個の特徴データ（８ビットの入力特徴データの積和演算結果）を計算する。このように、データ処理部３０５は１個の８ビットの入力特徴データを処理できる。
【００５０】
特徴データが２ビットの場合、図１０（Ｂ）に示す如く、積和演算部４０２は４個の２ビットデータ１００２（値：２、２、２、３）と４個のフィルタ係数とを用いて、４つの積和演算結果を計算する。シフト演算部４０３は、１個のシフトパラメータに基づいて、４つの積和演算結果をシフトする。シフトパラメータはゼロのため、シフト演算前後の結果は同じである。そして加算部４０６は、４つの積和演算結果を足し合わせて１個の特徴データ（４個の２ビットの入力特徴データの積和演算結果の総和）を計算する。このように、データ処理部３０５は４個の２ビットの入力特徴データを並列に処理できる。
【００５１】
ここで、入力特徴画像の枚数をＭとし、フィルタサイズを１×１とする。フィルタサイズが１画素であり、変数ｘ、ｙの値は定数であるため、Ｏｉ，ｊ（ｎ）はＩｉ，ｊ（ｎ）を用いて計算する。積和演算の計算（式１）が以下のように簡略化される。
【００５２】
【数３】
2020057286.tif 000005
【００５３】
フィルタサイズが１×１以上の場合、積和演算部４０２はフィルタ係数と入力特徴データとの畳み込み演算結果を計算するが、フィルタサイズが１×１の場合、積和演算部４０２はＩ（ｍ）とＣ（ｍ，ｎ）の積を計算する。
【００５４】
処理対象の特徴データはビット幅がαビットとビット幅がβビットの２種類であるとする。図４に示した積和演算部４０２は積和演算結果を計算するαビットのデータの積和演算ユニットがＰ個あり、シフト演算部４０３はシフト演算結果を計算するαビットのデータの積和演算ユニットがＰ個ある。α、β、Ｐは以下の条件を満たしている。
【００５５】
【数４】
2020057286.tif 000006
【００５６】
入力特徴データＩ’（β）のビット幅がβビットの場合、加算部４０６の出力は以下の（式５）で表され、（式６）、（式７）、（式８）が前提条件になる。
【００５７】
【数５】
2020057286.tif 000007
【００５８】
Ｏ（ｎ）はｎ枚目の出力特徴画像の積和演算結果であり、Ｉ（α），ｐ（ｍ）はαビットのデータの積和演算ユニットの入力データであり、Ｃｐ（ｍ，ｎ）はフィルタ係数であり、Ｓ（ｐ）はシフトパラメータである。変数ｍはαビットの入力特徴画像グループ（１グループ＝Ｐ枚）の番号（積和演算部４０２の処理番号）であり、変数ｐは積和演算ユニット、シフト演算ユニットの番号であり、変数ｎは出力特徴画像の番号である。シフト演算は２のべき乗の処理で表現される。
【００５９】
フィルタ係数Ｃｐ（ｍ，ｎ）は（式６）に示す如く、ｍ枚目のβビットの特徴画像が対応しているフィルタ係数Ｃ’（ｍ，ｎ）である。αビットの入力特徴画像グループはフィルタ係数が共通となるため、ｐを省略することができる。Ｐ個の積和演算ユニットに並列に供給するフィルタ係数の個数は１個であり、転送回数は１回である。
【００６０】
【数６】
2020057286.tif 000008
【００６１】
ここでは、入力特徴データＩ’（β）をＰ個のαビットのデータＩ（α），ｐ（ｍ）に分割する。シフトパラメータＳ（ｐ）の値は（式７）に示す如く、積和演算ユニットの番号ｐと分割されたデータのビット幅αに基づいて計算する。
【００６２】
【数７】
2020057286.tif 000009
【００６３】
βビットの入力特徴データＩ’（β）は式（８）に示す如く、分割されたＰ個のαビットのデータＩ（α），ｐ（ｍ）で表現される。
【００６４】
【数８】
2020057286.tif 000010
【００６５】
ここで、（式６）、（式７）、（式８）を（式５）に代入すると、出力データＯ（ｎ）の式は以下の（式９）となる。
【００６６】
【数９】
2020057286.tif 000011
【００６７】
一方、入力特徴データＩ’（α）のビット幅がαビットの場合、加算部４０６の出力は以下の（式１０）で表され、（式１１）、（式１２）、（式１３）が前提条件になる。
【００６８】
【数１０】
2020057286.tif 000012
【００６９】
Ｏ（ｎ）はｎ枚目の出力特徴画像の積和演算結果であり、Ｉ（α），ｐ（ｍ）はαビットのデータの積和演算ユニットの入力データであり、Ｃｐ（ｍ，ｎ）はフィルタ係数であり、Ｓ（ｐ）はシフトパラメータである。変数ｍはαビットの入力特徴画像グループ（１グループ＝Ｐ枚）の番号（積和演算部４０２の処理番号）であり、変数ｐは積和演算ユニット、シフト演算ユニットの番号であり、変数ｎは出力特徴画像の番号である。シフト演算は２のべき乗の処理で表現される。
【００７０】
フィルタ係数Ｃｐ（ｍ，ｎ）は第｛（ｍ−１）×Ｐ＋ｐ｝枚目のαビットの特徴画像が対応しているフィルタ係数Ｃ’（（ｍ−１）×Ｐ＋ｐ，ｎ）である。積和演算ユニットの番号ｐによりフィルタ係数が異なるため、Ｐ個の積和演算ユニットに並列に供給するフィルタ係数の個数はＰ個であり、転送回数はＰ回である。
【００７１】
【数１１】
2020057286.tif 000013
【００７２】
入力特徴データＩ’（α）はαビットのデータの積和演算ユニットの入力データＩ（α），ｐ（ｍ）になり、シフトパラメータＳ（ｐ）の値は（式１２）に示す如く常に０である。
【００７３】
【数１２】
2020057286.tif 000014
【００７４】
Ｐ個のαビットの入力特徴データＩ’（α）をそのまま積和演算ユニットに入力するが、Ｐ個の入力データはそれぞれ異なる特徴画像の特徴データである。特徴画像の番号は、積和演算ユニットの番号ｐと、積和演算ユニットの個数Ｐと、積和演算部４０２の処理番号ｍで以下の（式１３）に示す如く表現される。
【００７５】
【数１３】
2020057286.tif 000015
【００７６】
ここで、（式１１）、（式１２）、（式１３）を（式１０）に代入すると、出力データＯ（ｎ）の式は以下の（式１４）となる。
【００７７】
【数１４】
2020057286.tif 000016
【００７８】
シフトパラメータＳ（ｐ）の値とフィルタ係数の個数を変更することにより、ビット幅がαビットの特徴データＩ’（α）とビット幅がβビットの特徴データＩ’（β）を、同じ演算器（積和演算部４０２、シフト演算部４０３、加算部４０６）で処理することができる。
【００７９】
＜ビット幅が異なる場合の処理例＞
図５と図１０（Ａ）、（Ｂ）は、Ｐ＝４、β＝８、α＝２の場合の構成例である。積和演算部４０２は入力データのビット幅が２ビットであり、シフト演算部４０３は入力データのビット幅が６ビットであり、加算部４０６の入力データのビット幅が１２ビットである。
【００８０】
図５のハードウェア構成を用いて図２の処理対象ネットワークを処理した場合の処理時間の例を図６に示す。図６（Ａ）と図１０（Ａ）にレイヤ１（８ビットのデータ、入力特徴画像枚数Ｍ＝４）を処理した場合の例を示す。特徴画像（１，１）の特徴データＩ’（８）（１）は８ビットであり、（式８）に基づいて４つに分割された４つのデータＩ（２），１（１）−Ｉ（２），４（１）を、積和演算部４０２に入力する。入力特徴データとシフトパラメータとフィルタ係数Ｃ（ｍ，ｎ）を用いてシフト演算結果を計算し、加算部４０６に入力し、初期値ゼロと足し合わせる。計算結果はシフト演算結果になり、加算部４０６に保持される。所要時間は１ｍｓである。
【００８１】
特徴画像（１，２）の特徴データＩ’（８）（２）は８ビットであり、（式８）に基づいて分割された４つのデータＩ（２），１（２）−Ｉ（２），４（２）を、積和演算部４０２に入力する。入力特徴データとシフトパラメータとフィルタ係数Ｃ（ｍ，ｎ）を用いてシフト演算結果を計算し、加算部４０６に入力し、前の結果に加算する。所要時間は１ｍｓである。
【００８２】
特徴画像（１，２）と同じように、特徴画像（１，３）と特徴画像（１，４）を順番に処理し、シフト演算結果を累積し、加算結果を計算する。所要時間は２ｍｓである。最後に処理部４０７を通して、特徴画像（２，１）の特徴データを出力する。４枚の特徴画像の処理時間は４ｍｓである。
【００８３】
図６（Ｂ）と図１０（Ｂ）にレイヤ２（２ビットのデータ、入力特徴画像枚数Ｍ＝４）を処理した場合の例を示す。特徴画像（２，１）−（２，４）の特徴データＩ’（２）（１）−Ｉ’（２）（４）は２ビットであり、（式１３）に基づいて４つのデータＩ（２），１（１）−Ｉ（２），４（１）を、積和演算部４０２に並列に入力する。入力特徴データとシフトパラメータとフィルタ係数Ｃｐ（ｍ，ｎ）を用いてシフト演算結果を計算し、加算部４０６に入力し、初期値ゼロと足し合わせ、計算結果はシフト演算結果になる。最後に、処理部４０７を通して、特徴画像（３，１）の特徴データを出力する。４枚の特徴画像の処理時間は１ｍｓである。
【００８４】
図６（Ａ）、（Ｂ）と図１０（Ａ）、（Ｂ）に示す如く、入力特徴データが８ビットの場合、出力データあたりの処理時間は４ｍｓであり、入力特徴データが２ビットの場合、出力データあたりの処理時間は１ｍｓである。共通のデータ処理部３０５でビット幅が異なるデータを効率よく処理することが可能である。
【００８５】
［第２の実施形態］
以下では、第１の実施形態との差分について説明し、以下で特に触れない限りは第１の実施形態と同様であるものとする。
【００８６】
＜シフト演算と積和演算の順番＞
第１の実施形態では、積和演算の後にシフト演算を行う例について説明したが、積和演算とシフト演算の順番を入れ替えても処理結果は同じである。積和演算とシフト演算の順番が入れ替わった場合、図１のフローチャートの一部が変更される。ステップＳ１０７は図９のステップＳ９０１〜ステップＳ９０３になる。
【００８７】
本実施形態に係るデータ処理部３０５の構成例を図７に示す。シフト演算部７０１は、データメモリ４０１に格納されている特徴データをシフトパラメータに基づいてシフトし、積和演算部７０２は、シフトされた特徴データとフィルタ係数とに基づいて積和演算結果を計算する。
【００８８】
＜シフト演算・積和演算＞
ステップＳ１０７で行われる積和演算・シフト演算（ステップＳ９０１〜ステップＳ９０３）について説明する。ステップＳ９０１では、制御部７０４は、データメモリ４０１から特徴データを読み出し、係数メモリ７０３からフィルタ係数を読み出す。ステップＳ９０２では、シフト演算部７０１は、ステップＳ１０３で設定されていたシフトパラメータに基づき、特徴データをシフトする。ステップＳ９０３では、積和演算部７０２は、シフトされた特徴データとフィルタ係数とに基づいて積和演算結果を計算する。
【００８９】
＜ビット幅が異なる場合の詳細説明＞
本実施形態では、シフト演算部７０１はシフト結果を計算するαビットのデータのシフト演算ユニットがＰ個あり、積和演算部７０２は積和演算結果を計算するαビットのデータの積和演算ユニットがＰ個ある。積和演算部７０２の出力は（式１５）で表され、（式５）に示したシフト演算部４０３の出力と等価である。
【００９０】
【数１５】
2020057286.tif 000017
【００９１】
図８に、Ｐ＝４、β＝８、α＝２の場合の例を示す。シフト演算部７０１は入力データのビット幅が２ビットであり、積和演算部７０２は入力データのビット幅が８ビットであり、加算部４０６の入力データのビット幅が１２ビットである。シフト演算部７０１と積和演算部７０２はビット幅により回路規模が異なるため、シフト演算部７０１（シフト演算部４０３）と積和演算部７０２（積和演算部４０２）の順番を入れ替えることにより、全体的な回路規模を削減することが可能である。
【００９２】
［第３の実施形態］
第１，２の実施形態では、入力特徴データのビット幅がαビット（積和演算ユニットのビット幅）、βビット（積和演算ユニットのビット幅と積和演算ユニット数の積）である例について説明したが、制限があるわけでなく、α、β以外のビット幅でも良い。
【００９３】
＜入力特徴データのビット幅がγビットの場合＞
本実施形態では、ビット幅がγビットの入力特徴データを処理することが可能である。図１０（Ｃ）に特徴データが４ビットの例を示す。特徴データが４ビットの場合、図１０（Ｃ）に示す如く、積和演算部４０２は２個の４ビットの特徴データ１００３（値：１０、１４）を２ビットずつ分割する。そして積和演算部４０２は、該分割された４個の２ビットのデータ（値：２、２、２、３）と２個のフィルタ係数を用いて、４つの積和演算結果を計算する。シフト演算部４０３は、２個のシフトパラメータに基づいて、４つの積和演算結果をシフトする。加算部４０６は、シフトされた４つの積和演算結果を足し合わせて１個の特徴データ（２個の４ビットの入力特徴データの積和演算結果の総和）を計算する。このように、データ処理部３０５は２個の４ビットの入力特徴データを並列に処理できる。γは入力特徴データのビット幅であり、γの値はβと異なる。α、β、Ｐは第１の実施形態と同じ定義であり、γ、α、Ｐ’は以下の条件を満たしている。
【００９４】
【数１６】
2020057286.tif 000018
【００９５】
γはβより小さく、ＰはＰ’の倍数である。入力特徴データＩ’（γ）のビット幅がγビットの場合、加算部４０６の出力データＯ（ｎ）は以下の（式１７）で表され、（式１８）、（式１９）、（式２０）が前提条件になる。
【００９６】
【数１７】
2020057286.tif 000019
【００９７】
Ｏ（ｎ）はｎ枚目の出力特徴画像の積和演算結果であり、Ｉ（α），ｐ（ｍ）はαビットのデータの積和演算ユニットの入力データであり、Ｃｐ（ｍ，ｎ）はフィルタ係数であり、Ｓ（ｐ）はシフトパラメータである。変数ｍはαビットの入力特徴画像グループ（１グループ＝Ｐ枚）の番号（積和演算部４０２の処理番号）であり。積和演算ユニットとシフト演算ユニットはそれぞれＰ／Ｐ’セットに分かれており、変数ｑは積和演算ユニットのセットの番号である。変数ｐはセット内の積和演算ユニット、シフト演算ユニットの番号であり、変数ｎは出力特徴画像の番号である。シフト演算は２のべき乗の処理で表現される。
【００９８】
フィルタ係数Ｃｐ，ｑ（ｍ，ｎ）は第｛（ｍ−１）×Ｐ／Ｐ’＋ｑ｝枚目のγビットの特徴画像が対応しているフィルタ係数Ｃ’（（ｍ−１）×Ｐ／Ｐ’＋ｑ，ｎ）である。フィルタ係数は積和演算ユニットのセット番号ｑに基づいて計算する。フィルタ係数の一部が共通するため、Ｐ個の積和演算ユニットに並列に供給するフィルタ係数の個数はＰ／Ｐ’個であり、転送回数はＰ／Ｐ’回である。
【００９９】
【数１８】
2020057286.tif 000020
【０１００】
ここでは、入力特徴データＩ’（γ）をＰ’個のαビットのデータＩ（α），ｐ（ｍ）に分割する。シフトパラメータＳ（．）は積和演算ユニットのビット幅αと積和演算ユニットの番号ｐに基づいて計算する。
【０１０１】
【数１９】
2020057286.tif 000021
【０１０２】
γビットの入力特徴データＩ’（γ）は分割されたＰ’個のαビットのデータＩ（α），ｐ，ｑ（ｍ）で表現される。
【０１０３】
【数２０】
2020057286.tif 000022
【０１０４】
（式１８）、（式１９）、（式２０）を（式１７）に代入すると、出力データＯ（ｎ）の式は以下の（式２１）になる。
【０１０５】
【数２１】
2020057286.tif 000023
【０１０６】
シフトパラメータＳ（ｐ，ｑ）の値とフィルタ係数の個数を設定することにより、ビット幅がγビットの特徴データＩ’（γ）を、第１の実施形態と同じ演算器（積和演算部４０２、シフト演算部４０３、加算部４０６）で処理することができる。
【０１０７】
＜ビット幅が異なる場合の処理例＞
図５と図１０（Ｃ）に、Ｐ＝４、β＝８、α＝２の場合の構成例を示し、図５のハードウェア構成を用いて図２の処理対象ネットワークを処理した場合の処理時間の例を図６に示す。
【０１０８】
図６（Ｃ）と図１０（Ｃ）にＰ’＝２、γ＝４で、レイヤ３（４ビットのデータ、入力特徴画像枚数Ｍ＝４）を処理した場合の例を示す。特徴画像（３，１）と（３，２）の特徴データＩ’（４），（１）、Ｉ’（４），（２）は４ビットであり、（式２０）に基づいて分割された４つのデータＩ（２），１（１）−Ｉ（２），４（１）を、積和演算部４０２に入力する。入力特徴データとシフトパラメータとフィルタ係数Ｃ（ｍ，ｎ）を用いて、シフト演算結果を計算し、加算部４０６に入力し、初期値ゼロと足し合わせる。計算結果はシフト演算結果になり、加算部４０６に保持される。所要時間は１ｍｓである。
【０１０９】
特徴画像（３，３）と（３，４）の特徴データＩ’（４），（３）、Ｉ’（４），（４）は４ビットであり、（式２０）に基づいて分割された４つのデータＩ（２），１（２）−Ｉ（２），４（２）を、積和演算部４０２に入力する。入力特徴データとシフトパラメータとフィルタ係数Ｃ（ｍ，ｎ）を用いて、シフト演算結果を計算し、加算部４０６に入力し、前の結果に加算する。所要時間は１ｍｓである。最後に処理部４０７を通して、特徴画像（４，１）の特徴データを出力する。４枚の特徴画像の処理時間は２ｍｓである。
【０１１０】
このように、本実施形態では、ビット幅がαビット（積和演算ユニットのビット幅）、βビット（積和演算ユニットのビット幅αと積和演算ユニットの数Ｐの積）以外の特徴データも処理できるため、柔軟性が高いというメリットがある。
【０１１１】
［第４の実施形態］
第１の実施形態では、処理部４０７で活性化処理を実行する例について説明したが、活性化処理は処理部４０７で実行することに限らず、他の装置、例えば、ＣＰＵ３０６が活性化処理を実行するようにしても良い。これは他の処理についても同様で、上記の各実施形態では、上記の様々な処理の主体については一例を示したに過ぎず、上記の各実施形態で説明した主体とは異なる主体であっても良い。
【０１１２】
また、第１の実施形態では、レイヤ情報に応じて活性化・プーリング処理を実行するようにした。しかし、場合によっては、活性化・プーリング処理を省略するようにしても良い。
【０１１３】
また、第１〜３の実施形態では、フィルタサイズ（フィルタの高さと幅）が１×１であるケースについて説明したが、フィルタサイズは１×１に限らず、他のサイズであっても良い。このように、上記の各実施形態における説明で使用した数値はあくまでも具体的な説明を行うために例示した数値であって、上記の各実施形態にて説明した数値に限定されることを意図したものではない。
【０１１４】
フィルタサイズが小さい場合、フィルタ係数を保持するメモリ（係数メモリ４０４、７０３）の容量もより少なくてすむというメリットがある。フィルタの幅と高さの最小値は１である。
【０１１５】
また、第１〜３の実施形態では、入力特徴画像の枚数をＭ、出力特徴画像の枚数をＮ、とした。しかし、Ｍ，Ｎに適用可能な数値は特定の数値に限らない。このように、上記の様々な変数に適用可能な数値は特定の数値に限らない。
【０１１６】
また、第１〜３の実施形態では、フィルタ係数を係数メモリ４０４、７０３に保持し、特徴データをデータメモリ４０１に保持するようにしたが、フィルタ係数や特徴データを保持するメモリは特定のメモリに限らない。例えば、フィルタ係数や特徴データを積和演算部４０２、７０２が有するメモリに保持しても良いし、ＲＡＭ３０８に保持しても良い。
【０１１７】
また、フィルタ係数のビット幅は特定のビット幅に限らない。また、第１〜３の実施形態では、処理対象ネットワークとしてＣＮＮを用いたが、処理対象ネットワークはＣＮＮに限らず、ＲＮＮやＭＬＰ（多層パーセプトロン）等のような他の種類の複数のレイヤが階層的に接続されているネットワークであっても良い。
【０１１８】
（その他の実施形態）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【０１１９】
４０１：データメモリ  ４０２：積和演算部  ４０３：シフト演算部  ４０４：係数メモリ  ４０５：制御部  ４０６：加算部  ４０７：処理部
【図１】
2020057286.tif 000024
【図２】
2020057286.tif 000025
【図３】
2020057286.tif 000026
【図４】
2020057286.tif 000027
【図５】
2020057286.tif 000028
【図６】
2020057286.tif 000029
【図７】
2020057286.tif 000030
【図８】
2020057286.tif 000031
【図９】
2020057286.tif 000032
【図１０】
2020057286.tif 000033