(57)【特許請求の範囲】
【請求項１】
第１データと第２データとに基づいて並列して演算を行う複数の演算処理手段と、
前記第１データを前記複数の演算処理手段に供給するための第１供給手段と、
前記第２データを前記複数の演算処理手段に供給するための第２供給手段と、
前記複数の演算処理手段それぞれに対して同一タイミングで内容の異なる前記第１データを供給するように前記第１供給手段を制御し、前記複数の演算処理手段それぞれに対して同一タイミングで内容が同一の第２データを供給するように前記第２供給手段を制御する供給制御手段と、
を有し、
前記供給制御手段は、
前記複数の演算処理手段の間で内容が同一の前記第１データが異なるタイミングで共有されるように前記第１データを供給させる第１供給モードと、
前記複数の演算処理手段に、複数のタイミングで、それぞれ内容が異なる前記第１データを供給させる第２供給モードと、
を実行することを特徴とする並列演算装置。
【請求項２】
前記第１データを格納する第１格納手段と、
前記第１格納手段から前記第１供給手段への前記第１データの読み出しを制御する読み出し制御手段と、を更に有し、
前記読み出し制御手段は、
過去の演算において前記第１格納手段から読み出した前記第１データの一部分を重複して再度読み出す第１読み出しモードと、
過去の演算において前記第１格納手段から読み出した前記第１データを重複せずに読み出す第２読み出しモードと、
を実行することを特徴とする請求項１に記載の並列演算装置。
【請求項３】
前記第２データを格納する第２格納手段を更に有し、
前記供給制御手段は、
前記第２格納手段から読み出された前記第２データを受け、前記複数の演算処理手段それぞれに対して同一タイミングで内容が同一の第２データを供給するように前記第２供給手段を制御する
ことを特徴とする請求項２に記載の並列演算装置。
【請求項４】
前記第１供給手段はシフトレジスタで構成され、
前記第１供給手段は、
前記第１供給モードでは、前記第１格納手段から読み出された前記第１データをロードし、当該ロードした第１データを所定の回数だけシフトしながら前記複数の演算処理手段に供給し、
前記第２供給モードでは、前記第１格納手段から読み出された第１データをロードし、当該ロードした第１データをシフトすることなく前記複数の演算処理手段に供給する
ことを特徴とする請求項３に記載の並列演算装置。
【請求項５】
演算の種別に応じて、前記供給制御手段と前記読み出し制御手段とを制御する演算種別切り替え手段を更に有し、
前記演算種別切り替え手段は、
第１演算を行う場合に、前記供給制御手段に前記第１供給モードを実行させるとともに、前記読み出し制御手段に前記第１読み出しモードを実行させ、
第２演算を行う場合に、前記供給制御手段に前記第２供給モードを実行させるとともに、前記読み出し制御手段に前記第２読み出しモードを実行させる、
ことを特徴とする請求項２から４のいずれか１項に記載の並列演算装置。
【請求項６】
前記第１演算はフィルタ演算であることを特徴とする請求項５に記載の並列演算装置。
【請求項７】
前記第２演算は行列積演算であることを特徴とする請求項５または６に記載の並列演算装置。
【請求項８】
前記複数の演算処理手段それぞれの演算結果に対して非線形変換を行う変換処理手段を更に有し、
前記演算種別切り替え手段は、前記演算の種別に応じて前記変換処理手段に非線形変換を行うか否かを指示すること特徴とする請求項５から７のいずれか１項に記載の並列演算装置。
【請求項９】
前記演算種別切り替え手段は、前記変換処理手段に非線形変換を行わせる場合、当該非線形変換の種別を指示すること特徴とする請求項８に記載の並列演算装置。
【請求項１０】
前記演算処理手段は、乗算器と累積加算器とを有することを特徴とする請求項１から９のいずれか１項に記載の並列演算装置。
【請求項１１】
請求項１から１０のいずれか１項に記載の並列演算装置を有し、
当該並列演算装置を用いて処理すべき画像処理を行うことを特徴とする画像処理装置。
【請求項１２】
第１データと第２データとに基づいて複数の演算処理手段が並列して演算を行うステップと、
第１供給手段から前記第１データを前記複数の演算処理手段に供給するステップと、
第２供給手段から前記第２データを前記複数の演算処理手段に供給するステップと、
前記複数の演算処理手段それぞれに対して同一タイミングで内容の異なる前記第１データを供給するように前記第１供給手段を制御し、前記複数の演算処理手段それぞれに対して同一タイミングで内容が同一の第２データを供給するように前記第２供給手段を制御するステップと、を有し、
前記複数の演算処理手段の間で内容が同一の前記第１データが異なるタイミングで共有されるように前記第１データを供給させる第１供給モードと、
前記複数の演算処理手段に、複数のタイミングで、それぞれ内容が異なる前記第１データを供給させる第２供給モードと、
を実行することを特徴とする並列演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の演算処理を並列に行うための技術に関する。
【背景技術】
【０００２】
一般に画像処理でよく使用される処理としてコンボリューション（畳み込み）フィルタ処理が知られており、その代表的な処理は平滑化のためのガウスフィルタ処理やエッジ抽出のためのソーベルフィルタ処理等である。また、画像処理でよく使用される他の処理に行列積演算がある。行列積演算を伴う処理としては、主成分分析（ＰＣＡ）を用いた次元削減、アフィン変換、パーセプトロン、サポートベクターマシン等が知られている。このようなフィルタ演算や行列積演算では、多数の積和演算を行う必要があるため多くの処理時間を要する。汎用的なプロセッサを用いて処理時間を短縮するには、複数のプロセッサを用意することが必要となり、回路規模が大きくなるという問題がある。
【０００３】
そこで、回路規模や処理時間の観点から、専用のハードウェアを用いて積和演算を並列処理する技術が検討されている。特許文献１には、演算器間の接続関係を変更することで多種の演算を行う技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−３８７５８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１で開示されている技術では、データの入力から出力までの間に演算器が直列に並ぶ経路があり、ある演算器の出力を他の演算器に入力している。つまり、最終的な出力を得るまでに複数の演算器を経由する必要があるため、複数の積和演算を高速に処理することが難しいという問題があった。そこで、本発明は、複数の積和演算を高速に処理できるようにすることを目的とする。
【課題を解決するための手段】
【０００６】
以上の課題を解決するために、本発明は、第１データと第２データとに基づいて並列して演算を行う複数の演算処理手段と、前記第１データを前記複数の演算処理手段に供給するための第１供給手段と、前記第２データを前記複数の演算処理手段に供給するための第２供給手段と、前記複数の演算処理手段それぞれに対して同一タイミングで内容の異なる前記第１データを供給するように前記第１供給手段を制御し、前記複数の演算処理手段それぞれに対して同一タイミングで内容が同一の第２データを供給するように前記第２供給手段を制御する供給制御手段と、を有し、前記供給制御手段は、前記複数の演算処理手段の間で内容が同一の前記第１データが異なるタイミングで共有されるように前記第１データを供給させる第１供給モードと、前記複数の演算処理手段に、複数のタイミングで、それぞれ内容が異なる前記第１データを供給させる第２供給モードと、を実行することを特徴とする。
【発明の効果】
【０００７】
以上の構成によれば、本発明は、複数の積和演算を高速に処理できるようになる。
【図面の簡単な説明】
【０００８】
【図１】第１の実施形態に関わる並列演算装置のブロック図。
【図２】第１の実施形態に関わる第１データ供給部１０５の構成例を示す図。
【図３】第１の実施形態においてフィルタ演算を行う際のフローチャート。
【図４】第１の実施形態におけるフィルタカーネルを説明する図。
【図５】第１の実施形態のフィルタ演算における第１、第２データ格納部の模式図。
【図６】第１の実施形態において行列積演算を行う際のフローチャート。
【図７】第１の実施形態の行列積演算における第１、第２データ格納部の模式図。
【図８】第２の実施形態においてＤｅｅｐ  Ｌｅａｒｎｉｎｇの演算例を説明する図。
【図９】フィルタ処理における畳み込みフィルタの例を示す図。
【図１０】第２の実施形態に関わる並列演算装置のブロック図。
【図１１】第２の実施形態に関わる画像処理装置のブロック図。
【発明を実施するための形態】
【０００９】
［第１の実施形態］
本発明の第１の実施形態に関し、その概要について先ず説明する。本実施形態の並列演算装置は、種類の異なる複数の積和演算の処理を実行するものである。本実施形態が処理する積和演算の種類としては、上述したようにフィルタ処理における積和演算、行列積演算がある。
【００１０】
ここで、フィルタ処理における積和演算について説明する。図９は、畳み込みフィルタの例を示している。同図（Ａ）では、カーネルサイズが３×３フィルタカーネル１０を用いて処理対象画像の画像データ１１に対してフィルタ演算を行う場合の例を示している。この例では、下記の数式１に示す積和演算処理によりフィルタ演算結果が算出される。
【００１１】
【数１】
0006532334.tif 000002
ここで、「ｄｉ，ｊ」は座標（ｉ，ｊ）での処理対象画像画素値を示し、「ｆｉ，ｊ」は座標（ｉ，ｊ）でのフィルタ演算結果を示す。また、「ｗｓ，ｔ」は座標（ｉ＋ｓ−１，ｊ＋ｔ−１）に適用するフィルタカーネルの値（フィルタ係数）を示し、「ｃｏｌｕｍｎＳｉｚｅ」および「ｒｏｗＳｉｚｅ」はフィルタカーネルサイズを示す。
【００１２】
また、行列積演算では、ｍ×ｎ行列Ａとｎ×ｐ行列Ｂとの行列積の結果として算出されるｍ×ｐ行列Ｃは、下記の数式２で示される。
【００１３】
【数２】
0006532334.tif 000003
このとき行列Ｃの要素「ｃｉ，ｊ」は、次の数式３で算出される。
【００１４】
【数３】
0006532334.tif 000004
このように、一般的に行われる画像処理では、数式１や数式３の形で表わされる積和演算がよく使用される。ここで、フィルタ演算も行列積演算もどちらも積和演算（乗算結果を順次加算する演算）ではあるが、フィルタ演算では、同一のフィルタカーネルに対して、フィルタされる側のデータ（スキャンウインドウ内の画像データ）が部分的に重複する場合がある。つまり、フィルタ演算では、一部共通するデータを使用することがある。
【００１５】
図９（Ｂ）〜（Ｄ）に、フィルタ演算におけるデータが一部重複する様子を示す。図９（Ｂ）〜（Ｄ）は、フィルタカーネル１０により、処理対象の画像データ１１に対してフィルタ処理を行う際の模式図である。フィルタカーネル１０が図９（Ｂ）の位置にあるときと図９（Ｃ）の位置にあるときとでは、図９（Ｃ）において斜線で示す部分の画像データが重複している。また同様に、フィルタカーネル１０が図９（Ｃ）の位置にあるときと図９（Ｄ）の位置にあるときとでは、図９（Ｄ）において斜線で示す部分の画像データが重複している。このように、フィルタ演算では、同一のフィルタカーネルのデータに対して、フィルタされる方のデータ（画像データ）が部分的に重複する場合がある。
【００１６】
これに対して、行列積演算では、一方の行列のある行ベクトル（例えば、数式２の行列Ａの行ベクトル）に対して、他方の行列の列ベクトル（例えば数式２の行列Ｂの列ベクトル）に部分的な重複は発生せず、複数の列ベクトルに共通するデータはない。つまり、一方の行列のある行ベクトルと、他方の行列の複数の列ベクトルとで積和演算する場合でも、複数の列ベクトルに重複するデータはない。
【００１７】
以上のように、フィルタ演算と行列積演算とでは、積和演算の被演算データの一方を固定した場合に、他方の被演算データ間に重複部分があるかないかという差異が存在する。本実施形態では、種類の異なる積和演算を同一の並列演算装置を用いて行うため、並列に存在する演算処理部に対して演算対象のデータを供給する際、データの供給モード（供給順序）を切り替えることで、複数種類の積和演算を処理可能としている。本実施形態では、積和演算の例として、フィルタ演算と行列積演算の両方を単一の並列演算装置により処理する場合の例について説明する。
【００１８】
以下、図面を参照して、本実施形態の詳細について説明する。図１は、本実施形態に関わる並列演算装置のブロック図である。並列演算装置１０１には、積和演算を行う演算対象データが入力される。フィルタ演算を行う場合には、画像データとフィルタカーネルデータとが演算対象データとして入力される。行列積演算を行う時には、掛け合わせられる２つの行列データが演算対象データとして入力される。並列演算装置１０１は、これら演算対象データに対して積和演算を実行し、その演算結果を出力する。
【００１９】
並列演算装置１０１にこれから行われる積和演算の演算対象データが入力されると、第１データ格納部１０２、第２データ格納部１０３に演算対象データが格納される。フィルタ演算を行う場合、第１データ格納部１０２に画像データが格納され、第２データ格納部１０３にフィルタカーネルデータが格納される。行列積演算を行う場合、掛け合わされる行列データの一方（例えば数式２の行列Ａ）が第１データ格納部１０２に格納され、掛け合わされる行列データの他方（例えば数式２の行列Ｂ）が第２データ格納部１０３に格納される。本実施形態において、第１データ格納部１０２、第２データ格納部１０３はＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）で構成されているが、レジスタファイル（レジスタが複数集まったもの）等の他の手段で構成されていてもよい。
【００２０】
データ供給制御部１０４は、複数の演算処理部１０７それぞれに内容の異なる第１データ（第１データ格納部１０２から出力されるデータ）を同一タイミングで供給する。また同時に、複数の演算処理部１０７それぞれに内容が同一の第２データ（第２データ格納部１０３から出力されるデータ）を同一タイミングで供給する。データ供給制御部１０４は、このような機能を実現するために、複数の第１データそれぞれを対応する演算処理部１０７に供給する第１データ供給部１０５と、同一の第２データを全ての演算処理部１０７に供給する第２データ供給部１０６を有する。第１データ供給部１０５は、第１データ格納部１０２から出力される第１データを一時的に保持し、演算処理部１０７に供給する。本実施形態の第１データ供給部１０５は、データロードが可能なシフトレジスタで構成されている。
【００２１】
図２は、第１データ供給部１０５の構成例を示す図であり、４段のシフトレジスタを示している。このシフトレジスタには、４個の多ｂｉｔレジスタ８０１ａ〜８０１ｄが設けられており、これらがＣＬＯＣＫ信号に同期して所定ｂｉｔのデータをラッチする。レジスタ８０１ａ〜８０１ｄには、イネーブル信号（Ｅｎａｂｌｅ信号）が与えられ、レジスタ８０１ａ〜８０１ｄはＥｎａｂｌｅ信号が１の場合にＣＬＯＣＫ信号の立ち上がりでデータをラッチする。一方、Ｅｎａｂｌｅ信号が０の場合に前クロックでラッチしたデータをそのまま保持する。そのため、Ｅｎａｂｌｅ信号が０の場合には、レジスタ８０１ａ〜８０１ｄがラッチするデータの状態に遷移は生じない。
【００２２】
また、３個のセレクタ８０２ａ〜８０２ｃが設けられており、これらは、選択信号（Ｌｏａｄ信号）が０の場合に信号ＯＵＴｘ（ｘ：０〜２）を選択し、選択信号（Ｌｏａｄ信号）が１の場合に信号ＩＮｘ（ｘ：１〜３）を選択する。すなわち、セレクタ８０２ａ〜８０２ｃは、Ｌｏａｄ信号に応じてシフト動作又はロード動作を選択する。
【００２３】
多ｂｉｔレジスタ８０１ａ〜８０１ｄのビット幅は、第１データ格納部１０２に格納された画像データ、あるいは行列データのビット幅と同じであればよい（例えば、８ビット）。また、シフトレジスタの段数は『「演算処理部１０７の数（並列数）」＋「フィルタカーネルの水平方向サイズ」−１』であればよい。例えば、演算処理部１０７の数が４個、フィルタカーネルの水平方向サイズが３画素の場合、４＋３−１＝６段とすればよい。ただし、色々なサイズのフィルタカーネルでフィルタ演算を行うことが想定される場合には、想定される最大のフィルタカーネルの水平方向サイズに対する段数で構成しておくことが望ましい。
【００２４】
また、第１データ供給部１０５には、演算種別切り替え部１１０から演算種別信号が入力される。第１データ供給部１０５は、複数のモードでデータの供給を行うことができ、入力される演算種別信号に応じて、データ供給のモードを切り替える。ここでいうデータ供給モードとは、第１データ格納部１０２からロードしたデータをどのような順序、タイミングで演算処理部１０７に供給するのかということに相当する。
【００２５】
例えば、演算種別信号としてフィルタ演算を行う旨の指示が第１データ供給部１０５に入力された場合、第１データ供給部１０５は、複数の演算処理部１０７それぞれに対して同一のデータが異なるタイミングで供給されるように動作する。つまり、あるタイミングである演算処理部１０７に供給されたデータが次のタイミングで別の演算処理部１０７に供給される、というようなデータ供給モードで動作する。この場合、複数の演算処理部１０７間では、供給される同一データが異なるタイミングで共有されることになる。
【００２６】
一方、演算種別信号として行列積演算を行う旨の指示が第１データ供給部１０５に入力された場合、第１データ供給部１０５は複数の演算処理部１０７に対して同一のデータが供給されないように動作する。つまり、あるタイミングである演算処理部１０７に供給されたデータが、同じタイミングまたは別のタイミングで別の演算処理部１０７に供給されることがない、というようなデータ供給モードで動作する。この場合、複数の演算処理部１０７間で供給されるデータの共有は行われないことになる。
【００２７】
第２データ供給部１０６は、第２データ格納部１０３から出力される第２データを一時的に保持し、演算処理部１０７に供給する。本実施形態の第２データ供給部１０６は、レジスタで構成されている。このレジスタのビット幅は、第２データ格納部１０３に格納されるフィルタカーネル、行列データのビット幅と同じであればよい（例えば８ビット）。
【００２８】
演算処理部１０７は、第１データ供給部１０５から供給される第１データと第２データ供給部１０６から供給される第２データとを用いて積和演算を行い、その積和演算結果を出力する。並列演算装置１０１は、積和演算を並列に行うために、演算処理部１０７を複数有する。複数の演算処理部１０７それぞれに対して、第１データ供給部１０５から、それぞれ異なる第１データが同一タイミングで供給され、同時に、第２データ供給部１０６から同一の第２データが同一タイミングで供給される。そして、演算処理部１０７は、与えられた第１データ、第２データに対し積和演算を実行するため、乗算器１０８と累積加算器１０９とを備える。
【００２９】
演算種別切り替え部１１０は、外部から設定される演算種別設定に基づいて演算種別信号を出力する。例えば、並列演算装置が画像処理装置に組み込まれている場合には、画像処理装置がこれから行う画像処理に応じた演算種別が設定されることになる。これから行う演算がフィルタ演算の場合、演算種別切り替え部１１０には、その旨の情報が設定され、演算種別切り替え部１１０は、第１データ供給部１０５と読み出し制御部１１１に対してフィルタ演算用の動作モードで動作するように指示を出す。また、これから行う演算が行列積演算の場合、演算種別切り替え部１１０にその旨の情報が設定され、演算種別切り替え部１１０は、第１データ供給部１０５と読み出し制御部１１１に対して、行列積演算用の動作モードで動作するように指示を出す。
【００３０】
読み出し制御部１１１は、第１データ供給部１０５が第１データ格納部１０２からデータを読み出す際、その読み出しモードの制御を行う。ここでいう読み出しモードとは、第１データ格納部１０２のどこに格納されているデータを、どのような順番で、第１データ供給部１０５が読み出すのか、ということに相当する。
【００３１】
また、読み出し制御部１１１には、演算種別切り替え部１１０から演算種別信号が入力される。読み出し制御部１１１にフィルタ演算を指示する演算種別信号が入力されると、読み出し制御部１１１は、第１データ格納部１０２から、フィルタ演算の過去の積和演算のために読み出したデータの一部分を重複して、再度読み出すようなモードに設定する。つまり、一連のフィルタ演算の過程で過去に実行された積和演算のために第１データ格納部１０２から読み出されたデータの一部分を含むデータを、別の積和演算のために読み出す、というような読み出しモードを設定する。
【００３２】
一方、読み出し制御部１１１に行列積演算を指示する旨の演算種別信号が入力されると、読み出し制御部１１１は、行列積演算の過去の積和演算のために読み出したデータは重複して再度読み出すことがないようなモードに設定する。つまり、読み出し制御部１１１は、新しいデータを読み出すか過去の演算と同じデータを読み出す、というような動作モードの設定を行う。
【００３３】
図３は、本実施形態の並列演算装置によってフィルタ演算を行う際の処理手順を示すフローチャートである。まず、ステップＳ３０１において、演算種別切り替え部１１０の演算種別の設定が行われる。ここでは、演算種別切り替え部１１０の演算種別としてフィルタ演算が設定される。続いてステップＳ３０２において、フィルタカーネルデータは第２データ格納部１０３に格納される。図４は、本実施形態におけるフィルタカーネルを説明する図である。同図には、フィルタカーネル１０および演算対象の画像データ１１を示している。フィルタカーネル１０の各画素のデータはｗｉ，ｊで表わされ、画像データ１１の各画素のデータはｄｉ，ｊで表わされる（ｉ，ｊは座標位置を示すインデックスである）。フィルタカーネル１０と画像データ１１は、演算開始前、例えば本実施形態の並列演算装置の外部（並列演算装置を内蔵する画像処理装置の格納手段など）に保持されている。
ここで、上述したステップＳ３０２において、フィルタカーネルデータが第２データ格納部１０３に格納される処理について説明する。図５は、フィルタ演算において、第１データ格納部１０２、第２データ格納部１０３にデータが格納される様子を示す図であり、図５（Ａ）が第２データ格納部１０３でのデータ格納の様子を示している。本実施形態の第２データ格納部１０３はＲＡＭで構成されており、ステップＳ３０２では、図５（Ａ）に示すように各アドレスの領域にフィルタカーネルデータが格納される。
【００３４】
続いてステップＳ３０３において、演算処理の対象画像データが第１データ格納部１０２に格納される。図５（Ｂ）は、第１データ格納部１０２でのデータ格納の様子を示している。本実施形態の第１データ格納部１０２はＲＡＭで構成され、ステップＳ３０３では、図５（Ｂ）に示すように画像データ１１がラスタ順にＲＡＭに格納される。つまり、アドレス１の領域にｄ１，１〜ｄ１，４のデータが格納され、アドレス２の領域にｄ１，５〜ｄ１，８のデータが格納される。また、アドレスｐの領域にｄ２，１〜ｄ２，４のデータが格納され、アドレスｑの領域にｄ３，１〜ｄ３，４のデータが格納され、アドレスｒの領域にｄ４，１〜ｄ４，４のデータが格納される。
【００３５】
ここで、第１データ格納部１０２を構成するＲＡＭの形状（幅）について説明する。一般的にＲＡＭの容量が同じであったとしても、幅が広く深さが狭い形状であれば、幅が狭く深さが深い形状であるより回路規模的に大きくなる。本実施形態の第１データ格納部には、演算処理部１０７の数（並列度）に等しいデータ数が一度に読み出せる幅があることが、処理速度の観点からは望ましい。例えば並列度が４であれば、図５（Ｂ）に示すように４個のデータを同一アドレスに格納できるだけの幅を持ったＲＡＭであることが好適である。
【００３６】
次に、ステップＳ３０４において、第１データ格納部１０２から第１データ供給部１０５にデータを出力する。本実施形態の第１データ供給部１０５はシフトレジスタで構成されており、第１データ格納部１０２から出力されたデータを一時的に保持する。具体的には、まず第１データ格納部１０２からアドレス１、アドレス２にあるデータを出力し、第１データ供給部１０５で保持する。この第１データ格納部１０２からのデータの読み出しの制御は、読み出し制御部１１１により行われる。ここで、図５（Ｃ）に第１データ供給部１０５であるシフトレジスタの模式図を示す。同図において、シフトレジスタの段数（ここでは６段）は、第１データ格納部１０２の幅（本実施形態ではデータ４個分）より広いので、２つのアドレスから読み出したデータ（２ワード）でロードが行われる。
【００３７】
続いてステップＳ３０５において、第２データ格納部１０３から第２データ供給部１０６にデータを出力する。本実施形態の第２データ供給部１０６はレジスタで構成されており、第２データ格納部１０３から出力されたデータを一時的に保持する。図５（Ｄ）に第２データ供給部１０５であるシフトレジスタの模式図を示す。同図に示すように、第２データ格納部１０３からアドレス１にあるデータを出力し、第２データ供給部１０６で保持する。続くステップＳ３０６において、各演算処理部１０７にて並列に積和演算が行われる。
【００３８】
そして、ステップＳ３０７、Ｓ３０８、Ｓ３０９において繰り返し演算を行うことで積和演算が継続される。つまり、第１データ供給部１０５のシフトレジスタをシフトしつつ、同時に、第２データ格納部１０３からの次のカーネルデータ出力することで、各演算処理部１０７にて並列に積和演算が行われる（フィルタカーネルの水平方向の積和演算）。
【００３９】
同様にステップＳ３１０、Ｓ３１１において繰り返し演算を行うことで積和演算が継続され、フィルタカーネルの水平方向の積和演算を垂直方向のサイズに相当する回数を繰り返して、最終結果が得られる。
【００４０】
以上の処理フローにより、本実施形態のフィルタ演算は実行される。なお、次の水平行のフィルタ演算を行う場合は、ステップＳ３０４から実行すればよい。その他の位置のフィルタ演算を行う場合も同様である。特に、次の水平行のフィルタ演算を行う場合、ステップＳ３０４において、読み出し制御部１１１は、第１データ格納部１０２に対して、フィルタ演算の過去の積和演算のために読み出したデータの一部分が重複するようデータを再度読み出すように制御する。例えば、前回の積和演算では、アドレス１、アドレス２、アドレスｐ、アドレスｐ＋１、アドレスｑ、アドレスｑ＋１に格納されているデータを読み出したとする。これに対して、今回の積和演算では、アドレスｐ、アドレスｐ＋１、アドレスｑ、アドレスｑ＋１、アドレスｒ、アドレスｒ＋１に格納されているデータを読み出すようにする。この場合、前回読み出したデータ（６ワード）のうちの一部（４ワード）が重複して含まれている。このような一部データの重複は、さらに次の水平行のフィルタ演算を行う場合にも発生する。このように、演算種別としてフィルタ演算が指定された場合、読み出し制御部１１１は、以下のように動作する。すなわち、一連のフィルタ演算の過程で過去に実行されたある積和演算のために、第１データ格納部１０２から読み出されたデータの一部分を重複して含むデータを、別の積和演算のために読み出す、というような読み出しモードで動作する。
【００４１】
また、第１データ供給部１０５では、保持しているデータをシフトしながら演算処理部１０７に供給する。つまり、演算種別としてフィルタ演算が指示されている場合、第１データ供給部１０５は、同一のデータを異なるタイミングで、異なる演算処理部１０７に対して供給するよう動作する。
【００４２】
続いて、本実施形態の並列演算装置１０１により行列積演算を行う際の処理フローについて説明を行う。ここでは、上述した数式２の積和演算を行う場合について説明する。図６は、本実施形態の並列演算装置によって行列積演算を行う際の処理手順を示すフローチャートである。
【００４３】
まず、ステップＳ６０１において、演算種別切り替え部１１０に対して演算種別の設定が行われる。ここでは、行列積演算が演算種別として設定される。次に、ステップＳ６０２において、行列Ｂが第２データ格納部１０３に格納される。図７は、行列積演算において、第１データ格納部１０２、第２データ格納部１０３にデータが格納される様子を示す図であり、図７（Ａ）は第２データ格納部１０３でのデータ格納の様子を示している。本実施形態の第２データ格納部１０３はＲＡＭで構成されており、図７（Ａ）に示すように、各アドレスの領域に行列Ｂの各要素データが格納されている。
【００４４】
続いてステップＳ６０３において、行列Ａが第１データ格納部１０２に格納される。図７（Ｂ）は第１データ格納部１０２でのデータ格納の様子を示している。本実施形態の第１データ格納部１０２はＲＡＭで構成されており、図７（Ｂ）に示すように、行列ＡのデータがＲＡＭに格納されている。
【００４５】
続いて、ステップＳ６０４において、第１データ格納部１０２から第１データ供給部１０５にデータを出力する。まず、第１データ格納部１０２からアドレス１にあるデータを出力し、第１データ供給部１０５で保持する。この第１データ格納部１０２からのデータの読み出しの制御は、読み出し制御部１１１により行われる。図７（Ｃ）は、第１データ供給部１０５に対応するシフトレジスタの模式図である。シフトレジスタの段数（ここでは６段）は、第１データ格納部１０２の幅（データ４個分）より広いが、行列積演算では異なる演算処理部１０７でデータの共有は行われない。つまり、シフトレジスタでのシフト動作は行われないので、演算処理部１０７の数分のデータ（本実施形態ではデータ４個分）がシフトレジスタに格納されていればよい。
【００４６】
続いて、ステップＳ６０５において、第２データ格納部１０３から第２データ供給部１０６にデータを出力する。本実施形態の第２データ供給部１０６はレジスタで構成されており、第２データ格納部１０３から出力されたデータを一時的に保持する。図７（Ｄ）は、第２データ供給部１０６に相当するレジスタの模式図である。まず、第１データ格納部１０３からアドレス１にあるデータを出力し、出力されたデータを第２データ供給部１０６で保持する。
【００４７】
続いて、ステップＳ６０６にて、各演算処理部１０７にて並列に積和演算が行われる。そして、ステップＳ６０７、Ｓ６０８、Ｓ６０９において繰り返し演算を行うことで、積和演算が継続される。つまり、第１データ格納部１０２からの次のデータが出力されると、第２データ格納部１０３から次のカーネルデータ出力することで、各演算処理部１０７にて並列に積和演算が行われる。この処理が、所定回数（本実施形態では行列Ａの列次元数であるｎ回）だけ積和演算が行われることにより、最終結果が得られる。
【００４８】
以上の処理フローにより、本実施形態に係る行列積演算が実行される。なお、行列Ａの別の水平行の行列積演算を行う場合は、ステップＳ６０４から再度実行すればよい。その他の位置の行列積演算を行う場合も同様である。行列Ａの別の水平行の行列積演算を行う場合、ステップＳ６０４において、読み出し制御部１１１は、第１データ格納部１０２に対して、行列積演算の過去の積和演算のために読み出したデータに続くデータを読み出すように動作する。つまり、前回の積和演算では、アドレス１、アドレス２、…、アドレスｎに格納されているデータを読み出したのに対して、今回の積和演算では、アドレスｎ＋１、アドレスｎ＋２、…、アドレス２ｎに格納されているデータを読み出す。このように、行列Ａのある水平行のデータを読み出すにあたり、前回読み出したデータと今回読み出したデータに重複はない。
【００４９】
また、行列Ｂの別の垂直列の行列積演算を行う場合も、ステップＳ６０４から再度実行すればよい。この場合、ステップＳ６０４において、読み出し制御部１１１は、第１データ格納部１０２に対して、行列積演算の過去の積和演算のために読み出したデータと同じデータを読み出すように動作する。ただし、ステップＳ６０５における第２データ格納部から読み出されるデータは過去の積和演算に用いたデータと異なる。例えば、過去の積和演算で、第１データ格納部１０２からも第２データ格納部１０３からも、アドレス１、アドレス２、…、アドレスｎに格納されているデータを読み出したとする。しかし、今回は、第１データ格納部１０２は同じデータを読み出すことを行うが、第２データ格納部１０３はアドレスｎ＋１、アドレスｎ＋２、…、アドレス２ｎに格納されているデータを読み出す。このように、演算種別として行列積演算が指定された場合、読み出し制御部１１１は、以下のように動作する。すなわち、一連の行列積演算の過程で過去に実行されたある積和演算のために、第１データ格納部１０２から読み出されたデータと異なるデータ、あるいは同じデータを、別の積和演算のために読み出す、というような読み出しモードで動作する。
【００５０】
上述の行列積演算の処理フローにおいて説明したように、第１データ供給部１０５では、保持しているデータに対するシフト処理は行わずに、演算処理部１０７にデータを供給する。そのため、演算種別として行列積演算が指示されている場合、複数の演算処理部１０７間でデータの共有が行われることはない。また、第２データ格納部１０３から読み出されるデータが過去の積和演算の際のデータと同じであれば、読み出し制御部１１１は、以下のように動作する。すなわち、一連の行列積演算の過程で過去に実行されたある積和演算と違うデータを別の積和演算のために読み出す、という読み出しモードで動作する。
【００５１】
以上のように、本実施形態の並列演算装置は、フィルタ演算では、同一のフィルタカーネルに対して、演算対象の画像データを複数の演算処理部１０７間で部分的に共有する。一方、行列積演算では、行列Ｂの同一の列ベクトルに対して、行列Ａの行ベクトルのデータを共有することはない。このような演算処理の相違点に応じて、第１データ供給部１０５から演算処理部１０７へのデータ供給のモードを複数用意するとともに、第１データ格納部１０２から第１データ供給部１０５へのデータ読み出しモードも複数用意する。そして、これらのモードを切り替えることにより、異なる種類の積和演算を実行することが可能である。これにより、本実施形態によれば、最終的な出力を得るまでに複数の演算器を経由する必要がなく、複数の積和演算を高速に処理できるようになる。
【００５２】
［第２の実施形態］
次に、本発明の第２の実施形態について説明する。本実施形態は、上述の第１の実施形態の並列演算装置の機能に加えて、非線形変換処理部を追加したものである。なお、第１の実施形態において既に説明をした構成については同一の符号を付し、その説明は省略する。
【００５３】
画像認識処理では、フィルタ演算結果や積和演算結果に対して非線形変換処理を行うことがよく行われている。例えばＣＮＮ（Ｃｏｎｖｏｌｕｔｉｏｎａｌ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋｓ）では、フィルタ演算（コンボリューション演算）に対してシグモイド変換（あるいはハイパボリックタンジェント変換）を行うのが一般的である。また行列積で表現できるパーセプトロンの結果に対してソフトマックス関数を施して、入力データの多クラス分類を行うこともよく行われている。そのため、並列演算装置が非線形変換処理部を備えることで、より柔軟な処理に対応することが可能になり、並列演算装置としての有用性が増す。
【００５４】
本実施形態では、並列演算装置によりＤｅｅｐ  Ｌｅａｒｎｉｎｇの処理を行う場合を例に説明を行う。Ｄｅｅｐ  Ｌｅａｒｎｉｎｇは、現在研究開発が盛んに行われている技術分野で、一般的には、入力データ（例えば画像データ）に対して、階層的な処理（ある階層の処理結果をその上位の階層の処理の入力とする処理）を行うものを指す。ここでは、典型的なＤｅｅｐ  Ｌｅａｒｎｉｎｇとして、画像からの特徴量抽出処理にＣＮＮを用い、抽出した特徴量を用いた識別処理にパーセプトロンに代表されるような行列積を用いるような構成を取り上げ、その演算を並列演算装置で行う例について説明する。この特徴量抽出処理は、ＣＮＮを何度も繰り返す多階層処理であることが多く、また識別処理も全結合の多階層のパーセプトロンが用いられることがある。
【００５５】
ここで、図８を用いてＤｅｅｐ  Ｌｅａｒｎｉｎｇの演算例について説明する。図８は、入力層（入力画像）８０１に対してＣＮＮにより特徴抽出を行い、特徴量８０７を取得し、その特徴量に基づき識別処理を行い、識別結果８１４を得るような処理を示している。入力画像８０１から特徴量８０７を取得するまでにＣＮＮを何度も（ここでは３度）繰り返している。また、特徴量８０７に対して全結合のパーセプトロン処理を行い、最終的な識別結果８１４を得ている。
【００５６】
まず、前半のＣＮＮ処理について説明する。図８において、入力層８０１は、画像データに対してＣＮＮ演算を行う際の、ラスタスキャンされた所定サイズの画像データを示す。特徴面８０３ａ〜８０３ｃは、第１段目の階層８０８の特徴面を示す。特徴面とは、所定の特徴抽出フィルタ（コンボリューションフィルタ演算および非線形処理）の検出結果を示すデータ面である。ラスタスキャンされた画像データに対する検出結果であるため、検出結果も面で表される。特徴面８０３ａ〜８０３ｃは、入力層８０１に対するコンボリューションフィルタ演算および非線形処理により生成される。例えば、特徴面８０３ａは、フィルタカーネル８０２１ａを用いたコンボリューションフィルタ演算および演算結果の非線形変換により得られる。なお、図８中のフィルタカーネル８０２１ｂおよび８０２１ｃは、各々特徴面８０３ｂおよび８０３ｃを生成する際に使用されるフィルタカーネルである。
【００５７】
次に、第２段目の階層８０９の特徴面８０５ａを生成する演算について説明する。特徴面８０５ａは、前段の階層８０８の３つの特徴面８０３ａ〜８０３ｃと結合している。そのため、特徴面８０５ａのデータを算出する場合、特徴面８０３ａに対してはフィルタカーネル８０４１ａで示すカーネルを用いたコンボリューションフィルタ演算を行い、この結果を保持する。同様に、特徴面８０３ｂおよび８０３ｃに対しては、各々フィルタカーネル８０４２ａおよび８０４３ａのコンボリューションフィルタ演算を行い、これらの結果を保持する。これらの３種類のフィルタ演算の終了後、それぞれの結果を加算し、非線形変換処理を行う。以上の処理を画像全体に対して処理することにより、特徴面８０５ａを生成する。
【００５８】
同様に、特徴面８０５ｂの生成の際には、前段の階層８０８の特徴面８０３ａ〜８０３ｃに対するフィルタカーネル８０４１ｂ、８０４２ｂおよび８０４３ｂによる３つのコンボリューションフィルタフィルタ演算を行う。また、第３段目の階層８１０の特徴面８０７の生成の際には、前段の階層８０９の特徴面８０５ａ〜８０５ｂに対するフィルタカーネル８０６１および８０６２による２つのコンボリューションフィルタフィルタ演算を行う。
【００５９】
次に、後半のパーセプトロン処理について説明する。図８には、２階層のパーセプトロンを示す。パーセプトロンは、入力特徴量のそれぞれ要素に対する重み付き和を非線形変換したものである。したがって、特徴量８０７に対して行列積を行い、その結果に非線形変換を行った結果８１３を得ることができる。さらに同様の処理を繰り返せば、最終的な識別結果８１４を得ることができる。
【００６０】
図１０は、本実施形態の並列演算装置のブロック図である。並列演算装置１０１は、第１の実施形態で説明した構成に加えて、演算結果格納部１００１および非線形変換処理部１００２を備える。なお、本実施形態の演算種別切り替え部１１０は非線形変換切り替え信号を出力し、非線形変換切り替え信号により、非線形変換処理を実行するか否か、実行する場合にはどのような非線形変換を行うかを、非線形変換処理部１００２に対して指示する。非線形変換切り替え信号により非線形変換を行うことを指示した場合、並列演算装置１０１は、最終的な演算結果として非線形変換された積和演算結果を出力する。なお、演算種別切り替え部１１０に非線形変換の処理が設定されれば、並列演算装置１０１は、非線形変換以外の結果が出力でき、例えば、第１の実施形態のように積和演算結果を出力することができる。
【００６１】
演算結果格納部１００１は、複数の演算処理部１０７から出力される複数の積和演算結果を一時格納し、順次、非線形変換処理部１００２に出力する機能を有する。演算結果格納部１００１は、ロード可能なシフトレジスタ等で構成される。
【００６２】
非線形変換処理部１００２は、入力される積和演算結果に対して、例えばシグモイド変換等の非線形変換処理を行う。非線形変換は、並列演算装置の格納手段に格納されたルックアップテーブルを用いること等により実現される。非線形変換処理部１００２には演算種別切り替え部１１０から非線形変換切り替え信号が入力され、入力される非線形変換切り替え信号に基づいてルックアップテーブルを書き換えることで、種々の非線形変換処理が実行される。また、非線形変換切り替え信号により非線形変換を行わないという指示が入力された場合には、非線形変換処理部１００２による非線形変換処理はスキップされる。
【００６３】
本実施形態の並列演算装置１０１では、演算処理部１０７により算出された積和演算結果を演算結果格納部１００１で一度保持してから、非線形変換処理部１００２に入力している。これは、一般に非線形変換処理部１００２は回路規模が大きく、複数用意することが困難な場合が多いためである。複数の積和演算結果を一つの非線形変換処理部１００２で逐次処理するために、並列演算装置１０１に演算結果格納部１００１を備えるような構成を例示している。しかしながら、非線形変換処理部１００２を演算処理部１０７と同数用意できるのであれば、演算結果格納部１００１は必ずしも必要としない。
【００６４】
続いて、上述の並列演算装置１０１を備える本実施形態の画像処理装置について説明する。図１１は、本実施形態の画像処理装置２００のブロック図である。画像処理装置２００は、画像入力部２０、並列演算装置１０１、ブリッジ２４、前処理部２５、ＤＭＡＣ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ）２６およびＲＡＭ２１を備える。さらに、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２７、ＲＯＭ２８およびＲＡＭ２９を備えている。そして、画像入力部２０、並列演算装置１０１、前処理部２５およびＤＭＡＣ２６は画像バス２３を介して互いに接続され、ＣＰＵ２７、ＲＯＭ２８およびＲＡＭ２９はＣＰＵバス３０を介して互いに接続されている。また、ブリッジ２４により画像バス２３とＣＰＵバス３０との間のデータ転送が可能となっている。
【００６５】
画像入力部２０は、光学系、ＣＣＤ（Ｃｈａｒｇｅ−Ｃｏｕｐｌｅｄ  Ｄｅｖｉｃｅｓ）またはＣＭＯＳ（Ｃｏｍｐｌｅｍｅｎｔａｒｙ  Ｍｅｔａｌ  Ｏｘｉｄｅ  Ｓｅｍｉｃｏｎｄｕｃｔｏｒ）センサ等の光電変換デバイス等により構成されている。さらに、センサを制御するドライバー回路、ＡＤコンバータ、各種画像補正を司る信号処理回路およびフレームバッファ等も設けられている。画像入力部２０は、カメラ以外の装置、媒体から入力される画像データや、画像処理装置２００に予め保存された画像データを対象画像として処理するものであってもよい。並列演算装置１０１は、階層的ＣＮＮ演算と行列積演算とを実行する。ＲＡＭ２１は、並列演算装置１０１の演算作業バッファとして使用される。
【００６６】
前処理部２５は、画像認識処理を効果的に行うための種々の前処理を行う。例えば、色変換処理およびコントラスト補正処理等の画像データ変換処理をハードウェアで処理する。ＤＭＡＣ２６は、画像バス２３上の画像入力部２０、並列演算装置１０１および前処理部２５とＣＰＵバス３０との間のデータ転送を司る。ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）２８は、ＣＰＵ２７の動作を規定する命令およびパラメータデータを格納しており、ＣＰＵ２７は、これらを読み出しつつ画像処理装置２００の全体の動作を制御する。その際、ＲＡＭ２９がＣＰＵ２７の作業領域として使用される。なお、ＣＰＵ２７はブリッジ２４を介して画像バス２３上のＲＡＭ２１にアクセスすることも可能である。
【００６７】
前述したように、Ｄｅｅｐ  ＬｅａｒｎｉｎｇはＣＮＮを何層か繰り返すことで特徴量を抽出し、抽出した特徴量に基づいて識別処理を行い、最終結果を得る処理である。本実施形態の画像処理装置２００において、Ｄｅｅｐ  Ｌｅａｒｎｉｎｇを実行する場合には、まず並列演算装置１０１に対して演算種別設定としてＣＮＮを設定する。ＣＮＮは、コンボリューションフィルタ演算の結果に対して非線形処理（ここではシグモイド変換とする）を施す演算である。そのため、演算種別切り替え部１１０は、演算種別信号としてフィルタ演算という情報を出力するとともに、非線形切り替え信号としてシグモイド変換という情報を出力する。
【００６８】
演算種別信号としてフィルタ演算という情報が出力された場合の、並列演算装置１０１の処理の詳細は第１の実施形態で既に説明しているので、ここでは割愛する。第１の実施形態のようにして算出されたフィルタ演算結果は演算結果格納部１００１に出力され、それに対して非線形変換が施されて、その結果が出力される。このような非線形処理付きのフィルタ演算をフィルタカーネルを変更しながら繰り返すことでＤｅｅｐ  Ｌｅａｒｎｉｎｇによる特徴量（ベクトルデータ）の抽出が行われる。
【００６９】
続いて、出力された特徴量（ベクトルデータ）に対して識別処理を行う。この場合、並列演算装置１０１に対して演算種別設定として識別処理を設定する。本実施形態で行われる識別処理は、特徴量を用いた行列積演算の結果に対して非線形処理（ここではソフトマックス変換とする）を施す演算であるので、演算種別切り替え部１１０から演算種別信号として行列積演算という情報が出力される。また、非線形切り替え信号としてソフトマックス変換という情報が出力される。
【００７０】
演算種別信号として行列積演算という情報が出力された場合の、並列演算装置１０１の処理の詳細は第１の実施形態で既に説明しているので、ここでは割愛する。第１の実施形態のようにして算出された行列積演算結果を演算結果格納部１００１に出力し、それに非線形変換を施すことにより、識別結果が出力される。この識別結果を用いて最終的な結果（例えば入力画像中に存在する物体のカテゴリ）が得られる。
【００７１】
以上のように、本実施形態の画像処理装置２００は、並列演算装置１０１を備え、種々の演算から構成されているＤｅｅｐ  Ｌｅａｒｎｉｎｇの処理を単一の並列演算装置で実行することが可能になる。
【００７２】
［その他の実施形態］
上述の説明では、第１データ供給部１０５をシフトレジスタにより構成する例について説明したが、本発明の第１データ供給部１０５はシフトレジスタに限られるものではない。同一のデータを異なるタイミングで異なる演算処理部１０７に供給でき、かつ演算種別信号に応じて同一のデータが複数の演算処理部１０７に供給されることの許可、禁止を切り替えられる手段であれば、第１データ供給部１０５の構成として採用できる。例えば、複数のレジスタの出力をセレクタで選択するような構成とすることができる。この場合、セレクタの制御信号を順次切り替えることで、シフトレジスタと同様の動作をさせることができる。また、セレクタの信号を固定することで、同一のデータを複数の演算処理部１０７に供給することのないように制御することもできる。
【００７３】
また、本発明は、複数の機器から構成されるシステムに適用しても、１つの機器からなる装置に適用してもよい。本発明は上記実施例に限定されるものではなく、本発明の趣旨に基づき種々の変形（各実施例の有機的な組合せを含む）が可能であり、それらを本発明の範囲から除外するものではない。即ち、上述した各実施例及びその変形例を組み合わせた構成も全て本発明に含まれるものである。
【符号の説明】
【００７４】
１０１  並列演算装置
１０２  第１データ格納部
１０３  第２データ格納部
１０４  データ供給制御部
１０５  第１データ供給部
１０６  第２データ供給部
１０７  演算処理部
１０８  乗算器
１０９  累積加算器
１１０  演算種別切り替え部
１１１  読み出し制御部
【図１】
0006532334.tif 000005
【図２】
0006532334.tif 000006
【図３】
0006532334.tif 000007
【図４】
0006532334.tif 000008
【図５】
0006532334.tif 000009
【図６】
0006532334.tif 000010
【図７】
0006532334.tif 000011
【図８】
0006532334.tif 000012
【図９】
0006532334.tif 000013
【図１０】
0006532334.tif 000014
【図１１】
0006532334.tif 000015