JP2018028908A - ゼロ係数スキップ畳み込みニューラルネットワークエンジン - Google Patents

ゼロ係数スキップ畳み込みニューラルネットワークエンジン Download PDF

Info

Publication number
JP2018028908A
JP2018028908A JP2017155273A JP2017155273A JP2018028908A JP 2018028908 A JP2018028908 A JP 2018028908A JP 2017155273 A JP2017155273 A JP 2017155273A JP 2017155273 A JP2017155273 A JP 2017155273A JP 2018028908 A JP2018028908 A JP 2018028908A
Authority
JP
Japan
Prior art keywords
tile
index
current
coefficients
sums
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2017155273A
Other languages
English (en)
Other versions
JP6941499B2 (ja
Inventor
マンキット ロー
Lo Mankit
マンキット ロー
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.)
Vivante Corp
Original Assignee
Vivante Corp
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 Vivante Corp filed Critical Vivante Corp
Publication of JP2018028908A publication Critical patent/JP2018028908A/ja
Application granted granted Critical
Publication of JP6941499B2 publication Critical patent/JP6941499B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • 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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/76Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
    • G06F7/764Masking
    • 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/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; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/082Learning methods modifying the architecture, e.g. adding, deleting or silencing nodes or connections
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/132Sampling, masking or truncation of coding units, e.g. adaptive resampling, frame skipping, frame interpolation or high-frequency transform coefficient masking
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/48Indexing scheme relating to groups G06F7/48 - G06F7/575
    • G06F2207/4802Special implementations
    • G06F2207/4818Threshold devices
    • G06F2207/4824Neural networks

Landscapes

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

Abstract

【課題】畳み込みニューラルネットワークなどの畳み込みエンジンの計算とメモリ帯域幅の両方を減少するシステム及び方法を提供する。
【解決手段】入力タイルがロードされ、蓄積された和は、カーネル内の係数の行及び列インデックスに従って、タイルをシフトすることによって、非ゼロ係数の入力タイルについて計算する。各係数は、個々にタイルに適用され、結果は、次の非ゼロ係数に移動する前に、蓄積バッファに書き込まれる。3D又は4D畳み込みは、1次元に沿って、異なるインデックスについて蓄積された和を格納する蓄積バッファの個別の領域についてこのように実装する。画像は、完全に処理され、各画像の結果は、次の画像に移動する前に、蓄積バッファに格納する。
【選択図】図2

Description

