JP2018032190A - 演算回路、その制御方法及びプログラム - Google Patents

演算回路、その制御方法及びプログラム Download PDF

Info

Publication number
JP2018032190A
JP2018032190A JP2016163408A JP2016163408A JP2018032190A JP 2018032190 A JP2018032190 A JP 2018032190A JP 2016163408 A JP2016163408 A JP 2016163408A JP 2016163408 A JP2016163408 A JP 2016163408A JP 2018032190 A JP2018032190 A JP 2018032190A
Authority
JP
Japan
Prior art keywords
data
multipliers
processing
filter
multiplication
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2016163408A
Other languages
English (en)
Other versions
JP6800656B2 (ja
Inventor
加藤 政美
Masami Kato
政美 加藤
山本 貴久
Takahisa Yamamoto
貴久 山本
伊藤 嘉則
Yoshinori Ito
嘉則 伊藤
野村 修
Osamu Nomura
修 野村
克彦 森
Katsuhiko Mori
克彦 森
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Canon Inc filed Critical Canon Inc
Priority to JP2016163408A priority Critical patent/JP6800656B2/ja
Publication of JP2018032190A publication Critical patent/JP2018032190A/ja
Application granted granted Critical
Publication of JP6800656B2 publication Critical patent/JP6800656B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Advance Control (AREA)
  • Complex Calculations (AREA)
  • Image Processing (AREA)

Abstract

【課題】 演算回路の並列度を変更することができず、フィルタ演算処理に用いるファイルのサイズによって消費電力が無駄になることがある。【解決手段】 演算回路は、互いに異なる参照データと共通の係数データとの乗算を繰り返し行うことによりフィルタ演算処理を実行する複数の乗算器と、前記複数の乗算器に対して保持装置に保持された互いに異なる前記参照データを供給する第1のデータ供給手段と、複数の乗算器に対して前記保持装置に保持された共通の前記係数データを供給する第2のデータ供給手段と、前記乗算器が前記乗算を繰り返し実行する時間は前記フィルタ演算処理のフィルタサイズが大きくなるほど増加し、前記フィルタサイズが所定値以下である場合に、前記複数の乗算器のうち、一部の前記乗算器に対して前記乗算を実行させ、他の乗算器に対して前記乗算を実行させないように制御する制御手段と、を有することを特徴とする。【選択図】 図2

Description

本発明は、パターン認識等に使用される演算回路、その制御方法及びプログラムに関するものである。
パターン認識装置などの画像処理装置にニューラルネットワークの手法が広く応用されている。ニューラルネットワークの中でも、Convolutional Neural Networks(以下CNNと略記する)と呼ばれる演算手法が認識対象の変動に対して頑健なパターン認識を可能にする手法として注目されている。例えば、特許文献1では画像データを用いた顔認識に適用した例が提案されている。
図3は簡単なCNN処理の例を示すネットワーク構成図である。入力層301は、画像データに対してCNN処理を行う場合、ラスタスキャンされた所定サイズの画像データに相当する。特徴面303a〜303cは第一階層308の特徴面を示す。特徴面とは、所定の特徴抽出演算(コンボリューション演算及び非線形処理)の処理結果に相当するデータ面である。特徴面は上位階層で所定の対象を認識するための特徴抽出結果に相当し、ラスタスキャンされた画像データに対する処理結果であるため、処理結果も面で表す。CNNでは多数の特徴面を構成するデータ群が演算処理を介して階層的に関係付けられている。
特徴面303a〜303cは、入力層301に対応するコンボリューション演算及び非線形処理により生成されるものである。例えば、特徴面303aは、フィルタカーネル3021aに模式的に示す2次元のコンボリューション演算とその演算結果の非線形変換により生成する。例えば、フィルタカーネル(フィルタ係数マトリクス)のサイズがcolumnSize×rowSizeであるコンボリューション演算は以下の式に示すような積和演算により処理する。
Figure 2018032190

ここで、「input(x,y)」は座標(x、y)での参照画素値を示し、「output(x,y)」は座標(x、y)での演算結果を示す。また、「weight(column,row)」は座標(x+column、y+row)での重み係数を示し、「columnSize」及び「rowSize」はカーネルサイズを示す。
CNN処理では複数のフィルタカーネルを画素単位で走査しながら積和演算を繰り返し、最終的な積和結果を非線形変換することで特徴面を生成する。なお、特徴面303aは前階層の一つの画像データから算出されるので、と結合数が1である。特徴面303aを算出するためのカーネル3021aは1つである。また、カーネル3021b、カーネル3021cはそれぞれ特徴面303b、303cを算出する際に使用されるフィルタカーネルである。以下、フィルタカーネルをフィルタ又はカーネルと略称することがある。また、フィルタカーネルのサイズは、カーネルサイズ又はフィルタサイズと略称することがある。
図4はCNN処理における特徴面305aを算出する例である。特徴面305aは前階層308の3つの特徴面303a〜cから算出され、特徴面303a〜cと結合している。特徴面305aのデータを算出する場合、まず、特徴面303aに対しては模式的に示すカーネル3041aを用いたコンボリューション演算を行い、その結果を累積加算器401に保持する。同様に特徴面303b、特徴面303cに対してはそれぞれカーネル3042a、3043aのコンボリューション演算を行い、その結果を累積加算器401に累積加算する。
3種類のカーネルを用いたコンボリューション演算の終了後、ロジスティック関数や双曲正接関数(tanh関数)を利用した非線形変換処理402を行う。以上の処理を画像全体に対して1画素ずつ走査しながら処理する事で、特徴面305aを生成する。図4の処理と同様に、特徴面305bは前階層308の3つの特徴面のそれぞれに対してカーネル3041b、カーネル3042b及びカーネル3043bのコンボリューション演算を用いて算出する。更に、特徴面307は前階層309の特徴面305a〜bのそれぞれに対してカーネル3061及びカーネル3062のコンボリューション演算を用いて算出する。
なお、各カーネルの係数はパーセプトロン学習やバックプロパゲーション学習等の一般的な手法を用いて予め学習により決定されているものとする。例えば、パターン認識等においては、10×10以上の大きなサイズのカーネルを使用してコンボリューション演算することがある。
このように、CNN処理では多数のカーネルのコンボリューション演算を繰り返すため、膨大な回数の積和演算が必要となる。
コンボリューション演算の高速化を目的として、例えば特許文献2では複数の積和演算ユニットに共通の重み係数を設定し、入力データをシフトさせながら並列に演算することで高速にコンボリューション演算を実行する装置が提案されている。
また、特許文献3では、肌色情報を利用して顔検出処理を行う顔候補領域を限定する事で、全体の処理を高速化する手法が開示されている。
さらに、特許文献4では、誤り訂正処理を実行する並列演算装置において、並列に動作する演算器の数を制御する手法が提案されている。
特開平10−021406 特開2010−134697 特開2005−242582 WO00/079405
しかしながら、特許文献1では、コンボリューション演算を並列に処理する場合、例えば、カーネルのサイズによって参照データとなる前階層のデータを演算器に供給するデータ転送がボトルネックになる場合がある。また、特許文献2に開示されている様な並列演算処理装置を低速なメモリと組み合わせて実現した場合でも、並列に動作する演算器の数(並列度)に見合う性能が発揮できない場合がある。他にも演算回路の並列度に見合う性能が発揮できない場合があるが、ここで、一例としてデータ転送がボトルネックになる場合、並列演算器の同時動作によって処理できるデータ量に見合うデータが転送されないので、演算器の消費電力が無駄になる。これは、CNN処理に用いるカーネルのサイズによって、コンボリューション演算を行う際のデータ転送がボトルネックになる場合、特に問題となる。
また、特許文献2に開示されている様な並列演算処理装置と特許文献3に開示されている処理領域限定処理を組み合わせることで、CNN処理を高速に実現する事が可能になる。しかしながら、特許文献3の方法では処理対象領域のサイズが変更するにも係らず、特許文献2に開示されているような並列演算処理装置では、処理対象領域の如何に係らず一様な並列度で演算を実行するため、消費電力の観点から、無駄になる場合がある。
本発明は上記の課題に鑑みてなされたものであり、データ転送がボトルネックになる等の場合において、並列に実行可能な複数の乗算器のうち、実行させる乗算器の数を適切に制御することによって消費電力を低減する演算回路を提供することを目的とする。また、その演算回路の制御方法及びプログラムを提供することを目的とする。
上記課題を解決するために、本発明に係る演算回路は、以下の構成を有する。フィルタ演算処理の参照データと該フィルタ演算処理に用いるフィルタの係数データとを保持する保持装置と接続する演算回路であって、互いに異なる前記参照データと共通の前記係数データとの乗算を繰り返し行うことにより前記フィルタ演算処理を実行する複数の乗算器と、前記複数の乗算器に対して、前記保持装置からに保持された互いに異なる前記参照データを供給する第1のデータ供給手段と、前記複数の乗算器に対して、前記保持装置に保持された共通の前記係数データを供給する第2のデータ供給手段と、前記乗算器が前記乗算を繰り返し実行する時間は、前記フィルタ演算処理のフィルタサイズが大きくなるほど増加し、前記フィルタサイズが所定値以下である場合に、前記複数の乗算器のうち、一部の前記乗算器に対して前記乗算を実行させ、他の乗算器に対して前記乗算を実行させないように制御する制御手段と、を有することを特徴とする。
本発明によれば、データ転送がボトルネックになる等の場合において、演算回路の並列に実行可能な複数の乗算器のうち、実行させる乗算器の数を制御することによって消費電力を低減することができる。
第1の実施形態に係る演算回路を具備した画像処理装置の構成例を示すブロック図である。 演算回路22の構成を示す図である。 CNN処理の例を示すネットワーク構成図である。 CNN処理における特徴面305aを生成する例である。 制御部501の構成を示す図である。 レジスタ群602に設定された情報の例を説明する図である。 シフトレジスタの構成例を説明する図である。 乗算器の構成を説明する図である。 累積加算器の構成を説明する図である。 非線形変換処理部509の構成を説明する図である。 演算回路22によるコンボリューション演算の例を説明する図である。 演算回路22によるコンボリューション演算の動作を説明するタイムチャートである。 並列度とカーネルサイズを変えた場合の処理時間の関係について説明する図である。 画像処理装置の動作を説明するフローチャートである。 第2の実施形態の画像処理装置の処理例を模式的に説明する図である。 第2の実施形態の画像処理装置の動作を説明するフローチャートである。 (a)従来の並列演算を示す図である。(b)第2の実施形態の並列度の決定方法の具体例を説明する図である。 第2の実施形態の並列度決定テーブルの例を説明する図である。 第3の実施形態の適用例を説明する図である。 従来の並列演算回路の例を示す図である。
以下、本発明の実施形態について添付の図面を参照して具体的に説明する。
(第1の実施形態)
まず、本発明の第1の実施形態について説明する。図1は本発明の第1の実施形態に関する並列演算回路を具備した画像処理装置の構成例である。当該画像処理装置は入力された画像データから特定の物体(画像パターン)を認識又は検出する機能を有する。画像入力モジュール20は、光学系、CCD又はCMOSセンサー等の光電変換デバイス及びセンサーを制御するドライバー回路、ADコンバーター、各種画像補正を司る信号処理回路及びフレームバッファ等により構成される。
RAM(Random Access Memory)500は、画像バッファ及び演算回路22の演算作業バッファとして使用する。RAM500にはCNNの特徴面に相当するデータ群やフィルタ係数データなどが保持される。RAM500は、演算回路22と接続し、演算回路22に必要なデータを転送する外部のデータ保持装置としての役割を持っている。演算回路22は本実施形態ではCNN処理を並列に行うCNN処理部である。演算回路22の構成について、後述する。
DMAC(Direct Memory Access Controller)26は、画像バス23上の各モジュールや回路とCPUバス30間のデータ転送を司る。ブリッジ24は、画像バス23とCPUバス30のブリッジ機能を提供する。前処理モジュール25は、CNN処理によるパターン認識処理を効果的に行うための各種前処理を行う。具体的には色変換処理/コントラスト補正処理等の画像データ変換処理をハードウェアで処理する。
顔候補検出モジュール31は、演算回路22での処理対象である顔候補領域を特定する。具体的には、顔候補検出モジュール31は、前処理モジュール25で変換した所定の色空間内で人物の肌色領域を特定し、当該領域を演算回路22でのCNN処理の処理対象領域とする。ここで特定した処理対象領域に関する情報はRAM500に記録し、演算回路22で使用する。
CPU27は、画像処理装置全体の動作を制御するものである。ROM(Read Only Memory)28は、CPU27の動作を規定する命令や各種演算に必要なパラメータデータを格納する。RAM29はCPU27の動作に必要なメモリである。CPU27はブリッジ24を介して画像バス23上のRAM500にアクセスする事も可能である。
図2は演算回路22の構成を示す図であり、本実施形態では、演算回路22がCNN処理を行うCNN処理部として説明するが、演算回路22の行う演算処理はCNN処理に限らず、他の様々なフィルタ演算処理に適用することも可能である。演算回路22が演算処理の階層的な結合関係で表現される様々な処理に適用可能である。例えば、Restricted Boltzmann MachinesやRecursive Neural Network等他の階層的な処理に適用可能である。
また、演算回路22による演算は、1段の階層から図3に示すような複数段の階層まで様々な場合に適用することができる。また、演算回路22が演算するデータは、2次元データに対する限らず、1次元データや3次元以上のデータに適用することも可能である。図2に示す演算回路22が行うCNN処理は、図3に示す様な複数のデータ群の階層的な結合関係に従って、下位の階層から特徴面を順次算出していく。即ち、演算回路22は、まず、入力画像データ301を参照データとして、順に特徴面303a、特徴面303b及び特徴面303cを算出する。次に、特徴面303aを参照データとして、順に特徴面305a及び特徴面305bを算出する。このように、演算回路22は、階層の数に制限されずに特徴面を順に算出し、最終的に特徴面307を算出する。
以下、本実施形態における演算回路22の動作を説明する。本実施形態では、水平方向に並列にコンボリューション演算処理する場合について説明する。即ち、コンボリューション演算の結果である特徴面を基準にして水平方向に連続する複数の位置のコンボリューション演算を複数の演算器が同時に動作して実行する。本実施形態では、同時に動作してコンボリューション演算を実行する演算器(乗算器と累積加算器のペア)の数を並列度と呼ぶ。なお、垂直方向の並列演算は水平方向の並列演算と同様にできるので、その説明は省略する。
図2の制御部501は図5に示すように、演算回路22の基本的な動作を決定するレジスタ群602とレジスタ群602の値を基に各種信号のタイミングを制御するシーケンサ601及びRAM500へのアクセス調停を行うメモリ制御部605等からなる。
演算器制御部517は、内部のレジスタに保持する並列度指定情報に従って、乗算器507a〜507n及び累積加算器508a〜508nの動作を制御する信号を生成する。制御信号513a〜513nはそれぞれ乗算器507a〜507nの動作を直接制御する信号である。演算器制御部517は、演算器制御信号をラッチするマスクレジスタ511、及びマスクレジスタ511を所定のタイミングで制御する演算器制御データ生成部512からなる。演算器制御データ生成部512は制御部501のレジスタ群602にも接続されている。
図5は制御部501の構成を説明する図である。シーケンス制御部601は、レジスタ群602に設定された情報に従って、演算回路22の動作を制御する各種制御信号604を入出力する。同様にシーケンス制御部601はメモリ制御部605を制御するための制御信号606を生成する。シーケンス制御部601はバイナリカウンタやジョンソンカウンタ等からなるシーケンサにより構成する。レジスタ群602は不図示の複数のレジスタセットからなり、階層的なCNN処理を行うための情報等が保持される。
図6は、図5に示すレジスタ群602の複数のレジスタセットに設定された情報の例を示す図である。複数のレジスタセットに設定された情報の例としてのレジスタ内容1101a、レジスタ内容1101b及びレジスタ内容1101cのそれぞれが1つの特徴面を算出するために必要な情報である。レジスタ群602にはブリッジ24及び画像バス23を介してCPU27から予め所定の値が書き込まれる。
なお、ここではレジスタセット内の各レジスタが32bit幅であるとする。レジスタ内容1101aにおいて、「最終層指定」は当該レジスタセットに対応する特徴面が最終層か否かを指定するレジスタ値である。「最終層指定」を示す当該レジスタ値が1の場合、算出対象の特徴面が最終層の特徴面であって、最終層の特徴面の算出処理が全て終了するとCNN処理が終了する。「参照データ面の数」は算出対象の特徴面と接続する前階層の特徴面の数を指定する値であり、例えば、図3に示す特徴面305aを演算する場合の「参照データ面の数」のレジスタ値に「3」が設定される。「非線形変換」は、非線形変換処理の有無を指定するためのレジスタ値であり、当該レジスタ値に「1」が設定されている場合、非線形変換処理を実行する。「演算結果格納先ポインタ」は対象とする特徴面の演算結果を保持するためのRAM500上の先頭ポインタを示すアドレスであり、当該ポインタ値を先頭ポインタとして演算結果をラスタスキャン順に格納する。
「カーネルの水平サイズ」及び「カーネルの垂直サイズ」は当該特徴面のコンボリューション演算に使用するカーネルのサイズを指定するレジスタ値である。「並列度」は、当該特徴面のコンボリューション演算を実行する際に並列に動作する演算器の数を指定するレジスタ値である。ここで設定する並列度はカーネルのサイズやRAM500からのデータ転送能力等に対応して予め設定する。カーネルサイズ(フィルタサイズ)と並列度の関係は後述する。
「重み係数格納先」は、当該特徴面の演算に使用するカーネルの重み係数のRAM500上の格納先アドレスを示すレジスタ値である。重み係数データは「参照データ面の数」と同じ数の係数の組を有し、「重み係数格納先」のレジスタ値で指定されるアドレスからラスタスキャン順に格納されているものとする。即ち「カーネルの水平サイズ」×「カーネルの垂直サイズ」×「参照データ面の数」の個数の係数データがRAM500に格納されている。「参照データの垂直サイズ」のレジスタ値と、「参照データの水平サイズ」のレジスタ値とは、それぞれ参照画像データ又は参照特徴面の水平方向画素数及び垂直方向ライン数を示す情報である。
参照データは「参照データ格納先ポインタ」のレジスタ値の示すアドレスを先頭としてRAM500上にラスタスキャン順に格納されているものとする。即ち「参照データの水平サイズ」×「参照データの垂直サイズ」×「参照データ面の数」の個数の参照データがRAM500に格納されている。以上説明した複数のレジスタ値が算出する各特徴面単位に用意されている。演算の処理対象とする特徴面の「参照データ格納ポインタ」のレジスタ値が前階層結合対象特徴面の「演算結果格納先ポインタ」と等しい場合、本実施形態では、参照される前階層の特徴面と算出される特徴面とが結合されていることになる。
シーケンス制御部601は上記「カーネルの水平サイズ」、「カーネルの垂直サイズ」、「参照データの水平サイズ」、「参照データの垂直サイズ」及び「並列度」等のレジスタ値に従って演算動作に関わるシーケンス制御を行う。メモリ制御部605は、シーケンス制御部601の生成する制御信号606に従って、各データバス607〜609のRAM500からの読み出し及びRAM500への書き込みのためのアクセスを調停する。
具体的には、メモリ制御部605は、画像バス603を介したメモリへのアクセス、参照データ607の読み出し、重み係数データ608の読み出し、演算結果データ609の書き出しを適切に制御する。RAM500へのアクセスに関する説明は後述する。なお、RAM500のデータ幅及び各データバス607〜609のデータ幅は全て32bitであるとする。
図2の記憶部502及び記憶部503は、例えば複数のレジスタやメモリにより構成する。記憶部502はRAM500に保持されたカーネルの重み係数データを一時的に保持するために使用される。重み係数が8bitで表されるデータの場合、記憶部502は8bit幅の複数のレジスタで構成する。
また、記憶部502はコンボリューション演算を並列に処理する方向と同じ方向のカーネルサイズと同じ数のレジスタを有する。例えば、コンボリューション演算を水平方向に並列に処理する場合、水平方向のカーネルサイズが「11」の場合、記憶部502のレジスタの数は「11」とする。実際には、複数のカーネルサイズがあるので、記憶部502は想定する最大のカーネルサイズのレジスタ数で構成する。制御部501はシフトレジスタ504のシフト動作中にRAM500から次の行の積和演算処理に必要なカーネルの重み係数を記憶部502のレジスタにロードする。
記憶部503はRAM500に格納された参照データを一時的に保持するために使用される。例えば参照データが8bitで表されるデータの場合、記憶部503は8bit幅の複数のレジスタで構成する。記憶部503は「並列に処理可能なデータの数」+「並列処理する方向と同じ方向のカーネルサイズ−1」以上の個数のレジスタで構成する。ここでは、「並列に処理可能なデータの数」は演算回路22の最大並列度である。ここでのレジスタ個数は、一度に複数の位置の特徴面データを算出する(並列演算する)ために必要な参照するデータを得るための値であり、当該データの個数以上のレジスタ個数であれば良い。例えば,コンボリューション演算を水平方向に並列に処理するとして、カーネルサイズが「11」、並列度が「8」の場合18個以上の8bitレジスタで記憶部503を構成することになる。
制御部501はシフトレジスタ505のシフト動作中にRAM500から次の列処理に必要な参照データを記憶部503にロードする。即ち、コンボリューションの積和演算処理とRAM500からのデータロードとはカーネルの行単位でパイプライン動作する。なお、実際に必要な参照データの数は「並列度」レジスタの内容に従って決まる。
シフトレジスタ504、シフトレジスタ505及びシフトレジスタ506はデータロード機能付のシフトレジスタである。シフトレジスタ504及びシフトレジスタ505はそれぞれ記憶部502及び記憶部503と同じbit幅の複数のレジスタで構成し、シフトレジスタ506は累積加算器出力の有効bitと同じbit幅数の複数のレジスタで構成する。また、マスクレジスタ511は乗算器507a〜507nの数と同じbit幅数の複数のレジスタで構成する。
シフトレジスタ504はシフト動作により、各乗算器507a〜507nに共通のパラメータデータ(重み係数)を順次供給するデータ供給部である。シフトレジスタ505はシフト動作により各乗算器507a〜507nに前階層の異なる位置の参照データを並列に供給するデータ供給部である。
シフトレジスタ504、シフトレジスタ505及びシフトレジスタ506は、基本的な構成は同じであるので、図7にこれらのシフトレジスタの構成例を示す。図7はレジスタ個数が4の場合の例を説明する。フリップフロップ701a〜dは多bitのフリップフロップであり、CLOCK信号に同期して所定bitのデータをラッチする。セレクタ702a〜cは、選択信号であるLoad信号の値が0である場合、フリップフロップ701a〜dの出力信号OUTx(x:0〜2)を選択し、1である場合、フリップフロップ701a〜dの入力信号INx(x:1〜3)を選択する。即ち、Load信号の値に応じてフリップフロップ701a〜dのシフト動作とロード動作との何れかを選択する。Enalbe信号はデータ遷移のイネーブル信号であり、Enalbe信号の値が1である場合、CLOCK信号の立ち上がりでデータをラッチし、0である場合、前クロックでラッチしたデータをそのまま保持する(状態遷移はしない)。
図2おけるLoad2信号、Load4信号及びLoad5信号はそれぞれ図7のLoad信号に対応し、図2におけるEnable1信号、Enable2信号及びEnable3信号は図7のEnable信号に対応するものである。
シフトレジスタ504は記憶部502から重み係数の初期データを一括ロードした後、水平方向のカーネルサイズと同じクロック数シフト動作を実行し、乗算器507a〜507nに対して重み係数データを連続して供給する。シフトレジスタ504の出力信号であるOUTn信号は、シフトレジスタ最終段出力から出力され、全ての乗算器507a〜nに入力される。
同様に、シフトレジスタ505は記憶部503から参照データの初期データをロードした後、水平方向のカーネルサイズと同じクロック数シフト動作を実行し、乗算器507a〜507nに対して複数の異なる参照データを同時に供給する。シフトレジスタ504とシフトレジスタ505は同期して動作する。
このタイミングで参照データに重み係数を乗じた値が累積加算器に送られる。カーネルサイズの1行に相当するクロックのシフト処理により、異なる特徴面位置のカーネル1行分のコンボリューション演算を並列に処理する。更に、当該動作をカーネルの行数分繰り返すことで並列度に相当する特徴面位置の2次元コンボリューション演算を処理する。各部は制御部501の出力する制御信号に従って動作する。乗算器507a〜507nは並列に動作する複数の乗算器であり、累積加算器508a〜508nは並列に動作する複数の累積加算器である。乗算器507a〜507nと累積加算器508a〜508nとは一対一に接続し、合わせて演算器と称する。
乗算器507a〜507nの構成例を図8に示す。本実施形態の乗算器は一般的な乗算器1401及びセレクタ1402から構成される。セレクタ1402は演算制御信号1403が有効(アクティブ)でない場合、Input2の代わりに入力値0を選択する。入力値0が選択された場合、入力値Input1の如何に係らず乗算器ロジック内の信号値が遷移することは無く、信号遷移に伴う消費電流の増加はない。演算制御信号1403は図2におけるマスクレジスタ511から出力される制御信号513a〜513nの何れかである。ここで、Input2は参照データの入力でもよいし、係数データの入力でもよい。また、マスクレジスタ511の出力(演算制御信号1403)で乗算器1401への入力データをマスクする方法について説明したが、記憶部503で入力データを0にするなどの対応方法でもよい。
累積加算器508a〜508nは図9に示すように加算器901とレジスタ902で構成し、Latch Enable信号に従って入力データの累積和を保持する。Latch Enable信号には図示しないクロック信号に同期した信号である。なお、乗算器の出力である乗算結果が0にスタックされている場合(即ち乗算器の動作が停止している場合)、累積加算器508の信号遷移が生じることもないため、乗算器同様に消費電流の増加は無い。このように、マスクレジスタ511が出力した制御信号513a〜513nによって乗算器と累積加算器との動作を停止させることで、乗算器と累積加算器との消費電流の増加を抑えることができる。即ち、本実施形態の演算回路の並列度は、マスクレジスタ511の出力した制御信号513a〜513nによって制御される。なお、演算回路の並列度は、同時に動作する演算器(乗算器又は累積加算器)の数である。演算回路の並列度が低い場合、動作する演算器が少ないので、消費電力を低く抑えることができる。
ここで得られた累積和は、対象特徴面に対応するカーネル毎の演算終了後、シフトレジスタ506に演算結果をロードし、所定のタイミングで非線形変換処理部509に送る。シフトレジスタ506は複数個の累積加算器508a〜508nの出力を保持する事が可能なシフトレジスタである。なお、累積加算器508a〜508nの出力は所定の有効ビットのみシフトレジスタ506に接続する。
なお、演算回路の並列度の制御方法として、参照データや出力データの制御と共に乗算器の入力データを0にスタックさせる場合について説明したが、これに限らない。例えば、乗算器の入力データを0にスタックさせる代わりに、対応するレジスタ及び演算器の動作を制御する方法でも良い。例えば演算器毎に動作を制御する動作クロックを停止させる事で実現可能である。その場合、乗算器507a〜n及び累積加算器508a〜nのクロック毎に論理積素子を挿入し、制御信号を接続すればよい。即ち演算器毎にクロックの供給を制御する事で演算処理の並列度を制御する。更に、乗算器507a〜n及び累積加算器508a〜nに供給する電源を制御する等の方法でも良い。
図10は非線形変換処理部509の構成を示すものである。非線形変換処理部509は、ルックアップテーブルで構成する非線形変換処理器1301及びセレクタ1302を含む。非線形変換処理器1301はルックアップテーブルに基づいて、入力Inに累積加算器の出力データである積和演算結果に対応するアドレスデータとしてROM等に保持されたデータを参照する。ROMには予めアドレス値に対応する出力Outの非線形関係が記録されているものとする。セレクタ1302は、非線形処理変換しない場合、累積加算器の出力データである積和演算結果をそのままセレクタ1302の出力データとして出力する。
セレクタ1302は選択信号Selectが制御部501に接続され、制御部501内の「非線形変換」のレジスタ値に従って制御される。ここで変換処理したデータはRAM500の所定アドレスに格納する。ここでの格納アドレスも制御部501のレジスタ群602の設定とシーケンス制御部601の動作に従って制御される。以上、制御部501はレジスタ群602の内容に従って、各タイミング信号及びデータ転送を制御することで階層的なコンボリューション演算を並列に処理する。
図11は本実施形態の演算回路22によるコンボリューション演算の並列処理の例を説明する図である。図11はラスタスキャンされたデータ座標を示す。並列処理する参照データ面1004の各ブロック(模式的に示す最小一升)がラスタスキャン順でRAM500に格納された入力画像又は前階層の演算結果の画素を示すものであるとする。参照データ面1004の各画素は座標1001においてinput(x,y)で示し、xは水平方向位置を示し、yは垂直方向位置を示す。並列処理の算出対象となる特徴面1003の各ブロックがラスタスキャン順の演算結果の画素を示すものとする。算出対象である特徴面1003の各画素は座標1002においてoutput(x,y)で示し、xは水平方向位置を示し、yは垂直方向位置を示す。
特徴面の領域1003は、図2の演算回路22の複数の演算器が同時にコンボリューション演算して算出する特徴面データの領域を示す。特徴面の領域1003に示す各画素は座標1002においてoutput(x,6)で示し、xは5〜12である。図11に示す例では、特徴面の8つの注目画素位置のコンボリューション演算を同時に処理する。また、それぞれの注目画素位置では、演算器番号0〜7に対応する乗算器507a〜507n、累積加算器508a〜508nがそれぞれ演算処理を実行する。並列に処理する参照データ面1004に示す各画素は、特徴面の領域1003を算出するための参照画素データの領域を示す。図11に示す例では、カーネルサイズが水平方向「11」垂直方向「13」の場合を想定している。演算回路22の並列度が8の場合、水平方向に同時に算出する幅は「18」であるので、参照データ面の領域1004のサイズは、水平方向が「18」であり、垂直方向が「13」である。演算回路22は、参照データ面の領域1004のコンボリューション演算を同時に処理し、特徴面の領域1003を同時に算出する。このように、参照データ面の水平方向に8画素単位、垂直方向に1ライン単位で走査させながら、並列に2次元のコンボリューション演算を実行する。なお、本実施形態では、水平方向に並ぶ複数の特徴面のデータを並列に算出する場合に限らず、垂直方向に連続する特徴面データを並列に算出する構成にしても良い。この場合、記憶部502にはカーネルの1列の重み係数がロードされ、記憶部503には「並列度+カーネルの垂直方向サイズ−1」個の水平方向に連続する参照データがロードされる。なお、フィルタサイズは、並列に演算する方向によってカーネルの垂直方向サイズ又は水平方向サイズである。図11では、カーネルの垂直方向サイズを例に説明した。
図12は本実施形態の並列演算回路22によるコンボリューション演算の動作を説明するタイムチャートである。図12は1つの特徴面を算出するためのコンボリューション演算処理の一部を説明する図である。また、図12に示す信号は全て図示しないクロック信号に基づいて同期動作し、クロック信号単位で1回の積和演算を処理するものとする。Load1信号は記憶部502にカーネルの重み係数データをロードするためのイネーブル信号を示す。制御部501は当該信号が有効(信号レベルが1)の期間にRAM500からカーネルの1行分の重み係数データを読み出し、記憶部502に書き込む。カーネルの1行の大きさ(重み係数のデータサイズ)は図5に示すレジスタ群602に保持されている。また、制御部501はレジスタ群602で指定する重み係数のアドレスポインタ情報、重み係数のデータサイズ及び参照するデータ面数等を元に読み出すデータのアドレスを決定する。ここで、RAM500のデータ幅は32bitであり、重み係数のデータ幅は8bitであるとすると、記憶部502に水平方向1行分の11個の重み係数を書き込む場合、3クロックでロード処理を完了する。
以降、RAM500に対する読み出し/書き込みサイクルは全て1クロックで完了するものとする。制御部501は、重み係数のロードが完了すると、次に参照データのロードを開始するためにLoad3信号を有効化する。Load3信号もLoad1信号と同様に信号レベル1の場合が有効化された状態であるとする。
制御部501はLoad3信号の有効化と同時にRAM500から参照データを取り出し、記憶部503にセットする。セットするデータの数はレジスタ群602に保持されているカーネルの大きさ及び並列度から決定する。また、制御部501は、レジスタ群602で指定する参照データのアドレスポインタ情報、参照データのサイズ及び参照データ面の数を元にRAM500から読み出すデータのアドレスを決定する。参照データの有効桁は8bitであるため、記憶部503に、例えば18個の参照データを書き込む場合、5サイクルで書き込みシーケンスを完了する。図11に示す例の場合は、カーネルの水平方向サイズが11、演算並列度が8である事から並列度11+8−1=18個の参照データをロードする必要がある。
*CLR信号は累積加算器508を初期化するための信号であり、当該信号の値が0の場合、累積加算器のレジスタ902の値は0に初期化される。制御部501は新たな特徴面位置のコンボリューション演算開始前に*CLR信号の値を0に設定する。
Load2信号はシフトレジスタ504の初期化を指示するための信号であり、当該信号の値が1でかつEnable1信号が有効(信号レベル1)の場合、記憶部502に保持する複数の重み係数データがシフトレジスタ504に一括ロードされる。Enable1信号はシフトレジスタのデータ遷移を制御する信号である。図12に示すようにEnable1信号は動作中に常に設定されているため、Load2信号の値が1の場合、クロック信号に応じて記憶部502の出力をラッチし、Load2信号の値が0の場合、クロック信号に応じてシフト処理を継続する。
制御部501のシーケンス制御部601はカーネルの水平方向のデータサイズに応じたクロック数をカウントするとLoad2信号を有効化する。
更に、シフト動作を停止させると同時に記憶部502に保持する重み係数データをシフトレジスタ504に一括ロードする。即ち、カーネルの水平方向単位で一行の重み係数を一括ロードし、ロードした重み係数を動作クロックに応じてシフトアウトする。
Load4信号はシフトレジスタ505の初期化を指示するための信号であり、Load4信号の値が1でかつEnable2信号が有効(信号レベル1)の場合、記憶部503に保持する参照データがシフトレジスタ505に一括ロードされる。
なお、Enable2信号はシフトレジスタのデータ遷移を制御する信号である。図12に示すようにEnable2信号の値は動作中に1に設定されているため、Load4信号の値が1である場合、クロック信号に応じて記憶部503の出力をラッチし、Load4信号の値が0の場合、クロック信号に応じてシフト処理を継続する。
制御部501のシーケンス制御部601はカーネルの水平方向のデータサイズに応じたクロック数をカウントするとLoad4信号を有効化し、シフト動作を停止させると同時に記憶部503に保持する参照データを一括ロードする。
即ち、シーケンス制御部601はコンボリューション演算処理におけるカーネルの1行単位で必要な参照データを記憶部503からシフトレジスタ505に一括ロードし、シフトレジスタ505はロードした参照データを動作クロックに応じてシフトする。また、制御部501はLoad4信号をLoad2信号と同一タイミングで制御する。
なお、Enable1信号及びEnable2信号は、図12に示す「水平方向演算サイクル」において、記憶部502及び記憶部503からシフトレジスタ504及びシフトレジスタ505へデータロードが間に合わない場合がある。この場合は、シーケンス制御部601はEnable1信号及びEnable2信号を非有効化することで演算器の動作を停止し、データロード時間を確保する。シーケンス制御部601は、その際、累積加算器508a〜508nのラッチ信号も非有効化する。累積加算器508a〜508nはクロックに同期して積和演算を継続しているため、シフトレジスタ504及びシフトレジスタ505のシフト動作に従って算出する特徴面の複数の位置に対して、同時にカーネルサイズに応じた積和演算処理を実行する。
具体的には、シフトレジスタ504及びシフトレジスタ505のシフト動作期間(図12中の水平方向演算サイクル期間)中に複数の特徴面の画素位置のカーネル1行分の積和演算がなされることになる。さらに、図12に示すカーネル演算区間において、カーネルの列単位の演算を重み係数及び参照データを入替ながら垂直方向に繰り返すことで並列度に応じた二次元のコンボリューション演算結果が得られる。
このように、制御部501はカーネルサイズ及び並列度に応じて各信号を制御する事で、積和演算処理と積和演算処理に必要なデータ(重み係数データ及び参照データ)のRAM500からの供給を並行に処理する。図12に示す例の場合、水平方向演算サイクル内に、参照データのRAM500から記憶部503へのロード及び重み係数のRAM500から記憶部502へのロードが完了しているため、データロードに要する時間が演算速度に影響を与えることはない。しかしながら、コンボリューション演算のカーネルサイズによっては、RAM500から記憶部502や記憶部503へのデータロードに要する時間が水平方向演算サイクル内に収まらない場合がある。
図13はカーネルサイズと並列度とを変えた場合のデータロードサイクル(データロードに要する時間)と水平方向演算サイクルの関係を示す図である。図13は図12に示す水平方向演算サイクル単位のデータロードサイクルを算出する例である。
並列度は同時に動作する乗算器507a〜507nと累積加算器508a〜508nのペアの数を示す。「参照データロード数」は図12に示す「水平方向演算サイクル」内に、RAM500から記憶部503にロードする次の演算に必要な参照データの数を示す。参照データロード数は「並列度+カーネルの水平方向サイズ−1」である。「重み係数ロード数」は図12に示す「水平方向演算サイクル」内に、RAM500から記憶部502にロードする重み係数のデータ数を示す。
本実施形態の場合、次の演算に必要なデータロードサイクルの総数に相当する「総ロードサイクル」は以下の式を用いて算出できる。
総ロードサイクル=INT((参照データロード数+3)÷4)+INT((重み係数ロード数+3)÷4) (2)
ここで、INT(n)はnを超えない最大の整数を求める関数である。参照データと重み係数データは夫々8bit(1バイト)である。
なお、式(2)は、前述した様にデータバスの幅は32bitである(即ち1回のアクセスで4バイト転送可能である)場合の算出式である。また、1回のメモリアクセスは1サイクルで完了するものとする。
図13に示す「カーネル1行の演算サイクル」は、カーネル1行分のコンボリューション演算を行うためのサイクル数である。「カーネル1行の演算サイクル」はカーネルの水平方向サイズの値に相当する。「所要サイクル」はカーネル1行分のコンボリューション演算を行うために必要なサイクル数を示す。図13に示すように、「総ロードサイクル」が「カーネル1行の演算サイクル」より小さい場合、「カーネル1行の演算サイクル」が「所要サイクル」の値に相当する。この場合、演算処理時間が処理時間を決定することになる(即ち演算ボトルネック)。図13においてカーネルサイズが13×13の場合、「総ロードサイクル」が「カーネル1行の演算サイクル」より小さいので、「所要サイクル」の値は「カーネル1行の演算サイクル」の値と同じである。カーネルサイズが大きい場合、所要サイクルは常に「カーネル演算サイクル」に等しい。
一方、「総ロードサイクル」が「カーネル1行の演算サイクル」より大きい場合、「総ロードサイクル」が「所要サイクル」の値に相当する。この場合、データ転送時間が処理時間を決定する(即ちメモリアクセスボトルネック)。カーネルサイズが小さい場合(図13においてカーネルサイズが3×3である場合)、所要サイクルは並列度に応じて変化する。並列度が7を超えると、「総ロードサイクル」が「カーネル1行の演算サイクル」を超えるので、データ転送がボトルネックとなり、「所要サイクル」が「カーネル1行の演算サイクル」より大きい「総ロードサイクル」の値となる。
このような場合、図2に示す演算回路の制御部501は、RAM500へアクセス完了(記憶部502及び記憶部503へのデータロード及び非線形変換処理部509のデータセーブ)を優先する。即ち、Enable1信号、Enable2信号、Enable3信号及び累積加算器のLatch Enable信号等を制御する。それによって、シフトレジスタ504とシフトレジスタ505とのシフト動作及び累積加算器508a〜508nの動作を停止し、積和演算処理の開始をデータロードの完了まで遅延させる。
「1画素当たり処理時間」はカーネル1行分のコンボリューション演算を並列に実行する際の、1画素当たりの処理時間を表す値である。「1画素当たり処理時間」は以下の式で定義する。
1画素当たり処理時間=所要サイクル÷並列度 ‥ (3)
カーネルサイズが大きい場合(図13においてカーネルサイズが13×13の場合)「1画素当たり処理時間」は並列度と共に低下する。即ち、並列度が大きいほど全体の処理時間が短くなる。一方、カーネルサイズが小さい場合(図13においてカーネルサイズが3×3の場合)、例えば、並列度が7では、並列度が6に比べて「一画素当たり処理時間」が大きくなる。即ち、並列度を上げたにもかかわらず、処理時間が増大する。並列度を8にした場合であっても、「一画素当たり処理時間」は並列度が6の場合と同じである。即ち、並列度を上げたにもかかわらず、処理時間は変わらない。これは、データ転送がボトルネックとなって、RAM500から記憶部502及び記憶部503へデータをロードする時間が乗算器507a〜507n及び累積加算器508a〜508nの演算処理の時間より長いためである。
並列度が8の場合、乗算器507a〜507n及び累積加算器508a〜508nの同時動作数が8であり、並列度6の場合に比べて多いため、演算時のピーク消費電流がより大きい。デバイスのダイナミックな消費電力は電流値の2乗和に比例するため、消費電力の観点から並列度は出来るだけ低いことが望ましい。
従って、本実施形態では、制御部501は演算回路22の並列度の最大値に設定された場合に、演算処理時間とデータ転送時間と同じ程度同じ程度になるカーネルサイズ(フィルタサイズ)を所定値とする。カーネルサイズ(フィルタサイズ)が所定値以下である場合はメモリアクセスボトルネックになるので、フィルタサイズに基づいて制御部501は演算回路22の並列度を最大値より低く設定し、演算処理時間とデータ転送時間とを同じ程度にする。例えば、カーネルサイズ(フィルタサイズ)が3×3の場合、制御部501は、演算回路22の並列度を6に設定する。これにより、コンボリューション演算の処理速度は変わらず、消費電力を低減することが可能になる。なお、演算回路22の並列度を毎回算出するのではなく、カーネルサイズ(フィルタサイズ)と演算回路22の並列度との対応関係を示すデータテーブルを予めRAM500に保持することができる。制御部501はRAM500に保持されたデータテーブルを参照することによって、演算回路22の並列度を設定することができる。
本実施形態では、このような観点からカーネルサイズに応じて並列度を設定する。並列度の設定は、前述した様に、図6に示すレジスタの内容に従う。図2において制御部501は当該レジスタに記された並列度に従って並列演算回路の動作を制御する。例えば、並列処理が可能な演算器(乗算器507a〜507n及び累積加算器508a〜508n)の数が8であっても、カーネルサイズが3×3の場合、並列度を6に設定して演算器を動作させる。
制御部501は、この場合、RAM500から記憶部503には並列度が6に対応する数の参照データをロードし、演算処理を開始する。演算器制御データ生成部512は、演算処理に先立ち、レジスタ群602に記された「並列度」情報に従って、演算器制御信号514を生成する。例えば、並列度が6の場合、演算器制御データ生成部512は、演算器並列信号「11111100」を生成する。各ビットが夫々の制御信号を示し、1が動作演算器に対応し、0が停止演算器に対応する。
演算器制御部517はコンボリューション演算開始のタイミングでEnable4信号を有効化し、当該制御信号をマスクレジスタにラッチする。ラッチした各信号(演算器を直接制御する信号513a〜513n)はコンボリューション演算中の乗算器507a〜507nの動作を制御する。具体的には乗算器0〜乗算器5及び累積加算器0〜累積加算器5のみに演算動作をさせる。
Load5信号は累積加算器の結果をシフトレジスタ506に並列にロードするための信号であり、制御部501は対象となる特徴面の並列処理単位の積和演算が終了するとLoad5信号及びEnable3信号の値に1を設定する。図12は結合先の特徴面が1つの場合の例(即ち1組のコンボリューション演算のみで特徴面を算出する場合)を示す。
シフトレジスタ506はLoad5信号の値が1で、Enable3信号の値が1である場合、累積加算器508の出力を一括ロードする。このタイミングでは計算済みのコンボリューション演算結果がシフトレジスタ506にラッチされる。制御部501はシフトレジスタ504及びシフトレジスタ505のシフト動作中に記憶部502及び記憶部503へのデータロードが完了している場合、Enable3の信号を有効化し、シフトレジスタ506に保持する乗算結果をシフトアウトする。シフトアウトした演算結果は非線形変換処理部509で変換処理された後、制御部501により、レジスタ群602に記された演算結果格納先ポインタ及び参照データのサイズに従ってRAM500の所定のアドレスに格納される。
RAM500から記憶部502及び記憶部503へのデータロードの間隙で制御部501はEnable3信号を有効化して、シフトレジスタ506から演算結果をシフトアウトする。ここでも、制御部501はレジスタ群602に記された「並列度」情報に従ってシフトアウトするデータ数を制御する。並列度が6の場合、6演算結果をシフトアウトする。
以上のように、制御部501はレジスタ群602に記された「並列度」情報に従って並列度を決定し、各部を制御する。
制御部501は、記憶部502と記憶部503及び非線形変換処理部509の3つの処理部のRAM500に対するアクセスを調停し、積和演算処理と当該3つの処理部のRAM500へのアクセスをパイプライン化する。
なお、非線形変換処理部509は記憶部502及び記憶部503に比べてRAM500に対するアクセス頻度が低いため最も低い優先順位で動作する。即ち、記憶部502及び記憶部503のアクセスの間隙となるタイムスロットで非線形変換処理部509のアクセスを行う。
図14は本実施形態の演算回路22を含む画像処理装置の動作を説明するフローチャートである。以下、フローチャートは、CPU27が制御プログラムを実行することにより実現されるものとする。なお、本実施形態ではパターン認識を行う画像処理装置を例に説明するが、本実施形態の画像処理装置はパターン認識処理に限らず、オブジェクト検出などの処理にも適用できる。
ステップS101では画像処理装置のパターン認識処理の開始に先立ち、CPU27が各種初期化処理を実行する。CPU27は、画像処理装置のCNN処理部である演算回路22の動作に必要な重み係数をROM28からRAM500に転送すると共に、演算回路22の動作、即ちCNN処理のパラメータを定義する為の各種レジスタの設定を行う。具体的に、CPU27は演算回路22の制御部501に存在する複数のレジスタ群602に所定の値を設定する。
更に、ステップS102はカーネルのサイズやデータ転送時間に基づいて並列度を設定する。並列度は、前述した様に、カーネルのサイズやメモリのアクセスサイクル等から予め決定するものである。ステップS102の処理が終了すると、ステップS103に進み、各ハードウェアモジュールが起動し、一連のパターン認識動作を開始する。
まず、ステップS104では画像入力モジュール20が、画像センサーの出力する信号をディジタルデータに変換し、フレーム単位で図示しない(画像入力モジュール20に内蔵する)フレームバッファに格納する。更に、フレームバッファへの格納が完了すると、所定の開始信号に基づいて、前処理モジュール25が画像変換処理を開始する。前処理モジュール25はフレームバッファ上の画像データから輝度データを抽出し、コントラスト補正処理を行う。輝度データは、線形変換処理により、RGB画像データからYIQ(National Television Standard Committeeが規定する表色系)画像データに線形変換する事で生成する。コントラスト補正の手法は一般的に知られているコントラスト補正処理を適用して輝度データ(Yデータ)のコントラストを強調する。
前処理モジュール25はコントラスト補正処理後の輝度データを処理用画像としてRAM500に格納する。更にステップS104では、顔候補検出モジュール31が動作する。顔候補検出モジュール31はフレームバッファに格納されたYIQカラー画像データから肌色領域を特定し、特定結果を処理対象領域情報としてRAM500に格納し、処理対象領域の画像の取得が終了する。1枚の画像データに対する処理が終了すると、顔候補検出モジュール31は図示しない完了信号(割り込み信号)を有効にする。完了信号を受信したCPU27は、次に、ステップS105に進み、演算回路22を起動し、CNN処理によって高精度なパターン認識処理を実行する。演算回路22は、前処理モジュール25の処理結果である補正後輝度画像データと顔候補検出モジュール31の処理結果である処理対象領域に関する情報を利用して、処理対象領域の画像データに対してのみ並列にコンボリューション演算を実行する。
ステップS105において、演算回路22は、レジスタ群602の設定値に従ってコンボリューション演算で使用するカーネルを選択する。更に、ステップS106において、レジスタ群602の設定値に従って、並列に動作する演算器を指定する。次に、演算回路22は、ステップS107において、ステップS105で選択したコンボリューション演算用のカーネル(例えば図3に示す3041a〜b等)を用いて、ステップS106で指定した複数の演算器でコンボリューション演算を並列に処理する。ステップS108において、演算回路22は、全ての特徴面に対する処理が終了したかを判定する。全ての特徴面に対する処理が終了するとステップS109に進む。図3の例では、全ての特徴面に対する処理を終了する場合は、特徴面307の算出が終了した場合である。ステップS109において、演算回路22は、CPU27に対して全ての特徴面に対する処理の終了を通知する割り込み信号を生成する。ステップS110において、ステップS104からステップS109までの処理を画像全てに対して実行する。
CPU27は制御部501からの終了通知割り込みを受信すると、DMAC26を起動し、RAM500上の最終特徴面データをCPUバス30上のRAM29に転送する。CPU27はRAM500におかれた最終層検出結果から検出対象である所定の物体の位置や大きさなどの情報を取得する。具体的には最終検出結果を二値化処理しラベリング等の処理によりオブジェクト位置やサイズを抽出する。
一般的なコンボリューションの並列演算回路では、カーネルに対して演算器を割り付ける構成を取ることが多い。図20はカーネルサイズが2×2の4つの係数を4つの並列乗算器2100で並列処理する場合の例を示している。この場合、カーネルと並列演算器が依存関係を有しているため、参照データの供給能力等に応じて同時に動作する演算器の数(並列度)を変えることは容易ではない。一方、本実施形態の構成では、生成する特徴面の画素位置毎の並列処理であるため、そもそもカーネルと演算器に依存関係がなく、簡単な制御で動作条件に応じて演算の並列度を変更することができる。
本実施形態によれば、CNN処理を並列に高速処理する並列演算回路において、カーネルのサイズや参照データの供給能力に基づいて並列に演算する演算回路22の並列度を決定する。これによって、演算回路22の演算処理速度が低下することなく、無駄な回路動作を抑えて消費電力を低減させることが可能になる。なお、本実施形態では、データ転送がボトルネックになる場合の例として、カーネルのサイズが小さい場合について説明したが、これに限定せず、データ転送がボトルネックになる他の場合にも本件を適用できる。
(第2の実施形態)
本実施形態の画像処理装置の構成は、第1の実施形態と同じであるので、以下では、本実施形態が第1の実施形態と異なる処理について説明。図15は本発明の第2の実施形態の画像処理装置の処理例を模式的に説明する図である。図15の処理では、画像処理装置は、入力画像における顔候補領域のデータサイズに応じて演算回路の並列度を変更する。
ここで、入力画像中の顔画像領域を認識する処理を例に説明する。入力画像データ1501は、画像入力モジュール20から入力される画像データである。入力画像データ1501は顔候補検出モジュール31による顔候補の検出処理1502を経て、コンボリューション演算1506で高精度な認識処理を行う領域に関する領域限定情報1503(座標情報)が生成される。領域限定情報1503がコンボリューション演算1506の入力画像データ1501における処理対象領域に関する情報である。座標データ1504aと座標データ1504bとに示される領域(白抜き領域)にあるデータが入力画像データ1501の処理対象データとなる。顔候補の検出処理1502では、処理負荷の低い簡単な処理で入力画像における顔候補領域を取得する。顔候補領域の取得法としては、特定の色情報を含む矩形領域や楕円領域を抽出する方法や、前フレームの抽出結果(動画像に適用した場合)を利用する方法等、様々な方法が適用可能である。顔候補領域の画素データは、コンボリューション演算1506によって演算処理する処理対象データである。
本実施形態では、顔候補領域の大きさに基づいて、演算回路22は各演算器1507の実行を制御する。ここで、コンボリューション演算1506は図2に示す演算回路によって実行される。具体的に、並列に演算される特徴面の各画素1507は図2における乗算器507a〜507n及び累積加算器508a〜508nによって算出され、各演算器1507の制御は図2における演算器制御部517によって実行される。また、図15では並列演算回路の並列度が8の場合の例を示している。すなわち、並列に処理する各演算器1507は水平方向に連続する8個の注目画素位置のコンボリューション演算処理を同時に実行する。なお、図15では、各演算器1507の位置を中心とした画素領域の入力画像データを参照してコンボリューション演算を行う。
各演算器1507は8画素単位で演算処理を繰り返し、画像データをスキャンする事で、一枚の画像データに対するコンボリューション演算を完了する。なお、CNN処理を実行する場合、複数の特徴面を算出するための複数のフィルタ係数(カーネル係数)を用いてコンボリューション演算を繰り返し実行する。
なお、本実施形態の演算回路では顔の認識処理に限らず、他の物体の認識処理にも適用できる。他の物体の認識処理では、顔候補領域の検出処理を認識対象物体の候補領域の検出処理に置き換えて、同様に処理することができる。
本実施形態では、演算器制御信号生成部517は、顔候補領域の検出処理1502で得られた顔候補領域(顔候補領域を示す座標データ)から並列に処理する各演算器を制御するための信号を生成する。演算器制御信号生成部517では各演算器1507の動作に同期し、かつ演算の種別(コンボリューションのカーネルサイズ等)に応じたタイミングで制御信号を出力する。
以下、図16に示すフローチャートを用いて本実施形態の画像処理装置の処理を説明する。なお、画像処理装置の構成及び演算回路22の構成は夫々第1の実施形態と同じである。
ステップS1601では画像処理装置の処理開始に先立ち、CPU27が各種初期化処理を実行する。CPU27は、画像処理装置のCNN処理部である演算回路22の動作に必要な重み係数をROM28からRAM500に転送すると共に、演算回路22の動作、即ちCNN処理のパラメータを定義する為の各種レジスタ設定を行う。具体的にはCPU27は演算回路22の制御部501に存在する複数のレジスタ群602に所定の値を設定する。
各種初期化が終了すると、ステップS1602に進み、CPU27は各ハードウェアモジュールを起動し、一連の顔認識処理を開始する。まず、ステップS1603では画像入力モジュール20が、画像センサーの出力する信号をディジタルデータに変換し、フレーム単位で図示しない(画像入力モジュール20に内蔵する)フレームバッファに格納する。更に、フレームバッファへの格納が完了すると、所定の開始信号に基づいて、前処理モジュール25が画像変換処理を開始する。前処理モジュール25は前記フレームバッファ上の画像データから輝度データを抽出し、コントラスト補正処理を行う。前処理モジュール25はコントラスト補正処理後の輝度データを検出用画像としてRAM500に格納する。
更に、ステップS1603では、顔候補検出モジュール31が動作する。顔候補検出モジュール31はフレームバッファに格納されたYIQカラー画像データから肌色領域を特定定し、画像データにおける肌色領域を含む矩形領域を顔候補領域として取得する。また、コンボリューション演算のための顔候補領域を含む処理対象領域を取得する。1枚の画像データに対する領域取得処理が終了すると、顔候補検出モジュール31は図示しない完了信号(割り込み信号)を有効にする。完了信号を受信したCPU27は次に、ステップS1604に進み、演算回路22を起動し、高精度な顔認識処理を実行する。演算回路22は、前処理モジュール25で得られた補正後輝度画像データと、顔候補検出モジュール31で取得した顔候補領域(処理対象領域)を利用して、処理対象領域の画像データに対してのみ並列にコンボリューション演算処理を実行する。本実施形態では、顔候補検出モジュール31は、入力画像データにおける肌色領域を顔候補領域として取得する場合について説明したが、認識対象の形状情報等の他の特徴を利用した様々な方法を適用して認識対象の候補領域を取得することが可能である。また、外部から指定された領域限定情報によって認識対象の候補領域を取得してもよい。例えば、CPU27が所定の条件に従って領域限定情報を予め設定し、所定の小領域を切り出して認識対象の候補領域として取得することができる。また、候補領域が矩形領域に限らず、楕円等他の形状で表現することもできる。
本実施形態では、まず、ステップS1604では、顔候補検出モジュール31は、ステップS1603で取得した顔候補領域から顔候補領域のサイズを特定する。ここで特定する顔候補領域のサイズは、並列演算の方向と同じ方向の顔候補領域のサイズ(顔候補領域の幅方向の画素数或いは高さ方向の画素数)である。次に、ステップS1605では、取得したサイズに応じて、並列演算する際の並列度を決定する。
図17は本実施形態における並列度の決定方法について説明する図である。並列度を決定する際に、参照データとなる入力画像データ及び演算結果である特徴面データの何れを用いても同じ結果であるが、説明を簡単にするために、図17では演算結果である特徴面データを用いて説明する。図17(a)は従来の並列演算の演算結果を示す図である。画像データ1701は演算結果の画像データ面(特徴面)を示す。図17(a)及び。図17(b)の白抜きの領域(マスク)は演算結果の画像データ面1701において、入力データ画像における顔候補領域に対応する特徴面の領域1702を示す。この白抜きの領域は、演算回路22が顔候補領域のデータを参照してコンボリューション演算処理して算出する特徴面であって、その大きさは入力画像データにおける顔候補領域の大きさと対応するものである。以下、この白抜きの領域を算出対象領域と称する。
図17(a)は、並列に演算可能な演算器(乗算器507a〜507n及び累積加算器508a〜508n)の数が8の場合を示す。算出対象領域1702に対する演算を並列に処理する場合、ブロック1703a及びブロック1703bのそれぞれで示す8個の演算器による2回の繰返しの処理で当該算出対象領域1702の1行の画素を算出する。しかしながら、ブロック1703bで示す8個の演算器が処理する場合、必要な演算は演算器番号0及び1の2点の演算器であり、演算器番号2〜7で示す演算器は不要な演算処理を実行する。
本実施形態では図17(b)に示す様に、算出対象領域1702のサイズに応じて演算回路22の並列度を決定する。図17(b)の場合、並列度を5に設定する。この場合、ブロック1704aで示す5個の演算器及びブロック1704bで示す5個の演算器のどちらも、演算器(乗算器507a〜507n及び累積加算器508a〜508n)は必要な演算のみを実行する。この場合は、並列度を8とした場合と同様に、2回の繰返し処理で算出対象領域の一行の画素を算出可能である。即ち、並列度を下げた場合であっても、処理速度は同じである。
算出対象領域のサイズが並列に動作可能な演算器の数(最大並列度)の整数倍でない場合、最適な並列度は、例えば、以下の式で算出できる。
最適な並列度=n−INT((n−m)/(INT(w/n)+1)) ‥ (4)
ここで、Wは算出対象領域のサイズを示し、nは並列に動作可能な演算器の数(最大並列度)を示し、mはw/nの剰余を示し、INT(x)は数値xを超えない最大の整数を返す関数を示す。
式(4)に従えば、処理速度が低下する事なく、最も低い並列度で演算処理することが可能になる。即ち、処理速度を低下させることなく、消費電力を低減することができる。
また、上記式(4)を用いて並列度を毎回算出するのではなく、予め算出した値を保持したデータテーブルに、演算器制御部517に含まれる演算器制御データ生成部512が参照することで並列度を決定することも可能である。例えば、算出対象領域の幅又は高さと演算回路22の並列度との対応関係を保持するデータテーブルがRAM500に保持されたとする。演算器制御データ生成部512が、RAM500に保持されたテーブルにアクセスすることによって、演算回路22の並列度を制御することはできる。図18はデータテーブルの1例であり、算出対象領域の幅が9から12までの間にある場合、並列度を低くになるように制御する。特徴面における算出対象領域のデータサイズは、入力画像データにおける顔候補領域のデータサイズと対応関係にあるので、顔候補領域のデータサイズと並列度との対応関係を保持するテーブルを用いることができる。この場合は、顔候補検出モジュール31で取得した顔候補領域のデータサイズから直接に演算回路22の並列度を制御することができるので、処理が簡単である。
このように、演算器制御部517がテーブルを利用する場合、本実施形態に係る演算回路22の制御処理をより少ない回路規模で実現する事ができる。
並列度の制御は、第1の実施形態と同様に演算器制御部517が乗算器507a〜507nの動作を制御することで実現する。また、制御部501は演算器制御部517で決定した並列度に従って、演算処理全体の動作を制御する。
ステップS1606において、演算回路22は決定した並列度でコンボリューション演算を実行する。ステップS1607において、全ての特徴面に対する演算処理が終了すると、ステップS1608に進み、演算回路22は、CPU27に対して割り込み信号を生成する。なお、全ての特徴面に対する演算処理が終了する場合は、図3に示す特徴面307の算出が終了した場合である。
ステップS1609において、ステップS1603からステップS1608までの処理を画像全てに対して実行する。
以上、本実施形態によれば、算出対象領域のサイズ(並列に処理する方向と同じ方向の算出対象領域のサイズ)に従って並列度を決定することで、処理速度を維持しながら、消費電力を低減させることが可能になる。
本実施形態は、画像入力モジュール20から入力された一枚の入力画像データに対して、顔候補検出モジュール31が複数の肌色領域を特定し、一枚の入力画像データから複数の顔候補領域を取得し、処理対象領域を取得することがある。この場合は、複数の処理対象領域のそれぞれに対して、逐次に図16に示す処理を行うことによって、全ての処理対象領域に対してCNN処理を行うことができる。この場合の演算回路の並列度の制御は上述した通りである。
また、複数の処理対象領域をまとめて図16に示す処理を行うことによって全ての処理対象領域に対してCNN処理を行うことができる。この場合、演算器制御部517が処理対象領域の数に応じて並列度を制御する。
例えば、複数の処理対象領域の数が少ない場合、演算回路22の処理時間が規定する時間より短い可能性がある。この場合、演算回路22の並列度を下げることで消費電力を低減させることができる。つまり、画像処理装置が規定する処理時間内で処理可能な最低の並列度を設定する。
並列度の決定は、例えば、演算器制御データ生成部512にテーブルデータを持たせることで簡単に実現可能である。即ち、処理対象領域の数と対応する並列度との対応関係を保持するテーブルデータをRAM500に保持することが可能である。或いは、所定の判定しきい値を設定する複数のレジスタを有し、当該レジスタ値との比較により決定する等の方法でも良い。制御部501は演算器制御部517で決定した並列度に従って、演算処理全体の動作を制御する。
以上のように、一枚の画像において複数の処理対象領域がある場合でも、処理対象領域の数に従って並列度を決定することで、消費電力を低減させる事が可能になる。
(第3の実施形態)
本実施形態の画像処理装置の構成は、第1の実施形態と同じであるので、以下では、本実施形態が第1の実施形態と異なる処理について説明する。本実施形態の階層的なCNN処理では、階層的に複数回のフィルタ演算処理を行うが、不図示の処理部が階層毎にサブサンプリング処理を行い、サブサンプリング処理した特徴面をRAM500に保持させる。階層的なCNN処理において、サブサンプリング処理は前階層のコンボリューション演算結果を間引いて次階層の参照データとする場合とコンボリューション演算結果に対してプーリング処理して次階層の参照データとする場合がある。プーリング処理は前階層で生成した特徴面に対して平均値フィルタや最大値フィルタを用いて特徴面を縮小する。本実施形態の処理部がサブサンプリング処理又はプーリング処理の何れか又は両方の処理を行うものである。
一般的にサブサンプル処理では特徴面を水平方向・垂直方向に1/2倍あるいは1/4倍等に縮小処理する。CNN処理では処理部がサブサンプリング処理等の処理を行うために、後段の特徴面のサイズが入力画像に対して小さくなることが多い。図19は処理部がサブサンプリング処理を行った場合の特徴面の例を示す図である。特徴面2001、特徴面2002及び特徴面2003はそれぞれ第1層、第2層、第3層の処理対象の特徴面であり、特徴面2002は水平・垂直共に1/2倍にサブサンプリングし、特徴面2003では更に1/2倍にサブサンプリングされている。この様な場合、並列処理領域2004に示すように、水平方向8並列の演算器では、特徴面2002及び特徴2003に対して処理する場合、無駄な演算動作が発生する。なお、処理部がプーリング処理を行う場合でも同様である。
本実施形態では、演算器制御データ生成部512は、階層毎のサブサンプリングの状況に基づいて並列に動作する演算器の数(並列度)を制御する。即ち、演算回路22が特徴面2002に対して処理する場合、演算器6及び演算器7の動作を停止し、並列度6で処理する。また、演算回路22が特徴面2003に対して処理する場合、演算器3〜7の動作を停止し、並列度3で処理する。
以上、本実施形態の並列演算回路は並列に動作する演算器の個数単位で並列度を制御可能であるため、演算対象データ(参照データ)のサイズに応じて演算器を有効に活用して消費電力を低減することが可能である。つまり、処理対象領域(参照データ)となる特徴面の大きさに基づいて、並列に動作する演算器の数(並列度)を制御することで、無駄な演算動作を排除し、消費電力を低減することができる。
(その他の実施形態)
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
500 RAM
501 制御部
502 記憶部
503 記憶部
504 シフトレジスタ
505 シフトレジスタ
506 シフトレジスタ
507a〜507n 乗算器
508a〜508n 累積加算器
509 非線形変換部

Claims (20)

  1. フィルタ演算処理の参照データと該フィルタ演算処理に用いるフィルタの係数データとを保持する保持装置と接続する演算回路であって、
    互いに異なる前記参照データと共通の前記係数データとの乗算を繰り返し行うことにより前記フィルタ演算処理を実行する複数の乗算器と、
    前記複数の乗算器に対して、前記保持装置に保持された互いに異なる前記参照データを供給する第1のデータ供給手段と、
    前記複数の乗算器に対して、前記保持装置に保持された共通の前記係数データを供給する第2のデータ供給手段と、
    前記乗算器が前記乗算を繰り返し実行する時間は、前記フィルタ演算処理のフィルタサイズが大きくなるほど増加し、前記フィルタサイズが所定値以下である場合に、前記複数の乗算器のうち、一部の前記乗算器に対して前記乗算を実行させ、他の乗算器に対して前記乗算を実行させないように制御する制御手段と
    を有することを特徴とする演算回路。
  2. 前記保持装置に保持された、前記乗算を実行する乗算器に供給するための前記参照データを一時的に記憶し、記憶した該参照データが前記第1のデータ供給手段にロードされる第1記憶手段と、
    前記保持装置に保持された、前記フィルタサイズに供給するための前記係数データを一時的に記憶し、記憶した該係数データが前記第2のデータ供給手段にロードされる第2記憶手段と、
    をさらに有することを特徴とする請求項1に記載の演算回路。
  3. 前記保持装置は、前記フィルタサイズと前記乗算を実行する前記乗算器の数との対応関係を示すテーブルを保持し、
    前記制御手段は、前記テーブルを参照して、前記フィルタサイズに基づいて、前記乗算を実行する前記乗算器の数を決定することを特徴とする請求項2に記載の演算回路。
  4. 前記第1記憶手段から前記第1のデータ供給手段へロードされる前記参照データの数は、前記フィルタサイズと前記乗算を実行する前記乗算器の数との和より一つ少ないことを特徴とする請求項1乃至3の何れか1項に記載の演算回路。
  5. 前記第1のデータ供給手段および前記第2のデータ供給手段は、それぞれシフトレジスタを含んで構成されることを特徴する請求項1乃至4の何れか1項に記載の演算回路。
  6. 前記制御手段は、前記複数の乗算器のそれぞれに演算制御信号を出力することによって、前記乗算器に対して前記乗算を実行させるように、又は実行させないように制御することを特徴する請求項1乃至5の何れか1項に記載の演算回路。
  7. 前記制御手段は、前記複数の乗算器のそれぞれと接続し、前記演算制御信号を出力するマスクレジスタを有し、前記乗算器に対して前記乗算を実行させないように制御する際に、前記マスクレジスタは、前記乗算器に対する前記参照データ又は前記係数データの供給をマスクし、前記乗算器の信号を遷移させないように制御することを特徴する請求項6に記載の演算回路。
  8. 前記複数の乗算器のそれぞれの乗算結果を累積加算する複数の累積加算器を、さらに有することを特徴とする請求項1乃至7の何れか1項に記載の演算回路。
  9. 前記複数の累積加算器のそれぞれの出力データに対して非線形変換の処理を行う変換手段と、
    前記複数の累積加算器のそれぞれの出力データと前記変換手段の出力データとの何れかを選択して出力する選択手段と、
    をさらに有することを特徴とする請求項8に記載の演算回路。
  10. フィルタ演算処理の参照データと該フィルタ演算処理に用いるフィルタの係数データとを保持する保持装置と接続する演算回路であって、
    互いに異なる前記参照データと共通の前記係数データとの乗算を繰り返し行うことにより前記フィルタ演算処理を実行する複数の乗算器と、
    前記複数の乗算器に対して、前記保持装置に保持された互いに異なる前記参照データを供給する第1のデータ供給手段と、
    前記複数の乗算器に対して、前記保持装置に保持された共通の前記係数データを供給する第2のデータ供給手段と、
    前記参照データとして外部から画像データを入力する入力手段と、
    入力された前記画像データから処理対象領域を検出して、該処理対象領域の画素データを前記参照データとして取得する検出手段と、
    前記処理対象領域のデータサイズに基づいて、前記複数の乗算器のうち、一部の前記乗算器に対して前記乗算を実行させ、他の乗算器に対して前記乗算を実行させないように制御する制御手段と、
    を有することを特徴とする演算回路。
  11. 前記保持装置が、前記乗算を実行する前記乗算器の数と前記処理対象領域のデータサイズとの対応関係を示すテーブルをさらに保持し、
    前記制御手段は、前記保持装置に保持された前記テーブルを参照して、前記乗算を実行する前記乗算器の数を決定することを特徴とする請求項10に記載の演算回路。
  12. 複数回のフィルタ演算処理の参照データと該フィルタ演算処理に用いるフィルタの係数データとを保持する保持装置と接続する演算回路であって、
    互いに異なる前記参照データと共通の前記係数データとの乗算を繰り返し行うことにより前記フィルタ演算処理を実行する複数の乗算器と、
    前記複数の乗算器に対して、前記保持装置に保持された互いに異なる前記参照データを供給する第1のデータ供給手段と、
    前記複数の乗算器に対して、前記保持装置に保持された共通の前記係数データを供給する第2のデータ供給手段と、
    第1のフィルタ演算処理の結果として出力された複数のデータに対して、プーリング処理又はサブサンプリング処理して得られたデータを第2のフィルタ演算処理の参照データとして取得し、前記保持装置に保持させる処理手段と、
    前記第2のフィルタ演算処理の参照データのデータサイズに基づいて、前記複数の乗算器のうち、一部の前記乗算器に対して前記乗算を実行させ、他の乗算器に対して前記乗算を実行させないように制御する制御手段と、
    を有することを特徴とする演算回路。
  13. 前記保持装置が、前記乗算を実行する前記乗算器の数と前記第2のフィルタ演算処理の参照データのデータサイズとの対応関係を示すテーブルをさらに保持し、
    前記制御手段は、前記保持装置に保持された前記テーブルを参照して、前記乗算を実行する前記乗算器の数を決定することを特徴とする請求項12に記載の演算回路。
  14. 請求項1乃至11の何れか1項に記載の演算回路を有し、前記参照データとして画像データを処理する画像処理装置。
  15. フィルタ演算処理の参照データと該フィルタ演算処理に用いるフィルタの係数データとを保持する保持装置と接続する演算回路の制御方法であって、
    互いに異なる前記参照データと共通の前記係数データとの乗算を繰り返し行うことにより前記フィルタ演算処理を複数の乗算器によって実行する乗算工程と、
    前記複数の乗算器に対して、前記保持装置に保持された互いに異なる前記参照データを第1のデータ供給手段によって供給する第1の供給工程と、
    前記複数の乗算器に対して、前記保持装置に保持された共通の前記係数データを第2のデータ供給手段によって供給する第2の供給工程と、
    前記乗算器が前記乗算を繰り返し実行する時間は、前記フィルタ演算処理のフィルタサイズが大きくなるほど増加し、前記フィルタサイズが所定値以下である場合に、前記複数の乗算器のうち、一部の前記乗算器に対して前記乗算を実行させ、他の乗算器に対して前記乗算を実行させないように制御手段によって制御する制御工程と、
    を有することを特徴とする方法。
  16. フィルタ演算処理の参照データと該フィルタ演算処理に用いるフィルタの係数データとを保持する保持装置と接続する演算回路の制御方法であって、
    互いに異なる前記参照データと共通の前記係数データとの乗算を繰り返し行うことにより前記フィルタ演算処理を複数の乗算器によって実行する乗算工程と、
    前記複数の乗算器に対して、前記保持装置に保持された互いに異なる前記参照データを第1のデータ供給手段によって供給する第1の供給工程と、
    前記複数の乗算器に対して、前記保持装置に保持された共通の前記係数データを第2のデータ供給手段によって供給する第2の供給工程と、
    前記参照データとして外部から画像データを入力手段によって入力する入力工程と、
    入力された前記画像データから処理対象領域を検出して、該処理対象領域の画素データを前記参照データとして検出手段によって取得する取得工程と、
    前記処理対象領域のデータサイズに基づいて、前記複数の乗算器のうち、一部の前記乗算器に対して前記乗算を実行させ、他の乗算器に対して前記乗算を実行させないように制御手段によって制御する制御工程と、
    を有することを特徴とする方法。
  17. 複数回のフィルタ演算処理の参照データと該複数回のフィルタ演算処理に用いるフィルタの係数データとを保持する保持装置と接続する演算回路の制御方法であって、
    互いに異なる前記参照データと共通の前記係数データとの乗算を繰り返し行うことにより前記フィルタ演算処理を複数の乗算器によって実行する乗算工程と、
    前記複数の乗算器に対して、前記保持装置に保持された互いに異なる前記参照データを第1のデータ供給手段によって供給する第1の供給工程と、
    前記複数の乗算器に対して、前記保持装置に保持された共通の前記係数データを第2のデータ供給手段によって供給する第2の供給工程と、
    第1のフィルタ演算処理の結果として出力されたデータに対して、プーリング処理又はサブサンプリング処理して得られたデータを第2のフィルタ演算処理の参照データとして処理手段によって取得し、前記保持装置に保持させる取得工程と、
    前記第2のフィルタ演算処理の参照データのデータサイズに基づいて、前記複数の乗算器のうち、一部の前記乗算器に対して前記乗算を実行させ、他の乗算器に対して前記乗算を実行させないように制御手段によって制御する制御工程と、
    を有することを特徴とする方法。
  18. フィルタ演算処理の参照データと該フィルタ演算処理に用いるフィルタの係数データとを保持する保持装置と接続する演算回路の制御プログラムであって、
    互いに異なる前記参照データと共通の前記係数データとの乗算を繰り返し行うことにより前記フィルタ演算処理を複数の乗算器に実行させる乗算ステップと、
    前記複数の乗算器に対して、前記保持手段に保持された互いに異なる前記参照データを第1のデータ供給に供給させる第1の供給ステップと、
    前記複数の乗算器に対して、前記保持手段に保持された共通の前記係数データを第2のデータ供給手段に供給させる第2の供給ステップと、
    前記乗算器が前記乗算を繰り返し実行する時間は、前記フィルタ演算処理のフィルタサイズが大きくなるほど増加し、前記フィルタサイズが所定値以下である場合に、前記複数の乗算器のうち、一部の前記乗算器に対して前記乗算を実行させ、他の乗算器に対して前記乗算を実行させないように制御手段に制御させる制御ステップと、
    をコンピュータに実行させることを特徴とするプログラム。
  19. フィルタ演算処理の参照データと該フィルタ演算処理に用いるフィルタの係数データとを保持する保持装置と接続する演算回路の制御プログラムであって、
    互いに異なる前記参照データと共通の前記係数データとの乗算を繰り返し行うことにより前記フィルタ演算処理を複数の乗算器に実行させる乗算ステップと、
    前記複数の乗算器に対して、前記保持装置に保持された互いに異なる前記参照データを第1のデータ供給手段に供給させる第1の供給ステップと、
    前記複数の乗算器に対して、前記保持装置に保持された共通の前記係数データを第2のデータ供給手段に供給させる第2の供給ステップと、
    前記参照データとして外部から画像データを入力手段に入力させる入力ステップと、
    力された前記画像データから処理対象領域を検出手段に検出させ、該処理対象領域の画素データを前記参照データとして取得させる取得ステップと、
    前記処理対象領域のデータサイズに基づいて、前記複数の乗算器のうち、一部の前記乗算器に対して前記乗算を実行させ、他の乗算器に対して前記乗算を実行させないように制御手段に制御させる制御ステップと、
    をコンピュータに実行させることを特徴とするプログラム。
  20. 複数回のフィルタ演算処理の参照データと該複数回のフィルタ演算処理に用いるフィルタの係数データとを保持する保持装置と接続する演算回路の制御プログラムであって、
    互いに異なる前記参照データと共通の前記係数データとの乗算を繰り返し行うことにより前記フィルタ演算処理を複数の乗算器に実行させる乗算ステップと、
    前記複数の乗算器に対して、前記保持装置に保持された互いに異なる前記参照データを第1のデータ供給手段に供給させる第1の供給ステップと、
    前記複数の乗算器に対して、前記保持装置に保持された共通の前記係数データを第2のデータ供給手段に供給させる第2の供給ステップと、
    第1のフィルタ演算処理の結果として出力されたデータに対して、プーリング処理又はサブサンプリング処理して得られたデータを第2のフィルタ演算処理の参照データとして処理手段に取得させ、前記保持装置に保持させる取得工程と、
    前記第2のフィルタ演算処理の参照データのデータサイズに基づいて、前記複数の乗算器のうち、一部の前記乗算器に対して前記乗算を実行させ、他の乗算器に対して前記乗算を実行させないように制御手段に制御させる制御ステップと、
    をコンピュータに実行させることを特徴とするプログラム。
JP2016163408A 2016-08-24 2016-08-24 演算回路、その制御方法及びプログラム Active JP6800656B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2016163408A JP6800656B2 (ja) 2016-08-24 2016-08-24 演算回路、その制御方法及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016163408A JP6800656B2 (ja) 2016-08-24 2016-08-24 演算回路、その制御方法及びプログラム

Publications (2)

Publication Number Publication Date
JP2018032190A true JP2018032190A (ja) 2018-03-01
JP6800656B2 JP6800656B2 (ja) 2020-12-16

Family

ID=61304315

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016163408A Active JP6800656B2 (ja) 2016-08-24 2016-08-24 演算回路、その制御方法及びプログラム

Country Status (1)

Country Link
JP (1) JP6800656B2 (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111382861A (zh) * 2018-12-31 2020-07-07 爱思开海力士有限公司 处理系统
JP2020140625A (ja) * 2019-03-01 2020-09-03 キヤノン株式会社 画像処理装置及び画像処理方法
CN112005251A (zh) * 2018-05-11 2020-11-27 奥林巴斯株式会社 运算处理装置
JP2020204894A (ja) * 2019-06-17 2020-12-24 キヤノン株式会社 フィルタ処理装置及びその制御方法
WO2021070303A1 (ja) * 2019-10-09 2021-04-15 オリンパス株式会社 演算処理装置

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000308056A (ja) * 1999-04-16 2000-11-02 Sanyo Electric Co Ltd 画像圧縮装置
JP2001092661A (ja) * 1999-09-22 2001-04-06 Hitachi Ltd データ処理装置
JP2006293741A (ja) * 2005-04-12 2006-10-26 Sanyo Electric Co Ltd プロセッサ
WO2010064728A1 (en) * 2008-12-04 2010-06-10 Canon Kabushiki Kaisha Convolution operation circuit and object recognition apparatus
JP2014203135A (ja) * 2013-04-01 2014-10-27 キヤノン株式会社 信号処理装置、信号処理方法、及び、信号処理システム
JP2016115248A (ja) * 2014-12-17 2016-06-23 株式会社デンソー 演算処理装置

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000308056A (ja) * 1999-04-16 2000-11-02 Sanyo Electric Co Ltd 画像圧縮装置
JP2001092661A (ja) * 1999-09-22 2001-04-06 Hitachi Ltd データ処理装置
JP2006293741A (ja) * 2005-04-12 2006-10-26 Sanyo Electric Co Ltd プロセッサ
WO2010064728A1 (en) * 2008-12-04 2010-06-10 Canon Kabushiki Kaisha Convolution operation circuit and object recognition apparatus
JP2010134697A (ja) * 2008-12-04 2010-06-17 Canon Inc コンボリューション演算回路、階層的コンボリューション演算回路及び物体認識装置
JP2014203135A (ja) * 2013-04-01 2014-10-27 キヤノン株式会社 信号処理装置、信号処理方法、及び、信号処理システム
JP2016115248A (ja) * 2014-12-17 2016-06-23 株式会社デンソー 演算処理装置

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112005251A (zh) * 2018-05-11 2020-11-27 奥林巴斯株式会社 运算处理装置
CN111382861A (zh) * 2018-12-31 2020-07-07 爱思开海力士有限公司 处理系统
CN111382861B (zh) * 2018-12-31 2023-11-10 爱思开海力士有限公司 处理系统
JP2020140625A (ja) * 2019-03-01 2020-09-03 キヤノン株式会社 画像処理装置及び画像処理方法
JP7292903B2 (ja) 2019-03-01 2023-06-19 キヤノン株式会社 画像処理装置及び画像処理方法
JP2020204894A (ja) * 2019-06-17 2020-12-24 キヤノン株式会社 フィルタ処理装置及びその制御方法
US11822900B2 (en) 2019-06-17 2023-11-21 Canon Kabushiki Kaisha Filter processing device and method of performing convolution operation at filter processing device
WO2021070303A1 (ja) * 2019-10-09 2021-04-15 オリンパス株式会社 演算処理装置

Also Published As

Publication number Publication date
JP6800656B2 (ja) 2020-12-16

Similar Documents

Publication Publication Date Title
JP5376920B2 (ja) コンボリューション演算回路、階層的コンボリューション演算回路及び物体認識装置
US10210419B2 (en) Convolution operation apparatus
JP6945986B2 (ja) 演算回路、その制御方法及びプログラム
JP6800656B2 (ja) 演算回路、その制御方法及びプログラム
JP7329533B2 (ja) 演算を加速するための方法および加速器装置
JP6936592B2 (ja) 演算処理装置およびその制御方法
JP6945987B2 (ja) 演算回路、その制御方法及びプログラム
US9053387B2 (en) Image processing circuit and image detection device
JP7402623B2 (ja) フィルタ処理装置及びその制御方法
JP6532334B2 (ja) 並列演算装置、画像処理装置及び並列演算方法
US11704546B2 (en) Operation processing apparatus that calculates addresses of feature planes in layers of a neutral network and operation processing method
JP7391553B2 (ja) 情報処理装置、情報処理方法、及びプログラム
JP4325812B2 (ja) ベクター画像描画回路およびベクター画像描画方法
JP7321213B2 (ja) 情報処理装置、情報処理方法
CN110998656B (zh) 鉴别计算装置、鉴别计算方法及存储介质
JP2010123083A (ja) 相関処理装置及びその相関処理装置で読みとり可能な媒体
JP2791538B2 (ja) 画像縮小方法および画像処理装置
JP2022145001A (ja) 画像処理装置、画像処理方法
CN116757976A (zh) 一种高效的多曝光图像分块融合方法
Shcherbakov et al. SVD-scaling of digital images in the information and communication systems
KR20170068774A (ko) 적분 영상을 사용하지 않는 surf 특징점 추출 방법 및 장치
JP2010134846A (ja) 画像処理装置及び画像処理プログラム
CN104811584A (zh) 影像处理电路与方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190809

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200514

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200602

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200729

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20201027

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20201125

R151 Written notification of patent or utility model registration

Ref document number: 6800656

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151