JP6700712B2 - 畳み込み演算装置 - Google Patents

畳み込み演算装置 Download PDF

Info

Publication number
JP6700712B2
JP6700712B2 JP2015207499A JP2015207499A JP6700712B2 JP 6700712 B2 JP6700712 B2 JP 6700712B2 JP 2015207499 A JP2015207499 A JP 2015207499A JP 2015207499 A JP2015207499 A JP 2015207499A JP 6700712 B2 JP6700712 B2 JP 6700712B2
Authority
JP
Japan
Prior art keywords
data
product
sum
signal
filter
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.)
Active
Application number
JP2015207499A
Other languages
English (en)
Other versions
JP2017079017A5 (ja
JP2017079017A (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 JP2015207499A priority Critical patent/JP6700712B2/ja
Priority to US15/331,044 priority patent/US10210419B2/en
Publication of JP2017079017A publication Critical patent/JP2017079017A/ja
Publication of JP2017079017A5 publication Critical patent/JP2017079017A5/ja
Application granted granted Critical
Publication of JP6700712B2 publication Critical patent/JP6700712B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • G06F17/153Multidimensional correlation or convolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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]

Landscapes

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

Description

本発明は、畳み込み演算装置に関する。
パターン認識装置として、ニューラルネットワーク技術を応用したものが広く提案されている。特にニューラルネットワークの中でも、Convolutional Neural Networks(以下、CNN)と呼ばれる演算処理方法は、認識対象の変動に対して頑健なパターン認識を可能にする方法として知られている。このような方法を適用した例として、特許文献1には、画像データを用いた顔認識を行う技術が提案されている。
ここで、CNN演算の一例を説明する。
図23は、画像データに対するCNN演算をニューラルネットワークで実現した一例を示すブロック図である。
図23では、画像データに対してCNN演算を行う場合を示しているため、入力層2301は、ラスタスキャンされた所定サイズの画像データである。特徴面2303a〜2303cは、第1段目の階層2308の特徴面を示す。ここで特徴面とは、所定の特徴抽出フィルタ(畳込み演算及び非線形処理)の検出結果を示すデータ面であり、例えば顔を検出する場合、目、口、又は鼻等の検出結果を示すデータ面である。このデータ面は、ラスタスキャンで得られた画像データに対する特徴抽出の検出結果であるため、検出結果も面で表される。特徴面2303a〜2303cは、入力層2301に対する畳込み演算及び非線形処理により生成される。例えば、特徴面2303aは、カーネル2311aで模式的に示す畳込み演算及び、その演算結果の非線形変換により得られる。尚、図23のフィルタのカーネル2311b及び2311cはそれぞれ、特徴面2303b及び2303cを生成する際に使用されるカーネルである。また特徴面2305a〜2305bは第2段目の階層2309の特徴面、特徴面2307は、第3段目の階層2310の特徴面を示す。
図24は、畳込みフィルタのカーネル2442の一例を示す図である。
図24において、データ列2441は、ラスタスキャンで得られた画像データの参照画素を示すデータ列であり、フィルタのカーネル2442は、参照画素に対するカーネルの例を示している。この例は、カーネルのサイズが5×5のFIR(finite Impulse Response)フィルタ演算を行うことに相当する。FIRフィルタ演算は、以下の式(1)に示す積和演算により処理される。
Figure 0006700712

ここで、「input(x,y)」は座標(x,y)での参照画素値を示し、「output(x,y)」は、座標(x,y)でのFIRフィルタ演算結果を示す。また「weight(column,row)」は、座標(x+column,y+row)でのFIRフィルタ係数を示し、「columnSize」及び「rowSize」はカーネルのサイズを示し、図24の例ではいずれも「5」である。
そして、図23の特徴面2303aを算出する場合、データ列2441は入力層2301に相当し、カーネル2442は、カーネル2311aに相当する。CNN演算では、複数のフィルタのカーネルを画素単位で走査しながら積和演算を繰り返し、最終的な積和結果を得て、その積和結果を更に非線形変換することにより特徴面を生成する。尚、特徴面2303aを算出する場合、前階層との結合数が「1」であるため、カーネルは1つである。
次に、第2段目の階層2309の特徴面2305aを生成する演算を説明する。
特徴面2305aは、前段の第1段目の階層2308の3つの特徴面2303a〜2303cと結合している。従って、特徴面2305aのデータを算出する場合、特徴面2303aに対してはカーネル2312aで模式的に示すカーネルを用いたフィルタ演算を行い、この結果を累積加算器に保持する。同様に、特徴面2303b及び2303cに対して、夫々カーネル2313a及び2314aのフィルタ演算を行い、これらの結果を累積加算器に蓄積する。これらの3種類のフィルタ演算の終了後、ロジスティック関数又は双曲正接関数(tanh関数)を利用した非線形変換処理を行う。以上の処理を画像全体に対して1画素ずつ走査しながら処理することにより、特徴面2305aを生成する。
同様に、特徴面2305bを生成する際は、前段の階層2308の特徴面2303a〜2303cに対するカーネル2312b,2313b及び2314bによる3つの畳込みフィルタ演算を行う。また第3段目の階層2310の特徴面2307を生成する際は、前段の階層2309の特徴面2305a〜2305bに対するカーネル2315及び2316による2つの畳込みフィルタ演算を行う。尚、各フィルタ係数は、バックプロパゲーション学習又は深層学習等の一般的な方法を用いて、予め学習により決定されている。物体の検出又は認識等においては、10×10以上の大きなサイズのカーネルを使用することが多い。
またCNN演算処理では、多数の大きなカーネルサイズのフィルタが階層的に使用され、膨大な回数の畳込み演算が必要とされる。この課題に対する対処方法としては、例えば非特許文献1では、フィルタ係数を1次元の基底フィルタ係数に分解し、畳込み演算における積和演算回数の削減を図ったものが提案されている。
一方、CNNにおける畳込み演算をプロセッサ上で動作するソフトウェアとして実現した場合、前述したように畳込み演算の回数が膨大であるため、所望の演算速度を満たせないケースが有り得る。この課題に対する対処方法としては、例えば特許文献2では、CNN演算を、ディジタルハードウェアで実現する技術が提案されている。
特開平10−021406号公報 米国特許公開2012/0303932号公報 特許第5376920号公報
Exploiting Linear Structure Within Convolutional Networks for Efficient Evaluation, CoRR2014, Denton, et al.
以上説明したように、CNN演算のように膨大な回数の畳込み演算が必要な場合に、その演算量を削減する方法としては、フィルタ係数を低次元フィルタ係数に分解して畳込み演算を実行するのが有効である。また、膨大な回数の畳込み演算を実行する際には、プロセッサ上で動作するソフトウェアよりも、ディジタルハードウェアとして構成することが、高速化及び低消費電力の点で有効である。しかしながらこれまで、低次元フィルタ係数に分解して畳込み演算を実行する際に、効率的に演算を実行することが可能なディジタルハードウェアの構成は提案されていない。
本発明の目的は、上記従来技術の課題を解決し、効率的な畳み込み演算処理を実現できる畳込み演算装置を提供することにある。
上記目的を達成するために本発明の一態様に係る畳み込み演算装置は以下のような構成を備える。即ち、
それぞれ、第1及び第2の入力に入力されたデータを乗算する複数の第1の乗算手段と、
前記複数の第1の乗算手段に対応して設けられ、それぞれ対応する前記第1の乗算手段の乗算結果を累積する複数の第1の累積加算手段と、
前記複数の第1の乗算手段のそれぞれの前記第1の入力に第1のデータとして2次元フィルタカーネルの係数データを分解した水平方向の係数データを供給する第1のデータ供給手段と、
前記複数の第1の乗算手段の前記第2の入力に複数の第2のデータとして入力画像データの水平方向のデータを供給する第2のデータ供給手段と、を有する第一の積和演算手段と、
それぞれ、第1及び第2の入力に入力されたデータを乗算する複数の第2の乗算手段と、
前記複数の第2の乗算手段に対応して設けられ、それぞれ対応する前記第2の乗算手段の乗算結果を累積する複数の第2の累積加算手段と、
前記複数の第2の乗算手段のそれぞれの前記第1の入力に第3のデータとして2次元フィルタカーネルの係数データを分解した垂直方向の係数データを供給する第3のデータ供給手段と、
前記複数の第1の累積加算手段のそれぞれの出力から前記2次元フィルタカーネルの垂直方向の列単位で必要な参照データをリングバッファにロードして一括して保持し、当該ロードした参照データを動作クロックに応じてリング状にシフトして複数の第4のデータとして前記複数の第2の乗算手段の前記第2の入力に供給する第4のデータ供給手段と、を有する第二の積和演算手段と、
前記第一及び第二の積和演算手段による積和演算処理を並行して実行するように制御する制御手段と、を有し、
前記複数の第2の累積加算手段の出力として、前記入力画像データに対する前記2次元フィルタカーネルによる畳み込み演算の結果を得ることを特徴とする。
本発明によれば、効率的な畳み込み演算処理を実現でき、演算処理速度の高速化及び低消費電力化を実現できる。
本発明のその他の特徴及び利点は、添付図面を参照とした以下の説明により明らかになるであろう。尚、添付図面においては、同じ若しくは同様の構成には、同じ参照番号を付す。
添付図面は明細書に含まれ、その一部を構成し、本発明の実施形態を示し、その記述と共に本発明の原理を説明するために用いられる。
本発明の実施形態1に係る階層的畳込み演算回路を具備した物体検出装置の構成を示すブロック図。 第1の実施形態に係るCNN処理部の構成を示すブロック図である。 実施形態1に係るシフトレジスタの構成例を示す図。 実施形態1に係るリングバッファの構成例を説明する図。 実施形態1に係る第一の積和演算回路の累積加算器及び第二の積和演算回路の累積加算器の構成例を示すブロック図。 実施形態1に係る非線形変換処理部の構成を示すブロック図。 実施形態1に係るCNN処理部の制御部の構成を示すブロック図。 実施形態1に係る制御部のレジスタ群に設定される情報の一例を示す図。 実施形態1に係るRAMに格納される参照データ、重み係数データ及び演算結果のメモリマップの一例を示す図。 実施形態1に係る物体検出装置の動作を説明するフローチャート(A)とCNN処理部からの終了通知割り込みによりCPUが実行する処理を説明するフローチャート(B)。 実施形態1に係る畳込み演算処理の一例を説明する図。 実施形態1に係る畳込み演算処理の一例を説明する図。 実施形態1に係る畳込み演算処理の一例を説明する図。 一般的な畳込み演算の具体例を示す図。 実施形態1に係るCNN処理部における畳込み演算の処理時の動作を説明するタイムチャート。 実施形態1及び2に係る第一の積和演算回路による積和演算処理と、第二の積和演算回路による積和演算処理のパイプライン動作のタイミングを説明する模式図。 本発明の実施形態3に係るCNN処理部の構成を説明するブロック図。 実施形態3における畳込み演算処理時の動作を説明するタイムチャート。 実施形態4に係るCNN処理部の構成を説明するブロック図。 実施形態4に係る畳込み演算の処理時の動作を説明するタイムチャート。 実施形態4に係る第一の積和演算回路の積和演算処理と、第二の積和演算回路の積和演算処理と、第三の積和演算回路の積和演算処理のパイプライン動作の模式図。 実施形態5に係るCNN処理部の構成を説明するブロック図。 画像データに対するCNN演算をニューラルネットワークで実現した一例を示すブロック図。 畳込みフィルタのカーネルの一例を示す図。
以下、添付図面を参照して本発明の実施形態を詳しく説明する。尚、以下の実施形態は特許請求の範囲に係る本発明を限定するものでなく、また本実施形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。
[実施形態1]
先ず、本発明の実施形態1を説明する。
図1は、本発明の実施形態1に係る階層的畳込み演算回路を具備した物体検出装置の構成を示すブロック図である。この物体検出装置(物体認識装置)は、2次元の畳込み演算を行い、画像データから特定の物体を検出する機能を有する。
この物体検出装置(物体認識装置)は、画像入力部120、CNN処理部122、ブリッジ124、前処理部125、DMAC(Direct Memory Access Controller)126及びRAM100を有している。更に、CPU(Central Processing Unit)127、ROM128及びRAM129も設けられている。そして画像入力部120、CNN処理部122、前処理部125及びDMAC126が画像バス123を介して互いに接続され、CPU127、ROM128及びRAM129がCPUバス130を介して互いに接続されている。またブリッジ124により画像バス123とCPUバス130との間のデータ転送が可能となっている。
画像入力部120は、光学系、CCD(Charge-Coupled Devices)又はCMOS(Complementary Metal Oxide Semiconductor)センサ等の光電変換デバイスを有する。更に、そのセンサを制御するドライバ回路、ADコンバータ、各種画像補正を司る信号処理回路及びフレームバッファ等も設けられている。CNN処理部122は、階層的畳込み演算回路として機能する。RAM100は、CNN処理部122の演算作業バッファとして各種データを一時的に保持するのに使用される。尚、CNN処理部122の構成等の詳細は、図2を参照して詳しく後述する。前処理部125は、CNN演算による検出処理を効果的に行うための種々の前処理を行う。例えば、色変換処理及びコントラスト補正処理等の画像データ変換処理を、ハードウェアにより処理する。DMAC126は、画像バス123上の画像入力部120、CNN処理部122及び前処理部125とCPUバス130との間のデータ転送を司る。
ROM(Read Only Memory)128は、CPU127の動作を規定する命令(プログラム)及びパラメータ等を格納しており、CPU127は、これらを読み出してそれら命令を実行することにより、この物体検出装置の全体の動作を制御する。その際、RAM129がCPU127の作業領域として使用される。尚、CPU127はブリッジ124を介して画像バス123上のRAM100にアクセスすることも可能である。
次に、CNN処理部122を詳しく説明する。
図2は、実施形態1に係るCNN処理部122の構成例を説明するブロック図である。上述したように、CNN処理部122は、階層的畳込み演算回路として機能する。
CNN処理部122は、第一の積和演算処理部200と第二の積和演算処理部220、それぞれの積和演算回路の演算処理を制御する制御部201、記憶部203、シフトレジスタ206、非線形変換処理部209を有している。ここで、第二の積和演算回路220は、第一の積和演算回路200の後段に直列に接続されている。
第一の積和演算回路200は、記憶部202、シフトレジスタ204,205、それぞれが2つの入力を備えた複数の乗算器207、及び複数の累積加算器208を有している。また第二の積和演算回路220は、記憶部210、シフトレジスタ211、(複数の)リングバッファ212、それぞれが2つの入力を備えた複数の乗算器213、複数の累積加算器214を含んでいる。
制御部201には、CNN処理部122の基本的な動作を決定するレジスタ群、そのレジスタ群に設定された値に基づいて種々の信号のタイミングを制御するシーケンス制御部、及びRAM100へのアクセス調停を行うメモリ制御部等が設けられている。尚、制御部201の構成等の詳細は図7を参照して後述する。
第一及び第二の積和演算回路200,220の記憶部202及び210は、RAM100から出力された重み係数データを一時的に保持する。いま重み係数が8ビットで表されるデータの場合、記憶部202及び210は8ビット幅の複数のレジスタで構成される。また、記憶部202及び210は、フィルタのカーネルサイズと同じサイズ以上のレジスタ(記憶容量)を有する。例えば、カーネルサイズが「12」の場合、そのレジスタの数は少なくとも「12」あればよい。つまり、想定される最大フィルタサイズのレジスタ数で構成することが好ましい。尚、実施形態1では、前述したフィルタのカーネルは、2次元構造を有するカーネルの係数データを、水平方向及び垂直方向の1次元構造を有する2種類の係数データに分解したものを指す。2次元構造を有するカーネルと1次元構造を有するカーネルの詳細に関しては、別途後述する。
次に記憶部203は、RAM100に格納された参照データ(画像データ)を一時的に保持する。参照データが8ビットで表されるデータの場合、記憶部203は8ビット幅の複数のレジスタで構成される。記憶部203は「並列に処理するデータの数(レジスタ長)」+「カーネルサイズ−1」以上の個数のレジスタ(記憶容量)を有する。ここでのレジスタの個数は、一度に処理する(並列演算する)位置の特徴面データが参照するデータを得るために必要な値であり、この値以上の個数のレジスタが設けられていればよい。例えば、カーネルサイズが「12」、演算並列度が「12」の場合、少なくとも23(=12+11)個の8ビットレジスタが設けられていればよい。
ここで第一及び第二の積和演算回路200,220のシフトレジスタ204,205及び211と、シフトレジスタ206は、データロード機能を備えている。例えば、シフトレジスタ204,205及び211は、夫々記憶部202,203及び210と同じビット幅の複数のレジスタを有し、リングバッファ212とともに各乗算器へのデータ供給を行っている。またシフトレジスタ206は、それぞれが、累積加算器214の出力の有効ビット数と同じビット数以上のレジスタを、複数有している。
図3は、実施形態1に係るシフトレジスタ204,205,211及び206の構成例を示す図である。
この例では、シフトレジスタは4個のレジスタ(図3ではフリップフロップ301〜304)を有している。シフトレジスタには、4個の多ビットフリップフロップ301〜304が設けられており、これらがCLOCK信号に同期して所定ビット数のデータをラッチするレジスタとして機能している。フリップフロップ301〜304にはイネーブル信号(Enable信号)が供給されており、フリップフロップ301〜304は、Enable信号が1(ハイレベル)のときにCLOCK信号の立ち上がりでデータをラッチする。一方、Enable信号が0(ロウレベル)の場合は、前クロックでラッチしたデータをそのまま保持する。つまり状態の遷移が生じない。また3個のセレクタ305〜307が設けられており、これらは選択信号(Load信号)が0(ロウレベル)のときに、前段のフリップフロップの出力信号OUTx(x:0〜2)を選択し、1(ハイレベル)のときに入力信号INx(x:1〜3)を選択する。即ち、セレクタ305〜307は、Load信号のレベルに応じて、フリップフロップに供給するデータを前段のフリップフロップの出力とするか、入力信号INxとするかを選択している。こうして、このシフトレジスタは、選択信号(Load信号)が0で、かつEnable信号が1のときにCLOCK信号の立ち上がりで、保持しているデータのシフト動作を行う。
ここで図2のLoad2信号、Load4信号、Load7信号及びLoad5信号は、図3のLoad信号に相当し、図2のEnable1信号、Enable2信号、Enable4信号及びEnable3信号が、図3のEnable信号に相当する。このような構成により、並列度が多い場合でも、参照データや重み係数データを選択するセレクタの構成を簡素化でき、配線数の増大及び遅延の増大を招くことなく、高速な回路を構築できる。
次に図2のリングバッファ212について説明する。リングバッファ212は、データロード機能を備えており、それぞれが、第一の積和演算回路200の累積加算器208の出力の有効ビット数と同じビット数以上のデータを保持できるバッファ401を複数有している。
図4は、実施形態1に係るリングバッファ212の構成例を説明する図である。この例では、リング状にデータをシフトする機能を有する単一リングバッファ401が、保持するデータの個数に相当する4本分設けられている。ここでは、4本の単一リングバッファは、制御信号により同期して同一の動作を実行する。従って、以下では単一リングバッファ401の動作を詳しく説明する。
単一リングバッファ401には、4個の多ビットフリップフロップ402a〜402dが含まれており、これらがCLOCK信号に同期して所定ビット数のデータをラッチする。フリップフロップ402a〜402dにはイネーブル信号(Enable信号)が与えられ、フリップフロップ402a〜402dは、Enable信号が1(ハイレベル)のときにCLOCK信号の立ち上がりでデータをラッチする。一方、Enable信号が0(ロウレベル)のときは、前クロックでラッチしたデータをそのまま保持する。つまり、状態遷移が生じない。また、セレクタ403が設けられている。
セレクタ403は、選択信号(Load信号)が0(ロウレベル)のときに、フリップフロップ402bの出力信号を選択し、1(ハイレベル)の場合に、入力信号IN0を選択する。即ち、セレクタ403は、Load信号のレベルに応じて、リングバッファ401にシフト動作、或いはロード動作を実行させる。図2のLoad8信号は図4のLoad信号に相当し、図2のEnable5信号が図4のEnable信号に相当している。ここで図4より明らかなように、フリップフロップ402aの出力は、フリップフロップ402dの入力に接続されている。従って、Enable信号が1でLoad信号が0のとき、単一リングバッファ401に保持されたデータが、CLOCK信号に同期してリング状にシフト動作する。尚、図4では、単一リングバッファ401が4個設けられ、これらリングバッファが制御信号により同期して同一の動作を行うため、結果的に4個のデータが同期してリング状にシフト動作することがわかる。尚、単一リングバッファ401で保持されたデータを外部に出力するのは、フリップフロップ402aのみである。従って、本実施形態1に係るリングバッファ212は、一度に4個のデータを出力することとなる。
続いて制御部201は、第一及び第二の積和演算回路200,220のシフトレジスタ204及び211のシフト動作中に、次の積和演算処理に必要な重み係数データをRAM100から記憶部202にロードする。また制御部201は、シフトレジスタ205のシフト動作中に、次の積和演算処理に必要な参照データを、RAM100から記憶部203にロードする。そしてシフトレジスタ204は、初期データのロード(記憶部202からの一括ロード)後に、それぞれのカーネルのサイズと同じクロック数だけシフト動作を実行し、乗算器207に対して重み係数データを連続して供給する。つまり、図3の信号OUTn(シフトレジスタ204の最終段出力)が全ての乗算器207の第1の入力に共通して供給される。
またシフトレジスタ205は、記憶部203から参照データがロードされると、列方向のカーネルサイズと同じクロック数だけシフト動作を実行し、乗算器207に対して複数の参照データを同時に供給する。つまり、図3の信号OUT1〜OUTnのそれぞれが、各対応する乗算器207の第2の入力に並列に供給される。ここでシフトレジスタ204及びシフトレジスタ205は互いに同期して動作し、これらからのデータが、乗算器207の第1の入力及び第2の入力に同期して供給される。以上の処理により、積和演算処理及びRAM100からのデータロードを、フィルタのカーネルの列単位でパイプライン処理することが可能になる。
また同時に、前述したシフトレジスタ204と同様に、シフトレジスタ211は、初期データのロード(記憶部210からの一括ロード)後に、それぞれのカーネルサイズと同じクロック数だけシフト動作を実行する。これにより、乗算器213に対して重み係数データを連続して供給する。つまり、図3の信号OUTn(シフトレジスタ211の最終段出力)が全ての乗算器213に共通して供給される。
またリングバッファ212は、第一の積和演算回路200の累積加算器208からデータが入力されると、制御部201からの制御信号に基づき、リングバッファ内に保持された中で最も古いデータを、その入力データで上書きする。そして、その入力データを乗算器213に対して同時に供給する。そして、次に第一の積和演算回路200の累積加算器208からデータが入力されるまでは、垂直方向のカーネルサイズと同じクロック数から1を引いた回数だけリング状のシフト動作を実行する。こうして乗算器213に対して複数の参照データを同時に供給する。つまり、図4の信号OUT0〜OUTnのそれぞれが、各対応する乗算器213の第2入力に並列に供給される。ここでリングバッファ212及びシフトレジスタ211は互いに同期して動作しており、これらからのデータが乗算器213の第1の入力及び第2の入力に供給される。
またリングバッファ212が、垂直方向のカーネルサイズと同じクロック数から1を引いた回数だけリング状のシフト動作を実行すると、前述と同様に、第一の積和演算回路200の累積加算器208からデータがロードされる。即ち、リングバッファ212では、リング状のシフト動作を垂直方向のカーネルサイズと同じクロック数から1を引いた回数繰り返す。そしてその後に、リングバッファ212に保持されたデータの中で最も古いデータが、第一の積和演算回路200の累積加算器208から入力されるデータによって上書きされることになる。
以上の処理により、第二の積和演算回路220での積和演算処理及びRAM100からの重み係数データのロードを、垂直方向のフィルタのカーネル単位で並行して処理することが可能になる。また前述した第一の積和演算回路200の演算処理と、第二の積和演算回路220の演算処理とはクロック信号に同期して実行されるため、パイプライン動作を行うことができる。
図5は、実施形態1に係る第一の積和演算回路200の累積加算器208及び第二の積和演算回路220の累積加算器214の構成を示すブロック図である。尚、累積加算器208及び214は同様の構成を有する。
累積加算器208及び214は、加算器501及びレジスタ502を有しており、累積加算器208及び214は、Latch Enable信号に従って入力データの累積和をレジスタ502に保持する。Latch Enable信号は、クロック信号に同期した信号である。第一の積和演算回路200の累積加算器208により得られた累積和は、対象とする特徴面に対応するカーネルの演算終了後、リングバッファ212にロードされ、所定のタイミングで乗算器213に送られる。また第二の積和演算回路220の累積加算器214により得られた累積和は、対象とする特徴面に対応するカーネルの演算終了後、シフトレジスタ206にロードされ、所定のタイミングで非線形変換処理部209に送られる。乗算器207及び213、累積加算器208及び214としては、例えば、夫々同一クロックで動作する同一のものが12個並んで設けられている。そして、シフトレジスタ206は、例えば、12個の累積加算器214の出力を保持することが可能なフリップフロップを含んでいる。また累積加算器208及び214の出力は、所定の有効ビットのみ、後段に接続するリングバッファ212又はシフトレジスタ206に出力される。
図6は、実施形態1に係る非線形変換処理部209の構成を示すブロック図である。
非線形変換処理部209は、ルックアップテーブル(LUT)601及びセレクタ602を有している。LUT601は、積和演算結果をアドレスデータ(In)としてROM等に保持されたデータを参照する。このROMには、例えば予めアドレス値に対応する出力の非線形変換した値が記憶されている。セレクタ602は、非線形変換した値(LUT601の出力値)、或いは非線形変換しない場合に積和演算結果(In)をそのまま出力する(Out)。セレクタ602への選択信号(Select)は、制御部201から供給されている。つまりセレクタ602は、制御部201の「非線形変換」レジスタ(後述)の値に従って制御される。尚、後述のように、「非線形変換」レジスタを含むレジスタセット801〜803(図8参照)は、特徴面単位で構成される。このため、非線形変換処理の有無も、特徴面単位で選択可能である。このように、非線形変換の有無を特徴面単位で選択可能にすることで、非線形変換処理を含む階層と、含まない階層とが混在した大規模ネットワークを構築することが可能になる。また非線形変換処理部209により得られたデータは、RAM100の所定のアドレスに格納される。このRAM100の格納アドレスも、制御部201のレジスタ群702の設定及びシーケンス制御部701(図7参照)の動作に従って制御される。
次に制御部201の詳細について説明する。
図7は、実施形態1に係るCNN処理部122の制御部201の構成を示すブロック図である。
制御部201は、シーケンス制御部701、レジスタ群702(記憶領域)及びメモリ制御部705を有している。シーケンス制御部701は、レジスタ群702に設定された情報に従って、CNN処理部122の動作を制御する種々の制御信号704を入出力する。同様に、シーケンス制御部701は、メモリ制御部705を制御する制御信号706を生成する。シーケンス制御部701は、例えば、バイナリカウンタ又はジョンソンカウンタ等からなるシーケンサを有している。レジスタ群702は、複数のレジスタセットを含み、1つの階層的な処理を行うための情報が、レジスタセット毎に保持される。レジスタ群702は、外部からのアクセスが可能に構成されている。
図8は、実施形態1に係る制御部201のレジスタ群702に設定される情報の一例を示す図である。
この例では、3つのレジスタセット801,802及び803がレジスタ群702に含まれており、これらのうちの1つが1つの特徴面を処理するために必要な情報を保持する。レジスタ群702には、ブリッジ124及び画像バス123を介してCPU127から予め所定の値が書き込まれる。ここでは、レジスタセット801〜803の各レジスタが32ビット長であるとする。
図8において、「最終層指定」レジスタは、当該レジスタセットに対応する特徴面が最終層か否かを指定するレジスタである。このレジスタの値が「1」の場合は、処理対象の特徴面が最終層であることを示し、その特徴面の処理を終了すると検出処理を終了する。「参照データ面の数」レジスタは、対象特徴面と接続する前階層の特徴面(データ領域)数を指定するレジスタであり、例えば、対象特徴面と接続する前階層の特徴面数が「3」の場合は「3」が設定される。「非線形変換」レジスタは、非線形変換の有無を指定するレジスタであり、当該レジスタに「1」が設定されている場合は非線形変換処理を行い、当該レジスタに「0」が設定されている場合は非線形変換処理を行わない。「演算結果格納先ポインタ」レジスタは、対象とする特徴面の演算結果を保持するためのRAM100の領域の先頭アドレスを指定するレジスタであり、このアドレス値を先頭ポインタとして演算結果をラスタスキャン順に格納する。「水平方向フィルタカーネルのサイズ」レジスタ及び「垂直方向フィルタカーネルのサイズ」レジスタは、対象の特徴面の演算に使用するフィルタのカーネルサイズを指定するレジスタである。「重み係数格納先ポインタ」レジスタは、RAM100に記憶されている、対象の特徴面の演算に使用する重み係数の格納先アドレスを示す。例えば、重み係数データは「参照データ面の数」レジスタと同じ数の係数の組を有し、「重み係数格納先ポインタ」レジスタで指定されるアドレスから順に格納されている。即ち、(「水平方向フィルタカーネルのサイズ」+「垂直方向フィルタカーネルのサイズ」)×「参照データ面の数」の個数の係数データがRAM100に格納されている。「参照データの水平サイズ」レジスタ及び「参照データの垂直サイズ」レジスタは、夫々参照データの水平方向の画素数及び垂直方向のライン数を示すレジスタである。また参照データは、「参照データ格納先ポインタ」レジスタの示すアドレスを先頭としてRAM100にラスタスキャン順に格納されている。即ち(「参照データの水平サイズ」×「参照データの垂直サイズ」)×「参照データ面の数」の個数の参照データがRAM100に格納されている。
このような複数のレジスタが各特徴面単位に設けられている。演算対象とする特徴面の「参照データの格納先ポインタ」レジスタの内容が前階層の結合対象特徴面の「演算結果格納先ポインタ」である場合、前階層の特徴面と対象となる特徴面が結合されていることになる。従って、ここでのレジスタ設定(ポインタ設定)だけで、任意の階層的結合関係を特徴面単位に構築することが可能になる。
図9は、実施形態1に係るRAM100に格納される参照データ、重み係数データ及び演算結果のメモリマップの一例を示す図である。
ここでは、前階層の結合数が「3」であるとする。このような場合、領域901〜903は3つの参照データを格納する領域であり、領域904〜906は参照データに対応するフィルタカーネル係数を格納する領域である。また領域907は、特徴面の演算結果を格納する領域を示す。例えば、各領域には、ラスタスキャンされたデータが格納される。従って、制御部201は、レジスタ群702に格納された先頭ポインタ情報及びサイズに関する情報に基づいて、必要な参照データ及びカーネルの係数データにアクセスすることが可能である。また、次の階層の特徴面の演算時には、演算結果が格納された領域907を参照データの格納領域として指定する(レジスタ群702への設定)だけで、不要なデータの転送を行わずに、高速に実行することが可能である。
シーケンス制御部701は、図8の「水平方向フィルタカーネルのサイズ」、「垂直方向フィルタカーネルのサイズ」、「参照データの水平サイズ」及び「参照データの垂直サイズ」等の内容に従って演算動作タイミングに関わるシーケンス制御を行う。
メモリ制御部705は、シーケンス制御部701が生成する制御信号706に従って、参照データ707、重み係数データ708及び演算結果データ709のRAM100からの読み出し、及びRAM100への書き込みを調停する。具体的には、画像バス123を介したRAM100へのアクセス、参照データ707の読み出し、重み係数データ708の読み出し、演算結果データ709の書き出しを制御する。尚、RAM100のデータ幅及び各バス(データ707〜709)のデータ幅は、例えば全て32ビットである。
次に、このように構成された物体検出装置の動作について説明する。
図10(A)は、実施形態1に係る物体検出装置の動作を説明するフローチャートである。
先ずS1001でCPU127は、検出処理の開始に先立って各種初期化処理を実行する。ここで例えばCPU127は、CNN処理部122の動作に必要な重み係数をROM128からRAM100に転送すると共に、CNN処理部122の動作、即ちCNNネットワークの構成を定義するための各種レジスタ設定を行う。具体的には、CNN処理部122の制御部201に存在する複数のレジスタ(図8参照)に所定の値を設定する。同様に、前処理部125等のレジスタにも動作に必要な値を書き込む。次にS1002に進みCPU127は、画像入力部120により、画像センサの出力する信号を入力させてディジタルデータに変換させ、フレーム単位でフレームバッファ(図示せず)に格納する。次にS1003に進みCPU127は、前処理部125により、所定の信号に基づいて画像変換処理を実行させる。ここで前処理部125は、画像入力部120のフレームバッファの画像データから輝度データを抽出し、コントラスト補正処理を行う。輝度データを抽出する場合は、例えば、一般的な線形変換処理によりRGB画像データから輝度データを生成する。またコントラスト補正では、例えば、一般的に知られているコントラスト補正処理を適用してコントラストを強調する。こうして前処理部125によりコントラスト補正処理された輝度データは、検出用画像としてRAM100に格納される。こうして、1フレームの画像データに対して前処理が完了すると、前処理部125からの完了信号(図示せず)に基づいて、次にCNN処理部122により、物体の検出処理を実行させる(S1004〜S1005)。S1004〜S1005の処理は、CNN処理部122の制御部201により実行される。
この物体の検出処理では、S1004,S1005でCNN処理部122は、特徴面単位(例えば図23に示す2303a〜2303c等)で畳込み演算を行う。そして、全ての特徴面に対する処理を終了するとS1006に進み(図23の場合、特徴面2307の算出を終了した場合)、CPU127に対して割り込み信号を生成する。つまり、制御部201が、S1004で1つの特徴面の畳込み演算処理を終了するとS1005に進み、レジスタセット801の「最終層指定」レジスタの内容に基づいて最終層かどうか判定する。ここで最終層でないと判定したときはS1004に進んで、次の特徴面の処理を実行する。このとき制御部201は、次の特徴面を処理する場合、レジスタ群702の次のアドレスに存在するレジスタセットの内容に従って同様の畳込み演算処理を行う。そしてレジスタセットが最終層を示している場合、制御部201は、S1006で所定の畳込み演算処理の終了後、CPU127に対して終了通知割り込みを発生する。そしてS1007に進み、CPU127は、検出処理に必要な全ての画像に対する処理が終了したかどうかを判定し、終了していないときはS1002に進む。ここでは例えば、動画像から所定の物体を検出するような場合、CPU127は、上述した処理を、対象するとする全ての画像に対してフレーム画像単位で連続して実行し、それらの処理が終了すると、この処理を終了する。
図10(B)は、CNN処理部122からの終了通知割り込みによりCPU127が実行する処理を説明するフローチャートである。尚、この処理をCPU127に実行させるプログラムはROM128に格納されており、CPU127がそのプログラムを読み出して実行することにより、このフローチャートで示す処理が達成される。
ここで図11〜図13に示すように、実施形態1に係る畳込み演算処理は、水平方向の1次元フィルタカーネルと、垂直方向の1次元フィルタカーネルによるものとの2段階で実行される。ここで、水平方向及び垂直方向それぞれの1次元フィルタカーネルは、前述したように2次元構造を有するフィルタカーネルを水平方向及び垂直方向の2つの1次元構造を有するフィルタカーネルに分解したものを指す。
そこで、2次元構造を有するフィルタカーネルと1次元構造を有するフィルタカーネルの詳細を説明する。まず一般的な畳込み演算処理に関して説明する。
図14は、一般的な畳込み演算の具体例を示す図である。ここではラスタスキャンで得られたデータを2次元座標で示している。
1401は参照データ面を表し、各ブロック(模式的に示す最小一升)がラスタスキャン順でRAM100に格納された前階層の演算結果(input(x,y)、x:水平方向位置、y:垂直方向位置)を示す。1405は算出対象となる特徴面データを表し、各ブロックがラスタスキャンされた演算結果(output(x,y)、x:水平方向位置、y:垂直方向位置)を示す。また1402,1403は夫々、output(4,4)、output(4,5)の特徴面データ1410,1411を算出する場合のフィルタ演算に必要な参照データ範囲を示す。ここで、フィルタのカーネルサイズは水平方向に「5」、垂直方向に「5」である。例えば、特許文献3には、この一般的なフィルタ演算を実行する畳込み演算処理装置が記載されている。その場合、例えば1404は、同時にフィルタ演算する特徴面データの領域を示し、例えば並列度が「5」の場合、output(4,y):y=4〜8の特徴面位置のデータを同時に演算する。従って、並列処理の対象である領域1404を水平方向に1画素単位、垂直方向に5ライン単位で走査させながらフィルタ演算を行い、二次元データ列に対してフィルタ演算を行う。このフィルタ演算処理は特許文献3に詳しく説明されているため、これ以上の詳細な説明は割愛する。
続いて実施形態1に係る2次元構造を有するフィルタカーネルを水平方向及び垂直方向の2つの1次元構造を有するフィルタカーネルに分解して畳込み演算を実行する方法に関して説明する。
2次元構造を有するフィルタカーネルの重み係数マトリクスは、1次元構造を有する水平方向及び垂直方向のフィルタカーネルを用いた式(2)に示す乗算によって近似可能であることが知られている。
Figure 0006700712

尚、実際には、複数の水平方向及び垂直方向のフィルタカーネルの組み合わせを用い、式(3)に示すようにそれらのフィルタ演算結果の総和を取ることで近似精度を高める手法が取られることが多い。式(3)では、フィルタカーネルの組み合わせを添え字「pair」で示している。
Figure 0006700712

これらの手法は、非特許文献1に詳しく記載されているため、これ以上の説明は省略する。
次に、前記式(2)及び(3)を実行するための畳込み演算方法に関して説明する。
まず第一の積和演算回路200において、図11(A)(B)及び図12(A)に示すように、1次元構造を有する水平方向のフィルタカーネルを用いた畳込み演算を実行する。
図11(A)は、1つの特徴面データにおける畳込み演算処理の具体例を説明する図である。図11(A)では、ラスタスキャンで得られたデータを2次元座標で示している。
1101は参照データ面を表し、各ブロック(模式的に示す最小一升)がラスタスキャン順でRAM100に格納された前階層の演算結果(input(x,y)、x:水平方向位置、y:垂直方向位置)を示す。1102は、対象となる特徴面データを表し、各ブロックがラスタスキャンされた演算結果(output(x,y)、x:水平方向位置、y:垂直方向位置)を示す。また1103は、output(4,4)位置の特徴面データ1110を算出する場合のフィルタ演算で畳込み演算が実行される参照データ範囲を示している。
図11(A)では、水平方向のフィルタカーネルのサイズが「5」の場合を示しており、参照データ範囲1103は、水平方向のフィルタカーネルのサイズと等しいinput(x,2):x=2〜6となる。実際には、図11(A)で点線で示しているように、畳込み演算を垂直方向に5回繰り返すことにより、所定の範囲の参照データ面に対する演算を実行する。
またさらに図11(B)は、並列にフィルタ演算する特徴面データ1104の領域を示している。例えば、特徴面データ1104は、同時にフィルタ演算する特徴面データの領域を示し、並列度が5の場合、output(x,4):x=4〜8の特徴面データを同時に演算する。この時、畳込み演算が実行される参照データの範囲は、図11(B)で太線で囲まれた参照面データ1105となる。尚、図11(B)では、各特徴面データと参照データ範囲の対応を示す点線は、それぞれ特徴面データ1104であるoutput(x,4):x=4〜5についてのみ示している。
ここで、元々のフィルタのカーネルサイズは水平方向に「5」、垂直方向に「5」である。特徴面データ1104を得るために、図12(A)に示すように、並列処理の対象である参照面データ領域1105を、垂直方向に1ライン単位で走査させながら二次元データ列に対してフィルタ演算を行う。
続いて第二の積和演算回路220により、前述した水平方向のフィルタカーネルを用いた畳込み演算の結果に対して、図12(B)及び図13に示すように、1次元構造を有する垂直方向のフィルタカーネルを用いた畳込み演算を実行する。
図12(B)は、1つの特徴面データを求める畳込み演算処理の具体例を示す図である。図12(B)では、参照データ面上の2次元座標で示している。
1201は、水平方向のフィルタカーネルを用いた畳込み演算の結果である参照データ面を表している。ここで各ブロック(模式的に示す最小一升)は、水平方向のフィルタカーネルを用いた畳込み演算結果(input(x,y)、x:水平方向位置、y:垂直方向位置)を示す。尚、図12(B)及び図13では、水平方向のフィルタカーネルを用いた畳込み演算の結果を、参照面データ全体に配置して表示している。しかし、実際には水平方向のフィルタカーネルを用いた畳込み演算の結果は、第一の積和演算回路200の累積加算器208から第二の積和演算回路220のリングバッファ212に随時入力される。
ここでは、前述の式(2)及び(3)を実現するための演算手法を理解し易いように、水平方向のフィルタカーネルを用いた畳込み演算の結果を参照面データ全体に配置して表示している。また、1203は、output(4,4)位置の特徴面データ1204を算出する場合のフィルタ演算における、畳込み演算が実行される参照データの範囲を示している。図12(B)では、垂直方向のフィルタカーネルのサイズが「5」の場合を示しており、参照データ範囲1203は、垂直方向のフィルタカーネルサイズと等しいinput(4,y):y=2〜6となる。
実際には、図13(B)の点線で示すように、垂直方向のフィルタカーネルによる演算を1つの係数データごとに実行し、それを垂直方向に5回繰り返すことで畳込み演算における参照データ面に対する演算を実行する。またさらに図13(A)は、フィルタ演算する特徴面データの領域1301を示している。例えば特徴面データの領域1301は、同時にフィルタ演算する特徴面データの領域を示し、例えば並列度が「5」の場合、output(x,4):x=4〜8の特徴面データを同時に演算する。尚、図13(A)では、特徴面データと参照データ範囲の対応を示す点線及び一点鎖線は、それぞれoutput(x,4):x=4及び8についてのみ示している。但し、後述するように、畳込み演算は、垂直方向のフィルタカーネルの1つの係数データごとに実行されるため、参照面データの1ラインごとに積和演算が実行される。即ち、元々のフィルタカーネルのサイズが水平方向に「5」、垂直方向に「5」であるとすると、図13(B)に示すように、並列処理の対象である参照面データの領域1302を垂直方向に1ライン単位で走査させながらフィルタ演算を行う。こうして二次元データ列に対してフィルタ演算を行うことになる。この場合に、参照面データの垂直方向に1ライン単位で走査させる機能は、第二の積和演算回路220におけるリングバッファ212によって実現される。
以上説明したように、参照データに対して水平方向のフィルタカーネルを用いた畳込み演算と、垂直方向のフィルタカーネルを用いた畳込み演算を実行した場合、その演算結果は式(2)で表わされる。ここで前述したように、2次元構造を有するフィルタカーネルの重み係数マトリクスは、式(2)に示す乗算によって近似可能である。このため、以上の演算処理により、一般的な2次元構造を有するフィルタカーネルによる畳込み演算処理の近似演算を実行することが可能となる。
以上説明したように、水平方向及び垂直方向のフィルタカーネルによる畳込み演算は、特徴面データの領域1104及び1301を垂直方向に1ライン単位、水平方向に5画素単位でフィルタを同時に走査してフィルタ演算することによりなされる。こうして二次元データ列に対して高速にフィルタ演算を行うことができる。
図15は、実施形態1に係るCNN処理部122における畳込み演算の処理時の動作を説明するタイムチャートである。図15では、1つの特徴面の畳込み演算処理動作(S1004)の一部を示してある。また、図15に示す信号は、全てクロック信号(図示せず)に基づいて同期して動作する。尚、前述したように実施形態1に係る畳込み演算処理は、水平方向のフィルタカーネルを用いた畳込み演算と、垂直方向のフィルタカーネルを用いた畳込み演算が並行して実行される。
Load1信号及びLoad6信号は、記憶部202及び記憶部210に重みデータをロードするイネーブル信号を示す。制御部201は、これらLoad信号1及びLoad6信号が有効(信号レベルが1)の期間に、RAM100から水平方向及び垂直方向のそれぞれの重みデータを読み出し、記憶部202及び記憶部210にそれぞれを書き込む。このとき水平方向及び垂直方向のフィルタカーネルのサイズはレジスタ群702に保持されている。また制御部201は、レジスタ群702で指定する重み係数格納先ポインタ、カーネルサイズ及び参照データ面の数に基づいて、読み出す重みデータのアドレスを決定する。ここでRAM100のデータ幅は32ビットであり、重み係数のデータ幅は8ビットとする。この場合、記憶部202及び記憶部210に水平方向に12個の重み係数を書き込む場合、3クロックでロード処理を完了する。尚、以後、RAM100に対する読み出し及び書き込みサイクルは、全て1クロックで完了するものとする。
また実施形態1では、水平方向フィルタのカーネルサイズと、垂直方向フィルタのカーネルサイズは等しいものとしているため、記憶部210に垂直方向の12個の重み係数を書き込むのに必要な時間は、前述した水平方向の場合と同一である。従って実施形態1では、水平方向フィルタカーネルの重み係数と、垂直方向フィルタカーネルの重み係数の読み出し及び書き込み処理は、同時に完了する。
次に制御部201は、重み係数を各記憶部にロードすると、次に第一の積和演算回路200における参照データのロードを開始するためにLoad3信号を有効化する。Load3信号もLoad1信号と同様に、信号レベルが「1」のときに有効化された状態となる。制御部201はLoad3信号を「1」にするのと同時に、RAM100から参照データを読み出して記憶部203にセットする。セットするデータの数はレジスタ群702に保持されているフィルタカーネルのサイズ及び並列度から決定する。また制御部201は、レジスタ群702で指定する参照データの格納先ポインタ、参照データの水平及び垂直サイズ及び参照データ面の数に基づいて、RAM100から読み出す参照データのアドレスを決定する。ここで参照データの有効桁は8ビットであるため、記憶部203に例えば23個の参照データを書き込む場合、6サイクルで書き込みシーケンスを完了する。例えば、水平方向フィルタカーネルのサイズが「12」であるとすると、並列度が23(12+12−1=23個)のデータをロードする必要がある。
*CLR信号は、第一及び第二の積和演算回路200,220における累積加算器208及び214を初期化させる信号であり、*CLR信号が0(ロウレベル)の場合、累積加算器208及び214のレジスタ502(図5)が「0」に初期化される。制御部201は、新たな特徴面データの畳込み演算開始前に、この*CLR信号を0にする。
Load2信号は、シフトレジスタ204の初期化を指示する信号であり、Load2信号が1で、かつEnable1信号が有効(信号レベル1)の場合、記憶部202に保持する複数の重み係数データがシフトレジスタ204に一括してロードされる。Enable1信号は、シフトレジスタ204のデータシフトを制御する信号であるが、図15に示すように動作中は常に1に設定されている。従って、Load2信号が1の場合、シフトレジスタ204はクロック信号に応じて記憶部202の出力をラッチし、Load2信号が0の場合はクロック信号に応じてシフト処理を継続する。制御部201のシーケンス制御部701は、フィルタカーネルのサイズに応じたクロック数をカウントするとLoad2信号を有効化する。これにより、シフトレジスタ204のシフト動作を停止させると同時に、記憶部202に保持する重み係数データをシフトレジスタ204に一括ロードする。即ち、フィルタカーネルの水平方向単位で重み係数データを一括してシフトレジスタ204にロードし、ロードした係数を動作クロックに応じてシフトアウトする。
また同様にLoad7信号は、シフトレジスタ211の初期化を指示する信号であり、Load7信号が1で、かつEnable4信号が有効(信号レベル1)の場合、記憶部210に保持する複数の重み係数データがシフトレジスタ211に一括ロードされる。Enable4信号は、シフトレジスタ211のデータシフトを制御する信号であり、図15に示すように動作中は常に1に設定されている。従って、Load7信号が1の場合、シフトレジスタ211は、クロック信号に応じて記憶部210の出力をラッチし、Load7信号が0の場合、クロック信号に応じてシフト処理を継続する。制御部201のシーケンス制御部701は、フィルタカーネルのサイズに応じたクロック数をカウントするとLoad7信号を有効化する。これによりシフトレジスタ211のシフト動作を停止させると同時に、記憶部210に保持する重み係数データをシフトレジスタ211に一括ロードする。即ち、フィルタカーネルの垂直方向単位で重み係数データを一括してシフトレジスタ211にロードし、ロードした係数を動作クロックに応じてシフトアウトする。
Load4信号は、シフトレジスタ205の初期化を指示する信号であり、Load4信号が1で、かつEnable2信号が有効(信号レベル1)の場合、記憶部203に保持されている参照データがシフトレジスタ205に一括ロードされる。尚、Enable2信号はシフトレジスタ205のデータシフトを制御する信号であるが、図15に示すように動作中は常に1に設定されている。このためLoad4信号が1の場合、シフトレジスタ205はクロック信号に応じて記憶部203の出力をラッチし、Load4信号が0の場合、クロック信号に応じてシフト処理を継続する。制御部201のシーケンス制御部701は、垂直方向フィルタのカーネルサイズに応じたクロック数をカウントするとLoad4信号を有効化し、シフトレジスタ205のシフト動作を停止させると同時に、記憶部203に保持する参照データを一括ロードする。即ち、フィルタカーネルの1列単位で必要な参照データを一括してシフトレジスタ205にロードし、ロードした参照データを動作クロックに応じてシフトする。このように、制御部201は、Load4信号をLoad2信号と同一のタイミングで制御する。
累積加算器208は、クロックに同期して積和演算を実行する。従って、シフトレジスタ204及び205のシフト動作に従って、算出する特徴面データの複数の点に対して同時にフィルタカーネルのサイズに応じた積和演算処理を実行する。具体的には、シフトレジスタ204及び205のシフト動作期間(図15の積和演算処理区間)中に水平方向フィルタカーネル分の積和演算がなされる。このような行単位の演算を、重み係数データ及び参照データを入れ替えながら水平方向に繰り返すことにより、並列度の数に応じた二次元の畳込み演算結果が生成される。また制御部201は、フィルタカーネルのサイズ及び並列度に応じて各信号を制御し、積和演算処理及び積和演算処理に必要なデータ(重み係数データ及び参照データ)のRAM100からの供給を並行して実行する。
Load8信号は、リングバッファ212の先頭レジスタの初期化を指示する信号である。Load8信号が1で、かつEnable5信号が有効(信号レベル1)の場合、第一の積和演算回路200の累積加算器208に保持される参照データが、リングバッファ212の先頭レジスタに一括ロードされる。尚、Enable5信号はリングバッファ212のデータシフトを制御する信号であり、図15に示すように動作中は常に1に設定されている。このためLoad8信号が1の場合、リングバッファ212はクロック信号に応じて第一の積和演算回路200の累積加算器208の出力をラッチする。またLoad8信号が0の場合、リングバッファ212はクロック信号に応じてリング状のシフト処理を実行する。制御部201のシーケンス制御部701は、垂直方向フィルタカーネルのサイズに応じたクロック数をカウントするとLoad8信号を有効化する。これによりリングバッファ212のシフト動作を停止させると同時に、第一の積和演算回路200の累積加算器208に保持されている参照データを一括してリングバッファ212にロードする。即ち、リングバッファ212は、カーネル単位で必要な参照データを一括ロードし、ロードした参照データを動作クロックに応じてシフトする。このように、制御部201はLoad8信号をLoad7信号と同一のタイミングで制御する。
累積加算器214は、クロックに同期して積和演算を継続している。従って、シフトレジスタ211及びリングバッファ212のシフト動作に従って算出する特徴面データの複数の点に対して同時にフィルタのカーネルサイズに応じた積和演算処理を実行する。具体的には、シフトレジスタ211及びリングバッファ212のシフト動作期間(図15の積和演算処理区間)中に垂直方向フィルタカーネル分の積和演算がなされる。このような列単位の演算を、重み係数データ及び参照データを入れ替ながら垂直方向に繰り返し、並列度の数に応じた畳込み演算結果が生成される。また制御部201は、フィルタのカーネルサイズ及び並列度に応じて各信号を制御し、積和演算処理及び積和演算処理に必要なデータ(重み係数データ)のRAM100からの供給を並行して実行する。
続いてLoad5信号は、第二の積和演算回路220における累積加算器214の結果をシフトレジスタ206に並列にロードする信号である。制御部201は垂直方向フィルタカーネルの積和演算が終了すると、Load5信号(図示せず)及びEnable3信号を1にする。シフトレジスタ206は、Load5信号が1で、かつEnable3信号が1の場合、累積加算器214の出力を一括ロードする。尚、図15では、計算済みの畳込み演算結果がシフトレジスタ206にラッチされているものとする。制御部201は、シフトレジスタ204,205及び211とリングバッファ212のシフト動作中に記憶部202,210及び203へのデータロードが完了している場合、Enable3信号を有効化(1)する。これによりシフトレジスタ206に保持している演算結果が、シフトアウトされる。つまり、信号OUTn(シフトレジスタ206の最終段出力)を非線形変換処理部209に向けて出力させる。こうしてシフトレジスタ206からシフトアウトされた演算結果は、非線形変換処理部209によって変換処理される。その後、制御部201は、レジスタ群702に記された演算結果格納先ポインタ及び参照データのサイズに従って、変換処理された演算結果をRAM100の所定のアドレスに格納する。尚、式(3)に示すような、複数組の水平方向及び垂直方向のフィルタカーネルによる畳込み演算結果の累積値を算出する場合、累積加算器により、複数組の水平方向及び垂直方向のフィルタカーネルによる畳込み演算結果の累積加算を実行する。そして、複数組の水平方向及び垂直方向のフィルタカーネルによる畳込み演算結果の累積演算が完了した時点で、前述と同様にして、累積加算器214の演算結果をシフトレジスタ206に並列にロードする。Load5信号により累積加算器の結果をシフトレジスタ206に並列にロードする処理以降の処理は、上述した処理内容と同一である。
このように制御部201は、第一の積和演算回路200の記憶部202及び記憶部203のRAM100に対するアクセス、第二の積和演算回路220の記憶部210のRAM100に対するアクセスを調停する。更に、非線形変換処理部209のRAM100に対するアクセスを調停し、積和演算処理及び当該4つの処理部(202,203,210及び209)のRAM100へのアクセスをパイプライン化する。例えば、水平方向及び垂直方向のフィルタのカーネルサイズがともに「24」で、演算並列度が12の場合を考える。「水平方向フィルタカーネル及び垂直方向フィルタカーネルの積和演算に必要なクロック数(24)」は、「重み係数ロードクロック数(3)×2+参照データロードクロック数(9)+結果データ格納クロック数(1)」より大きい。このため、メモリアクセスに要する時間は、積和演算時間内に隠蔽される。
尚、非線形変換処理部209は記憶部202,203及び210に比べてRAM100に対するアクセス頻度が低いため、最も低い優先順位で動作する。即ち、非線形変換処理部209は、記憶部202,203及び210のアクセスの間隙となるタイムスロットでRAM100にアクセスする。
また実施形態1では、RAM100からの参照データの読み出し、重み係数データの読み出し及び演算結果の書き出しを積和演算処理期間に並行して実行する。従って、「積和演算時間(フィルタカーネルの水平サイズ+フィルタカーネルの垂直サイズ)+シフトレジスタへのロード時間(水平方向フィルタカーネルのサイズ)」×結合する前階層の特徴面数」分のクロックで、並列度分の数の畳込み演算処理が完了する。
また、フィルタカーネルのサイズが小さい場合等、並列度とフィルタカーネルとの関係によっては、RAM100へのアクセスを積和演算期間中に完全にパイプライン化できない場合もある。このような場合、制御部201はRAM100へのアクセス完了を優先する。そしてEnable1,Enable2,Enable3,Enable4信号及びEnable5信号、及び累積加算器のLatch Enable信号を制御して積和演算処理の開始を遅延させることが好ましい。つまり、記憶部202,203及び210へのデータロード及び非線形変換処理部209のデータセーブを行うことが好ましい。
図16(A)は、実施形態1に係る第一の積和演算回路200における積和演算処理と、第二の積和演算回路220における積和演算処理のパイプライン動作のタイミングを説明する模式図である。図16(A)では、紙面の都合により、水平方向及び垂直方向のフィルタカーネルのサイズがそれぞれ「3」である場合を示している。
図16(A)で、h1〜h3は、第一の積和演算回路200による水平方向のフィルタカーネルのフィルタ係数を示し、図中のフィルタ係数が記述された各四角形の幅が示す1クロックで、そのフィルタ係数による積和演算が実行されることを示している。また、v1〜v3は、第二の積和演算回路220における垂直方向のカーネルのフィルタ係数を示している。図中のフィルタ係数が記述された各四角形の幅が示す1クロック内で、そのフィルタ係数による積和演算が実行されることを示している。
前述したように第一の積和演算回路200では、各フィルタ係数h1〜h3による積和演算が、それぞれ1クロックごとに実行される。こうしてフィルタのカーネルサイズに一致する3クロックで1ライン分の参照データの演算が完了し、積和演算結果は第二の積和演算回路220に対して出力される。第二の積和演算回路220では、第一の積和演算回路200から入力されたデータの3ライン分に対して、フィルタのカーネルサイズに一致する3クロックで3ライン分の参照データの演算が完了する。図16(A)では、それぞれ算出された積和演算結果が出力されるタイミングを矢印で示している。
このように、第一の積和演算回路200における積和演算処理と、第二の積和演算回路220における積和演算処理は、図16(A)に示すようにパイプライン処理として実行される。
次に、畳込み演算処理の終了に伴う割り込み処理について説明する。
図10(B)は、CPU127による割り込み処理時の動作を示すフローチャートである。
割り込み処理時、CPU127が制御部201からの終了通知割り込みを受信するとS1010でCPU127はDMAC26を起動し、RAM100の最終特徴面データをCPUバス130上のRAM129に転送する。次にCPU127は、RAM129に記憶されている最終層検出結果から、検出対象である所定の物体の位置及び大きさ等の情報を取得する。具体的には、最終の検出結果を二値化処理し、ラベリング等の処理によりオブジェクト位置及びサイズ等を抽出する。このようにして一連の処理が終了する。
そして実施形態1によれば、少ない回路規模(レジスタサイズ等)でフィルタカーネルのサイズ単位で演算及びメモリアクセスをパイプライン化できる。そして2次元構造を有するフィルタカーネルを、水平方向及び垂直方向の2つの1次元構造を有するフィルタカーネルに分解した階層的な畳込み演算を高速に実行できる。また参照データ及び演算結果データを、同一のメモリ上に配置する構成としているため、レジスタの設定だけで複雑な階層的な畳込み演算処理に柔軟に対応することができる。
つまり、階層的な畳込み演算を低コストで高速に実行でき、さらに低消費電力化を実現することが可能となる。また、同一の回路で様々な階層的結合を有する畳込み演算を高速に実行することができる。
[実施形態2]
次に、本発明の実施形態2を説明する。実施形態2に係る演算装置は、水平方向フィルタのカーネルサイズと、垂直方向フィルタのカーネルサイズとが異なる点が実施形態1と相違しており、他の構成等は実施形態1と同様である。従って、実施形態2では、実施形態1と相違する部分についてのみ説明し、その他の部分に関しては実施形態1と同様として説明を省略する。実施形態2では、水平方向フィルタのカーネルサイズが「4」、垂直方向フィルタのカーネルサイズが「3」とする。
実施形態1で説明した畳込み演算装置は、図16(A)で説明したように第一の積和演算回路200と第二の積和演算回路220がパイプライン動作を行う。しかしながら実施形態2のように、水平方向フィルタのカーネルサイズと、垂直方向フィルタのカーネルサイズとが異なる場合、第一の積和演算回路200と第二の積和演算回路220におけるそれぞれの積和演算処理ステップ数が一致しない。即ち、第一の積和演算回路200では、シフトレジスタ205が参照データを4回シフトする間に積和演算が完了するのに対して、第二の積和演算回路220では、リングバッファ212が参照データを3回シフトする間に積和演算が完了する。このように実施形態2では、第一の積和演算回路200と第二の積和演算回路220それぞれの積和演算処理のステップ数において、(4−3=)1回のズレが生じる。そこで実施形態2では、図16(C)に示すように、制御部201によって制御されるパイプライン処理中の、第二の積和演算回路220の演算処理に対して、演算を実行しないストールを挿入する。これにより、図16(C)から分るように、第一の積和演算回路200で積和演算処理が完了するタイミングと、第二の積和演算回路220で積和演算処理が完了するタイミングを一致させることができる。尚、実施形態2では、水平方向フィルタのカーネルサイズが、垂直方向フィルタのカーネルサイズよりも大きい場合で説明した。しかし、逆に垂直方向フィルタのカーネルサイズが水平方向フィルタのカーネルサイズよりも大きい場合は、図16(B)に示すように、積和演算処理ステップ数のズレ分のストールステージを、第一の積和演算回路200の演算ステージに挿入すれば良い。また当然のことながら、水平方向及び垂直方向フィルタのカーネルサイズは、上記の例に限るものでは無く、任意のサイズで構わない。その場合は、水平方向及び垂直方向フィルタのカーネルサイズの差に対応するストールステージを挿入すれば良い。
以上説明したように実施形態2によれば、水平方向フィルタのカーネルサイズと、垂直方向フィルタのカーネルサイズとが異なる場合でも、階層的な畳込み演算を低コストで高速に実行できる。更に、低消費電力化を実現することが可能となる。また、同一の回路で様々な階層的結合を有する畳込み演算を高速に実行できる。
[実施形態3]
次に本発明の実施形態3について説明する。実施形態3に係る畳込み演算装置は、実施形態1の第一の積和演算回路200が第二の積和演算回路220の後段に直列に接続されている点が実施形態1と相違しており、他の構成等は実施形態1と同様である。従って、実施形態3では実施形態1と相違する部分についてのみ説明し、その他の部分に関しては実施形態1と同様として説明を省略する。
図17は、本発明の実施形態3に係るCNN処理部122の構成を説明するブロック図である。ここでは、第二の積和演算回路220の後段に第一の積和演算回路200が直列に接続されている。尚、図17において、前述の実施形態1に係る図2と共通する部分は同じ参照番号で示している。
図17では、第二の積和演算回路220のリングバッファ212に対して、記憶部203に保持されている参照データが一括してロードされる。また第一の積和演算回路200のシフトレジスタ205には、第二の積和演算回路220の累積加算器214に保持される参照データが一括してロードされる。以上の実施形態1との相違点に関して、さらに詳細に説明する。
図18は、実施形態3における畳込み演算処理時の動作を説明するタイムチャートである。図18は、1つの特徴面データの畳込み演算処理動作(S1004)の一部を示している。また図18に示す信号は、全てクロック信号(図示せず)に基づいて同期動作する。
Load9信号は、リングバッファ212の先頭レジスタの初期化を指示する信号である。Load9信号が1で、かつEnable6信号が有効(1)の場合、記憶部203に保持されている参照データがリングバッファ212の先頭レジスタに一括してロードされる。尚、Enable6信号は、リングバッファ212のデータシフトを制御する信号であるが、図18に示すように動作中は常に1に設定されている。このため、Load9信号が1になると、リングバッファ212はクロック信号に応じて記憶部203の出力をラッチし、Load9信号が0のときはクロック信号に応じてリング状のシフト処理を継続する。
制御部201のシーケンス制御部701は、垂直方向フィルタのカーネルサイズに応じたクロック数をカウントするとLoad9信号を有効化(1)して、リングバッファ212のシフト動作を停止させる。これと同時に、記憶部203に保持している参照データを一括してリングバッファ212にロードする。即ち、フィルタのカーネル単位で必要な参照データを、一括してリングバッファ212にロードし、ロードした参照データを動作クロックに応じてリング状にシフトする。ここで制御部201は、Load9信号を、実施形態1で説明した重み係数データを制御するLoad7信号と同一のタイミングで制御する。
累積加算器214は、クロックに同期して積和演算を継続している。従って、シフトレジスタ211及びリングバッファ212のシフト動作に従って、算出する特徴面データの複数の点に対して、同時にカーネルサイズに応じた積和演算処理を実行する。これは実施形態1と同様である。具体的には、シフトレジスタ211及びリングバッファ212のシフト動作期間(図18の積和演算処理区間)中に、垂直方向フィルタのカーネル分の積和演算がなされる。このような垂直方向フィルタのカーネル単位の演算を、重み係数データ及び参照データを入れ替えながら垂直方向に繰り返し、並列度の数に応じた畳込み演算結果が生成される。また制御部201は、フィルタのカーネルサイズ及び並列度に応じて各信号を制御し、積和演算処理及び積和演算処理に必要なデータ(重み係数データ)のRAM100からの供給を並行して実行する。
続いて、Load10信号は、シフトレジスタ205の初期化を指示する信号である。Load10信号が1で、かつEnable7信号が有効(信号レベル1)の場合、第二の積和演算回路220の累積加算器214に保持される参照データがシフトレジスタ205に一括してロードされる。尚、Enable7信号は、シフトレジスタ205のデータシフトを制御する信号であるが、図18に示すように、動作中は常に1に設定されている。このためLoad10信号が1の場合、シフトレジスタ205は、クロック信号に応じて第二の積和演算回路220の累積加算器214の出力をラッチし、Load10信号が0の場合、クロック信号に応じてシフト処理を継続する。
制御部201のシーケンス制御部701は、水平方向フィルタのカーネルサイズに応じたクロック数をカウントするとLoad10信号を有効化してシフトレジスタ205のシフト動作を停止させる。これと同時に、第二の積和演算回路220の累積加算器214に保持されている参照データを一括してシフトレジスタ205にロードする。即ち、水平方向フィルタのカーネル単位で必要な参照データを一括してシフトレジスタ205にロードし、ロードした参照データを動作クロックに応じてシフトする。このように制御部201は、Load10信号を実施形態1で説明した重み係数データを制御するLoad2信号と同一のタイミングで制御する。
累積加算器208は、クロックに同期して積和演算を継続している。従って、シフトレジスタ204及び205のシフト動作に従って、算出する特徴面データの複数の点に対して、同時にフィルタのカーネルサイズに応じた積和演算処理を実行する。これは実施形態1と同様である。具体的には、シフトレジスタ204及び205のシフト動作期間(図18の積和演算処理区間)中に水平方向フィルタのカーネル分の積和演算がなされる。このような水平方向単位の演算を、重み係数データ及び参照データを入れ替えながら水平方向に繰り返し、並列度の数に応じた畳込み演算結果が生成される。また制御部201は、フィルタのカーネルサイズ及び並列度に応じて各信号を制御し、積和演算処理及び積和演算処理に必要なデータ(重み係数データ及び参照データ)のRAM100からの供給を並行して実行する。
以上説明したように実施形態3によれば、第二の積和演算回路220の後段に第一の積和演算回路200が直列に接続されている。この実施形態3に係る畳込み演算装置を用いることにより、実施形態1と同様に、階層的な畳込み演算を低コストで高速に実行できる。また更に、低消費電力化を実現することが可能となる。また、同一の回路で様々な階層的結合を有する畳込み演算を高速に実行できる。
[実施形態4]
次に本発明の実施形態4について説明する。実施形態4に係るCNN処理部は、実施形態1における第二の積和演算回路220と同一の構成を有する第三の積和演算回路1900が、第二の積和演算回路220の後段に直列に接続されている点が実施形態1と相違している。他の構成等は実施形態1と同様である。従って、実施形態4では、前述の実施形態1と相違する部分についてのみ説明し、その他の部分に関しては実施形態1と同様として説明を省略する。
図19は、実施形態4に係るCNN処理部122の構成を説明するブロック図である。ここでは、第二の積和演算回路220の後段に第三の積和演算回路1900が直列に接続されている。ここで、第三の積和演算回路1900の構成は、第二の積和演算回路220と同様である。
次に実施形態4に係る畳込み演算について説明する。実施形態4に係る畳込み演算処理では、複数の特徴面データに対応する、複数の2次元構造を有するフィルタカーネルを水平方向、垂直方向、及び特徴面方向の3つの1次元構造を有するフィルタカーネルに分解して畳込み演算を実行する。3次元構造を有するフィルタカーネル(水平方向、垂直方向及び特徴面データ方向)の重み係数マトリクスは、1次元構造を有する水平方向、垂直方向及び特徴面方向のフィルタカーネルを用いた式(4)で示す乗算によって近似できることが知られている。
Figure 0006700712

尚、実際には、複数の水平方向、垂直方向及び特徴面方向のフィルタカーネルの組み合わせを用い、式(5)に示すようにそれらのフィルタ演算結果の総和を取ることで近似精度を高める手法が取られることが多い。式(5)では、フィルタカーネルの組み合わせを添え字「pair」で示している。
Figure 0006700712

これらの手法に関しては、非特許文献1で詳細が説明されているため、これ以上の説明は省略する。続いて、前記式(2)及び(3)を実行するための畳込み演算方法に関して説明する。
まず第一の積和演算回路200及び第二の積和演算回路220における演算処理は実施形態1と同様に実行されるため、説明を省略する。また第三の積和演算回路1900における演算処理は、実施形態1で説明した第二の積和演算回路220と同様に実行される。第三の積和演算回路1900の参照番号1915〜1919で示す各部は、第二の積和演算回路220の210〜214で示す各部と同じであるため、その説明を省略する。
図20は、実施形態4に係る畳込み演算の処理時の動作を説明するタイムチャートである。図20では、1つの特徴面データの畳込み演算処理動作(S1004)の一部を示してある。また、図20に示す信号は全てクロック信号(図示せず)に基づいて同期動作する。
まずLoad11信号は、記憶部1915に重み係数データをロードするイネーブル信号を示す。制御部201はLoad11信号が有効(信号レベルが1)の期間に、RAM100から特徴面方向の重み係数データを読み出して記憶部1915に書き込む。特徴面方向のフィルタのカーネルサイズは、レジスタ群702に保持されている。また制御部201は、レジスタ群702で指定する重み係数格納先ポインタ、カーネルサイズ及び参照データ面の数に基づいて、読み出す重み係数データのアドレスを決定する。RAM100のデータ幅は32ビットであり、重み係数データのデータ幅は8ビットであるので、記憶部1915に特徴面方向の5個の重み係数データを書き込む場合、3クロックでロード処理を完了する。尚、以後、RAM100に対する読み出し及び書き込みサイクルは全て1クロックで完了するものとする。
*CLR信号は、第三の積和演算回路1900の累積加算器1919を初期化させる信号であり、*CLR信号が0の場合、累積加算器1919のレジスタ502(図5)が0に初期化される。制御部201は、新たな特徴面データの畳込み演算開始前に、この*CLR信号を0にする。またLoad12信号は、シフトレジスタ1916の初期化を指示する信号である。Load12信号が1で、かつEnable8信号が有効(信号レベル1)のとき、記憶部1915に保持されている複数の重み係数データがシフトレジスタ1916に一括してロードされる。Enable8信号は、シフトレジスタ1916のデータシフトを制御する信号であるが、図20に示すように動作中は常に1に設定されている。従って、Load12信号が1のとき、シフトレジスタ1916は、クロック信号に応じて記憶部1915の出力をラッチし、Load12信号が0の場合、クロック信号に応じてシフト処理を継続する。制御部201のシーケンス制御部701は、フィルタのカーネルサイズに応じたクロック数をカウントするとLoad12信号を有効化してシフトレジスタ1916のシフト動作を停止させる。これと同時に、記憶部1915に保持されている重み係数データをシフトレジスタ1916に一括してロードする。即ち、フィルタカーネルの特徴面方向単位で、重み係数データを一括してシフトレジスタ1916にロードし、ロードした係数を動作クロックに応じてシフトアウトする。
Load13信号は、リングバッファ1917の先頭レジスタの初期化を指示する信号である。Load13信号が1で、かつEnable9信号が有効(信号レベル1)のとき、第二の積和演算回路220の累積加算器214に保持される参照データがリングバッファ1917の先頭レジスタに一括してロードされる。尚、Enable9信号は、リングバッファ1917のデータシフトを制御する信号であり、図20に示すように動作中は常に1に設定されている。このためLoad13信号が1の場合、リングバッファ1917は、クロック信号に応じて第二の積和演算回路220の累積加算器214の出力をラッチし、Load13信号が0の場合、クロック信号に応じてリング状のシフト処理を継続する。制御部201のシーケンス制御部701は、特徴面方向のフィルタのカーネルサイズに応じたクロック数をカウントするとLoad13信号を有効化してリングバッファ1917のシフト動作を停止させる。これと同時に、第二の積和演算回路220の累積加算器124に保持されている参照データを一括してリングバッファ1917にロードする。即ち、フィルタのカーネル単位で必要な参照データを一括してリングバッファ1917にロードし、ロードした参照データを動作クロックに応じてシフトする。このように制御部201は、Load13信号をLoad12信号と同一のタイミングで制御する。
累積加算器1919は、クロックに同期して積和演算を継続している。従って、シフトレジスタ1916及びリングバッファ1917のシフト動作に従って、算出する特徴面データの複数の点に対して、同時にフィルタのカーネルサイズに応じた積和演算処理を実行する。具体的には、シフトレジスタ1916及びリングバッファ1917のシフト動作期間(図20の積和演算処理区間)中に特徴面方向のカーネル分の積和演算がなされる。このような特徴面方向のカーネル単位の演算を、重み係数データ及び参照データを入れ替えながら繰り返すことにより、並列度の数に応じた畳込み演算結果が生成される。また制御部201は、フィルタのカーネルサイズ及び並列度に応じて各信号を制御し、積和演算処理及び積和演算処理に必要なデータ(重み係数データ)のRAM100からの供給を並行して実行する。
次にLoad5信号は、第三の積和演算回路1900における累積加算器1919の結果をシフトレジスタ206に並列にロードする信号である。制御部201は、特徴面方向フィルタカーネルの積和演算が終了すると、Load5信号(図示せず)及びEnable3信号に1を出力する。シフトレジスタ206は、Load5信号が1で、かつEnable3信号が1の場合、累積加算器1919の出力を一括してロードする。尚、図20では、計算済みの畳込み演算結果がシフトレジスタ206にラッチされているものとする。制御部201は、シフトレジスタ1916及びリングバッファ1917のシフト動作中に、記憶部202,203,210及び1915へのデータのロードが完了している場合、Enable3の信号を有効化する。そしてシフトレジスタ206が保持する演算結果をシフトアウトする。つまり、信号OUTn(シフトレジスタ206の最終段出力)を非線形変換処理部209に向けて出力させる。こうしてシフトアウトされた演算結果は、非線形変換処理部209によって変換処理され、その後、制御部201により、レジスタ群702に記された演算結果格納先ポインタ及び参照データのサイズに従ってRAM100の所定のアドレスに格納される。
尚、ここで、前述したように、式(5)に示すように複数組の水平方向、垂直方向及び特徴面方向のフィルタカーネルによる畳込み演算結果の累積値を算出する。このとき累積加算器1919は、それら複数組の水平方向及び垂直方向のフィルタカーネルによる畳込み演算結果の累積演算を実行する。そして、複数組の水平方向、垂直方向及び特徴面方向のフィルタカーネルによる畳込み演算結果の累積演算が完了した時点で、前述と同様にして、累積加算器1919の演算結果をシフトレジスタ206に並列にロードする。Load5信号により累積加算器1919の結果をシフトレジスタ206に並列にロードする処理以降の処理は、上述した処理内容と同一である。
このように制御部201は、第一の積和演算回路200における記憶部202及び記憶部203からRAM100に対するアクセスと、第二の積和演算回路220における記憶部210からのRAM100に対するアクセスとを調停する。更に、第三の積和演算回路1900の記憶部1915のRAM100に対するアクセスと、更に非線形変換処理部209のRAM100に対するアクセスを調停する。こうして積和演算処理及び当該3つの処理部(202,203,209,210及び1915)のRAM100へのアクセスをパイプライン化する。
例えば、水平方向、垂直方向及び特徴面方向のフィルタのカーネルサイズが24で、演算並列度が12の場合を考える。「水平方向フィルタカーネル、垂直方向フィルタカーネル及び特徴面方向フィルタカーネルの積和演算に必要なクロック数(24)」が「重み係数ロードクロック数(3)×3+参照データロードクロック数(9)+結果データ格納クロック数(1)」より大きい。このため、RAM100へのアクセスに要する時間は、実施形態1と同様に、積和演算時間内に隠蔽される。尚、非線形変換処理部209は、記憶部202,203,210及び1915に比べてRAM100に対するアクセス頻度が低いため、最も低い優先順位で動作する。即ち、記憶部202,203,210及び1915のアクセスの間隙となるタイムスロットでアクセスを行う。
また実施形態4では、RAM100からの参照データの読み出し、重み係数データの読み出し、及び演算結果の書き出しを積和演算処理期間に並行して実行する。従って、「積和演算時間(水平方向フィルタのカーネルサイズ+垂直方向フィルタのカーネルサイズ+特徴面方向フィルタのカーネルのサイズ)+シフトレジスタへのロード時間(水平方向フィルタカーネルのサイズ)」×結合する前階層の特徴面数」分のクロックで、並列度分の数の畳込み演算処理が完了する。
但し、フィルタのカーネルサイズが小さい場合等、並列度とフィルタカーネルとの関係によっては、RAM100へのアクセスを積和演算期間中に完全にパイプライン化できない場合もある。このような場合、制御部201はRAM100へアクセス完了を優先し、Enable1〜Enable5信号、Enable8〜Enable9信号及び累積加算器のLatch Enable信号を制御して積和演算処理の開始を遅延させるのが好ましい。つまり、記憶部202,203,210及び1915へのデータロード及び非線形変換処理部209のデータセーブを行うことが好ましい。
図21は、実施形態4に係る第一の積和演算回路200の積和演算処理と、第二の積和演算回路220の積和演算処理と、第三の積和演算回路1900の積和演算処理のパイプライン動作の模式図である。尚、図21では、紙面の都合により、水平方向、垂直方向及び特徴面方向のフィルタカーネルのサイズがそれぞれ3である場合を示している。
図21中で、h1〜h3は、第一の積和演算回路200における水平方向フィルタの重み係数データを示し、図中の係数データが記述された各四角形の幅が示す1クロック内で、当該係数データによる積和演算が実行されることを示している。また、v1〜v3は、第二の積和演算回路220における垂直方向フィルタの重み係数データを示し、図中の係数データが記述された各四角形の幅が示す1クロック内で、当該係数データによる積和演算が実行されることを示している。また、f1〜f3は、第三の積和演算回路1900における特徴面方向フィルタの重み係数データを示し、図中の係数データが記述された各四角形の幅が示す1クロック内で、当該係数データによる積和演算が実行されることを示している。
前述したように第一の積和演算回路200では、各係数データh1〜h3による積和演算が、それぞれ1クロックごとに実行される。またフィルタのカーネルサイズに一致する3クロックで、1ライン分の参照データの演算が完了し、積和演算結果は第二の積和演算回路220に出力される。第二の積和演算回路220では、第一の積和演算回路200より入力された3ライン分のデータに対して、フィルタのカーネルサイズに一致する3クロックで、3ライン分の参照データの演算が完了する。第三の積和演算回路1900は、第二の積和演算回路220から入力された3ライン分のデータに対して、フィルタのカーネルサイズに一致する3クロックで、3ライン分の参照データの演算が完了する。図21では、それぞれ算出された積和演算結果が出力されるタイミングを矢印で示している。
このように、第一の積和演算回路200の積和演算処理と、第二の積和演算回路220の積和演算処理と、第三の積和演算回路1900の積和演算処理は、図21に示すようにパイプライン処理として実行される。尚、畳込み演算処理の終了に伴う割り込み処理については、実施形態1と同様であるため、その説明を省略する。
尚、以上説明した実施形態4では、特徴面方向フィルタのカーネルに関する演算を第二の積和演算回路220で実行し、垂直方向フィルタのカーネルに関する演算を第三の積和演算回路1900で実行しても良い。この場合、それぞれの積和演算回路で演算対象とするフィルタのカーネルが入れ替わるだけで、上記で説明した演算方法は全て同一である。
また更に前述の実施形態3で説明したように、第一の積和演算回路200が第二の積和演算回路220もしくは第三の積和演算回路1900の後段に直列に接続されるものであっても構わない。
以上説明したように実施形態4によれば、少ない回路規模(レジスタサイズ等)でフィルタのカーネルサイズ単位で演算及びメモリアクセスをパイプライン化できる。こうして、3次元構造を有するフィルタカーネルを、水平方向、垂直方向及び特徴面方向の3つの1次元構造を有するフィルタカーネルに分解した階層的な畳込み演算を高速に実行できる。また、参照データ及び演算結果データを、同一のメモリ空間上に配置する構成であるため、レジスタの設定だけで複雑な階層的畳込み演算処理に柔軟に対応できる。つまり、階層的な畳込み演算を低コストで高速に実行でき、更に、低消費電力化を実現することが可能となる。また、同一の回路で様々な階層的結合を有する畳込み演算を高速に実行できるという効果がある。
[実施形態5]
次に本発明の実施形態5について説明する。実施形態5に係る畳込み演算装置は、第二の積和演算回路220と同一の構成を有する第四の積和演算回路が、第三の積和演算回路1900の後段に直列に接続されている点が実施形態4と相違しており、他の構成等は実施形態4と同様である。従って、実施形態5では、実施形態4と相違する部分についてのみ説明し、その他の部分に関しては実施形態1と同様として説明を省略する。
図22は、実施形態5に係るCNN処理部122の構成を説明するブロック図である。ここでは、第三の積和演算回路1900の後段に第四の積和演算回路2200が直列に接続されている。ここで、第四の積和演算回路2200の構成は、第二の積和演算回路220と同様であるため、その説明を省略する。即ち、第四の積和演算回路2200の参照番号2220〜2224で示す各部は、第二の積和演算回路220の参照番号210〜214で示す部分と同じである。
次に、実施形態5に係る畳込み演算について説明する。実施形態5における畳込み演算処理では、複数の時系列の参照データ(画像データ)に対して畳込み演算を実行する。即ち、複数の特徴面に対応する、複数の2次元構造を有するフィルタカーネルを、水平方向、垂直方向、特徴面方向及び時間方向の4つの1次元構造を有するカーネルに分解し、参照データとの畳込み演算を実行する。一般に、4次元構造を有するカーネル(水平方向、垂直方向、特徴面方向及び時間方向)の重み係数マトリクスは、1次元構造を有する水平方向、垂直方向、特徴面方向及び時間方向のカーネルを用いた式(6)に示す乗算によって近似できることが知られている。
Figure 0006700712

尚、実際には、水平方向、垂直方向、特徴面方向及び時間方向のフィルタカーネルの組み合わせを用いて式(6)に示すようにそれらの乗算結果の総和を取ることで近似精度を高める手法が取られることが多い。式(7)では、フィルタカーネルの組み合わせを添え字「pair」で示している。
Figure 0006700712

これらの手法に関しては、非特許文献1に詳細が述べられているため、これ以上の説明は省略する。
上述の式(6)及び(7)を実行するための畳込み演算方法において、第一の積和演算回路200、第二の積和演算回路220及び第三の積和演算回路1900における演算処理は実施形態4と同様である。また第四の積和演算回路2200における演算処理も、実施形態4で説明した第三の積和演算回路1900の演算処理と同様であるため、その説明を省略する。
以上説明したように実施形態5によれば、少ない回路規模(レジスタサイズ等)でフィルタのカーネルサイズ単位で演算及びメモリアクセスをパイプライン化する。こうして4次元構造を有するカーネルを水平方向、垂直方向、特徴面方向及び時間方向の4つの1次元構造を有するフィルタカーネルに分解した階層的な畳込み演算を高速に実行できる。また、参照データ及び演算結果データを同一のメモリ空間に配置するため、レジスタの設定だけで、複雑な階層的畳込み演算処理に柔軟に対応できるという効果がある。
このようにして、階層的な畳込み演算を低コストで高速に実行でき、更に、低消費電力化を実現できる。また、同一の回路で様々な階層的結合を有する畳込み演算を高速に実行できる。
また実施形態5及び実施形態4から容易に類推できるように、1次元構造を有するフィルタカーネルの数を更に増やした場合でも、対応する積和演算回路を直列に接続することにより、実施形態1〜5で説明したのと同様にして畳込み演算を実行できる。
また実施形態1〜5で説明した回路構成は、本発明の畳込み演算装置の一例に過ぎず、同様の機能を実現可能なものであれば、どのような回路構成を取っても構わない。例えば、第二の積和演算回路220におけるリングバッファ212は、これまで説明した回路構成に限らない。例えば、過去に入力されたデータを繰り返し参照可能で、かつ保持したデータを順に参照可能な機能を有する記憶装置であれば、どのような回路構成を採用しても構わない。
[変形例1]
上述の実施形態1〜5に係るCNN処理部では、第一の積和演算回路200において、特許文献3と同様の演算を実行することが可能である。その場合は、例えば第二の積和演算回路220において実質的な演算を行わず、第一の積和演算回路200から入力されたデータをそのまま出力することで、同様の演算を実現することが可能である。また或いは第二の積和演算回路220をバイパスして、第一の積和演算回路200の出力を、直接、実施形態1に係るシフトレジスタ206に入力する構成を取っても良い。
特許文献3と同様の演算を実行する場合、例えば2次元構造を有するフィルタカーネルをそのまま使用するフィルタ演算処理を実行できる。これにより、フィルタカーネルを1次元構造を有するフィルタカーネルに分解することにより生じ得る、近似による精度劣化を避けることが可能となる。
[変形例2]
上述の実施形態1〜5では、各実施形態に係るCNN処理部によってCNN演算処理を実行する例を示したが、実行可能な演算処理はこれに限るものでは無い。即ち、上記式(2)〜(7)で示されるような畳込み演算を実行するものであれば、例えば一般的なフィルタ演算を実行することも可能であり、本発明は実行対象となる演算処理を特定するものでは無い。
(その他の実施形態)
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
本発明は上記実施形態に制限されるものではなく、本発明の精神及び範囲から離脱することなく、様々な変更及び変形が可能である。従って、本発明の範囲を公にするために、以下の請求項を添付する。
100…RAM、120…画像入力部、122…CNN処理部、127…CPU、128…ROM、129…RAM、202,203,210…記憶部、204,205,211,206…シフトレジスタ、207,213…乗算器、208,214…累積加算器、209…非線形変換処理部、212…リングバッファ

Claims (10)

  1. それぞれ、第1及び第2の入力に入力されたデータを乗算する複数の第1の乗算手段と、
    前記複数の第1の乗算手段に対応して設けられ、それぞれ対応する前記第1の乗算手段の乗算結果を累積する複数の第1の累積加算手段と、
    前記複数の第1の乗算手段のそれぞれの前記第1の入力に第1のデータとして2次元フィルタカーネルの係数データを分解した水平方向の係数データを供給する第1のデータ供給手段と、
    前記複数の第1の乗算手段の前記第2の入力に複数の第2のデータとして入力画像データの水平方向のデータを供給する第2のデータ供給手段と、を有する第一の積和演算手段と、
    それぞれ、第1及び第2の入力に入力されたデータを乗算する複数の第2の乗算手段と、
    前記複数の第2の乗算手段に対応して設けられ、それぞれ対応する前記第2の乗算手段の乗算結果を累積する複数の第2の累積加算手段と、
    前記複数の第2の乗算手段のそれぞれの前記第1の入力に第3のデータとして前記2次元フィルタカーネルの係数データを分解した垂直方向の係数データを供給する第3のデータ供給手段と、
    前記複数の第1の累積加算手段のそれぞれの出力から前記2次元フィルタカーネルの垂直方向の列単位で必要な参照データをリングバッファにロードして一括して保持し、当該各ロードした参照データを動作クロックに応じてリング状にシフトして複数の第4のデータとして前記複数の第2の乗算手段の前記第2の入力に供給する第4のデータ供給手段と、を有する第二の積和演算手段と、
    前記第一及び第二の積和演算手段による積和演算処理を並行して実行するように制御する制御手段と、を有し、
    前記複数の第2の累積加算手段の出力として、前記入力画像データに対する前記2次元フィルタカーネルによる畳み込み演算の結果を得ることを特徴とする畳み込み演算装置。
  2. 前記複数の第1の乗算手段、前記複数の第1の累積加算手段、前記複数の第2の乗算手段、及び前記複数の第2の累積加算手段の個数は、前記2次元フィルタカーネルのサイズに対応していることを特徴とする請求項に記載の畳み込み演算装置。
  3. 前記複数の第1の乗算手段と前記複数の第1の累積加算手段の個数は、前記複数の第2の乗算手段と前記複数の第2の累積加算手段の個数と等しいことを特徴とする請求項1又は2に記載の畳み込み演算装置。
  4. 前記2次元フィルタカーネルの水平方向のサイズと垂直方向のサイズが異なる場合、前記制御手段は、前記2次元フィルタカーネルの水平方向のサイズと垂直方向との差に応じたストールステージを、前記第一の積和演算手段の積和演算処理に挿入することを特徴とする請求項に記載の畳み込み演算装置。
  5. 前記第二の積和演算手段の後段に、更に、当該第二の積和演算手段と同じ構成の第三の積和演算手段を直列に接続し、
    前記第三の積和演算手段の、前記第二の積和演算手段の前記第4のデータ供給手段に相当するデータ供給手段は、前記第二の積和演算手段の前記複数の第2の累積加算手段のそれぞれの出力を入力して保持し、当該各出力を複数の第4のデータとして、前記第二の積和演算手段の前記複数の第2の乗算手段の相当する前記第三の積和演算手段の乗算手段の第2の入力に供給することを特徴とする請求項1乃至のいずれか1項に記載の畳み込み演算装置。
  6. 前記第三の積和演算手段の後段に、更に、前記第三の積和演算手段と同じ構成の第四の積和演算手段を直列に接続し、
    前記第四の積和演算手段の、前記第二の積和演算手段の前記第4のデータ供給手段に相当するデータ供給手段は、前記第三の積和演算手段の複数の累積加算手段のそれぞれの出力を入力して保持し、当該各出力を複数の第4のデータとして、前記第二の積和演算手段の前記複数の第2の乗算手段の相当する前記第四の積和演算手段の乗算手段の第2の入力に供給することを特徴とする請求項に記載の畳み込み演算装置。
  7. 記第二の積和演算手段の後段に前記第一の積和演算手段が接続され、前記第2のデータ供給手段は、前記複数の第2の累積加算手段のそれぞれの出力を前記複数の第2のデータとして前記複数の第1の乗算手段の前記第2の入力に供給することを特徴とする請求項1乃至4のいずれか1項に記載の畳み込み演算装置。
  8. 前記複数の第2の累積加算手段の出力に対して非線形変換を行う非線形変換手段を、更に有することを特徴とする請求項1乃至のいずれか1項に記載の畳み込み演算装置。
  9. 前記第1の積和演算手段の前記第2のデータ供給手段は、あるタイミングで前記複数の第1の乗算手段のいずれかの第1の乗算手段の前記第2の入力に供給した前記第2のデータを、他のタイミングで、前記複数の第1の乗算手段のうちの他の第1の乗算手段の前記第2の入力に供給することを特徴とする請求項1乃至のいずれか1項に記載の畳み込み演算装置。
  10. 前記第二の積和演算手段の前記第4のデータ供給手段は、あるタイミングで前記複数の第2の乗算手段のいずれかの第2の乗算手段の前記第2の入力に供給した前記第4のデータを、他のタイミングで、前記複数の第2の乗算手段の同じ第2の乗算手段の前記第2の入力に供給することを特徴とする請求項1乃至のいずれか1項に記載の畳み込み演算装置。
JP2015207499A 2015-10-21 2015-10-21 畳み込み演算装置 Active JP6700712B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2015207499A JP6700712B2 (ja) 2015-10-21 2015-10-21 畳み込み演算装置
US15/331,044 US10210419B2 (en) 2015-10-21 2016-10-21 Convolution operation apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015207499A JP6700712B2 (ja) 2015-10-21 2015-10-21 畳み込み演算装置

Publications (3)

Publication Number Publication Date
JP2017079017A JP2017079017A (ja) 2017-04-27
JP2017079017A5 JP2017079017A5 (ja) 2018-11-29
JP6700712B2 true JP6700712B2 (ja) 2020-05-27

Family

ID=58561708

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015207499A Active JP6700712B2 (ja) 2015-10-21 2015-10-21 畳み込み演算装置

Country Status (2)

Country Link
US (1) US10210419B2 (ja)
JP (1) JP6700712B2 (ja)

Families Citing this family (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10963775B2 (en) * 2016-09-23 2021-03-30 Samsung Electronics Co., Ltd. Neural network device and method of operating neural network device
US9940534B1 (en) * 2016-10-10 2018-04-10 Gyrfalcon Technology, Inc. Digital integrated circuit for extracting features out of an input image based on cellular neural networks
US10360470B2 (en) 2016-10-10 2019-07-23 Gyrfalcon Technology Inc. Implementation of MobileNet in a CNN based digital integrated circuit
US10043095B2 (en) * 2016-10-10 2018-08-07 Gyrfalcon Technology, Inc. Data structure for CNN based digital integrated circuit for extracting features out of an input image
US10366302B2 (en) 2016-10-10 2019-07-30 Gyrfalcon Technology Inc. Hierarchical category classification scheme using multiple sets of fully-connected networks with a CNN based integrated circuit as feature extractor
US10339445B2 (en) 2016-10-10 2019-07-02 Gyrfalcon Technology Inc. Implementation of ResNet in a CNN based digital integrated circuit
US10402628B2 (en) 2016-10-10 2019-09-03 Gyrfalcon Technology Inc. Image classification systems based on CNN based IC and light-weight classifier
US10366328B2 (en) 2017-09-19 2019-07-30 Gyrfalcon Technology Inc. Approximating fully-connected layers with multiple arrays of 3x3 convolutional filter kernels in a CNN based integrated circuit
US10402527B2 (en) 2017-01-04 2019-09-03 Stmicroelectronics S.R.L. Reconfigurable interconnect
JP6794854B2 (ja) * 2017-02-02 2020-12-02 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US11468318B2 (en) * 2017-03-17 2022-10-11 Portland State University Frame interpolation via adaptive convolution and adaptive separable convolution
JP7141401B2 (ja) * 2017-08-24 2022-09-22 ソニーセミコンダクタソリューションズ株式会社 プロセッサおよび情報処理システム
JP2019040403A (ja) 2017-08-25 2019-03-14 ルネサスエレクトロニクス株式会社 半導体装置および画像認識システム
KR102356708B1 (ko) * 2017-09-28 2022-01-27 삼성전자주식회사 컨볼루션 연산을 수행하는 연산 장치 및 연산 방법
US20190102671A1 (en) * 2017-09-29 2019-04-04 Intel Corporation Inner product convolutional neural network accelerator
JP2019074967A (ja) * 2017-10-17 2019-05-16 キヤノン株式会社 フィルタ処理装置およびその制御方法
US11386644B2 (en) * 2017-10-17 2022-07-12 Xilinx, Inc. Image preprocessing for generalized image processing
KR102521889B1 (ko) * 2017-11-06 2023-04-13 에이조 가부시키가이샤 화상처리장치, 화상처리방법 및 화상처리 프로그램을 기록한 기록 매체
JP6839641B2 (ja) * 2017-11-17 2021-03-10 株式会社東芝 演算処理装置
US11265540B2 (en) * 2018-02-23 2022-03-01 Sk Telecom Co., Ltd. Apparatus and method for applying artificial neural network to image encoding or decoding
US11537838B2 (en) * 2018-05-04 2022-12-27 Apple Inc. Scalable neural network processing engine
JP7169768B2 (ja) * 2018-05-08 2022-11-11 キヤノン株式会社 画像処理装置、画像処理方法
US10546044B2 (en) * 2018-05-15 2020-01-28 Apple Inc. Low precision convolution operations
JP2020004247A (ja) * 2018-06-29 2020-01-09 ソニー株式会社 情報処理装置、情報処理方法およびプログラム
US10417342B1 (en) 2018-07-03 2019-09-17 Gyrfalcon Technology Inc. Deep learning device for local processing classical chinese poetry and verse
US10311149B1 (en) 2018-08-08 2019-06-04 Gyrfalcon Technology Inc. Natural language translation device
JP7129857B2 (ja) 2018-09-07 2022-09-02 ルネサスエレクトロニクス株式会社 積和演算装置、積和演算方法、及びシステム
CN109146065B (zh) * 2018-09-30 2021-06-08 中国人民解放军战略支援部队信息工程大学 二维数据的卷积运算方法及装置
JP7165018B2 (ja) * 2018-10-03 2022-11-02 キヤノン株式会社 情報処理装置、情報処理方法
US10387772B1 (en) 2018-10-22 2019-08-20 Gyrfalcon Technology Inc. Ensemble learning based image classification systems
JP7345262B2 (ja) 2019-03-11 2023-09-15 キヤノン株式会社 データ圧縮装置、データ処理装置、データ圧縮方法、プログラム、及び学習済みモデル
JP7271244B2 (ja) * 2019-03-15 2023-05-11 本田技研工業株式会社 Cnn処理装置、cnn処理方法、およびプログラム
JP7204545B2 (ja) 2019-03-15 2023-01-16 本田技研工業株式会社 音響信号処理装置、音響信号処理方法、およびプログラム
WO2020194594A1 (ja) 2019-03-27 2020-10-01 Tdk株式会社 ニューラルネットワーク演算処理装置及びニューラルネットワーク演算処理方法
JP7435602B2 (ja) 2019-05-10 2024-02-21 ソニーグループ株式会社 演算装置および演算システム
JP7402623B2 (ja) * 2019-06-17 2023-12-21 キヤノン株式会社 フィルタ処理装置及びその制御方法
JP7299770B2 (ja) * 2019-07-01 2023-06-28 キヤノン株式会社 演算処理装置及び演算処理方法
CN110717588B (zh) * 2019-10-15 2022-05-03 阿波罗智能技术(北京)有限公司 用于卷积运算的装置和方法
US11475283B2 (en) * 2019-10-24 2022-10-18 Apple Inc. Multi dimensional convolution in neural network processor
US11593609B2 (en) 2020-02-18 2023-02-28 Stmicroelectronics S.R.L. Vector quantization decoding hardware unit for real-time dynamic decompression for parameters of neural networks
US11507831B2 (en) 2020-02-24 2022-11-22 Stmicroelectronics International N.V. Pooling unit for deep learning acceleration
US11531873B2 (en) 2020-06-23 2022-12-20 Stmicroelectronics S.R.L. Convolution acceleration with embedded vector decompression
JP2022022876A (ja) 2020-07-09 2022-02-07 キヤノン株式会社 畳み込みニューラルネットワーク処理装置
KR20220010362A (ko) * 2020-07-17 2022-01-25 삼성전자주식회사 뉴럴 네트워크 장치 및 그의 동작 방법
WO2023095666A1 (ja) * 2021-11-29 2023-06-01 ソニーセミコンダクタソリューションズ株式会社 信号処理装置および信号処理方法、並びに固体撮像素子

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4328426A (en) * 1980-08-04 1982-05-04 Xerox Corporation Filter for image pixels
US4694407A (en) * 1985-06-11 1987-09-15 Rca Corporation Fractal generation, as for video graphic displays
JP2857292B2 (ja) * 1991-12-18 1999-02-17 ゼロックス コーポレイション 2次元デジタルフィルタを実現するための装置
JP3524250B2 (ja) * 1995-11-27 2004-05-10 キヤノン株式会社 デジタル画像処理プロセッサ
JPH1021405A (ja) 1996-07-04 1998-01-23 Kiyoushiya:Kk 回路パターンの外観検査方法および装置
US6125212A (en) * 1998-04-29 2000-09-26 Hewlett-Packard Company Explicit DST-based filter operating in the DCT domain
US6185336B1 (en) * 1998-09-23 2001-02-06 Xerox Corporation Method and system for classifying a halftone pixel based on noise injected halftone frequency estimation
JP4891197B2 (ja) 2007-11-01 2012-03-07 キヤノン株式会社 画像処理装置および画像処理方法
JP5376920B2 (ja) * 2008-12-04 2013-12-25 キヤノン株式会社 コンボリューション演算回路、階層的コンボリューション演算回路及び物体認識装置
US10078620B2 (en) 2011-05-27 2018-09-18 New York University Runtime reconfigurable dataflow processor with multi-port memory access module
JP5906071B2 (ja) 2011-12-01 2016-04-20 キヤノン株式会社 情報処理方法、情報処理装置、および記憶媒体
JP6195342B2 (ja) 2013-03-27 2017-09-13 キヤノン株式会社 情報処理装置およびメモリアクセス制御方法
JP6442152B2 (ja) 2014-04-03 2018-12-19 キヤノン株式会社 画像処理装置、画像処理方法
JP6395481B2 (ja) 2014-07-11 2018-09-26 キヤノン株式会社 画像認識装置、方法及びプログラム

Also Published As

Publication number Publication date
JP2017079017A (ja) 2017-04-27
US20170116495A1 (en) 2017-04-27
US10210419B2 (en) 2019-02-19

Similar Documents

Publication Publication Date Title
JP6700712B2 (ja) 畳み込み演算装置
JP5376920B2 (ja) コンボリューション演算回路、階層的コンボリューション演算回路及び物体認識装置
US11068776B2 (en) Convolutional neural network based data processing apparatus, method for controlling the same, and storage medium storing program
EP3557485B1 (en) Method for accelerating operations and accelerator apparatus
US11467969B2 (en) Accelerator comprising input and output controllers for feeding back intermediate data between processing elements via cache module
JP6821002B2 (ja) 処理装置と処理方法
JP2022064892A (ja) 加速数学エンジン
US4635292A (en) Image processor
EP3093757B1 (en) Multi-dimensional sliding window operation for a vector processor
Müller et al. An improved cellular nonlinear network architecture for binary and grayscale image processing
JP6532334B2 (ja) 並列演算装置、画像処理装置及び並列演算方法
JP2018032190A (ja) 演算回路、その制御方法及びプログラム
JP2006154992A (ja) ニューロプロセッサ
JP2015185152A (ja) Simdプロセッサ
Müller et al. NEROvideo: A general-purpose CNN-UM video processing system
Schmidt et al. A smart camera processing pipeline for image applications utilizing marching pixels
Csordás et al. Application of bit-serial arithmetic units for FPGA implementation of convolutional neural networks
JP7321213B2 (ja) 情報処理装置、情報処理方法
Ganesh et al. Low power and single multiplier design for 2D convolutions
JP2806436B2 (ja) 演算回路
Hernandez et al. A combined VLSI architecture for nonlinear image processing filters
CN113778376A (zh) 改进的用于执行乘法/累加运算的设备
Chandra et al. Hardware Implementation of Pixel Comparison and Error Detection in Image
JP2020086680A (ja) 演算装置
Wong et al. A new scalable systolic array processor architecture for simultaneous discrete convolution of k different (nxn) filter coefficient planes with a single image plane

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20181016

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20181016

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190708

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190830

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20191029

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200501

R151 Written notification of patent or utility model registration

Ref document number: 6700712

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151