<関連出願>
この出願は、2016年8月11日に出願された、発明の名称ZERO COEFFICIENT SKIPPING CONVOLUTION NEURAL NETWORK ENGINEの米国仮出願第62/373,518号の利益を主張し、これは、その全体が、参照によりここに組み込まれる。
<技術分野>
この発明は、畳み込みニューラルネットワークを実装することにおいて使用するなどのために、行列畳み込みを実行するシステム及び方法に関する。
畳み込みニューラルネットワーク(CNN)を用いた多くの機械学習用途には、非常に多くの計算とメモリ帯域幅が必要となる。この必要条件を緩和する一つの方法は、係数をゼロ除去し、係数がゼロのとき計算をスキップする事である。これらの既存のソフトウェア及びハードウェア最適化技術は、行列の乗算に基づいている。一例は、Sparse Convolutional Neural Networks (Baoyuan Liu , Min Wang1 , Hassan Foroosh1 , Marshall Tappen , 及び Marianna Penksy)とDeep Neural Network Model Compression and Efficient Inference Engine (Song Han CVA group, Stanford University)に記載されるスパース行列積技術であり、両文献は、その全体が、ここに参照により組み込まれる。
本明細書に開示されるシステムと方法は、CNNを実装するための改善されたアプローチを提供する。
本発明の利点が容易に理解されるために、簡単に上記した本発明のより具体的な記述は、添付の図面に図示された特定の実施形態を参照してなされるだろう。これらの図面は、本発明の典型的な実施形態を図示するのみであり、従って、その範囲を限定するものとは考えられないという理解の下に、本発明は、添付の図面の使用を通して、さらに具体的に、さらに詳細に記述され、説明されるだろう。
本明細書で記述する方法に従って用いられ、生成されるデータ構造の概略ブロック図である。 本発明の実施形態に従って、入力データを用いて、カーネルの畳み込みを計算するコンポーネントの概略ブロック図である。 本発明の実施形態に従って、入力データを用いて、カーネルの畳み込みを計算する方法のプロセスフロー図である。 本発明の実施形態に従って、入力データを用いて、カーネルの畳み込みを計算する方法のプロセスフロー図である。 本明細書で開示するシステム及び方法が実装されうるコンピューティングデバイスの図である。
本明細書で図面に一般的に記述され、図示されるように、本発明のコンポーネントは、広範なさまざまな異なる構成に配置され、設計されうることは容易に理解されるだろう。従って、図面に表現されるように、本発明の実施形態の以下のより詳細な記述は、請求されるような本発明の範囲を限定することは意図されておらず、本発明に従って、現在考えられる実施形態のある例の単なる表現に過ぎない。現在記述される実施形態は、図面を参照することにより、最も良く理解されるだろう。図面においては、同様な部品は、全体を通して同様な参照番号が付けられる。
本発明による実施形態は、装置、方法、又は、コンピュータプログラム製品として、具現化されることが出来る。従って、本発明は、全体的にハードウェアの実施形態、全体的にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコードなどを含む)、又は、ソフトウェアとハードウェアの態様を組み合わせる実施形態の形態を取ることが出来、これらは、全て一般に、「モジュール」又は、「システム」として、本明細書で参照されることが出来る。更に、本発明は、媒体に具現化されるコンピュータ使用可能なプログラムコードを有する表現の任意の有体媒体に具現化されるコンピュータプログラム製品の形態を取ることが出来る。
1以上のコンピュータ使用可能又はコンピュータ読み取り可能な媒体の任意の組み合わせが利用されることが出来、これは、非一時的媒体を含む。例えば、コンピュータ読み取り可能な媒体は、ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリ(RAM)デバイス、リードオンリーメモリ(ROM)デバイス、消去可能プログラマブルリードオンリーメモリ(EPROM又はフラッシュメモリ)デバイス、ポータブルコンパクトディスクリードオンリーメモリ(CDROM)、光格納デバイス、及び、磁気格納デバイスの1以上を含むことが出来る。選択された実施形態においては、コンピュータ読み取り可能な媒体は、命令実行システム、装置、又は、デバイスによって、または、これらに関連して使用されるプログラムを含み、格納し、通信し、伝搬し、又は、輸送することが出来る、任意の非一時的媒体を含むことが出来る。
本発明の動作を実行するコンピュータプログラムコードは、Java, Smalltalk, C++などのオブジェクト指向プログラミング言語及び、“C”プログラミング言語又は同様なプログラミング言語などの従来のプロシージャプログラミング言語を含む、1以上のプログラミング言語の任意の組み合わせで書かれることが出来る。プログラムコードは、完全に、スタンドアロンソフトウェアパッケージとして、コンピュータシステム上で、スタンドアロンハードウェアユニット上で、部分的に、コンピュータからある距離離れたリモートコンピュータ上で、又は、完全に、リモートコンピュータ又はサーバ上で、実行されることが出来る。後者のシナリオにおいては、リモートコンピュータは、コンピュータに、ローカルエリアネットワーク(LAN)、又は、ワイドエリアネットワーク(WAN)を含む、任意のタイプのネットワークを介して、接続されることが出来、又は、接続は、外部コンピュータになされることが出来る(例えば、インターネットサービスプロバイダを用いて、インターネットを介して)。
本発明は、本発明の実施形態による、フローチャート図及び/あるいは、方法、装置(システム)、及びコンピュータプログラム製品のブロック図を参照して、以下に記述される。フローチャート図及び/あるいはブロック図の各ブロックと、フローチャート図及び/あるいはブロック図のブロックの組み合わせは、コンピュータプログラム命令又はコードによって実装されることが出来ることは、理解されるだろう。これらのコンピュータプログラム命令は、汎用コンピュータ、専用コンピュータ、又は、他のプログラマブルデータ処理装置のプロセッサに提供され、マシンを構成することが出来、それによってコンピュータ又は他のプログラマブルデータ処理装置のプロセッサによって実行される命令が、フローチャート及び/あるいはブロック図のブロック又は複数のブロックに指定される機能/動作を実装するための手段を生成するようにする。
これらのコンピュータプログラム命令は、また、コンピュータ又は他のプログラマブルデータ処理装置に、特定の方法で機能させることが出来る非一時的コンピュータ読み取り可能な媒体に格納されることが出来、それによってコンピュータ読み取り可能な媒体に格納された命令が、フローチャート及び/あるいはブロック図のブロック又は複数のブロックに指定される機能/動作を実装する命令手段を含む製品を製造するようにする。
コンピュータプログラム命令は、また、コンピュータ又は他のプログラマブルデータ処理装置にロードされて、コンピュータ又は他のプログラマブル装置上で実行されるべき一連の動作ステップに、コンピュータ実装プロセスを生成させることが出来、それによってコンピュータ又は他のプログラマブル装置上で実行される命令が、フローチャート及び/あるいはブロック図のブロック又は複数のブロックに指定される機能/動作を実装するためのプロセスを提供するようにする。
行列積ベースのアーキテクチャは、入力行列を形成するために、オリジナルの2D画像データの二重化を必要とする基本的な問題を有している。そして、結果として、既に非常に大きいメモリ帯域幅の必要性を増加する。CNN用の畳み込みベースのアーキテクチャ、例えば、Vinayak Gokhale, Jonghoon Jin, Aysegul Dundar, Berin Martini 及び Eugenio CulurcielloによるA 240 G-ops/s Mobile Coprocessor for Deep Neural Networksに記述されるアプローチのようなものが存在する。この文献は、参照により、ここに組み込まれる。
われわれの解法は、ゼロ係数スキップと新規の畳み込みエンジンを組み合わせる。これは、劇的に、計算とメモリ帯域幅の両方を減少する。従来の畳み込みは、一回に一つの結果を生成するために、入力2D画像に渡って、カーネル全体を移動することによってなされる。われわれのエンジンは、一つのカーネル係数のみを、毎回、入力2D画像の大きな部分(タイル)に適用する。一回に一つのみのカーネル係数を用いるので、ゼロ係数による乗算をスキップして、ずっと高い性能を達成する。カーネルが、先立って圧縮される場合、これは、更に、一回に一つの係数のみを復元する、ローコストカーネル復元器の使用を可能とする。
他の側面においては、畳み込みは、加算ではなく、蓄積を用いて実行される。これは、また、蓄積プロセスの一部に自然にフィットするので、CNN入力の第3の次元への作業を可能とする。これは、更に、また、インタリーブして実行されるべき、異なるカーネルからの畳み込みを可能とする。これは、行列積と同様に、入力画像データの再使用を増加する。
適切なサイズの蓄積バッファを用いることで、マルチカーネル蓄積畳み込みニューラルネットワークエンジンは、複数のカーネルに渡って、まとめて、畳み込みを実行することが出来る。異なるカーネルからのこれらの畳み込みは、同一の2D入力画像データを効果的に共有し、入力画像データ帯域幅を小さくする。更に、この同一の蓄積バッファは、システムの全ての乗算器に渡って、一回に1つの係数ずつなされる畳み込みを可能とし、これは、多くのバッファリングなしに、一回に一つの係数のストリーミング入力を可能とする。
図1を参照すると、画像のピクセル値などの値のアレイについて、カーネルの畳み込みを計算するための、本明細書で開示する装置と方法は、CNNアルゴリズムの脈絡で用いられることが出来る。特に、三次元画像が、アルゴリズムに入力されることが出来る。例えば、入力は、画像100のアレイであることが出来る。従って、各画像の各ピクセルは、しばしば、「ボクセル」と呼ばれる、三次元(3D空間)の体積を表すことが出来る。図示された実施形態においては、kzを2より大きい整数、好ましくは、8より大きい整数として、kz枚の画像が存在する。各入力画像は、従って、kz次元に沿ったインデックスを用いて参照される、つまり、I(kz)とすることが出来る。
入力画像100は、カーネル104のアレイ102によって処理されることが出来る。一つの用途においては、アレイ102の各カーネル104は、畳み込み出力のアレイを得るために、一つの入力画像に適用される。図示された実施形態においては、それぞれが、kz個のカーネルを含む、Z個のアレイ102が存在する。各カーネルは、ky及びkz次元を規定する。従って、各係数Cは、4つのインデックスについて規定される:C(kz,Z,kx,ky)。カーネルKは、kz及びZ次元において同一のインデックスを有する係数をさすためにここでは用いられる、つまり、K(kz1, Z1) = C(kz1, Z1, kx, ky)。したがって、各入力画像I(kz)は、対応するカーネルK(kz,Z)と畳み込まれ、畳み込みV(kz,Z)を得る。同一のZインデックスを有する畳み込みV(kz,Z)は、それから、加算され、出力画像106、つまり、O(Z)を得る。
出力画像106は、X値×Y値の次元を有し、ここで、XとYは、入力画像100の元の次元と同一でもよいし、異なっても良い。各カーネル104は、当分野で知られているCNNアルゴリズムに対する任意のアプローチによって決定される値の2次元アレイであることが出来る。
出力画像106は、それから、当分野で知られる任意の方法によって、好ましい出力を達成するために、他のカーネル104の追加的なアレイ102の適用を含むことが出来る、1以上の機能によって、処理されることが出来る。
画像100のカーネル104との畳み込みは、図2及び3について、以下に記述されるコンポーネント及び方法を用いて、有利に実行される。特に、kz=kzの与えられた値については、カーネルK(kz1, Z)は、Zの全ての値に対して、同一の入力画像I(kz1)に適用されなければならない。従って、各画像I(kz1)は、(オーバラップしうる複数のタイルにおいて)一回だけロードされ、全てのカーネルK(kz1, Z)は、次の画像I(kz ≠ kz1)が処理される前に、それに適用される。
図2を参照すると、グラフィック処理ユニット(GPU)、算術論理演算器(ALU)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、又は、プログラマブル汎用プロセッサは、図示されたコンポーネント、又は、図示されたコンポーネント200の機能を実装することが出来る。
カーネルのグループは、係数復元器202に入力されることが出来る。カーネルは、復元ステップの出力がエントリの集合であるように、圧縮されることが出来、エントリのそれぞれは、係数C(kz, Z, kx, ky)とその場所(例えば、kx、ky、kz及びZインデックス)を含む。このように、カーネルがスパースである場合、カーネルを格納するために必要なデータ量が減少される。
係数復元器202は、シーケンス内で、カーネルK(kz1,0)から始まるエントリのストリームを出力することができ、つまり、各カーネルについて、エントリは、順番にストリーミングされ、その後、最後のカーネルK(kz1,Z-1)のエントリがストリーミングされるまで、次のカーネルK(kz1,11)、K(kz1,2)のエントリが順番にストリーミングされる。
エントリのストリームは、ゼロスキップシーケンサ204によって順番に処理される。ゼロスキップシーケンサ204は、画像バッファ206に対して動作する。画像バッファ206は、画像I(kz1)の一部を格納する。例えば、画像I(kz1)は、タイルに分割されることが出来る。各タイルは、カーネルの行と列のインデックス(例えば、ky及びkxインデックス)に対応する行と列を含むことが出来る。
係数C(kx,ky) 、行インデックスky及び列インデックスkxを含む与えられたエントリについては、画像バッファ206に格納されたタイルは、kyに等しい行数だけ、垂直にシフトされる(異なる位置にシフトされた行)ことが出来る。タイルは、また、kxに等しい量だけ、水平にシフトされる(異なる位置にシフトされた列)ことが出来る。
垂直シフトはコンポーネント200の後続のステージへの入力として、タイルが読み出されるだろう画像バッファの開始アドレス、例えば、行アドレスを選択し、そのことによって垂直シフトを達成するようにすることにより、実装されることが出来る。水平シフトは、水平シフト量に等しい列数だけ、画像バッファの各行の値をシフトするシフタ208によって達成されることが出来る。このシフトは、当分野で知られる任意のシフタの実装を用いて実行されることが出来る。
幾つかの実施形態においては、シフタ208は、1、2、又は4エレメントセグメントシフタ(element segmented shifter)である。このセグメントシフタは、画像バッファ206内のデータを、1行×64列、2行×32列、又は、4行×16列として、扱うことが出来る。セグメントシフタは、この行及び列の定義により、水平シフト及び垂直シフトを実行する。例えば、データが、1行に配置されている場合、垂直シフトは、画像バッファ読み出しアドレス、つまり、画像バッファ206からデータが読み出されるアドレス、を制御するだけで、行われる。データが2又は4行である場合、画像バッファ読み出しアドレスを制御するのみでは十分ではない。むしろ、読み出されたデータは、また、正しい行を、画像バッファ206内の正しい位置に配置することによって行シフトされる必要があるだろう。
タイルに基づいて計算される畳み込みの行と列の数は、タイルのサイズより少ないことに注意するべきである。A×Bカーネルが適用されるM(行)×N(列)タイルは、(M−A+1)×(N−B+1)個の畳み込み値を有する出力タイルを得るだろう。従って、垂直シフト及び水平シフトは、画像バッファ206内のタイルに、(M−A+1)×(N−B+1)ウィンドウを配置する効果を有し、そのウィンドウ内の値は、乗算器210及び加算器212によって更に処理されるために、出力される。乗算器210及び加算器212は、(M−A−1)×(N−B−1)個の値を並列に処理することが出来る。
有効畳み込み値出力の数が、タイルのサイズより小さい限り、タイルは、1出力タイルが、一回に生成されるように処理されることが出来る。具体的には、M2 行及び N2 列を有する各出力タイルについては、ロードされた入力タイルは、M = M2 + A - 1 行及び N = N2+ B -1 列を含むだろう。各タイルは、出力画像106において、特定の出力タイルを生成するようにロードされる。
各出力タイルは、それが含むより多くの入力行と列を必要とするので、入力タイルは、相互に重なる、つまり、同一の行及び/あるいは列の幾つかを含むだろう。例えば、初期タイルは、入力画像100の行0〜M−1及び列0〜N−1を有することが出来る。第2のタイルは、入力画像の行0〜M−1及び列N−B−1〜2*N−B−1を有することが出来る。同様に、行0〜M−1の全てのタイルが処理された後、タイルの次の行は、行M−A−1〜2*M−A−1及び列2*N−B−1を含むことが出来る。
一般的に言うと、水平に移動することによって、各タイルは、前のタイルの最後B−1個の列を含むだろう。垂直に移動することによって、各タイルは、前のタイルの最後A−1個の行を含むだろう。
係数のインデックスによりシフトされた係数とタイルは、それから、乗算器210に入力される。乗算器210は、出力タイルの各行の更新が並列に行われることが出来るように、少なくとも、出力タイルの一行と同じ数の乗算器を実装することが出来る。
乗算器210の出力は、それから、蓄積バッファ214に格納される要素のアレイをその入力としてとる加算器212に入力される。加算の結果は、それから、蓄積バッファ214に戻されて格納される。図示された実施形態においては、シフトされたタイルの56個の値は、係数により乗算され、蓄積バッファ214に格納された対応する56個の値と加算され、蓄積バッファ214に書き戻される。
iとjが、行と列の位置として、与えられたタイル値T(i,j)について特に、蓄積バッファ214内の値A(i,j)は、A(i,j) = A(i,j) + T(i,j)に等しく設定されることが出来る。A(i,j)は、iを蓄積バッファ214内のオフセットとして、A(i+i,j)と置き換えることが出来ることに注意すべきである。幾つかの実施形態においては、タイルのサイズは、蓄積バッファ214のサイズと、等しく、又は、略等しく(例えば、その90%)、設定されることが出来る。あるいは、蓄積バッファ214は、タイルのサイズより、何倍も大きくすることが出来る。
ゼロスキップシーケンサ204によって制御される水平及び垂直シフトは、乗算ステップの出力が、蓄積バッファ214内の適切な位置に整列されるだろうことを保証する。このように、カーネルの全ての係数が処理された後、蓄積バッファ214の値は、入力タイルとのカーネルの畳み込みに等しくなるだろう。
図3Aを参照すると、図示されたコンポーネント200又は汎用プロセッサは、図示された方法300aを実装することが出来る。特に、図示されたコンポーネント200を用いた、相互動作と図3Aのステップのシーケンスの制御は、コントローラによって実行されることが出来る。方法300aは、処理されている画像(「現在の画像」)の2D入力タイル(「現在のタイル」)を画像バッファ206内にロードすること302と、アレイ102内の2Dカーネル104などの次の2Dカーネル104を選択することを含むことが出来る。第1の繰り返しについては、ロード302されるタイルは、現在の画像における第1のタイルであることが出来、2Dカーネル(「現在のカーネル」)は、現在の画像に対応する、例えば、現在の画像と同一のkzインデックスを有する、2Dカーネルの列に於ける第1の2Dカーネル(図1参照)とすることが出来る。
現在のカーネルは、それから、復元され306、これは、それぞれが係数、列インデックス、及び行インデックスを含む、エントリのストリームとなる。あるいは、単一のインデックス値は、カーネル内の特定の列と行にマッピングする出力であることが出来る。図示された方法300aは、カーネルのエントリの多くがゼロの場合に特に有効であることに注意すべきである。従って、非ゼロの値のエントリのみが、圧縮カーネルに含まれ、従って、以下に記述する乗算と加算ステップは、これらの非ゼロ値について省略される。
カーネルのエントリは、順番に処理されることが出来る。例えば、方法300aは、ストリーム内のエントリ(「現在のエントリ」)を選択すること308を含むことが出来る。現在のタイルの値(例えば、(M−A+1)×(N−B+1)ウィンドウ)の一部は、それから、現在のエントリの列インデックスに従って、水平方向にシフトされ310、現在のエントリの行インデックスに従って、垂直にシフトされる312ことが出来る。
これは、開始アドレスから始まる画像バッファ206から現在のタイルの行の一部を読み出し、読み出した後、各行を水平方向にシフトすることを含むことが出来る。例えば、行における全てのN個の値は、列インデックスの値に従って、0からB−1の位置へ左にシフトされることが出来る。左への値は、シフトして外され、左から始まる各行の残りのN−B+1値は、以下に議論される「シフトされた値」として、後に処理されるだろう。シフトされた値は、それから、乗算器210へ入力され、これは、各値を、現在のエントリからの係数により乗算する314。上記したように、乗算ステップ314は、各値が個別の乗算器210に入力されるように、並列に実行されることが出来る。
乗算ステップ314の出力は、それから、蓄積バッファ214の現在のコンテンツと加算される316。特に、シフトされたタイルの各位置は、蓄積バッファ214の対応する位置の値に加算され、その位置に書き込まれることが出来る。例えば、タイル内のi及びjを行及び列の位置として、タイル値T(i,j)は、A(I,j)を、蓄積バッファ314内のi及びjの位置における値として、A(i,j) = A(i,j) + T(i,j)として、ステップ316において、加算されることが出来る。あるいは、A(i,j)は、iを、蓄積バッファ内のオフセットとして、A(i + i0, j)と置き換えられることが出来る。
カーネル104の各アレイ102(例えば、行)は、一つの出力画像106を決定するために用いられることに注意するべきである。蓄積バッファは、従って、列に於ける各カーネルの値の個別の集合を含むだろう。従って、現在のカーネルとしての与えられたカーネルK(kz、Z)について、オフセットi0 = Z*(M - A + 1)は、加算ステップ316で用いられる値を取得し、加算ステップ316の結果を書き込むことになる、蓄積バッファ214のアドレスを決定するために用いられることが出来る。
現在のカーネルに於けるエントリが、残っていると発見される318場合、それから、処理は、ステップ308において、現在のエントリとしての、現在のカーネル内の次のエントリについて、継続する。現在のカーネルにエントリが残っていないと発見された場合は、それから、方法300は、現在の画像に対応する列に、カーネルが残っているか否かを評価する320ことを含むことが出来る。処理されるべきカーネルが列の中に残っている場合、処理は、ステップ304において、現在のカーネルとしての、列内の次のカーネルについて継続する。
幾つかの実施形態においては、列のカーネルは、復元され、ストリームに出力され、それによってステップ318及び320の個別の評価は実行されず、むしろ、特定の列のストリームの末端が代わりに検出されるようにすることに注意すべきである。
列のカーネルの全てが、処理されるべきと決定される320場合、それから、方法300は、処理されていない現在の画像の残りのタイルがあるか否かを評価する322ことを含むことが出来る。そうならば、それから、処理は、ステップ302において、ステップ302においてロードされる現在のタイルとしての、画像の次のタイルについて継続する。そうでないなら、それから、方法は、現在の画像について終了する。
図3Bを参照すると、幾つかの実施形態においては、方法300bは、3D畳み込みを実装するために、コンポーネント200によって実装されることが出来る。この場合には、入力画像100の集合は、カーネル104のアレイ102を用いて、単一の出力画像106を得るために処理され、複数のアレイ102は、出力画像106の集合を得るために用いられる。
この場合、現在のタイルについて、処理されるべき2Dカーネルがもうないと判定される320場合、方法300bは、処理されるべき残りの2D入力画像100があるか否かを判定する326ことを含む。そうであるならば、次の2D入力画像100は、現在の画像として選択され328、現在の画像に対応する2Dカーネルの列は、また、処理のために選択される。処理は、それから、ステップ302において、現在の画像について継続する。
現在のタイル位置について、処理されるべき、残りの2D入力画像が発見されない326場合、方法300bは、処理されるべく残っている残りのタイル位置があるか否かを評価する330ことを含む。そうであるならば、それから、ステップ332において、初期画像が、現在の画像として選択され、現在の画像に対応するカーネルの列が、処理のために選択され、次の3Dタイル位置が、現在のタイル位置として選択される。それから、処理は、ステップ302において、タイルが、現在のタイル位置からロードされ302、継続する。
方法300bの最初の繰り返しについて、現在のタイル位置は、最初のタイル位置、例えば、m=0及びn=0の位置から開始するM×Nタイルである。各繰り返しにおいて、タイル位置は、Thをタイルの行の数とし、Twをタイルの列の数として、m=0〜Th−1、及び、n=0〜Twの、mとnの全ての置換へ、水平に、又は、水平及び垂直に移動する。上記したように、タイルは、次のタイル位置が、前のタイルのB−1個の列又は、タイルの前の行のA−1個の行を含むように、重なることが出来る。
処理されるべき3Dタイルが残っていないと発見された330場合、蓄積バッファに格納されたタイルは、出力され334、現在のタイル位置に対応する出力画像106の位置において、例えば、固定格納デバイス、又は、他のメモリデバイス内の出力画像106に格納される。各タイル位置が完全に処理された(つまり、カーネルの全ての列が適用された)後、蓄積バッファ214に格納される出力タイルは、各出力画像106についての一つのタイルの最終値である。ステップ334は、更に、蓄積バッファ214をゼロに初期化することを含むことが出来る。
上記方法は、CNNアルゴリズムの適用の一部であることが出来ることに注意するべきである。従って、CNNアルゴリズムの他の処理は、方法200の実行の前後とすることが出来る。上記方法は、また、畳み込みが実行される任意の他の画像処理技術に用いられることも出来る。方法200は、また、特に、カーネルが大きいときなどの、行列畳み込みが必要とされるときはいつも用いられることが出来る。
図4は、例示的コンピューティングデバイス400を図示するブロック図である。コンピューティングデバイス400は、本明細書で議論したもののような、様々なプロシージャを実行するために用いられることが出来る。コンピューティングデバイス400は、サーバ、クライアント、又は、任意の他のコンピューティングエンティティとして機能することが出来る。コンピューティングデバイスは、本明細書で開示された方法を実行する回路を組み込むことが出来、三角関数を計算する為に、本明細書で開示した方法を引き起こすアプリケーションプログラムなどの1以上のアプリケーションプログラムを実行することが出来る。コンピューティングデバイス400は、デスクトップコンピュータ、ノートブックコンピュータ、サーバコンピュータ、ハンドヘルドコンピュータ、タブレットコンピュータなどの任意の広範な様々なコンピューティングデバイスとすることが出来る。
コンピューティングデバイス400は、1以上のプロセッサ402、1以上のメモリデバイス404、1以上のインタフェース406、1以上のマスストレージデバイス408、1以上の入出力(I/O)デバイス410、及び、ディスプレイデバイス430を含み、これらすべては、バス412に結合される。プロセッサ402は、メモリデバイス404及び/あるいはマスストレージデバイス408に格納される命令を実行する1以上のプロセッサ又はコントローラを含む。プロセッサ402は、また、キャッシュメモリなどの、様々なタイプのコンピュータ読み取り可能な媒体を含むことが出来る。
メモリデバイス404は、揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)414)及び/あるいは不揮発性メモリ(例えば、リードオンリーメモリ(ROM)416)などの、様々なコンピュータ読み取り可能な媒体を含む。メモリデバイス404は、また、フラッシュメモリなどの、再書込み可能なROMを含むことが出来る。
マスストレージデバイス408は、磁気テープ、磁気ディスク、光ディスク、固体メモリ(例えば、フラッシュメモリ)などの、様々なコンピュータ読み取り可能な媒体を含む。図4に示されるように、特定のマスストレージデバイスは、ハードディスクドライブ424である。様々なドライブは、また、様々なコンピュータ読み取り可能な媒体からの読み出し、及び/あるいは、これらへの書き込みを可能とするマスストレージデバイス408に含まれることが出来る。マスストレージデバイス408は、取り外し可能な媒体426及び/あるいは取り外し不可能な媒体を含む。
I/Oデバイス410は、コンピューティングデバイス400へ、データ及び/あるいは他の情報を入力したり、これからこれらを検索・取得したりすることを可能とする様々なデバイスを含む。例示的I/Oデバイス410は、カーソル制御デバイス、キーボード、キーパッド、マイク、モニタ又は他のディスプレイデバイス、スピーカ、プリンタ、ネットワークインタフェースカード、モデム、レンズ、CCD又は他の画像捕捉デバイスなどを含む。
ディスプレイデバイス430は、コンピューティングデバイス400の1以上のユーザに情報を表示することが出来る任意のタイプのデバイスを含む。ディスプレイデバイス430の例は、モニタ、ディスプレイ端末、ビデオ投影デバイスなどを含む。
グラフィック処理ユニット(GPU)432は、プロセッサ402及び/あるいはディスプレイデバイス430に結合されることが出来る。GPUは、コンピュータ生成画像をレンダリングし、他のグラフィカル処理を実行するように動作することが可能である。GPUは、プロセッサ402のような、汎用プロセッサの幾つか又は全ての機能を含むことが出来る。GPUは、また、グラフィック処理に特有な更なる機能を含むことも出来る。GPUは、座標変換、影付け、テクスチャリング、ラスタライゼーションに関連するハードコーディングされた、及び/あるいはハードワイヤードなグラフィック機能と、コンピュータ生成画像をレンダリングするのに有効な他の機能を含むことが出来る。
インタフェース406は、コンピューティングデバイス400が、他のシステム、デバイス、又は、コンピューティング環境と相互作用することを可能とする様々なインタフェースを含む。例示的インタフェース406は、ローカルエリアネットワーク(LAN),ワイドエリアネットワーク(WAN)、無線ネットワーク、及びインターネットへのインタフェースなど、任意の数の異なるネットワークインタフェース420を含む。他のインタフェースは、ユーザインタフェース418と周辺デバイスインタフェース422を含む。インタフェース406は、また、1以上のユーザインタフェース素子418を含むことも出来る。インタフェース406は、また、プリンタ、ポインティングデバイス(マウス、トラックパッドなど)、キーボードなどへのインタフェースなどの1以上の周辺インタフェースを含むことが出来る。
バス412は、プロセッサ402、メモリデバイス404、インタフェース406、マスストレージデバイス408、及び、I/Oデバイス410が、相互に、及びバス412に結合された他のデバイス又はコンポーネントとも、通信出来るようにする。バス412は、システムバス、PCIバス、IEEE1394バス、USBバスなどの1以上の数タイプのバス構造を表す。
図示のために、プログラム及び他の実行可能なプログラムコンポーネントは、本明細書では、個別のブロックとして示されたが、そのようなプログラム及びコンポーネントは、コンピューティングデバイス400の異なるストレージコンポーネントに様々なときに常駐することが出来、プロセッサ402によって実行されることが理解される。あるいは、本明細書で記述したシステム及びプロシージャは、ハードウェア、又は、ハードウェア、ソフトウェア、及び/あるいはファームウェアの組み合わせで実装されることが出来る。例えば、1以上の特定用途向け集積回路(ASIC)は、本明細書で記述した1以上のシステム及びプロシージャを実行するためにプログラムされることが出来る。
本発明は、その精神又は本質的特性から逸脱することなく、他の特定の形態で具現化されることが出来る。記述された実施形態は、全ての意味で、図示のためのみであり、限定するものではない、と考えられるべきである。本発明の範囲は、従って、前述の記述ではなくて、むしろ、添付の請求項によって示される。請求項の意味及び均等の範囲内に入る全ての変更は、それらの範囲に含まれるべきである。

