(57)【特許請求の範囲】
【請求項１】
Ｃｏｎｖｏｌｕｔｉｏｎ処理とＦｕｌｌＣｏｎｎｅｃｔ処理を行うディープラーニング用の演算処理装置であって、
３個以上のＳＲＡＭで構成されたデータ格納メモリと、
入力特徴量マップデータから入力有効データ数をカウントして座標に変換するカウンタと、
前記カウンタが変換した座標を前記データ格納メモリにおけるアドレスに変換して、前記入力特徴量マップデータを前記データ格納メモリに格納するＳＲＡＭ書き込み制御部と、
外部からのリクエストを受けて、前記データ格納メモリから所定の方法で格納されている前記入力特徴量マップデータを取り出すＳＲＡＭ読み出し制御部と、
を有するデータ格納メモリ管理部と；
係数を格納する係数格納メモリを有し、前記データ格納メモリ管理部のステータスを参照して、前記データ格納メモリ管理部から取り出すデータに対応する係数を前記係数格納メモリから取り出す係数格納メモリ管理部と；
格納用外部メモリから、前記入力特徴量マップデータを取得するデータ入力部と；
前記格納用外部メモリから、前記係数を取得する係数入力部と；
入力Ｎ並列、出力Ｍ並列の構成（Ｎ、Ｍ≧１の正数）で、前記データ格納メモリから前記入力特徴量マップデータを取得し、前記係数格納メモリから前記係数を取得して、フィルタ処理、累積加算処理、非線形演算処理およびプーリング処理を行う演算部と；
前記演算部から出力されるＭ並列のデータを連結して、出力特徴量マップデータとして前記格納用外部メモリに出力するデータ出力部と；
前記データ格納メモリ管理部、前記係数格納メモリ管理部、前記データ入力部、前記データ出力部、および前記演算部を制御するコントローラと；
を有し、
前記カウンタは、入力された前記入力特徴量マップデータのＩＤを生成し、
前記ＳＲＡＭ書き込み制御部は、前記データ格納メモリを構成する前記ＳＲＡＭの各々を仮想的に複数の領域に分割し、前記ＩＤによって書き込む領域を切り替えるとともに、同じＳＲＡＭには同一座標の異なる入力特徴量マップデータが格納されるように制御し、
前記ＳＲＡＭ読み出し制御部は、取り出したい前記入力特徴量マップデータの前記ＩＤに対応する前記領域にアクセスするように前記アドレスを切り替え、
前記演算部は、
Ｎ並列でフィルタ演算を実行するフィルタ演算部と、
前記フィルタ演算部の演算結果を全て累積加算する第１加算器と、
前記第１加算器の累積加算結果を後段で累積加算する第２加算器と、
前記第２加算器の累積加算結果を保持するフリップフロップと、
１つのデータ格納メモリに格納されている複数の入力特徴量マップデータを取り出すために、入力特徴量マップデータのＩＤを生成して、前記ＳＲＡＭ読み出し制御部から入力される入力特徴量マップデータと同じＩＤの前記係数を前記係数格納メモリ管理部から取得するよう制御し、全ての入力特徴量マップデータを取り終わるまでは、前記第２加算器が前記第１加算器の累積加算結果を累積加算するよう制御する演算制御部と、
を有する演算処理装置。
【請求項２】
前記演算部は、同一座標の入力特徴量マップデータごとに演算処理を実行し、
前記ＳＲＡＭ書き込み制御部は、前記同一座標の入力特徴量マップデータの演算処理が終わるごとに、前記同一座標の入力特徴量マップデータが格納されていた前記領域を開放して、前記入力特徴量マップデータの続きのデータを格納する
請求項１に記載の演算処理装置。
【請求項３】
前記ＳＲＡＭ読み出し制御部は、１つの入力特徴量マップデータから、出力するｍ枚分の出力特徴量マップデータの演算処理を実行するように前記データ格納メモリから前記入力特徴量マップデータを読み出し、
前記データ出力部は、有効データをカウントしてどの出力特徴量マップデータであるかを識別し、適切に出力特徴量マップデータにおけるアドレスを生成して、前記格納用外部メモリに出力する、
請求項１または２に記載の演算処理装置。
【請求項４】
前記ＳＲＡＭ読み出し制御部は、前記データ格納メモリから前記入力特徴量マップデータの一部データを読み出し、
前記演算部は、前記ＳＲＡＭ読み出し制御部から入力された前記入力特徴量マップデータの一部データの演算処理を行い、前記出力特徴量マップデータの一部データを作成し、
前記入力特徴量マップデータの前記一部データの処理が終わったら、前記入力特徴量マップデータの次の一部データの処理へと進む、
請求項１から３のいずれか１項に記載の演算処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置、より詳しくは、畳み込みニューラルネットワークを用いたディープラーニングを行う演算処理装置の回路構成に関する。
【背景技術】
【０００２】
従来、複数の処理層が階層的に接続されたニューラルネットワークを用いて演算を実行する演算処理装置がある。特に画像認識を行う演算処理装置では、畳み込みニューラルネットワーク（Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋ、以下ＣＮＮという）を用いたディープラーニングが広く行われている。【０００３】
ＣＮＮを用いたディープラーニングによる画像認識では、入力される画像データ（ピクセルデータ）に対して、ＣＮＮの複数の処理層における処理が順次施されることにより、画像に含まれる対象物が認識された最終的な演算結果データが得られる。ＣＮＮの処理層は、畳み込み演算処理、非線形処理、縮小処理（プーリング処理）等を含むＣｏｎｖｏｌｕｔｉｏｎ処理を行うＣｏｎｖｏｌｕｔｉｏｎ層（畳み込み層）と、全ての入力（ピクセルデータ）に係数を乗じて累積加算するＦｕｌｌＣｏｎｎｅｃｔ処理を行うＦｕｌｌＣｏｎｎｅｃｔ層（全結合層）とに大きく分類される。【０００４】
ＣＮＮを用いたディープラーニングによる画像認識は、高い認識率を実現できる。しかし、検出する被写体の種類を増やしたり、被写体検出精度を上げるためには、ネットワークを大きくする必要がある。そうするとデータ格納バッファや係数格納バッファが必然的に大容量になるが、ＬＳＩ（Ｌａｒｇｅ−Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔ）にはあまり大容量のメモリを搭載できない。【０００５】
また、画像認識処理におけるディープラーニングでは、（Ｋ−１）層目とＫ層目におけるＦＭ（Ｆｅａｔｕｒｅ  Ｍａｐ）サイズとＦＭ数（ＦＭの面数）の関係は次式のような関係になる場合が多く、回路としてメモリサイズを決定する際には最適化が困難である。【０００６】
ＦＭサイズ［Ｋ］＝１／４×ＦＭサイズ［Ｋ−１］
ＦＭ数［Ｋ］＝２×ＦＭ数［Ｋ−１］【０００７】
例えば、ＣＮＮのバリエーションの１つであるＹｏｌｏ＿ｖ２に対応可能な回路のメモリのサイズを考える場合、ＦＭサイズとＦＭ数の最大値だけで決定しようとすると１ＧＢ程度必要となる。実際には、ＦＭ数とＦＭサイズは反比例的関係があるため、計算上は３ＭＢ程度あれば十分ではあるが、層別にメモリ管理を緻密に計算して設計しなければならない。【０００８】
このような問題があることから、ＣＮＮは一般的には高性能ＰＣやＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を用いたソフトウエア処理で実装される。しかし、高速処理を実現するためには処理の重い部分をハードウエアで構成する必要がある。このようなハードウエア実装の例としては、特許文献１に記載がある。【０００９】
特許文献１は、複数の演算ブロックと複数のメモリを搭載することにより演算処理の効率化を図るようにした演算処理装置を開示している。複数の演算処理ユニットを持ち、それぞれに演算ブロックと、それと対になるバッファがあり、中継部を介して畳み込み演算処理を並列に実行すると共に、演算部間で累積加算データを授受することで、入力のネットワークが大きくても一度に活性化処理への入力を作成できるようになっている。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２０１７−１５１６０４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
特許文献1は、演算ブロックとデータ保持部が対をなす構成で、演算ブロック数を超えるネットワークに対しては冗長データ保持部を介して繰り返し累積加算実行する事で対応できるようになっている。しかし、具体的な制御、特にデータ保持部では上述した様なＦＭ数とＦＭサイズの関係に対応するためのバッファと制御の最適化が必要となるが、それについては考慮されていない。【００１２】
上述の事情を踏まえ、本発明は、ディープラーニングに適用でき、かつＬＳＩに無理なく搭載できるメモリサイズの演算処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１３】
本発明の第一の態様は、Ｃｏｎｖｏｌｕｔｉｏｎ処理とＦｕｌｌＣｏｎｎｅｃｔ処理を行うディープラーニング用の演算処理装置であって、３個以上のＳＲＡＭで構成されたデータ格納メモリと、入力特徴量マップデータから入力有効データ数をカウントして座標に変換するカウンタと、前記カウンタが変換した座標を前記データ格納メモリにおけるアドレスに変換して、前記入力特徴量マップデータを前記データ格納メモリに格納するＳＲＡＭ書き込み制御部と、外部からのリクエストを受けて、前記データ格納メモリから所定の方法で格納されている前記入力特徴量マップデータを取り出すＳＲＡＭ読み出し制御部と、を有するデータ格納メモリ管理部と；係数を格納する係数格納メモリを有し、前記データ格納メモリ管理部のステータスを参照して、前記データ格納メモリ管理部から取り出すデータに対応する係数を前記係数格納メモリから取り出す係数格納メモリ管理部と；格納用外部メモリから、前記入力特徴量マップデータを取得するデータ入力部と；前記格納用外部メモリから、前記係数を取得する係数入力部と；入力Ｎ並列、出力Ｍ並列の構成（Ｎ、Ｍ≧１の正数）で、前記データ格納メモリから前記入力特徴量マップデータを取得し、前記係数格納メモリから前記係数を取得して、フィルタ処理、累積加算処理、非線形演算処理およびプーリング処理を行う演算部と；前記演算部から出力されるＭ並列のデータを連結して、出力特徴量マップデータとして前記格納用外部メモリに出力するデータ出力部と；前記データ格納メモリ管理部、前記係数格納メモリ管理部、前記データ入力部、前記データ出力部、および前記演算部を制御するコントローラと；を有し、前記カウンタは、入力された前記入力特徴量マップデータのＩＤを生成し、前記ＳＲＡＭ書き込み制御部は、前記データ格納メモリを構成する前記ＳＲＡＭの各々を仮想的に複数の領域に分割し、前記ＩＤによって書き込む領域を切り替えるとともに、同じＳＲＡＭには同一座標の異なる入力特徴量マップデータが格納されるように制御し、前記ＳＲＡＭ読み出し制御部は、取り出したい前記入力特徴量マップデータの前記ＩＤに対応する前記領域にアクセスするように前記アドレスを切り替え、前記演算部は、Ｎ並列でフィルタ演算を実行するフィルタ演算部と、前記フィルタ演算部の演算結果を全て累積加算する第１加算器と、前記第１加算器の累積加算結果を後段で累積加算する第２加算器と、前記第２加算器の累積加算結果を保持するフリップフロップと、１つのデータ格納メモリに格納されている複数の入力特徴量マップデータを取り出すために、入力特徴量マップデータのＩＤを生成して、前記ＳＲＡＭ読み出し制御部から入力される入力特徴量マップデータと同じＩＤの前記係数を前記係数格納メモリ管理部から取得するよう制御し、全ての入力特徴量マップデータを取り終わるまでは、前記第２加算器が前記第１加算器の累積加算結果を累積加算するよう制御する演算制御部と、を有する。【００１４】
前記演算部は、同一座標の入力特徴量マップデータごとに演算処理を実行し、前記ＳＲＡＭ書き込み制御部は、前記同一座標の入力特徴量マップデータの演算処理が終わるごとに、前記同一座標の入力特徴量マップデータが格納されていた前記領域を開放して、前記入力特徴量マップデータの続きのデータを格納してもよい。【００１５】
前記ＳＲＡＭ読み出し制御部は、１つの入力特徴量マップデータから、出力するｍ枚分の出力特徴量マップデータの演算処理を実行するように前記データ格納メモリから前記入力特徴量マップデータを読み出し、前記データ出力部は、有効データをカウントしてどの出力特徴量マップデータであるかを識別し、適切に出力特徴量マップデータにおけるアドレスを生成して、前記格納用外部メモリに出力してもよい。【００１６】
前記ＳＲＡＭ読み出し制御部は、前記データ格納メモリから前記入力特徴量マップデータの一部データを読み出し、前記演算部は、前記ＳＲＡＭ読み出し制御部から入力された前記入力特徴量マップデータの一部データの演算処理を行い、前記出力特徴量マップデータの一部データを作成し、前記入力特徴量マップデータの前記一部データの処理が終わったら、前記入力特徴量マップデータの次の一部データの処理へと進んでもよい。
【発明の効果】
【００１７】
本発明の各態様に係る演算処理装置によれば、ｉＦＭ（入力特徴量マップ）サイズやｉＦＭ数（ｉＦＭの面数）が大きくてデータ格納メモリ（ＩＢＵＦ）に入りきらないサイズでも、フィルタサイズ分のオーバーラップをせずに演算処理とデータ更新をシームレスに実施することができる。
【図面の簡単な説明】
【００１８】
【図１】本発明の実施形態に係る演算処理装置の構成を示すブロック図である。
【図２】本発明の実施形態に係る演算処理装置の演算部の構成を示す図である。
【図３】本発明の実施形態に係る演算処理装置のＩＢＵＦ（データ格納メモリ）管理部の構成を示す図である。
【図４】本発明の実施形態に係る演算処理装置のＩＢＵＦ（データ格納メモリ）の構成を示す図である。
【図５】本発明の実施形態に係る演算処理装置において、１個の入力ｃｈに入力されたｉＦＭ（入力特徴量マップ）が分割されてＩＢＵＦに格納される様子を示す図である。
【図６】本発明の実施形態に係る演算処理装置において、分割されてＩＢＵＦに格納されたｉＦＭが処理される様子を示す図である。
【図７】本発明の実施形態に係る演算処理装置において、ｎ＝２の時の、ｉＦＭＩＤによってアドレスオフセットを変化させるイメージを示す図である。
【図８】本発明の実施形態に係る演算処理装置における、ＩＢＵＦへのデータ書き込み制御フローを示す図である。
【図９】本発明の実施形態に係る演算処理装置における、ｉＦＭのデータ配置と係数の一例を示す図である。
【図１０】本発明の実施形態に係る演算処理装置における、Ｃｏｎｖｏｌｕｔｉｏｎ処理時のタイミングチャートを示す図である。
【図１１】本発明の実施形態に係る演算処理装置における、ＳＲＡＭ読み出し制御部の制御フローの一例を示す図である。
【図１２】本発明の実施形態に係る演算処理装置における、ＣＮＮの処理イメージを示す図である。
【図１３】本発明の実施形態に係る演算処理装置における、ＳＲＡＭ読み出し制御部の制御フローの一例を示す図である。
【図１４】本発明の実施形態に係る演算処理装置における、演算時のタイミングチャートを示す図である。
【図１５】本発明の実施形態に係る演算処理装置において、データが書き出されるＤＲＡＭの出力イメージを示す図である。
【発明を実施するための形態】
【００１９】
（実施形態１）
本発明の実施形態について、図面を用いて説明する。図１は、本発明の実施形態に係る演算処理装置の構成を示すブロック図である。
【００２０】
演算処理装置１は、コントローラ２と、データ入力部３と、係数入力部４と、ＩＢＵＦ（データ格納メモリ）管理部５と、ＷＢＵＦ（係数格納メモリ）管理部６と、演算部７と、データ出力部８を備える。データ入力部３と、係数入力部４と、データ出力部８は、バス１０を介して、ＤＲＡＭ（格納用外部メモリ）９と接続されている。演算処理装置１は、入力特徴量マップ（ｉＦＭ）から出力特徴量マップ（ｏＦＭ）を生成する。
【００２１】
ＩＢＵＦ管理部５は、入力特徴量マップ（ｉＦＭ）データ格納用のメモリ（データ格納メモリ、ＩＢＵＦ）と、データ格納メモリの管理・制御回路（データ格納メモリ制御回路）と、後述するカウンタ５１と、ＳＲＡＭ書き込み制御部５２と、Ｎ個のＩＢＵＦ（データ格納メモリ）（０〜Ｎ−１）と、ＳＲＡＭ読み出し制御部５３とを備える。ＩＢＵＦは、それぞれが３個以上のＳＲＡＭから構成される。
【００２２】
ＩＢＵＦ管理部５は、入力データ（ｉＦＭデータ）中の有効データ数をカウントして座標に変換し、さらにそれをＩＢＵＦアドレス（ＩＢＵＦにおけるアドレス）に変換し、データをデータ格納メモリに格納するとともに、所定の方法でｉＦＭデータをデータ格納メモリから取り出す。ＩＢＵＦ管理部５は、複数のＦＭが入力されるときは、同一座標のデータが同じＩＢＵＦに入るように制御する。
【００２３】
ＷＢＵＦ管理部６は、係数格納用のメモリ（係数格納メモリ、ＷＢＵＦ）と、係数格納メモリの管理・制御回路（係数格納メモリ制御回路）を有する。ＷＢＵＦ管理部６は、ＩＢＵＦ管理部５のステータスを参照して、ＩＢＵＦ管理部５から取り出すデータに対応する係数を係数格納メモリから取り出す。
【００２４】
ＤＲＡＭ９は、ｉＦＭデータ、ｏＦＭデータおよび係数を格納する。データ入力部３は、ＤＲＡＭ９から所定の方法で、入力特徴量マップ（ｉＦＭ）を取得し、ＩＢＵＦ（データ格納メモリ）管理部５に渡す。データ出力部８は、ＤＲＡＭ９に所定の方法で、出力特徴量マップ（ｏＦＭ）データを書き出す。具体的には、データ出力部８は、演算部７から出力されるＭ並列のデータを連結してＤＲＡＭ９に出力する。係数入力部４は、ＤＲＡＭ９から所定の方法で、係数を取得し、ＷＢＵＦ（係数格納メモリ）管理部６に渡す。
【００２５】
演算部７は、ＩＢＵＦ（データ格納メモリ）管理部５からデータ、ＷＢＵＦ（係数格納メモリ）管理部６から係数を取得して、フィルタ処理・累積加算・非線形演算・プーリング処理等のデータ処理を行う。コントローラ２は、回路全体の制御を行う。
【００２６】
ＣＮＮでは、複数の処理層において、何層も類似の処理を実施する。本発明の実施形態に係る演算処理装置１を用いる場合、演算部７は、１層分の処理に必要なデータおよび係数だけを有して１層分の処理を行い、データおよび係数はＤＲＡＭ９に逐一置かれる。そして、必要な層数分の処理が繰り返し実行される。演算処理装置１は最終出力データとして被写体推定結果を出力し、この最終出力データを、プロセッサ（回路でもよい）を用いて処理することにより被写体推定結果を得る。
【００２７】
図２は、本発明の実施形態に係る演算処理装置の演算部７の構成を示す図である。演算部７の入力チャネル数はＮ（Ｎは１以上の正数）、すなわち入力データ（ｉＦＭデータ）はＮ次元であり、Ｎ次元の入力データが並列して処理される（入力Ｎ並列）。
【００２８】
演算部７の出力チャネル数はＭ（Ｍは１以上の正数）、すなわち出力データはＭ次元であり、Ｍ次元の入力データが並列して出力される（出力Ｍ並列）。図２に示すように、１つの層において、各チャネル（ｉｃｈ＿０〜ｉｃｈ＿Ｎ−１）ごとに、ｉＦＭデータ（ｄ＿０〜ｄ＿Ｎ−１）と係数（ｋ＿０〜ｋ＿Ｎ−１）が入力され、１個のデータを出力する。この処理がＭ層、並行して行われ、Ｍ個のデータｏｃｈ＿０〜ｏｃｈ＿Ｍ−１が出力される。
【００２９】
このように、演算部７は、入力チャネル数をＮ、出力チャネル数をＭとして、並列度がＮ×Ｍとなる構成を取る。入力チャネル数Ｎおよび出力チャネル数Ｍの大きさは、ＣＮＮの大きさに応じて設定（変更）することができるので、処理性能や回路規模を勘案して適切に設定する。
【００３０】
演算部７は、演算部内各部の制御を行う演算制御部７１を備える。また、演算部７は、各層ごとに、フィルタ演算部７２と、第１加算器７３と、第２加算器７４と、ＦＦ（フリップフロップ）７５と、非線形変換部７６と、プーリング処理部７７を備える。そして、このような層がＭ個ある。
【００３１】
演算制御部７１が、演算部７の前段に対してリクエストを発行することにより、所定のデータがフィルタ演算部７２に入力される。フィルタ演算部７２は、内部で乗算器と加算器がＮ並列で同時に実行できるように構成されており、入力データのフィルタ処理を行い、フィルタ処理の結果をＮ並列で出力する。
【００３２】
第１加算器７３は、Ｎ並列で実行され出力されたフィルタ演算部７２におけるフィルタ処理の結果を全て加算する。第２加算器７４は、時分割で入力される第１加算器７３の演算結果を累積加算する。第２加算器７４は、全てのｉＦＭデータを取り終わるまでは第１加算器７３の演算結果を累積加算する。ＦＦ７５は、累積加算の結果を保持するために設けられている。非線形変換部７６は、第２加算器７４およびＦＦ７５での累積加算の結果に対して、Ａｃｔｉｖａｔｅ関数などによる非線形演算処理を行う。具体的な実装は特に規定しないが、例えば折れ線近似により非線形演算処理を行う。
【００３３】
プーリング処理部７７は、非線形変換部７６から入力された複数のデータの中から最大値を選択出力（Ｍａｘ  Ｐｏｏｌｉｎｇ）する、平均値を算出（Ａｖｅｒａｇｅ  Ｐｏｏｌｉｎｇ）する、などのプーリング処理を行う。なお、非線形変換部７６とプーリング処理部７７は、演算制御部７１によりスルーさせることができる。
【００３４】
演算制御部７１は、演算部７内の各部において行われる上述の処理の制御を行う。このような構成により、演算部７において、入力チャネル数Ｎおよび出力チャネル数Ｍの大きさは、ＣＮＮの大きさに応じて設定（変更）することができるので、処理性能や回路規模を勘案して適切に設定する。
【００３５】
図３は、本発明の実施形態に係る演算処理装置のＩＢＵＦ（データ格納メモリ）管理部５の構成を示す図である。ＩＢＵＦ管理部５は、カウンタ５１と、ＳＲＡＭ書き込み制御部５２と、Ｎ個のＩＢＵＦ（データ格納メモリ）（０〜Ｎ−１）と、ＳＲＡＭ読み出し制御部５３とを備える。
【００３６】
入力されるｉＦＭ（入力特徴量マップ）データの数が入力の並列度Ｎを越える場合、ｉＦＭデータが時分割入力されることがあるので、どのｉＦＭデータを入力しているかを識別するためのＩＤ（以後、ｉＦＭＩＤという）が必要となる。ｉＦＭＩＤは、データ入力部３がＤＲＡＭ９からバースト転送の単位で取得したデータに対して１つ定まっている代表値であり、例えば、最初の１〜Ｎ面のｉＦＭＩＤを０、Ｎ＋１〜２Ｎ面のｉＦＭＩＤを１、…のように、順次インクリメンタルに変化させる。
【００３７】
カウンタ５１は、入力されるｉＦＭデータのＩＤ（ｉＦＭＩＤ）を生成するとともに、ｉＦＭＩＤ毎に入力データ中の有効データ数（入力有効データ数）をカウントして座標（ｉＦＭ座標）に変換して出力する。
【００３８】
ＳＲＡＭ書き込み制御部５２は、カウンタ５１から出力されたｉＦＭ座標をＩＢＵＦアドレス（ＩＢＵＦにおけるアドレス）に変換し、データ（ｉＦＭデータ）をＩＢＵＦに格納する。また、ＳＲＡＭ書き込み制御部５２は、ＩＢＵＦを構成する各ＳＲＡＭを仮想的に複数の領域に分割し、ｉＦＭＩＤによって書き込む領域を切り変える。また、ＳＲＡＭ書き込み制御部５２は、同じＳＲＡＭには同一座標の異なるｉＦＭデータが格納されるように制御する。
【００３９】
また、ＳＲＡＭ書き込み制御部５２は、同一座標のｉＦＭデータの演算処理が終わるごとに、この同一座標のｉＦＭデータが格納されていた領域を開放して、ｉＦＭデータの続きのデータを格納する。
【００４０】
ＳＲＡＭ読み出し制御部５３は、外部から要求（ｒｅｑ）を受けてＩＢＵＦから所定の方法でデータを取り出す。また、ＳＲＡＭ読み出し制御部５３は、取り出したいｉＦＭＩＤに対応するＩＢＵＦ内の領域にアクセスするように、アドレスを切り替える。
【００４１】
演算部７の演算制御部７１は、１個のＩＢＵＦに格納されている複数のｉＦＭを取り出すために、ｉＦＭＩＤを生成して、ＳＲＡＭ読み出し制御部５３から入力されるｉＦＭデータと同じｉＦＭＩＤの係数をＷＢＵＦから取得するよう制御する。また、演算制御部７１は、全てのｉＦＭデータを取り終わるまでは、第２加算器７４を用いて、第１加算器７３の演算結果を累積加算する。
【００４２】
図４は、本実施形態に係る演算処理装置のＩＢＵＦ（データ格納メモリ）の構成を示す図である。ＩＢＵＦはそれぞれが３個以上のＳＲＡＭから構成される。図４の例では、１個のＩＢＵＦ（ＩＢＵＦ＿ｉ）は４つのＳＲＡＭから構成されており、うち３個のＳＲＡＭ（ＳＲＡＭ０〜ＳＲＡＭ２）を使ってフィルタ演算に必要なデータを取り出す。残りの１個のＳＲＡＭ（ＳＲＡＭ３）は、ＤＲＡＭから取得したデータを書き込むために用いる。
【００４３】
演算部７における処理を終えて必要のなくなったデータは、ＳＲＡＭの１個ごとの単位で順次開放し、ＩＢＵＦ全体としてはサーキュレートバッファとして動作する。なお、本例ではＩＢＵＦは４個のＳＲＡＭから構成されているが、ＳＲＡＭの数は３個以上であればいくつであっても構わない。ＳＲＡＭの数を３個以上にすることで、例えば読み出し位置がＳＲＡＭ１とＳＲＡＭ２でオーバーラップする（またがる）場合でも、データを順次取り出している最中にＳＲＡＭ３への書き込みを並行して行うことができる。
【００４４】
ＳＲＡＭ１の使用が終わったらｗｒｉｔｅ用に開放しておく。処理実行中にいずれＳＲＡＭ３への書込みが完了するのでｗｒｉｔｅ処理はすでに開放されているＳＲＡＭ１に移る。その間、リード側はＳＲＡＭ２〜ＳＲＡＭ３の領域を使ってフィルタ処理を続ける。このように、使わないエリアを順次開放してデータ更新することでシームレスな処理（スライディングウィンドウ処理）をすることができる。
【００４５】
次に、ｉＦＭ数（ｉＦＭの面数）が回路の入力並列度を超え、１個のＩＢＵＦに複数のＦＭが入力されるケースを説明する。いまｉＦＭ数＝Ｎ×ｎ（Ｎ：入力並列度）であったとする。各入力ｃｈにはｎ面のデータが入力されることになる。そこで、ＩＢＵＦ内を入力面数ｎで分割し、分割されたそれぞれの領域内でスライディングウィンドウ処理を行う。各入力ｃｈに入力されたｎ面のデータを図５に示すように分割してＩＢＵＦに格納する。
【００４６】
図５は、１個の入力ｃｈに入力されたｉＦＭが分割されてＩＢＵＦに格納される様子を示す図である。図６は、分割されてＩＢＵＦに格納されたｉＦＭが処理される様子を示す図である。図は、ＩＢＵＦが４つのＳＲＡＭ（ＳＲＡＭ１、…、ＳＲＡＭ４）から構成されている例である。すなわち、ＩＢＵＦは物理的に４つのＳＲＡＭに分かれている。
【００４７】
各ＳＲＡＭ（ＳＲＡＭ１、…、ＳＲＡＭ４）は仮想的にｎ個に分割される。ＳＲＡＭの各分割領域には、ｉＦＭの同じ領域（座標）のデータが格納されるようにする。具体的には、ＳＲＡＭ１の分割領域には、ｉＦＭの領域Ａに対応するデータｉＦＭ＿０〜ｉＦＭ＿ｎ−１が格納される。ＳＲＡＭ２の分割領域には、ｉＦＭの領域Ｂに対応するｉＦＭ＿ｎ〜ｉＦＭ＿２ｎ−１が格納される。ＳＲＡＭ３の分割領域には、ｉＦＭの領域Ｃに対応するｉＦＭ＿２ｎ〜ｉＦＭ＿３ｎ−１が格納される。ＳＲＡＭ４の分割領域には、ｉＦＭの領域Ｄに対応するｉＦＭ＿３ｎ〜ｉＦＭ＿４ｎ−１が格納される。
【００４８】
すなわち、１個のＳＲＡＭ内にはｉＦＭの同じ座標位置のデータが格納されるようにする。これは、ｉＦＭの同じ座標位置のデータを同時に取り出して演算処理を行い、スライディングウィンドウ処理を行うためである。なお、ＳＲＡＭの数を３個以上にすることで、ｉＦＭの２領域（座標）にまたがるデータの処理（ＳＲＡＭ１およびＳＲＡＭ２からのデータ読み込み）をしている場合でも、第３のＳＲＡＭへの書き込みを並行して行うことができる。
【００４９】
図６の例では、まず、第１面のｉＦＭ＿０、第２面のｉＦＭ＿１、…、第ｎ面のｉＦＭ＿ｎ−１は同じ座標位置（領域Ａ）のデータであり、これらはＳＲＡＭ１の分割領域に格納される。第１面のｉＦＭ＿ｎ、第２面のｉＦＭ＿ｎ＋１、…、第ｎ面のｉＦＭ＿２ｎ−１は同じ座標位置（領域Ｂ）のデータであり、これらはＳＲＡＭ２の分割領域に格納される。第１面のｉＦＭ＿２ｎ、第２面のｉＦＭ＿２ｎ＋１、…、第ｎ面のｉＦＭ＿３ｎ−１は同じ座標位置（領域Ｃ）のデータであり、これらはＳＲＡＭ３の分割領域に格納される。第１面のｉＦＭ＿３ｎ、第２面のｉＦＭ＿３ｎ＋１、…、第ｎ面のｉＦＭ＿４ｎ−１は同じ座標位置（領域Ｄ）のデータであり、これらはＳＲＡＭ４の分割領域に格納される。
【００５０】
ＳＲＡＭ１に格納されるｉＦＭ＿０、ｉＦＭ＿１、…、ｉＦＭ＿ｎ−１は同じ座標位置のデータであり、同じタイミングで演算処理され、同じタイミングで不要になる。不要になったデータが格納されたＳＲＡＭは順次開放され、ｉＦＭの続きのデータである、第１面のｉＦＭ＿４ｎ、第２面のｉＦＭ＿４ｎ＋１、…、第ｎ面のｉＦＭ＿５ｎ−１を格納する。このように、スライディングウィンドウ処理が行われる。
【００５１】
１個のＳＲＡＭの領域において、仮想的に分割された各領域サイズを「分割領域サイズ」と呼ぶことにする。分割領域サイズは、各領域において格納できるｉＦＭのデータ量に対応する。使用済データは分割領域サイズ単位で捨てることができるので、分割領域サイズ単位でスライディングウィンドウ処理を行い、ＳＲＡＭの使用済領域を開放してｉＦＭの続きのデータを入力することができる。
【００５２】
具体的には、図６において、ＳＲＡＭ１のｉＦＭ＿０、ＳＲＡＭ２のｉＦＭ＿ｎ、ＳＲＡＭ３のｉＦＭ＿２ｎ、ＳＲＡＭ４のｉＦＭ＿３ｎの格納されている分割領域サイズ（第１面のデータが格納されている分割領域サイズ）において、スライディングウィンドウ処理が行われる。同時に、ＳＲＡＭ１のｉＦＭ＿１、ＳＲＡＭ２のｉＦＭ＿ｎ＋１、ＳＲＡＭ３のｉＦＭ＿２ｎ＋１、ＳＲＡＭ４のｉＦＭ＿３ｎ＋１の格納されている分割領域サイズ（第２面のデータが格納されている分割領域サイズ）において、スライディングウィンドウ処理が行われる。同時に、ＳＲＡＭ１のｉＦＭ＿ｎ−１、ＳＲＡＭ２のｉＦＭ＿２ｎ−１、ＳＲＡＭ３のｉＦＭ＿３ｎ−１、ＳＲＡＭ４のｉＦＭ＿４ｎ−１の格納されている分割領域サイズ（第ｎ面のデータが格納されている分割領域サイズ）において、スライディングウィンドウ処理が行われる。
【００５３】
このようにして、本発明では、複数の演算部のそれぞれにおいて時分割で複数のＦＭを処理するようになっており、これにより大きなネットワークに対応することができる。
【００５４】
なお、ｉＦＭＩＤは面毎に０、１、２、…、ｎ−１と増えていくので、ｉＦＭＩＤによってアドレスオフセットを変化させることで図６のようにｉＦＭをＩＢＵＦに配置することができる。図７は、ｎ＝２の時の、ｉＦＭＩＤによってアドレスオフセットを変化させるイメージを示す図である。なお、ｎ＝１の場合はｉＦＭＩＤを参照する必要が無いのでｉＦＭＩＤをゼロ固定でよい。
【００５５】
図８は、本実施形態に係る演算処理装置における、ＩＢＵＦへのデータ書き込み制御フローを示す図である。ステップＳ１からｉＦＭ分割ループが始まる。ステップＳ２において、ＩＢＵＦが書き込み可能か否かを判定する。ＩＢＵＦが書き込み不可能の場合は、ステップＳ３に進み、待機（ｗａｉｔ）し、ステップＳ２に戻る。
【００５６】
ＩＢＵＦが書き込み可能の場合は、ステップＳ４に進む。ステップＳ４から分割領域サイズループが始まり、ステップＳ５からｉＦＭ数（ｎ）ループが始まる。ステップＳ６においてアドレス計算を行い、ステップＳ７において、データ入力があるか否かを判定する。データ入力がない場合は、ステップＳ８に進み、待機（ｗａｉｔ）し、ステップＳ７に戻る。
【００５７】
データ入力がある場合は、ステップＳ９に進み、ＩＢＵＦへデータ書き込みを行う。ステップＳ１０では、ｉＦＭ数（ｎ）分の処理を行った否かを判定し、行っていない場合はステップＳ５に戻り、行った場合はステップＳ１１に進む。ステップＳ１１では、分割領域サイズ分の処理を行った否かを判定し、行っていない場合はステップＳ４に戻り、行った場合はステップＳ１２に進む。ステップＳ１２では、ｉＦＭ分割が完了したか否かを判定し、完了していない場合はステップＳ１に戻り、完了した場合は、処理（ＩＢＵＦへのデータ書き込み処理）を終了する。
【００５８】
次に、上述のようにＩＢＵＦに入力されたデータを読み出すときの処理について説明する。各入力ｃｈには複数のｉＦＭが入っているが、仮に２面のｉＦＭ（ｉＦＭ１、ｉＦＭ２）が入力されているとする。そして、ｉＦＭのデータ配置と、それに対して施すフィルタの係数が図９のようであったとする。図９は、ｉＦＭのデータ配置と係数の一例を示す図である。
【００５９】
ｉＦＭ１において、データ配置は図９（ａ）のようになる。ａ１、ｂ１、…、ｐ１はデータを示し、４×４のデータが配置されている。そのうち、３×３のデータ（ａ１、ｂ１、ｃ１、ｄ１、ｅ１、ｆ１、ｇ１、ｉ１、ｊ１、ｋ１）の各々に対して施すフィルタの係数は図９（ｂ）のようになる。ｗ１、ｗ２、…、ｗ９は各データ係数を示す。
【００６０】
同様に、ｉＦＭ２において、データ配置は図９（ｃ）のようになる。ａ２、ｂ２、…、ｐ２はデータを示し、４×４のデータが配置されている。そのうち、３×３のデータ（ａ２、ｂ２、ｃ２、ｄ２、ｅ２、ｆ２、ｇ２、ｉ２、ｊ２、ｋ２）の各々に対して施すフィルタの係数は図９（ｄ）のようになる。ｘ１、ｘ２、…、ｘ９は各データ係数を示す。
【００６１】
タイミングチャートは図１０に示すようになる。図１０は、本実施形態に係る演算処理装置における、Ｃｏｎｖｏｌｕｔｉｏｎ処理時、ｉＦＭ数＝２Ｎの時のタイミングチャートを示す図である。３×３の９個のデータａ１〜ｋ１と係数ｗ１〜ｗ９のフィルタ演算結果がＡであり、３×３の９個のデータａ２〜ｋ２と係数ｘ１〜ｘ９のフィルタ演算結果がＢである。フィルタ演算結果は、第２加算器において時間方向で累積加算され、その結果がＦＦに保持される。第２加算器における最終的な累積加算結果がΣである。
【００６２】
すなわち、ｉＦＭ１とｉＦＭ２が時分割で入力され、第２加算器で累積加算され、その結果がＦＦに保持される。第２加算器の結果がＡやＡ＋Ｂの時は、まだ累積加算の途中であるので、非線形変換部には出力されない。第２加算器における累積加算が完了すると、その累積加算結果Σが非線形変換部に出力され、ＦＦは初期値に戻る。非線形変換部は非線形変換ｆ（Σ）を行う。
【００６３】
図１１は、本実施形態に係る演算処理装置における、ＳＲＡＭ読み出し制御部の制御フローの一例を示す図である。まず、ステップＳ２１において、ｏＦＭ＿Ｖループが始まる。ｏＦＭ＿Ｖループは、ｏＦＭのデータをＶ方向（横方向）に処理するループである。そして、ステップＳ２２において、ｏＦＭ＿Ｈループが始まる。ｏＦＭ＿Ｈループは、ｏＦＭのデータをＨ方向（縦方向）に処理するループである。ステップＳ２３でＷＢＵＦアクセスアドレスを生成し、並列してステップＳ２６でＩＢＵＦアクセスアドレスを生成する。
【００６４】
ステップＳ２３でＷＢＵＦアクセスアドレスを生成すると、ステップＳ２４でデータ格納判定を行う。データ格納判定がＯＫの場合は、ステップＳ２９のプーリングループに進む。データ格納判定がＮＧの場合は、ステップＳ２５で待機（ｗａｉｔ）し、ステップＳ２４に戻る。
【００６５】
また、ステップＳ２６でＩＢＵＦアクセスアドレスを生成すると、ステップＳ２７でデータ格納判定を行う。データ格納判定がＯＫの場合は、ステップＳ２９のプーリングループに進む。データ格納判定がＮＧの場合は、ステップＳ２８で待機（ｗａｉｔ）し、ステップＳ２７に戻る。
【００６６】
ステップＳ２９のプーリングループの後は、ステップＳ３０のｉＦＭ数ループ、ステップＳ３１のフィルタサイズループと進み、ステップＳ３２において演算部の処理が行われる。ステップＳ３３では各ループを終えてよいかを判定し、終わっていない場合は各ループに戻り、全てのループが終わった場合、制御フローは終了する。
【００６７】
ＩＢＵＦのデータ格納判定は、プーリング処理も含めてフィルタ処理に必要な全ｉＦＭの座標データがＩＢＵＦに格納済みであるかの判定であり、最内側ループは判定後となっている。なお、判定方法は種々変更できるものとする。また、ｏＦＭのＨサイズ単位で判定するのであればｏＦＭ＿Ｈループもデータ格納判定後に置く。
【００６８】
なお、本実施形態で説明したメモリ制御およびメモリ格納方法については、複数フレームを入力として出力データを生成するアルゴリズムにも応用できる。例えば、フレーム間相関を利用するＭＰＥＧ等の圧縮処理やノイズリダクション処理にも適用できる。
【００６９】
（実施形態２）
実施形態１では、１つのＣＮＮの層を処理する回路とそこへ入力するｉＦＭをどのようにＩＢＵＦに展開し、処理するかについて説明した。実施形態２では、特に、ｏＦＭ数（ｏＦＭの面数）が回路的な並列度Ｍを越えるケースに対応する。
【００７０】
図１２は、本実施形態のＣＮＮの処理イメージを示す図である。図１２は、ｏＦＭ数＝２Ｍの例を示し、１つの入力ｃｈのみを表示している。ｏＦＭ数が出力並列度Ｍを超え、ｏＦＭ数＝Ｍ×ｍ（ｍ＞１）であるとする。ＣＮＮは、全てのｉＦＭの同一座標データからｏＦＭの１画素を計算する処理である。
【００７１】
この時、ｏＦＭを１面ずつ作成すると、ｉＦＭはＩＢＵＦ内でスライディングウィンドウ処理されているので、最初の部分のデータが上書きされてＩＢＵＦ内に存在しなくなる。このため、新しいｏＦＭを作成する処理毎に、ＤＲＡＭからｉＦＭを読み直さなければならなくなってしまう。
【００７２】
そこで、本実施形態では、ＩＢＵＦに格納されているデータで処理できるｏＦＭを全て作成してしまうように制御する。具体的には、ＩＢＵＦに入力されているｉＦＭ（一部しか格納されていない）から、１個のｏＦＭについて可能なだけの処理回数を実行したら、ＩＢＵＦを更新せずに次のｏＦＭに対応する処理を行う（係数は適宜切り替える）。
【００７３】
このときの「可能なだけの処理回数」は、ＩＢＵＦ上で単位としている分割領域サイズに設定すると効率的である。なぜならＩＢＵＦを構成する１個のＳＲＡＭに入るｉＦＭ１面分のデータが分割領域サイズであり、この単位で処理すると、出力したいｏＦＭ数分の処理を終えた時点でＳＲＡＭ１個分のデータが使用済みとなるので開放できるからである。なお、分割領域サイズはｉＦＭにおけるデータ量であって、ｏＦＭ上のデータ量とは必ずしも一致しない。これは、プーリング処理による縮小が発生するためである。
【００７４】
ピクセル単位でｏＦＭを変えない理由は、ある程度のデータ量をＤＲＡＭ上に転送する方が、効率がよいためである。バッファのサイズや転送効率に問題がなければ、ピクセル単位で切り替えてもよい。
【００７５】
このように、本実施形態では、スライディングウィンドウ処理を行う前に、入っているデータでできる処理の全てを行う。なお、出力されるデータは、ｏＦＭが１個ずつ完成して出力されるのではなく、複数のｏＦＭの一部分が少しずつ出力されて、最終的に複数のｏＦＭが完成して出力される。
【００７６】
図１３は、本実施形態に係る演算処理装置における、ＳＲＡＭ読み出し制御部の制御フローの一例を示す図である。「ｄＭカウンタ」は、分割領域サイズ分のループカウンタに相当する。まず、ステップＳ４１で、ｄＭカウンタ＝０とする。そして、ステップＳ４２からｏＦＭ＿Ｖループが始まり、ステップＳ４３からｏＦＭ＿Ｈループが始まる。ｏＦＭ＿Ｖループは、ｏＦＭのデータをＶ方向（横方向）に処理するループであり、ｏＦＭ＿Ｈループは、ｏＦＭのデータをＨ方向（縦方向）に処理するループである。
【００７７】
ステップＳ４４でＷＢＵＦアクセスアドレスを生成し、並行してステップＳ４７でＩＢＵＦアクセスアドレスを生成する。
【００７８】
ステップＳ４４でＷＢＵＦアクセスアドレスを生成すると、ステップＳ４５でデータ格納判定を行う。データ格納判定がＯＫの場合は、ステップＳ５０のプーリングループに進む。データ格納判定がＮＧの場合は、ステップＳ４６で待機（ｗａｉｔ）し、ステップＳ４５に戻る。
【００７９】
また、ステップＳ４７でＩＢＵＦアクセスアドレスを生成すると、ステップＳ４８でデータ格納判定を行う。データ格納判定がＯＫの場合は、ステップＳ５０のプーリングループに進む。データ格納判定がＮＧの場合は、ステップＳ４９で待機（ｗａｉｔ）し、ステップＳ４８に戻る。
【００８０】
ステップＳ５０のプーリングループの後は、ステップＳ５１のｉＦＭ数ループ、ステップＳ５２のフィルタサイズループと進み、ステップＳ５３において演算部の処理が行われる。ステップＳ５４およびステップＳ５５では各ループを終えてよいかを判定し、終わっていない場合は各ループに戻り、全てのループが終わった場合は、ステップＳ５６に進む。
【００８１】
ステップＳ５６では、ｄＭカウンタが分割領域サイズ以上か否かを判定する。ｄＭカウンタが分割領域サイズ以上である場合は、ステップＳ５７に進み、ｄＭカウンタ＝０とする。そして、ステップＳ５８において、係数を次のｏＦＭへ送り、ステップＳ６０へ進む。
【００８２】
ｄＭカウンタが分割領域サイズ以上でない場合（ｄＭカウンタが分割領域サイズ未満である場合）は、ステップＳ５９に進み、ｄＭカウンタの値を増やす。そして、ステップＳ６０へ進む。
【００８３】
ステップＳ６０では、ｏＦＭ＿ＶループおよびｏＦＭ＿Ｈループを終えてよいかを判定し、終わっていない場合は各ループに戻り、全てのループが終わった場合、制御フローは終了する。
【００８４】
図１４は、本実施形態に係る演算処理装置における、ｉＦＭ数＝２Ｎ、ｏＦＭ数＝３Ｍの場合のタイミングチャートの一例を示す。分割領域サイズを４Ｄとすると、プーリングがあるためｏＦＭ上のデータ数はｏＦＭ数×Ｄ個分となる。
【００８５】
データ出力部ではプーリング後の有効データ数をカウントして、現在どのｏＦＭを受け取っているかを識別できるので、識別結果に従ってＤＲＡＭ上に適切に展開する。図１５は、データが書き出されるＤＲＡＭの出力イメージを示す図である。図中の数字は出力順を示す。
【００８６】
このように、本実施形態では、ＩＢＵＦ管理部内のＳＲＡＭ読み出し制御部が、同じ入力データから、出力するｍ枚分のｏＦＭのフィルタ処理を実行するようにＩＢＵＦからデータを取り出す。そして、データ出力部が、有効データをカウントしてどのｏＦＭデータであるかを識別し、適切にアドレスを生成してＤＲＡＭに出力する。これにより、ｉＦＭを再読込みすることなく出力並列度を越えるｏＦＭ数を出力できる。
【００８７】
すなわち、ＳＲＡＭ読み出し制御部は、ＩＢＵＦからｉＦＭデータの一部データを読み出す。演算部は、ＳＲＡＭ読み出し制御部から入力されたｉＦＭの一部データの演算処理を行い（読み込んだ所のデータを処理し）、ｏＦＭデータの一部データを作成する。そして、終わったら、ｉＦＭデータの次の一部データの処理へと進む。
【００８８】
以上、本発明の一実施形態について説明したが、本発明の技術範囲は上記実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲において構成要素の組み合わせを変えたり、各構成要素に種々の変更を加えたり、削除したりすることができる。
【００８９】
本明細書において「前、後ろ、上、下、右、左、縦、横、行、列」などの方向を示す言葉は、本発明の装置におけるこれらの方向を説明するために使用している。従って、本発明の明細書を説明するために使用されたこれらの言葉は、本発明の装置において相対的に解釈されるべきである。
【産業上の利用可能性】
【００９０】
本発明は、畳み込みニューラルネットワークを用いたディープラーニングを行う演算処理装置に広く適用でき、ｉＦＭサイズやｉＦＭ数が大きくてデータ格納メモリ（ＩＢＵＦ）に入りきらないサイズでも、フィルタサイズ分のオーバーラップをせずに演算処理とデータ更新をシームレスに実施することができる。
【符号の説明】
【００９１】
１  演算処理装置
２  コントローラ
３  データ入力部
４  係数入力部
５  ＩＢＵＦ（データ格納メモリ）管理部
６  ＷＢＵＦ（係数格納メモリ）管理部
７  演算部
８  データ出力部
９  ＤＲＡＭ（格納用外部メモリ）
１０  バス
５１  カウンタ
５２  ＳＲＡＭ書き込み制御部
５３  ＳＲＡＭ読み出し制御部
７１  演算制御部
７２  フィルタ演算部
７３  第１加算器
７４  第２加算器
７５  ＦＦ（フリップフロップ）
７６  非線形変換部
７７  プーリング処理部
【図１】
0006970827.tif 000002
【図２】
0006970827.tif 000003
【図３】
0006970827.tif 000004
【図４】
0006970827.tif 000005
【図５】
0006970827.tif 000006
【図６】
0006970827.tif 000007
【図７】
0006970827.tif 000008
【図８】
0006970827.tif 000009
【図９】
0006970827.tif 000010
【図１０】
0006970827.tif 000011
【図１１】
0006970827.tif 000012
【図１２】
0006970827.tif 000013
【図１３】
0006970827.tif 000014
【図１４】
0006970827.tif 000015
【図１５】
0006970827.tif 000016