(57)【要約】【課題】複数の処理ノードを用いる演算処理をより少ないメモリサイズで実行可能とする。【解決手段】複数の処理ノードを用いて構成される階層型ネットワークを利用して演算処理を実行する演算処理装置は、複数の処理ノードの各々が演算処理に利用するパラメータと複数の処理ノードの各々における演算処理の演算結果とを記憶する記憶手段と、階層型ネットワークの構成に基づいて、当該階層型ネットワークにおける少なくとも１つの階層において演算結果データ及びパラメータのバッファ方式を切換えるバッファ制御手段と、を有する。【選択図】図１
2018147182.tif 000002
【特許請求の範囲】
【請求項１】
複数の処理ノードを用いて構成される階層型ネットワークを利用して処理を実行する演算処理装置であって、
前記複数の処理ノードの各々が演算処理に利用するパラメータと、前記複数の処理ノードの各々における演算処理の演算結果と、を記憶する記憶手段と、
前記階層型ネットワークの構成に基づいて、該階層型ネットワークにおける少なくとも１つの階層において、前記記憶手段における前記パラメータ及び前記演算結果のバッファ方式を切換えるバッファ制御手段と、
を有することを特徴とする演算処理装置。
【請求項２】
前記階層型ネットワークのそれぞれの階層で利用するバッファ方式の複数の組合せそれぞれに対して、前記記憶手段において前記パラメータを記憶するために必要な第１のメモリサイズと、前記記憶手段において前記演算結果を記憶するために必要な第２のメモリサイズと、の合計メモリサイズを算出する算出手段と、
前記合計メモリサイズに基づいて、前記複数の組合せの中から、前記階層型ネットワークで利用するバッファ方式の組合せを選択する選択手段と、
を更に有し、
前記バッファ制御手段は、前記選択手段により選択されたバッファ方式の組合せに従ってバッファ方式を切換える
ことを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記選択手段は、前記合計メモリサイズが最小となるバッファ方式の組合せを選択する
ことを特徴とする請求項２に記載の演算処理装置。
【請求項４】
前記選択手段により選択されたバッファ方式の組合せに従って前記複数の処理ノードを制御するためのシーケンス制御情報を生成する生成手段と、
前記シーケンス制御情報に基づいて前記複数の処理ノードに演算処理を実行させるシーケンス制御手段と、
を更に有する
ことを特徴とする請求項２又は３に記載の演算処理装置。
【請求項５】
前記バッファ制御手段は、前記バッファ方式として、リングバッファ方式とラインバッファ方式とを利用可能に構成されている
ことを特徴とする請求項１乃至４の何れか１項に記載の演算処理装置。
【請求項６】
前記階層型ネットワークは、ＣＮＮ（Convolutional Neural Networks）である
ことを特徴とする請求項１乃至５の何れか１項に記載の演算処理装置。
【請求項７】
前記演算処理は画像に対する畳込みフィルタ演算処理であり、
前記構成は、前記ＣＮＮの階層の個数、各階層における特徴面数、各階層における画像サイズ、各階層におけるカーネルサイズ、の少なくとも１つを含む
ことを特徴とする請求項６に記載の演算処理装置。
【請求項８】
前記複数の処理ノードは論理的な処理ノードであり同一の物理的な処理ノードにより実現される
ことを特徴とする請求項１乃至７の何れか１項に記載の演算処理装置。
【請求項９】
複数の処理ノードを用いて構成される階層型ネットワークを利用して処理を実行する演算処理装置の制御方法であって、前記演算処理装置は、前記複数の処理ノードの各々が演算処理に利用するパラメータと、前記複数の処理ノードの各々における演算処理の演算結果と、を記憶する記憶部を有し、
前記制御方法は、
前記階層型ネットワークの構成に基づいて、前記階層型ネットワークで利用するバッファ方式の組合せを決定する決定工程と、
前記決定工程により決定されたバッファ方式の組合せに従って前記記憶部における前記パラメータ及び前記演算結果のバッファ方式を切換えるバッファ制御工程と、
を含むことを特徴とする制御方法。
【請求項１０】
コンピュータを、請求項１乃至８の何れか１項に記載の演算処理装置の各手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の処理ノードを用いる階層型ネットワークを利用した演算処理に必要なメモリサイズを低減する技術に関するものである。
【背景技術】
【０００２】
ディープネット（或いはディープニューラルネット、ディープラーニングとも称される）と呼ばれる多階層のニューラルネットワークが、近年非常に大きな注目を集めている。ディープネットは、特定の演算手法を指すものではないが、一般的には、入力データ（例えば画像）に対して、階層的な処理（ある階層の処理結果を、その後段の階層の処理の入力とする）を行うものを指す。特に画像識別の分野では、畳込みフィルタ演算を行う畳込み層と、統合演算を行う統合層とから構成されるディープネットが主流になりつつある。
【０００３】
近年のディープネットと呼ばれる大規模な結合ネットワークでは、１つの特徴面を生成するための結合数が増えており、それによって参照する特徴面が増える。そのため、演算に必要な特徴面を保持するメモリサイズおよび、それに必要なフィルタカーネル用のバッファメモリサイズが増大することになる。このため、特に、ハードウェアにより実現する場合、ＬＳＩの内部にサイズの大きいＲＡＭ（Random-access Memory）を用意する必要があり、回路規模が増大する。ソフトウェアにより実現する場合であっても、組み込み機器に実装する場合、システムに必要なメモリ量が増大する事で同様にコストが上昇する。すなわち、演算に使用可能なメモリ量は、システムにかけることのできるコストによって定まる有限な値となる。
【０００４】
そこで、特徴面を保持するメモリの増大を避ける手法として、特許文献１および２で入力するデータを部分領域単位で順次投入する方法が利用されている。具体的には、特許文献１および２では効率的に畳込みフィルタ演算のために各領域を包含する複数ライン分のメモリサイズを用いることで畳込みフィルタ演算を順々に階層をまたがって行っている。
【０００５】
また、特許文献３では、上述した複数の特徴面に対するバッファ制御方式をネットワークの構成に合わせて、予め選択し、選択した方式に従ってネットワーク全体を処理する方法が提案されている。この方式では複数のバッファ制御方式から必要となるメモリサイズが小さい方式を選択することでメモリサイズが削減できる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許第５１８４８２４号
【特許文献２】特許第５１７１１１８号
【特許文献３】特許第５３６８６８７号
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、近年のディープネットのネットワーク構造は階層間の結合の粗密化や階層構造が多様化している。階層が深いディープネットにおいては、たとえ部分的な領域であっても、多層にまたがって特徴面データを保持しなければならず、結果的にメモリサイズが増大する。この場合、特徴面保持・フィルタカーネル係数保持の両観点からとらえると、上述の従来の技術は本質的な必要メモリサイズ削減にはならない場合がある。
【０００８】
本発明はこのような問題を鑑みてなされたものであり、複数の処理ノードを用いる階層型ネットワークを利用した演算処理を、より少ないメモリサイズで実行可能とする技術を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述の問題点を解決するため、本発明に係る演算処理装置は以下の構成を備える。すなわち、複数の処理ノードを用いて構成される階層型ネットワークを利用して演算処理を実行する演算処理装置は、前記複数の処理ノードの各々が演算処理に利用するパラメータと、前記複数の処理ノードの各々における演算処理の演算結果と、を記憶する記憶手段と、前記階層型ネットワークの構成に基づいて、該階層型ネットワークにおける少なくとも１つの階層において、前記記憶手段における前記演算結果データ及び前記パラメータのバッファ方式を切換えるバッファ制御手段と、を有する。
【発明の効果】
【００１０】
本発明によれば、複数の処理ノードを用いる階層型ネットワークを利用した演算処理を、より少ないメモリサイズで実行可能とする技術を提供することができる。
【図面の簡単な説明】
【００１１】
【図１】ＣＮＮ処理部の詳細構成を示す図である。
【図２】シーケンサー部の詳細構成を示す図である。
【図３】リングバッファ制御およびフレームバッファ制御それぞれにおけるデータ転送のタイムチャートを示す図である。
【図４】ＣＮＮのネットワーク構成を例示的に示す図である。
【図５】ライン単位での演算処理を説明する図である。
【図６】第１実施形態に係るパターン検出装置の構成を示す図である。
【図７】リングバッファ方式およびフレームバッファ方式それぞれにおける必要メモリ量を説明する図である。
【図８】パターン検出装置における制御を示すフローチャートである。
【図９】ＣＮＮ処理の詳細動作を示すフローチャートである。
【図１０】シーケンス制御情報の例を示す図である。
【図１１】リングバッファ制御およびフレームバッファ制御それぞれにおけるメモリ割り当ての例を示す図である。
【図１２】演算部の構成の一例を示す図である。
【図１３】リングバッファおよびフレームバッファの動作を説明する図である。
【図１４】ＣＮＮにおける複数の処理ノードの論理接続構成を説明する図である。
【図１５】バッファ制御方式の切換え位置を決定するフローチャートである。
【図１６】バッファ制御方式を切換える場合のシーケンス制御情報の例を示す図である。
【図１７】ラインバッファ処理時に必要なメモリサイズの見積もり例を示す図である。
【発明を実施するための形態】
【００１２】
以下に、図面を参照して、この発明の好適な実施の形態を詳しく説明する。なお、以下の実施の形態はあくまで例示であり、本発明の範囲を限定する趣旨のものではない。
【００１３】
（第１実施形態）
本発明に係る演算処理装置の第１実施形態として、ＣＮＮ処理により画像中の特定の物体を検出するパターン検出装置を例に挙げて以下に説明する。ここで、ＣＮＮは、Convolutional Neural Networksの略である。
【００１４】
＜前提技術＞
ＣＮＮはそのディープネットの実現方法として代表的な手法であり、以下ＣＮＮに基づく手法について説明する。
【００１５】
図４は、ＣＮＮのネットワーク構成を例示的に示す図である。具体的には、処理対象の入力画像４０１に対してフィルタカーネル４０２を使用した畳込みフィルタ演算処理の例を示している。このような場合、以下の数式（１）に示す積和演算処理により、畳込みフィルタ演算結果が算出される。
【００１６】
【数１】
2018147182.tif 000003
【００１７】
ここで、「ｄｉ，ｊ」は座標（ｉ，ｊ）での処理対象画像画素値を示し、「ｆｉ，ｊ」は座標（ｉ，ｊ）でのフィルタ演算結果を示す。また、「ｗｓ，ｔ」は座標（ｉ＋ｓ，ｊ＋ｔ）の処理対象画像画素値に適用するフィルタカーネルの値（重み係数）を示し、「ｃｏｌｕｍｎＳｉｚｅ」及び「ｒｏｗＳｉｚｅ」はフィルタカーネルサイズを示す。フィルタカーネル４０２を処理対象画像中でスキャンさせつつ、上述の演算を行うことで、畳込みフィルタ演算の出力結果を得ることができる。以下フィルタカーネルに対し中身のパラメータ値を重み係数として表現する。
【００１８】
この畳込みフィルタ演算及びシグモイド変換に代表される非線形変換処理から、特徴量が生成される。入力画像に対してこの特徴量を生成する演算を階層的に繰り返し行うことで、画像の特徴を表現する特徴面が得られる。つまり、入力画像全体に対して畳込みフィルタ演算を繰り返して生成された二次元特徴量が特徴面になる。
【００１９】
画像からの特徴量抽出処理に畳込みフィルタ演算を用い、抽出した特徴量を用いた識別処理にパーセプトロンに代表される行列積演算を用いる構成になっているものを、典型的なディープネットとしている。この特徴量抽出処理は畳込みフィルタ演算を何度も繰り返す多階層処理であることが多く、また識別処理も全結合の多階層のパーセプトロンが用いられることがある。この構成は、近年盛んに研究されているディープネットとしては一般的な構成である。
【００２０】
ディープネットの演算例を図４を参照して説明する。ここでは、入力画像（入力層）４０１に対して、畳込みフィルタ演算により特徴量抽出を行い、特徴面４２６の特徴量を得、その特徴量に対して、識別処理を行い、識別結果４２８を得るような処理を示している。入力画像４０１から特徴面４２６を得るまでに畳込みフィルタ演算を何度も繰り返している。また、特徴面４２６に対して全結合のパーセプトロン処理を複数回行い、最終的な識別結果４２８を得ている。ここで、階層４２９〜４３４はそれぞれ、処理の階層（ステージ）を示している。
【００２１】
まず、前半の畳込みフィルタ演算を説明する。図４において、入力画像４０１は、画像データに対してラスタスキャンされた所定サイズの画像データを示す。特徴面４０４〜４０６は第１段目の階層４２９の特徴面を示す。前述のとおり、特徴面とは、所定の特徴抽出フィルタ（畳込みフィルタ演算及び非線形処理）の処理結果を示すデータ面である。ラスタスキャンされた画像データに対する処理結果であるため、処理結果も面で表される。特徴面４０４〜４０６は、入力画像４０１に対する畳込みフィルタ演算及び非線形処理により生成される。例えば、特徴面４０４〜４０６の情報は、それぞれ入力画像４０１の４０２の領域に対して結合を表す矢印４０３ａ〜４０３ｃに対応するフィルタカーネルとの畳込み演算結果の非線形変換を入力画像前面に対して行うことで得られる。上述の各特徴面生成のための畳込みフィルタ演算に必要な結合関係にある構造を、階層的な結合関係と呼ぶ。
【００２２】
次に、第２段目の階層４３０の特徴面４１３、４１５を生成する演算について説明する。特徴面４１３は前段の階層４２９の３つの特徴面４０４〜４０６と結合している。従って、特徴面４１３のデータを算出する場合、特徴面４０４に対しては領域４０７に対して矢印４１０ａの結合に対応するフィルタカーネルを用いた畳込みフィルタ演算を行い、この結果を保持する。同様に、特徴面４０５及び４０６に対しては、各々フィルタカーネル４１１ａ及び４１２ａの畳込みフィルタ演算を行い、これらの結果を保持する。これらの３種類のフィルタ演算の終了後、結果を加算し、非線形変換処理を行う。以上の処理を画像全体に対して処理することにより、特徴面４１３を生成する。
【００２３】
同様に、特徴面４１５の生成の際には、前段の階層４２９の特徴面４０４〜４０５と矢印４１０ｂの結合に対応するフィルタカーネル、矢印４１１ｂ及び４１２ｂの結合による３つの畳込みフィルタ演算を行う。また、第３段目の階層４３１の特徴面４１９の生成の際には、前段の階層４３０の特徴面４１３、４１５に対するフィルタカーネル４１７ａ、４１８ａによる２つの畳込みフィルタ演算を行う。同様に特徴面４２１では特徴面４１３、４１５に対するフィルタカーネル４１７ｂ、４１８ｂ、特徴面４２３では特徴面４１３、４１５に対するフィルタカーネル４１７ｃ、４１８ｃによる畳込みフィルタ演算を行う。
【００２４】
上記の処理を繰り返し最終的に階層４３２では特徴面４２６を生成するために、前段の階層４３１の特徴面４１９、４２１、４２３に対してフィルタカーネル４２５ａ、４２５ｂ、４２５ｃとの畳込みフィルタ演算を行う。
【００２５】
図４では２階層のパーセプトロンになっている。パーセプトロンは、入力特徴量のそれぞれ要素に対する重み付き和を非線形変換したものである。従って、特徴面４２６に対して、行列積演算を行い、その結果に非線形変換を行えば、識別結果４２７を得ることができる。さらに同様の処理を繰り返せば、最終的な識別結果４２８を得ることができる。
【００２６】
上述の通り、一般的な多階層のニューラルネットワークを利用した処理装置において、演算処理に必要なメモリサイズは、数式（１）で定義される計算に必要な結合関係にある特徴面の特徴量およびフィルタカーネルの重み係数の値の総計になる。図４に示すＣＮＮ演算の構成例の場合、階層入出力画像バッファを除くと画像サイズ×３個（特徴面４０４〜４０６）の特徴面バッファメモリとそれに必要なフィルタカーネルバッファサイズのメモリが必要になる。
【００２７】
また、階層４３１の特徴面４１９、４２１、４２３の領域４２０、４２２、４２４に対して畳込みフィルタ演算を行うために、当該３つの領域に相当するメモリが必要になる。また、それらを算出するためには、前段（階層４３０）の特徴面４１３、４１５の領域４１４、４１６相当のメモリサイズが必要である。同様に、領域４１４、４１６の畳込みフィルタ演算を行うためには、階層４２９の特徴面４０４〜４０６の領域４０７〜４０９に相当するメモリが必要になる。また、領域４０７〜４０９を生成するために、入力画像４０１の領域４０２に相当するメモリが必要になる。
【００２８】
＜概要＞
第１実施形態では、ネットワーク構造の階層的な結合関係の構成に応じて、階層毎にメモリ保持方式（データバッファリング方式）を切り替える。特に、特徴面に加えフィルタカーネルの重み係数も考慮してバッファ制御方式を階層毎に切り替えることで必要なメモリサイズを低減する形態について説明する。
【００２９】
＜装置構成＞
図６は、第１実施形態に係るパターン検出装置の構成を示す図である。パターン検出装置は、階層的演算処理回路を具備し、画像データ中の特定の物体（画像パターン）を検出する機能を有する画像処理装置である。
【００３０】
画像入力部６１は、光学系、ＣＣＤ（Charge-Coupled Devices）又はＣＭＯＳ（Complementary Metal Oxide Semiconductor）センサ等の光電変換デバイスを有する。また、画像入力部６１は、光電変換間デバイスを制御するドライバ回路／ＡＤコンバータ／各種画像補正を司る信号処理回路／フレームバッファ等を具備する。前処理部６２は、検出処理を効果的に行うための各種前処理を行う。具体的には、前処理部６２は、色変換処理／コントラスト補正処理等の画像データ変換をハードウェアで処理する。ＣＮＮ処理部６３は、本実施形態による階層的演算処理回路を含み、特徴検出処理部として機能する。なお、ＣＮＮ処理部６３の詳細については図１を参照して後述する。
【００３１】
ＤＭＡＣ（Direct Memory Access Controller）６６は、画像バス６４上の各処理部間のデータ転送、及び、画像バス６４上のデバイスとＣＰＵバス６７上のＲＡＭ７０間のデータ転送を司る。ブリッジ６５は、画像バス６４とＣＰＵバス６７のブリッジ機能を提供する。ＣＰＵ６８は、本装置全体の動作を制御するものである。ＲＯＭ（Read-only Memory）６９は、ＣＰＵ６８の動作を規定する命令や各種演算に必要なパラメータデータを格納する。例えば、ＣＮＮ処理部６３の動作に必要なフィルタカーネルの重み係数、ネットワーク結合情報、シーケンス制御情報もＲＯＭ６９に格納されている。ＲＡＭ（Random Access Memory）７０はＣＰＵ６８の動作に必要なメモリである。ＲＡＭ７０はＤＲＡＭ（Dynamic RAM）等の比較的容量の大きいメモリで構成される。ＣＰＵ６８はブリッジ６５を介して画像バス６４上の各種処理部にアクセスする事が可能である。画像バス６４とＣＰＵバス６７を分離する事により、ハードウェアによる画像入力部６１、前処理部６２、ＣＮＮ処理部６３の各処理部の動作とＣＰＵ６８の動作を同時に並列実行させることができる。
【００３２】
パターン検出装置は、ＣＮＮのような階層的な演算を行う。図１４は、ＣＮＮにおける複数の処理ノードの論理接続構成を説明する図である。図１４において処理ノードとは、畳込み演算の対象画像と畳込みカーネルから畳込み演算結果を得る処理を行うブロックを指す。なお、図１４では便宜上「第０処理ノード」を設けているが、通常第０処理ノードでは特になにも処理は行われず、入力画像が第１〜第３処理ノードへ入力される。例えば、第４処理ノードでは、第１〜３処理ノードの出力に対し、それぞれ係数の異なる畳込みカーネルを適用して畳込み演算を行う。そして、それぞれの畳込み演算の結果を加算し、その加算結果に非線形変換を行って第４処理ノードの演算結果を得ている。
【００３３】
ＣＮＮ処理部６３に、図１４に示されるＣＮＮ構成を適用する場合、演算処理部を処理ノード間で時分割に使用することで、各処理ノードで規定された演算を実行する。例えば、まず第１処理ノードで規定された演算を行い、その後第２処理ノードで規定された演算を行う、というようにＣＮＮの演算が実行されていく。つまり、ＣＮＮを構成する処理ノードは複数存在し、論理的なネットワークを構成するが、１つの（同一の）物理的な処理ノードであり得る。
【００３４】
図１は、ＣＮＮ処理部６３の詳細構成を示す図である。演算部１０１は、シーケンサー部１０４からの制御信号に応じて、所定のデータ群に対して畳込み演算と非線形処理を実行する。
【００３５】
図１２は、演算部１０１の構成の一例を示す図である。乗算器１２０１は、入力されるフィルタカーネルの重み係数と同期して入力される入力データとを乗じる。累積加算器１２０２は、乗算器１２０１の出力を所定の期間累積加算する。非線形変換処理部１２０３は、ロジスティック関数やＴａｎｈ関数を用いて累積加算結果を非線形変換する。非線形変換は、例えば、各入力値に対して所定の関数値を列挙する関数テーブルで実現される。
【００３６】
記憶部である内部メモリ（以下、単にメモリという）１０２は、入力画像／中間層の特徴抽出結果／最終検出結果、フィルタカーネルの重み係数等を格納する。本実施形態では、畳込み演算を高速に実行するため、メモリ１０２として、高速にランダムアクセスが可能なＳＲＡＭ（Static RAM）を使用している。
【００３７】
メモリアクセス制御部１０３は、シーケンサー部１０４からの信号に応じて、メモリ１０２に対するアクセス、アドレスの生成、リード／ライト信号制御及びデータバスの方向制御等を司る。メモリアクセス制御部は、外部からの命令に応じてシーケンサー部及びメモリアクセス制御部を通して内部メモリに、データを書き込むことが可能である。これは、例えば入力画像や畳込み演算で使用するフィルタカーネルの重み係数を内部メモリに保持させる場合に使用する。また、シーケンサー部１０４からは外部メモリ内に保持されている辞書データや入力画像をＣＮＮ処理する際にメモリ１０２に保持するためのデータ入力線がメモリアクセス制御部に接続されており、ＣＮＮ処理に必要なデータを供給している。
【００３８】
図２は、シーケンサー部１０４の詳細構成を示す図である。シーケンサー部１０４は、特徴面制御シーケンスを生成する部分、フィルタカーネルの重み係数のシーケンスを制御する部分、演算部への制御信号を生成する部分に分けられる。
【００３９】
まず初めに特徴面を制御するシーケンス信号を生成する部分について説明する。シーケンサー部１０４は複数のリングカウンタ制御部２０１−１〜２０１−ｎを備えており、それぞれ各処理ノードがメモリ１０２をフレームバッファおよびリングバッファとして利用するために用いられる。以下、リングカウンタ制御部２０１−１〜２０１−ｎの任意の１つを指す場合は、リングカウンタ制御部２０１と記載する。リングカウンタ制御部２０１は、ＣＮＮ演算の論理的な各処理ノード毎に１つずつ用意される。各リングカウンタ制御部２０１は、バッファ制御部２０２からの指示に従い各シーケンスでのバッファ制御方式選択に基づいて、リングバッファもしくはフレームバッファ方式で制御するための信号をリングカウンタ制御部２０１へ出力する。ここでは、説明を簡単にするために、リングバッファ方式及びフレームバッファ方式の２つを利用可能な形態に関して説明するが、この２つに限定されるものでは無い。
【００４０】
リングカウンタ制御部２０１は、リングバッファのサイズを指定するリングサイズ設定部２０３、リングバッファの動作状況を保持するリングカウンタ２０４及びメモリ１０２上の物理アドレスを決定するためのオフセットアドレス設定部２０５を具備する。リングカウンタ制御部２０１の出力はセレクタ２０６、２０７で選択されて、メモリアクセス制御部１０３へ提供される。この構成により、メモリ１０２には、ネットワークを構成する複数の処理ノードの各々に対応して、演算結果データを保持するための中間バッファ用の記憶領域が割り当てられることになる。
【００４１】
次に重み係数について説明する。ＣＮＮ演算で必要となるフィルタカーネルの重み係数のメモリ制御（パラメータ制御）に関しては重み係数制御部（パラメータ制御部）２０８が司り、バッファ制御方式に応じた重み係数が格納されているアドレスを生成する。重み係数制御部は制御方式に応じて制御動作が異なる。各バッファ制御方式に伴う、特徴面データおよび重み係数制御の動作の詳細については後述する。
【００４２】
最後に演算制御部２０９について説明する。上述の特徴面、および重み係数の制御信号に従って、メモリ１０２からデータが供給され、シーケンスに従って入力データに対する適切な処理を行うための制御を演算部１０１に対して行う必要がある。演算制御部２０９は、その制御信号を生成・出力している。
【００４３】
シーケンス制御情報設定部１０５は、後述するシーケンス制御情報を予めテーブルデータとして保持している。テーブルデータはレジスタやＲＡＭで構成される。シーケンサー部１０４はテーブルデータに従ってメモリアクセス制御部１０３や演算部１０１の動作を順次制御することにより、後述する所定の単位演算をベースとした階層型ネットワークの演算処理を実現する。
【００４４】
ＣＰＵバス６４、６７は、ＣＰＵ６８がＣＮＮ処理部６３内の各種レジスタやメモリにアクセスするためのバスインターフェースである。例えば、以下に示すデータを、当該インターフェースを介してＣＰＵ６８から書き込むことができる。書き込み先は上述の通り、メモリ１０２である。
・シーケンス制御情報設定部１０５のシーケンス制御情報、
・メモリ１０２で保持されている演算部１０１で必要とする重み係数、
・入力画像
【００４５】
図５は、ライン単位での演算処理を説明する図である。先に述べたとおり、リングバッファ制御およびフレームバッファ制御に係らず、第１実施形態での所定の単位演算とは、演算部１０１を用いて行われるライン単位の畳込み演算である。ただし、図５では、説明を簡単にするため、１つの処理ノードの演算出力画像（または、ネットワークへの入力画像）を演算対象画像として畳込み演算を行う場合が示されており、非線形変換も省略されている。
【００４６】
図５（ａ）において、演算対象画像（参照画像）５０１において、模式的に示す最小の１マスが、ラスタスキャン順で示された入力画像又は前階層の処理ノードでの演算結果の画像である演算対象画像の画素を示す。当該画素をｉｎｐｕｔ（ｘ，ｙ）で示し、ｘは水平方向位置、ｙは垂直方向位置である。
【００４７】
５０２は演算結果の画像を表し、模式的に示す最小の１マスが、ラスタスキャン順の演算結果の画素を示すものとする。当該画素をｏｕｔｐｕｔ（ｘ，ｙ）で示し、ｘは水平方向位置、ｙは垂直方向位置である。
【００４８】
演算対象画像５０１内の太線で囲まれた領域５０３は、ｏｕｔｐｕｔ（６，７）位置の畳込み演算を処理する場合の参照画像の領域を示す。領域５０３では、畳込みカーネルのサイズが水平方向「１１」、垂直方向「１３」の場合が示されている。
【００４９】
演算結果の画像５０２の太線で囲まれた領域５０４は、演算対象画像５０１に対して単位演算（水平方向１行分の演算）を行った場合の結果領域を示す。ここで、領域５０４内の格子状の網掛け領域５０６は、畳込みカーネルのサイズに依存して発生する周辺領域（演算が行われない領域）の画素である。つまり、ｏｕｔｐｕｔ（５，７）の位置の演算を行うべき参照画像領域は、領域５０３を左に１画素分ずらしたものとなる。しかしながら、そのような領域は演算対象画像５０１（参照領域）からはみ出してしまうため、一部の参照画素が存在しないことになる。なお、階層的処理においてこの周辺領域（無効領域）をどう扱うかは、本発明において本質的でないので説明は省略する。ここでは、デフォルト値を埋め込むとするが、削除するかあるいは所定の演算結果を埋め込んでもよい。なお、領域５０４より上のラインについても同様に無効領域となる。
【００５０】
図５から明らかなように、１ラインの単位演算を行うには、演算対象画像５０１の必要領域として、少なくとも領域５０５が必要となる。領域５０５は、図５において網掛け領域として示されており、水平方向サイズは演算対象画像５０１と同じサイズ、垂直方向サイズは畳込みカーネルの垂直方向サイズが必要となる。説明の都合上、この領域を単位演算対象画像領域５０５と呼ぶ。領域５０４で示されるような単位演算を、単位演算対象画像領域５０５をずらしながら行うことで、演算対象画像５０１の全領域にわたって畳込み演算を行うことができる。例えば、図５（ｂ）には、１画素下にずらした単位演算対象画像領域に対して単位演算を行った場合を示している。この時、ある単位演算を実行できるか否かは、その単位演算の単位演算対象画像領域５０５’の画素データが、前階層の処理ノードによって演算され、その結果が出力されているか否かに依存する。もちろん、複数の参照画像を入力として演算に用いる処理ノードの場合は、全ての参照画像についての単位演算対象画像領域の画素データが出力されている必要がある。
【００５１】
＜バッファ制御方式＞
次に、図４を参照して説明したＣＮＮネットワークに対し、異なるバッファ制御方式の動作例を説明する。図７は、リングバッファ制御およびフレームバッファ制御それぞれにおける必要メモリ量を説明する図である。また、図１３は、リングバッファおよびフレームバッファの動作を説明する図である。
【００５２】
図７（ａ）は、リングバッファ方式でＣＮＮネットワークを処理する場合を示している。図７（ａ）では、階層４２９〜４３４をリングバッファ方式で処理する場合を想定している。
【００５３】
矢印４０３ａ〜４０３ｃ、４１０ａ〜４１０ｂ、４１１ａ〜４１１ｂ、４１１ａ〜４１１ｂ、４１７ａ〜４１７ｃ、４１８ａ〜４１８ｃ、４２５ａ〜４２５ｃは入力特徴面から異なるフィルタカーネルの重み係数で畳込み演算するための統合関係を表している。図７（ａ）における階層４３２における特徴面４２６の領域７１４を生成するために前階層の特徴面との畳込み演算が必要となる。つまり階層４３２における特徴面４２６の領域７１４を生成するために階層４３１における領域７０６〜７０８の分を格納するメモリ領域が必要となる。同様に領域７０６〜７０８を生成するために階層４３０の領域７０４〜７０５の分のメモリ領域が必要となる。さらに領域７０４〜７０５を生成するために階層４２９の領域７０１〜７０３のメモリ領域が必要となる。つまり、リングバッファ方式での処理対象となる連続する層（図７では階層４２９〜４３１）の特徴面をＣＮＮ処理するために必要なメモリサイズは総リングバッファサイズ（つまり領域７０１〜７０８の合計サイズ）になる。また、処理速度の観点から上記結合に基づくフィルタカーネルの重み係数の全てをメモリに保持しておくことが望ましいが、それに限ったものではない。
【００５４】
図１３（ａ）は、リングバッファの動作を模式的に説明する図である。ここでは説明のためリングバッファの高さ（循環数）を”６”とする。また、ここでは、入力画像１３００の画像データが、ラスタスキャン順に入力された場合に、６ライン分のリングバッファにどのように保持され、参照されるかを説明する。
【００５５】
ここでリングバッファに付随するリングカウンタは”０”〜”５”の値を循環する。また、リングカウンタの初期値は”５”であり、１ライン分のデータが投入されるときに１インクリメントされるものとする。ただし、リングバッファの循環数と同じ値になると、リングカウンタのカウンタ値は”０”に戻る。例えば、本リングバッファでは循環数は”６”であるので、カウンタ値は”５”の次は”０”に戻ることになる。
【００５６】
状態１３０１はリングバッファに入力画像１３００の先頭から６ライン分のデータ（Ｌ１〜Ｌ６）がフルに充填された状態を表し、リングカウンタの値は”５”となっている。次のラインを格納するとき、リングカウンタはインクリメントされ”０”に戻り、リングバッファの先頭行にＬ７が充填される。すなわちリングカウンタの値は、最新のラインを格納したリングバッファ中の行を示す（”０”基準）。この状態を、状態１３０２に示す。
【００５７】
状態１３０２では、リングバッファからＬ２〜Ｌ７を参照する事が可能となり、その開始行は”リングカウンタの値＋１”の行である。更に次のラインＬ８を格納する場合は、状態１３０３に示すように２行目位置にＬ８が充填され、リングカウンタの値は”１”となる。この場合、Ｌ３〜Ｌ８を参照する事が可能となり、先頭行はやはり”リングカウンタの値＋１”の行となっていることが分かる。リングバッファ制御にはリングバッファ制御を行う全レイヤにおいて、すべてのリングバッファサイズ分保持し、順次動作させることができる。
【００５８】
上記説明はリングバッファを”６”での説明だったが、使用するフィルタカーネルの高さに応じてリングカウンタ値の循環数の設定を変更することで異なるフィルタカーネルのサイズで動作させることが可能となる。
【００５９】
図７（ｂ）は、フレームバッファ方式でＣＮＮネットワークを処理する場合を示している。図７（ｂ）は、図７（ａ）に対して、階層４２９〜４３２をフレームバッファ方式で処理する場合を想定している。ただし、フレームバッファ方式では一度に連続する２つの層間での処理毎にＣＮＮ処理を行うことを想定している。そのため、図７（ｂ）の例で、階層４２９と４３０の間の処理に注目して説明する。
【００６０】
図７（ｂ）では、入力となる特徴面４０４〜４０６に対して異なるフィルタカーネルの重み係数での結合（矢印４１０ａ〜４１０ｂ、４１１ａ〜４１１ｂ、４１２ａ〜４１２ｂ）に基づいてＣＮＮ処理することで特徴面４１３、４１５を出力する。フレームバッファ方式ではそれぞれに対応したメモリサイズが必要になる。つまり、特徴面７０９〜７１１の総特徴面サイズおよび７１２〜７１３の総重み係数である。本フレームバッファ方式では連続する２つの層を一度にＣＮＮ処理していくが、異なる２つの連続する層のフレームバッファ方式での処理の場合、同じメモリ領域を利用することができる。つまり、必要なメモリサイズはフレームバッファ方式で処理する２つの連続する層が複数ある場合、必要となる総メモリサイズはそれぞれで必要となる総メモリサイズの中で最大のものということができる。つまり、仮に階層４２９及び４３０の必要総メモリサイズより階層４３０〜４３１の必要総メモリサイズが大きい場合は階層４３０〜４３１の必要総メモリサイズ分のメモリが必要となる。
【００６１】
図１３（ｂ）は、フレームバッファの動作を模式的に説明する図である。ここでは、リングバッファ方式での仕組みをフレームバッファ方式に拡張する。フレームバッファ方式でのバッファ処理は簡単で、具体的にはリングバッファの循環数を入力画像データのライン数に一致させるだけでよい。循環数を入力画像データのライン数に一致させるだけで、そのバッファにおいては、１フレーム分の処理中において前のラインが上書きされなくなる。すなわち、リングバッファとしてだけでなく、フレームバッファとしても機能させることができる。図１３でいうと、入力画像１３０４に対して、状態１３０５のようにリングカウンタ数をフレームサイズに合わせた値を指定するだけである。
【００６２】
＜装置の動作＞
図８は、パターン検出装置における制御を示すフローチャートである。すなわち、ＣＰＵ６８が実行する一連の検出処理動作を示している。ＣＰＵ６８におけるソフトウェアによる処理は、所定の設定処理等を行った後、画像入力部６１やＣＮＮ処理部６３等のハードウェア処理回路部をドライブする。
【００６３】
ステップＳ８０１では、ＣＰＵ６８は、検出処理の開始に先立ち、変数やレジスタ等の各種初期化処理を実行する。各処理部はＣＰＵ６８の初期化指示に従って内部のレジスタ、メモリ等を初期化する。またここでは、入力画像サイズ全域を処理領域とする初期設定も行う。本処理を含め、以降ＣＰＵ６８は、ブリッジ６５及び画像バス６４を介してＣＮＮ処理部６３や他のハードウェア回路部にアクセスし、ＣＰＵバスアクセス制御部１１３を介して所定のレジスタやメモリにデータを設定することが可能となる。
【００６４】
ステップＳ８０２では、ＣＰＵ６８は、シーケンス制御情報設定部１０５にシーケンス制御情報を設定する。シーケンス制御情報はネットワーク構成に基づくバッファ制御方式も含めた、ＣＮＮ演算を制御するためのシーケンス制御情報のテーブルであり、レジスタファイル或いはＲＡＭ等により構成される。
【００６５】
図１０は、シーケンス制御情報をテーブルとして構成した例を示す図である。具体的には、図１４に示したＣＮＮネットワークで処理を行う場合のテーブルを示している。
【００６６】
図１０の（ａ）は、リングバッファ方式の場合のシーケンス制御情報のテーブルの例を示している。「シーケンス番号」は動作順序、「入力特徴面番号」はＣＮＮ処理の入力となる特徴面の番号、「出力特徴面番号」はＣＮＮ処理の出力となる特徴面の番号である。「シーケンス番号」はライン単位での処理の順序を示す番号で、テーブルの配列Ｉｎｄｅｘに相当する。そのため、実際に数字を保持する必要はない。また、「処理ライン」は出力特徴面におけるライン番号、「重み係数番号」はフィルタカーネルの重み係数の番号を表している。更に、「演算種別」はＣＮＮ処理の処理内容、「フィルタ幅」、「フィルタ高さ」はそれぞれカーネル演算のサイズを表している。本件ではラインを処理単位としており、１ライン単位処理するごとに、処理ノードを切り替えている。
【００６７】
例えば、シーケンス番号”９”までは、入力画像（ここでは入力特徴面番号）に対して出力特徴面番号”１”〜”３”に対する処理を行っており、シーケンス番号”１０”〜”１５”では、次の層の出力特徴面番号”４”および”５”の処理を行っている。これは、シーケンス番号”９”までで、出力特徴面番号”４”および”５”の１ライン分の演算処理に必要な参照画像が演算されたためである。
【００６８】
このようにリングバッファ方式では、演算可能になった処理ノードから速やかにライン単位演算を行っていくことにより、参照される側のバッファをライン単位で順次開放可能にしている。これにより、中間バッファを必要最小限の循環数のリングバッファとして構成することが可能となる。一方で、重み係数について注目するとそれぞれの出力特徴面に対して対応するフィルタカーネルの重み係数は参照特徴面である入力特徴面でそれぞれ異なる。例えば、シーケンス番号”１”、”２”、”３”では入力特徴面番号は同じでも出力特徴面番号が異なるため畳込みに使用される重み係数はそれぞれ”１”、”２”、”３”と異なる。またシーケンス番号１９、２０、２１では出力特徴面番号４に対して入力特徴面番号がそれぞれ”１”、”２”、”３”と異なるため重み係数番号は、この場合”４”、”６”、”８”と異なる。
【００６９】
以上のシーケンスから、リングバッファ方式で処理する場合、使用される重み係数は特徴面処理時に必要な値が階層をまたがって参照される。このため、リングバッファ方式で処理される重み係数は内部メモリに保持しておくことが、外部メモリアクセス数増大を防ぐうえで望ましいといえる。つまり、出力特徴面関する中間バッファは最小限の循環数で確保し、重み係数に関しては必要な係数を全て内部で保持する方法になる。
【００７０】
図１０（ｂ）は、フレームバッファ方式の場合のシーケンス制御情報のテーブルの例を示している。特定の処理ノードの単位演算を連続して行い、当該特定の処理ノードの演算が有効領域全域について完了した後に、次の処理ノードの演算を開始している。
【００７１】
図１０（ｂ）では、例えば出力特徴面番号“１”〜“３”に対するＣＮＮ処理をそれぞれの特徴面全有効領域演算が完了するごとに切り替えて処理を行う。このような処理を繰り返して連続する二つの層間に対して処理していくため、すでに処理済みの特徴面が不要になる場合がある。たとえば、階層１４０３と階層１４０４間の処理を行う場合、入力特徴面番号“４”と“５”に値するＣＮＮ処理の結果である出力特徴面“６”と“７”は前の連続する二つの層間での処理における入力特徴面“１”〜“３”の中間バッファ領域は不用となる。従って、最終階層まで演算の完了していないこの時点で、このバッファ領域を開放して同領域を処理ノード番号“６”、“７”の出力用として割り当てることができるようになる。
【００７２】
ここで、リングバッファ方式と同様に重み係数に注目すると、出力特徴面に対する入力特徴面の参照が連続していることがわかる。例えば、シーケンス番号”１”から”Ｎ”まで、出力特徴面”１”に対して入力特徴番号”０”を参照し同じフィルタカーネルの重み係数番号”１”を連続して参照している。つまり、重み係数の参照は連続して一定期間行われることがわかる。例えば、重み係数を畳込み演算を行っている階層間で切り替えることで、フレームバッファに必要なすべてのフィルタカーネルの重み係数を同時に内部メモリに保持する必要がなくなる。以上から、例えばフレームバッファ制御では特徴面と、フィルタカーネルの重み係数に関して層間で必要なサイズを中間バッファとして保持するだけでよい。次の層では、前階層で使用した、特徴面、重み係数は不要である。
【００７３】
ＣＮＮ演算の場合、演算種別に応じてフィルタカーネルの重み係数を選択することになる。ＣＮＮ演算はカーネル演算処理、正規化、プーリング処理等の演算の種類があるが、図の例では説明の簡単化のために、カーネル演算処理に対応した例のみ表示している。「フィルタ幅」はフィルタに対応する畳込みカーネルの幅に相当し、「フィルタ高さ」は畳込みカーネルの高さに相当する。
【００７４】
尚、本実施形態では、入力画像に対して各処理ノードは演算可能な最大範囲を演算するように設定しているが、最終的に演算結果を利用する処理ノードの利用したい演算範囲から、前階層に向かって順に演算範囲を逆算してももちろんかまわない。この場合は終了ラインも合わせて情報として持つようにすると、より演算を無駄無く行える。
【００７５】
図１１は、リングバッファ制御およびフレームバッファ制御それぞれにおけるメモリ割り当ての例を示す図である。具体的には、図１４に示すネットワークを実現する場合の処理ノードとオフセットアドレス及びリングバッファの高さの関係の一例を示すメモリマップである。図１１（ａ）はリングバッファ方式の場合のメモリマップを、図１１（ｂ）はフレームバッファ方式の場合のメモリマップを示している。
【００７６】
ＡＤＲｘ（ｘ：１〜８）はオフセットアドレス、ＢＨｘ（ｘ：１〜３）はリングバッファの高さ（循環数）に相当する。Ｉｘは入力画像データの幅を示す。既に述べたとおり、フレームバッファ制御では前階層で使用した中間バッファ領域を現階層処理に割り当てて処理することでメモリ領域を削減している。図１１（ｂ）において、第１特徴面、第２特徴面の部分にそれぞれ、第６特徴面および第７特徴面が割り当てられている理由は上記の理由による。
【００７７】
ステップＳ８０３では、ＣＰＵ６８は、画像処理／前処理を行う。ＣＰＵ６８より処理開始の指示を受けた画像入力部６１は、１フレーム分の画像データを取得し、図示しない内部バッファに格納する。画像入力部６１は、画像データの格納が終了するとＣＰＵ６８に対して画像取得終了割り込みを発生する。ＣＰＵ６８はこの割り込みを検知すると、ＤＭＡＣ６６を起動して取得した画像データを前処理部６２の内部メモリ（図示しない）に転送する。前処理部６２は画像データの転送が終了すると、前処理を開始する。前処理部６２は、例えば、予め指定するコントラスト補正情報に従って画像データのコントラストを補正する。前処理部６２は補正処理を終了するとＣＰＵ６８に対して割り込みを発生する。ＣＰＵ６８はこの割り込みを検知すると、再びＤＭＡＣ６６を起動し、前処理部６２によって補正された画像データをＣＮＮ処理部６３内のメモリ１０２の入力画像バッファ（図１１の第０処理ノード領域に相当）に転送することとなる。
【００７８】
ステップＳ８０４では、ＣＰＵ６８は、フレームバッファ方式とリングバッファ方式による制御に基づくＣＮＮ処理を実行するよう制御する。図９は、ＣＮＮ処理の詳細動作を示すフローチャートである。具体的には、ＣＮＮ処理の動作を司るシーケンサー部１０４の動作を示している。
【００７９】
ステップＳ９０１では、シーケンサー部１０４は、シーケンスを読み出す。ここでは、制御単位はフレームバッファ方式ないしはリングバッファ方式を単位とする。これはＣＰＵ６８からフィルタカーネルの重み係数を内部メモリにセットする制御順序がバッファ制御方式毎に切り替える必要があることに起因する。
【００８０】
ステップＳ９０２では、シーケンサー部１０４は、バッファ制御方式がフレームバッファ方式であるか否かを判定する。実際にはシーケンス制御情報から切り替えるわけではなく、ＣＰＵ６８が制御判断を行い、それに伴ったシーケンスで制御される。
【００８１】
ステップＳ９０３〜Ｓ９０５では、フレームバッファ方式での制御を行う。Ｓ９０３では、ＣＰＵ６８は、層単位で必要となるフィルタカーネルの重み係数をメモリ１０２に供給する。その後、所定のシーケンスに従って、シーケンサー部１０４が特徴面データ供給制御信号を生成し、フレーム単位でメモリ１０２からメモリアクセス制御部１０３を介して演算部１０１に供給される。Ｓ９０４では、演算制御部２０９でシーケンスに従った演算制御信号を作成し、演算部１０１はシーケンサー部１０４からの演算制御信号に伴って、シーケンスによって指定された演算を行う。出力特徴面データは演算部１０１からメモリ１０２へメモリアクセス制御部１０３を経由して行われる。この処理は対象となる層内の全特徴面に対して順次行われる。Ｓ９０５では、ある層内の全ＣＮＮ処理が終了した後、シーケンスで指定された層すべてが終了していない場合は、Ｓ９０３に戻る。その後、ＣＰＵ６８が次の層で必要なフィルタカーネルの重み係数を内部メモリに供給し、同様の処理がシーケンス内の全層に対して処理が終了するまで行われる。
【００８２】
一方、ステップＳ９０６〜Ｓ９０８では、リングバッファ方式での制御を行う。Ｓ９０６で、ＣＰＵ６８は、リング処理で必要な全フィルタカーネルの重み係数（異なる階層を含む）をメモリ１０２へ供給する。Ｓ９０７で、シーケンスに従い、シーケンサー部１０４がリング制御のための制御信号及び、演算に必要なフィルタカーネルの重み係数制御信号を順次生成する。各制御信号に伴いメモリアクセス制御部１０３がアドレス生成、メモリ１０２から演算部１０１にデータを供給することとなる。この際フレームバッファ制御時と同様に演算制御部２０９でシーケンスに従った演算制御信号を作成し、演算部１０１に供給することで必要な演算を行う。Ｓ９０８では、ある層内の全ＣＮＮ処理が終了した後、シーケンスで指定された層すべてが終了していない場合は、Ｓ９０７に戻る。その後、同様の処理がシーケンス内の全層に対して処理が終了するまで行われる。
【００８３】
ステップＳ９０９では、シーケンサー部１０４は、全シーケンスが終了しているかを判断し、終了していない場合はステップＳ９０１に戻り処理を継続させる。
【００８４】
図３は、リングバッファ制御およびフレームバッファ制御それぞれにおけるデータ転送のタイムチャートを示す図である。具体的には、別のＣＰＵ６８から供給されるデータ転送を表した図である。図３（ａ）はフレームバッファ方式、図３（ｂ）はリングバッファ方式におけるタイムチャートを示している。
【００８５】
図３（ａ）のフレームバッファ方式では、最初に入力データを供給したのち、処理層毎に必要なフィルタカーネルの重み係数を順次供給している様子を表している。図３（ｂ）のリングバッファ方式では、最初にリングバッファで必要なデータを供給し、その後ライン毎に入力データを転送している。
【００８６】
ステップＳ８０５では、ＣＰＵ６８は、割り込みを検知すると、ステップＳ８０４のＣＮＮ演算が完了したと見なし、出力画像の取得処理を行う。この処理において、ＣＰＵ６８は、ＤＭＡＣ６６を起動してＣＮＮ処理部６３から必要な演算結果をＲＡＭ７０に転送する。
【００８７】
以上説明したように、階層毎にバッファ制御方式を切換えながら処理を行う。これにより、階層構造に応じた切換えシーケンスを実行することが可能となり、より少ないメモリ量でＣＮＮ処理を実行することが可能となる。
【００８８】
最後に実際にバッファ制御方式を切り替えたときの動作について説明する。図１６は、バッファ制御方式を切換える場合のシーケンス制御情報の例を示す図である。ここでは、階層１４０１から１４０３をリングバッファ制御、階層１４０３から１４０５をフレームバッファ制御で制御する場合のシーケンス制御情報を示している。
【００８９】
まず初めに、階層１４０１から１４０３内の処理ノードでの処理は図１０（ａ）で示したシーケンスと第５処理ノードまでの処理で同様で、次の処理ノードで処理に必要な特徴面（ライン）がそろった段階で随時処理していく。そのため、例えば、シーケンス番号”１”から”１８”までに、第１ノードから第３ノードまでの３ライン分を得るために、第０処理ノードに対して３ライン分それぞれのフィルタカーネルの重み係数で畳込み演算する。その後それらを使用し第４、５の第１ラインの処理をシーケンス番号”１９”から”２４”までで行っている。このようなライン処理を随時行っていく。
【００９０】
この例では、第０処理ノードから第５処理ノードまでをリングバッファ制御するために必要なシーケンス番号は”１０８０”で、その後次のシーケンスから直ちにフレームバッファ制御での処理に切り替わる。ここで、フレームバッファ制御では参照する入力特徴面をフレームで保持していることを想定しているため、フレーム処理からバッファ処理に切り替わる階層１４０３の第４および第５処理ノードの特徴面は全て内部保持している前提である。次にフレームバッファ制御を階層１４０３〜１４０５で行う。フレームバッファ制御では処理ノードの組合せごとにフレーム単位で処理を完結していく。
【００９１】
まず階層１４０４と１４０５の間で、シーケンス番号”１０８１”から”１２００”までは第４処理ノードを入力特徴面として、第６処理ノードを出力特徴面とし、フィルタカーネルの重み係数番号”１０”で全ライン分を処理している。随時処理ノード間の畳込み演算を行う。階層１４０４の処理ノードの特徴面全てのラインを処理し終わったら、階層１４０３の特徴面は階層１４０５の特徴面を処理する上で直接必要がなくなるため、その領域を解放し、階層１４０５の特徴面を保持する領域として利用する。最終的にシーケンス番号”１８００”ですべてのシーケンスを終了させることで、第８処理ノードの特徴面を取得することができる。
【００９２】
＜効果＞
最後に、上述の手法によるメモリサイズの変化について図１７を参照して説明する。図１７は、ラインバッファ処理時に必要なメモリサイズの見積もり例を示す図である。ここでは、画像サイズがＱＱＶＧＡ（つまり高さ１２０画素）を想定する。なお、説明を簡単にするために画像端部も畳込み演算し画像サイズは変わらないことを想定する。
【００９３】
具体的には、各層における、画像サイズ（Ｆｅａｔｕｒｅ  ｍａｐ）、特徴面数（＃Ｆｅａｔｕｒｅ  ｍａｐ）、カーネルサイズ（ｋｅｒｎｅｌ  ｓｉｚｅ）を、テーブルの記載の値としたときの見積もりである。
【００９４】
ラインバッファ方式の見積もりでは、特徴面バッファサイズ（Ｌｉｎｅ：Ｆｅａｔｕｒｅ  ｍａｐ  ｓｉｚｅ）、フィルタカーネルバッファサイズ（Ｌｉｎｅ：Ｗｅｉｇｈｔ  ｓｉｚｅ（Ｓｕｍ  ｆｒｏｍ  Ｌ１））を示している。さらに、総バッファサイズであるバッファサイズ（Ｌｉｎｅ：Ｔｏｔａｌ  ｓｉｚｅ）を示している。
【００９５】
フレームバッファ方式の見積もりでは、特徴面バッファサイズ（ＦＲＡＭＥ：Ｆｅａｔｕｒｅ  ｍａｐ  ｓｉｚｅ）、フィルタカーネルバッファサイズ（Ｆｒａｍｅ：Ｗｅｉｇｈｔ  ｓｉｚｅ）を示している。さらに、総バッファサイズであるバッファサイズ（Ｆｒａｍｅ：Ｔｏｔａｌ  ｓｉｚｅ）を示している。
【００９６】
ここでラインバッファ処理では、上述のとおり、階層をまたがってフィルタカーネルの重み係数を畳込み演算を順次行っていくため、重み係数は全て内部で保持する必要がある。表はＬ１層からＬ９層までの階層構造であり、ラインバッファ方式のフィルタカーネルバッファサイズの列は、Ｌ１層から各階層までのカーネルサイズを保持したときのフィルタカーネルバッファサイズの総和（合計メモリサイズ）である。つまり、Ｌ３までをラインバッファ処理する場合は１０３．８キロバイト（以降ＫＢ）のフィルタカーネルバッファサイズが必要となる。同様にラインバッファ方式の特徴面バッファサイズの列は、Ｌ１層から各階層までのカーネルサイズを保持したときの特徴面ラインバッファサイズの総和である。
【００９７】
図１７のテーブルに記載されている階層のネットワークに対して仮にすべてをラインバッファ処理する場合に必要なバッファサイズの総量は１７６７０．９ＫＢとなる。また、仮にすべてをフレームバッファ制御では階層をまたがって処理する必要がないため、階層単位の処理で必要なバッファサイズの最大値があればよく、この例ではＬ５階層を処理する際に必要な１１９５２．０ＫＢである。どちらかのバッファ処理を選択する場合はフレームバッファ制御を選択した方が必要なメモリサイズが小さい。
【００９８】
Ｌ１〜Ｌ５までをラインバッファ処理し、その後フレームバッファ制御するように内部バッファ処理を切り替える場合を想定する。その場合、ラインバッファ処理をＬ５までにする際に必要なバッファサイズは２１０９．９ＫＢになる。またフレームバッファ制御をＬ６〜Ｌ９まで行う場合Ｌ８もしくはＬ９を処理するため必要な最大バッファサイズ３５０４．０ＫＢになる。そのため、計５１６３．９ＫＢのバッファサイズで処理することができる。これにより、どちらかを選択する方式に比べ大幅にバッファサイズを減らすことができる。
【００９９】
以上説明したとおり第１実施形態によれば、シーケンスを変更しそれに応じた制御を行うことで、層単位にバッファ制御方式を切り替える。処理対象のネットワークの構成に応じてバッファ制御方式を切り替えることで、演算に必要なメモリサイズを少なくすることができる。
【０１００】
なお、上述の説明においてはＣＮＮを例に説明したが、これに限ったものではない。また、画像を処理する例について説明したが、多次元データに対する処理に対しても適用可能である。
【０１０１】
（第２実施形態）
第２実施形態では、リングバッファ方式とフレームバッファ方式の切換えを決定する手法について説明する。
【０１０２】
＜必要なメモリサイズの算出＞
まずはそれぞれの方式で必要なメモリサイズを算出する方法について述べる。まずはリングバッファ方式の場合について考える。リングバッファ制御ではＣＮＮ全体で処理が１ライン単位ずつ進んでいくことになるので、全ての中間バッファは、基本的に同時に存在している必要がある。以下では畳込み演算に注目して説明するため、特徴量のサブサンプリングなどの演算は記載しない。ここでは以下のパラメータを用いる。
全階層数（入力層除く）：Ａ
対象となるバッファ方式での処理の層数：Ｎ
対象となるバッファ方式での階層番号変数（中間層）：ｌ＝１，２，…，Ｎ−１
各階層特徴面数：Ｆｌ
特徴番号（注目階層の注目特徴）：ｆ＝ｆｌ＝１，…，Ｆｌ
前階層の特徴番号：ｆ’＝ｆｌ−１
入力画像サイズ（水平方向，垂直方向）：Ｉｘ，Ｉｙ
カーネルサイズ（水平方向，垂直方向）：Ｗｘ（ｌ，ｆ，ｆ’），Ｗｙ（ｌ，ｆ，ｆ’）
リングバッファ高さ：Ｂｙ（ｌ，ｆ）
リング中間バッファ必要容量：ＳＢ
フィルタカーネルの重み係数を保持するバッファの必要容量：Ｗｂ＿ａｌｌ
【０１０３】
このとき、全ての中間バッファを最低限必要なサイズのラインバッファとして割り当てるときに必要となるトータルのサイズＳＢ、および、フィルタカーネルの重み係数Ｗａｌｌは、以下の数式（２）により求めることができる。
【０１０４】
【数２】
2018147182.tif 000004
【０１０５】
つまり、ラインバッファ方式で必要となる中間バッファのサイズはＳＢ＋Ｗａｌｌということになる。
【０１０６】
上述の計算では、ネットワーク演算を構成する全ての処理ノードの各々に必要な中間バッファのサイズを当該処理ノードの後段に接続される処理ノードが必要とするデータ量に設定している。そして、それら中間バッファのサイズを合計することにより、ネットワーク演算に必要なメモリ量を算出している。また、前述の通り、ラインバッファ方式では複数の階層にまたがって演算するため、フィルタカーネルの重み係数はすべてバッファリングしておく前提で算出している。
【０１０７】
次にフレームバッファ方式の場合に必要となるメモリ量について考える。第１実施形態で説明した通り、フレームバッファ方式では連続する階層間の処理で必要な入力特徴面および出力特徴面をメモリに保持する。また次の階層間での処理を行う場合は、前階層間での出力特徴面を入力特徴面とし、前階層間での入力特徴面が保持されていた領域は解放することが可能なため、その領域に現階層の出力特徴面データを格納する。フィルタカーネルの重み係数に関しては、階層間の処理で必要なデータを内部メモリに保持して処理することも可能ではあるが、重み係数を順次ロードし、ロードした重み係数に係る演算をその場で行うことで、必要メモリサイズはさらに少なくなる。
【０１０８】
このとき、各層間のフレーム中間バッファ必要容量Ｓｌ、および、フィルタカーネルの重み係数を保持するバッファの必要容量Ｗｐは、以下の数式（３）により求めることができる。
【０１０９】
【数３】
2018147182.tif 000005
【０１１０】
フレームバッファ制御では各フレーム間の演算処理で必要となるバッファサイズに対して対象となるフレームバッファ処理の階層間で最大となるサイズがあればよい。そのため、フレームバッファ処理で必要なバッファサイズはｍａｘ（Ｓｌ＋Ｗｌ）となる。
【０１１１】
フレームで中間バッファを構成した際（フレームバッファ方式を採用した際）のトータルの必要サイズを求めることができる。この計算は、ネットワーク構成において連続する２つの階層の組に属する全ての処理ノードが生成する演算結果データのサイズの合計を全ての組について計算し、その内の最大となるサイズを必要なメモリ量とするものである。フィルタカーネルの重み係数に関して言えば、各レイヤ間で生成する特徴面単位で特徴面演算に必要なフィルタカーネルの重み係数で全レイヤで最大のものということができる。そのため、フレームバッファ方式で必要なバッファサイズはＳｐ＋Ｗｐ＿ａｌｌになる。
【０１１２】
数式（２）及び（３）から分かる通り、ＣＮＮ階層の中で、どの階層をリングバッファ方式あるいはフレームバッファ方式で行うかでトータルで必要となるメモリサイズは変わってくる。これは、ＣＮＮネットワークの各論理的処理ノードの接続構造と、各ノードの畳込みカーネルサイズに依存する。以下ではバッファ制御方式を切換える階層を決定する手法について説明する。
【０１１３】
＜切換え階層の決定方法＞
図１５は、バッファ制御方式の切換え位置を決定するフローチャートである。この処理は、例えば、ＣＰＵ６８により実行される。
【０１１４】
ステップＳ１５０１では、ＣＰＵ６８は、要求仕様を取得する。ここで要求仕様とはユーザが許容できる最大メモリサイズである。
【０１１５】
ステップＳ１５０２では、ＣＰＵ６８は、対象となるＣＮＮ階層構造に関する情報を取得する。ここでＣＮＮ階層構造とは、階層の個数、各階層の特徴面数、画像サイズ、カーネルサイズなどＣＮＮ階層構造を決定するための基本的な情報である。
【０１１６】
ステップＳ１５０３〜Ｓ１５０８が、実際に切換え位置を決定するためのプロセスになる。Ｓ１５０３では、ＣＰＵ６８は、まず切換え数Ｃを設定する。ここでは、切換えを行う前提で切換え数”１”から始めているが、これに限ったものではない。
【０１１７】
ステップＳ１５０４では、ＣＰＵ６８は、バッファ切換え方式位置Ｎを決定する。ここでは、第１階層と第２階層との間を切換え位置として始めることを想定しているが、これに限ったものではない。図１４を例に挙げると階層１４０２と階層１４０３の間を切換え位置としている。
【０１１８】
ステップＳ１５０５では、ＣＰＵ６８は、切換え位置によって前後の階層に対してそれぞれで、数式（２）及び（３）から各バッファ制御方式で必要となるメモリサイズを決定し、数式（２）及び（３）のどちらか大きい方を必要メモリサイズとして算出する。
【０１１９】
ステップＳ１５０６では、ＣＰＵ６８は、それまでで算出されたなかで最小となる必要メモリサイズより、今回の切換え位置で見積もった必要メモリサイズの方が小さい場合は、今回の切換え位置を採用とする。これは切換え位置や後述する切換え数の違いで得られる必要メモリサイズの中から最小のものを選ぶということを意味している。
【０１２０】
ステップＳ１５０７では、ＣＰＵ６８は、切換え数Ｃに対して、取り得るすべての切換えパターンに対して見積もりを行ったかを確認する。全て行っていない場合は、ステップＳ１５０８で切換え位置を変えてＳ１５０５〜Ｓ１５０７を繰り返す。一方、すべてのパターンを行った場合には、ステップＳ１５０９で要求仕様であるメモリサイズを満たしているかを判断する。満たしていない場合にはステップＳ１５１０で切換え数を増やし、Ｓ１５０３〜Ｓ１５０９を繰り返す。満たした場合には終了となる。
【０１２１】
以上説明したとおり第２実施形態によれば、より好適な切換え階層の位置を決定することが可能となる。
【０１２２】
（その他の実施例）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【０１２３】
１０１  演算部；  １０２  内部メモリ；  １０３  メモリアクセス制御部；  １０４  シーケンサー部；  １０５  シーケンス情報設定部
【図１】
2018147182.tif 000006
【図２】
2018147182.tif 000007
【図３】
2018147182.tif 000008
【図４】
2018147182.tif 000009
【図５】
2018147182.tif 000010
【図６】
2018147182.tif 000011
【図７】
2018147182.tif 000012
【図８】
2018147182.tif 000013
【図９】
2018147182.tif 000014
【図１０】
2018147182.tif 000015
【図１１】
2018147182.tif 000016
【図１２】
2018147182.tif 000017
【図１３】
2018147182.tif 000018
【図１４】
2018147182.tif 000019
【図１５】
2018147182.tif 000020
【図１６】
2018147182.tif 000021
【図１７】
2018147182.tif 000022