Claims (20)

  1. 畳み込みを実行する方法であって、
    Z次元、kz次元、kx次元、及びky次元を定義する係数C(kz, Z, kx, ky)のアレイを用意することと、
    それぞれが、前記kz次元のインデックスに対応する複数の入力画像を用意することと、
    (a)前記電子デバイスによって、現在のタイル位置として、複数のタイル位置の次のタイル位置を選択することと、
    (b)電子デバイスによって、前記現在の画像としての、前記複数の入力画像の次の入力画像I(kz1)と、現在のkzインデックスとしての前記現在の画像に対応するインデックスkz1とを選択することと、
    (c)前記電子デバイスによって、前記現在のタイルとして、前記現在のタイル位置の前記現在の画像I(kz1)のタイルをバッファにロードすることと、
    (d)前記電子デバイスによって、kz1に等しい、前記kz次元のインデックスを有する係数の前記アレイの係数C(kz1, Z, kx, ky)の少なくとも一部の各係数について、個別に、順番に、
    前記ky次元の各係数のkyインデックスに従って、前記現在のタイルのkyシフト量を設定することと、
    前記kx次元の各係数のkxインデックスに従って、前記現在のタイルのkxシフト量を設定することと、
    シフトされたタイルを得るために、前記現在のタイルへ、前記ky及びkxシフト量を適用することと、
    積の集合を得るために、前記各係数により、前記シフトされたタイルを乗算することと、
    更新された和の集合を得るために、蓄積バッファに格納された蓄積された和の集合に、積の前記集合を加算することと、
    蓄積された和の前記集合を、更新された和の前記集合で上書きすることと、
    を実行することと、
    (e)(b)から(d)に従って、前記複数の画像の全ての入力画像が処理されるまで、(b)から(d)を実行することと、
    (f)出力画像として、前記蓄積された和の現在の値を出力することと、
    (g)(a)から(f)に従って、前記複数のタイル位置の全てのタイル位置が処理されるまで、(a)から(f)を実行することと、を含み、
    前記kyシフト量とkxシフト量は、(f)の完了時に、前記蓄積された和が、前記現在のタイルの前記複数の画像との三次元畳み込みであるように、選択される、方法。
  2. (d)を実行することは、前記バッファの前記現在のタイルを上書き又は再ロードすることなしに実行される、請求項1に記載の方法。
  3. 前記現在のkzインデックスを有する係数の前記アレイの前記係数の前記少なくとも前記一部は、前記現在のkzインデックスを有する係数の前記アレイの前記係数の非ゼロ係数のみを含む、請求項1に記載の方法。
  4. (d)は、更に、前記現在のkzインデックスと、前記Z次元の固有のインデックスを有する係数の前記アレイの係数をそれぞれが含む、複数のカーネルを復元することを含む、請求項1に記載の方法。
  5. 前記複数のカーネルの各カーネルを復元することは、エントリの集合を得ることを含み、各エントリは、前記各カーネルの一係数、前記一係数の前記kxインデックスと前記kyインデックスを含む、請求項4に記載の方法。
  6. エントリの前記集合は、ゼロに等しい係数の前記アレイの係数についてのエントリを含まない、請求項5に記載の方法。
  7. シフトされたタイルを得るために、前記現在のタイルに前記ky及びkxシフト量を適用することは、
    前記kyシフト量に従って、前記バッファ内の開始アドレスを選択することと、
    前記開始アドレスで開始する、前記バッファからの画像データを読み取ることと、
    前記シフトされたデータを得るために、前記kxシフト量に従って、前記画像データをシフトすることと、を含む、請求項1に記載の方法。
  8. 積の前記集合を得るために、前記各係数により、前記シフトされたタイルを乗算することは、乗算器のアレイを用いて、同時に、前記シフトされた一部の各行を、前記各係数により乗算することを含む、請求項1に記載の方法。
  9. 係数の前記アレイは、畳み込みニューラルネットワーク(CNN)を規定する、請求項1に記載の方法。
  10. 前記蓄積された和は、前記Z次元に沿った異なるZインデックスにそれぞれ対応する蓄積された和の複数の集合を含み、
    更新された和の前記集合を得るために、積の前記集合を、前記蓄積バッファに格納された蓄積された和の前記集合に加算し、更新された和の前記集合で、蓄積された和の前記集合を上書きすることは、
    更新された和の集合を得るために、積の前記集合を、前記各係数のZインデックスに対応する前記複数の蓄積された和の蓄積された和の集合に加算することと、
    前記各係数の前記Zインデックスに対応する前記複数の蓄積された和の蓄積された和の前記集合を、更新された和の前記集合で上書きすることと、
    を含む、請求項1に記載の方法。
  11. 畳み込みを実行する装置であって、前記装置は、
    Z次元、kz次元、kx次元、及びky次元を定義する係数C(kz, Z, kx, ky)のアレイを受信し、
    前記kz次元のインデックスにそれぞれ対応する複数の入力画像を受信し、
    (a)前記現在のタイル位置として、複数のタイル位置の次のタイル位置を選択し、
    (b)前記現在の画像としての、前記複数の入力画像の次の入力画像I(kz1)と、現在のkzインデックスとしての、現在の画像に対応するインデックスkz1とを選択し、
    (c)現在のタイルとして、バッファに、前記現在のタイル位置の前記現在の画像I(kz1)のタイルをロードし、
    (d)kz1に等しい前記kz次元のインデックスを有する係数の前記アレイの係数C(kz1, Z, kx, ky)の少なくとも一部の各係数について、個別に、順番に、
    前記ky次元の前記各係数のkyインデックスに従って、前記現在のタイルのkyシフト量を設定することと、
    前記kx次元の前記各係数のkxインデックスに従って、前記現在のタイルのkxシフト量を設定することと、
    シフトされたタイルを得るために、前記現在のタイルに、前記ky及びkxシフト量を適用することと、
    積の集合を得るために、前記各係数により、前記シフトされたタイルを乗算することと、
    更新された和の集合を得るために、積の前記集合を、蓄積されたバッファに格納された蓄積された和の集合に加算することと、
    蓄積された和の前記集合を、更新された和の前記集合で上書きすることと、
    を実行し、
    (e)(b)から(d)に従って、前記複数の画像の全ての入力画像が処理されるまで、(b)から(d)を実行し、
    (f)出力画像として、前記蓄積された和の現在の値を出力し、
    (a)から(f)に従って、前記複数のタイル位置の全てのタイル位置が処理されるまで、(a)から(f)を実行する、ようにプログラムされる電子デバイスを備え、
    前記kyシフト量とkxシフト量は、前記蓄積された和が、(f)の完了時に、前記現在のタイルの、前記複数の画像との三次元畳み込みであるように選択される、装置。
  12. 前記電子デバイスは、前記バッファに前記現在のタイルを上書き又は再ロードせずに、(d)を実行するようにプログラムされる、請求項11に記載の装置。
  13. 前記現在のkzインデックスを有する係数の前記アレイの前記係数の前記少なくとも前記一部は、前記現在のkzインデックスを有する係数の前記アレイの前記係数の非ゼロ係数のみを含む、請求項11に記載の装置。
  14. 前記電子デバイスは、更に、前記現在のkzインデックスと、前記Z次元の固有のインデックスを有する係数の前記アレイの係数をそれぞれが含む、複数のカーネルを復元することによって、(d)を実行するようにプログラムされる、請求項11に記載の装置。
  15. 前記電子デバイスは、更に、エントリの集合を得ることにより、前記複数のカーネルの各カーネルを復元するようにプログラムされ、各エントリは、前記各カーネルの一係数、前記一係数の前記kxインデックス及び前記kyインデックスを含む、請求項14に記載の装置。
  16. エントリの前記集合は、ゼロに等しい係数の前記アレイの係数についてのエントリを含まない、請求項15に記載の装置。
  17. 前記電子デバイスは、更に、
    前記kyシフト量に従って、前記バッファの開始アドレスを選択し、
    前記開始アドレスにおいて開始する、前記バッファからの画像データを読み取り、
    前記シフトされたデータを得るために、前記kxシフト量に従って、前記画像データをシフトする、
    ことによって、シフトされたタイルを得るために、前記ky及びkxシフト量を前記現在のタイルに適用するようにプログラムされる、請求項11に記載の装置。
  18. 前記電子デバイスは、更に、乗算器のアレイを用いて、前記シフトされた一部の各行を、前記各係数により、同時に乗算することによって、積の前記集合を得るために、前記各係数によって、前記シフトされたタイルを乗算するようにプログラムされる、請求項11に記載の装置。
  19. 係数の前記アレイは、畳み込みニューラルネットワーク(CNN)を規定する、請求項11に記載の装置。
  20. 前記蓄積された和は、前記Z次元に沿って、異なるZインデックスにそれぞれが対応する、蓄積された和の複数の集合を含み、
    前記電子デバイスは、更に、
    更新された和の集合をえるために、前記各係数のZインデックスに対応する前記複数の蓄積された和の蓄積された和の集合に、積の前記集合を加算し、
    前記各係数の前記Zインデックスに対応する前記複数の蓄積された和の蓄積された和の前記集合を、更新された和の前記集合で上書きする、
    ことにより、更新された和の前記集合を得るために、前記蓄積されたバッファに格納された蓄積された和の前記集合に、積の前記集合を加算し、蓄積された和の前記集合を、更新された和の前記集合で上書きする、ようにプログラムされる、請求項11に記載の装置。
