(57)【要約】【課題】ニューラルネットワークを用いた演算において、演算の順序にかかわらず、効率的に演算を行うための技術を提供する。【解決手段】複数の階層を含むニューラルネットワークに対応する演算を行うデータ処理装置。パイプライン処理により、１つの階層の特徴面の一部に相当する各処理単位のデータを順次算出する複数の処理部を有する。ニューラルネットワークの構造情報に基づいて、処理単位のデータの算出順序を決定し、算出順序を制御するコマンドを複数の処理部に送信する。【選択図】図１
2020201883.tif 000002
【特許請求の範囲】
【請求項１】
複数の階層を含むニューラルネットワークに対応する演算を行うデータ処理装置であって、
パイプライン処理により、１つの階層の特徴面の一部に相当する各処理単位のデータを順次算出する複数の処理部を有する処理手段と、
前記ニューラルネットワークの構造情報に基づいて、前記処理単位のデータの算出順序を決定し、算出順序を制御するコマンドを前記複数の処理部に送信する制御手段と、
を備えることを特徴とするデータ処理装置。
【請求項２】
前記コマンドは、データの算出対象となる処理単位を示す情報を含むことを特徴とする、請求項１に記載のデータ処理装置。
【請求項３】
前記コマンドは、前記処理単位についての前記複数の処理部による処理方法を示す処理パラメータを特定する情報をさらに含むことを特徴とする、請求項２に記載のデータ処理装置。
【請求項４】
前記複数の処理部は、２以上の前記コマンドを保持可能なバッファを有することを特徴とする、請求項１から３のいずれか１項に記載のデータ処理装置。
【請求項５】
前記制御手段は、前記複数の処理部のそれぞれに対して一斉に前記コマンドを送信することを特徴とする、請求項１から４のいずれか１項に記載のデータ処理装置。
【請求項６】
前記制御手段は、前記複数の処理部のうちの少なくとも１つの処理部に対し、前記少なくとも１つの処理部の動作とは非同期に前記コマンドを送信することを特徴とする、請求項１から５のいずれか１項に記載のデータ処理装置。
【請求項７】
前記制御手段は、バスを介して前記複数の処理部に前記コマンドを送信することを特徴とする、請求項１から６のいずれか１項に記載のデータ処理装置。
【請求項８】
前記複数の処理部のそれぞれは、各処理単位に対する処理を互いに非同期に開始することを特徴とする、請求項１から７のいずれか１項に記載のデータ処理装置。
【請求項９】
前記複数の処理部のうちの第１の処理部と第２の処理部との間に、前記第１の処理部から前記第２の処理部へ転送される処理結果を一時的に格納するバッファをさらに備えることを特徴とする、請求項１から８のいずれか１項に記載のデータ処理装置。
【請求項１０】
前記処理手段である第１の処理手段に加えて、パイプライン処理により、１つの階層の特徴面の一部に相当する処理単位のそれぞれのデータを順次算出する複数の処理部を有する、第２の処理手段を備え、
前記第１の処理手段は、前記ニューラルネットワークの第１の部分構造の特徴面のデータを順次算出し、
前記第２の処理手段は、前記ニューラルネットワークの、前記第１の部分構造とは異なる第２の部分構造の特徴面のデータを順次算出することを特徴とする、請求項１から９のいずれか１項に記載のデータ処理装置。
【請求項１１】
前記第２の部分構造には、前記第１の部分構造からのサイドアウトプットが入力されることを特徴とする、請求項１０に記載のデータ処理装置。
【請求項１２】
前記処理手段である第１の処理手段に加えて、パイプライン処理により、１つの階層の特徴面の一部に相当する処理単位のそれぞれのデータを順次算出する複数の処理部を有する、第２の処理手段を備え、
前記制御手段は、前記ニューラルネットワークの構造情報に基づいて、前記コマンドを前記第２の処理手段に送るか否かを切り替えることを特徴とする、請求項１から１１のいずれか１項に記載のデータ処理装置。
【請求項１３】
複数の階層を含むニューラルネットワークに対応する演算を行うデータ処理装置の制御方法であって、
前記データ処理装置は、パイプライン処理により、１つの階層の特徴面の一部に相当する各処理単位のデータを順次算出する複数の処理部を有する処理手段を備え、
前記制御方法は、前記ニューラルネットワークの構造情報に基づいて、前記処理単位のデータの算出順序を決定し、算出順序を制御するコマンドを前記複数の処理部に送信する工程を有することを特徴とする、制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータ処理装置及びその制御方法に関し、特に、例えば対象データにおいて特定のパターンを認識する処理のような、ニューラルネットワークを用いた処理に関する。
【背景技術】
【０００２】
ニューラルネットワークを用いた演算処理の応用分野が広がっている。例えば、深層学習の進歩に伴って画像認識の精度が上がっており、深層学習のためには一般に畳み込みニューラルネットワーク（Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋｓ，  ＣＮＮ）が用いられている。
【０００３】
ＣＮＮのようなニューラルネットワークを用いた演算処理には多数の積和演算が含まれ、このような演算を効率的に行うことが求められている。また、処理の目的に応じて、様々な構成のニューラルネットワークを用いた演算を行うことが要求されることもある。このため、携帯端末又は車載機器などの組み込みシステムにおいてニューラルネットワークを用いるために、様々なニューラルネットワークを用いた演算を効率的に行うことができるデータ処理装置が求められている。
【０００４】
ニューラルネットワークを用いた演算を効率的に行うための構成として、特許文献１は、前階層におけるプーリング処理と、次階層における正規化処理のために必要な統計処理とを、並列に行うことを開示している。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１７−１５６９４１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１に記載の発明は、入力層側の中間層から順に、中間層単位で演算処理を行うように構成されている。しかしながら、ニューラルネットワークの種類によっては、異なる処理順序で演算処理を行うことにより、演算リソース又はメモリリソースを効率的に使用できる場合がある。
【０００７】
本発明は、ニューラルネットワークを用いた演算において、演算の順序にかかわらず、効率的に演算を行うための技術を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の目的を達成するために、例えば、本発明の一実施形態に係るデータ処理装置は以下の構成を備える。すなわち、
複数の階層を含むニューラルネットワークに対応する演算を行うデータ処理装置であって、
パイプライン処理により、１つの階層の特徴面の一部に相当する各処理単位のデータを順次算出する複数の処理部を有する処理手段と、
前記ニューラルネットワークの構造情報に基づいて、前記処理単位のデータの算出順序を決定し、算出順序を制御するコマンドを前記複数の処理部に送信する制御手段と、
を備える。
【発明の効果】
【０００９】
ニューラルネットワークを用いた演算において、演算の順序にかかわらず、効率的に演算を行うことができる。
【図面の簡単な説明】
【００１０】
【図１】一実施形態に係るデータ処理部の一例を示すブロック図。
【図２】一実施形態に係るデータ処理装置の一例を示すブロック図。
【図３】一実施形態に係るデータ処理装置が行う処理のフローチャート。
【図４】ニューラルネットワークの構造例を示す図。
【図５】一実施形態における制御部が行う処理のフローチャート。
【図６】一実施形態における制御部が行う処理のフローチャート。
【図７】一実施形態における制御コマンドの生成順を示す図。
【図８】制御コマンドのフォーマット及び係数保持部におけるデータ配置を示す図。
【図９】ネットワーク情報及び処理レイヤごとの処理パラメータを示す図。
【図１０】一実施形態におけるパイプライン処理のタイムチャート。
【図１１】一実施形態における制御部が行う処理のフローチャート。
【図１２】一実施形態に係るデータ処理部の一例を示すブロック図。
【図１３】ニューラルネットワークの構造例を示す図。
【発明を実施するための形態】
【００１１】
以下、添付図面を参照して実施形態を詳しく説明する。なお、以下の実施形態は特許請求の範囲に係る発明を限定するものではない。実施形態には複数の特徴が記載されているが、これらの複数の特徴の全てが発明に必須のものとは限らず、また、複数の特徴は任意に組み合わせられてもよい。さらに、添付図面においては、同一若しくは同様の構成に同一の参照番号を付し、重複した説明は省略する。
【００１２】
［実施形態１］
本発明の一実施形態に係るデータ処理装置は、複数の階層を含むニューラルネットワークに対応する演算を行うことができる。図２は、本発明の一実施形態に係るデータ処理装置の一構成例である、データ処理装置２００のハードウェア構成を示すブロック図である。
【００１３】
データ処理部２０５は、後に詳細に説明するように、複数の処理部と、制御部とを有しており、複数の階層を含むニューラルネットワークに対応する演算を行う。図２に示すデータ処理装置２００は、このようなデータ処理部２０５を用いて、画像に対してニューラルネットワークに対応する演算を行う。例えば、データ処理部２０５は、ＲＡＭ２０８に保存されている、画像処理部２０９により処理された画像と、ＣＮＮのネットワーク情報と用いて、図５のフローチャートに従う処理を行い、処理結果をデータ保存部２０２に出力することができる。もっとも、このようなデータ処理部２０５は、画像処理以外の用途で用いられてもよく、すなわち図２に示されるデータ処理部２０５以外の構成は、本発明にとって必須ではない。
【００１４】
入力部２０１は、ユーザからの指示、又はデータを受け付ける装置である。入力部２０１は、例えば、キーボード、ポインティング装置、又はボタン等であってもよい。
【００１５】
データ保存部２０２は画像データのようなデータを保存することができる。データ保存部２０２は、例えば、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＤＶＤ、メモリーカード、ＣＦカード、スマートメディア、ＳＤカード、メモリスティック、ｘＤピクチャーカード、又はＵＳＢメモリなどであってもよい。データ保存部２０２は、プログラム又はその他のデータを保存してもよい。なお、後述するＲＡＭ２０８の一部がデータ保存部２０２として用いられてもよい。
【００１６】
通信部２０３は、機器間の通信を行うためのインタフェース（Ｉ／Ｆ）である。データ処理装置２００は、通信部２０３を介して、他の装置とデータを交換することができる。なお、データ処理装置２００は、通信部２０３を介して接続された記憶装置を、データ保存部２０２として用いてもよい。
【００１７】
表示部２０４は、ユーザなどに対して情報を表示する装置である。表示部２０４は、例えば、画像処理前又は画像処理後の画像を表示すること、又はＧＵＩなどのその他の画像を表示することができる。表示部２０４は、例えば、ＣＲＴ又は液晶ディスプレイなどであってもよい。表示部２０４は、ケーブルなどで接続された、データ処理装置２００の外部にある装置であってもよい。なお、入力部２０１及び表示部２０４が同一装置であってもよく、例えば、入力部２０１及び表示部２０４はタッチスクリーン装置であってもよい。この場合、タッチスクリーン上での入力は、入力部２０１への入力に相当する。
【００１８】
ＣＰＵ２０６は、データ処理装置２００全体の動作を制御する。また、ＣＰＵ２０６は、データ処理部２０５によって生成され、データ保存部２０２に保存されている処理結果に基づいて、画像処理又は画像認識処理のような各種の処理を行うことができる。ＣＰＵ２０６は、これらの処理結果をＲＡＭ２０８に保存することができる。
【００１９】
ＲＯＭ２０７及びＲＡＭ２０８は、ＣＰＵ２０６による処理に必要なプログラム、データ、及び作業領域などを、ＣＰＵ２０６に提供する。ＣＰＵ２０６による処理に必要なプログラムはデータ保存部２０２又はＲＯＭ２０７に格納されていてもよく、データ保存部２０２又はＲＯＭ２０７からＲＡＭ２０８に読み込まれてもよい。また、データ処理装置２００は通信部２０３を介してプログラムを受信してもよい。この場合、プログラムは、いったんデータ保存部２０２に記録された後にＲＡＭ２０８に読み込まれてもよいし、通信部２０３からＲＡＭ２０８に直接読み込まれてもよい。いずれの場合であっても、ＣＰＵ２０６はＲＡＭ２０８に読み込まれたプログラムを実行することができる。
【００２０】
画像処理部２０９は、画像データに対する画像処理を行うことができる。例えば、画像処理部２０９は、ＣＰＵ２０６からの指示に従って、データ保存部２０２に書き込まれている画像データを読み出し、画素値のレンジ調整を行い、処理結果をＲＡＭ２０８に書き込むことができる。
【００２１】
バス２１０は、各部が互いにデータを送受信できるように、上記の各部を接続する。
【００２２】
図２に示すデータ処理装置２００は、上記の各部を内部に有している。しかしながら、例えば入力部２０１、データ保存部２０２、及び表示部２０４を含む各部は、公知の通信方式に従う通信路で互いに接続されていてもよい。すなわち、一実施形態に係るデータ処理装置は、物理的に分かれている複数の装置によって構成されていてもよい。
【００２３】
また、図２に示すデータ処理装置２００は１つのＣＰＵ２０６を有しているが、複数のＣＰＵを有していてもよい。さらに、データ処理装置２００が有する各部（例えばデータ処理部２０５及び画像処理部２０９）のうちの少なくとも一部の機能が、ＣＰＵ２０６がプログラムに従って動作することにより実現されてもよい。
【００２４】
データ処理装置２００は、図２に示されていない様々な構成要素を有していてもよいが、その説明は省略する。
【００２５】
図３は、データ処理装置２００が行う処理の一例を示すフローチャートである。ステップＳ３０１において画像処理部２０９は、ＣＰＵ２０６からのコマンドに従って、データ保存部２０２に書き込まれた画像に対する画像処理を行い、処理結果をＲＡＭ２０８に書き込む。
【００２６】
ステップＳ３０２においてデータ処理部２０５は、ＣＰＵ２０６からのコマンドに従って、ステップＳ３０１でＲＡＭ２０８に書き込まれた画像に対するＣＮＮ演算処理を行う。
【００２７】
ステップＳ３０３においてＣＰＵ２０６は、ステップＳ３０２で得られた演算結果を用いて、画像中の物体の認識処理などの後処理を行う。また、ＣＰＵ２０６は、認識結果をＲＡＭ２０８に書き込むことができる。例えばＣＰＵ２０６は、ステップＳ３０１でＲＡＭ２０８に書き込まれた画像に、認識処理の結果をオーバーレイすることができる。
【００２８】
ステップＳ３０４において表示部２０４は、ステップＳ３０３における認識処理の結果を表示する。例えば表示部２０４は、ステップＳ３０３において認識処理の結果がオーバーレイされた画像をディスプレイに表示することができる。
【００２９】
＜ニューラルネットワークの構造例＞
本実施形態に係るデータ処理装置は、様々なニューラルネットワークに対応する演算を行うことができる。以下では、データ処理装置が用いるニューラルネットワークの一例を説明する。
【００３０】
ニューラルネットワークの一種であるＣＮＮは、複数の中間層がカスケード接続された構造を有する。以下では、前階層の特徴面（特徴画像）に対し、中間層に対応する処理を行うことで得られた特徴面（特徴画像）のことを、中間層の特徴面（特徴画像）と呼ぶ。ＣＮＮは、中間層として畳み込み層を有している。例えば、図４に示すＣＮＮは、複数の処理単位が接続された構造を有し、１つの処理単位は、３つの中間層、すなわち順に接続された畳み込み層、活性化層、及びプーリング層を有している。以下では、この処理単位を処理レイヤと呼ぶ。図４に示すＣＮＮは、４つの処理レイヤ（処理レイヤ０〜処理レイヤ３）を有するネットワークである。ただし、処理レイヤ０は入力層に相当し、処理レイヤ０は畳み込み層、活性化層、及びプーリング層を有していない。１つの処理レイヤの特徴面は、前の処理レイヤの特徴面に対して畳み込み層に対応する処理を行い、こうして得られた特徴面に対して活性化層に対応する処理を行い、こうして得られた特徴面にプーリング層に対応する処理を行うことで得られる。
【００３１】
畳み込み層に対応する処理は、特徴面に対するフィルタ処理に相当する。すなわち、前階層の特徴面の画素値と、フィルタ係数と、を用いてフィルタ処理を行うことで、畳み込み層の特徴面が得られる。フィルタ係数は、例えば学習により決定することができる。フィルタ処理は積和演算（畳み込み演算）であり、乗算及び累積加算演算を複数含んでいる。
【００３２】
畳み込み層の特徴面（Ｏｉ，ｊ（ｎ））は、前階層の特徴面（Ｉｉ，ｊ（ｍ））と、この畳み込み層に対応するフィルタ係数（Ｃ０，０（ｍ，ｎ）〜ＣＸ−１，Ｙ−１（ｍ，ｎ））と、を用いて、下式に従って算出できる。
【数１】
2020201883.tif 000003
上式において、ｉ，ｊは特徴面の座標を示す。ｎは畳み込み層の特徴面の番号である。また、ｍは前階層の特徴面の番号であり、前階層の特徴面はＭ枚である。このように、畳み込み層の１枚の特徴面を算出するために、前階層の複数の特徴面を用いることができる。また、ｎ番目の特徴面を算出するために、ｍ番目の特徴面に適用されるフィルタ係数（Ｃ０，０（ｍ，ｎ）〜ＣＸ−１，Ｙ−１（ｍ，ｎ））の数はＸ×Ｙ個であり、特徴面ごとに異なっている。ここで、座標（ｉ，ｊ）における畳み込み層の特徴面（Ｏｉ，ｊ（ｎ））の値を算出するための積和演算回数は、Ｍ×Ｘ×Ｙ回となる。
【００３３】
活性化層に対応する処理は、前階層の特徴面（例えば畳み込み層における積和演算結果Ｏｉ，ｊ（ｎ））に対する活性化処理である。活性化処理としては、例えばシグモイド関数又はＲｅＬｕ関数のような、ＣＮＮの分野において用いられている処理を用いることができる。
【００３４】
プーリング層に対応する処理は、前階層（例えば活性化層）の特徴面に対するプーリング処理である。プーリング処理としては、ＣＮＮの分野において用いられている処理を用いることができる。本実施形態においては、プーリング処理として、２×２の最大値、最小値、又は平均値フィルタ処理、及び続く２×２のストライド処理が行われる。ただし、プーリング層の有無は処理レイヤごとに定められている。すなわち、プーリング層を含む処理レイヤと、プーリング層を含まない処理レイヤとが混在していてもよい。
【００３５】
図４に示す処理レイヤ１〜３における処理についてより詳しく説明する。処理レイヤ１では、特徴面４０１とフィルタ係数とを用いたカーネルサイズ３×３のフィルタ処理、シグモイド関数を用いた活性化処理、及び平均値フィルタを用いたプーリング処理が行われ、処理レイヤ１の特徴面４０２が生成される。処理レイヤ２では、特徴面４０２とフィルタ係数とを用いたカーネルサイズ５×５のフィルタ処理、及びＲｅＬｕ関数を用いた活性化処理が行われ、処理レイヤ２の特徴面４０３が生成される。処理レイヤ３では、特徴面４０３とフィルタ係数とを用いたカーネルサイズ１×１のフィルタ演算、ＲｅＬｕ関数を用いた活性化処理、及び最大値フィルタを用いたプーリング処理が行われ、処理レイヤ３の特徴面４０４が生成される。
【００３６】
特徴面４０１は２４×１６の大きさの、３枚（ＲＧＢチャネル）の入力画像である。特徴面４０２は１２×８の大きさの、４枚の特徴面である。特徴面４０３は１２×８の大きさの、７枚の特徴面である。特徴面４０４は６×４の大きさの、７枚の特徴面である。特徴面４０４は、図４に示すＣＮＮの出力結果である。
【００３７】
このような、ＣＮＮに従って行われる処理を規定する情報、すなわちＣＮＮの構造を示す情報は、予め作成されていてもよい。本実施形態において、このような情報はＲＡＭ２０８に格納されている。ＣＮＮの構造を示す情報は、例えば、入力層の特徴面（入力画像）のサイズ、処理レイヤ１〜３の畳み込み層で用いられるフィルタのカーネルサイズ、及び処理レイヤ１〜３の特徴面の枚数を示す情報を含むことができる。また、ＣＮＮの構造を示す情報は、処理レイヤ１〜３の活性化層で行われる活性化関数の種類、及び処理レイヤ１〜３のプーリング層の有無及び行われるプーリングの種類を示す情報を含むことができる。
【００３８】
（データ処理部２０５の構成）
次に、図１を参照して、データ処理部２０５の構成を説明する。データ処理部２０５は、複数の処理部として、展開処理部１０３、演算処理部１０４、活性化処理部１０５、及びプーリング処理部１０６を有している。これらの複数の処理部は、パイプライン処理により、１つの階層の特徴面の一部に相当する各処理単位のそれぞれのデータを順次算出する。各処理部は、処理単位のデータを算出することを繰り返すことにより、特徴面を算出することができる。以下では、処理単位のことをタイルと呼ぶことがある。以下の例において、１つのタイルの大きさは、特徴面の幅×２ラインである。
【００３９】
展開処理部１０３は、フィルタ係数を取得して演算処理部１０４に転送することができる。展開処理部１０３は、後述する制御コマンドに対応する処理単位についてのフィルタ係数を取得することができる。例えば、展開処理部１０３は、制御コマンドに含まれている処理レイヤ番号に基づいて、係数保持部１０７からランレングス符号化された係数値を読み出し、復号を行うことで、処理単位についてのフィルタ係数を取得することができる。また、展開処理部１０３は、制御コマンドに含まれている処理レイヤ番号に基づいて、処理単位についてのカーネルサイズ及び特徴面数を示す情報をパラメータ保持部１０２から読み出し、この情報に基づいてフィルタ係数の取得を行うことができる。
【００４０】
演算処理部１０４は、展開処理部１０３から転送されたフィルタ係数を用いて、前段の処理レイヤの特徴面に対するフィルタ処理を、タイル単位で行うことができる。そして、演算処理部１０４は、フィルタ処理の結果である特徴面のデータを活性化処理部１０５に出力する。演算処理部１０４は、後述する制御コマンドに示される処理単位のデータの算出に用いる、前段の処理レイヤの特徴面を、特徴量保持部１０８から取得することができる。なお、演算処理部１０４は、処理レイヤ１の処理を行う際には、入力画像をＲＡＭ２０８から取得することができる。また、演算処理部１０４は、制御コマンドに含まれている処理レイヤ番号に基づいて、フィルタ演算のカーネルサイズを示す情報をパラメータ保持部１０２から読み出し、この情報に基づいてフィルタ演算を行うことができる。なお、フィルタ演算の前後で特徴面のサイズが変わらないようにするため、演算処理部１０４は読み込んだ特徴面の周囲に余白を付加することができる。
【００４１】
活性化処理部１０５は、演算処理部１０４から転送された特徴面に対して活性化処理を行う。そして、活性化処理部１０５は、活性化処理の結果である特徴面のデータをプーリング処理部１０６に出力する。活性化処理部１０５は、後述する制御コマンドに対応する処理単位についての、活性化処理を指定する情報を取得することができる。例えば、活性化処理部１０５は、制御コマンドに含まれている処理レイヤ番号に基づいて、パラメータ保持部１０２に格納されている、使用する活性化関数を示す情報を取得し、取得した情報に従って活性化処理を行うことができる。
【００４２】
プーリング処理部１０６は、活性化処理部１０５から転送された特徴面に対してプーリング処理を行う。プーリング処理部１０６は、後述する制御コマンドに対応する処理単位についての、プーリング処理を指定する情報を取得することができる。例えば、プーリング処理部１０６は、制御コマンドに含まれている処理レイヤ番号に基づいて、パラメータ保持部１０２に格納されている、プーリング処理の有無及び使用するプーリング処理方法を示す情報を取得することができる。そして、プーリング処理部１０６は、取得した情報に従ってプーリング処理を行うことができる。そして、プーリング処理部１０６は、プーリング処理の結果を特徴量保持部１０８に格納する。ここで、プーリング処理部１０６は、プーリング処理を行わない場合は１タイルの処理結果（２ライン）を、プーリングを行う場合は１タイルの処理結果をプーリングして得られた結果（１ライン）を、特徴量保持部１０８に格納することができる。
【００４３】
また、プーリング処理部１０６は、処理単位が最終処理レイヤの最終タイルであることを制御コマンドが示している場合、制御部１０１に対して処理完了通知を転送することができる。さらに、プーリング処理部１０６は、１つのタイル（又は制御コマンド）についての処理が完了した際にも、処理の完了を示す通知を制御部１０１に送信することができる。
【００４４】
各処理部１０３〜１０６は、受信した制御コマンドを保持するバッファを有していてもよい。このようなバッファは、各処理部１０３〜１０６の処理の遅延時間を吸収することができる。このバッファは、２以上の制御コマンドを保持可能なように構成されていてもよい。
【００４５】
また、複数の処理部のうちの第１の処理部と第２の処理部との間に、第１の処理部から第２の処理部へと転送される処理結果を一時的に格納するバッファが設けられていてもよい。例えば、演算処理部１０４は展開処理部１０３の出力を保持するためのバッファを、活性化処理部１０５は演算処理部１０４の出力を保持するバッファを、プーリング処理部１０６は活性化処理部１０５の出力を保持するバッファを、それぞれ有していてもよい。このようなバッファを設けることにより、処理部１０３〜１０６は、前後の処理部の処理完了を待たずに、独立して次の制御コマンドに従う処理を開始することができる。
【００４６】
データ処理部２０５は、さらに、ニューラルネットワークの構造情報に基づいて、処理単位のデータの算出順序を決定し、算出順序を制御する制御コマンドを複数の処理部に送信する制御部１０１を有している。制御部１０１は、後述するように、ＣＮＮネットワーク情報に基づいて制御コマンドを発行することにより、複数の処理部を制御することができる。制御部１０１は、データ処理部２０５の全体を制御してもよい。
【００４７】
図１に示す例において、制御部１０１は複数の処理部のそれぞれに対して一斉に同じ制御コマンドを送信する。図１において、制御部１０１は、各処理部１０３〜１０６と直接接続されており、他の制御部を介さずに各処理部１０３〜１０６に制御コマンドを送信することができる。一方で、制御コマンドを受信した処理部１０３が、処理部１０４〜１０６に制御コマンドを転送してもよい。このような構成によっても、制御部１０１は複数の処理部に制御コマンドを送信することができる。
【００４８】
データ処理部２０５は、さらに、パラメータ保持部１０２、係数保持部１０７、及び特徴量保持部１０８を有していてもよい。もっとも、これらの処理部の機能は、ＲＡＭ２０８などのメモリによって実現されてもよい。
【００４９】
パラメータ保持部１０２は、制御部１０１及び処理部１０３〜１０６が共有するパラメータを保持することができ、例えばＲＡＭであってもよい。パラメータ保持部１０２は、処理単位についての複数の処理部による処理方法を示す処理パラメータを保持することができる。処理パラメータとしては、例えば、フィルタ演算のカーネルサイズ、フィルタ演算により生成される特徴面の数、活性化処理の種類、又は、プーリング処理の有無若しくは種類などが挙げられる。パラメータ保持部１０２は、それぞれの処理単位について、例えば処理レイヤごとに、このような処理パラメータを保持することができる。そして、上述のように、制御コマンドが、このような処理パラメータを特定する情報、例えば処理レイヤ番号、を含んでいてもよい。各処理部１０３〜１０６は、処理レイヤ番号のような、パラメータ保持部１０２における処理パラメータの格納位置を示す情報に従って、パラメータ保持部１０２から処理パラメータを取得し、処理パラメータに従う処理を行うことができる。
【００５０】
係数保持部１０７は、各処理レイヤで使用されるフィルタ係数を保持することができ、例えばＲＡＭであってもよい。データ量を減らすために、フィルタ係数はランレングス符号化されていてもよい。上述のように、展開処理部１０３は、処理レイヤ番号に従って、係数保持部１０７に保持されているフィルタ係数を取得してもよい。このため、フィルタ係数は処理レイヤ単位ごとに符号化されていてもよい。例えば、係数保持部１０７は、図８（Ｂ）に示すように、処理レイヤ番号に対応付けてフィルタ係数を保持することができる。本実施形態において、係数保持部１０７には、ＣＰＵ２０６によって予めフィルタ係数が書き込まれている。すなわち、係数保持部１０７は、データ処理部２０５が用いるフィルタ係数を保持するバッファであってもよく、ＣＰＵ２０６は、処理に必要なフィルタ係数をデータ保存部２０２などのメモリから読み込み、係数保持部１０７に書き込んでもよい。
【００５１】
特徴量保持部１０８は、ＣＮＮに対応する演算の中間データである、各処理レイヤの特徴面の一部又は全てを格納することができ、例えばＲＡＭであってもよい。また、特徴量保持部１０８は、ＣＮＮからの最終出力である、処理レイヤ３の特徴面（出力層の特徴面）も格納することができる。なお、係数保持部１０７と特徴量保持部１０８とが、同一のメモリ（例えばＲＡＭ）などによって実現されていてもよい。
【００５２】
（制御部１０１の処理）
次に、制御部１０１が行う処理の一例について、図５のフローチャートを参照して説明する。ステップＳ５０１において制御部１０１は、ＲＡＭ２０８に保存されているネットワーク情報を読み出し、ネットワーク情報に基づいて各処理レイヤの処理パラメータを計算する。制御部１０１は、計算した処理パラメータをパラメータ保持部１０２に保存する。
【００５３】
図９（Ａ）は、図４に示すＣＮＮの構成を示すネットワーク情報の一例を示す。図９（Ａ）においてかっこ内の数値は図４に示すＣＮＮについてのパラメータ値を示す。１００１は処理レイヤ数を示し、これは図４のＣＮＮについては４である。１００２は入力画像の幅及び高さを示し、これは図４のＣＮＮについてはそれぞれ２４及び１６である。１００３〜１００６は、処理レイヤ０〜３についての、特徴面の枚数、カーネルサイズ、活性化関数の種類、及びプーリングの種類を示す。ただし、処理レイヤ０は入力層であるため、特徴面の枚数以外の情報は、参照されないダミー情報である。
【００５４】
図９（Ｂ）は、図９（Ａ）に示すネットワーク情報に基づいて、ステップＳ５０１で生成される処理パラメータの一例を示す。１１０１は処理レイヤ数であり、１００１と同じ値を示す。１１０２〜１１０５は、処理レイヤ０〜３についての、特徴面の幅及び高さ、特徴面の枚数、タイル数、カーネルサイズ、活性化関数の種類、及びプーリングの種類を示す。各処理レイヤについての特徴面の幅及び高さは、入力画像の幅及び高さ（１００２）と、各処理レイヤについてのプーリングの種類に基づいて、制御部１０１が計算できる。また、各処理レイヤについてのタイル数は、特徴面の幅及び高さと、プーリングの種類と、に基づいて、制御部１０１が計算できる。
【００５５】
ステップＳ５０２において制御部１０１は制御コマンドを発行する。制御部１０１は、ネットワーク情報（図９（Ａ））及び各処理レイヤについての処理パラメータ（図９（Ｂ））に基づいて制御コマンドを生成することができる。そして、制御部１０１は、生成した制御コマンドを、展開処理部１０３、演算処理部１０４、活性化処理部１０５、及びプーリング処理部１０６に転送することができる。
【００５６】
ステップＳ５０３において制御部１０１は、ステップＳ５０２で転送した最後の制御コマンドに対する終了通知を受信するまで待機する。一例において、制御部１０１は、プーリング処理部１０６に転送した最後の制御コマンドに対する終了通知を受信するまで待機することができる。最後の制御コマンドに対する終了通知を受信したことは、ＣＮＮに対応する演算が終了したことを意味する。この場合、制御部１０１はＣＰＵ２０６に割り込み通知を行うことができる。
【００５７】
次に、ステップＳ５０２における制御コマンド発行の詳細な処理例を、図６のフローチャートを参照して説明する。以下では、図４に示すＣＮＮに対応する処理を行う例における、具体的な動作例を説明する。図６に従う処理では、可能な限り、出力層（処理レイヤ３）に近い処理レイヤについての処理が優先して行われる。すなわち、出力層により近い処理レイヤのタイルのデータを算出するために用いられる、前段の処理レイヤのタイルのデータが既に算出されている場合、出力層により近い処理レイヤのタイルのデータが優先して算出される。制御部１０１は、このような算出順序でタイルのデータが算出されるように、制御コマンドを生成する。
【００５８】
特開２０１８−１４７１８２号公報で説明されているように、このような算出順序を採用することにより、特徴量保持部１０８に保持する中間データ（出力層以外の処理レイヤ１〜２の特徴面）を削減することができる。例えば、特徴量保持部１０８に保持されている、後の処理で使われない中間データを、新しく生成された中間データで上書きすることができるため、特徴量保持部１０８のメモリサイズを小さくすることができる。
【００５９】
ステップＳ６０１において制御部１０１は、制御情報を初期化する。例えば、制御部１０１は、現在処理中の処理レイヤを示す処理レイヤ番号に、処理レイヤ１の番号（１）を設定することができる。以下では、この処理レイヤ番号が示す処理レイヤのことを現処理レイヤと呼ぶ。また、制御部１０１は、各処理レイヤについての生成済タイル数に０を設定することができる。
【００６０】
ステップＳ６０２〜ステップＳ６０７において、制御部１０１は、全ての処理レイヤ（処理レイヤ１〜３）の、全てタイルについての制御コマンドを生成及び転送する。まずステップＳ６０２において、制御部１０１は、現処理レイヤに処理可能なタイルが存在するか否かを判定する。処理可能なタイルが存在する場合、処理はステップＳ６０３に進み、存在しない場合、処理はステップＳ６０７に進む。
【００６１】
現処理レイヤの前段の処理レイヤ（以下、前処理レイヤと呼ぶ）の特徴面に対してカーネルサイズＫ（Ｋ×Ｋ）のフィルタ演算を行うことで、現処理レイヤのタイル（２ライン）のデータを算出可能である場合、このタイルは処理可能なタイルである。言い換えれば、現処理レイヤのタイルのデータを算出するために用いる前処理レイヤのタイルが全て算出されている場合、このタイルは処理可能である。例えば、前処理レイヤのＮ−（Ｋ−１）／２番目のラインからＮ＋１＋（Ｋ−１）／２番目のラインまでの特徴量が既に算出されていれば、現処理レイヤのＮ番目及びＮ＋１番目のラインを含むタイルは処理可能である。この例では現処理レイヤが処理レイヤ１であり、前処理レイヤである処理レイヤ０（入力層）の特徴面（入力画像）を参照可能であるから、判定はＹＥＳとなる。
【００６２】
ステップＳ６０３において、制御部１０１は、現処理レイヤの、ステップＳ６０２で発見された処理可能なタイルの処理を行うことを指示する制御コマンドを、各処理部１０３〜１０６に発行する。制御コマンドは、データの算出対象となる処理単位を示す情報を含むことができる。図８（Ａ）は、制御コマンドのフォーマット例を示す。図８（Ａ）に示されるように、制御コマンドは、処理すべき処理レイヤの番号と、処理すべきタイルの番号と、を含んでいてもよく、こうして特徴面データの算出対象となるタイルを指定することができる。
【００６３】
次にステップＳ６０４において、制御部１０１は、現処理レイヤの生成済タイル数に１を加える。
【００６４】
次にステップＳ６０５において、制御部１０１は、最終処理レイヤの全てのタイルについて処理を行うことを指示する制御コマンドを転送したか否かを判定する。この判定は、最終処理レイヤについての生成済みタイル数と、最終処理レイヤについての処理パラメータ（例えば図９（Ｂ））と、を参照して行うことができる。転送している場合、図６の処理は終了する。転送していない場合、処理はステップＳ６０６に進む。この例では、まだ処理レイヤ１のタイル０の処理しか完了していないため、判定はＮｏであるから、処理はステップＳ６０６に進む。
【００６５】
ステップＳ６０６において、制御部１０１は、処理レイヤ番号に１を加える。この例では、処理レイヤ番号は２になり、現処理レイヤは処理レイヤ２になる。その後、処理はステップＳ６０２に戻る。この例では、ステップＳ６０２に戻ると、制御部１０１は現処理レイヤ（処理レイヤ２）に処理可能なタイルが存在するかどうかを判定する。処理レイヤ２のタイル０の処理には、処理レイヤ１の特徴面のうちライン０〜ライン３のデータが必要であるが、この時点ではライン０〜ライン１のデータしか生成されていない。したがって、判定はＮｏとなり、ステップＳ６０７に進む。
【００６６】
ステップＳ６０７において、制御部１０１は、処理レイヤ番号から１を減算する。その後、処理はステップＳ６０２に戻り、前処理レイヤについて処理が行われる。
【００６７】
以上の処理を繰り返すと、図７に示す順番で、各タイルの処理を行うことを指定する制御コマンドが生成及び転送される。図７には、処理レイヤ０〜３の特徴面７０１〜７０４と、各タイルの算出順序が示されている。図７において、「タイルｔ（ｋ）」は、処理レイヤ内におけるｔ番目のタイルがｋ番目に生成されることを示している。なお、ｄｕｍｍｙと記載された箇所７０５は、フィルタ演算を行うために付加される余白ラインを示す。そして、処理レイヤ３のタイル３の処理を行うことをしている制御コマンドの生成及び転送が完了すると、直後のステップＳ６０５において判定がＹｅｓとなり、制御コマンドの生成及び送信処理が完了する。
【００６８】
図１０は、図１に示すデータ処理部２０５が、図４に示すＣＮＮに対応する処理を行っている様子を示す、パイプライン処理のタイムチャートである。図１０において、Ｌ［ｋ］Ｔ［ｔ］は、処理レイヤｋのタイルｔを処理していることを示す。各処理の処理時間は、パラメータによって、すなわち処理レイヤによって異なっている。
【００６９】
この例において、各処理部（１０３〜１０６）のそれぞれは４つの制御コマンドを格納するバッファを持っている。このため、制御部１０１は、各処理部（１０３〜１０６）が処理を完了するたびに制御コマンドを発行する代わりに、先行して４つの制御コマンドを発行することができる。すなわち、制御部１０１は、複数の処理部のうちの少なくとも１つの処理部に対し、少なくとも１つの処理部の動作とは非同期に制御コマンドを送信している。このような構成によれば、制御部１０１の構成をシンプルにすることができる。例えば、制御部１０１は、展開処理部１０３の動作とは独立に、Ｌ［１］Ｔ［０］、Ｌ［１］Ｔ［１］、Ｌ［１］Ｔ［２］、及びＬ［１］Ｔ［３］の各処理を開始させる制御コマンドを連続して各処理部（１０３〜１０６）に発行している。
【００７０】
なお、制御部１０１は、４つの制御コマンドを発行した後は、ステップＳ６０３において、処理が完了していない制御コマンドが３つ以下になるまで待機してから、新しい制御コマンドを発行してもよい。図１０に示される例では、プーリング処理部１０６がＬ［１］Ｔ［０］の処理を完了すると、制御部１０１は各処理部（１０３〜１０６）にＬ［２］Ｔ［０］の処理を開始させる制御コマンドを発行している。
【００７１】
図１０に示されるように、各処理部（１０３〜１０６）は、パイプライン処理により、異なるタイルの処理を並列して行うことができる。さらに、複数の処理部のそれぞれは、各タイルに対する処理を互いに非同期に開始することができる。なお、図１０の例では、１２０１〜１２０３に示されるように、演算処理部１０４は、前処理レイヤのプーリング処理が完了した後に、次処理レイヤの処理を開始している。しかしながら、このように処理レイヤが変わる場合であっても、プーリング処理部１０６が前処理レイヤのプーリング処理を行う以前に、展開処理部１０３は次処理レイヤのフィルタ係数を取得することができる。このため、演算処理部１０４は、前処理レイヤのプーリング処理が完了すると、直ちに次処理レイヤの処理を開始している。
【００７２】
ステップＳ５０２における別の詳細な処理例を、図１１のフローチャートを参照して説明する。図１１に従う処理では、入力層（処理レイヤ０）に近い処理レイヤについての処理が優先して行われる。特開２０１８−１４７１８２号公報で説明されているように、このような算出順序を採用することにより、係数保持部１０７に保持するフィルタ係数データを削減することができる。例えば、後に処理する処理レイヤについてのフィルタ係数データで、係数保持部１０７に保持されている処理が終了した処理レイヤについてのフィルタ係数データを上書きすることができるため、係数保持部１０７のメモリサイズを小さくすることができる。
【００７３】
ステップＳ１３０１の処理はステップＳ６０１と同様である。また、ステップＳ１３０２及びＳ１３０３の処理は、ステップＳ６０３及びＳ６０４と同様である。
【００７４】
ステップＳ１３０４において制御部１０１は、現処理レイヤの全てのタイルについて処理を行うことを指示する制御コマンドを転送したか否かを判定する。転送している場合、処理はステップＳ１３０５に進む。転送していない場合、処理はステップＳ１３０２に戻り、ステップＳ１３０２〜Ｓ１３０４の処理が、現処理レイヤの全てのタイルについての制御コマンドが発行されるまで繰り返される。
【００７５】
ステップＳ１３０５において制御部１０１は、現処理レイヤが最終処理レイヤであるかどうかを判定する。最終処理レイヤである場合、図１１の処理は終了する。最終処理レイヤではない場合、処理はステップＳ１３０６に進む。ステップＳ１３０６の処理はステップＳ６０６と同様に行われる。その後、処理はステップＳ１３０２に戻り、全ての処理レイヤの全てのタイルについて制御コマンドが発行されるまで、ステップＳ１３０２〜Ｓ１３０６の処理が繰り返される。
【００７６】
図１１に従って制御部１０１が制御コマンドを発行すると、データ処理部２０５は、処理レイヤ１の処理タイル０〜タイル７、処理レイヤ２のタイル０〜タイル３、及び処理レイヤ３のタイル０〜タイル３の順に処理を行う。
【００７７】
以上のように、本実施形態に係るデータ処理装置は、ニューラルネットワークに対応する演算を行う際に、階層、又は階層内のタイルの処理順序にかかわらず、効率的に演算を行うことができる。例えば、本実施形態に係るデータ処理装置は、様々な構成のニューラルネットワークに対応する演算を、柔軟に処理することができる。また、一実施形態に係るデータ処理装置は、領域ごとに複数の処理レイヤにまたがる処理を行うこと、及び、処理レイヤごとの処理を行うことが可能である。
【００７８】
図６及び図１１を参照して説明したように、このような階層又は階層内のタイルの処理順序は、２以上の決定方法から選択された方法で決定されてもよい。特開２０１８−１４７１８２号公報で説明されているように、ニューラルネットワークに応じて処理順序を切り替えることにより、係数保持部１０７に保持されるフィルタ係数データ、及び特徴量保持部１０８に保持される中間データのサイズを制御できる。したがって、制御部１０１は、係数保持部１０７の容量又は特徴量保持部１０８の容量に基づいて、フィルタ係数データ又は中間データを保持できるように、タイルの処理順序を決定することができる。また、ニューラルネットワークに応じて処理順序を切り替えることにより、フィルタ係数データと中間データの合計サイズを制御できる。したがって、制御部１０１は、フィルタ係数データと中間データの合計サイズが小さくなるように、タイルの処理順序を決定することができる。
【００７９】
［実施形態２］
実施形態２に係るデータ処理装置は、ニューラルネットワークの第１の部分構造の特徴面のデータを順次算出する第１の複数の処理部と、ニューラルネットワークの第２の部分構造の特徴面のデータを順次算出する第２の複数の処理部と、を有している。ここで、第２の部分構造は、第１の部分構造とは異なるものである。例えば、第２の部分構造には、第１の部分構造からのサイドアウトプットが入力されてもよい。このような構成において、第２の部分構造は、サイドアウトプット計算を行うことができる。
【００８０】
実施形態２に係るデータ処理装置の一例として、サイドアウトプット型のニューラルネットワークに対応する演算を行うデータ処理装置について説明する。データ処理装置の構成及び処理は、図２及び図３に示される実施形態１に係るデータ処理装置の構成及び処理と同様であり、以下では実施形態１とは異なる部分を説明する。
【００８１】
図１３は、データ処理装置が用いるサイドアウトプット型のＣＮＮの一例を示す。特徴面４０１〜４０４は図４と同様である。また、特徴面１５０５及び１５０６はそれぞれ特徴面４０１及び４０３に対するフィルタ処理及び活性化処理後の特徴面であり、図４に従う処理でも生成される。
【００８２】
特徴面１５０７〜１５１１はサイドアウトプットを示す。特徴面１５０５は処理レイヤ１からのサイドアウトプットとして用いられる。特徴面１５０９は、特徴面１５０５に対して１×１カーネルのフィルタ演算を行うことで生成される、２４×１６の大きさの２枚の特徴面である。特徴面１５０７は、処理レイヤ２からのサイドアウトプットであって、特徴面１５０３を拡大することにより得られた、２４×１６の大きさの特徴面である。特徴面１５０７に対して１×１カーネルの畳み込み演算を行い、演算結果を特徴面１５０８に重畳することにより、特徴面１５１０が得られる。特徴面１５０８は、処理レイヤ３からのサイドアウトプットであって、特徴面１５０６を拡大することにより得られた、２４×１６の大きさの特徴面である。特徴面１５０８に対して１×１カーネルの畳み込み演算を行い、演算結果を特徴面１５１０に重畳することにより、特徴面１５１１が得られる。特徴面１５１１は、サイドアウトプット計算の最終出力となる。
【００８３】
本実施形態においては、このような図１３に示すＣＮＮの構成を示すネットワーク情報を用いることができる。このネットワーク情報は、実施形態１と同様の情報に加えて、サイドアウトプットの有無、及びサイドアウトプットの特徴面の大きさなどを示す、再度アウトプットネットワークの構成の情報を含むことができる。このようなネットワーク情報は、実施形態１と同様にＲＡＭ２０８に格納されていてもよい。
【００８４】
図１２は、本実施形態に係るデータ処理部２０５の構成を示す。展開処理部１０３、演算処理部１０４、活性化処理部１０５、プーリング処理部１０６、係数保持部１０７、及び特徴量保持部１０８の構成は実施形態１と同様である。制御部１０１は、サイドアウトプット計算のための処理部（１４０９〜１４１２）に対しても制御コマンドを発行し、重畳処理部１４１２からも処理完了通知を受信することを除き、実施形態１と同様である。また、パラメータ保持部１０２は、サイドアウトプット計算のための処理パラメータも保持することを除き、実施形態１と同様である。
【００８５】
拡大処理部１４０９、展開処理部１４１０、演算処理部１４１１、及び重畳処理部１４１２は、サイドアウトプット計算のための処理部である。実施形態１と同様に、各処理部１４０９〜１４０２は、処理の遅延時間を吸収するための、受信した制御コマンドを保持するバッファを有していてもよい。また、各処理部１４０９〜１４０２の間には、実施形態１と同様に、前段の出力を保持するためのバッファが設けられていてもよい。係数保持部１４１３は、係数保持部１０７と同様に、サイドアウトプット計算のためのフィルタ係数を格納するメモリである。また、特徴量保持部１４１４は、特徴量保持部１０８と同様に、サイドアウトプット計算で得られた中間データ及び最終出力を保持するメモリである。
【００８６】
拡大処理部１４０９は、活性化処理部１０５から転送された特徴面を拡大し、演算処理部１４１１に出力する。拡大処理部１４０９は、転送された特徴面を、サイドアウトプットの特徴面と同じ大きさに拡大することができる。一方で、図１３に示す処理レイヤ１のように、活性化処理後の特徴面と、サイドアウトプットの特徴面の大きさとが同じ場合、拡大処理部１４０９は、転送された特徴面をそのまま出力することができる。また、拡大処理部１４０９は、任意の倍率で特徴面を拡大又は縮小してもよい。このような構成を持つデータ処理部２０５は、様々な大きさのサイドアウトプットの計算を行うことができる。
【００８７】
展開処理部１４１０及び演算処理部１４１１は、展開処理部１０３及び演算処理部１０４と同様の演算を行うことができる。すなわち、演算処理部１４１１は、展開処理部１４１０から転送されたフィルタ係数を用いて、拡大処理部１４０９から転送された特徴面に対するフィルタ演算をタイル単位で行うことができる。演算処理部１４１１は、得られた演算結果を重畳処理部１４１２に転送する。重畳処理部１４１２は、演算処理部１４１１から転送された特徴面を、特徴量保持部１４１４から読み出した特徴面にタイル単位で重畳し、特徴量保持部１４１４に格納する。こうして、重畳処理部１４１２は、前処理レイヤからのサイドアウトプットに対し、現処理レイヤからのサイドアウトプットを重畳することができる。また、重畳処理部１４１２は、制御コマンドが、処理対象のレイヤが最終処理レイヤの最終タイルであることを示している場合、ネットワーク制御部１４０１に対して処理完了通知を転送することができる。さらに、重畳処理部１４１２は、１つのタイル（又は制御コマンド）についての処理が完了した際にも、処理の完了を示す通知を制御部１０１に送信することができる。
【００８８】
次に、実施形態２において制御部１０１が行う処理について説明する。制御部１０１の処理は、ステップＳ５０３、Ｓ６０３、及びＳ１３０２以外は実施形態１と同様である。すなわち、ステップＳ６０３及びＳ１３０２において制御部１０１は、制御コマンドを、各処理部（１０３〜１０６）に加えて、各処理部（１４０９〜１４１２）にも転送する。また、ステップＳ５０３において制御部１０１は、最後の制御コマンドに対するプーリング処理部１０６及び重畳処理部１４１２の双方からの終了通知を受信するまで待機することができる。
【００８９】
制御部１０１は、ニューラルネットワークの構造情報に基づいて、制御コマンドを第２の複数の処理部（１４０９〜１４１２）に送るか否かを切り替えることができる。例えば、実施形態２に係るデータ処理部２０５は、実施形態１に係るデータ処理部２０５の機能を包含している。このため、実施形態２に係るデータ処理部２０５は、サイドアウトプットの無いネットワーク（図４）及びサイドアウトプットの有るネットワーク（図１３）の双方を柔軟に処理可能である。例えば、ニューラルネットワークからのサイドアウトプットの有無に基づいて、制御部１０１による制御を切り替えることができる。すなわち、制御部１０１は、サイドアウトプットが無い場合は、実施形態１と同様に処理部（１０３〜１０６）に制御コマンドを送ることで、演算制御を行うことができる。一方で、制御部１０１は、サイドアウトプットが有る場合は、本実施形態のように処理部（１０３〜１０６及び１４０９〜１４１２）に制御コマンドを送ることで、演算制御を行うことができる。
【００９０】
なお、実施形態１，２において、制御部１０１と各処理部の間の配線を減らすために、制御部１０１と複数の処理部とをデータバスを介して接続してもよい。この場合、制御部１０１は、データバスを介して複数の処理部に制御コマンドを送信することができる。
【００９１】
（その他の実施例）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【００９２】
発明は上記実施形態に制限されるものではなく、発明の精神及び範囲から離脱することなく、様々な変更及び変形が可能である。従って、発明の範囲を公にするために請求項を添付する。
【符号の説明】
【００９３】
１０１：制御部、１０２：パラメータ保持部、１０３：展開処理部、１０４：演算処理部、１０５：活性化処理部、１０６：プーリング処理部、１０７：係数保持部、１０８：特徴量保持部、２０５：データ処理部
【図１】
2020201883.tif 000004
【図２】
2020201883.tif 000005
【図３】
2020201883.tif 000006
【図４】
2020201883.tif 000007
【図５】
2020201883.tif 000008
【図６】
2020201883.tif 000009
【図７】
2020201883.tif 000010
【図８】
2020201883.tif 000011
【図９】
2020201883.tif 000012
【図１０】
2020201883.tif 000013
【図１１】
2020201883.tif 000014
【図１２】
2020201883.tif 000015
【図１３】
2020201883.tif 000016