(57)【要約】【課題】  複数の乱数列から選択された乱数列を用いた射影処理をより廉価且つ高速に実現するための技術を提供すること。【解決手段】  メモリに格納されている複数の乱数シードを用いて複数の乱数列を生成し、該複数の乱数列から複数の基底ベクトルを生成する。そして、該生成した複数の基底ベクトルを用いて変換元ベクトルに対する乱数射影を行うことで、該変換元ベクトルをより低次元のベクトルに変換する。【選択図】  図１
2015197702.tif 000002
【特許請求の範囲】
【請求項１】
変換元ベクトルを取得する取得手段と、
メモリに格納されている複数の乱数シードを用いて複数の乱数列を生成する生成手段と、
前記複数の乱数列から複数の基底ベクトルを生成し、該生成した複数の基底ベクトルを用いて前記変換元ベクトルに対する乱数射影を行うことで、該変換元ベクトルをより低次元のベクトルに変換する変換手段と
を備えることを特徴とする情報処理装置。
【請求項２】
前記変換手段は、前記複数の基底ベクトルのそれぞれと、前記変換元ベクトルと、の内積演算を行うことで、前記変換元ベクトルをより低次元のベクトルに変換することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記変換手段は、前記複数の乱数列を、前記複数の基底ベクトルとすることを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
前記変換手段は、前記複数の乱数列から平均乱数列を求め、該求めた平均乱数列から前記基底ベクトルを取り出すことを特徴とする請求項１又は２に記載の情報処理装置。
【請求項５】
更に、
複数の乱数シードの候補のそれぞれについて、該候補を用いて乱数列を生成し、該乱数列から基底ベクトルを生成し、該基底ベクトルと、複数の学習画像のそれぞれから予め抽出された特徴ベクトルと、の内積演算の結果から、該候補に対する評価値を求める手段と、
前記複数の乱数シードの候補のうち前記評価値が高い順に上位から、前記変換手段により変換するベクトルの次元数に対応する個数の候補を、前記生成手段が用いる乱数シードとして前記メモリに登録する手段と
を備えることを特徴とする請求項１乃至４の何れか１項に記載の情報処理装置。
【請求項６】
前記基底ベクトルは、コンボリューション演算で用いるフィルタ係数であることを特徴とする請求項１乃至５の何れか１項に記載の情報処理装置。
【請求項７】
前記基底ベクトルは、コンボリューショナルニューラルネットワークで用いるフィルタ係数であることを特徴とする請求項１乃至５の何れか１項に記載の情報処理装置。
【請求項８】
前記基底ベクトルは、階層型ニューラルネットワークにおける１つのニューロン値を算出するための前回層ニューロン値に対する結合係数列であることを特徴とする請求項１乃至５の何れか１項に記載の情報処理装置。
【請求項９】
情報処理装置が行う情報処理方法であって、
前記情報処理装置の取得手段が、変換元ベクトルを取得する取得工程と、
前記情報処理装置の生成手段が、メモリに格納されている複数の乱数シードを用いて複数の乱数列を生成する生成工程と、
前記情報処理装置の変換手段が、前記複数の乱数列から複数の基底ベクトルを生成し、該生成した複数の基底ベクトルを用いて前記変換元ベクトルに対する乱数射影を行うことで、該変換元ベクトルをより低次元のベクトルに変換する変換工程と
を備えることを特徴とする情報処理方法。
【請求項１０】
コンピュータを、請求項１乃至８の何れか１項に記載の情報処理装置の各手段として機能させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、乱数を用いた射影演算を行うための技術に関する。
【背景技術】
【０００２】
ランダムプロジェクション（乱数射影）に基づく次元削減・識別技術が注目されている。例えば、特許文献１では、乱数に基づく効率的なハッシュ関数の生成に関する技術が開示されている。また、非特許文献１では、ランダムプロジェクションを画像データやテキストデータの次元削減に適用した例が開示されている。また、非特許文献２では、乱数に基づくフィルタを利用した物体認識に関する技術が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１３−６８８８４号公報
【非特許文献】
【０００４】
【非特許文献１】“Ｒａｎｄｏｍ  ｐｒｏｊｅｃｔｉｏｎ  ｉｎ  ｄｉｍｅｎｓｉｏｎａｌｉｔｙ  ｒｅｄｕｃｔｉｏｎ：  Ａｐｐｌｉｃａｔｉｏｎｓ  ｔｏ  ｉｍａｇｅ  ａｎｄ  ｔｅｘｔ  ｄａｔａ”，Ｂｉｎｇｈａｍ，  ＫＤＤ２００１
【非特許文献２】“Ｂｅｙｏｎｄ  ｓｉｍｐｌｅ  ｆｅａｔｕｒｅｓ：  Ａ  ｌａｒｇｅ−ｓｃａｌｅ  ｆｅａｔｕｒｅ  ｓｅａｒｃｈ  ａｐｐｒｏａｃｈ  ｔｏ  ｕｎｃｏｎｓｔｒａｉｎｅｄ  ｆａｃｅ  ｒｅｃｏｇｎｉｔｉｏｎ”，Ｎｉｃｏｌａｓ  Ｐｉｎｔｏ，Ｄａｖｉｄ  Ｃｏｘ，  Ａｕｔｏｍａｔｉｃ  Ｆａｃｅ  ＆  Ｇｅｓｔｕｒｅ  Ｒｅｃｏｇｎｉｔｉｏｎ  ａｎｄ  Ｗｏｒｋｓｈｏｐｓ  （ＦＧ  ２０１１），  ２０１１  ＩＥＥＥ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎ
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ランダムプロジェクションでは、乱数に基づいて生成した基底ベクトルを用いて特徴ベクトルをより低次元の空間に射影する。一般的に射影演算を実現する場合、特許文献２に開示されている様に、記憶装置に格納された基底ベクトル（別途予め算出された基底ベクトル）を参照しながら処理する。
【０００６】
ランダムプロジェクションを利用した従来の識別装置の構成例について、図２のブロック図を用いて説明する。２０１は識別処理をアクセラレートするハードウェアであり、特徴抽出処理部２０２、内積演算処理部２０３、識別処理部２０４からなる。内積演算処理部２０３は、特徴抽出処理部２０２で生成した特徴ベクトルをより低次元の射影ベクトルに変換する（ここでは乱数を用いたランダムプロジェクションにより処理する）。内積演算処理部２０３はシステムバス２０５を介して外部メモリ２０６に格納されている基底ベクトルを参照しながら射影演算を実行する。外部メモリ２０６はＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等の低速・大容量のメモリで構成される。廉価なシステムでは、システムバス２０５の帯域（単位時間当たりのデータ転送量）や外部メモリ２０６へのアクセス遅延の制約により、外部メモリ２０６に格納されている基底ベクトルの転送に要する時間が処理時間を超えてしまう場合がある。また、外部メモリ２０６は通常図示しない他の処理と共有されるため、システムバス２０５に必要な帯域は狭い事が望まれる。
【０００７】
基底ベクトルの転送コスト（必要帯域）を削減するために、図３に示す様に、乱数生成器３０２をアクセラレータハード３０１に内蔵する手法も考えられる。全ての基底ベクトルが一連の乱数系列からなる場合はこの様な実装手法でも良いが、特許文献１や非特許文献２に記載されている様に複数の乱数列の中から所望の条件で選択した乱数列を基底ベクトルとする場合、図３に示したような手法は適用できない。
【０００８】
本発明はこのような問題に鑑みてなされたものであり、複数の乱数列から選択された乱数列を用いた射影処理をより廉価且つ高速に実現するための技術を提供する。
【課題を解決するための手段】
【０００９】
本発明の一様態は、変換元ベクトルを取得する取得手段と、メモリに格納されている複数の乱数シードを用いて複数の乱数列を生成する生成手段と、前記複数の乱数列から複数の基底ベクトルを生成し、該生成した複数の基底ベクトルを用いて前記変換元ベクトルに対する乱数射影を行うことで、該変換元ベクトルをより低次元のベクトルに変換する変換手段とを備えることを特徴とする。
【発明の効果】
【００１０】
本発明の構成によれば、複数の乱数列から選択された乱数列を用いた射影処理をより廉価且つ高速に実現することができる。
【図面の簡単な説明】
【００１１】
【図１】情報処理装置の機能構成例を示すブロック図。
【図２】ランダムプロジェクションを利用した従来の識別装置の構成例を示す図。
【図３】乱数生成器３０２をアクセラレータハード３０１に内蔵する手法を説明する図。
【図４】式（１）に従った演算の様子を模式的に示す図。
【図５】内積演算処理部１０３の構成例を示すブロック図。
【図６】乱数生成処理部１０６の構成例を示すブロック図。
【図７】ＣＰＵ１０９が行う処理のフローチャート。
【図８】情報処理装置の動作のタイムチャート。
【図９】画素ブロックについて説明する図。
【図１０】乱数シードを生成して外部メモリ１１１に登録する処理のフローチャート。
【図１１】ＣＮＮの構成例を示す図。
【図１２】ＣＮＮをハードウェアを用いて実現した場合の回路の構成例を示す図。
【図１３】ＣＮＮ回路の動作タイミングを模式的に説明する図。
【図１４】外部メモリ１１１における乱数シードの管理形態を説明する図。
【発明を実施するための形態】
【００１２】
以下、添付図面を参照し、本発明の好適な実施形態について説明する。なお、以下説明する実施形態は、本発明を具体的に実施した場合の一例を示すもので、特許請求の範囲に記載した構成の具体的な実施例の１つである。
【００１３】
［第１の実施形態］
先ず、本実施形態に係る情報処理装置の構成例について、図１のブロック図を用いて説明する。本実施形態では、画像から抽出したｎ次元の特徴ベクトル（変換元ベクトル）を乱数射影により、ｋ（ｋ＜ｎ）次元（より低次元）の特徴ベクトルに変換（次元削減）し、該変換したｋ次元の特徴ベクトルを用いて該画像に対する認識処理を行う。
【００１４】
画像データ入力処理部１１２、演算部１０１、ＤＭＡＣ（ダイレクトメモリアクセスコントローラ）１０８、ＣＰＵ１０９、外部メモリ１１１は何れもシステムバス１１０に接続されており、システムバス１１０を介して互いにデータ通信を行うことができる。
【００１５】
外部メモリ１１１は、システムバス１１０に不図示のメモリコントローラを介して接続されるＤＲＡＭであり、この外部メモリ１１１には、乱数発生用のシード（乱数シード）がｋ個登録されている。
【００１６】
画像データ入力処理部１１２は、本装置外若しくは本装置内の不図示のメモリから画像のデータを取得する。そしてこの画像は、ＤＭＡＣ１０８によって、システムバス１１０を介して外部メモリ１１１に転送される。
【００１７】
その後、ＤＭＡＣ１０８は、外部メモリ１１１に転送した画像を画素ブロック単位で演算部１０１に転送するので、演算部１０１は、この転送された画素ブロックから特徴ベクトルを抽出し、該抽出した特徴ベクトルの次元を、乱数射影により削減する。そして演算部１０１は、該次元が削減された特徴ベクトルを用いて識別処理を行う。
【００１８】
ＤＭＡＣ（ダイレクトメモリアクセスコントローラ）１０８は、ＣＰＵ１０９からの指示に応じて、外部メモリ１１１に対するデータの書き込みやデータの読み出しを行う。ＣＰＵ１０９は、図１に示した各機能部の動作制御を行う。
【００１９】
次に、演算部１０１についてより詳細に説明する。
【００２０】
特徴抽出処理部１０２は、外部メモリ１１１から転送された画素ブロックごとに、該画素ブロックからｎ次元の特徴ベクトル（要素数がｎのベクトル）を抽出する。この特徴ベクトルは、例えば、輝度勾配の方向をビンとしたヒストグラムや複数画像フレーム間の画素の動きベクトル（オプティカルフロー等）の方向をビンとしたヒストグラム等、識別目的に応じて定める様々な特等量に基づくデータ列である。
【００２１】
内積演算処理部１０３は、特徴抽出処理部１０２が求めたｎ次元の特徴ベクトルと基底ベクトル生成処理部１０５が生成したそれぞれの基底ベクトルとの内積演算を行うことで、該ｎ次元の特徴ベクトルをｋ次元の特徴ベクトル（射影ベクトル）に変換する。このような変換処理を画素ブロックごとに行うことで、それぞれの画素ブロックのｎ次元の特徴ベクトルを、ｋ次元の特徴ベクトルに変換することができる。
【００２２】
内積演算処理部１０３は、ｎ次元の特徴ベクトルＸ（要素ｘ１〜ｘｎから成るベクトル）をｋ次元の射影ベクトルＰ（要素ｐ１〜ｐｋから成るベクトル）に変換する場合、以下の式（１）に従った演算を実行する。
【００２３】
【数１】
2015197702.tif 000003
【００２４】
ここで、Ｘは上記のｎ次元の特徴ベクトル（ｎ行１列のベクトル）、Ｂはｋ次元のバイアス項（要素ｂ１〜ｂｋから成るベクトルであり、ｋ行１列のベクトル）、Ｐは上記のｋ次元の射影ベクトル（ｋ行１列のベクトル）である。Ｗは（ｎ×ｋ）次元の射影行列（ｎ行ｋ列の行列）であり、ｋ個のｎ次元基底ベクトル（Ｅ１〜Ｅｋ）により構成される。基底ベクトルＥ１〜Ｅｋは乱数に基づいて決定したデータ列であり、多数の基底候補となる乱数列から所定の条件で選択されたｋ個のｎ次元ベクトルである。
【００２５】
図４では、上記式（１）に従った演算の様子を模式的に示している。例えば、射影ベクトルＰ（４０１）の要素ｐ１は、式（２）に示す如く、射影行列Ｗ（４０２）における基底ベクトルＥ１と特徴ベクトルＸ（４０３）との内積値と、バイアス項Ｂ（４０４）における要素ｂ１と、の和により算出することができる。
【００２６】
【数２】
2015197702.tif 000004
【００２７】
ここで、内積演算処理部１０３の構成例について、図５のブロック図を用いて説明する。内積演算処理部１０３に入力された特徴ベクトルＸは、シフトレジスタ５０１に格納され、ｍ（ｍ≦ｋ）個の乗算器５０２ａ〜５０２ｃのそれぞれに供給される。
【００２８】
ｍ個の乗算器５０２ａ〜５０２ｃは、射影演算を高速化するために並列で動作するものであり、基底ベクトル生成処理部１０５が生成した基底ベクトルと、シフトレジスタ５０１から供給された特徴ベクトルＸと、で対応する要素毎に乗算する。例えば、図５において一番上に記されている乗算器から一番下に記されている乗算器までを順に乗算器１、乗算器２、…乗算器ｍとし、乗算器ｊ（１≦ｊ≦ｍ）に入力される基底ベクトルをＥｊ＝（ｅｊ１，…，ｅｊｎ）とする。このとき、乗算器ｊは、（ｅｊ１×ｘ１、ｅｊ２×ｘ２、…、ｅｊｎ×ｘｎ）を求める。
【００２９】
ｍ個の累積加算器５０３ａ〜５０３ｃは、乗算器と同様に並列で動作するものであり、それぞれ乗算器５０２ａ〜５０２ｃが求めた乗算結果を合計する。例えば、図５において一番上に記されている累積加算器から一番下に記されている累積加算器までを順に累積加算器１、累積加算器２、…累積加算器ｍとし、乗算器ｊに入力される基底ベクトルをＥｊ＝（ｅｊ１，…，ｅｊｎ）とする。このとき、累積加算器ｊは、（ｅｊ１×ｘ１＋ｅｊ２×ｘ２＋…＋ｅｊｎ×ｘｎ）を求める。
【００３０】
すなわち、乗算器と累積加算器とにより、基底ベクトルと特徴ベクトルＸとの内積結果を求める。図５の場合、乗算器と累積加算器とのセットはｍセットあるので、ｍ個の基底ベクトルと特徴ベクトルＸとの内積結果を求めることができる。
【００３１】
内積演算処理部１０３では、シフトレジスタ５０１に格納する特徴ベクトルＸの要素と基底ベクトルＥ１〜Ｅｍの要素の乗算とその結果の累積加算をクロック毎に順次演算する。即ち、ｎクロックサイクルでｍ個の基底ベクトルに対応する内積演算を完了する。
【００３２】
なお、バイアス項の加算については、上記の内積結果にバイアス項を加える（乗算器ｊに入力される基底ベクトルＥｊに対応するバイアス項Ｂの要素をｂｊとしたとき、累積加算器ｊがｅｊ１×ｘ１＋…＋ｅｊｎ×ｘｎ＋ｂｊを求める）ようにしても構わない。しかし、以下のようにして上記の内積演算及びバイアス項Ｂの加算を行うようにしても構わない。
【００３３】
即ち、特徴抽出処理部１０２は、特徴ベクトルＸの要素に要素値１の要素を追加し、要素ｘ１〜ｘｎ及び要素値１を有する要素から成る（ｎ＋１）次元の特徴ベクトルＸ’を生成する。また、基底ベクトル生成処理部１０５は、生成したそれぞれの基底ベクトルＥについて、該基底ベクトルＥのｎ個の要素に、バイアス項において該基底ベクトルに対応する要素を追加して（ｎ＋１）次元の基底ベクトルＥ’を生成する。そして、乗算器及び累積加算器によりこのような特徴ベクトルＸ’とそれぞれの基底ベクトルＥ’との内積演算を行う。
【００３４】
従って、バイアス項まで加味すると、（ｎ＋１）クロックで射影ベクトルの要素値ｐ１〜ｐｍが算出される。なお、＊ＣＬＲは特徴ベクトルと基底ベクトルの内積演算及びバイアス項の加算を終了して射影ベクトル要素の出力後に累積加算器を初期化するための信号である。このようにして内積演算処理部１０３は、射影ベクトルＰを構成するｋ個の要素のうちｍ個の要素を並列に算出して出力することができる。
【００３５】
次に、内積演算処理部１０３に供給される射影行列Ｗ、すなわち、ｋ個のｎ次元の基底ベクトルの生成について説明する。このｋ個の基底ベクトルは、乱数生成処理部１０６及び基底ベクトル生成処理部１０５によって生成される。
【００３６】
本実施形態では、外部メモリ１１１には、基底ベクトルごとに乱数シード（固有の乱数列を生成するためのデータ）が格納されている。本実施形態では、基底ベクトルはｋ個生成するので、外部メモリ１１１には、ｋ個の乱数シードが格納されていることになる。
【００３７】
より詳しくは図１４に示す如く、外部メモリ１１１には、ｋ個の乱数シード（Ｓｅｅｄ１〜Ｓｅｅｄｋ）と、バイアス項の要素（ｂ１〜ｂｋ）と、がセットになって登録されている。Ｓｅｅｄ１〜Ｓｅｅｄｋはそれぞれ、基底ベクトルＥ１〜Ｅｋを生成するための乱数シードであり、ｂ１〜ｂｋはそれぞれ、基底ベクトルＥ１〜Ｅｋに対応するバイアス項である。これらのセットは、ＤＭＡＣ１０８によってシードバッファ１０７に転送される。なお、以下の説明では、バイアス項は乱数シードの一部であるものとして説明する。例えば、バイアス項ｂ１は、Ｓｅｅｄ１の一部であるものとして説明する。
【００３８】
ＣＰＵ１０９は、適当なタイミングでＤＭＡＣ１０８を起動し、外部メモリ１１１に格納されているｋ個の乱数シードを、システムバス１１０を介してシードバッファ１０７に転送させる。シードバッファ１０７は高速なＳＲＡＭ（スタティックランダムアクセスメモリ）により構成する。シードバッファ１０７は、乱数生成処理部１０６による読み出しとＤＭＡＣ１０８による書き込みとが同時に実行可能な少容量のダブルバッファメモリ等により構成する。
【００３９】
乱数生成処理部１０６は、シードバッファ１０７に転送されたｋ個の乱数シードを用いて、ｋ個の乱数列を生成する。乱数生成処理部１０６の構成例について、図６のブロック図を用いて説明する。
【００４０】
乱数生成はＭ系列による乱数生成手法等、従来知られている手法で良い。Ｍ系列の乱数系列長は基底ベクトルの次元数と基底ベクトル選択の候補となる乱数ベクトルの数に基づいて決定する。例えば、”特徴ベクトル次元数×射影ベクトル次元数×基底ベクトル候補数”の周期を超える乱数が生成できる乱数系列長を決定する。ここで基底ベクトル候補とは、基底ベクトルを選択するための候補となるベクトルである。
【００４１】
図６に示す如く、乱数生成処理部１０６には、図５の内積演算器の並列処理数ｍに対応してｍ個の線形帰還シフトレジスタ（線形帰還シフトレジスタ１〜ｍ）が備わっており、所定のレジスタ長を有する。線形帰還シフトレジスタ１〜ｍにはそれぞれ、シードバッファ１０７に転送された乱数シード１〜ｍが入力され、Ｍ系列の乱数を並列に生成する。ロード信号は各シフトレジスタ値のロード信号であり、シードバッファ１０７から読み出した乱数シードを所定のタイミングで線形帰還シフトレジスタにロードするための信号である。乱数生成処理部１０６は、内積演算処理部１０３でｋ次元の射影ベクトルを生成する場合、ｋ個のシードに基づくｋ個の乱数列を生成する（基底ベクトルを一様乱数から生成する場合）。
【００４２】
図１に戻って、基底ベクトル生成処理部１０５は、乱数生成処理部１０６で生成したｋ個の乱数列から所定の乱数分布に対応するｋ個の基底ベクトルを取り出す。基底ベクトルが一様乱数からなる場合、乱数シードから生成した一様乱数列をそのまま基底ベクトルとする。一方、基底ベクトルが正規乱数からなる場合、複数の一様乱数列の平均乱数列を生成し、該平均乱数列から正規乱数に近似した基底ベクトルを取り出す。また、基底ベクトル生成処理部１０５では、前述した様に、バイアス項に相当するデータを基底ベクトル列に付加する。
【００４３】
このように、本実施形態では、外部メモリ１１１には基底ベクトルではなく、基底ベクトルに対応する乱数シードを登録しておき、演算部１０１は外部メモリ１１１から乱数シードを取得し、該取得した乱数シードに基づいて基底ベクトルを生成する。これにより、外部メモリ１１１から演算部１０１に転送するデータ量を、外部メモリ１１１に基底ベクトルを登録した場合と比べてより軽減させることができる。
【００４４】
そして内積演算処理部１０３は、基底ベクトル生成処理部１０５にて順次生成する基底ベクトルＥ１〜Ｅｍと、シフトレジスタ５０１に格納されている特徴ベクトルＸと、の内積演算を行う。そして、基底ベクトルＥ１〜Ｅｋと特徴ベクトルＸとの内積演算が完了した時点で、射影ベクトルＰの要素ｐ１〜ｐｋが決定するので、射影ベクトルＰが確定することになる。内積演算処理部１０３は、このようにして確定した射影ベクトルＰを識別処理部１０４に転送する。
【００４５】
識別処理部１０４は、この射影ベクトルＰを用いて、規定の判定処理を実行することで、画像内のオブジェクトに対する識別処理を行う。例えば、予め学習によって求めた正解データとなる正解射影ベクトルとのハミング距離やユークリッド距離に基づいて判定を行う。或いはＳＶＭ(サポートベクターマシン）、ニューラルネットワーク、ブースティング等の判別器を用いて判定しても良い。画像内の特徴量を用いた識別処理については周知の技術であるので、これに係る詳細な説明は省略する。そして識別処理部１０４は、その識別結果（判定結果）を、システムバス１１０を介して外部メモリ１１１に転送し、そこに格納する。もちろん、識別結果の出力先については外部メモリ１１１に限るものではなく、外部装置に対して転送しても良いし、不図示の表示装置に表示させても良い。
【００４６】
以上説明した各処理を実行するためにＣＰＵ１０９が行う処理について、同処理のフローチャートを示す図７を用いて説明する。ＣＰＵ１０９は、外部メモリ１１１等のメモリに格納されているコンピュータプログラムやデータを用いて処理を実行することで、図７のフローチャートに従った処理を実行する。
【００４７】
ステップＳ７０１では、ＣＰＵ１０９は、情報処理装置を構成する各ハードウェア（図１に示した各機能部を含む）の初期化処理を行う。この初期化処理には、各機能部の動作パラメータを設定する処理も含まれる。ステップＳ７０２では、ＣＰＵ１０９は、画像データ入力処理部１１２、演算部１０１、ＤＭＡＣ１０８の各機能部に動作開始指示を送出する。
【００４８】
ステップＳ７０３では、ＣＰＵ１０９は、画像データ入力処理部１１２が取得した画像を外部メモリ１１１に転送させるべく、ＤＭＡＣ１０８にこの転送を指示するので、ＤＭＡＣ１０８はこの転送を行う。
【００４９】
ステップＳ７０４では、ＣＰＵ１０９は、ＤＭＡＣ１０８の出力する割り込み信号により画像が転送されたことを検知すると、ＤＭＡＣ１０８に、外部メモリ１１１に格納されている画像の画素ブロック単位の転送及び乱数シードの転送を指示する。ＤＭＡＣ１０８はＣＰＵ１０９により指定されたディスクリプタに従って、外部メモリ１１１に格納されている画像を画素ブロック単位で特徴抽出処理部１０２に転送すると共に、外部メモリ１１１に格納されている乱数シードをシードバッファ１０７に転送する。
【００５０】
ここで、画素ブロックについて図９を用いて説明する。画素ブロック９２とは、画像９１を複数の領域に区分した場合に、該領域内の画素から成るブロックである。本実施形態では、画素ブロック９２内の特徴を代表するベクトルを特徴量（特徴ベクトル）とし、画素ブロック単位で処理を行うことで、結果として画像全体に対して処理する。然るに、識別処理部１０４による識別結果は、画素ブロックごとに得られることになる。
【００５１】
特徴抽出処理部１０２は、外部メモリ１１１から画素ブロックが転送されるたびに、該画素ブロックから特徴ベクトルを抽出し、該抽出した特徴ベクトルを内積演算処理部１０３に送出する。
【００５２】
シードバッファ１０７に乱数シードが転送されると、乱数生成処理部１０６はこの乱数シードを用いて乱数列を生成し、基底ベクトル生成処理部１０５は、この乱数列を用いて基底ベクトルを生成し、該生成した基底ベクトルを内積演算処理部１０３に送出する。
【００５３】
内積演算処理部１０３は、特徴抽出処理部１０２から送出された特徴ベクトルと、基底ベクトル生成処理部１０５から送出されたそれぞれの基底ベクトルと、の内積演算を行って、射影ベクトルを生成する。
【００５４】
ここで、内積演算処理部１０３は、図５に示す様にｍ個の基底ベクトルに対する処理を並列に実行する。従って射影ベクトルの次元をｋとすると、天井関数（ｋ／ｍ）回の基底ベクトルに対する内積演算の処理時間で射影ベクトルを生成する。
【００５５】
識別処理部１０４は、内積演算処理部１０３で算出された射影ベクトルを受け取ると、識別処理を開始する。ＤＭＡＣ１０８は識別処理部１０４による識別結果を外部メモリ１１１に転送する。
【００５６】
そしてＤＭＡＣ１０８は、外部メモリ１１１への識別結果の転送を完了すると、ＣＰＵ１０９に対して割り込み信号を出力するので、ステップＳ７０５では、ＣＰＵ１０９は、この割り込み信号を受信する。
【００５７】
ステップＳ７０６では、ＣＰＵ１０９は、全ての画素ブロックについてステップＳ７０４及びＳ７０５の処理を行ったか否かを判断する。この判断の結果、全ての画素ブロックについてステップＳ７０４及びＳ７０５の処理を行った場合には、処理はステップＳ７０７に進む。一方、全ての画素ブロックについてステップＳ７０４及びＳ７０５の処理を行っていない場合には、未処理の画素ブロックについてステップＳ７０４及びＳ７０５の処理が行われる。
【００５８】
ステップＳ７０７では、ＣＰＵ１０９は、全てのフレームについてステップＳ７０３〜Ｓ７０６の処理を行ったか否かを判断する。この判断の結果、全てのフレームについてステップＳ７０３〜Ｓ７０６の処理を行った場合には、図７のフローチャートに従った処理は終了する。一方、全てのフレームについてステップＳ７０３〜Ｓ７０６の処理を行っていない場合には、未処理のフレームについてステップＳ７０３〜Ｓ７０６の処理が行われる。
【００５９】
次に、情報処理装置の動作のタイムチャートについて、図８を用いて説明する。図８では、ある１つの画素ブロックに対する動作のタイムチャートを示している。また、図８では、内積演算処理部１０３及び乱数生成処理部１０６の並列度がｋ／ｍ＝２となる場合の例を示している。
【００６０】
まずＤＭＡＣ１０８によって外部メモリ１１１に格納されている乱数シードをシードバッファ１０７に転送する（８０１、８０３）。特徴抽出処理部１０２は、この転送に並行して特徴抽出処理を実行する（８１５）。特徴抽出処理（８１５）と乱数シードの転送（８０１，８０３）を終了すると、シードバッファ１０７からの乱数シードの読み出し（８０６）、乱数生成処理（８０８）、基底ベクトル生成処理（８１０）を順次実行する。生成された基底ベクトルと格納済みの特徴ベクトルに対して内積演算処理を実行する（８１２）。ここでは、内積演算処理部１０３で並列に処理する基底ベクトルの個数分の内積演算が実行される。ここでの一連の処理と並行して、次の内積演算処理（８１３）のための乱数シードの転送を開始する（８０２、８０４）。内積演算処理（８１２）が終了すると、シードバッファ１０７に格納された乱数シードを参照して乱数生成処理（８０９）、基底ベクトル生成処理（８１１）を順次実行する。更に、生成された基底ベクトルと特徴抽出処理８１５で抽出された基底ベクトルとの内積演算を実行する（８１３）。内積演算（８１３）を終了すると、得られた射影ベクトルに対して識別処理（８１４）を開始する。この様に本実施形態では、外部メモリに格納する少量の乱数シードに基づいて基底ベクトルを動的に生成しながら射影演算を実行する。
【００６１】
以上説明したように、本実施形態では、多次元の基底ベクトルを保持する代わりに基底ベクトルを生成するための少量の乱数シードを外部メモリに保持する事で、外部メモリの利用サイズを数分の１〜数百分の１に削減する事ができる。これにより、システムバス１１０に必要な帯域を数分の１〜数百分の１に削減する事ができる。これにより、バス帯域に制約があるシステムでも選択的な乱数列に基づくランダムプロジェクションによる射影演算処理を高速に処理する事が可能になる。
【００６２】
［第２の実施形態］
本実施形態では、ＣＰＵ１０９が好適な乱数シードを生成（学習）して外部メモリ１１１に登録する点が、第１の実施形態と異なる。以下では、第１の実施形態との相違点について重点的に説明し、第１の実施形態と同様の点については説明を省略する。乱数シードを生成して外部メモリ１１１に登録する処理について、図１０のフローチャートを用いて説明する。
【００６３】
ステップＳ１００１では、ＣＰＵ１０９は、演算部１０１を構成する各機能部を初期化する。この初期化では、例えば、乱数生成処理部１０６がパラメータにより線形帰還シフトレジスタの乱数周期（乱数系列長）や帰還構成を変更できる場合、その周期や帰還構成に関するパラメータを設定する。乱数系列長は前述した様に”特徴ベクトル次元数×射影ベクトル次元数×基底ベクトル候補数”に基づいて決定する。また、Ｍ乱数発生器の場合、帰還構成は数系列長に基づいて定まる。
【００６４】
ステップＳ１００２では、ＣＰＵ１０９は、十分な個数分の乱数シード候補を生成する。生成方法は如何なる方法でも構わない。また、生成したそれぞれの乱数シード候補に対応するバイアス項を、乱数を用いて生成する。そしてステップＳ１００３では、ＣＰＵ１０９は、生成した乱数シード候補のうち未選択の１つを乱数生成処理部１０６が有する線形帰還シフトレジスタのうち１つに設定し、該設定された乱数シード候補から乱数列を該線形帰還シフトレジスタに生成させる。
【００６５】
ステップＳ１００４では、基底ベクトル生成処理部１０５は、ステップＳ１００３で生成された乱数列から１つの基底ベクトルを生成する。ステップＳ１００５で内積演算処理部１０３はステップＳ１００４で生成された基底ベクトルと複数の学習画像のそれぞれから予め抽出した特徴ベクトルとの内積演算を行い、該基底ベクトルを生成する為に用いた乱数シード候補に対応するバイアス項を加算する。
【００６６】
そしてＣＰＵ１０９は、複数の学習画像のそれぞれに対して求めた「該学習画像の特徴ベクトルｘとステップＳ１００３で選択した乱数シード候補に応じた基底ベクトルＥとの内積結果にバイアス項ｂを加算した結果（値）」を用いて、以下の式（３）により該基底ベクトルを評価する。
【００６７】
【数３】
2015197702.tif 000005
【００６８】
ここで、Ｎはデータ数、λはバイアス重みパラメータである。また、Ｌ（ｚ）は誤差を表す関数であり、例えば、以下の式（４）のように定義される。
【００６９】
【数４】
2015197702.tif 000006
【００７０】
そしてＣＰＵ１０９は、ステップＳ１００３で選択した乱数シード候補と、ステップＳ１００５での評価結果（評価値）と、をセットにして外部メモリ１１１に格納する。
【００７１】
ステップＳ１００６では、ＣＰＵ１０９は、生成した全ての乱数シード候補についてステップＳ１００３〜Ｓ１００５の処理を行ったか否かを判断する。この判断の結果、生成した全ての乱数シード候補についてステップＳ１００３〜Ｓ１００５の処理を行った場合には、処理はステップＳ１００７に進む。一方、生成した全ての乱数シード候補についてステップＳ１００３〜Ｓ１００５の処理を行っていない場合には、処理はステップＳ１００３に進み、未選択の乱数シード候補について以降の処理を行う。
【００７２】
ステップＳ１００７では、ＣＰＵ１０９は、外部メモリ１１１に格納されたそれぞれの乱数シード候補のうち評価値が高い順に上位ｋ個の乱数シード候補を「射影行列Ｗを構成する基底ベクトルＥ１〜Ｅｋを生成するための乱数シード」として選択する。そしてＣＰＵ１０９は改めて、この選択したｋ個の乱数シード候補と、該乱数シード候補に対応するものとしてステップＳ１００２で生成されたバイアス項と、をセットにして、図１４に示すような形式で外部メモリ１１１に登録する。また、ここで、周期や帰還構成に関するパラメータも関連付けて格納する。
【００７３】
そして、本実施形態で外部メモリ１１１に登録したパラメータや乱数シードを用いて、第１の実施形態で説明した一連の処理を行うことで、学習処理時に評価選択した基底ベクトルと同じ基底ベクトルを乱数シードから生成することができる。
【００７４】
なお、基底ベクトルの選択方法は上記の方法に限るわけではなく、適用する用途に応じて様々な選択手法が考えられる。例えば、本実施形態では予め候補となる乱数シードを生成して各乱数列に基づく基底ベクトルを評価する場合について説明したが、他の方法でも良い。例えば、一つの乱数シードに基づく乱数列の中から、所定の長さの乱数列を切り出す事で順次基底ベクトルを生成する方法でも良い。この場合、所定の長さの乱数列を切り出す単位で乱数生成器の内部ステート情報（線形帰還レジスタの場合はレジスタ値）を取り出してその情報を基底ベクトルに対応する乱数シードとする。
【００７５】
［第３の実施形態］
本実施形態では、第１の実施形態で説明したような射影演算処理をＣＮＮ（Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋｓ：コンボリューショナルニューラルネットワーク）に適用した場合について説明する。まずは、ＣＮＮの構成例について、図１１を用いて説明する。本実施形態では、ＣＮＮは、入力された画像から特定の物体を検出するものとして説明する。
【００７６】
ＣＮＮは階層的な特徴抽出処理により構成する。ここでは、第１層１１０６の特徴数が３、第２層１１１０の特徴数が２、第３層１１１３の特徴数が１、の３階層ＣＮＮの例を示している。ＣＮＮは階層的な特徴抽出処理により対象物の見えの変動等に対して頑健な手法として知られている。
【００７７】
このようなＣＮＮに画像１１０１を入力する。１１０３ａ〜１１０３ｃは第１階層１１０６の特徴面を示す。特徴面とは、所定の特徴抽出フィルタ（コンボリューション演算の累積和及び非線形処理）で前階層のデータを走査しながら演算した結果を格納する画像データ面である。特徴面はラスタスキャンされた画像データに対する検出結果であるため検出結果も面で表す。特徴面１１０３ａ〜１１０３ｃは、画像１１０１を参照して、異なる特徴抽出フィルタにより算出する。特徴面１１０３ａ〜１１０３ｃはそれぞれ模式的に１１０４ａ〜１１０４ｃに対応する２次元のコンボリューションフィルタ演算と演算結果の非線形変換（シグモイド関数等）により生成する（以下、非線形コンボリューション演算と呼ぶ）。なお、１１０２は非線形コンボリューション演算に必要な参照画像領域を示す。フィルタサイズ（水平方向の長さと垂直方向の高さ）が１１×１１のコンボリューションフィルタ演算は以下に示すような積和演算により処理する。
【００７８】
【数５】
2015197702.tif 000007
【００７９】
１１０４ａ〜１１０４ｃは夫々異なる係数のコンボリューションフィルタである。なお、階層によってコンボリューションフィルタのサイズも異なる。ＣＮＮでは複数のフィルタを画素単位で走査しながら積和演算を繰り返し、最終的な積和結果を非線形変換する事で特徴面を生成する。特徴面１１０３ａ〜１１０３ｃを算出する場合は前階層との結合数が１であるため、フィルタは１つ（１１０４ａ）である。一方、特徴面１１０７ａ及び特徴面１１０７ｂを計算する場合、前階層との結合数が３であるため夫々１１０８ａ〜１１０８ｃ及び１１０８ｄ〜１１０８ｆに相当する３つのコンボリューションフィルタの演算結果を累積加算する。つまり、特徴面１１０７ａは、コンボリューションフィルタ１１０８ａ〜１１０８ｃの全ての出力を累積加算し、最後に非線形変換処理する事によって得る。１１０５ａ〜１１０５ｃはそれぞれ第２層１１１０の非線形コンボリューション演算に必要な参照画像領域を示す。即ち特徴面は演算は以下の式に基づいて算出される。
【００８０】
【数６】
2015197702.tif 000008
【００８１】
第３層（特徴面１１１１）では、前回層の特徴面１１０７ａ、１１０７ｂに対する非線形コンボリューション演算により検出対象の存在尤度を算出する（１１１２）。ここで、式（６）は一つのコンボリューションフィルタを基底ベクトルとすると式（１）に示す射影演算の総和（前回層への結合数i）に非線形関数演算を追加したものと捉える事ができる（式（７））。つまり、非線形コンボリューション演算を非線形射影演算と定義できる（射影後の次元は特徴面の数に対応することになる）。
【００８２】
【数７】
2015197702.tif 000009
【００８３】
一般的にコンボリューションフィルタの係数Ｅi（＝ｗｅｉｇｈｔ）はバックプロパゲーション等により学習される。一方、非特許文献２に開示されている様に、下位階層（本実施形態の場合、第１層１１０６、第２層１１１０）の係数Ｗｅｉｇｈｔに乱数を使用しても良い検出性能を示す事が知られている。本実施形態では第１層１１０６、第２層１１１０のコンボリューションフィルタ１１０４ａ〜１１０４ｃ、１１０８ａ〜１１０８ｆの計数が乱数から生成するものとする。
【００８４】
上記のＣＮＮをハードウェアを用いて実現した場合の回路の構成例について、図１２を用いて説明する。１２０１は非線形コンボリューション演算処理部であり、上記の式（７）に示す非線形射影演算を実行する。非線形コンボリューション演算処理部１２０１は内積演算器、累積加算器、非線形変換器等から構成されるものである。１２０２は特徴面データ保持メモリであり、非線形コンボリューション演算によって得られる特徴面（１１０３ａ〜１１０３ｃ、１１０７ａ〜１１０７ｂ、及び１１１１）を格納するメモリである。１２０５はシードメモリであり、コンボリューション演算のフィルタ係数に相当する基底ベクトルを乱数から生成するための乱数シード群及びバイアス項を格納する。シードメモリ１２０５はＲＯＭや高速なＳＲＡＭ等により構成される。ＳＲＡＭにより構成する場合、図示しない記憶部に格納する乱数シードをデータバスを介して階層処理毎に予め転送する。１２０４は乱数生成処理部であり、シードメモリ１２０５に格納された乱数シードを順次読みだし、該乱数シードに基づいて乱数列を生成する。基底ベクトル生成処理部１２０３は、乱数生成処理部１２０４で生成した乱数列からフィルタ係数となる基底ベクトルを生成する。なお、乱数生成処理部１２０４や基底ベクトル生成処理部１２０３は、図１に示した乱数生成処理部１０６や基底ベクトル生成処理部１０５と同様である。
【００８５】
図１３はＣＮＮ回路の動作タイミングを模式的に説明する図である。図１３は特徴面１１０７ａの一つの注目点の値を算出する場合の例を示している。１３０１ａはシードデータの読み出し処理であり、１１０８ａのフィルタ演算の係数に対応する乱数シードのシードメモリ１２０５からの読み出しを示す。１３０２ａは乱数生成処理部１２０４の動作期間であり、１３０１ａで読みだされた乱数シードに基づいて乱数列を生成する処理を示す。１３０３ａは基底ベクトル生成処理部１２０３の動作期間であり、乱数生成処理部１２０４で生成された乱数列に基づいてコンボリューションフィルタ１１０８ａの係数に相当する基底ベクトルを生成する。即ち乱数列から所定の条件でフィルタ係数列を取り出す。１３０４ａは特徴面データ保持メモリ１２０２からのデータ読み出し期間を示す。ここでは１１０５ａに相当する特徴面の領域データを読み出す。１３０５ａは非線形コンボリューション演算処理部１２０１の動作期間を示す。ここでは基底ベクトル生成処理部１２０３で生成されたフィルタ係数と特徴面データ保持メモリ１２０２から読み出された前回層の特徴データとの内積演算を実行し、その結果を累積加算器に格納する。同様に１３０１ｂ〜１３０５ｂのタイミングで前回層の特徴１１０５ｂに対して１１０８ｂに示すフィルタ演算を実行し、その結果を累積加算する。更に同様に１３０１ｃ〜１３０５ｃのタイミングで前回層の特徴１１０５ｃに対して１１０８ｃに示すフィルタ演算を実行し、その結果を累積加算する。１３０６は３つのフィルタ演算の結果の累積和を非線形変換処理するタイミングである。なお、バイアス項は図示しないメモリに階層毎に格納し、その加算も１３０６で処理されるものとする。非線形変換処理された累積加算結果は１３０７で特徴面データ保持メモリ１２０２に格納する。以上の処理をラスタスキャン順に処理する事で特徴面１１０７ａを算出する。
【００８６】
この様にＣＮＮは特徴面データ保持メモリ１２０２に格納された特徴面データを参照しながら階層的に非線形コンボリューション演算を繰り返す事で物体検出等を実現する。なお、図１１は説明のために簡略化したＣＮＮの構造を示すが、一般的には多数の特徴面を有する多階層のネットワークで構成される。多層かつ多数の特徴面を有するネットワークで構成する場合、コンボリューション演算のフィルタ係数を保持するためのメモリ容量がコスト増大の要因となる。本実施形態では、乱数に基づくＣＮＮ回路において、複数のフィルタカーネル群のフィルタ係数を乱数シードで保持する事により該メモリの回路規模を大幅に削減する事が可能になる。また、係数を外部のメモリ等に保持する場合、転送コストを削減する事ができる。
【００８７】
［第１乃至３の実施形態の変形例について］
上記の実施形態には様々な変形例が考え得る。例えば、上記の実施形態では、情報処理装置（ＣＮＮ回路）は、画像データを対象としていたが、これに限るものではなく、音声データ、テキスト情報、時系列信号データ等、特徴ベクトルを抽出可能な様々なデータを対象とすることができる。
【００８８】
また、上記の実施形態では、基底ベクトルに対応する乱数シードを外部メモリ１１１に格納する場合について説明したが、外部メモリ１１１の代わりに情報処理装置内にＲＯＭを設け、このＲＯＭに乱数シードを格納するようにしても構わない。この場合、ＲＯＭのサイズを大幅に削減する事ができる。
【００８９】
また、上記の実施形態では、乱数シードから基底ベクトルを生成する方法として、１つの乱数シードから１つの基底ベクトルを生成する方法や、複数の乱数シードから１つの基底ベクトルを生成する方法（正規乱数の場合）について説明した。しかし、乱数シードから基底ベクトルを生成する方法はこれに限るものではない。例えば、１つの乱数シードから所定のまとまりの複数の基底ベクトルを生成するようにしても構わない。乱数シードと基底ベクトルとの関係は学習時の基底ベクトル生成方法に依存して任意である。
【００９０】
また、上記の実施形態では、線形帰還レジスタによりＭ系列の乱数を生成する方法について説明したが、これに限るものではなく、乱数シードから一意に定まる乱数生成方式であれば如何なる方法を用いても構わない。
【００９１】
また、第１の実施形態では、シードバッファ１０７をダブルバッファメモリで構成する場合について説明したが、例えば、シードバッファ１０７を設ける事無く、乱数生成処理部１０６に乱数シードを直接格納するようにしても構わない。また、第１の実施形態では、射影ベクトルＰを生成する場合について説明したが、射影ベクトルＰの各要素を２値化してＨａｓｈ値として利用しても良い。
【００９２】
また、第３の実施形態では、ＣＮＮに適用した場合について説明したが、乱数に基づく係数による複数のコンボリューション演算処理を有する様々な処理に対応可能である。また、一般的なＭｕｌｔｉ  Ｌａｙｅｒ Ｐｅｒｃｅｐｔｒｏｎ型のニューラルネットワークに適用しても良い。この場合、階層型ニューラルネットワークの一つのニューロン値を算出するための前回層ニューロン値に対する結合係数列が上記の基底ベクトルに対応する。更に、以下に開示されているＲｅｃｕｒｓｉｖｅ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋｓ等に適用しても良い。
【００９３】
Ｓｏｃｈｅｒ，  Ｒ．，  Ｍａｎｎｉｎｇ，  Ｃ．  Ｄ．，  ａｎｄ  Ｎｇ，  Ａ．  Ｙ．  Ｌｅａｒｎｉｎｇ  ｃｏｎｔｉｎｕｏｕｓ  ｐｈｒａｓｅ  ｒｅｐｒｅｓｅｎｔａｔｉｏｎｓ  ａｎｄ  ｓｙｎｔａｃｔｉｃ  ｐａｒｓｉｎｇ  ｗｉｔｈ  ｒｅｃｕｒｓｉｖｅ  ｎｅｕｒａｌ  ｎｅｔｗｏｒｋｓ．  Ｉｎ  Ｄｅｅｐ  Ｌｅａｒｎｉｎｇ  ａｎｄ  Ｕｎｓｕｐｅｒｖｉｓｅｄ  Ｆｅａｔｕｒｅ  Ｌｅａｒｎｉｎｇ  Ｗｏｒｋｓｈｏｐ，  ２０１０．
また、演算部１０１を構成する各部は何れもハードウェアで構成しても構わないが、シードバッファ１０７を除く各部のうち１以上をソフトウェア（コンピュータプログラム）で構成しても構わない。この場合、このコンピュータプログラムは外部メモリ１１１に格納され、ＣＰＵ１０９により実行されることで、対応する機能部の機能を実現することができる。この場合、特にマルチプロセッサ構成の処理装置で空間分割処理する場合等に有効である。
【００９４】
（その他の実施例）
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【符号の説明】
【００９５】
１０２：特徴抽出処理部  １０３：内積演算処理部  １０５：基底ベクトル生成処理部  １０６：乱数生成処理部
【図１】
2015197702.tif 000010
【図２】
2015197702.tif 000011
【図３】
2015197702.tif 000012
【図４】
2015197702.tif 000013
【図５】
2015197702.tif 000014
【図６】
2015197702.tif 000015
【図７】
2015197702.tif 000016
【図８】
2015197702.tif 000017
【図９】
2015197702.tif 000018
【図１０】
2015197702.tif 000019
【図１１】
2015197702.tif 000020
【図１２】
2015197702.tif 000021
【図１３】
2015197702.tif 000022
【図１４】
2015197702.tif 000023