JP2017155273A 2016-08-11 2017-08-10 ゼロ係数スキップ畳み込みニューラルネットワークエンジン Active JP6941499B2 (ja)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US201662373518P 2016-08-11 2016-08-11
US62/373,518 2016-08-11
US15/671,829 2017-08-08
US15/671,860 2017-08-08
US15/671,860 US10242311B2 (en) 2016-08-11 2017-08-08 Zero coefficient skipping convolution neural network engine
US15/671,829 US20180046898A1 (en) 2016-08-11 2017-08-08 Zero Coefficient Skipping Convolution Neural Network Engine

Publications (2)

Publication Number Publication Date
JP2018028908A true JP2018028908A (ja) 2018-02-22
JP6941499B2 JP6941499B2 (ja) 2021-09-29

Family

ID=61158928

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2017155273A Active JP6941499B2 (ja) 2016-08-11 2017-08-10 ゼロ係数スキップ畳み込みニューラルネットワークエンジン
JP2017155270A Active JP6998699B2 (ja) 2016-08-11 2017-08-10 ゼロ係数スキップ畳み込みニューラルネットワークエンジン

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2017155270A Active JP6998699B2 (ja) 2016-08-11 2017-08-10 ゼロ係数スキップ畳み込みニューラルネットワークエンジン

