[go: up one dir, main page]

JP5368687B2 - 演算処理装置および方法 - Google Patents

演算処理装置および方法 Download PDF

Info

Publication number
JP5368687B2
JP5368687B2 JP2007250063A JP2007250063A JP5368687B2 JP 5368687 B2 JP5368687 B2 JP 5368687B2 JP 2007250063 A JP2007250063 A JP 2007250063A JP 2007250063 A JP2007250063 A JP 2007250063A JP 5368687 B2 JP5368687 B2 JP 5368687B2
Authority
JP
Japan
Prior art keywords
buffer
processing
network
memory
calculation
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.)
Expired - Fee Related
Application number
JP2007250063A
Other languages
English (en)
Other versions
JP2009080693A (ja
Inventor
嘉則 伊藤
政美 加藤
貴久 山本
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 JP2007250063A priority Critical patent/JP5368687B2/ja
Priority to CN2008801083659A priority patent/CN101809597B/zh
Priority to PCT/JP2008/066912 priority patent/WO2009041350A1/en
Priority to US12/679,574 priority patent/US8391306B2/en
Publication of JP2009080693A publication Critical patent/JP2009080693A/ja
Application granted granted Critical
Publication of JP5368687B2 publication Critical patent/JP5368687B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/0464Convolutional networks [CNN, ConvNet]
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/40Extraction of image or video features
    • G06V10/44Local feature extraction by analysis of parts of the pattern, e.g. by detecting edges, contours, loops, corners, strokes or intersections; Connectivity analysis, e.g. of connected components
    • G06V10/443Local feature extraction by analysis of parts of the pattern, e.g. by detecting edges, contours, loops, corners, strokes or intersections; Connectivity analysis, e.g. of connected components by matching or filtering
    • G06V10/449Biologically inspired filters, e.g. difference of Gaussians [DoG] or Gabor filters
    • G06V10/451Biologically inspired filters, e.g. difference of Gaussians [DoG] or Gabor filters with interaction between the filter responses, e.g. cortical complex cells
    • G06V10/454Integrating the filters into a hierarchical structure, e.g. convolutional neural networks [CNN]
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/94Hardware or software architectures specially adapted for image or video understanding
    • G06V10/955Hardware or software architectures specially adapted for image or video understanding using specific electronic processors

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Evolutionary Computation (AREA)
  • Software Systems (AREA)
  • Molecular Biology (AREA)
  • Artificial Intelligence (AREA)
  • General Health & Medical Sciences (AREA)
  • Biophysics (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Multimedia (AREA)
  • Biodiversity & Conservation Biology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Neurology (AREA)
  • Image Analysis (AREA)

Description

本発明は、例えばパターン識別装置、パターン識別システムや階層的なフィルタ演算処理装置等に適用可能なネットワーク演算を実行する演算処理装置および方法に関するものである。
パターン識別システムや予測システム、制御システム等への応用として、ニューラルネットワークを利用した信号処理装置が広く利用されている。一般に、ニューラルネットワークはマイクロプロセッサ上で動作するソフトウェアとして実現される事が多く、パーソナルコンピュータやワークステーション等のアプリケーションソフトウェアとして提供されている。
図2は、一般的な階層結合型ニューラルネットワークを利用する画像処理装置の概念的な構成例を示すブロック図である。21は検出対象のデータであり、例えば、ラスタスキャンされた画像データを示す。22は画像データ21中から所定の物体を検出する演算ユニットであり、図示の例では3階層のニューラルネットワークで構成されている。23は演算結果に相当する出力データ面である。演算ユニット22は、画像データ21中の所定の画像領域24を走査参照しながら処理を行う事で、画像中に存在する検出対象を検出する。出力データ面23は、検出対象の画像データ21と同じサイズのデータ面である。出力データ面23には、画像データ21の全ての領域を走査しながら処理した演算ユニット22の検出出力が走査順に格納される。演算ユニット22は、対象物が検出された位置で大きな値を出力する事から、当該出力データ面23を走査する事で対象物の画像面内の位置を把握する事ができる。
演算ユニット22において、25,26、27は夫々ニューラルネットワークの階層を示し、各階層に所定の数のニューロン28が存在する。第1階層25は参照画像の画素数と同じ数のニューロン(ノード)28を有する。各ニューロンは所定の重み係数でフィードフォワード結合する。
図3は1つのニューロン28の構成例を示すブロック図である。in_1〜in_nは入力値であり、第2階層以降では前階層のニューロンの出力値である。累積加算器32は、当該入力値と学習によって得られた係数w_1〜w_nを乗じた結果を累積加算する。非線形変換処理部33は、累積加算器32の累積加算結果をロジスティック関数や双曲正接関数(tanh関数)等により非線形変換し、その変換結果を検出結果outとして出力する。なお、階層型ニューラルネットワークにおいて、夫々のニューロンに必要な重み係数w_1〜w_nは一般的に知られているバックプロパゲーション等の学習アルゴリズムを使用して、検出する対象物毎に決定されているものである。
このような階層結合型ニューラルネットワークを組み込み機器等へ高性能かつ安価に実装する事を目的として、アナログハードウェアやディジタルハードウェアで実現する手法が提案されている。
特許文献1では、単階層のアナログニューラルネットワークハードウェアを時分割多重利用する事で多階層化を実現する階層構造ニューラルネットのアーキテクチャが開示されている。又、特許文献2ではディジタルハードウェアにより実現する方法が開示されている。
一方、ニューラルネットワークの中でも、Convolutional Neural Networksと呼ばれるニューラルネットワークを用いた演算手法は識別対象の変動に対して頑健なパターン認識を可能にする手法として知られている。以下、Convolutional Neural NetworksはCNNと略記する。例えば、特許文献3及び特許文献4では、CNN演算を画像中の対象物識別や検出に適用した例が提案されている。
図4は簡単なCNNの例を示す論理的なネットワーク構成図である。ここでは、第1階層406の特徴数が3、第2階層410の特徴数が2、第3階層411の特徴数が1の3層CNNの例が示されている。401は画像データであり、ラスタスキャンされた画像データに相当する。403a〜403cは第1階層406の特徴面を示す。特徴面とは、所定の特徴抽出フィルタ(コンボリューション演算の累積和及び非線形処理)で前階層のデータを走査しながら演算した結果を示す画像データ面である。特徴面はラスタスキャンされた画像データに対する検出結果であるため面で表す。特徴面403a〜403cは401から夫々対応する特徴抽出フィルタにより生成される。例えば、特徴面403a〜403cは、夫々模式的にコンボリューションカーネル404a〜404cに対応する2次元のコンボリューションフィルタ演算とその演算結果の非線形変換により生成される。なお、402はコンボリューション演算に必要な参照画像領域を示す。
例えば、カーネルサイズ(水平方向の長さと垂直方向の高さ)が11×11のコンボリューションフィルタ演算は以下に示すような積和演算により処理する。
Figure 0005368687
…(1)
ここで、
input(x,y):座標(x、y)での参照画素値、
output(x,y):座標(x、y)での演算結果、
weight(column,row):座標(x+column、y+row)での重み係数、
columnSize=11,rowSize=11:フィルタカーネルサイズ(フィルタタップ数)である。
404a〜404cは夫々異なる係数のコンボリューションフィルタカーネルである。また、特徴面によってコンボリューションカーネル404a〜404cのサイズも異なる。
CNN演算では、複数のフィルタカーネルを画素単位で走査しながら積和演算を繰り返し、最終的な積和結果を非線形変換する事で特徴面を生成する。特徴面403aを算出する場合は、前階層との結合数が1であるため、1つのコンボリューションカーネル404aが用いられる。一方、特徴面407a及び407bを計算する場合、前階層との結合数が3であるため、夫々409a〜409c及び409d〜409fに相当する3つのコンボリューションフィルタの演算結果を累積加算する。つまり、特徴面407aは、コンボリューションカーネル409a〜409cの出力を累積加算し、最後に非線形変換処理する事によって得られる。
ここで、409a〜409fは何れも異なるフィルタ係数のコンボリューションカーネルである。また、コンボリューションカーネル409a〜409cと409d〜409fは、図4に示されるように、それぞれ異なるカーネルサイズを有する。コンボリューションフィルタの累積加算及び非線形変換処理の基本的構成は図3に示すニューロンの構成と同様である。即ち、コンボリューションカーネルの係数が重み係数w_1〜w_nに相当する。特徴面407a、407b、408の様に複数の前階層の特徴面と結合される場合、複数のコンボリューションカーネルの演算結果が累積加算器32で蓄積される事になる。即ち、総結合数はコンボリューションカーネルサイズ×前階層の特徴数に相当する。
図5はCNN演算における図形検出処理の一例を説明する図である。51a〜51cは第1階層406の特徴抽出対象を模式的に示す図であり、それぞれ水平方向のエッジ及び斜め方向のエッジを抽出する様に学習されたコンボリューションカーネルである。52a、52bは複数の第1階層における特徴抽出結果とその空間的な配置関係から、第2階層410で抽出される図形である。53は最終的に抽出される図形を示している。53は複数の第2階層410における特徴抽出結果とその空間配置関係から、第3階層411で抽出される図形である。コンボリューションカーネルの各フィルタ係数は特徴毎にパーセプトロン学習やバックプロパゲーション学習等の一般的な手法を用いて予め学習により決定されているものとする。物体の検出や認識等においては、10×10以上の大きなサイズのフィルタカーネルを使用する事が多い。また、一般的に特徴毎にコンボリューションカーネルのサイズは異なる。
このように、CNN演算では、特徴抽出毎に画像面単位で結果を保持しながら階層的に結合する事で、プリミティブな特徴とその空間的な配置関係に基づく頑健なパターン検出を実現する。
特許第2679730号明細書 特開平3−55658号公報 特開平10−021406号公報 特開2002−358500号公報
図2で説明した様に、一般的な階層型ニューラルネットワークを利用した画像中の物体検出装置において、演算処理に必要なメモリサイズは、入出力画像バッファを除くと、各ニューロン出力を保持するためのバッファメモリがあれば十分である。即ち、ニューロン数と等価な数の所定ビット数のメモリがあれば所望の演算処理を実行できる。
一方、CNN演算の場合、前階層の複数の特徴抽出結果の空間的配置に基いて特徴抽出を行うため、各階層間で所定サイズのデータバッファが必要になる。例えば、図4に示すCNN演算構成例の場合、入出力画像バッファを除くと画像サイズ×5個の特徴面バッファメモリを用意している(特徴面403a〜403c、特徴面407a〜407b)。このため、一般的な階層型ニューラルネットに比べ処理に必要なメモリサイズが増大する。
特許文献3及び特許文献4に開示されている手法も、特徴抽出結果を画像面で保持する手法であり、処理に必要なメモリサイズが一般的な階層型ニューラルネットワークによる方式に比べて大きい。
このため、特に、ハードウェアにより実現する場合、LSIの内部にサイズの大きいRAM(RandomAccess Memory)を用意する必要があり、回路規模が増大する。ソフトウェアにより実現する場合であっても、組み込み機器に実装する場合、システムに必要なメモリ量が増大する事で同様にコストが上昇する。すなわち、演算に使用可能なメモリ量は、システムにかけることのできるコストによって定まる有限な値となる。
一方、メモリの増大を避ける手法として、入力するデータを領域分割して投入する方法が利用されている。しかしながら、参照領域が広い演算を階層的に処理する場合、分割投入するデータを広い範囲でオーバーラップさせる必要があるため、結果的に処理対象領域が増加してしまい、処理効率及び処理速度が低下する。
本発明はこのような問題点を解決するためになされたものであり、CNN演算等のネットワーク構造で接続された複数の処理ノードによって行われる演算処理を、限られたメモリ量で効率良く実現する事を目的とする。
上記課題を解決するために、本発明の一態様による演算処理装置は以下の構成を備える。すなわち、
入力データに対して演算を行い演算結果データを生成する、複数の論理的な処理ノードを接続したネットワークでネットワーク演算を実行する演算処理装置であって、
前記ネットワークを構成する複数の処理ノードの各々が演算結果データを保持するためのバッファ用の記憶領域をメモリに割り当てるために、1つの処理ノードに対して演算結果データの一部を保持するバッファを割り当てるバンドバッファ方式と、1つの処理ノードに対して前記入力データに対する演算結果データの全てを保持するバッファを割り当てるページバッファ方式とを含む複数種類のバッファ割り当て方法のそれぞれについて、前記ネットワーク演算に必要となる前記記憶領域のメモリ量を、当該ネットワークの構成に基づいて算出する算出手段と、
前記バッファとして割当て可能なメモリ量を取得する取得手段と、
前記複数種類のバッファ割り当て方法のうち、前記算出手段で算出されたメモリ量が前記取得手段で取得されたメモリ量以下になるバッファ割り当て方法選択する選択手段と、
前記選択手段で選択されたバッファ割り当て方法に応じた実行順で、前記ネットワーク演算における各処理ノードによる演算を実行させる実行手段とを備える。
また上記課題を解決するための、本発明の他の態様による演算処理方法は、
入力データに対して演算を行い演算結果データを生成する、複数の論理的な処理ノードを接続したネットワークでネットワーク演算を実行する演算処理方法であって、
前記ネットワークを構成する複数の処理ノードの各々が演算結果データを保持するためのバッファ用の記憶領域をメモリに割り当てるために、1つの処理ノードに対して演算結果データの一部を保持するバッファを割り当てるバンドバッファ方式と、1つの処理ノードに対して前記入力データに対する演算結果データの全てを保持するバッファを割り当てるページバッファ方式とを含む複数種類のバッファ割り当て方法のそれぞれについて、前記ネットワーク演算に必要となる前記記憶領域のメモリ量を、当該ネットワークの構成に基づいて算出する算出工程と、
前記バッファとして割当て可能なメモリ量を取得する取得工程と、
前記複数種類のバッファ割り当て方法のうち、前記算出工程で算出されたメモリ量が前記取得工程で取得されたメモリ量以下になるバッファ割り当て方法のうちの1つを選択する選択工程と、
前記選択工程で選択されたバッファ割り当て方法に応じた実行順で、前記ネットワーク演算における各処理ノードによる演算を実行させる実行工程とを備える。
本発明によれば、CNN演算等のネットワーク構造で接続された複数の処理ノードによって行われる演算処理を、限られたメモリ量で効率良く実現することができる。中間演算結果を介して演算部を接続するネットワーク型演算器による演算処理を、限られたメモリ量において最適に処理することが可能となる。すなわち、同じ構成のハードウェアで、より多様なネットワーク型演算処理を実行することが可能となる。
以下、本発明の好適な実施形態について、添付の図面を用いて説明する。
<第1実施形態>
図6は第1実施形態に関する階層的演算処理回路を具備したパターン検出装置の構成例である。当該装置は画像データ中の特定の物体(画像パターン)を検出する機能を有する画像処理装置である。図6において61は画像入力部であり、光学系、CCD(Charge-Coupled Devices)又はCMOS(Complimentary Metal OxideSemiconductor)センサ等の光電変換デバイスを有する。また、画像入力部61は、光電変換間デバイスを制御するドライバ回路/ADコンバータ/各種画像補正を司る信号処理回路/フレームバッファ等を具備する。62は前処理部であり、検出処理を効果的に行うための各種前処理を行う。具体的には、前処理部62は、色変換処理/コントラスト補正処理等の画像データ変換をハードウェアで処理する。63はCNN処理部であり、本実施形態による階層的演算処理回路を含み、特徴検出処理部として機能する。なお、CNN処理部63の詳細は図1を用いて後述する。66はDMAC(DirectMemory Access Controller)であり、画像バス64上の各処理部間のデータ転送、及び、画像バス64上のデバイスとCPUバス67上のRAM70間のデータ転送を司る。65はブリッジであり、画像バス64とCPUバス67のブリッジ機能を提供する。68はCPUであり、本装置全体の動作を制御するものである。69はROM(ReadOnly Memory)であり、CPU68の動作を規定する命令や各種演算に必要なパラメータデータを格納する。例えば、CNN処理部63の動作に必要な重み係数、ネットワーク結合情報、シーケンス情報等もROM69に格納されている。70はCPU68の動作に必要なメモリ(RAM:RandomAccess Memory)である。RAM70はDRAM(Dynamic RAM)等の比較的容量の大きいメモリで構成される。CPU68はブリッジ65を介して画像バス64上の各種処理部にアクセスする事が可能である。画像バス64とCPUバス67を分離する事により、ハードウェアによる画像入力部61、前処理部62、CNN処理部63の各処理部の動作とCPU68の動作を同時に並列実行させることができる。
図6の階層的演算処理回路を具備したパターン検出装置は、例えば図14に示されるようなConvolutionalNeural Networks(以下CNNと略記する)のような階層的な演算を行うのに用いられる。図14において処理ノードとは、コンボリューション演算の対象画像とコンボリューションカーネルからコンボリューション演算結果を得る処理を行うブロックを指す。なお、図14では便宜上第0処理ノードを設けたが、通常第0処理ノードでは特になにも処理は行われず、入力画像が第1〜第3処理ノードへ入力される。例えば、図14の第4処理ノードでは、第1〜3処理ノードの出力に対し、それぞれ係数の異なるコンボリューションカーネルを適用してコンボリューション演算を行う。そして、それぞれのコンボリューション演算の結果を加算し、その加算結果に非線形変換を行って第4処理ノードの演算結果を得ている。
CNN処理部63に図14に示されるCNNを適用する場合、演算処理部を処理ノード間で時分割に使用することで、各処理ノードで規定された演算を実行する。例えば、まず第1処理ノードで規定された演算を行い、その後第2処理ノードで規定された演算を行う、というようにCNNの演算が実行されていく。つまり、CNNを構成する処理ノードは複数存在し、論理的なネットワークを構成するが、処理ノードで規定された演算を実行する演算処理部は物理的に1つしか存在しない。
図1はCNN処理部63の詳細を説明する図である。図1において、101は演算部であり、所定のデータ群に対してコンボリューション演算と非線形処理を実行する。図12に演算部101の一例を示す。図12において、1201は乗算器であり、係数選択部1204がカーネル選択信号に従って重み係数記憶部1205より選択し、出力する重み係数と、カーネル選択信号と同期して入力される入力データとを乗じる。1202は累積加算器であり、乗算器1201の出力を所定の期間累積加算する。1203は非線形変換処理であり、ロジスティック関数やtanh関数を用いて累積加算結果を非線形変換する。非線形変換は、例えば、各入力値に対して所定の関数値を列挙する関数テーブルで実現される。1205は重み係数記憶部であり、検出対象と処理ノードに応じた複数の重み係数データが格納されている。重み係数記憶部1205は、例えばRAM等により構成される。1204は係数選択部であり、ネットワーク構成管理部108が指示するカーネル選択信号に従って、対応する重み係数を順次記憶部から読み出す。
図1に戻り、102はワークメモリ(以下、単にメモリという)であり、入力画像/中間層の特徴抽出結果/最終検出結果等を格納する。本実施形態では、コンボリューション演算を高速に実行するため、メモリ102として、高速にランダムアクセスが可能なSRAM(Static RAM)を使用している。
103はメモリアクセス制御部であり、メモリ102に対するアクセス、アドレスの生成、リード/ライト信号制御及びデータバスの方向制御等を司る。メモリアクセス制御部103はリングバッファ設定部104-1〜104-nの出力に従ってメモリ102にアクセスする。
104-1〜104-nは複数のリングバッファ設定部であり、それぞれ各処理ノードがメモリ102をリングバッファとして利用するために用いられる。以下、リングバッファ設定部104-1〜104-nの任意の1つを指す場合は、リングバッファ設定部104と記載する。リングバッファ設定部104は、CNN演算の論理的な各処理ノード毎に一つずつ用意される。各リングバッファ設定部104は、リングバッファのサイズを指定するリングサイズ設定部106、リングバッファの動作状況を保持するリングカウンタ105及びメモリ102上の物理アドレスを決定するためのオフセットアドレス設定部107を具備する。リングバッファ設定部104の出力はセレクタ1121、1122で選択されて、メモリアクセス制御部103へ提供される。この構成により、メモリ102には、ネットワークを構成する複数の処理ノードの各々に対応して、演算結果データを保持するための中間バッファ用の記憶領域が割り当てられることになる。その詳細は、後述する。
108はネットワーク構成管理部であり、1つの演算部101を利用して論理的な階層ネットワーク処理を実現するために、各動作を制御する。論理的な階層結合関係を指定する構成情報は、ネットワーク構成情報設定部110内にテーブルデータ(以下、構成情報テーブルという)として保持される。構成情報テーブルはレジスタやRAMで構成される。ネットワーク構成管理部108は、構成情報テーブルに従ってメモリアクセス制御部103や演算部101の動作を順次制御することにより、後述する所定の単位演算をベースとした階層ネットワークの演算処理を実現する。
シーケンス制御部109は、シーケンス情報設定部111に記されたシーケンス情報に従って、各処理ノードによる単位演算の実行順を制御する。本実施形態では、1ライン単位の出力を得る演算処理を所定の演算処理単位(単位演算)としている。すなわちライン単位で論理的な処理ノードを切り替えながら時分割で処理を実行することで階層型ネットワーク演算が遂行される。シーケンス情報設定部111はシーケンス情報を保持するRAM等により構成される。
113はCPUバスアクセス制御部であり、CPU68がCNN処理部63内の各種レジスタやメモリにアクセスするためのバスインターフェースである。例えば、
・リングサイズ設定部106のリングバッファサイズ、
・ネットワーク構成情報設定部110の構成情報テーブル、
・シーケンス情報設定部111のシーケンス情報、
・演算部101の重み係数記憶部1205内の重み係数データ、
等の各種設定データは、当該インターフェースを介してCPU68から書き込むことができる。
ここで、図22を用いて本実施形態における所定の単位演算について説明する。先に述べたとおり、本実施形態での所定の単位演算とは、演算部101を用いて行われるライン単位のコンボリューション演算処理である。ただし、図22では、簡単のため、一つの処理ノードの演算出力画像(または、ネットワークへの入力画像)を演算対象画像としてコンボリューション演算を行う場合が示されており、非線形変換も省略されている。
図22の(a)において、2201は演算対象画像(参照画像)を表している。演算対象画像2201において、模式的に示す最小一升が、ラスタスキャン順で示された入力画像又は前階層の処理ノードでの演算結果画像である演算対象画像の画素(input(x, y)、x:水平方向位置、y:垂直方向位置)を示す。
2202は演算結果画像を表し、模式的に示す最小一升が、ラスタスキャン順の演算結果画素(output(x,y)、x:水平方向位置、y:垂直方向位置)を示すものとする。
演算対象画像2201内の太線で囲まれた領域2203は、output(6, 7)位置のコンボリューション演算を処理する場合の参照画像の領域を示す。領域2203では、コンボリューションカーネルのサイズが水平方向「11」、垂直方向「13」の場合が示されている。
演算結果画像2202の太線で囲まれた領域2204は、演算対象画像2201に対して単位演算(水平方向1行分の演算)を行った場合の結果領域を示す。ここで、領域2204内の格子状の網掛け領域2206は、コンボリューションカーネルのサイズに依存して発生する周辺領域(演算が行われない領域)の画素である。つまり、output(5, 7)の位置の演算を行うべき参照画像領域は、領域2203を左に1画素分ずらしたものとなる。しかしながら、そのような領域は演算対象画像2201(参照領域)からはみ出してしまうため、一部の参照画素が存在しないことになる。なお、階層的処理においてこの周辺領域(無効領域)をどう扱うか(削除するか、デフォルト値を埋め込むか等)は、本発明において本質的でないので、ここでは例えば、デフォルト値を埋め込むとする。尚、2204より上のラインについても同様に無効領域となる。
図22から明らかなように、1ラインの単位演算を行うには、演算対象画像2201の必要領域として、少なくとも領域2205が必要となる。領域2205は、図22において網掛け領域として示されており、水平方向サイズは演算対象画像2201と同じサイズ、垂直方向サイズはコンボリューションカーネルの垂直方向サイズが必要となる。説明の都合上、この領域を単位演算対象画像領域2205と呼ぶ。領域2204で示されるような単位演算を、単位演算対象画像領域2205をずらしながら行うことで、演算対象画像2201の全領域にわたってコンボリューション演算を行うことができる。例えば、図22の(b)には、1画素下にずらした単位演算対象画像領域に対して単位演算を行った場合を示している。この時、ある単位演算を実行できるか否かは、その単位演算の単位演算対象画像領域2205’の画素データが、前階層の処理ノードによって演算され、その結果が出力されているか否かに依存する。もちろん、複数の参照画像を入力として演算に用いる処理ノードの場合は、全ての参照画像についての単位演算対象画像領域の画素データが出力されている必要がある。
図7は、図4で説明したCNNネットワークに対し、本実施形態を適用した場合の動作の一例を説明する図である。
図7において、701は入力層であり、所定サイズの検出対象画像データが入力される。703a〜703cは第1階層706の演算出力を格納するメモリ領域を示す。すなわち、入力層701の入力面に対するコンボリューション演算704a〜704c及び非線形変換の結果が、メモリ領域703a〜703cにそれぞれ格納される。第1階層の演算結果である特徴面は論理的には入力層701と同じサイズのデータ面となる。しかしながら、ここでは所定高さのリングバッファとして機能するメモリ領域703a、703bに特徴面が格納される。このリングバッファは、幅が入力画像と同じであり、ライン単位で循環するバンドバッファである。
図13は、本実施形態によるリングバッファの動作を模式的に説明する図である。ここでは説明のためリングバッファの高さ(循環数)を6とする。また、ここでは、入力画像1300の8ライン分の画像データが、L1〜L8としてラスタスキャン順に入力された場合に、6ライン分のリングバッファにどのように保持され、参照されるかを説明する。
ここでリングバッファに付随するリングカウンタは0〜5の値を循環する。また、リングカウンタの初期値は5であり、1ライン分のデータが投入されるときに1インクリメントされるものとする。ただし、リングバッファの循環数と同じ値になると、リングカウンタのカウンタ値は0に戻る。例えば、本リングバッファでは循環数は6であるので、カウンタ値は5の次は0に戻ることになる。
1301はリングバッファに入力画像1300の先頭から6ライン分のデータ(L1〜L6)がフルに充填された状態を表し、リングカウンタの値は「5」となっている。次のラインを格納するとき、リングカウンタはインクリメントされ0に戻り、リングバッファの先頭行にL7が充填される。すなわちリングカウンタの値は、最新のラインを格納したリングバッファ中の行を示す(0基準)。この状態を、図13の1302に示す。
1302の状態では、リングバッファからL2〜L7のバンドを参照する事が可能となり、その開始行はリングカウンタの値+1の行である。更に次のラインL8を格納する場合は、1303に示すように2行目位置にL8が充填され、リングカウンタの値は1となる。この場合、L3〜L8を参照する事が可能となり、先頭行はやはりリングカウンタの値+1の行となっていることが分かる。
尚、リングバッファの循環数を入力画像データのライン数に一致させると、そのバッファにおいては、1ページ分の処理中において前のラインが上書きされなくなる。すなわち、リングバッファは、バンドバッファとしてだけでなく、ページバッファとしても機能させることができる。
ここで、各処理ノードのリングバッファに最低限必要な高さ(循環数)は、次階層の処理ノードが単位演算処理を行う際の、単位演算対象画像領域(図22の2205)の高さに一致する。すなわち、各リングバッファの高さ(循環数)は、その処理ノードの後段に接続される全処理ノードのコンボリューションカーネルのサイズに基づいて決定することができる。
例えば図7において、メモリ領域703aの場合、コンボリューションカーネル709aと709dの単位演算対象画像領域の高さのうち大きい方の値をメモリ領域703aのリングバッファの最低限必要な高さとする。このように定めると、メモリ領域703aによって形成されたリングバッファに納められた画素データを用いて、コンボリューションカーネル709aと709dのどちらのコンボリューション演算も可能となる。同様にメモリ領域703b、703cに最低限必要な高さは、夫々コンボリューションカーネル709b/709e、コンボリューションカーネル709c/709fのカーネルサイズから決定できる。同様に、メモリ領域707a、707bは、夫々コンボリューションカーネル712a、712bの単位演算対象画像領域の高さから決定できる。
なお、ここで決定しているのは、あくまで次階層が演算する上で最低限必要な高さであるので、他の必要性があればさらに大きい高さのリングバッファを用いてももちろんよい。例えば、図7では、メモリ領域703a、703b、707a、707bはカーネルサイズから規定される次階層演算のために最低限必要な高さをリングバッファ高さとしている。しかし、メモリ領域703cは、次階層演算に使われるのみならず、CPU68が判定処理に使用する特徴検出データでもあるため、入力画像データと同じサイズのページバッファを割り当てている。すなわちCPU68は、最終階層の特徴データ713だけでなく、メモリ領域703cに格納された第1階層の特徴データも参照して検出対象画像の存在を判定することができる。
この様に、本実施形態のCNN処理部を用いると、中間層の特徴面をネットワークの結合状態及び目的に応じて最適なサイズのバッファ(メモリ領域703a、703b、703c、707a、707b)にアサインする事が可能となる。
ところで、図7に示した本実施形態のCNN演算処理では、中間処理ノードの演算結果を保持するメモリ領域703a、703b、707a、707bをバンドバッファとしている。このように、中間処理ノードの出力バッファ(中間バッファ)をバンドバッファとすることにより、図4で説明した従来のCNN演算処理よりも、メモリ使用容量を減らしている。しかしながら、ネットワーク構成と演算シーケンスによっては、必ずしもバンドバッファによる中間バッファがトータルのメモリ使用量を最小にするとは限らない。以下、そのようなケースについて説明する。
図23は、N個の階層からなるCNNに対し、中間バッファとしてバンドバッファを割り当てた場合の例を示す図である。図23において、各円は論理的な処理ノードを表し、各円の右に付属する四角がそれぞれの処理ノードに割り当てられたバッファを示している。ここでは入力画像である第0階層と出力層である第N階層の処理ノードには、1ページ分のフレームバッファ(ページバッファ)を割当て、他の中間層のノードにはバンドバッファを割り当てている。なお、本明細書では、中間層の出力結果保持バッファを特に中間バッファと呼んでいる。また、一部の円の左側に付属する四角は、その処理ノードのコンボリューションカーネルを例示するものであるが、図が複雑になるので一部のみしか記述していない。
第0階層のノードは入力層であり、上述した通り便宜上処理ノードを割り当てているが、実際に演算処理を行うわけではなく、単に入力画像データが入力バッファメモリに格納されている状態を示す。
また、最終層(第N階層)に割り当てられているバッファは出力バッファであって、この例では2つの処理ノードに対し入力画像サイズと同等のサイズのバッファがそれぞれ割り当てられている。もちろんこれら出力バッファの大きさは、このCNNによる演算結果を使用する、例えばCPU68による後処理部の都合によって定めればよいもので、コンボリューション演算の都合にはよらない。例えば、最終出力結果からある範囲の重心を取ってその座標に検出対象が存在するとする後処理を行うならば、出力バッファの大きさは重心を取る範囲の演算結果のみを保持できる大きさで十分である。
図23のCNNでは、中間バッファ(第1階層〜第N−1階層の出力バッファ)を、図7で説明したのと同様のバンドバッファとして割り当てている。それぞれのバンドバッファの横幅は入力画像幅と同じであり、縦高さは先に説明した通り、接続される次階層の処理ノード(隣接上層処理ノード)のコンボリューションカーネルのサイズによって定まる最低限必要な高さとしている。尚、ここでは説明を簡単にするため、中間層の結果は後処理には用いないものとする。
このように中間バッファを全てバンドバッファとして割り当てるとき、CNN全体の処理シーケンスは、ライン単位の演算処理を、処理ノードを切り替えて順に行っていくことになる。例えば第1階層の第1処理ノードのバンドバッファの高さが5だったとすると、5ライン分の演算処理が終わりその結果が格納されると、この処理ノードの演算結果を参照する第2階層の処理ノードが、1ライン分の単位演算処理を行うことができる。逆に第2階層の処理ノードの処理が終わらない限り、バンドバッファ内の5ラインの内の1ラインも破棄することはできない。そのため、新たな演算結果の格納場所がないため、第1階層の第1処理ノードは次の単位演算を行うことができない。こうして、第1階層の第1処理ノードは、その演算結果を必要とする全ての第2階層の処理ノードが1ライン分の単位演算処理を完了したら、第1階層の第1処理ノードは次の1ラインの単位演算処理を行うことができるということになる。
従って、CNN全体で処理が1ライン単位ずつ進んでいくことになるので、全ての中間バッファは、基本的に同時に存在している必要がある。ここで、
全階層数(入力層除く): N
階層番号変数(中間層): l=1,2,…,N−1
各階層特徴数: Fl
特徴番号(注目階層の注目特徴): f=fl=1,…,Fl
前階層の特徴番号: f’=fl-1
入力画像サイズ(水平方向,垂直方向):IX,IY
カーネルサイズ(水平方向,垂直方向):WX(l,f,f’)、WY(l,f,f’)
バンドバッファ高さ:BY(l,f)
バンド中間バッファ必要容量:SB
とすると、全ての中間バッファを最低限必要なサイズのバンドバッファとして割り当てるときに必要となるトータルのサイズSBは、
Figure 0005368687
…(2)
として求めることができる。
上記計算では、
・ネットワーク演算を構成する全ての処理ノードの各々に必要な中間バッファのサイズを当該処理ノードの後段に接続される処理ノードが必要とするデータ量に設定し、
・それら中間バッファのサイズを合計することにより、ネットワーク演算に必要なメモリ量を算出している。
一方、図24は、図23で示したCNNと同じネットワーク構成のCNNに対し、中間バッファとしてページバッファを用いた場合の例を示している。入力層および出力層のバッファは図23と同様、ネットワーク構成や演算シーケンスによらず定まるもので、ここではやはりページバッファとしてある。
図24では、第1階層から第N−1階層までの夫々の処理ノードに入力画像サイズと同等のサイズのページバッファが割り当てられている。しかしながら、これらのページバッファは、全て同時に存在している必要は無い。
まず第1階層の各ノードに注目すると、それぞれのノードにおける演算処理は、第0階層すなわち入力画像のみを参照して行われる。本実施形態において入力画像データは全てメモリ上に格納されているので、各ノードは必要なときに必要な範囲のデータを参照可能である。また、各ノードの出力格納バッファとして、1ページ分のバッファが用意されているので、バンドバッファの場合と異なりラインの上書きを気にすることなくいつでも演算結果を格納可能である。
次に第2階層の各処理ノードに注目すると、これらのノードは第1階層の処理結果を参照する。従って、第1階層の各処理ノードが、1ページ分の処理を終えた後であれば、必要な参照データは入力画像と同様ページで保持された状態となるので、所望のときに所望の範囲を参照することができる。以下の層も同様で、基本的に前段の階層の処理が完了しており参照データがページ分揃っていれば処理可能である。
逆に、各階層の処理ノードは演算処理を行うに当たって、前々階層の処理結果は必要としない。つまり、ある処理ノードの演算処理を開始するに当たって、前階層の全処理ノードの演算が1ページ分完了しているならば、更にその前の階層の処理ノードの中間バッファは開放してしまって構わないことになる。
従って、各処理ノードでライン単位の演算処理を順次行うに当たって、まずは第1階層に属する処理ノードでのみ順次単位演算を行う。そして、第1階層の全ての処理ノードで1ページ分の演算処理が完了した後に、第2階層の処理ノードでの単位演算処理を開始する。これを順に次の階層にたいしても繰り返してゆく、というように、単位演算処理シーケンスを組むと、中間バッファは1時期に連続する2階層のみで存在していれば、最終層までの演算が可能となる。より一般化して言うと、
・1つの階層に属する全ての処理ノードの出力が生成された後に次階層に属する処理ノードの演算処理を開始するように制御し、
・N番目の階層に属する全ての処理ノードの出力が生成された後、N−1番目の階層に属する全ての処理ノードが使用していた中間バッファ領域を開放してN+1番目以降の階層に属する処理ノードの中間バッファ領域に割り当て可能にする。
こうして、1階層の演算処理が完了する毎に、その前の階層のページバッファを、次階層の中間バッファとして再利用するようにすることにより、トータルの中間バッファ必要サイズを減らすことが可能となる。以下、この方式をページバッファ方式という。
ここで、ページ中間バッファ必要容量:SP
とすると、
Figure 0005368687
…(3)
として、ページで中間バッファを構成した際(ページバッファ方式を採用した際)のトータルの必要サイズを求めることができる。この計算は、ネットワーク構成において連続する2つの階層の組に属する全ての処理ノードが生成する演算結果データのサイズの合計を全ての組について計算し、その内の最大となるサイズを必要なメモリ量とするものである。
(2)、(3)式から分かる通り、バンド中間バッファ必要容量SBとページ中間バッファ必要容量SPのどちらが小さくなるかは、CNNネットワークの各論理的処理ノードの接続構造と、各ノードのコンボリューションカーネルサイズに依存する。一般的に、ネットワークの階層数が少なくカーネルサイズが小さければ、バンドバッファ方式の割当てが有利となるが、階層数が多くかつ各階層に属する処理ノード数が比較的少なければページバッファ方式の割当てが有利となる。
通常、システムとして、中間バッファに用いることのできるメモリの上限サイズは一定である。この条件サイズをMとする。特に本実施形態のような専用のパターン検出装置においては、中間バッファに割り当てるメモリサイズは、小さければ小さいほど良いという訳ではなく、割り当て可能なサイズM以下であれば全く問題ない。
また、上述のようにバンドバッファ方式の場合と、ページバッファ方式の場合では、単位演算の処理シーケンスが異なる。特にページバッファ方式では、一つの処理ノードでの単位演算を1ページ分連続して行うことも可能である。このようなシーケンスにすると、実装によっては、処理ノード切り替えのオーバーヘッドを省略でき、バンドバッファ割当て方式よりトータル演算時間を若干短くできる可能性がある。従って、SBとSPのどちらもM以下になる場合は、より小さい方を選ぶのではなく、ページバッファ方式を優先する方がよい。
ところで、図11で示すように、ページバッファ割当て方式の場合、最終出力層の出力バッファも他の中間バッファと領域を兼用することが可能である。そこで、(3)式の変わりに、以下の(4)式を用いる。
Figure 0005368687
…(4)
また、中間バッファだけでなく最終出力層も含めて割当て可能なサイズをM’とすると、以下の(5)式のように表される。
Figure 0005368687
…(5)
すなわち、ページバッファ方式での割当てが可能かどうかを判断するのに、(3)式の代わりに(4)式を用いて、M’と比較するようにしてもよい。つまりページバッファ方式の場合は、実質割当て可能なサイズを増やすことができる。このようにすると、さらにメモリ使用効率を上げられる。
以下、図8および図26、27に示すフローチャートを用いて、本実施形態の階層型ネットワークによる演算処理動作を詳細に説明する。図8はCPU68での一連の検出処理動作を示すフローチャートである。CPU68におけるソフトウェアによる処理は、所定の設定処理等を行った後、画像入力部61やCNN処理部63等のハードウェア処理回路部をドライブする。
まず、ステップS801において、CPU68は、検出処理の開始に先立ち、変数やレジスタ等の各種初期化処理を実行する。各処理部はCPU68の初期化指示に従って内部のレジスタ、メモリ等を初期化する。またここでは、入力画像サイズ全域を処理領域とする初期設定も行う。本処理を含め、以降CPU68は、ブリッジ65及び画像バス64を介してCNN処理部63や他のハードウェア回路部にアクセスし、CPUバスアクセス制御部113を介して所定のレジスタやメモリにデータを設定することが可能となる。また、本初期化処理においては、演算部101内の重み係数記憶部1205(図12)へ、本パターン検出装置で対応する全ての検出対象に対する全ての処理ノードのコンボリューションカーネルの係数データをロードする。本パターン検出装置は、コンボリューションカーネルの重み係数、シーケンス情報、ネットワーク構成情報等を入れ替える事で、同一のハードウェアで様々な検出対象に対応することができるが、そのためのカーネルをここで一通りロードしておく。
次に、ステップS802において、CPU68は、ユーザからの検出対象の選択を受け付ける。ここでは、本パターン検出装置が対応する全ての検出対象の中から、画像中より検出したい所望の検出対象がユーザにより選択される。
検出対象が決定したら、ステップS803でネットワーク構成管理部108のネットワーク構成情報設定部110にネットワーク構成情報を設定する。ネットワーク構成情報はネットワークの結合関係を指定するテーブルであり、レジスタファイル或いはRAM等により構成される。ネットワーク構成情報も重み係数と共に検出対象に応じて異なる値となる。
図9はネットワーク構成情報の一例を示す図であり、図14に示したCNNの構成情報を表現している。図9において、「対象処理ノード」は図14に示すネットワークの論理的な第0から第8処理ノードに対応する。なお、論理的な処理ノードとは、演算部101を時分割利用する事により実現する論理的な演算処理の単位である。ここで第0処理ノードは入力画像データ面に対応する処理ノードであって便宜上第0処理ノードとしているが、実際には演算は実行しない。
「隣接下層処理ノード数」とは、処理ノードが演算実行時に必要とする下位層の接続数を示す。例えば第4処理ノードの場合、3つの下位層に接続される。ネットワーク構成管理部108では、当該隣接下層処理ノード数に応じてメモリアクセスと演算を制御する。
「隣接下層処理ノード」は処理ノードの演算時に必要とする下位層の処理ノードを指定する情報である。例えば第4処理ノードは、第1処理ノード、第2処理ノード、第3処理ノードに接続される。つまり、第4処理ノードの演算時は、第1〜3処理ノードの演算結果が参照データとして使用される。
「演算種別」は実行する演算の種別を示す情報であり、CNN演算の場合、演算種別に応じて重み係数を選択することになる。すなわち、演算部101が図12に示す構成の場合、ここでの演算種別番号が係数を選択するための「カーネル選択信号」に相当する。CNN処理の場合、各処理ノードは、「カーネル選択信号」に応じて選択した、それぞれ異なる重み係数を用いて、コンボリューション演算を実行する。
「参照データ幅」は「演算種別」に対応するコンボリューションカーネルの幅に相当し、「参照データ高さ」はコンボリューションカーネルの高さに相当する。
また、「処理開始ライン」は、該処理ノードにおいて有効な演算出力が可能な画像位置を表す。先に説明したように、コンボリューション演算はカーネルサイズの範囲の周辺画素を掃き寄せる演算であるので、カーネル参照範囲が参照画像データの有効範囲外にはみ出す場合には、有効な演算結果を得ることができない領域となる。横方向には図22の領域2206が有効範囲外の領域(無効領域)に相当するが、同様に縦方向にも無効領域が存在する。これは処理ノードのカーネルサイズに依存し、階層を経ることによって蓄積される。本実施形態のパターン検出装置のCNNでは、ライン単位に処理を行うので、無効領域のラインは計算をスキップした方が全体の処理を高速化できる。つまり、「処理開始ライン」までは、その処理ノードにおける演算の無効領域となるので、処理をスキップすることができる。ちなみに、本実施形態では入力画像の最初のラインの番号を0として開始している。また、同様に開始ラインのみならず終了ラインも存在するが、これは入力画像のライン数IYから「処理開始ライン」を引いてさらに1を減じたライン番号となる。
尚、本実施形態では、入力画像に対して各処理ノードは演算可能な最大範囲を演算するように設定しているが、最終的に演算結果を利用する処理ノードの利用したい演算範囲から、前階層に向かって順に演算範囲を逆算してももちろんかまわない。この場合は終了ラインも合わせて情報として持つようにすると、より演算を無駄無く行える。
次にステップS804において、CPU68は、中間バッファ割当て方式を選択する。この処理の詳細を示すのが、図26のフローチャートである。中間バッファ割当て方式の選択処理では、まずステップS2601において、CPU68は、設定されている入力処理画像サイズIX,IYを取得する。そしてステップS2602において、CPU68は、中間バッファとして利用可能なサイズMを計算する。このサイズMは、ワークメモリ102で利用可能な容量から、入力画像バッファサイズや出力バッファサイズその他の処理に必要なサイズを差し引いた値となる。
そして、ステップS2603において、CPU68は、まずページバッファ方式で中間バッファを割り当てた場合に必要な容量SPを計算する。この容量SPは、上述した式(3)で求めることができる。ステップS2604において、このSPがM以下であるかどうかを確認する。M以下であれば、ステップS2605において、CPU68は、ページバッファ方式を今回の中間バッファ割当て方式として選択し、本処理終了する。尚、ここで使用する値として、上述したように、SPとMの代わりにSP'とM'を用いてももちろん良く、このようにするとよりページバッファ方式の選択される率が高まる。
一方、MよりSPが大きい場合には、処理はステップS2604からステップS2606へ進む。ステップS2606において、CPU68は、バンドバッファ方式で割り当てた場合の中間バッファ容量SBを計算する。これは上述の式(2)により求めることができる。次に、ステップS2607において、SBがM以下であるかどうかを確認する。M以下であれば、ステップS2608において、CPU68は、バンドバッファ方式を今回の中間バッファ割当て方式として選択し、本処理を終了する。このように、本実施形態では、複数種類のバッファ割り当て方法のうち、必要となるバッファの合計サイズが中間バッファとして利用可能なメモリ量以下(M以下)になるバッファ割り当て方法が選択される。
P、SBが共にMより大きい場合には、複数種類のバッファ割り当て方法のうち、必要となるバッファの合計サイズが中間バッファとして利用可能なメモリ量以下(M以下)になるバッファ割り当て方法がない。従って、そのままでは本パターン検出装置で演算処理を行うことができない。この場合、ステップS2609において、CPU68は、元の入力画像サイズを2分割したサイズを新たな処理画像サイズとして再設定する。この分割処理は、図25に示すように、カーネルのオーバーヘッドを考慮して行われる。図25において(a)は元の入力画像を示し、太線枠は最終層における累積カーネル領域2501を示す。なお、ここで累積カーネル領域とは、最終層処理ノードの参照範囲が有効になるように、順に隣接下層処理ノードを遡って入力画像まで行き着いたときの参照範囲のことである。
これを図25の(b)の点線領域に示すように、左右に2分割することを考える。左右それぞれの点線領域を有効とするには、累積カーネル領域2501を考慮すると、網掛けで示した領域まで入力する必要があることが分かる。
従って、オーバーヘッドを考慮した2分割とは、図25の(c)に示すものとなる。すなわち、入力画像サイズ(a)の単純な2分割の領域に、累積カーネル領域2501の1/2(奇数時切捨て)の幅を加えたものとなる。このように分割して演算した結果の両点線枠内の領域を合成すれば、図25の(d)に示すように、元の入力画像にCNNによる演算を行ったのと同等の演算結果を得ることができる。なお、このように入力データを分割して処理する方式をタイル処理と呼ぶこともある。
本実施形態においては、図25に示したような横方向の分割処理を優先的に行う。なぜならば、縦方向の分割処理では、ページ方式の中間バッファ使用容量は減るが、バンド方式の中間バッファ方式は変わらないからである。横方向の分割では、どちらの方式であっても一時的なトータル使用容量も削減される。分割可能なサイズは、累積カーネル領域の大きさによって決まる(領域以上のサイズが必要)ので、横方向がこれ以上分割できなくなったら、縦方向の分割を行う。尚、本処理では、分割をするたびに初期値1の分割カウンタをインクリメントするとともに、分割方向も合わせて記憶している。
ステップS2610において、分割後のサイズが累積カーネルサイズより大きいことを確認し、再度ステップS2601からの処理を繰り返す。もし、上述のように縦方向分割を駆使しても、分割後サイズが累積カーネルサイズよりも小さくなってしまった場合、その検出処理は本CNN演算装置で実行することができない。よって、処理はステップS2611に進み、CPU68は、処理不可能の判断を行う。これは全処理ノードのカーネルサイズと割当て可能な中間バッファ容量最大値によって決まるので、通常はこのようなことにならない構成を取る。
図8に戻り、ステップS805において、CPU68は、ステップS804の選択処理において処理不可能と判別されていないことを確認する。処理不可能と判別されていた場合、処理はステップS805からステップS819へ進み、終了判定処理(後述)が実行される。但し、通常はそのようなことのない構成をとる。
ステップS806において、CPU68は、ステップS804の選択処理で選択された方式がページバッファ方式であったかどうかを判定する。ページバッファ方式の場合、処理はステップS807のページバッファ方式シーケンス設定およびステップS808のページバッファ方式中間バッファ設定へ進む。一方、バンドバッファ方式が選択されていた場合、処理はステップS809のバンドバッファ方式シーケンス設定およびステップS810のバンドバッファ方式中間バッファ設定へと進む。
ステップS807のページバッファ方式シーケンス設定処理と、ステップS809のバンドバッファ方式シーケンス設定処理において、CPU68は、シーケンス制御部109のシーケンス情報設定部111にシーケンス情報を設定する。シーケンス情報とは、時分割処理する演算処理単位(本実施形態ではライン単位)のシーケンス動作を規定するテーブル情報であり、RAM等に保持される。なお、上述したように、シーケンス情報はRAM69に格納され、CPU68からCNN処理部63ないに書き込まれる。
図10はシーケンス情報テーブルの例であって、図14に示したCNNネットワークで処理を行う場合の、(a)がバンドバッファ方式、(b)がページバッファ方式の場合のシーケンスを示している。ここで、「シーケンス番号」はライン単位での処理の順序を示す番号で、テーブルの配列Indexに相当するので実際に数字を保持する必要はない。「処理ノード番号」は図14の処理ノード番号であって、シーケンス番号に対応する論理的な実行処理ノードを示す。即ち、シーケンス番号1のとき、第1処理ノードに対して演算処理を実行し、シーケンス番号2においては第2処理ノードのライン単位演算処理を実行する。処理ラインは、該シーケンス番号の処理のとき該処理ノードが出力するラインの位置を示している。各処理ノードの処理ラインは、図9で説明した「処理開始ライン」より順にスタートし、1ライン処理が完了する毎にインクリメントするものである。従って、本実施形態のように、テーブル上にシーケンス番号に対応する番号として明記しなくとも、各処理ノード毎に現在の処理ラインをレジスタ等で記憶しておくようにしてもよい。
図10の(a)は、バンドバッファ方式の場合のシーケンス情報テーブルの例であり、1ライン単位処理するごとに、処理ノードを切り替えている。例えば、シーケンス番号“21”までは、処理ノード番号“1”〜“3”までの演算を行っており、シーケンス番号“22”において処理ノード番号4の処理を開始している。これは、シーケンス番号“21”までで、処理ノード番号4の1ライン分の演算処理に必要な参照画像が演算されたためである。このようにバンドバッファ方式では、演算可能になった処理ノードから速やかにライン単位演算を行っていくことにより、参照される側のバッファをライン単位で順次開放可能にしている。これにより、中間バッファを必要最小限の循環数のリングバッファとして構成することが可能となる。
図10の(b)は、ページバッファ方式の場合のシーケンス情報テーブルの例であり、特定処理ノードの単位演算を連続して行い、該特定処理ノードの演算が有効領域全域について完了した後に、次の処理ノードの演算を開始している。このようにすると、図9および図14のCNNネットワークにおいて、例えば処理ノード番号“4”と“5”の全有効領域演算が完了すると、処理ノード番号“1”〜“3”の出力に割り当てられていた中間バッファ領域は不用となる。従って、最終階層まで演算の完了していないこの時点で、このバッファ領域を開放して同領域を処理ノード番号7、8、9の出力用として割り当てることができるようになる。
ステップS808のページバッファ方式による中間バッファ設定およびステップS810のバンドバッファ方式による中間バッファの設定では、各処理ノードに必要な中間バッファ領域が割り当てられる。当該処理は、論理的な処理ノードの数に対応する数のレジスタセット(リングバッファ設定部104-1〜104-n)に値を設定することにより行われる。図14および図9に示したネットワーク構造の場合、8個のリングバッファ設定部(104-1〜104-8)に所定の値を設定する必要がある。
リングサイズ設定部106には対応する論理的な処理ノードのリングバッファの高さ(リングカウンタの循環数)が設定される。バンドバッファ方式の場合、この循環数は当該処理ノードの出力を参照する次階層の処理ノード(隣接上層処理ノード)のコンボリューションカーネルのうちの最大の高さに相当する。一方、ページバッファ方式の場合は、リングサイズ設定部106に設定されるリングバッファの高さは、入力画像のライン数(もしくは各処理ノードの有効領域ライン数)と同じになり、当該リングバッファは実質循環させずに使用されることになる。オフセットアドレス設定部107には、対応する処理ノードのリングバッファ先頭アドレスが設定される。
図11は図14に示すネットワークを実現する場合の処理ノードとオフセットアドレス及びリングバッファの高さの関係の一例を示すメモリマップである。図11において、(a)がバンドバッファ方式の場合のメモリマップを、(b)がページバッファ方式の場合のメモリマップを示す。ADRx(x:0〜8)はオフセットアドレス、BHx(x:0〜3)がリングバッファの高さ(循環数)に相当する。Ixは入力画像データの幅を示す。図中、第0処理ノードのための領域とは、入力画像データを保持するページバッファ領域である。つまりBH0は入力画像データの高さIYに等しい。また本実施形態においてBH1は、次階層(第2階層)の第4処理ノード及び第5処理ノードのカーネルサイズのうちの大きい方、すなわち図9の構成情報テーブルから9ライン分のサイズが設定される。同様にBH2には13、BH3には17ライン分のサイズが設定される。一方、ページバッファ方式の場合は、全ての領域の高さはBH0となり、またいくつかの領域は複数の処理ノードによって利用される。本実施形態ではこのように、メモリ102を所定の領域に分割して各領域をサイズの異なるリングバッファ或いはフレームバッファとして利用する。
以上の各種設定処理により、後述のステップS814で実行されるCNN演算処理におけるネットワーク演算処理の実行手順が決定されることになる。すなわち、選択された中間バッファ割り当て方式(上記例ではバンドバッファ方式かページバッファ方式のいずれか)に応じてネットワーク演算処理における処理ノードの実行順が決定される。以上の各種設定を終了すると、ステップS811から、画像入力部61、前処理部62、CNN処理部63に対して各処理の開始を指示する。
まずステップS811において、CPU68より処理開始の指示を受けた画像入力部61は、1フレーム分の画像データを取得し、図示しない内部バッファに格納する。画像入力部61は、画像データの格納が終了するとCPU68に対して画像取得終了割り込みを発生する。CPU68はこの割り込みを検知すると、DMAC66を起動して取得した画像データを前処理部62の内部メモリ(図示しない)に転送する。前処理部62は画像データの転送が終了すると、前処理を開始する。前処理部62は、例えば、予め指定するコントラスト補正情報に従って画像データのコントラストを補正する。前処理部62は補正処理を終了するとCPU68に対して割り込みを発生する。CPU68はこの割り込みを検知すると、再びDMAC66を起動し、前処理部62によって補正された画像データをCNN処理部63内のメモリ102の入力画像バッファ(図11の第0処理ノード領域に相当)に転送する。
次に、ステップS812において、CPU68は、分割処理カウンタを設定する。これは上述のステップS804において、中間バッファ割当て方式の選択処理を行った際に、入力画像(処理画像)が分割指定された場合に1よりも大きい値となる。分割無しの場合は1が設定される。そしてステップS813において、CPU68は、分割無しの場合は画像全域を、分割有りの場合は初回の処理領域(例えば図25の左右どちらか)を、処理領域として設定する。
次に、ステップS814において、CPU68がCNN処理部63に対し演算開始トリガを送ることにより、検出処理が開始される。CNN処理部63におけるハードウェア処理について、図27のフローチャートを参照して、以下に説明する。
先ず、ステップS2701において、シーケンス制御部109は、処理ノードを決定する。シーケンス制御部109は、上述したシーケンス情報設定部111に記載されたシーケンス情報テーブルを、ライン単位演算毎に上から辿り、毎回の処理ノードを決定する。図10の(a)に示す例の場合、初回のシーケンスでは処理ノード番号1を選択する。シーケンス制御部109はシーケンス回数をカウントするシーケンスカウンタを有し、シーケンス単位(この場合ライン単位の処理毎)でカウントアップする。このカウンタは初期値1であって、図10のシーケンス情報テーブルのIndexとして使用できる。つまり、シーケンス制御部109は、シーケンスカウンタをアドレスとしてシーケンス情報テーブル(図10)を参照する事により処理対象処理ノードを決定する。
ステップS2702において、処理ノードの演算に必要な参照データをメモリ102から読み出す。より具体的には、先ず、ネットワーク構成管理部108がシーケンス制御部109の出力するシーケンス指示情報に従って参照データに対応するリングバッファ設定部104を選択する。すなわち、リングバッファ設定部104-1〜104-nの何れかを選択する。例えば、ステップS2701で第1処理ノードが選択された場合、図9に示すネットワーク構成情報テーブルの内容に従って、「接続ノード数が1」「接続先ノードが第0処理ノード」「演算種別1」が決定される。ネットワーク構成管理部108はこのネットワーク構成情報テーブルの内容に従ってノード選択信号をセレクタ1121,1122に出力し、参照すべきリングバッファに対応したリングバッファ設定部の出力を選択する。例えば初回のシーケンスでは対象処理ノードが第1処理ノードであるので、その隣接下層ノードである第0処理ノードに対応する選択信号を出力する。選択されたリングバッファ設定部の情報(この場合、第0処理ノードに対応したリングカウンタ値、オフセットアドレス値)に従ってメモリアクセス制御部103は読み出すメモリの先頭アドレスを生成する。
図16はメモリアクセス制御部103の内部を説明する図である。また、図15はメモリアクセス制御部103の参照データの読み出し動作を説明する図である。
図15において、1501はバンドバッファ方式におけるリングバッファ、1502は演算するコンボリューションカーネルの参照ウインドウに相当する大きさ、1503はコンボリューションカーネルの重み係数列の様子を説明する図である。ここではコンボリューションカーネルサイズが6×6の場合について例示している。重み系数列1503において、W00〜W05は1行目のデータ列に対する重み系数列、W10〜W15は2行目のデータ列に対する重み係数列であり、以下同様に各データ列に対する重み係数列を示している。コンボリューション演算時は当該係数値と対応する位置の参照データの積和演算処理が実行される。
WIDTHは特徴面の幅(即ち本実施形態の場合、入力画像データの幅IXに相当)、L3〜L8は特徴面の3行目から8行目のラインデータであることを示す。またA1〜A6は夫々対応するラインの先頭メモリアドレスである。
メモリアクセス制御部103において、制御部1601はネットワーク構成管理部108の出力する動作制御信号に従って各処理部及びメモリに対するコマンド信号(Read/Write制御信号)を生成する。1602は列カウンタであり、今回の演算で使用するカーネルサイズに等しい参照ウインドウ1502(図15の点線枠で示された範囲)のデータバッファ上の位置(横方向の位置)を示す。アドレス変換部1605が生成する行先頭アドレスA1〜A6と、列カウンタ1602及び後述のウインドウカウンタ1607のカウンタ値を加算器1603で加算する事で、リングバッファ内の各行内のデータをアクセスするためのメモリアドレスが生成される。1607はウインドウカウンタであり、参照範囲の各行に対して横方向に連続する参照画素を取り出すための参照ウインドウ幅(カーネル幅に相当)カウンタである。ウインドウカウンタ1607は、参照ウインドウ幅分の画素をカウントすると0にリセットされる。尚、列カウンタ1602やウインドウカウンタ1607はネットワーク構成管理部108が保持するネットワーク構成情報(図9)の内容に従って演算種別の変更毎に設定される。
すなわち、メモリアドレスは、アドレス変換部1605の生成する行先頭アドレス、参照ウインドウの列位置を指定する列カウンタ1602のカウンタ値、参照ウインドウ内の画素位置を指定するウインドウカウンタ1607の各出力を加算した値である。メモリアクセス制御部103は、このようにして生成されたメモリアドレスをメモリ102に対して逐一出力する。
例えば、アドレス変換部1605には、オフセットアドレス設定部107からの各処理ノードに割り当てられたオフセットアドレスと、リングカウンタ105からの最終行カウンタ値が入力される。そして最終行カウンタ値の示す行を縦方向の最後の位置として、カーネル高さ分のバッファ内の各行の先頭アドレスA1〜A6を順次出力する。ここで、最終行カウンタ値は、図15に示すバンドバッファ方式の場合、リングバッファの値と一致し、リングバッファ内で最新の行が入っている位置を示すものとなる。最終行カウンタ値から逆算することにより、図15の例ではL3の入っている行の先頭アドレスすなわちA3から、順にA4,A5,A6,A1,A2と出力される。尚、特に図示はしないがページバッファ方式の場合は、各シーケンスに対し図10に示した処理ライン番号に、カーネル高さ(参照データ高さ)の1/2(切捨て)を加えた値を最終行カウンタ値とする。なお、1ライン分のデータ投入によりリングカウンタがインクリメントされ、アドレス変換部1605には、リングカウンタからの最終行カウンタ値が入力される。したがって、アドレス変換部1605は、カーネル幅のカウントを行う毎に次の行の先頭アドレスを発生することになる。
双方向制御部1604はメモリデータバスの双方向制御を司るバッファであり、制御部1601の出力する制御信号に従ってデータバスの方向制御をする。1606はコンボリューション演算に必要な参照データを一時的に保持するキャッシュメモリである(以下、参照データキャッシュという)。上記のアドレス変換結果に基づいて得られた参照ウインドウ内の参照データは、参照データキャッシュ1606に格納される。制御部1601はウインドウカウンタ1607を更新しながら参照データキャッシュ1606を制御する事で、列方向に連続する参照データをキャッシュする。アドレス変換部1605による先頭アドレスの出力順に従って、参照データキャッシュ1606には元の正しいライン順でデータが格納される。
以上のようにして、メモリアクセス制御部103によってメモリ102からキャッシュへの参照データ群の読み出しを終了すると、処理はステップS2703に進む。ステップS2703において、演算部101は、コンボリューション演算処理を開始する。ネットワーク構成管理部108は、構成情報テーブルに記録された「演算種別」情報(カーネル選択信号に対応する)に従って演算部101の重み係数を指定し、演算部101を駆動する。演算部101の乗算器1201は、メモリアクセス制御部103の参照データキャッシュ1606に格納された参照データを読み出し、演算種別情報で指定された重み係数を用いてコンボリューション演算処理を実行する。そして、ステップS2704において、演算部101の累積加算器1202は、コンボリューション演算処理の演算結果を累積加算する。
次に、ステップS2705において、全ての接続先処理ノードの参照データについてコンボリューション演算処理を実施したか否かを判定し、コンボリューション演算が未実施の参照データがあれば処理をステップS2704に戻す。例えば、図9に示す例において、処理対象ノードが第4処理ノードの場合、接続先ノード数は3である。この場合、構成情報テーブルの内容に従って、第1処理ノードの結果、第2処理ノードの結果、第3処理ノードの結果に対するコンボリューション演算処理が順次実行され、累積加算器1202に累積、保持される。各処理ノードに対する参照データの読み出しと演算のシーケンスは前述した方法と同じである。即ち、メモリアクセス制御部103は処理ノード毎に異なるリングカウンタ値、オフセットアドレス値等の情報に従って、必要な参照データ群をメモリ102から参照データキャッシュ1606に読み出す。そして、演算部101は当該キャッシュデータに対してコンボリューション演算を実行する。
全ての接続先ノードに対する演算を終了すると処理はステップS2705からステップS2706に進む。ステップS2706において、非線形処理部1203は、累積加算器1202の出力を非線形変換する。
次に、ステップS2707において、CNN処理部63は、演算部101で得られた非線形変換結果をメモリ102に格納する。より具体的には、まずネットワーク構成管理部108は自身の処理ノードに関するリングバッファ設定部104を選択する。例えば、第1処理ノードを演算している場合、第1処理ノードに対応するリングバッファ設定部104を選択する。メモリアクセス制御部103はここで指定されたリングバッファ設定部104のリングカウンタ105が示す行の次の行を先頭アドレスとしてメモリアドレスを生成する。ページバッファ方式であっても、リングカウンタには常に最新の格納済み行番号が示されている。なお、ライト動作時は制御部1601によって、ウインドウカウンタ1607は0に初期化されている。メモリアクセス制御部103は生成した先頭アドレスに演算結果を書き込む。書き込みを終了すると列カウンタ1602の値を1インクリメントする。列カウンタ1602は1つの演算結果書き込み毎にインクリメントする。従って、次の処理時は1列分(1画素分)ずれた領域の参照データ群が読み出される。
図17はここで説明した演算の様子をネットワーク構成管理部108、メモリアクセス制御部103、演算部101別に模式的にタイムチャート化した図である。上段がネットワーク構成管理部108の動作を示し、メモリアクセス制御部103及び演算部101はネットワーク構成管理部108の指示に従って各処理を実行する。
上述したように、ステップS2701において、ネットワーク構成管理部108は、シーケンス制御部109からのシーケンス制御指示情報に従って処理ノードを選択する(1701)。そして、ネットワーク構成情報テーブルを参照して、接続ノード数を設定する(1702)。続いて、ネットワーク構成管理部108は、選択された参照ノードに関する情報(リングカウンタ値、オフセットアドレス値等)をメモリアクセス制御部103に通知し、参照データの読み出しを指示する(1703)。メモリアクセス制御部103は、通知されたリングカウンタ値、オフセットアドレス値を用いてメモリ102から参照データを読み出し、参照データキャッシュ1606にキャッシュする(1704,1705)。メモリアクセス制御部103による参照データの読み出しが完了すると、ネットワーク構成管理部108は、演算部101に対して、演算の開始を指示する。演算部101は、参照データキャッシュ1606にキャッシュされた参照データを読み出してコンボリューション演算処理を実行する(1706,1707)。演算部101におけるコンボリューション演算処理が完了すると、ネットワーク構成管理部108は、次の参照ノードについて同様の処理(1709〜1713)を繰り返す。全ての参照ノードについてコンボリューション演算を完了すると、ネットワーク構成管理部108は、演算部101に非線形変換処理を実行させ(1714)、特徴面における1画素の演算結果を得る。この演算結果をメモリ102に格納するために、ネットワーク構成管理部108は、上記処理ノードに関する情報(リングカウンタ値、オフセットアドレス値等)をメモリアクセス制御部103に通知し、演算結果の書込みを指示する。メモリアクセス制御部103は、通知されたリングカウンタ値、オフセットアドレス値を用いてメモリ102に1行分の演算結果を書き込む(1715,1716,1717)。そして、列カウンタを1602をインクリメントする(1718)。
以上の処理を1ライン分繰り返し(S2708)、処理を終了すると、処理はステップS2708からステップS2709へ進む。ステップS2709において、ネットワーク構成管理部108は処理中の演算ノードに対応するリングバッファ設定部104のリングカウンタ105をインクリメントする。リングカウンタ105の更新は1ラインの処理終了毎に行われる。リングカウンタ105はカウント値がリングサイズ設定部106の値に等しくなった場合0に初期化される。つまり、リングカウンタ105はリングサイズを基準にして循環する。但し、ページバッファ方式の場合はリングサイズ設定部106の値が入力画像サイズ高さと等しくなるので、実質0に戻ることはない。この様に、メモリ102に対するアクセスを論理的な処理ノード毎にリングカウンタ105の動作に伴って処理する事でメモリ102上の所定の領域をサイズ(循環数)の異なる複数のリングバッファとして独立に使用する事ができる。即ち図11で示すメモリマップ上の領域を夫々リングバッファとして利用する事になる。
次にステップS2710において、CNN処理部63は、全ての処理ノードが演算を終了したか否かを判定する。ここではシーケンス情報テーブル(図10)に記された最後のシーケンスまでを終了したか否かが判定される。なお、シーケンス制御部109は図示しないシーケンスカウンタを予め設定されたシーケンス数と比較する事で終了判定を行っても良い。或いは、シーケンス制御部109は、テーブルの最後に付加された、予め定められたTerminationデータを検出することによっても終了判定を行うようにしてもよい。演算が終了していない場合、処理はステップS2710からステップS2701に戻る。そして、CNN処理部63は、シーケンスカウンタを更新し、カウンタ値に対応するテーブルを参照する事で次に処理する処理ノード番号を取得する。処理ノードを決定すると、シーケンス指示情報に従ってネットワーク構成管理部108は次の処理ノードに対する処理を開始する。異なる処理ノードを処理する場合も、リングバッファ及び演算に関する各種パラメータが異なるだけであり、前述した処理と同様の動作が繰り返される。
尚、図10に示した様に、演算処理は下位層から順次リングバッファに特徴データを格納しながら処理を進めるが、バンドバッファ方式の場合とページバッファ方式の場合では処理の順序が異なる。
以上、ステップS2701〜S2710の処理を繰り返す事で、所定のCNNネットワークに基づく各特徴面の演算が、ライン単位で時分割処理しながら実行される。そして、CNN処理部63は全てのシーケンスを終了すると、ステップS2711において、CPU68に対して割り込みを発生する。
図8に戻り、CPU68は割り込みを検知すると、ステップS814のCNN演算処理が完了したと見なし、ステップS815において、出力画像の取得処理を行う。この処理において、CPU68は、DMAC66を起動してCNN処理部63から必要な演算結果をRAM70に転送する。本実施形態では、最終層の第8処理ノードの出力結果を吸い上げている。尚、ステップS812で設定した分割処理カウンタが1よりも大きい場合(入力画像が分割されて処理された場合)は、RAM70に用意する出力データ格納領域の中で、ステップS804で定めた領域に対応する位置へとデータを転送する。
ステップS816において、CPU68は、分割カウンタをデクリメントする。そして、ステップS817において、分割カウンタが0になるまでステップS813からの一連の処理を繰り返す。この結果、最終的に入力画像一面分に対応するCNN演算結果がRAM70上に格納される。
演算結果がRAM70上に格納されると、ステップS818において、CPU68は、判定処理を実行する。この判定処理では、RAM70上に吸い上げた最終層処理ノードの出力である特徴データを利用して対象物の検出状況を判定する。例えば、所定のしきい値で特徴データを2値化しその重心を取得する等の方法で対象物の有無を判定するという判定処理が行われる。
以上で入力画像に対する1検出対象の検出処理が完了する。次の入力画像や検出対象を変更しての処理を行わないならば、本処理を終了する(ステップS819)。一方、検出対象を変更する場合、処理はステップS820からステップS802に戻り、各種パラメータが再設定される。そして、上述の処理を繰り返し、検出対象に応じた重み係数/ネットワーク構成情報/シーケンス情報をそれぞれ更新する。更にリングバッファ設定部104のリングカウンタも新たな重み係数及びネットワーク構成情報に応じて再設定する。これにより、論理的な処理ノードは、検出対象に応じて、メモリ102を異なるサイズのリングバッファとしてマッピングし処理を行う。
一方、ステップS820において検出対象を変更しない場合は、ステップS821に処理を進める。ステップS821とS822において、CPU68は、リングバッファ設定部104-1〜104-nのリングカウンタ105及びシーケンス制御部109の内部カウンタ等を初期化する。そして、処理をステップS811に戻し、画像データの取得から再開する。即ち次のフレーム画像に対して同じ検出処理を実行する。
以上、第1実施形態によれば、論理的な処理ノードに毎にリングバッファを制御するリングバッファ設定部104が設けられ、ネットワーク構成と目的に応じてリングバッファのサイズ(循環数)が設定される。そして、この構成において、複数の中間バッファ割当て方式(ページバッファ方式、バンドバッファ方式)から最適なものをネットワーク構成に基づいて選択可能としている。この構成により、同一のハードウェアでより多くの種類のコンボリューショナルニューラルネットワーク等の階層的な演算処理を処理する事が可能になる。更に、当該複数の中間バッファ割当て方式に優先順位を設けたことにより、同一条件化でより高速な演算の可能な方式を選択することができる。また、どの中間バッファ割当て方式でも所定の範囲内の容量に収まらない場合に、入力画像を分割してタイル処理することにより、より多くの種類の階層演算に対応可能としている。
<第2実施形態>
第1実施形態では全ての論理的な処理ノード毎にリングバッファのサイズを設定可能な構成について説明したが、本発明はこれに限るわけではない。例えば、階層毎にリングバッファのサイズを設定する構成とすることも可能である。第2実施形態では、そのような構成について説明する。
図19は階層毎にリングバッファのサイズを規定する場合のCNN処理部63の構成を示す。図18は図19に示すCNN処理部63で実現されるCNNネットワーク構成の一例を示す図である。図18では、階層毎にのみリングバッファのサイズが異なっている様子が示されている。即ち、第1階層の演算結果を格納するためのメモリ領域1803a〜1803cと、第2階層の演算結果を格納するためのメモリ領域1807a〜1807bを夫々同じサイズのリングバッファで構成する。図18は図7と比較して、メモリ領域1803cのバッファサイズが異なっていることが分かる。
以下、第1実施形態との違いについて説明する。第2実施形態のCNN処理部63は、論理的な処理ノード毎にリングバッファ設定部194-1〜194-nを有する。以下、リングバッファ設定部194-1〜194-nの任意の1つを指す場合は、リングバッファ設定部194と記載する。各リングバッファ設定部194は、第1実施形態のリングカウンタ105とオフセットアドレス設定部107に対応するリングカウンタ1951とオフセットアドレス設定部1971を有する。但し、第2実施形態のリングバッファ設定部194は、第1実施形態のリングバッファ設定部104が有していたリングサイズ設定部106を有していない。その代わりに、第2実施形態によるCNN処理部63は、階層型ネットワーク演算の論理的な階層毎に、リングサイズ設定部を有する。図19の例では、階層数が3までに対応するべく、2つのリングサイズ設定部1961a,bが設けられている。
リングサイズ設定部1961a,bは夫々複数のリングバッファ設定部194-1〜194-nに接続されている。本例では、リングサイズ設定部1961aは第1階層1806の処理ノードに対応した複数のリングバッファ設定部194に接続され、リングサイズ設定部1961bは第2階層1810の処理ノードに対応した複数のリングバッファ設定部194に接続される。即ち、リングバッファ設定部194-1〜194-nがリングサイズ設定部1961a,bによってグルーピングされている。
図20にリングサイズ設定部1961a,bとリングバッファ設定部194の関係を図示する。第1階層1806のためのリングバッファの制御に利用するリングバッファ設定部194として、リングサイズ設定部1961aが接続されたリングバッファ設定部が選択される。一方、第2階層のリングバッファの制御に利用するリングバッファ設定部194には、リングサイズ設定部1961bが接続されたリングバッファ設定部が選択される。演算時、処理ノードに対応するリングバッファ設定部194の選択は、ネットワーク構成管理部108が保持する管理テーブル情報に従って行われる。
以下、処理フローに関して、図8を用いて第1実施形態との違いを説明する。第2実施形態では、ステップS808およびステップS810において、リングサイズ設定部1961a、bへの設定が階層毎に行われる。また、階層毎にグルーピングされたリングバッファ設定部194の中から構成するネットワークに対応するリングバッファ設定部194を選択し、オフセットアドレスを設定する。リングサイズ設定部1961a、bには、図18のネットワーク構成では、第1階層、第2階層のリングバッファ高さに相当する値が設定される。ページバッファ方式の場合、この値は入力画像のサイズと同じである(ステップS808)。バンドバッファ方式の場合、この値は次階層の処理ノードのコンボリューションカーネルの内の最大のものの高さとなる。
他の処理は第1実施形態と同じであり説明を省略する。図18に示すネットワークを処理する場合、以上の設定でネットワーク構成管理部108が所定の論理処理ノードに対応するリングバッファ設定部194を選択しながら処理を進める事で第1実施形態と同様にライン単位で処理が実行される。
以上のように、第2実施形態によれば、リングサイズ設定部を各リングバッファ設定部に設けず、階層毎に設けるようにしたので、リングサイズ設定部を構成するレジスタの数を削減する事が可能になる。
<第3実施形態>
上記第1、第2実施形態ではCNN処理部63をハードウェアで実現する場合について説明したが、本発明はソフトウェアにより実現する場合にも適用することが可能である。図21にソフトウェアで実現する場合の構成例を示す。図21に示す構成は図6に示す構成からCNN処理部63を取り除き、ランダムアクセス可能な高速メモリであるRAM2101を追加したものであるためその違いについて説明する。
CPU68は前処理部62の終了割り込みを受け付けるとDMAC66を起動して前処理部62内のメモリに格納された補正後の画像データをRAM2101に転送する。CPU68はRAM2101に格納した画像データに対して、図27に示したステップS2701〜ステップS2710の処理をソフトウェアにより実行する。その場合、CNN演算処理の動作に必要なワークメモリとしてRAM2101を使用する。即ち、CPU68は、RAM2101上に図11で示すメモリマップを構成し、処理ノードに対応する各メモリ領域をリングバッファとして使用する。もちろんリングバッファはハード構成の場合と同様、バンドバッファ方式とページバッファ方式のいずれかの割当て方式を選択して使用できる。
尚、第1実施形態のCNN処理部63に存在するリングバッファ設定部104等はソフトウェア上の変数として構成され、具体的にはRAM70上にアサインされる。
以上の第3実施形態によれば、CNN処理部63をハードウェアにより構成する場合と同様に、処理に必要なバッファメモリを削減する事が可能になる。図21に示す構成の場合、RAM2101を少ないメモリで実現する事が出来る。また、RAM2101を用意せずにRAM70をワークメモリとして利用する場合であっても同様である。
<他の実施形態>
上記実施形態では、リングカウンタを使用して、メモリ102の所定の連続領域をライン単位で循環しながら使用する方法について説明したが、本発明はこのようなメモリの使用方法に限るわけではない。例えば、リングカウンタに対応するメモリアドレステーブルを有し、当該テーブルを参照する事で、不連続な領域を所定の処理単位に割り当てながら処理する等の方法でも良い。即ち、本発明で規定するリングバッファとは狭義のリングバッファ或いは循環バッファに限定するものではない。
上記実施形態では、シーケンス情報テーブルの内容に従って論理的な処理ノードをライン単位で時分割処理する場合について説明したが、他の方法を適用しても良い。例えば、読み取り側バッファと書き込みバッファの利用状況から適応的にスケジューリングする等の方法でも良い。特にページ割当て方式を選択した場合、処理単位自体をライン単位からページ単位に切り替えるような実装としてももちろんかまわない。
また実施形態ではページバッファ方式をバンドバッファ方式より優先的に選択する例を紹介したが、もちろん優先順はこれに限るものではない。例えば、演算結果データ群の最初のラインが出力されるまでのレイテンシを重視する場合には、バンドバッファ方式を優先することも可能である。このようにすると、例えば、全演算結果が出力される前に途中で演算を打ち切るような場合に有利にできることは明らかである。なお、バンドバッファ方式を優先する場合は、図26において、S2603〜S2605の処理と、S2606〜S2608の処理を入れ替えれば良い。
また、中間バッファの割り当て方法としては、上述のバッファ割当て方式に限らず、他のバッファ割当て方式や、複数の方式を混在させるようにしても良いことは明らかである。すなわち、
・各処理ノードの演算結果データを保持するための中間バッファを各処理ノードへの割り当てるための複数種類のバッファ割り当て方法を用意しておき、
・これらのバッファ割り当て方法のそれぞれについて、ネットワーク演算に必要なメモリ量を当該ネットワーク演算の構成に基づいて算出し、
・算出されたメモリ量に基づいて、複数種類のバッファ割り当て方法のうちの1つを選択するように構成することが可能である。
ここで、算出された必要なメモリ量が、メモリ102の中間バッファの割り当てに利用可能なメモリ容量以下となるバッファ割り当て方法が複数存在した場合は、予め定められた優先順位に従って使用すべきバッファ割り当て方法が選択される。また、算出された必要なメモリ量が、上記割り当てに利用可能なメモリ容量以下となるバッファ割り当て方法が存在しない場合には、上述したように入力データを分割して処理する。
また、上記各実施形態では、特徴抽出結果を入力層と同じ解像度で保持するが、特徴面を入力面に対してサブサンプリングする場合に対しても同様に適用可能である。
また、上記各実施形態では、最も効率の良い処理単位としてライン単位でシーケンス制御する場合について説明したが本発明はこれに限るわけではない。1ライン以下の単位やブロック単位でシーケンス制御する場合にも適用可能であることは明らかであり、その構成も当業者には明らかである。
また、上記各実施形態では、本発明をコンボリューショナルニューラルネットワーク演算に適用する場合について説明したが本発明はこれに限るわけではない。所定の参照領域を必要とする様々な階層的な演算処理に対して適用することが可能である。更に、2次元演算に限るわけでもない。
また、上記実施形態ではリングバッファ設定部104-1〜104-nをレジスタとして提供する場合について説明したが、メモリとして他のパラメータメモリやワークメモリ102と共有する構成にしても良い。その場合、回路リソースをより有効に利用できる。即ち、より柔軟なネットワーク構成を実現する事が可能になる。
また、上記実施形態では、参照データキャッシュ1606に2次元の参照データを全て取り込んだ後に演算部101を起動する場合について説明したが、これに限られるものではない。例えば、コンボリューション演算等の場合、参照ウインドウ内の1行単位で演算部101を駆動する様に制御する事も可能である。この場合、ウインドウカウンタ1607のデクリメントに伴う連続する列方向参照データの読み出しを終了すると、次のラインの参照データ読み出し処理開始前に演算部101を駆動し、読み出したデータに対するコンボリューション演算を実行する。演算が終了すると次のラインの参照データ読み出しを開始する。以上の処理を繰り返す。この場合、参照データキャッシュのサイズが参照データ幅分のみで良いため、少ないキャッシュ容量で実現する事が出来る。
また、第2実施形態では、リングサイズ設定部1961a,bを階層毎に有する場合について説明したが、リングバッファ設定部104(194)を階層毎に有する構成とすることも可能である。その場合は階層処理単位でリングカウンタを更新する様に制御する。論理的な処理ノードの動作シーケンスに制限が生じる(必ず階層単位でシーケンスする必要が生じる)が、より回路規模を削減する事が出来る。
また、上記実施形態では、リングサイズ設定部が任意に設定可能な場合(レジスタやRAMにより構成する場合)について説明したが、全て或いは一部が固定的な値として指定される構成とすることもできる。
以上、実施形態を詳述したが、本発明は、例えば、システム、装置、方法、プログラムもしくは記憶媒体等としての実施態様をとることが可能である。具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
尚、本発明は、ソフトウェアのプログラムをシステム或いは装置に直接或いは遠隔から供給し、そのシステム或いは装置のコンピュータが該供給されたプログラムコードを読み出して実行することによって前述した実施形態の機能が達成される場合を含む。この場合、供給されるプログラムは実施形態で図に示したフローチャートに対応したコンピュータプログラムである。
従って、本発明の機能処理をコンピュータで実現するために、該コンピュータにインストールされるプログラムコード自体も本発明を実現するものである。つまり、本発明は、本発明の機能処理を実現するためのコンピュータプログラム自体も含まれる。
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、OSに供給するスクリプトデータ等の形態であっても良い。
コンピュータプログラムを供給するためのコンピュータ読み取り可能な記憶媒体としては以下が挙げられる。例えば、フロッピー(登録商標)ディスク、ハードディスク、光ディスク、光磁気ディスク、MO、CD−ROM、CD−R、CD−RW、磁気テープ、不揮発性のメモリカード、ROM、DVD(DVD−ROM,DVD−R)などである。
その他、プログラムの供給方法としては、クライアントコンピュータのブラウザを用いてインターネットのホームページに接続し、該ホームページから本発明のコンピュータプログラムをハードディスク等の記録媒体にダウンロードすることが挙げられる。この場合、ダウンロードされるプログラムは、圧縮され自動インストール機能を含むファイルであってもよい。また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるホームページからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるWWWサーバも、本発明に含まれるものである。
また、本発明のプログラムを暗号化してCD−ROM等の記憶媒体に格納してユーザに配布するという形態をとることもできる。この場合、所定の条件をクリアしたユーザに、インターネットを介してホームページから暗号を解く鍵情報をダウンロードさせ、その鍵情報を使用して暗号化されたプログラムを実行し、プログラムをコンピュータにインストールさせるようにもできる。
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される他、そのプログラムの指示に基づき、コンピュータ上で稼動しているOSなどとの協働で実施形態の機能が実現されてもよい。この場合、OSなどが、実際の処理の一部または全部を行ない、その処理によって前述した実施形態の機能が実現される。
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれて前述の実施形態の機能の一部或いは全てが実現されてもよい。この場合、機能拡張ボードや機能拡張ユニットにプログラムが書き込まれた後、そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行なう。
第1実施形態の階層的演算処理装置の構成を説明するブロック図である。 階層結合型ニューラルネットワークの構成例を説明する図である。 ニューロンの構成を示す図である。 CNNのネットワーク構成例を説明する図である。 CNNの特徴抽出の例を説明する図である。 実施形態による、階層的演算処理を利用した画像処理装置の構成を説明するブロック図である。 実施形態に関するCNNのネットワークの構成を説明する図である。 第1実施形態の画像処理装置の動作を説明するフローチャートである。 ネットワーク構成情報テーブルのデータ構成例を示す図である。 シーケンス情報テーブルのデータ構成例を示す図である。 メモリの割り当てに関する例を示す図である。 演算処部101の構成例を説明するブロック図である。 リングバッファの例を説明する図である。 処理ノードの論理的な接続構成を説明する図である。 参照データ群の読み出しを説明する図である。 メモリアクセス制御部103の構成を説明する図である。 CNN演算単位の動作タイミングを説明する図である。 第2実施形態のCNNネットワークの構成を説明する図である。 第2実施形態の演算処理装置の構成を説明するブロック図である。 第2実施形態のリングバッファ設定部とリングサイズ設定部の関係を説明する図である。 第2実施形態の演算処理装置の構成を説明するブロック図である。 ライン単位で演算部101が処理を実行する場合の様子を模式的に説明する図である。 バンドバッファ方式による中間バッファ割当ての様子の一例を示す図である。 ページバッファ方式による中間バッファ割当ての様子の一例を示す図である。 実施形態による分割処理の一例を示す図である。 中間バッファ割当て方式の選択処理を説明するフローチャートである。 CNN演算処理を説明するフローチャートである。

Claims (13)

  1. 入力データに対して演算を行い演算結果データを生成する、複数の論理的な処理ノードを接続したネットワークでネットワーク演算を実行する演算処理装置であって、
    前記ネットワークを構成する複数の処理ノードの各々が演算結果データを保持するためのバッファ用の記憶領域をメモリに割り当てるために、1つの処理ノードに対して演算結果データの一部を保持するバッファを割り当てるバンドバッファ方式と、1つの処理ノードに対して前記入力データに対する演算結果データの全てを保持するバッファを割り当てるページバッファ方式とを含む複数種類のバッファ割り当て方法のそれぞれについて、前記ネットワーク演算に必要となる前記記憶領域のメモリ量を、当該ネットワークの構成に基づいて算出する算出手段と、
    前記バッファとして割当て可能なメモリ量を取得する取得手段と、
    前記複数種類のバッファ割り当て方法のうち、前記算出手段で算出されたメモリ量が前記取得手段で取得されたメモリ量以下になるバッファ割り当て方法を選択する選択手段と、
    前記選択手段で選択されたバッファ割り当て方法に応じた実行順で、前記ネットワーク演算における各処理ノードによる演算を実行させる実行手段とを備えることを特徴とする演算処理装置。
  2. 前記ネットワークは、複数の論理的な処理ノードを階層的に接続した階層型ネットワークであることを特徴とする請求項1に記載の演算処理装置。
  3. 前記選択手段は、前記算出手段で算出されたメモリ量が前記取得手段で取得されたメモリ量以下になるバッファ割り当て方法が複数存在する場合には、予め定めた優先順位に基づいてそれらのバッファ割り当て方法の中から1つを選択することを特徴とする請求項1に記載の演算処理装置。
  4. 前記算出手段は、前記ネットワーク演算を実行する全ての処理ノードの各々のバッファのサイズを当該処理ノードの後段に接続される処理ノードが必要とするデータ量に設定し、それらバッファのサイズを合計することにより、前記バンドバッファ方式を用いた場合の前記ネットワーク演算に必要なメモリ量を算出することを特徴とする請求項1に記載の演算処理装置。
  5. 前記算出手段は、前記ネットワークの構成に存在する連続する2つの階層のそれぞれの組について、2つの階層に属する全ての処理ノードが前記入力データに対する演算結果データの全てを保持した場合に必要となるバッファの合計サイズを計算し、それら合計サイズの内の最大のサイズを、前記ページバッファ方式を用いた場合の前記ネットワーク演算に必要なメモリ量とすることを特徴とする請求項1に記載の演算処理装置。
  6. 前記実行手段は、前記バンドバッファ方式が選択された場合には、前記複数の処理ノードの各々を予め定められた処理単位で実行させ、
    前記複数の処理ノードの各々に割り当てられたバッファを、前記処理単位の演算結果の量に対応したメモリ領域を単位として循環させながら演算結果を書き込むリングバッファとして制御することを特徴とする請求項1乃至のいずれか1項に記載の演算処理装置。
  7. 前記実行手段は、前記ページバッファ方式が選択された場合には、1つの階層に属する全ての処理ノードの出力が生成された後に次階層に属する処理ノードの演算処理を開始するように制御し、
    N番目の階層に属する全ての処理ノードの出力が生成された後、N−1番目の階層に属する全ての処理ノードが使用していたバッファ領域を開放し、N+1番目以降の階層に属する処理ノードのバッファ領域に割り当てることを特徴とする請求項1乃至のいずれか1項に記載の演算処理装置。
  8. 入力データに対して演算を行い演算結果データを生成する、複数の論理的な処理ノードを接続したネットワークでネットワーク演算を実行する演算処理装置であって、
    前記ネットワークを構成する複数の処理ノードの各々が演算結果データを保持するためのバッファ用の記憶領域をメモリに割り当てる複数種類のバッファ割り当て方法のそれぞれについて、前記ネットワーク演算に必要となる前記記憶領域のメモリ量を、当該ネットワークの構成に基づいて算出する算出手段と、
    前記バッファとして割当て可能なメモリ量を取得する取得手段と、
    前記複数種類のバッファ割り当て方法のうち、前記算出手段で算出されたメモリ量が前記取得手段で取得されたメモリ量以下になるバッファ割り当て方法を選択する選択手段と、
    前記選択手段で選択されたバッファ割り当て方法に応じた実行順で、前記ネットワーク演算における各処理ノードによる演算を実行させる実行手段と、
    前記算出手段で算出されたメモリ量が前記取得手段で取得されたメモリ量以下になるバッファ割り当て方法が存在しない場合に、前記入力データを分割する分割手段とを備え、
    前記選択手段は、分割された入力データの各々について前記ネットワーク演算に用いるべきバッファ割り当て方法を選択することを特徴とする演算処理装置。
  9. 前記処理ノードが行う演算はコンボリューション演算であり、前記ネットワークは、コンボリューショナルニューラルネットワークであることを特徴とする請求項1乃至8のいずれか1項に記載の演算処理装置。
  10. 入力データに対して演算を行い演算結果データを生成する、複数の論理的な処理ノードを接続したネットワークでネットワーク演算を実行する演算処理方法であって、
    前記ネットワークを構成する複数の処理ノードの各々が演算結果データを保持するためのバッファ用の記憶領域をメモリに割り当てるために、1つの処理ノードに対して演算結果データの一部を保持するバッファを割り当てるバンドバッファ方式と、1つの処理ノードに対して前記入力データに対する演算結果データの全てを保持するバッファを割り当てるページバッファ方式とを含む複数種類のバッファ割り当て方法のそれぞれについて、前記ネットワーク演算に必要となる前記記憶領域のメモリ量を、当該ネットワークの構成に基づいて算出する算出工程と、
    前記バッファとして割当て可能なメモリ量を取得する取得工程と、
    前記複数種類のバッファ割り当て方法のうち、前記算出工程で算出されたメモリ量が前記取得工程で取得されたメモリ量以下になるバッファ割り当て方法のうちの1つを選択する選択工程と、
    前記選択工程で選択されたバッファ割り当て方法に応じた実行順で、前記ネットワーク演算における各処理ノードによる演算を実行させる実行工程とを備えることを特徴とする演算処理方法。
  11. 入力データに対して演算を行い演算結果データを生成する、複数の論理的な処理ノードを接続したネットワークでネットワーク演算を実行する演算処理方法であって、
    前記ネットワークを構成する複数の処理ノードの各々が演算結果データを保持するためのバッファ用の記憶領域をメモリに割り当てる複数種類のバッファ割り当て方法のそれぞれについて、前記ネットワーク演算に必要となる前記記憶領域のメモリ量を、当該ネットワークの構成に基づいて算出する算出工程と、
    前記バッファとして割当て可能なメモリ量を取得する取得工程と、
    前記複数種類のバッファ割り当て方法のうち、前記算出工程で算出されたメモリ量が前記取得工程で取得されたメモリ量以下になるバッファ割り当て方法を選択する選択工程と、
    前記選択工程で選択されたバッファ割り当て方法に応じた実行順で、前記ネットワーク演算における各処理ノードによる演算を実行させる実行工程と、
    前記算出工程で算出されたメモリ量が前記取得工程で取得されたメモリ量以下になるバッファ割り当て方法が存在しない場合に、前記入力データを分割する分割工程とを備え、
    前記選択工程では、分割された入力データの各々について前記ネットワーク演算に用いるべきバッファ割り当て方法を選択することを特徴とする演算処理方法。
  12. 請求項10または11に記載の演算処理方法をコンピュータに実行させるためのコンピュータプログラム。
  13. 請求項10または11に記載の演算処理方法をコンピュータに実行させるためのコンピュータプログラムを格納したコンピュータ読み取り可能な記憶媒体。
JP2007250063A 2007-09-26 2007-09-26 演算処理装置および方法 Expired - Fee Related JP5368687B2 (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2007250063A JP5368687B2 (ja) 2007-09-26 2007-09-26 演算処理装置および方法
CN2008801083659A CN101809597B (zh) 2007-09-26 2008-09-12 计算处理装置及方法
PCT/JP2008/066912 WO2009041350A1 (en) 2007-09-26 2008-09-12 Calculation processing apparatus and method
US12/679,574 US8391306B2 (en) 2007-09-26 2008-09-12 Calculation processing apparatus and method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007250063A JP5368687B2 (ja) 2007-09-26 2007-09-26 演算処理装置および方法

Publications (2)

Publication Number Publication Date
JP2009080693A JP2009080693A (ja) 2009-04-16
JP5368687B2 true JP5368687B2 (ja) 2013-12-18

Family

ID=40511235

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007250063A Expired - Fee Related JP5368687B2 (ja) 2007-09-26 2007-09-26 演算処理装置および方法

Country Status (4)

Country Link
US (1) US8391306B2 (ja)
JP (1) JP5368687B2 (ja)
CN (1) CN101809597B (ja)
WO (1) WO2009041350A1 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11347430B2 (en) 2019-07-08 2022-05-31 Canon Kabushiki Kaisha Operation processing apparatus that executes hierarchical calculation, operation processing method, and non-transitory computer-readable storage medium
US11699067B2 (en) 2017-03-03 2023-07-11 Canon Kabushiki Kaisha Arithmetic processing apparatus and control method therefor
US11704546B2 (en) 2019-07-01 2023-07-18 Canon Kabushiki Kaisha Operation processing apparatus that calculates addresses of feature planes in layers of a neutral network and operation processing method

Families Citing this family (80)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9015093B1 (en) 2010-10-26 2015-04-21 Michael Lamport Commons Intelligent control with hierarchical stacked neural networks
US8775341B1 (en) 2010-10-26 2014-07-08 Michael Lamport Commons Intelligent control with hierarchical stacked neural networks
JP5911165B2 (ja) 2011-08-05 2016-04-27 株式会社メガチップス 画像認識装置
JP2014059862A (ja) 2012-08-22 2014-04-03 Canon Inc データフローのリソース割り当て装置および方法
CN104680508B (zh) * 2013-11-29 2018-07-03 华为技术有限公司 卷积神经网络和基于卷积神经网络的目标物体检测方法
US9978014B2 (en) * 2013-12-18 2018-05-22 Intel Corporation Reconfigurable processing unit
US9613001B2 (en) * 2013-12-20 2017-04-04 Intel Corporation Processing device for performing convolution operations
US9741095B2 (en) * 2014-01-29 2017-08-22 Raytheon Company Method for electronic zoom with sub-pixel offset
JP6393058B2 (ja) 2014-03-31 2018-09-19 キヤノン株式会社 情報処理装置、情報処理方法
CN104035751B (zh) * 2014-06-20 2016-10-12 深圳市腾讯计算机系统有限公司 基于多图形处理器的数据并行处理方法及装置
KR101727546B1 (ko) * 2014-11-12 2017-05-02 서울대학교산학협력단 뉴런 디바이스 및 뉴런 디바이스를 포함하는 집적회로
JP6706788B2 (ja) * 2015-03-06 2020-06-10 パナソニックIpマネジメント株式会社 画像認識方法、画像認識装置およびプログラム
EP3335158B1 (en) * 2015-08-15 2019-07-24 Salesforce.com, Inc. Three-dimensional (3d) convolution with 3d batch normalization
US10157333B1 (en) * 2015-09-15 2018-12-18 Snap Inc. Systems and methods for content tagging
US10417529B2 (en) * 2015-09-15 2019-09-17 Samsung Electronics Co., Ltd. Learning combinations of homogenous feature arrangements
US11074492B2 (en) * 2015-10-07 2021-07-27 Altera Corporation Method and apparatus for performing different types of convolution operations with the same processing elements
US10664751B2 (en) * 2016-12-01 2020-05-26 Via Alliance Semiconductor Co., Ltd. Processor with memory array operable as either cache memory or neural network unit memory
US9754351B2 (en) * 2015-11-05 2017-09-05 Facebook, Inc. Systems and methods for processing content using convolutional neural networks
US10977547B2 (en) 2015-11-12 2021-04-13 Google Llc Convolutional gated recurrent neural networks
US10699186B2 (en) * 2015-12-02 2020-06-30 Google Llc Determining orders of execution of a neural network
US12411890B2 (en) 2015-12-08 2025-09-09 Snap Inc. System to correlate video data and contextual data
JP6333871B2 (ja) * 2016-02-25 2018-05-30 ファナック株式会社 入力画像から検出した対象物を表示する画像処理装置
WO2017177367A1 (en) * 2016-04-11 2017-10-19 Xiaogang Wang Method and system for object tracking
AU2016203619A1 (en) 2016-05-31 2017-12-14 Canon Kabushiki Kaisha Layer-based operations scheduling to optimise memory for CNN applications
US10303977B2 (en) * 2016-06-28 2019-05-28 Conduent Business Services, Llc System and method for expanding and training convolutional neural networks for large size input images
US11334768B1 (en) 2016-07-05 2022-05-17 Snap Inc. Ephemeral content management
CN106203621B (zh) * 2016-07-11 2019-04-30 北京深鉴智能科技有限公司 用于卷积神经网络计算的处理器
CA3038967A1 (en) 2016-10-04 2018-04-12 Magic Leap, Inc. Efficient data layouts for convolutional neural networks
GB2554711B (en) 2016-10-06 2020-11-25 Imagination Tech Ltd Buffer addressing for a convolutional neural network
JP2018067154A (ja) 2016-10-19 2018-04-26 ソニーセミコンダクタソリューションズ株式会社 演算処理回路および認識システム
JP6945986B2 (ja) * 2016-10-28 2021-10-06 キヤノン株式会社 演算回路、その制御方法及びプログラム
US10430706B2 (en) * 2016-12-01 2019-10-01 Via Alliance Semiconductor Co., Ltd. Processor with memory array operable as either last level cache slice or neural network unit memory
US10423876B2 (en) * 2016-12-01 2019-09-24 Via Alliance Semiconductor Co., Ltd. Processor with memory array operable as either victim cache or neural network unit memory
CN108615077B (zh) * 2016-12-09 2021-08-24 杭州海康威视数字技术股份有限公司 一种应用于深度学习网络的缓存优化方法及装置
KR20180070062A (ko) * 2016-12-16 2018-06-26 삼성전자주식회사 이동체 및 이동체의 제어 방법
EP3594858A4 (en) * 2017-03-06 2020-04-01 Sony Corporation INFORMATION PROCESSING DEVICE
CN108629406B (zh) * 2017-03-24 2020-12-18 展讯通信(上海)有限公司 用于卷积神经网络的运算装置
US10387298B2 (en) 2017-04-04 2019-08-20 Hailo Technologies Ltd Artificial neural network incorporating emphasis and focus techniques
US11551028B2 (en) 2017-04-04 2023-01-10 Hailo Technologies Ltd. Structured weight based sparsity in an artificial neural network
US11544545B2 (en) 2017-04-04 2023-01-03 Hailo Technologies Ltd. Structured activation based sparsity in an artificial neural network
US12430543B2 (en) 2017-04-04 2025-09-30 Hailo Technologies Ltd. Structured sparsity guided training in an artificial neural network
US11615297B2 (en) 2017-04-04 2023-03-28 Hailo Technologies Ltd. Structured weight based sparsity in an artificial neural network compiler
US11238334B2 (en) 2017-04-04 2022-02-01 Hailo Technologies Ltd. System and method of input alignment for efficient vector operations in an artificial neural network
WO2018217965A1 (en) * 2017-05-25 2018-11-29 Texas Instruments Incorporated Secure convolutional neural networks (cnn) accelerator
US10706349B2 (en) 2017-05-25 2020-07-07 Texas Instruments Incorporated Secure convolutional neural networks (CNN) accelerator
US11281376B2 (en) 2017-10-18 2022-03-22 Mitsubishi Electric Corporation Operation circuit and method of operation for use in operations that are performed in parallel using multiple operators
JP6927320B2 (ja) * 2017-10-23 2021-08-25 日本電気株式会社 推論装置、畳み込み演算実行方法及びプログラム
JP6919539B2 (ja) 2017-12-06 2021-08-18 富士通株式会社 演算処理装置および演算処理装置の制御方法
AU2017279610A1 (en) * 2017-12-19 2019-07-04 Canon Kabushiki Kaisha Memory access optimisation using per-layer computational mapping and memory allocation for CNN application
WO2019183095A1 (en) * 2018-03-22 2019-09-26 Amazon Technologies, Inc. Processing for multiple input data sets
CN108564168B (zh) * 2018-04-03 2021-03-09 中国科学院计算技术研究所 一种对支持多精度卷积神经网络处理器的设计方法
KR102808815B1 (ko) * 2018-05-30 2025-05-19 삼성전자주식회사 프로세서, 전자 장치 및 그 제어 방법
WO2019231254A1 (en) 2018-05-30 2019-12-05 Samsung Electronics Co., Ltd. Processor, electronics apparatus and control method thereof
JP6970827B2 (ja) 2018-06-25 2021-11-24 オリンパス株式会社 演算処理装置
CN109190674B (zh) * 2018-08-03 2021-07-20 百度在线网络技术(北京)有限公司 训练数据的生成方法及装置
KR102692017B1 (ko) 2018-08-29 2024-08-05 삼성전자주식회사 전자 장치 및 전자 장치의 동작 방법
US20200090030A1 (en) 2018-09-19 2020-03-19 British Cayman Islands Intelligo Technology Inc. Integrated circuit for convolution calculation in deep neural network and method thereof
CN109522052B (zh) * 2018-11-27 2020-05-08 中科寒武纪科技股份有限公司 一种计算装置及板卡
JP7211069B2 (ja) 2018-12-25 2023-01-24 富士通株式会社 情報処理装置、情報処理プログラムおよび情報処理方法
JP7297468B2 (ja) * 2019-02-28 2023-06-26 キヤノン株式会社 データ処理装置及びその方法
CN109615067B (zh) * 2019-03-05 2019-05-21 深兰人工智能芯片研究院(江苏)有限公司 一种卷积神经网络的数据调度方法及装置
JP7278150B2 (ja) * 2019-05-23 2023-05-19 キヤノン株式会社 画像処理装置、撮像装置、画像処理方法
JP2020201883A (ja) * 2019-06-13 2020-12-17 キヤノン株式会社 データ処理装置及びその制御方法
JP7251354B2 (ja) 2019-06-26 2023-04-04 富士通株式会社 情報処理装置、情報処理プログラム、及び情報処理方法
DE102019129760A1 (de) * 2019-11-05 2021-05-06 Eyyes Gmbh Verfahren zur Verarbeitung von Eingangsdaten
US11954819B1 (en) * 2020-02-28 2024-04-09 Unm Rainforest Innovations System and methods for fast and scalable 2D convolutions and cross-correlations for processing image databases and videos on CPUs
WO2021241460A1 (ja) * 2020-05-29 2021-12-02 ソニーグループ株式会社 メモリ内蔵装置、処理方法、パラメータ設定方法及びイメージセンサ装置
KR20220006906A (ko) * 2020-07-09 2022-01-18 주식회사 엘지에너지솔루션 통신 시스템 및 방법
US11263077B1 (en) 2020-09-29 2022-03-01 Hailo Technologies Ltd. Neural network intermediate results safety mechanism in an artificial neural network processor
US11874900B2 (en) 2020-09-29 2024-01-16 Hailo Technologies Ltd. Cluster interlayer safety mechanism in an artificial neural network processor
US12248367B2 (en) 2020-09-29 2025-03-11 Hailo Technologies Ltd. Software defined redundant allocation safety mechanism in an artificial neural network processor
US11221929B1 (en) 2020-09-29 2022-01-11 Hailo Technologies Ltd. Data stream fault detection mechanism in an artificial neural network processor
US11811421B2 (en) 2020-09-29 2023-11-07 Hailo Technologies Ltd. Weights safety mechanism in an artificial neural network processor
US11237894B1 (en) 2020-09-29 2022-02-01 Hailo Technologies Ltd. Layer control unit instruction addressing safety mechanism in an artificial neural network processor
JP7451453B2 (ja) * 2021-03-15 2024-03-18 株式会社東芝 畳み込み演算処理装置および畳み込み演算処理システム
US20230043584A1 (en) * 2021-08-09 2023-02-09 Cypress Semiconductor Corporation Optimization of memory use for efficient neural network execution
KR20230075914A (ko) * 2021-11-23 2023-05-31 삼성전자주식회사 프로세싱 장치 및 이의 동작 방법과 전자 장치
ES3023747T3 (en) * 2022-01-28 2025-06-03 Fujitsu Ltd Kernel transfer
CN114118389B (zh) * 2022-01-28 2022-05-10 深圳鲲云信息科技有限公司 神经网络数据处理方法、设备及存储介质
KR102682877B1 (ko) * 2022-11-24 2024-07-09 인하대학교 산학협력단 Fpga를 활용한 cnn 가속기 하드웨어 설계

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FI894021A7 (fi) 1988-08-31 1990-03-01 Fujitsu Ltd Neuronstruktur.
JP2679730B2 (ja) 1988-08-31 1997-11-19 富士通株式会社 階層構造ニューラルネット
JPH0355658A (ja) 1989-07-25 1991-03-11 Fujitsu Ltd 半導体情報処理装置
JP2729987B2 (ja) * 1989-09-20 1998-03-18 富士通株式会社 ネットワーク構成データ処理装置の重み保持方式
JPH05108593A (ja) * 1991-10-14 1993-04-30 Sanyo Electric Co Ltd ニユーロ開発支援装置
US6038337A (en) 1996-03-29 2000-03-14 Nec Research Institute, Inc. Method and apparatus for object recognition
CN1085361C (zh) * 1998-01-21 2002-05-22 中国科学院计算技术研究所 大规模并行处理计算机系统的新型互连网络技术
CN1292118A (zh) * 1998-02-26 2001-04-18 太阳微系统公司 网络上的动态分布式计算的方法和设备
US7065096B2 (en) * 2000-06-23 2006-06-20 Mips Technologies, Inc. Method for allocating memory space for limited packet head and/or tail growth
JP4846924B2 (ja) 2001-05-31 2011-12-28 キヤノン株式会社 パターン認識装置
US7200687B2 (en) * 2003-09-25 2007-04-03 International Business Machines Coporation Location-based non-uniform allocation of memory resources in memory mapped input/output fabric
JP4546157B2 (ja) * 2004-06-03 2010-09-15 キヤノン株式会社 情報処理方法、情報処理装置、撮像装置
GB2421096A (en) * 2004-12-10 2006-06-14 Hewlett Packard Development Co Determining a memory allocation algorithm in dependence on a memory allocation pattern for a process
JP4947983B2 (ja) * 2006-01-31 2012-06-06 キヤノン株式会社 演算処理システム
CN100456271C (zh) * 2007-03-19 2009-01-28 中国人民解放军国防科学技术大学 面向流应用的片内存储器
JP5171118B2 (ja) 2007-06-13 2013-03-27 キヤノン株式会社 演算処理装置及びその制御方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11699067B2 (en) 2017-03-03 2023-07-11 Canon Kabushiki Kaisha Arithmetic processing apparatus and control method therefor
US11704546B2 (en) 2019-07-01 2023-07-18 Canon Kabushiki Kaisha Operation processing apparatus that calculates addresses of feature planes in layers of a neutral network and operation processing method
US11347430B2 (en) 2019-07-08 2022-05-31 Canon Kabushiki Kaisha Operation processing apparatus that executes hierarchical calculation, operation processing method, and non-transitory computer-readable storage medium

Also Published As

Publication number Publication date
US20100214936A1 (en) 2010-08-26
JP2009080693A (ja) 2009-04-16
WO2009041350A1 (en) 2009-04-02
US8391306B2 (en) 2013-03-05
CN101809597A (zh) 2010-08-18
CN101809597B (zh) 2013-06-12

Similar Documents

Publication Publication Date Title
JP5368687B2 (ja) 演算処理装置および方法
JP5184824B2 (ja) 演算処理装置及び方法
US7978905B2 (en) Calculation processing apparatus and control method thereof
JP6936592B2 (ja) 演算処理装置およびその制御方法
EP2997539B1 (en) Method and device for processing input image data
JP6195342B2 (ja) 情報処理装置およびメモリアクセス制御方法
JP6210953B2 (ja) 画像処理装置および画像処理方法
JP4416694B2 (ja) データ転送調停装置およびデータ転送調停方法
JP7308674B2 (ja) 演算処理装置及び演算処理方法
JP2020191012A (ja) 画像処理装置、撮像装置、画像処理方法
CN111626914B (zh) 执行层级计算处理的数据处理装置及其方法
JP7321213B2 (ja) 情報処理装置、情報処理方法
JP7631289B2 (ja) データ処理装置及びその方法
JP7038927B2 (ja) 割当装置、学習装置、推論装置、割当方法、及び、割当プログラム
JP2006135825A (ja) 画像補間処理装置
JP4316476B2 (ja) 画像処理装置、画像形成装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100927

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20121203

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130201

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130225

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130424

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: 20130816

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130913

R151 Written notification of patent or utility model registration

Ref document number: 5368687

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151

LAPS Cancellation because of no payment of annual fees