(57)【要約】【課題】  参照データの転送性能がボトルネックになる場合において、並列演算器の性能を活かすことはできない。【解決手段】  演算回路は、フィルタ演算の参照データと該フィルタ演算に用いるフィルタの係数データとを記憶する記憶装置と接続し、参照データとフィルタの係数データとのフィルタ演算を並列に実行する複数の演算器と、前記記憶装置から転送された所定数の参照データを保持し、前記複数の演算器に供給する第１供給手段と、前記記憶装置から転送された第１フィルタの係数データ及び第２フィルタの係数データを保持し、前記複数の演算器に供給する第２供給手段と、前記複数の演算器に含まれる第１演算器に対して、前記第２供給手段から第１フィルタの係数データを供給し、前記複数の演算器に含まれる第２演算器に対して、前記第２供給手段から第２フィルタの係数データを供給するように、前記第２供給手段を制御する制御手段と、【選択図】  図１
2018073102.tif 000002
【特許請求の範囲】
【請求項１】
フィルタ演算の参照データと該フィルタ演算に用いるフィルタの係数データとを記憶する記憶装置と接続する演算回路であって、
前記参照データと前記フィルタの係数データとの前記フィルタ演算を並列に実行する複数の演算器と、
前記記憶装置から転送された所定数の参照データを保持し、前記複数の演算器に供給する第１供給手段と、
前記記憶装置から転送された第１フィルタの係数データ及び第２フィルタの係数データを保持し、前記複数の演算器に供給する第２供給手段と、
前記複数の演算器に含まれる第１演算器に対して、前記第２供給手段から第１フィルタの係数データを供給し、前記複数の演算器に含まれる第２演算器に対して、前記第２供給手段から第２フィルタの係数データを供給するように、前記第２供給手段を制御する制御手段と、
を有することを特徴とする演算回路。
【請求項２】
前記第２供給手段は、前記記憶装置から転送された前記第１フィルタの係数データ及び前記第２フィルタの係数データを保持する第２保持手段と、前記第２保持手段から前記第１フィルタの係数データをロードし、前記第１演算器に供給する第１シフトレジスタと、前記第２保持手段から前記第２フィルタの係数データをロードし、前記第２演算器に供給する第２シフトレジスタと、をさらに有することを特徴とする請求項１に記載の演算回路。
【請求項３】
前記第１供給手段は、前記記憶装置から転送された前記所定数の参照データを保持する第１保持手段と、前記第１保持手段から参照データをロードし、前記第１演算器に供給する第３シフトレジスタと、前記第１保持手段から参照データをロードし、前記第２演算器に供給する第４シフトレジスタを有することを特徴とする請求項１又は２に記載の演算回路。
【請求項４】
前記制御手段は、前記第２供給手段から前記第１フィルタの係数データが供給される前記第１演算器以外の演算器と、前記第２供給手段から前記第２フィルタの係数データが供給される前記第２演算器以外の演算器と、を決定することを特徴とする請求項１乃至３の何れか１項に記載の演算回路。
【請求項５】
前記第２供給手段から前記複数の演算器に前記係数データを供給する経路を制御する経路制御手段をさらに有し、
前記制御手段は、前記第１演算器に対して前記第２供給手段から前記第１フィルタの係数データを供給し、前記第２演算器に対して前記第２供給手段から前記第２フィルタの係数データを供給するように、前記経路制御手段を制御することを特徴とする請求項１又は４に記載の演算回路。
【請求項６】
前記経路制御手段は、クロスバースイッチを用いることを特徴とする請求項５に記載の演算回路。
【請求項７】
前記フィルタ演算は、前記複数の参照データと前記フィルタの係数データとのコンボリューション演算であることを特徴とする請求項１乃至６の何れか１項に記載の演算回路。
【請求項８】
前記第１演算器の演算器の出力データ及び前記第２演算器の演算器の出力データのそれぞれを保持する少なくとも二つのシフトレジスタと、前記シフトレジスタの出力データに対して非線形変換の処理を行う変換手段と、をさらに有することを特徴とする請求項１乃至７の何れか１項に記載の演算回路。
【請求項９】
前記制御手段は、前記シフトレジスタの前記出力データ又は前記変換手段の出力データを、前記記憶装置に記憶させることを特徴とする請求項８に記載の演算回路。
【請求項１０】
前記参照データは２次元データであって、前記複数の演算器は、前記参照データのサイズに基づいて、前記２次元データの水平方向又は垂直方向における前記参照データに対して、順に前記フィルタ演算を行うことを特徴とする請求項１乃至９の何れか１項に記載の演算回路。
【請求項１１】
前記フィルタ演算は、コンボリューショナルニューラルネットワークの複数のデータ群の階層的な結合関係により表現される演算であることを特徴とする請求項１乃至１０の何れか１項に記載の演算回路。
【請求項１２】
前記制御手段は、前記階層的な結合関係に基づいて、前記複数の演算器による並列処理を制御することを特徴とする請求項１１に記載の演算回路。
【請求項１３】
請求項１乃至１２の何れか１項に記載の演算回路を有し、前記参照データとして画像データを処理することを特徴とする画像処理装置。
【請求項１４】
前記演算回路は、パターン認識のための演算処理を行うことを特徴とする請求項１３に記載の画像処理装置。
【請求項１５】
フィルタ演算の参照データと該フィルタ演算に用いるフィルタの係数データとを記憶する記憶装置と接続する演算回路の制御方法であって、
前記参照データと前記フィルタの係数データとの前記フィルタ演算を、複数の演算器によって並列に実行する演算工程と、
第１供給手段が、前記記憶装置から転送された所定数の参照データを保持し、前記複数の演算器に供給する第１供給工程と、
第２供給手段が、前記記憶装置から転送された第１フィルタの係数データ及び第２フィルタの係数データを保持し、前記複数の演算器に供給する第２供給工程と、
前記複数の演算器に含まれる第１演算器に対して、前記第２供給手段から第１フィルタの係数データを供給し、前記複数の演算器に含まれる第２演算器に対して、前記第２供給手段から第２フィルタの係数データを供給するように、前記第２供給手段を制御する制御工程と、
を有することを特徴とする方法。
【請求項１６】
フィルタ演算の参照データと該フィルタ演算に用いるフィルタの係数データとを記憶する記憶装置と接続する演算回路の制御プログラムであって、
前記参照データと前記フィルタの係数データとの前記フィルタ演算を、複数の演算器に並列に実行させる演算ステップと、
第１供給手段に、前記記憶装置から転送された所定数の参照データを保持させ、前記複数の演算器に供給させる第１供給ステップと、
第２供給手段に、前記記憶装置から転送された第１フィルタの係数データ及び第２フィルタの係数データを保持させ、前記複数の演算器に供給させる第２供給ステップと、
前記複数の演算器に含まれる第１演算器に対して、前記第２供給手段から第１フィルタの係数データを供給し、前記複数の演算器に含まれる第２演算器に対して、前記第２供給手段から第２フィルタの係数データを供給するように、前記第２供給手段を制御する制御ステップと、
をコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、パターン認識等に使用される演算回路、その制御方法及びプログラムに関するものである。
【背景技術】
【０００２】
パターン認識装置などの画像処理装置にニューラルネットワークの手法が広く応用されている。ニューラルネットワークの中でも、Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋｓ（以下ＣＮＮと略記する）と呼ばれる演算手法が認識対象の変動に対して頑健なパターン認識を可能にする手法として注目されている。例えば、非特許文献１では、コンボリューショナルニューラルネットワーク（ＣＮＮ）の様々な応用例・実装例が開示されている。ＣＮＮ処理は、認識対象の信号や実現する認識機能等に応じて様々なネットワークの構成が提案されている。ここで、コンボリューショナルニューラルネットワークの構成は、階層の数やその階層内の特徴面の数等、コンボリューション演算の結合関係で表現される構成を示す。
【０００３】
図１６は簡単なＣＮＮ処理の例を示すネットワーク構成図である。入力層１６０１は、画像データに対してＣＮＮ処理を行う場合、ラスタスキャンされた所定サイズの画像データに相当する。特徴面１６０３ａ〜１６０３ｃは第１階層１６０８の特徴面を示す。特徴面とは、所定の特徴抽出演算（コンボリューション演算及び非線形処理）の処理結果に相当するデータ面である。特徴面は上位階層で所定の対象を認識するための特徴抽出結果に相当し、ラスタスキャンされた画像データに対する処理結果であるため、処理結果も面で表す。
【０００４】
特徴面１６０３ａ〜１６０３ｃは、入力層１６０１に対応するコンボリューション演算と非線形処理により生成されるものである。例えば、特徴面１６０３ａは、模式的に示す２次元のフィルタカーネル１６０２１ａのコンボリューション演算と演算結果の非線形変換により算出する。
【０００５】
例えば、フィルタカーネル（フィルタ係数マトリクス）サイズがｃｏｌｕｍｎＳｉｚｅ×ｒｏｗＳｉｚｅであるコンボリューション演算は以下に示すような積和演算により処理する。
【０００６】
【数１】
2018073102.tif 000003
ここで、「ｉｎｐｕｔ（ｘ，ｙ）」は座標（ｘ、ｙ）での参照画素値を示し、「ｏｕｔｐｕｔ（ｘ，ｙ）」は座標（ｘ、ｙ）での演算結果を示す。また、「ｗｅｉｇｈｔ（ｃｏｌｕｍｎ，ｒｏｗ）」は座標（ｘ＋ｃｏｌｕｍｎ、ｙ＋ｒｏｗ）での重み係数を示し、「ｃｏｌｕｍｎＳｉｚｅ」及び「ｒｏｗＳｉｚｅ」はコンボリューションカーネルサイズを示す。
【０００７】
ＣＮＮ処理では複数のフィルタカーネルを画素単位で走査しながら積和演算を繰り返し、最終的な積和結果を非線形変換することで特徴面を算出する。なお、特徴面１６０３ａは前階層の一つの画像データから算出されるので、結合数が１である。特徴面１６０３ａを算出するためのカーネル１６０２１ａは１つである。ここで、フィルタカーネル１６０２１ｂ、１６０２１ｃはそれぞれ特徴面１６０３ｂ、１６０３ｃを算出する際に使用されるフィルタカーネルである。また、フィルタカーネルは、フィルタ又はカーネルと略称することがある。
【０００８】
図１７はＣＮＮ処理における特徴面１６０５ａを算出する場合の例を説明する図である。特徴面１６０５ａは前階層１６０８の３つの特徴面１６０３ａ〜ｃから算出され、特徴面１６０３ａ〜ｃと結合している。特徴面１６０５ａのデータを算出する場合、まず、特徴面１６０３ａに対しては模式的に示すカーネル１６０４１ａを用いたフィルタ演算を行い、その結果を累積加算器１７０１に保持する。同様に、特徴面１６０３ｂ、１６０３ｃに対してはそれぞれカーネル１６０４２ａ、１６０４３ａのコンボリューション演算を行い、その結果を累積加算器１７０１に累積加算する。３種類のカーネルを用いたコンボリューション演算の終了後、ロジスティック関数や双曲正接関数（ｔａｎｈ関数）を利用した非線形変換処理１７０２を行う。
【０００９】
以上の処理を画像全体に対して１画素ずつ走査しながら処理することで、特徴面１６０５ａを算出する。同様に、特徴面１６０５ｂは前階層１６０８の３つの特徴面に対してカーネル１６０４１ｂ、カーネル１６０４２ｂ及びカーネル１６０４３ｂで示す３つのコンボリューション演算を用いて算出する。更に、特徴面１６０７は前階層１６０９の特徴面１６０５ａ〜ｂのそれぞれに対してカーネル１６０６１及びカーネル１６０６２で示す２つのコンボリューション演算を用いて算出する。
【００１０】
なお、各カーネル係数はパーセプトロン学習やバックプロパゲーション学習等の一般的な手法を用いて予め学習により決定されているものとする。例えば、物体の検出やパターン認識等においては、１０×１０以上の大きなサイズのコンボリューションカーネルを使用することがある。
【００１１】
このように、ＣＮＮ処理では多数の大きなカーネルサイズのコンボリューション演算を階層的に使用するため、膨大な回数の積和演算が必要である。共通のハードウェアで様々な認識タスクに対応するためには、多様なネットワークを高い並列度で効率的に処理することが求められる。
【００１２】
特許文献１では積和演算器を複数用意し、複数の受容野位置（算出する特徴面の画素位置）に対応するコンボリューション演算を並列に処理することで高速化する装置が提案されている。また、特許文献２ではコンボリューションカーネルに対して演算器を割り付ける構成のＣＮＮ処理装置が提案されている。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開２０１０−１３４６９７
【特許文献２】ＵＳ２０１２／０３０３９３２
【非特許文献】
【００１４】
【非特許文献１】Ｙａｎｎ  ＬｅＣｕｎ，  Ｋｏｒａｙ  Ｋａｖｕｋｖｕｏｇｌｕ  ａｎｄ  Ｃｌeｍｅｎｔ  Ｆａｒａｂｅｔ：  Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｔｗｏｒｋｓ  ａｎｄ  Ａｐｐｌｉｃａｔｉｏｎｓ  ｉｎ  Ｖｉｓｉｏｎ，  Ｐｒｏｃ．  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｃｉｒｃｕｉｔｓ  ａｎｄ  Ｓｙｓｔｅｍｓ  （ＩＳＣＡＳ’１０），  ＩＥＥＥ，  ２０１０，
【発明の概要】
【発明が解決しようとする課題】
【００１５】
しかしながら、特許文献１では、算出する一つの特徴面に着目して、複数の受容野を並列に処理するが、カーネルサイズや処理対象の領域等によっては、効率的に並列処理できない場合がある。例えば、カーネルサイズが小さい場合、積和演算器に入力するデータの供給時間がボトルネックとなり、並列化効率が低下する場合がある。
【００１６】
本発明は上記の課題に鑑みてなされたものであり、保持部に保持された一部の参照データと複数の異なるフィルタとのフィルタ演算を並列に行うことによって、積和演算の処理効率の低下を避ける演算回路を提供することを目的とする。また、その演算回路の制御方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１７】
上記課題を解決するために、本発明に係る演算回路は、以下の構成を有する。フィルタ演算の参照データと該フィルタ演算に用いるフィルタの係数データとを記憶する記憶装置と接続する演算回路であって、前記参照データと前記フィルタの係数データとの前記フィルタ演算を並列に実行する複数の演算器と、前記記憶装置から転送された所定数の参照データを保持し、前記複数の演算器に供給する第１供給手段と、前記記憶装置から転送された第１フィルタの係数データ及び第２フィルタの係数データを保持し、前記複数の演算器に供給する第２供給手段と、前記複数の演算器に含まれる第１演算器に対して、前記第２供給手段から第１フィルタの係数データを供給し、前記複数の演算器に含まれる第２演算器に対して、前記第２供給手段から第２フィルタの係数データを供給するように、前記第２供給手段を制御する制御手段と、を有することを特徴とする演算回路。
【発明の効果】
【００１８】
本発明により、保持部に保持された一部の参照データと複数の異なるフィルタとのフィルタ演算を並列に行うことによって、積和演算の処理効率の低下を避けることができる。
【図面の簡単な説明】
【００１９】
【図１】本発明の第１の実施形態の演算回路の構成概要を示すブロック図である。
【図２】本発明を概念的に説明する図である。
【図３】実施形態によるコンボリューション演算の基本的な考え方を説明する図である。
【図４】（ａ）第１の実施形態の演算回路のより詳細な構成と動作を説明する図である。（ｂ）ＣＮＮのネットワーク構成と演算の関係を模式的に説明する図である。
【図５】（ａ）第１の実施形態の演算回路のより詳細な構成と動作を説明する図である。（ｂ）ＣＮＮのネットワーク構成と演算の関係を模式的に説明する図である。
【図６】実施形態の並列積和演算器の構成を説明する図である。
【図７】図１のシフトレジスタ４０２ａ，ｂ、４０５ａ，ｂ、４０７ａ，ｂを説明する図である。
【図８】実施形態に係る並列コンボリューション演算の例を説明する図である。
【図９】実施形態の動作を示すタイムチャートである。
【図１０】実施形態のパターン認識装置の構成を示す図である。
【図１１】実施形態のパターン認識装置のフローチャートである。
【図１２】実施形態の制御部１０２の詳細を説明する図である。
【図１３】（ａ）第２の実施形態の構成と動作例を説明する図である。（ｂ）ＣＮＮのネットワーク構成と演算の関係を模式的に説明する図である。
【図１４】（ａ）第２の実施形態の構成と動作例を説明する図である。（ｂ）ＣＮＮのネットワーク構成と演算の関係を模式的に説明する図である。
【図１５】（ａ）第３の実施形態の特徴面を算出する一例を説明する図である。（ｂ）第３の実施形態の特徴面を算出する一例を説明する図である。
【図１６】ＣＮＮ処理の例を示すネットワーク構成図である。
【図１７】ＣＮＮ処理におけるコンボリューション演算を説明する図である。
【発明を実施するための形態】
【００２０】
（第１の実施形態）
まず、本発明の第１の実施形態について説明する。図１は本発明の第１の実施形態に係る演算回路の構成を説明する図である。図１に示す演算回路は、図１６に示すような複数のデータ群の階層的な結合関係にしたがって、下位の階層から特徴面を順次算出していく。並列演算部１０８１〜１０８ｎは、それぞれｍ個（ｍは１以上）の積和演算器を内蔵するものとする。並列演算部１０８１〜１０８ｎは、同一のクロックで並列に動作する。参照データ供給部１０７は、参照データ保持部１０５にバッファリングされた参照データ（コンボリューション演算に必要な前階層の特徴面データの一部）を所定のタイミングで並列演算部１０８１〜１０８ｎに供給する。参照データ供給部１０７は、所定のグループの参照データ供給部１０６１〜１０６ｎに分割されており、分割されたグループ単位でそれぞれ並列演算部１０８１〜１０８ｎに複数の異なるデータを並列に供給する。
【００２１】
ここでの参照データ供給部１０６１〜１０６ｎはシフトレジスタで構成され、並列演算部１０８１〜１０８ｎに各レジスタの値を並列に供給する。係数データ供給部１０３は、コンボリューション演算に必要なパラメータデータ（重み係数データ）を並列演算部１０８１〜１０８ｎに供給する。係数データ供給部１０３は、所定のグループに分割されており、分割されたグループ毎にそれぞれ対応する並列演算部１０８１〜１０８ｎにパラメータデータを供給する。なお、供給するデータは対応するグループの並列演算部が内包する複数の演算器に共通のデータを供給する。本実施形態ではパラメータデータはＲＡＭ１０１に格納されているものとするが、ＲＡＭ１０１に限定せず、他の記憶部や記憶装置に格納してもよい。例えば、図示しないＲＯＭ等にパラメータデータが格納されている構成でも良い。演算結果取り出し部１０９はコンボリューション演算の終了毎に演算結果を取り出す。制御部１０２は主にデータ転送に係わる制御を司る。演算結果はＲＡＭ１０１に格納され、次の階層の参照データとして当該メモリに保持される。次の階層を処理する場合、ＲＡＭ１０１に格納された前階層の演算結果である特徴面を参照することで多階層のネットワークを順次処理することができる。本実施形態では、並列演算部、参照データ供給部、係数データ供給部を所定の単位で予めグルーピングすることで、算出する複数の特徴面にグループ単位で演算回路を割り当てることができる。
【００２２】
次に、本実施形態によるコンボリューション演算の基本的な考え方を、図３を用いて説明する。図３は、コンボリューション演算によって参照特徴面３０２から特徴面３０６を算出する一例である。ここでは特徴面３０６の垂直方向に連続する３つの位置の特徴面データを並列に算出する場合の概念を説明する。なお、基本的な考え方は、特徴面３０６の水平方向に連続する位置を並列に算出する場合についても同様である。コンボリューションカーネル（フィルタカーネル）のサイズは説明のため３行１列の係数とする。特徴面３０６のデータ３０５を並列に算出するのに必要な参照データが参照特徴面３０２のデータ３０１である。
【００２３】
図３のシフトレジスタ３０３及びシフトレジスタ３０７は、それぞれ参照データ３０１及びコンボリューションカーネルの係数を保持する。シフトレジスタ３０３及びシフトレジスタ３０７は図示しないクロックに同期して順次動作し、その出力を並列積和演算器３０４で並列に積和演算する。ここで、算出する特徴面のｏ１に着目すると、１クロック目でｏ１＝ｉ１×ｗ１が算出され、２クロック目でｏ１＝ｏ１＋ｉ２×ｗ２、３クロック目ｏ１＝ｏ１＋ｉ３×ｗ３が演算される。これにより、３クロックで所望のコンボリューション結果（ｉ１×ｗ１＋ｉ２×ｗ２＋ｉ３×ｗ３）が得られる。コンボリューションカーネルが２次元の場合、参照データと係数データを変えて、上記処理を列単位に繰り返して累積することで同様に処理することで２次元のコンボリューション演算が実現する。
【００２４】
このように算出特徴面３０６を基準にしてコンボリューション演算を行うことでフィルタカーネルのサイズに応じたクロック数で積和演算器３０４の並列度に対応する位置の特徴面３０６のデータを並列に算出することができる。
【００２５】
本実施形態は算出する特徴面を基準とした並列コンボリューション演算手法を例として説明する。本実施形態の演算手法は、フィルタカーネルのサイズ及び積和演算器３０４の並列度に因果関係がないという特徴を有している。つまり、コンボリューション演算を様々な並列度で処理することができる。
【００２６】
図２は図１の演算回路の動作モードを概念的に説明する図である。
【００２７】
図２（ａ）は１対１の結合関係のネットワークを４並列で動作する積和演算器２０２を用いて算出する場合の例を示している。ここでは算出する特徴面２０６の４画素の算出領域２０３のコンボリューション演算を並列に処理する。積和演算器２０２はコンボリューション演算の内容によって定まる必要な参照データ２０１を、データバッファ２０５を介して参照しながら演算を進める。
【００２８】
図２（ｂ）は１対２の結合関係のネットワークを図２（ａ）で示す構成で処理する場合の例を示している。４並列の積和演算器２０２を用いて特徴面２０８及び特徴面２０９を順に算出する。算出する特徴面２０８及び特徴面２０９が参照する参照データは共通であるが、特徴面を順に算出する必要があるため、特徴面の処理毎に同じ参照データ２０１がデータバッファ２０５に転送されることになる。
【００２９】
図２（ｃ）は、それぞれ２個の積和演算器からなる２組の並列積和演算器２１１及び並列積和演算器２１３を用いて、異なる特徴面２０８及び特徴面２０９を同時に算出する。即ち、算出する特徴面２０８上の２画素の算出領域２１２の値と算出する特徴面２０９上の２画素の算出領域２１４の値とは、それぞれ並列積和演算器２１１及び並列積和演算器２１３で並列に算出される。この場合、データバッファ２０５には特徴面２０８及び特徴面２０９の算出に際し、共通に必要となる参照特徴面２０４の参照データ２１０が保持される。参照特徴面は一般的に低速な大容量なメモリであるＲＡＭ１０１に格納される。一方、データバッファ２０５は高速・小容量なメモリやレジスタ等で構成される。図２（ｃ）に示すように、複数の特徴面を並列に算出する場合には、データバッファ２０５を介して特徴面２０８及び特徴面２０９の算出時に参照データを共用することができる。そのため、図２（ｂ）に示す構成で順番に特徴面を算出する場合に比べて、図２（ｃ）に示す構成は、ＲＡＭ１０１からデータバッファ２０５へ参照データを転送する回数を半減させることができる。参照データの転送速度を考慮しない場合、図２（ｂ）及び図２（ｃ）のそれぞれの構成では、特徴面を算出する時間は同等であるが、データ転送速度が遅い場合があると、図２（ｂ）の構成ではデータ転送時間が特徴面を算出する時間を律することになる。従って、図２（ｂ）の構成による特徴面の算出時間は、図２（ｃ）の構成による特徴面の算出時間より長い場合がある。
【００３０】
この例で示すように、図２（ｂ）の構成による特徴面の算出を行わずに、ＣＮＮのネットワーク構成や動作条件に応じて、図２（ａ）の構成と図２（ｃ）の構成とを切り替えることで、並列演算器の数に応じた最良の性能を引き出すことができる。
【００３１】
本実施形態では、ＣＮＮのネットワーク構成や動作条件に応じて並列に動作する演算回路の割り当て（算出する特徴面に割り当てる並列演算器の数）を最適化することが可能な並列演算処理回路を提案することにある。
【００３２】
次に、図４、５を用いて図１の構成をより詳細に説明する。ここでは説明のために演算器のグループの数を２とした場合について説明するが、この二つのグループの演算器以外の演算器を含んでもよい。これによって、全ての演算器を一つの特徴面の算出に利用する場合と、２つの特徴面のそれぞれの算出に分割して利用する場合の２つのケースを選択可能な構成の例である。これは、図２（ａ）で説明した演算処理と図２（ｃ）で説明した演算処理の切り替えに相当する。なお、図４と図５は説明のため２つのグループ単位で処理対象となる特徴面を切り替える場合について説明するが、これに限るわけではなく、より多くのグループに分割した構成で良い。
【００３３】
図４、５は共通のハードウェアである並列演算器の割り当てが異なる動作モードを説明する図である。また、図４、５は図１の構成を詳細化したものであり、同じ番号は同一の構成を示す。ここでは、図１の構成と相違する部分についてのみ説明する。
【００３４】
なお、以下では、先ず、本実施形態によるコンボリューション演算処理の基本的な共通動作について説明し、その後に本実施形態の特徴となる複数の動作モードの説明を行う。
【００３５】
参照データ保持部（参照データバッファ）１０５は、所定の数のレジスタで構成する。参照データ保持部１０５は少なくとも、シフトレジスタ４０２ａ、ｂに格納するデータの個数以上のレジスタを有する。制御部１０２は、並列積和演算器１０８ａ，ｂが参照するデータをＲＡＭ１０１から当該レジスタに転送する。参照データ供給部１０７は、ここでは、セレクタ４０１とシフトレジスタ４０２ａ、ｂで構成する。シフトレジスタ４０２ａ、ｂは、それぞれ並列積和演算器１０８ａ、ｂに参照データをｍ個並列に供給する。供給するデータは図示しないクロックにしたがって順次シフトしていく。係数データ供給手部１０３は、ここでは係数データバッファ４０３、セレクタ４０４、シフトレジスタ４０５ａ，ｂで構成する。係数データバッファ４０３は、所定の個数のレジスタ等により構成する。
【００３６】
係数データバッファ１０３は少なくとも、シフトレジスタ４０５ａ、ｂに格納するデータの個数以上のレジスタを有する。ＲＡＭ１０１に格納されているパラメータデータ（コンボリューション演算の重み係数データ）は制御部１０２により係数データバッファ４０３に転送される。セレクタ４０４はシフトレジスタ４０５ａ，ｂへのデータ分配を選択する。シフトレジスタ４０５ａ，ｂの出力はそれぞれ並列積和演算器１０８ａ、ｂに接続する。
【００３７】
並列積和演算器１０８ａ、ｂに入力する係数はグループ毎に共通のデータである。並列積和演算器１０８ａ、ｂはそれぞれ同一のクロックで動作する複数の積和演算器を含むものとする。セレクタ４０１、４０４はそれぞれ参照データバッファ１０５、係数データバッファ４０３の出力を選択するマルチプレクサであるが、詳細は後述する。
【００３８】
図６は、並列積和演算器１０８ａ、ｂの構成を示す図である。参照データ供給部の出力６０１１〜６０１ｍから、各乗算器６０３１〜６０３ｍへ異なるデータを供給する。係数データ供給部の出力６０２から、各乗算器６０３１〜６０３ｍへ共通のデータを供給する。累積加算器６０４１〜６０４ｍは、コンボリューションカーネル演算の期間中に乗算結果を累積する。クリア信号６０５は、所定のコンボリューション演算単位が終了すると累積加算器６０４１〜６０４ｍの内蔵ラッチをクリアするために使用される。ラッチイネーブル信号（Ｌａｔｃｈ  Ｅｎａｂｌｅ信号）６０６は、当該信号で累積加算値を更新する。Ｌａｔｃｈ  Ｅｎａｂｌｅ信号６０６には図示しないクロック信号に同期した信号が接続されるものとする。
【００３９】
演算結果取り出し部１０９は、シフトレジスタ４０７ａ、ｂ等からなる。シフトレジスタ４０７ａ、ｂは、並列積和演算器１０８ａ、ｂの出力データを所定のタイミングでラッチし、シフト動作で出力する。非線形変換処理部４０８は、コンボリューション演算の結果を必要に応じて非線形変換処理する。変換結果は制御部１０２を介してＲＡＭ１０１の所定領域に記録される。
【００４０】
図１２は制御部１０２の詳細を説明する図である。シーケンス制御部１２０１は、レジスタ群１２０２に設定された情報にしたがって、演算回路１００２の動作を制御する各種制御信号１２０４を入出力する。同様に、シーケンス制御部１２０１はメモリ制御部１２０５を制御するための制御信号１２０６を生成する。シーケンス制御部１２０１はバイナリカウンタやジョンソンカウンタ等からなるシーケンサにより構成される。レジスタ群１２０２は複数のレジスタセットからなり、階層的な処理を行うための情報が保持される。例えば、参照する特徴面や算出する特徴面に関する情報、カーネルに関する情報、特徴面の処理順等関する情報等が記録される。レジスタ群１２０２はブリッジ１００４及び画像バス１００３を介してＣＰＵ１００７から予め所定の値が書き込まれる。
【００４１】
本実施形態によるコンボリューション演算は算出特徴面の水平方向に連続するｍ画素位置のデータをグループ毎に複数並列に算出するものである。係数データバッファ４０３及びシフトレジスタ４０５ａ，ｂは少なくともコンボリューションカーネルの水平方向のサイズより多いレジスタで構成される。例えば、重み係数が８ビットで表されるデータの場合、８ビット幅の複数のレジスタで構成される。例えば、水平方向のコンボリューションカーネルサイズが「１１」の場合、当該レジスタの数は「１１」とする。
【００４２】
実際には、想定する最大カーネルサイズのレジスタ数で構成する。なお、制御部１０２はシフトレジスタ４０５ａ，ｂのシフト動作中にＲＡＭ１０１から次の行の積和演算処理に必要な係数を係数データバッファ４０３にロードする。
【００４３】
参照データバッファ１０５はＲＡＭ１０１に格納された参照データを一時的に保持するために使用される。参照データが８ビットで表されるデータの場合、参照データバッファ１０５は８ビット幅の複数のレジスタで構成される。参照データバッファ１０５は所定数以上の個数のレジスタで構成される。この所定数は、例えば、（「並列に処理するデータの数」＋「並列処理する方向と同じ方向のコンボリューションカーネルサイズ」−１）×「グループの数」によって計算される。制御部１０２はシフトレジスタ４０２ａ，ｂのシフト動作中にＲＡＭ１０１から次の行の処理に必要な参照データを参照データバッファ１０５にロードする。コンボリューション演算は図３で説明したように、参照データシフトレジスタ４０２ａ，ｂ及び係数データシフトレジスタ４０５ａ，ｂのシフト動作により処理される。
【００４４】
以上の処理により、積和演算処理とＲＡＭ１０１からのデータロードをコンボリューションカーネルの水平行単位でパイプライン化することが可能になる。
【００４５】
シフトレジスタ４０２ａ，ｂ、シフトレジスタ４０５ａ，ｂ及びシフトレジスタ４０７ａ，ｂはそれぞれデータロード機能付のシフトレジスタである。シフトレジスタ４０２ａ，ｂ及びシフトレジスタ４０５ａ，ｂはそれぞれ参照データバッファ１０５及び係数データバッファ１０３と同じビット幅の複数のレジスタで構成される。シフトレジスタ４０７ａ，ｂは並列積和演算器１０８ａ，ｂの出力データと同じビット数の複数のレジスタで構成される。
【００４６】
図７にこれらのシフトレジスタの構成例を示す。図７はレジスタ個数が４の場合の例を説明する。多ビットのフリップフロップ７０１ａ〜ｄは、ＣＬＯＣＫ信号に同期して所定ｂｉｔのデータをラッチする。セレクタ７０２ａ〜ｃは、選択信号（Ｌｏａｄ信号）が０の場合ＯＵＴｘ（ｘ：０〜２）が選択され、１の場合ＩＮｘ（ｘ：１〜３）が選択される。
【００４７】
即ち、Ｌｏａｄ信号に応じてシフト動作とロード動作が選択される。Ｅｎａｌｂｅ信号はデータ遷移のイネーブル信号であり、１である場合、ＣＬＯＣＫ信号の立ち上がりでデータをラッチし、０である場合は、ラッチしたデータをそのまま保持する（状態遷移しない）。
【００４８】
図４（ａ）におけるＬｏａｄ２／Ｌｏａｄ４／Ｌｏａｄ５信号はそれぞれ係数データシフトレジスタ４０５ａ，ｂ、参照データシフトレジスタ４０２ａ，ｂ、結果シフトレジスタ４０７ａ，ｂのＬｏａｄ信号である。図４（ａ）におけるＥｎａｂｌｅ１／Ｅｎａｂｌｅ２／Ｅｎａｂｌｅ３信号はそれぞれ係数データシフトレジスタ４０５ａ，ｂ、参照データシフトレジスタ４０２ａ，ｂ、結果シフトレジスタ４０７ａ，ｂのＥｎａｂｌｅ信号である。シフトレジスタ４０５ａ，ｂは初期データのロード（係数データバッファ４０３に保持された複数のデータをセレクタ４０４を介して一括ロード）後、水平方向のコンボリューションカーネルサイズと同じクロック数シフト動作を実行する。シフトレジスタ４０５ａ，ｂは、シフト動作に従って、並列積和演算器１０８ａ，ｂに対して重み係数データを順次供給する。シフトレジスタ４０５ａ，ｂのそれぞれの図７におけるＯＵＴｎ信号（シフトレジスタ最終段出力）が全ての並列積和演算器１０８ａ，ｂに共通に接続される。
【００４９】
同様に、シフトレジスタ４０２ａ、ｂはセレクタ４０１を介して参照データバッファ１０５から初期データがロードされると、以後水平方向のコンボリューションカーネルサイズと同じクロック数シフト動作を実行する。また、シフトレジスタ４０２ａ、ｂは並列積和演算器１０８ａ、ｂに対して複数の参照データ（図７  ＯＵＴ１〜ＯＵＴｎ信号）を同時に供給する。
【００５０】
シフトレジスタ４０５ａ，ｂとシフトレジスタ４０２ａ，ｂは同期して動作する。シフトレジスタ４０５ａ，ｂ、４０２ａ，ｂから供給されるデータにしたがって並列積和演算器１０８ａ，ｂで積和演算が実行される。
【００５１】
ここで得られた累積和は、対象特徴面に対応する全コンボリューションカーネルの演算終了後、シフトレジスタ４０７ａ，ｂにロードされ、所定のタイミングで非線形変換処理部４０８に送られる。並列積和演算器１０８ａ，ｂのそれぞれは同一クロックで動作する同一の回路がｍ個並んでいるものとする。
【００５２】
シフトレジスタ４０７ａ，ｂは、ｍ個の積和演算出力を保持することが可能なフリップフロップで構成する。並列積和演算器１０８ａ，ｂの出力は所定の有効ビットのみシフトレジスタ４０７ａ，ｂに接続する。
【００５３】
非線形変換処理部４０８はルックアップテーブル等により構成する。非線形変換処理部４０８で変換処理されたデータはＲＡＭ１０１の所定アドレスに格納される。ここでの格納アドレスも制御部１０２に従って制御される。
【００５４】
図８は本実施形態の演算回路による並列処理の具体例を模式的に説明する図である。図８の参照データ面８０２及び算出データ面８０４は、それぞれラスタスキャンされたデータ座標を用いて表す。参照特徴面８０２は、各データ（模式的に示す最小一升）がラスタスキャン順でＲＡＭ１０１に格納された前階層の演算結果（ｉｎｐｕｔ（ｘ，ｙ）、ｘ：水平方向位置、ｙ：垂直方向位置）を示すものであるとする。算出データ面８０４は、各データがラスタスキャンされた演算結果（ｏｕｔｐｕｔ（ｘ，ｙ）、ｘ：水平方向位置、ｙ：垂直方向位置）を示すものとする。
【００５５】
算出範囲８０３は並列積和演算器１０８ａまたは１０８ｂ（ｍ＝８の場合）で並列に演算するデータの位置を示し、参照範囲８０１がコンボリューション演算のカーネルサイズが３×３である場合の算出範囲８０３に対する参照データの範囲である。制御部は参照範囲８０１内の各ラインのデータを順に参照データレジスタバッファに転送し、並列積和演算器は参照データのシフト動作に伴ってコンボリューション演算を実現する。
【００５６】
図９は、図４或いは図５の演算回路のコンボリューション演算の共通動作を説明するタイムチャートである。以下、図４及び図９を用いて演算回路の特徴的な動作を説明する。図９は１つの特徴面のコンボリューション演算処理動作の一部を説明するための図である。また、図９に示す信号は全て図示しないクロック信号に基づいて同期動作する。
【００５７】
信号Ｌｏａｄ１は係数データバッファ４０３に重みデータをロードするためのイネーブル信号を示す。制御部１０２は当該信号が有効（信号レベルが１）の期間にＲＡＭ１０１から水平方向１列分の重みデータを読み出し係数データバッファ４０３に書き込む。ここでＲＡＭ１０１のデータ幅は３２ビットであり、重み係数のデータ幅は８ｂｉｔであるとすると、係数データバッファ４０３に水平方向３個の重み係数を書き込む場合、１クロックでロード処理を完了する。なお、以後、ＲＡＭ１０１に対する読み出し／書き込みサイクルは全て１クロックで完了するものとする。
【００５８】
制御部１０２は、重み係数のロードが完了すると、次に参照データのロードを開始するためにＬｏａｄ３信号を有効化する。ここで、Ｌｏａｄ３信号もＬｏａｄ１信号と同様に信号レベル１の場合が有効化された状態であるものとする。制御部１０２はＬｏａｄ３信号の有効化と同時にＲＡＭ１０１から参照データを取り出し参照データバッファ１０５にセットする。セットするデータの数はコンボリューションカーネルの大きさ及び並列度から決定する。
【００５９】
制御部１０２はＲＡＭ１０１から読み出すデータのアドレスを決定する。参照データの有効桁は８ｂｉｔであるとすると、図８の例の場合コンボリューションカーネルの水平方向サイズが３、演算並列度が４であることから３＋３−１＝５個のデータをロードする必要がある。したがって、２サイクルで書き込みシーケンスを完了する。
【００６０】
＊ＣＬＲ信号は並列積和演算器１０８ａ、ｂの累積加算器６０４１〜６０４ｍを初期化するための信号であり、当該信号が０である場合に、累積加算器に内蔵するレジスタは０に初期化される。制御部１０２は新たな特徴面位置のコンボリューション演算開始前に当該信号を０にする。
【００６１】
Ｌｏａｄ２信号は係数データシフトレジスタ４０５ａ、ｂの初期化を指示するための信号である。Ｌｏａｄ２信号が１であり、かつＥｎａｂｌｅ１信号が有効（信号レベル１）である場合、係数データバッファ４０３に保持する複数の重み係数データが係数データシフトレジスタ４０５ａ，ｂに一括ロードされる。Ｅｎａｂｌｅ１信号はシフトレジスタのデータ遷移を制御する信号であるが、図９に示すように動作中は常に１に設定されている。そのため、Ｌｏａｄ２信号が１である場合、クロック信号に応じて係数データバッファ４０３の出力をラッチし、Ｌｏａｄ２信号が０である場合、クロック信号に応じてシフト処理を継続する。
【００６２】
制御部１０２のシーケンス制御部１２０１は、コンボリューションカーネルの水平方向サイズに応じたクロック数をカウントするとＬｏａｄ２信号を有効化し、シフト動作を停止させる。同時に、シーケンス制御部１２０１は、セレクタ４０４を介して係数データバッファ４０３に保持する重み係数データを係数データシフトレジスタ４０５ａ、ｂに一括ロードする。即ち、コンボリューションカーネルの水平方向単位で重み係数を一括ロードし、ロードした係数を動作クロックに応じてシフトアウトする。
【００６３】
Ｌｏａｄ４信号は参照データシフトレジスタ４０２ａ，ｂの初期化を指示するための信号である。当該信号が１であり、かつＥｎａｂｌｅ２信号が有効（信号レベル１）である場合、参照データバッファ１０５に保持する参照データがセレクタ４０１を介して参照データシフトレジスタ４０２ａ，ｂに一括ロードされる。Ｅｎａｂｌｅ２信号はシフトレジスタのデータ遷移を制御する信号である。図９に示すようにＥｎａｂｌｅ２信号は、動作中は常に１に設定されているため、Ｌｏａｄ４信号が１である場合、クロック信号に応じて参照データバッファ１０５の出力をラッチし、Ｌｏａｄ４信号が０である場合、クロック信号に応じてシフト処理を継続する。
【００６４】
制御部１０２のシーケンス制御部１２０１は、コンボリューションカーネルの水平方向サイズに応じたクロック数をカウントするとＬｏａｄ４信号を有効化し、シフト動作を停止させると同時に参照データバッファ１０５に保持する参照データを一括ロードする。
【００６５】
即ち、コンボリューションカーネルの１列単位で必要な参照データを一括ロードし、ロードした参照データを動作クロックに応じてシフトする。
【００６６】
以上、制御部１０２は、Ｌｏａｄ４信号をＬｏａｄ２信号と同一タイミングで制御する。
【００６７】
並列積和演算器１０８ａ，ｂはクロックに同期して積和演算を継続している。そのため、シフトレジスタ４０２ａ，ｂ及びシフトレジスタ４０５ａ，ｂのシフト動作にしたがって算出する特徴面の複数の点に対して同時にコンボリューションカーネルサイズに応じた積和演算処理を実行する。具体的には、シフトレジスタ４０２ａ，ｂとシフトレジスタ４０５ａ，ｂのシフト動作期間（図９中の積和演算処理区間）中にコンボリューションカーネルの１列分（又は１行分）の積和演算がなされることになる。当該列単位の演算を重み係数及び参照データを入替ながら水平方向（又は垂直方向）に繰り返すことで並列度の数に応じた二次元のコンボリューション演算を処理する。
【００６８】
このように、制御部１０２はカーネルサイズ及び並列度に応じて各信号を制御することで、積和演算処理と積和演算処理に必要なデータ（重み係数データ及び参照データ）のＲＡＭ１０１からの供給を並行に実行させる。
【００６９】
Ｌｏａｄ５信号は並列積和演算器の結果を結果シフトレジスタ４０７ａ，ｂに並列にロードするための信号である。制御部１０２は対象となる特徴面の並列処理単位の積和演算が終了するとＬｏａｄ５信号及びＥｎａｂｌｅ３信号に１を出力する（当該タイミングは図９には図示しない）。
【００７０】
結果シフトレジスタ４０７ａ，ｂはＬｏａｄ５信号が１でＥｎａｂｌｅ３信号が１である場合、並列積和演算器１０８ａ，ｂの出力を一括ロードする。制御部１０２はシフトレジスタ４０２ａ，ｂ，シフトレジスタ４０５ａ，ｂ及びシフトレジスタ４０７ａ，ｂのシフト動作中にＥｎａｂｌｅ３の信号を有効化し、結果シフトレジスタ４０７ａ，ｂに保持する演算結果をシフトアウトする。図７のＯＵＴｎ信号（シフトレジスタ最終段出力）が非線形変換処理部４０８に接続されているものとする。シフトアウトした演算結果は非線形変換処理部４０８で変換処理された後、制御部１０２により、レジスタ群１２０２に記された演算結果格納先ポインタ等の情報にしたがってＲＡＭ１０１の所定のアドレスに格納される。
【００７１】
以上のように、制御部１０２は参照データバッファ１０５、係数データバッファ４０３及び非線形変換処理部４０８の３つの処理部のＲＡＭ１０１に対するアクセスを調停する。制御部１０２は、並列積和演算器の積和演算処理とこの３つの処理部（参照データバッファ１０５、係数データバッファ４０３及び非線形変換処理部４０８）のＲＡＭ１０１へのアクセスをパイプライン化する。つまり、ＲＡＭ１０１に対する参照データの読み出し、演算結果の書き出しを積和演算処理期間に並行処理することで、高速に処理することができる。但し、並列度とコンボリューションカーネルの関係によっては、ＲＡＭ１０１へのアクセスを積和演算期間中に完全にパイプライン化できない場合もある（並列積和演算器１０８ａ，ｂの並列度が高く、並列度コンボリューションカーネルが小さい場合など）。
【００７２】
その場合、制御部１０２はＲＡＭ１０１へのアクセス完了を優先し、Ｅｎａｂｌｅ１／Ｅｎａｂｌｅ２／Ｅｎａｂｌｅ３信号及び累積加算器のＬａｔｃｈ  Ｅｎａｂｌｅ信号を制御することで積和演算処理の開始を遅延させる。例えば、並列積和演算器の並列度が１２、コンボリューションカーネルサイズが３×３の場合、コンボリューションカーネルの水平方向の演算に必要な参照データは１２＋３−１＝１４個となる。この場合、ＲＡＭ１０１のデータ幅が３２ビットであるとすると、４サイクル（１４／４の切り上げ）の転送時間を要する。一方水平方向のコンボリューション演算は３クロックであり、この場合、参照データの転送時間が処理時間を律することになる。
【００７３】
次に、図４、５を用いて本実施形態の演算回路に特有の動作について説明する。図４（ａ）は、一つの特徴面を全ての積和演算器で並列に処理する場合の動作モードを説明する図である。
【００７４】
制御部１０２は、係数データバッファ４０３にコンボリューションカーネル水平方向単位の一種類の係数データをＲＡＭ１０１から転送する。セレクタは係数データバッファ４０３に格納するデータをそれぞれ係数データシフトレジスタ４０５ａと係数データシフトレジスタ４０５ｂに分配するように選択する。即ち、係数データシフトレジスタ４０５ａ及び係数データシフトレジスタ４０５ｂは、係数データバッファ４０３に格納されている同じコンボリューションカーネル係数を格納するように、係数データバッファ４０３から同じ係数データをロードする。
【００７５】
次に、制御部１０２は、参照データバッファレジスタに連続する領域の参照データを転送する。転送するデータは参照データシフトレジスタ４０２ａ及び参照データシフトレジスタ４０２ｂに格納するデータであり、それぞれ並列積和演算器１０８ａ、１０８ｂの並列度に応じた連続する領域の所定個数の参照データである。この所定個数は、並列積和演算器１０８ａ、１０８ｂが並列に算出するデータのサイズ（並列度）＋カーネルの水平方向サイズ−１で算出される。
【００７６】
セレクタ４０１は、参照データバッファ１０５の出力の図中上位に示すデータをそのまま参照データシフトレジスタ４０２ａに出力し、下位に示すデータをそのまま参照データシフトレジスタ４０２ｂに出力するように動作する。
【００７７】
セレクタ４０４及びセレクタ４０１の動作は制御部１０２が生成するＭｏｄｅ信号によって制御される。即ち、Ｍｏｄｅ信号の値（１又は０）に応じて入力データを選択して出力する。
【００７８】
参照データシフトレジスタ４０２ａ及び参照データシフトレジスタ４０２ｂへのデータ格納が完了するとシフト動作が開始し、並列積和演算器１０８ａ，ｂは、コンボリューションカーネルの水平方向単位の積和演算を開始する。コンボリューションカーネルの行単位に以上の処理を繰り返すことで所望の演算結果を並列度に応じて処理することができる。この動作モードでは水平方向に連続する２×ｍ個の位置のコンボリューション演算を並列に処理する。
【００７９】
図４（ｂ）は、図４（ａ）で説明した動作モード時のＣＮＮのネットワーク構成と演算の関係を模式的に説明する図である。演算に必要な参照データ領域４１０、４１１は、それぞれ参照データレジスタ４０２ａ、４０２ｂに格納されるデータであり、参照特徴面の異なる領域である。また、参照特徴面における参照データ領域４１０，４１１は、カーネルサイズに応じたオーバーラップ領域を有してもよい。
【００８０】
コンボリューションカーネル４１４は、係数データレジスタ４０５ａ、４０５ｂに格納される係数データである。算出領域４１２、４１３は、それぞれ並列積和演算器１０８ａ，ｂで並列に演算することによって算出する特徴面の領域を示している。算出領域４１２、４１３は、それぞれ水平方向に連続するｍ個の位置のデータである。つまり、２×ｍ個の位置の算出特徴面データを並列に計算することになる。図４（ａ）で説明した動作モードでは、算出領域４１２と算出領域４１３の合計領域単位でラスタスキャンすることにより特徴面を算出する。
【００８１】
図５（ａ）は、二つの特徴面を積和演算器で並列に処理する場合の動作モードを説明する図である。
【００８２】
制御部１０２は係数データバッファ４０３にコンボリューションカーネル水平方向単位の係数データをＲＡＭ１０１から転送する。ここでは複数の特徴面に対応する異なる係数のデータを係数データバッファ４０３に格納する。セレクタ４０４は係数データバッファ４０３に格納された異なる２種類の係数を係数データシフトレジスタ４０５ａ及び係数データシフトレジスタ４０５ｂにそれぞれ出力するように動作する。即ち、係数データシフトレジスタ４０５ａと係数データシフトレジスタ４０５ｂには算出特徴面に対応する異なる係数が格納される。
【００８３】
次に、制御部１０２は参照データバッファ１０５に２つの算出特徴面が参照する同じ領域の参照データを転送する。転送するデータは参照データシフトレジスタ４０２ａ及び参照データシフトレジスタ４０２ｂに格納するデータであり、並列積和演算器１０８ａ、１０８ｂの並列度に応じた連続する領域の所定個数の参照データである。この所定個数は、算出するデータのサイズ＋カーネルの水平方向サイズ−１で算出される。
【００８４】
ここでは参照データシフトレジスタ４０２ａ及び参照データシフトレジスタ４０２ｂに同一のデータを格納するため、参照データバッファ１０５に格納するデータは図４で説明した動作モードに対して半分のサイズである。従って、参照データバッファ１０５の図中上位に示す位置にのみデータが格納されている。セレクタ４０１は参照データシフトレジスタ４０２ａ及び参照データシフトレジスタ４０２ｂに参照データバッファ１０５の上位位置に格納されているデータを出力するように動作する。
【００８５】
参照データシフトレジスタ４０２ａ及び参照データシフトレジスタ４０２ｂへのデータ格納が完了するとシフト動作が開始し、並列積和演算器１０８ａ，ｂは、コンボリューションカーネルの水平方向単位の積和演算を開始する。コンボリューションカーネルの行単位に以上の処理を繰り返すことで所望の演算結果を並列度に応じて処理することができる。この動作モードでは二つの特徴面に対して水平方向に連続するｍ個の位置のコンボリューション演算を並列に処理する。
【００８６】
図５（ｂ）は、図５（ａ）で説明した動作モード時のＣＮＮのネットワーク構成と演算の関係を模式的に説明する図である。二つの特徴面の算出時に必要な参照データ領域５０２は、参照データシフトレジスタ４０２ａ及び参照データシフトレジスタ４０２ｂに格納されるデータであり、参照特徴面の領域である。コンボリューションカーネル５０３及びコンボリューションカーネル５０５は、それぞれ係数データシフトレジスタ４０５ａ及び係数データシフトレジスタ４０５ｂに格納される異なるデータである。並列に演算する算出特徴面の算出領域５０４及び算出領域５０６は、それぞれ水平方向に連続するｍ個の位置のデータ領域である。つまり、ｍ個の位置の異なる算出特徴面データを並列に算出することになる。算出領域５０４と算出領域５０５の領域単位でラスタスキャンすることで２つの特徴面を算出する。
【００８７】
図４の動作モードで複数の特徴面を算出する場合、特徴面の算出毎に、参照特徴面のデータをＲＡＭ１０１から参照データバッファに転送する。即ち、参照する特徴面の数倍のデータ転送が必要となる。
【００８８】
一方、図５の動作モードでは、算出する異なる特徴面でそれぞれ参照する特徴面のデータを共有するために、参照する特徴面のデータの転送回数を削減することができる。つまり、演算に必要な参照データの転送レートを下げることができる。これにより、参照データバッファ１０５へのデータ転送時間が全体の処理時間を律するケースを低減し、演算リソース（並列演算器）を有効に活用することができる。前述した例のように、並列積和演算器の並列度（ｍ×２）が１２、コンボリューションカーネルサイズが３×３の場合、コンボリューションカーネルの水平方向の演算に必要な参照データは１２÷２＋３−１＝８個となる。１個の参照データは８ビットで表されるので、転送する参照データは６４ビットである。この場合、ＲＡＭ１０１のデータ幅が３２ビット／サイクルであるとすると、２サイクルの転送時間を要する。一方、水平方向のコンボリューション演算は３クロックであり、この場合は、演算器の処理時間が全体の処理時間を律することになる。つまり、演算器の能力を十分に活用していることになる。
【００８９】
以上、図４、図５で説明したように、本実施形態の演算回路では並列積和演算器１０８ａ及び並列積和演算器１０８ｂに供給する参照データ及びコンボリューションカーネル係数を変えることで算出する特徴面に割り当てる並列演算器の数を制御する。
【００９０】
図１０は本実施形態の演算回路を具備した画像処理装置の構成例を示すものである。この画像処理装置は、入力画像データからパターン認識処理によって特定の物体を検出する機能を有する。図１０の演算回路１００２は、図１、図４及び図５で示された演算回路である。
【００９１】
図１０の画像入力モジュール１０００は、光学系、ＣＣＤまたはＣＭＯＳセンサー等の光電変換デバイス及びセンサーを制御するドライバー回路／ＡＤコンバーター／各種画像補正を司る信号処理回路／フレームバッファ等により構成される。
【００９２】
ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１０１は、演算回路１００２の演算作業バッファとして使用される。ＲＡＭ１０１にはＣＮＮの特徴面に相当するデータ群が記憶される。
【００９３】
ＤＭＡＣ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ）１００６は、画像バス１００３上の各処理部とＣＰＵバス１０１０間のデータ転送を司る。ブリッジ１００４は、画像バス１００３とＣＰＵバス１０１０のブリッジ機能を提供する。
【００９４】
前処理モジュール１００５は、ＣＮＮ処理によるパターン認識処理を効果的に行うための各種前処理を行う。前処理モジュール１００５は、色変換処理／コントラスト補正処理等の画像データ変換処理をハードウェアで処理する。
【００９５】
ＣＰＵ１００７は、制御プログラムを実行することによって、装置全体の動作を制御するものである。ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１００８は、ＣＰＵ１００７の動作を規定する命令やパラメータデータを格納する。ＲＡＭ１００９はＣＰＵ１００７の動作に必要なメモリである。ＣＰＵ１００７はブリッジ１００４を介して画像バス１００３上のＲＡＭ１０１にアクセスすることも可能である。
【００９６】
図１１は本実施形態の画像処理装置の動作を説明するフローチャートである。以下、フローチャートは、ＣＰＵ１００７が制御プログラムを実行することにより実現されるものとする。ステップＳ１１０１では認識処理の開始に先立ち、ＣＰＵ１００７が各種初期化処理を実行する。ＣＰＵ１００７は、演算回路１００２の動作に必要な重み係数をＲＯＭ１００８からＲＡＭ１０１に転送すると共に、演算回路１００２の動作、即ちＣＮＮのネットワーク構成を定義する為の各種設定を行う。具体的には、ＣＰＵ１００７は、演算回路１００２の制御部１０２に存在する複数の動作レジスタに所定の値を設定する。同様に、ＣＰＵ１００７は、前処理モジュール１００５等のレジスタに対しても動作に必要な値を書き込む。
【００９７】
次に、ステップＳ１１０２で各特徴面を算出する際の並列演算器の割り当てを決定する。
【００９８】
ここではＣＮＮのネットワーク構造やＲＡＭ１０１から演算器に対するータ転送性能、演算対象領域等の条件に従って、特徴面に割り当てる並列演算器の数を設定する。例えば、参照特徴面と算出特徴面の結合関係に応じて設定する。或いは、ＲＡＭ１０１に格納する参照データの演算器への転送時間と演算器の処理サイクル（処理時間）との関係に基づいて決定する。
【００９９】
ステップＳ１１０１の初期化処理及びステップＳ１１０２の並列演算器の割り当てが終了した後に、一連の物体認識動作が開始する。
【０１００】
まず、ステップＳ１１０３では画像入力モジュール１０００が、画像センサーの出力する信号をディジタルデータに変換し、フレーム単位で図示しない（画像入力モジュール１０００に内蔵する）フレームバッファに格納する。
【０１０１】
フレームバッファへの格納が完了すると、ステップＳ１１０４では、所定の信号に基づいて、前処理モジュール１００５が画像変換処理を開始する。前処理モジュール１００５は前記フレームバッファ上の画像データから輝度データを抽出し、コントラスト補正処理等を行う。
【０１０２】
輝度データの抽出は一般的な線形変換処理によりＲＧＢ画像データから輝度データを生成する。コントラスト補正の手法も一般的に知られているコントラスト補正処理を適用してコントラストを強調する。前処理モジュール１００５はコントラスト補正処理後の輝度データを検出用画像としてＲＡＭ１０１に格納する。
【０１０３】
１フレームの画像データに対して前処理が完了すると、前処理モジュール１００５は図示しない完了信号を有効にする。ステップＳ１１０５では、演算回路１００２は当該完了信号に基づいて演算回路１００２を起動し、ＣＮＮに基づく物体の検出処理を開始する。ステップＳ１１０６では、最終層の特徴面の算出が終了すると演算回路１００２はＣＰＵ１００７に対して完了割り込みを発生する。ステップＳ１１０７では、ＣＰＵ１００７は演算回路１００２の処理終了通知（割込み）を受け取ると、最終層の特徴面を解析し、画像中の物体の位置や属性を判定する。ステップＳ１１０７の解析処理が完了すると、ステップＳ１１０８では、次のフレームの画像に対する処理を継続する。
【０１０４】
本実施形態によれば、簡単な制御で、算出する特徴面に割り当てる並列演算器の数を選択することが可能になる。これにより多様なネットワークを高い並列度で効率的に処理し、全体の処理時間を低減することが可能になる。
【０１０５】
本実施形態では並列演算器で２次元のコンボリューション演算を処理する場合について説明したが、コンボリューション演算に限るわけではない。
【０１０６】
本実施形態では２次元データ（画像データ）に対するＣＮＮ処理の例を説明したが、音声データ等の１次元データや時間方向の変化も含めた３次元データに対するＣＮＮ処理に適用することも可能である。
【０１０７】
本実施形態ではＣＮＮ処理に対して本発明を適用する場合について説明したが、これに限るわけではない。演算処理の階層的な結合関係で表現される様々な処理に適用可能である。例えば、Ｒｅｓｔｒｉｃｔｅｄ  Ｂｏｌｔｚｍａｎｎ  ＭａｃｈｉｎｅｓやＲｅｃｕｒｓｉｖｅ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ等他の階層的な処理に適用可能である。
【０１０８】
（第２の実施形態）
第１の実施形態は２種類の並列演算器の割り付け方法を変更する場合について説明したが、本実施形態ではより自由度の高い割り付け方法を実現する構成例について説明する。
【０１０９】
図１３（ａ）は本実施形態の演算回路の構成を示す図である。ＲＡＭ１０１、制御部１０２は図１の演算回路と同じである。参照データバッファレジスタ１０５は、図１の参照データ保持部１０５に相当し、図４及び図５に示したレジスタと同様に構成される。本実施形態の第１のデータ供給部１０７は、参照データシフトレジスタ１３０１とクロスバースイッチ１３０２からなる。なお、第１のデータ供給部１０７は参照データバッファレジスタ１０５及び参照データシフトレジスタ１３０１で構成し、クロスバースイッチ１３０２は経路制御部を構成するものであってもよい。この経路制御部は、第１のデータ供給部１０７の出力と並列演算器の入力との間の経路を制御する。ここで、参照データシフトレジスタ１３０１は、１２個のレジスタｄ１〜ｄ１２により構成されているものとする。本実施形態の第２のデータ供給部１０３は、係数データバッファレジスタ１３０３、係数データシフトレジスタ１３０４及びクロスバースイッチ１３０８からなる。なお、第２のデータ供給部１０３は係数データバッファレジスタ１３０３及び係数データシフトレジスタ１３０４から構成し、クロスバースイッチ１３０８は経路制御部を構成するものであってもよい。この経路制御部は、第２のデータ供給部１０３の出力と並列演算器の入力との間の経路を制御する。
【０１１０】
並列積和演算器１３０５は、ここではｐ１〜ｐ６の６個の積和演算器からなる。並列積和演算器１３０５の２本の入力にはクロスバースイッチ１３０２とクロスバースイッチ１３０８の出力がそれぞれ接続されている。結果シフトレジスタ１３０６は、並列積和演算器１３０５の出力（演算結果）を所定のタイミングでラッチし、非線形変換処理部１３０７に順次出力する。得られた演算結果は制御部１０２を介してＲＡＭ１０１に格納される。クロスバースイッチ１３０２及び１３０８はそれぞれ参照データシフトレジスタ１３０１及び係数データシフトレジスタ１３０４と並列積和演算器間の経路を規定する。
【０１１１】
本実施形態では第１の実施形態との違いのみについて説明する、本実施形態の動作はクロスバースイッチを介したデータ供給方法が異なるだけであり、各種動作タイミングは図４及び図５に記載した構成と同じである。即ち、制御部１０２による参照データバッファレジスタ、係数データバッファ１３０３、参照データシフトレジスタ１３０１、係数データシフトレジスタ１３０４、並列積和演算器１３０５等の動作タイミングは図９に示すタイミングと同様である。
【０１１２】
制御部１０２はコンボリューション演算処理の開始に先立ち、クロスバースイッチ１３０２及びクロスバースイッチ１３０８の設定を行う。ここでの設定により、算出する特徴面に割り当てる積和演算器を決定する。
【０１１３】
図１３（ｂ）は、３つの特徴面を並列に処理する場合のＣＮＮのネットワーク構成と演算の関係を模式的に説明する図である。参照データ１３１０は演算に必要な参照特徴面１３１１の参照データ位置を示す。算出データ１３１２、１３１４、１３１６は並列積和演算器１３０５で同時に算出する特徴面のデータ位置を示す。
【０１１４】
並列積和演算器１３０５は、算出データ１３１２，１３１４，１３１６の領域をラスタスキャンしながら処理することで３つの特徴面１３１３，１３１５，１３１７を算出する。
【０１１５】
クロスバースイッチ１３０２、１３０８において、黒丸で示す位置が結合点となる。例えば、積和演算器ｐ１には参照データシフトレジスタの出力ｄ１と係数データシフトレジスタ１３０４の出力ｗ１とが入力されることになる。図１３の場合、並列積和演算が３つのグループに分けている。３つのグループは、それぞれのグループｐ１〜ｐ２、グループｐ３〜ｐ４及びグループｐ５〜ｐ６である。この場合、各グループの並列度（ｍ）が２となる。即ち、算出特徴面１３１３、算出特徴面１３１５及び算出特徴面１３１７はそれぞれ並列度２で算出される。
【０１１６】
クロスバースイッチ１３０２の設定に従うと各グループに共通の参照データ（ｄ１、ｄ２の出力）が並列に並列積和演算器１３０５の各積和演算器に入力される。各グループ内の積和演算器にはそれぞれ出力ｄ１、ｄ２が入力される。一方、各グループの積和演算器には異なる係数となる出力ｗ１、ｗ４、ｗ７が並列に入力され、グループ内の積和演算器には共通の係数データｄ１、ｄ２が順次に入力される。
【０１１７】
図１３は、コンボリューションカーネルの水平方向カーネルサイズが３である場合の設定である。積和演算器ｐ１、ｐ２には係数データシフトレジスタ１３０４のｗ１出力を介して、シフト開始前の初期状態で係数データシフトレジスタ１３０４の出力ｗ１、ｗ２，ｗ３の対応位置に格納されていた３つの係数ｃ１、ｃ２、ｃ３が順に入力される。また、積和演算器ｐ１にはシフト開始前の初期状態で参照データシフトレジスタ１３０１のそれぞれの出力ｄ１、ｄ２、ｄ３の対応位置に格納されていた３つの参照データｉ１、ｉ２、ｉ３が順次に入力される。同様に、積和演算器ｐ２には参照データシフトレジスタ１３０１の出力ｄ２、ｄ３、ｄ４の対応位置に格納されていた３つの参照データｉ２、ｉ３、ｉ４が順次に入力される。積和演算器ｐ１に着目すると、３クロック（参照データシフトレジスタ１３０１及び係数データシフトレジスタ１３０４のシフト動作）でｃ１×ｉ１＋ｃ２×ｉ２＋ｃ３×ｉ３の積和演算結果が得られる。同様に、積和演算器ｐ３、ｐ４には、係数データシフトレジスタ１３０４のｗ４、ｗ５、ｗ６に格納されていた係数データが順次に入力される。積和演算器ｐ５、ｐ６には係数データシフトレジスタ１３０４のｗ７、ｗ８、ｗ９に格納されていた係数が順次入力されることになる。一方、各グループに入力される参照データは共通である。
【０１１８】
参照データシフトレジスタ１３０１と係数データシフトレジスタ１３０４の同期したシフト動作により並列積和演算器１３０５で３つのグループのコンボリューション演算を処理する。以上の水平方向のコンボリューション演算を垂直方向に繰り返すことで、２次元のコンボリューション演算結果を得ることができる。所定のコンボリューション演算を完了するとシフトレジスタ１３０６に結果を転送し、非線形変換処理部１３０７に順次出力する。制御部１０２は得られた結果をＲＡＭ１０１上の所定の領域に格納する。ここで得られた演算結果が算出特徴面１３１３、１３１５、１３１７の対応位置の算出データ１３１２、１３１４、１３１６である。並列処理単位の演算をラスタスキャン処理することで、算出特徴面１３１３、１３１５、１３１７が算出される。
【０１１９】
図１４（ａ）は、図１３（ａ）の装置と同じで、クロスバースイッチ１３０２、１３０８の設定のみが異なる。図１３と同様に黒丸が結合点である。この場合、並列積和演算器１３０５の全ての積和演算器ｐ１〜ｐ６に異なる参照データを供給する。具体的には、積和演算器ｐ１〜ｐ６のそれぞれに参照データシフトレジスタ１３０１の出力ｄ１〜ｄ６を並列に供給する。一方、並列積和演算器１３０５の全ての積和演算器ｐ１〜ｐ６に同一の係数データ（出力ｗ１など）を順次に供給する。即ち、図１４（ａ）の構成は全ての積和演算器を１つのグループとして制御し、一つの特徴面の積和演算器数の位置を並列度６で並列に算出することに対応する。図１４（ｂ）は、ここで算出するＣＮＮのネットワーク構成とその算出状況を模式的に説明する図であり、一つの算出特徴面１４０６内の複数の位置を含む算出領域１４０５のデータを並列に算出する。参照領域１４０２は算出領域１４０５のコンボリューション演算に必要な参照特徴面１４０３内のデータ領域を示している。コンボリューションカーネル１４０４は、係数データシフトレジスタを介して、並列積和演算器１３０５に供給される係数データである。
【０１２０】
図１４（ａ）は、図１３（ａ）と同様にコンボリューションカーネルの水平方向サイズが３であるとする。積和演算器ｐ１〜ｐ６は、参照データシフトレジスタ１３０１と係数データシフトレジスタ１３０４の同期したシフト動作により、３クロックで同一特徴面の水平方向に連続する６つの位置のコンボリューション演算を実行する。積和演算器ｐ１〜ｐ６の出力が算出特徴面の水平方向に連続する位置の結果に対応する。例えば、積和演算器ｐ４に着目する。参照データシフトレジスタ１３０１のシフト開始前に、参照データシフトレジスタ１３０１の出力ｄ４〜ｄ６の対応位置に格納されていた参照データを参照データｉ４〜ｉ６とする。係数データシフトレジスタ１３０４のシフト開始前に、係数データシフトレジスタ１３０４の出力ｗ１、ｗ２、ｗ３の対応位置に格納されていた係数データを係数データｃ１〜ｃ３とする。１クロック目でｃ１×ｉ４、２クロック目でｃ１×ｉ４＋ｃ２×ｉ５、３クロック目でｃ１×ｉ４＋ｃ２×ｉ５＋ｃ３×ｉ６が累積される。積和演算器ｐ１〜ｐ６ではそれぞれ異なる位置の参照データを参照して複数の算出特徴面位置のコンボリューション演算を並列に処理する。得られた結果は、シフトレジスタ１３０６、非線形変換処理部１３０７を介してＲＡＭ１０１の所定の領域に格納される。
【０１２１】
図１３及び図１４ではそれぞれ３つの特徴面を並列に算出する場合と一つの特徴面を並列に算出する場合について説明したが、本実施形態はこれらに限るわけではなく、クロスバースイッチの設定次第で様々の構成に対応することができる。また、図１３及び図１４は経路を変更する手段として完全なクロスバースイッチを有する場合につい説明したが、処理対象のネットワークや回路規模を考慮して、部分的なクロスバー構成でも良い。なお、データ供給部のグループ化の方法は、図４、５や図１３、１４に示した方法に限るわけではなく他の構成でも良い。
【０１２２】
以上、図１３及び図１４に示すように、本実施形態ではクロスバースイッチの設定で並列積和演算器に供給するデータのグループを任意に設定することができる。これにより、ＣＮＮのネットワーク構成や動作条件に応じてより効率的な処理構成を選択して演算することができる。
【０１２３】
（第３の実施形態）
第１の実施形態では２つの特徴面に演算器を分配する場合について説明したが、本実施形態では１つの特徴面を演算する場合の演算器の割り付け方法を変更する場合について説明する。なお、本実施形態の演算回路の構成は、第１の実施形態の演算回路と同じであるので、その説明を省略する。
【０１２４】
図１５は本実施形態で処理するＣＮＮのネットワーク構成とその例を説明する図である。図１５（ａ）は図４（ｂ）で説明した場合と同様に、一つの特徴面の水平方向に連続する位置の算出特徴面のデータを並列に処理する場合の例を示している。本実施形態が図４（ｂ）で説明した場合との違いは、処理対象となる参照特徴面の水平方向サイズが小さいことにある。例えば、画像中の所定特徴を含む一部領域に対して処理する際に、並列度が高い場合が、このようなケースがあり得る。また、画像の水平サイズが並列積和演算器１０８ａ，ｂの数の倍率にならない場合、画像の右端で同様の問題が生じる。図１５（ａ）の算出領域１５０５及び算出領域１５０６は同時に算出する算出特徴面のデータ位置であるが、算出特徴面１５０７のサイズが小さいと、算出領域１５０６を算出するグループの演算器の処理が無駄になる。図１５（ｂ）は同時に演算する算出特徴面の位置を変えた場合の例を示している。図１５（ｂ）では、算出領域１５０６の位置を算出するグループの演算器は、算出領域１５０６の位置を算出する替わりに、算出領域１５１２の位置を算出する。
【０１２５】
即ち、並列演算器は、並列に図１５（ａ）で示した２つの算出領域１５０５、１５０６を算出する替わりに、算出領域１５１１、１５１２算出する。この場合、並列積和演算器１３０５内の積和演算器を全て動作させて処理することができる。図１５（ｂ）に示す処理例では図４で示す参照データシフトレジスタ４０２ｂに参照領域１５０９の位置に相当する参照データを供給する。なお、参照領域１５０８と参照領域１５０９はコンボリューションカーネルのサイズに応じたオーバーラップ部分を有してもよい。コンボリューションカーネル１５０４、１５１０である係数データの供給は図４に示す場合と同じである。
【０１２６】
このように参照データ供給部に供給するデータを変えるだけで、複数のグループで並列に算出する算出領域を変えることができ、それにより並列化効率を向上させることができる。ここで示した並列に算出する算出領域の変更は図１４（ａ）及び図１５（ａ）に示す構成の場合も同様に対応することが可能である。図４（ａ）、５（ａ）及び図１３（ａ）、１４（ａ）に示すどちらの構成の場合も制御部１０２による参照データの転送内容が異なるだけである。
【０１２７】
以上、本実施形態では算出処理の算出領域の形状（大きさ）に応じて並列演算器が算出する算出領域を、所定のグループ単位で算出することで並列演算器を効率的に動作させることができる。
【０１２８】
（その他の実施形態）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【０１２９】
１０１  ＲＡＭ
１０２  制御部
１０３  係数データ供給部
１０５  参照データ保持部
１０７  参照データ供給部
１０８１〜１０８ｎ  並列演算部
１０９  演算結果取り出し部
【図１】
2018073102.tif 000004
【図２】
2018073102.tif 000005
【図３】
2018073102.tif 000006
【図４】
2018073102.tif 000007
【図５】
2018073102.tif 000008
【図６】
2018073102.tif 000009
【図７】
2018073102.tif 000010
【図８】
2018073102.tif 000011
【図９】
2018073102.tif 000012
【図１０】
2018073102.tif 000013
【図１１】
2018073102.tif 000014
【図１２】
2018073102.tif 000015
【図１３】
2018073102.tif 000016
【図１４】
2018073102.tif 000017
【図１５】
2018073102.tif 000018
【図１６】
2018073102.tif 000019
【図１７】
2018073102.tif 000020