Country Status (3)

Country Link
US (2) US10242311B2 (ja)
JP (2) JP6941499B2 (ja)
CN (2) CN107729996B (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019215907A1 (ja) * 2018-05-11 2019-11-14 オリンパス株式会社 演算処理装置
JP2020194442A (ja) * 2019-05-29 2020-12-03 富士通株式会社 最適化装置及び最適化方法
JP2021034039A (ja) * 2019-08-13 2021-03-01 三星電子株式会社Samsung Electronics Co.,Ltd. ニューラルネットワーク方法及び装置

Families Citing this family (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11003985B2 (en) * 2016-11-07 2021-05-11 Electronics And Telecommunications Research Institute Convolutional neural network system and operation method thereof
WO2018119035A1 (en) * 2016-12-22 2018-06-28 Ip Reservoir, Llc Pipelines for hardware-accelerated machine learning
US11048997B2 (en) * 2016-12-27 2021-06-29 Texas Instruments Incorporated Reduced complexity convolution for convolutional neural networks
US10310768B1 (en) * 2017-01-11 2019-06-04 Ambarella, Inc. Convolution calculations in multiple dimensions
KR102415508B1 (ko) * 2017-03-28 2022-07-01 삼성전자주식회사 컨볼루션 신경망 처리 방법 및 장치
US11164071B2 (en) * 2017-04-18 2021-11-02 Samsung Electronics Co., Ltd. Method and apparatus for reducing computational complexity of convolutional neural networks
US10474458B2 (en) 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
TWI680409B (zh) * 2017-07-08 2019-12-21 英屬開曼群島商意騰科技股份有限公司 適用於人工神經網路之矩陣及向量相乘的方法
KR20190052893A (ko) * 2017-11-09 2019-05-17 삼성전자주식회사 뉴럴 네트워크 연산을 위한 전처리 장치 및 방법
CN111742331A (zh) * 2018-02-16 2020-10-02 多伦多大学管理委员会 神经网络加速器
JP6749358B2 (ja) * 2018-03-19 2020-09-02 株式会社東芝 演算処理装置
US11537838B2 (en) * 2018-05-04 2022-12-27 Apple Inc. Scalable neural network processing engine
US11783174B2 (en) * 2018-05-04 2023-10-10 Apple Inc. Splitting of input data for processing in neural network processor
US20190340490A1 (en) * 2018-05-04 2019-11-07 Apple Inc. Systems and methods for assigning tasks in a neural network processor
JP7240657B2 (ja) 2018-05-15 2023-03-16 Tokyo Artisan Intelligence株式会社 ニューラルネットワーク回路装置、ニューラルネットワーク、ニューラルネットワーク処理方法およびニューラルネットワークの実行プログラム
CN110659014B (zh) * 2018-06-29 2022-01-14 赛灵思公司 乘法器及神经网络计算平台
US10936914B2 (en) 2018-07-31 2021-03-02 International Business Machines Corporation Convolutional neural network with augmentation features
US10831702B2 (en) * 2018-09-20 2020-11-10 Ceva D.S.P. Ltd. Efficient utilization of systolic arrays in computational processing
US11586417B2 (en) 2018-09-28 2023-02-21 Qualcomm Incorporated Exploiting activation sparsity in deep neural networks
KR102637733B1 (ko) 2018-10-31 2024-02-19 삼성전자주식회사 뉴럴 네트워크 프로세서 및 그것의 컨볼루션 연산 방법
KR20200081044A (ko) 2018-12-27 2020-07-07 삼성전자주식회사 뉴럴 네트워크의 컨볼루션 연산을 처리하는 방법 및 장치
CN111401512B (zh) * 2019-01-03 2024-06-04 三星电子株式会社 以可变的扩张率在神经网络中进行卷积的方法和系统
US20220129725A1 (en) * 2019-02-06 2022-04-28 Vastai Holding Company Method and system for convolution model hardware accelerator
US11604958B2 (en) 2019-03-13 2023-03-14 Samsung Electronics Co., Ltd. Method and apparatus for processing computation of zero value in processing of layers in neural network
EP3938888A1 (en) * 2019-03-15 2022-01-19 INTEL Corporation Systolic disaggregation within a matrix accelerator architecture
WO2020190802A1 (en) 2019-03-15 2020-09-24 Intel Corporation Compression techniques
US11188744B2 (en) * 2019-03-15 2021-11-30 Microsoft Technology Licensing, Llc Spatially sparse convolutional neural networks for inking applications
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
KR20210024865A (ko) 2019-08-26 2021-03-08 삼성전자주식회사 데이터를 처리하는 방법 및 장치
KR20210031296A (ko) 2019-09-11 2021-03-19 삼성전자주식회사 전자 장치 및 그 제어 방법
KR20210045225A (ko) 2019-10-16 2021-04-26 삼성전자주식회사 뉴럴 네트워크에서 연산을 수행하는 방법 및 장치
US11475283B2 (en) 2019-10-24 2022-10-18 Apple Inc. Multi dimensional convolution in neural network processor
US20230019275A1 (en) * 2019-11-19 2023-01-19 Nec Corporation Information processing apparatus, information processing method, non-transitory computer readable medium
KR20210071472A (ko) * 2019-12-06 2021-06-16 삼성전자주식회사 데이터를 처리하는 방법 및 장치
US11562235B2 (en) 2020-02-21 2023-01-24 International Business Machines Corporation Activation function computation for neural networks
US20210318887A1 (en) * 2020-04-09 2021-10-14 Vivante Corporation Multiplier with Zero Skipping
US11586442B2 (en) * 2020-08-06 2023-02-21 Nxp Usa, Inc. System and method for convolving image with sparse kernels
US10970619B1 (en) * 2020-08-21 2021-04-06 Moffett Technologies Co., Limited Method and system for hierarchical weight-sparse convolution processing

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010134697A (ja) * 2008-12-04 2010-06-17 Canon Inc コンボリューション演算回路、階層的コンボリューション演算回路及び物体認識装置
JP2019522291A (ja) * 2016-07-01 2019-08-08 グーグル エルエルシー プログラマブル二次元画像プロセッサ上の畳み込みニューラルネットワーク

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5151953A (en) * 1990-12-10 1992-09-29 Harris Corporation Single chip 2-D convolver
GB0922126D0 (en) * 2009-12-17 2010-02-03 Advanced Risc Mach Ltd Graphics processing systems
CN102208005B (zh) * 2011-05-30 2014-03-26 华中科技大学 一种2-d卷积器
US9367519B2 (en) * 2013-08-30 2016-06-14 Microsoft Technology Licensing, Llc Sparse matrix data structure
CN104077233B (zh) 2014-06-18 2017-04-05 百度在线网络技术(北京)有限公司 多通道卷积层处理方法和装置
US9805303B2 (en) * 2015-05-21 2017-10-31 Google Inc. Rotating data for neural network computations
US9582726B2 (en) 2015-06-24 2017-02-28 Qualcomm Incorporated Systems and methods for image processing in a deep convolution network

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010134697A (ja) * 2008-12-04 2010-06-17 Canon Inc コンボリューション演算回路、階層的コンボリューション演算回路及び物体認識装置
JP2019522291A (ja) * 2016-07-01 2019-08-08 グーグル エルエルシー プログラマブル二次元画像プロセッサ上の畳み込みニューラルネットワーク

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
ATUL RAHMAN, ET AL.: ""Efficient FPGA Acceleration of Convolutional Neural Networks Using Logical-3D Compute Array"", PROCEEDINGS OF THE 2016 DESIGN, AUTOMATION & TEST IN EUROPE CONFERENCE & EXHIBITION (DATE), JPN6021031073, 18 March 2016 (2016-03-18), pages 1393 - 1398, ISSN: 0004570893 *
JONGSOO PARK, ET AL.: ""Holistic SparseCNN: Forging the Trident of Accuracy, Speed, and Size"", ARXIV:1608.01409V1, vol. version v1, JPN6021031074, 4 August 2016 (2016-08-04), pages 1 - 10, ISSN: 0004570894 *
YIFAN HE, ET AL.: ""A Configurable SIMD Architecture with Explicit Datapath for Intelligent Learning"", PROCEEDINGS OF THE 2016 INTERNATIONAL CONFERENCE ON EMBEDDED COMPUTER SYSTEMS: ARCHITECTURES, MODELI, JPN6021031076, 21 July 2016 (2016-07-21), pages 156 - 163, XP033044657, ISSN: 0004570895, DOI: 10.1109/SAMOS.2016.7818343 *

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019215907A1 (ja) * 2018-05-11 2019-11-14 オリンパス株式会社 演算処理装置
WO2019216376A1 (ja) * 2018-05-11 2019-11-14 オリンパス株式会社 演算処理装置
JPWO2019216376A1 (ja) * 2018-05-11 2021-05-13 オリンパス株式会社 演算処理装置
JP7261226B2 (ja) 2018-05-11 2023-04-19 オリンパス株式会社 演算処理装置
JP2020194442A (ja) * 2019-05-29 2020-12-03 富士通株式会社 最適化装置及び最適化方法
JP7208529B2 (ja) 2019-05-29 2023-01-19 富士通株式会社 最適化装置及び最適化方法
JP2021034039A (ja) * 2019-08-13 2021-03-01 三星電子株式会社Samsung Electronics Co.,Ltd. ニューラルネットワーク方法及び装置
JP7114659B2 (ja) 2019-08-13 2022-08-08 三星電子株式会社 ニューラルネットワーク方法及び装置

Also Published As

Publication number Publication date
US10242311B2 (en) 2019-03-26
JP2018026134A (ja) 2018-02-15
US20180046437A1 (en) 2018-02-15
JP6941499B2 (ja) 2021-09-29
CN107729997A (zh) 2018-02-23
US20180046898A1 (en) 2018-02-15
CN107729997B (zh) 2022-12-27
CN107729996B (zh) 2023-07-14
JP6998699B2 (ja) 2022-01-18
CN107729996A (zh) 2018-02-23

Similar Documents

Publication Publication Date Title
JP6941499B2 (ja) ゼロ係数スキップ畳み込みニューラルネットワークエンジン
US10679127B2 (en) Performing average pooling in hardware
US20180165574A1 (en) Performing average pooling in hardware
JP5734475B2 (ja) 変換の高速でメモリ効率の良い実施のための方法
JP7414930B2 (ja) 情報処理装置、情報処理方法
JP2020126651A (ja) ニューラルネットワークのコンボルーション演算を処理する方法及び装置
EP3282398A1 (en) Zero coefficient skipping convolution neural network engine
US11599334B2 (en) Enhanced multiply accumulate device for neural networks
JP2021144428A (ja) データ処理装置、データ処理方法
CN116051345A (zh) 图像数据处理方法、装置、计算机设备及可读存储介质
US8810572B2 (en) Tessellation cache for object rendering
US20210318887A1 (en) Multiplier with Zero Skipping
US11301214B2 (en) Device for performing multiply/accumulate operations
US20220140841A1 (en) ReLU COMPRESSION TO REDUCE GPU MEMORY

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200727

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20200727

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210906

R150 Certificate of patent or registration of utility model

Ref document number: 6941499

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150