JP2020537788A - 汎用化画像処理の画像前処理 - Google Patents

汎用化画像処理の画像前処理 Download PDF

Info

Publication number
JP2020537788A
JP2020537788A JP2020521568A JP2020521568A JP2020537788A JP 2020537788 A JP2020537788 A JP 2020537788A JP 2020521568 A JP2020521568 A JP 2020521568A JP 2020521568 A JP2020521568 A JP 2020521568A JP 2020537788 A JP2020537788 A JP 2020537788A
Authority
JP
Japan
Prior art keywords
connections
image
output
storage positions
input
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
JP2020521568A
Other languages
English (en)
Other versions
JP7277449B2 (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.)
Xilinx Inc
Original Assignee
Xilinx 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 Xilinx Inc filed Critical Xilinx Inc
Publication of JP2020537788A publication Critical patent/JP2020537788A/ja
Application granted granted Critical
Publication of JP7277449B2 publication Critical patent/JP7277449B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • 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
    • 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
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • 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]
    • 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/95Hardware or software architectures specially adapted for image or video understanding structured as a network, e.g. client-server architectures
    • 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

Landscapes

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

Abstract

画像データを複数の画像サンプルストリームにフォーマットするための例示的なプリプロセッサ回路は、画像データ(802)の複数行(814)を記憶し、複数行のうちのある行を出力するように構成された第1のバッファ(705)と、第1のバッファ(705)に連結され、第1のバッファ(705)によって出力された行(814)に対応する複数の画像サンプルを記憶するための複数の記憶位置(709)を含む第2のバッファ(708)と、複数のシフトレジスタ(712)と、複数の接続(718)を含む相互接続ネットワーク(710)とを含み、各接続(718)は、複数のシフトレジスタ(712)の各シフトレジスタを複数の記憶位置(709)のうち2つ以上の記憶位置に連結し、複数の記憶位置(709)のうち1つ以上の記憶位置は、複数の接続(718)のうち2つ以上の接続に連結され、複数の接続(718)に基づいて複数の画像サンプルを複数のシフトレジスタ(712)にロード(1608)し、複数のシフトレジスタ(712)をシフト(1616)することによって、複数の画像サンプルストリームを出力するように構成された制御回路(714)とを含む。

Description

技術分野
本開示の実施例は、一般的に、コンピューティングシステムおよび電子回路に関し、特に、汎用化画像処理の画像前処理に関する。
背景
機械学習は、明示的にプログラムすることなく、コンピューティングシステムを動作させる科学である。従来の機械学習は、様々なクラスタリングおよび分類技術、例えば、K平均法、線形およびロジスティック回帰、確率勾配降下法、相関ルール学習法を含む。深層学習は、機械学習の新しい分野である。深層学習は、非線形処理ユニットの複数の層を用いて、特徴の抽出および変換を実行するための機械学習アルゴリズムである。深層学習アルゴリズムは、監視なし学習アルゴリズム(例えば、パターン分析)であってもよく、または監視あり学習アルゴリズム(例えば、分類)であってもよい。深層学習アルゴリズムは、人工ニューラルネットワーク(ANN)(以下、「ニューラルネットワーク」と呼ぶ)の層を用いて実装することができる。
一般的に、ニューラルネットワークは、図形に連結されたノード(「ニューロン」)の集合である。ニューラルネットワーク内のノードは、重み付き入力の合計を計算し、必要に応じて合計にバイアスを加える。ノードの出力は、最終的な合計の関数(「活性化関数」と呼ばれる)である。活性化関数の例は、シグモイド関数、双曲線正接(tanh)関数、正規化線形ユニット(ReLU)関数、および恒等関数を含む。多くの場合、ニューラルネットワークモデルは、特定のトポロジーを定義するノードの層、対応する重みおよびバイアスに編成される。重みおよびバイアスは、ネットワークパラメータと呼ばれる。
一般的に、ニューラルネットワークは、入力層と出力層とを含み、必要に応じて入力層と出力層との間に1つ以上の隠れ層を含むことができる。深層学習アプリケーションに使用されるニューラルネットワークは、通常多くの隠れ層を含むため、深層ニューラルネットワーク(DNN)と呼ばれる。ニューラルネットワークの層は、高密度に接続されてもよく(例えば、一層の各ノードは、前の層の全てのノードに接続されている)、低密度に接続されてもよい(例えば、一層の各ノードは、前の層の一部のノードのみに接続されている)。畳み込みニューラルネットワーク(CNN)とは、畳み込み層と呼ばれる低密度に接続された1つ以上の層を含むDNNの一種である。CNNは、画像またはビデオデータの処理に適している。他の種類のDNNは、音声およびテキストデータの処理に適したリカレントニューラルネットワーク(RNN)を含む。
畳み込み演算は、いくつかの手法を使用して実行することができ、通常、大量のデジタルシグナルプロセッサ(DSP)を使用すること、オンチップバッファを必要とすることおよび/またはデータアクセスパターンによって制限される。1つの例示的な畳み込み手法は、DSPアレイに供給するサンプルのシフトレジスタを作成する。この手法は、畳み込みウィンドウが入力画像の列と行をスキップするため、ストライドまたは拡張された畳み込みを使用できないという点で制限されている。これは、サンプルを順番に循環するように使用されたシフトレジスタと、入力画像のサンプルをスキップまたはジャンプするストライド(stride)または拡張(dilation)との間の競合が原因である。したがって、汎用化畳み込みを並列に計算するための改良アーキテクチャを提供することが望ましい。
概要
画像の前処理手法を説明する。一例において、画像データを複数の画像サンプルストリームにフォーマットするためのプリプロセッサ回路は、画像データの複数行を記憶し、複数行のうちのある行を出力するように構成された第1のバッファと、第1のバッファに連結され、第1のバッファによって出力された行に対応する複数の画像サンプルを記憶するための複数の記憶位置を含む第2のバッファと、複数のシフトレジスタと、複数の接続を含む相互接続ネットワークとを含み、各接続は、複数のシフトレジスタの各シフトレジスタを複数の記憶位置のうち2つ以上の記憶位置に連結し、複数の記憶位置のうち1つ以上の記憶位置は、複数の接続のうち2つ以上の接続に連結され、複数の接続に基づいて複数の画像サンプルを複数のシフトレジスタにロードし、複数のシフトレジスタをシフトすることによって、複数の画像サンプルストリームを出力するように構成された制御回路とを含む。
いくつかの実施形態において、複数の接続は、複数の第1の接続であってもよい。相互接続ネットワークは、複数のマルチプレクサを含んでもよい。各マルチプレクサは、複数の第1の接続の各々に連結された第1の入力と、複数のシフトレジスタの各々に連結された出力とを含んでもよい。
いくつかの実施形態において、相互接続ネットワークは、複数の第2の接続を含んでもよい。第2の接続の各々は、複数の記憶位置のうち2つ以上の記憶位置を複数のマルチプレクサの各々の第2の入力に連結することができる。複数の記憶位置のうち1つ以上の記憶位置は、複数の第2の接続のうち2つ以上に連結されることができる。
いくつかの実施形態において、制御回路は、複数のマルチプレクサを制御して、複数の第1の接続または複数の第2の接続のうち1つの接続を選択するように、相互接続ネットワークのモードを設定するように構成されてもよい。
いくつかの実施形態において、各接続は、複数のシフトレジスタの各シフトレジスタを異なるパターンの複数の記憶位置に連結することができる。
いくつかの実施形態において、複数の接続のうち第1の接続を介して複数のシフトレジスタのうち第1のシフトレジスタに連結された複数の記憶位置のパターンは、複数の接続のうち第2の接続を介して複数のシフトレジスタのうち第2のシフトレジスタに連結された複数の記憶位置のパターンと重複することができる。
いくつかの実施形態において、異なるパターンの複数の記憶位置は、画像データとフィルタとの間の畳み込みパラメータによって定義されてもよく、パラメータは、フィルタの幅、水平ストライド(stride)、および水平拡張(dilation)を含んでもよい。
別の例において、集積回路(IC)は、画像データを記憶するメモリにアクセスするように構成されたメモリコントローラと、メモリコントローラに連結され、画像データを取得し、画像データから複数の画像サンプルストリームを生成するように構成された画像プリプロセッサと、画像プリプロセッサに連結され、複数の画像サンプルストリームを処理するように構成されたプロセッサとを含む。画像プリプロセッサは、画像データの複数行を記憶し、複数行のうちのある行を出力するように構成された第1のバッファと、第1のバッファに連結され、第1のバッファによって出力された行に対応する複数の画像サンプルを記憶するための複数の記憶位置を含む第2のバッファと、複数のシフトレジスタと、複数の接続を含む相互接続ネットワークとを含み、各接続は、複数のシフトレジスタの各シフトレジスタを複数の記憶位置のうち2つ以上の記憶位置に連結し、複数の記憶位置のうち1つ以上の記憶位置は、複数の接続のうち2つ以上の接続に連結され、複数の接続に基づいて複数の画像サンプルを複数のシフトレジスタにロードし、複数のシフトレジスタをシフトすることによって、複数の画像サンプルストリームを出力するように構成された制御回路とを含む。
いくつかの実施形態において、複数の接続は、複数の第1の接続であってもよい。相互接続ネットワークは、複数のマルチプレクサを含んでもよい。各マルチプレクサは、複数の第1の接続の各々に連結された第1の入力と、複数のシフトレジスタの各々に連結された出力とを含んでもよい。
いくつかの実施形態において、相互接続ネットワークは、複数の第2の接続を含んでもよい。第2の接続の各々は、複数の記憶位置のうち2つ以上の記憶位置を複数のマルチプレクサの各々の第2の入力に連結することができる。複数の記憶位置のうち1つ以上の記憶位置は、複数の第2の接続のうち2つ以上に連結されることができる。
いくつかの実施形態において、制御回路は、複数のマルチプレクサを制御して、複数の第1の接続または複数の第2の接続のうち1つの接続を選択するように、相互接続ネットワークのモードを設定するように構成されてもよい。
いくつかの実施形態において、各接続は、複数のシフトレジスタの各シフトレジスタを異なるパターンの複数の記憶位置に連結することができる。
いくつかの実施形態において、複数の接続のうち第1の接続を介して複数のシフトレジスタのうち第1のシフトレジスタに連結された複数の記憶位置のパターンは、複数の接続のうち第2の接続を介して複数のシフトレジスタのうち第2のシフトレジスタに連結された複数の記憶位置のパターンと重複することができる。
いくつかの実施形態において、異なるパターンの複数の記憶位置は、画像データとフィルタとの間の畳み込みパラメータによって定義されてもよく、パラメータは、フィルタの幅、水平ストライド、および水平拡張を含んでもよい。
一部の実施形態において、プロセッサは、データ処理ユニットのシストリックアレイであってもよい。
別の例において、画像データを複数の画像サンプルストリームにフォーマットする方法は、画像データの複数行および複数行のうち出力された行を、第1のバッファに記憶することと、第1のバッファによって出力された行に対応する複数の画像サンプルを、複数の記憶位置を有する第2のバッファに記憶することと、相互接続ネットワークの複数の接続に基づいて、複数の画像サンプルを複数のシフトレジスタにロードすることとを含み、各接続は、複数のシフトレジスタの各シフトレジスタを複数の記憶位置のうち2つ以上の記憶位置に連結し、複数の記憶位置のうち1つ以上の記憶位置は、複数の接続のうち2つ以上の接続に連結され、複数のシフトレジスタをシフトすることによって、複数の画像サンプルストリームを出力することを含む。
いくつかの実施形態において、各接続は、複数のシフトレジスタの各シフトレジスタを異なるパターンの複数の記憶位置に連結することができる。
いくつかの実施形態において、異なるパターンの複数の記憶位置は、画像データとフィルタとの間の畳み込みパラメータによって定義されてもよく、パラメータは、フィルタの幅、水平ストライド、および水平拡張を含んでもよい。
いくつかの実施形態において、複数の接続は、複数の第1の接続であってもよい。相互接続ネットワークは、複数のマルチプレクサを含んでもよい。各マルチプレクサは、複数の第1の接続の各々に連結された第1の入力と、複数のシフトレジスタの各々に連結された出力とを含んでもよい。
いくつかの実施形態において、相互接続ネットワークは、複数の第2の接続を含んでもよい。第2の接続の各々は、複数の記憶位置のうち2つ以上の記憶位置を複数のマルチプレクサの各々の第2の入力に連結することができる。複数の記憶位置のうち1つ以上の記憶位置は、複数の第2の接続のうち2つ以上に連結されることができる。
これらの態様および他の態様は、以下の詳細な説明を参照して理解することができる。
上記の特徴を詳細に理解できるように、添付の図面に示されているいくつかの実現例を参照することによって、上記の概要をより具体的に説明する。理解すべきことは、添付の図面は、典型的な実現例のみを示しており、本発明の範囲を限定するものと見なされるべきではないことである。
一例に従って、ニューラルネットワークを実装するためのシステムを示すブロック図である。 一例に従って、コンピューティングシステムを示すブロック図である。 一例に従って、加速回路を示すブロック図である。 一例に従って、プログラマブル集積回路(IC)を示すブロック図である。 一例に従って、プログラマブルICのフィールドプログラマブルゲートアレイ(FPGA)の実装を示す図である。 一例に従って、畳み込みプロセッサを示すブロック図である。 一例に従って、画像プリプロセッサを示すブロック図である。 一例に従って、畳み込み演算用の入力画像データ、フィルタデータおよび出力画像データを示す図である。 二次元行列乗算演算による畳み込みを示す図である。 一例に従って、図7の画像プリプロセッサを用いて、入力画像データを処理する方法を示す図である。 一例に従って、図7の画像プリプロセッサをより詳細に示すブロック図である。 例示的な入力画像および1組の受容フィールドを示す図である。 一例に従って、相互接続ネットワークの構成を示すブロック図である。 図12Aの例に従って、行バッファとシフトレジスタとの間の接続のロジック構成を示すブロック図である。 図12Aの例のシフトレジスタによって出力されたサンプルストリームを示す図である。 別の例に従って、相互接続ネットワークの構成を示すブロック図である。 図14Aの例に従って、行バッファとシフトレジスタとの間の接続のロジック構成を示すブロック図である。 別の例に従って、行バッファとシフトレジスタとの間の接続のロジック構成を示すブロック図である。 一例に従って、図7の画像プリプロセッサの動作方法を示す流れ図である。 一例に従って、図7の画像プリプロセッサを設計する方法を示す流れ図である。
詳細な説明
理解を容易にするために、可能な限り、同様の参照番号を用いて、図面に共通の同様の要素を示す。一例の要素を他の例に有利に組み込むことができる。
以下、図面を参照して様々な特徴を説明する。なお、図面は、縮尺通りに描かれている場合と描かれていない場合があり、図面全体を通して、同様の構造または機能を有する要素は、同様の参照番号で示されている。なお、図面は、特徴の説明を容易にすることのみに提供され、請求された発明の網羅的な説明としてまたは請求された発明の範囲に対する制限として意図されていない。また、図示された例は、示されている全ての態様または利点を含む必要がない。特定の例に関連して説明した態様または利点は、必ずしもその例に限定されず、限定するように図示されまたは明確に説明されていない場合、任意の他の例に実現することができる。
画像の前処理手法を説明する。画像プリプロセッサは、マルチプレクサ、バッファおよびシフトレジスタからなるアーキテクチャを含み、クロックサイクルごとに大量のデータサンプルを生成して、畳み込みなどの画像処理を実施することができる。このアーキテクチャは、入力画像データのストライドまたは拡張されたアクセスパターンをサポートする。このアーキテクチャは、畳み込みニューラルネットワーク(CNN)の実装に特に有用である大きなシストリックアレイを用いて、畳み込みなどの画像処理を実施することができる。畳み込みのために、アーキテクチャは、入力画像を読み取るメモリレイテンシ(memory latency)と畳み込みサイズとのバランスを取ることによって、最大の効率、最小限のバッファおよび最小限のロジックレベルで畳み込みを実行し、メモリ帯域幅を削減する。このアーキテクチャは、最小の面積ペナルティで様々な畳み込みフィルタサイズをサポートすることができ、畳み込みフィルタサイズを動的に変更するCNNに有利である。アーキテクチャのこれらの特徴およびさらなる特徴は、図面を参照して以下で説明される。
図1は、一例に従って、ニューラルネットワークを実装するためのシステム100を示すブロック図である。システム100は、コンピュータシステム102および1つ以上のコンピュータシステム108を含む。コンピュータシステム102は、1つ以上の設計ツール104を提供するためのソフトウェアを実行するように構成された従来のコンピューティングコンポーネントを含む。各コンピュータシステム108は、1つ以上のニューラルネットワーク110を実行する。ニューラルネットワーク110は、アプリケーション112、加速ライブラリ114、および1つ以上のハードウェアアクセラレータ116を用いて実装される。
一例において、ハードウェアアクセラレータ116は、プログラマブル集積回路(IC)、例えば、フィールドプログラマブルゲートアレイ(FPGA)を含む。加速ライブラリ114は、ハードウェアアクセラレータ116と接続するためのアプリケーションプログラミングインターフェイス(API)を提供する。また、加速ライブラリ114は、ニューラルネットワーク層および他の種類のニューラルネットワーク構造の事前定義した実装および最適化した実装を含むニューラルネットワーク機能を提供するライブラリを含むこともできる。したがって、ニューラルネットワーク110は、ハードウェアアクセラレータ116に実装されたハードウェア部分と、加速ライブラリ114に実装されたソフトウェア部分との両方を含むことができる。アプリケーション112は、加速ライブラリ114のAPIを呼び出し、ハードウェアアクセラレータ116をプログラムおよび制御することによって、ニューラルネットワーク116を実装する。
設計者は、設計ツール104を用いてニューラルネットワーク110を定義する。設計ツール104は、ハードウェアアクセラレータ116をプログラミングするためのファイル(例えば、FPGAの構成ビットストリーム)、加速ライブラリ114を提供するためのファイル、およびアプリケーション112を提供するためのファイルを生成することができる。設計者は、レジスタ転送言語(RTL)、C、C++、OpenCLなどのプログラミング言語、またはRTLとプログラマブル言語の組み合わせを使用して、ニューラルネットワーク110のハードウェア部分を定義することができる。ユーザは、C、C++、OpenCLなどのプログラミング言語を使用して、ニューラルネットワーク110のソフトウェア部分を定義することができる。設計ツール104は、ソフトウェア定義ニューラルネットワークをコンパイルすることによって、ハードウェアアクセラレータ116のプログラミングファイルおよび加速ライブラリ114のライブラリファイルを生成する。設計者は、クラスライブラリ、テンプレートライブラリなどを提供するライブラリ106を使用して、ニューラルネットワーク110のハードウェア部分およびソフトウェア部分の開発を支援することができる。
ユーザは、プログラミング言語(例えば、C、C++、Pythonなど)を使用して、アプリケーション112を定義することができる。ユーザは、例えば、Caffe、TensorFlow、MXNetなどのニューラルネットワークフレームワークおよびライブラリを利用することができる。
図2は、一例に従って、コンピューティングシステム108を示すブロック図である。コンピューティングシステム108は、ハードウェア204と、ハードウェア204上で動作するソフトウェア206とを含む。ハードウェア204は、処理システム210、システムメモリ1216、記憶装置(ストーレジ)218、およびハードウェアアクセラレータ116を含む。ソフトウェア206は、オペレーティングシステム(OS)244、加速ライブラリ114、およびアプリケーション112を含む。
処理システム210は、マイクロプロセッサ212、サポート回路214、および周辺バス215を含む。マイクロプロセッサ212は、任意種類の汎用中央処理装置(CPU)、例えば、x86ベースのプロセッサ、またはARM(登録商標)ベースのプロセッサであってもよい。マイクロプロセッサ212は、1つ以上のコアおよび関連する回路(例えば、キャッシュメモリ、メモリ管理ユニット(MMU)、割り込みコントローラなど)を含むことができる。マイクロプロセッサ212は、システムメモリ216および/または記憶装置218に記憶され、本明細書に記載された1つ以上の演算を実行するプログラムコードを実行するように構成されている。サポート回路214は、マイクロプロセッサ212、システムメモリ216、記憶装置218、ハードウェアアクセラレータ116、または他の任意の周辺装置の間のデータの流れを管理するように、マイクロプロセッサ212と協働する様々な装置を含む。例えば、サポート回路214は、チップセット(例えば、ノースブリッジ、サウスブリッジ、プラットフォームホストコントローラなど)、電圧レギュレータ、ファームウェア(例えば、BIOS)などを含むことができる。サポート回路214は、マイクロプロセッサ212と、ハードウェアアクセラレータ116などの様々な周辺機器が接続されている周辺バス215との間のデータの流れを管理する。いくつかの例において、マイクロプロセッサ212は、チップセット(例えば、ノースブリッジ、サウスブリッジなど)の全ての機能または一部の機能を実質的に取り入れたシステムインパッケージ(SiP)、システムオンチップ(SoC)などであってもよい。周辺バスは、PCIe(Peripheral Component Interconnect Express)などの拡張バス標準を実装することができる。この例において、処理システム210は、ハードウェアアクセラレータ116とは別個であると図示されている。以下でさらに説明する他の例において、処理システム210およびハードウェアアクセラレータ116は、システムオンチップ(SoC)を用いて、同一の集積回路(IC)上に実装されてもよい。
システムメモリ216は、実行可能な命令およびデータなどの情報を記憶および検索することを可能にする素子である。システムメモリ216は、1つ以上のランダムアクセスメモリ(RAM)モジュール、例えば、ダブルデータレート(DDR)ダイナミックRAM(DRAM)を含むことができる。記憶装置218は、ローカル記憶装置(例えば、1つ以上のハードディスク、フラッシュメモリモジュール、ソリッドステートディスクおよび光ディスク)および/またはコンピューティングシステム108と1つ以上のネットワークデータ記憶システムとの通信を可能にする記憶インターフェイスを含む。ハードウェア204は、コンピューティングシステムの様々な他の従来の装置および周辺機器、例えば、グラフィックスカード、ユニバーサルシリアルバス(USB)インターフェイスなどを含むことができる。
ハードウェアアクセラレータ116は、プログラマブルIC228、不揮発性メモリ224、およびRAM226を含む。プログラマブルIC228は、FPGAなどであってもよく、FPGAなどを含むSoCであってもよい。NVM224は、任意種類の不揮発性メモリ、例えばフラッシュメモリを含むことができる。RAM226は、DDR DRAMなどを含むことができる。プログラマブルIC228は、NVM224およびRAM226に連結されている。また、プログラマブルIC228は、処理システム210の周辺バス215に連結されている。
OS244は、当技術分野で知られている任意の汎用オペレーティングシステム、例えば、Linux(登録商標)、Microsoft Windows(登録商標)、Mac OS(登録商標)などであってもよい。加速ライブラリ114は、ハードウェアアクセラレータ116を命令および制御するためのAPIを提供するドライバおよびライブラリを含む。アプリケーション112は、マイクロプロセッサ212上で動作しており、ニューラルネットワークを実装するために加速ライブラリ114のAPIを呼び出すソフトウェアを含む。
動作時、加速回路230を用いて、プログラマブルIC228を構成する。加速回路230は、通常、ベースプラットフォーム230Aおよびカーネル230Bを含む。例えば、加速回路230は、静的領域234およびプログラマブル領域236を使用して実装することができる。静的領域234は、周辺バス215、NVM224およびRAM226とのインターフェイスを提供するためのサポート回路240を含む。プログラマブル領域236は、1つ以上のカーネル回路(カーネル)238を含むことができる。ベースプラットフォーム230Aは、静的領域234を使用して実装され、カーネル230Bは、プログラマブル領域236を使用して実装される。別の例において、ベースプラットフォーム230Aは、プログラマブル領域236の一部を使用して実装されてもよい。したがって、いくつかの例において、プログラマブル領域236は、いくつかのインターフェイス回路を含む。いくつかの例において、加速回路230は、2つ以上のプログラマブル領域236を含むことができ、各々のプログラマブル領域236は、カーネル238を用いて個別に構成されてもよい。
プログラマブル領域236の再構成時に、静的領域234の回路が一定であるため、静的領域234は、「静的」である。一例において、サポート回路240は、PCIeエンドポイント回路、直接メモリアクセス(DMA)コントローラ、相互接続、メモリコントローラ、メモリインターフェイス回路(例えば、DDRインターフェイス)、(部分的な再構成をサポートするための)デカップラ回路、フラッシュプログラマ、デバッグ回路などを含む。いくつかの例において、プログラマブル領域236は、サポート回路240を含まない。他の例において、一部のサポート回路は、プログラマブル領域236に実装される。このような場合、プログラマブル領域236は、「拡張されたプログラマブル領域」と呼ばれる。いずれかの場合、一例において、いくつかのサポート回路240、例えば、PCIe回路およびDMA回路は、常に静的領域234に存在する。
図3は、一例に従って、加速回路230を示すブロック図である。加速回路230は、サポート回路240およびカーネル238を含む。この例において、サポート回路240は、PCIeエンドポイント回路(PCIeエンドポイント)302、PCIe DMAコントローラ304、相互接続回路(相互接続)306、メモリコントローラ310、およびメモリインターフェイス312を含む。サポート回路240は、明瞭性のために省略されている他の回路(例えば、デカップラ回路、デバッグ回路など)を含むことができる。PCIeエンドポイント302は、周辺バス215に接続するための物理インターフェイスを提供する。PCIe DMAコントローラ304は、RAM226およびカーネル238に対するDMA操作を容易にする。相互接続306は、PCIe DMAコントローラ304をメモリコントローラ310およびカーネル238に連結する。メモリコントローラ310は、メモリインターフェイス312に連結される。メモリインターフェイス312は、RAM226に連結される。
動作時、加速ライブラリ246は、PCIe DMAコントローラ304を介してRAM226に直接にアクセスすることができる。また、加速ライブラリ246は、PCIe DMAコントローラ304を介してカーネル238にアクセスすることもできる。カーネル238は、メモリコントローラ310を介してRAM226にアクセスすることができる。システムメモリ216とRAM226との間のDMA操作によって、ソフトウェア206とカーネル238との間にデータを交換することができる。
この例において、カーネル238は、インターフェイス330、331および332を介して、相互接続306と通信する。具体的には、これらのインターフェイスは、第1の読み取りインターフェイス330、第2の読み取りインターフェイス331、および読み取り/書き込みインターフェイス332を含む。例えば、読み取りインターフェイス330は、カーネル238を制御するための制御インターフェイスとして使用することができる。読み取りインターフェイス331を用いて、メモリインターフェイス312のうち第1のメモリインターフェイスを介して、RAM226から読み取ることができる。読み取り/書き込みインターフェイス332を用いて、メモリインターフェイス312のうち第2のメモリインターフェイスを介して、RAM226から読み書きすることができる。
カーネル238は、相互接続インターフェイス304、制御ロジック342、および処理回路341を含む。処理回路341は、IM2COL回路(IM2COL)344、読み取り制御回路(読み取り制御)346、マルチプレクサ356、先入れ先出し回路(FIFO)358、デジタル信号プロセッサ(DSP)アレイ362、スケーラ回路(スケーラ)364、マックスプール回路(マックスプール)366、マルチプレクサ368、FIFO354、書き込み制御回路(書き込み制御)352、キャッシュ348、読み取り制御回路(読み取り制御)350、およびFIFO360を含む。相互接続インターフェイス340は、インターフェイス330、331および332、制御ロジック342、および処理回路341に連結される。相互接続インターフェイス340は、制御ロジック342とインターフェイス330との間の通信および処理回路341とインターフェイス331および332との間の通信を容易にするために、スイッチ、クロックコンバータなどを含むことができる。
この例において、相互接続インターフェイス340は、IM2COL回路344の入力、読み取り制御回路346の入力、キャッシュ348の入力、および書き込み制御回路352の入力に連結されている。IM2COL回路344の出力および読み取り制御回路346の出力は、マルチプレクサ356の入力に連結されている。マルチプレクサ356の出力は、FIFO358の入力に連結されている。FIFO358の出力は、DSPアレイ362の第1の入力に連結されている。キャッシュ348の出力は、読み取り制御回路350の入力に連結されている。読み取り制御回路350の出力は、FIFO360の入力に連結されている。FIFO360の出力は、DSPアレイ362の第2の入力に連結されている。DSPの出力アレイ362は、スケーラ364の入力に連結されている。スケーラ364の出力は、マックスプール回路366の入力およびマルチプレクサ368の入力に連結されている。マックスプール回路366の出力は、マルチプレクサ368の別の入力に連結されている。マルチプレクサ368の出力は、FIFO354の入力に連結されている。FIFO354の出力は、書き込み制御回路352に連結されている。
動作時、DSPアレイ362は、ニューラルネットワークを実装するための行列乗算演算を実行する。DSPアレイ362の入力は、FIFO358から入力活性化マトリックスを受信し、FIFO360から重みマトリックスを受信する。入力活性化マトリックスは、読み取り制御回路346を用いて、RAM226から直接に読み取ることができる。代替的には、入力活性化マトリックスは、IM2COL回路344によってRAM226から読み出され、処理されてから、DSPアレイ362に入力されてもよい。IM2COL回路344の実施形態は、以下で説明する。重み行列は、読み取り制御回路350によってRAM226から読み出され、キャッシュ348にキャッシュされてもよい。スケーラ364は、DSPアレイ362の出力をスケーリングすることができる。マックスプール回路366は、スケーリングされたDSPアレイ362の出力に対してマックスプーリング機能を実施することができる。一例において、マックスプール回路966は、CLBまたは他の構成可能なロジックを使用して実装される。マックスプール回路366またはスケーラ364の出力は、FIFO354に記憶することができる。書き込み制御回路352は、FIFO内のデータをRAM226に書き込む。制御ロジック342は、処理回路341内の様々な回路、例えば、IM2COL回路344、読み取り制御回路346、マルチプレクサ356および368、読み取り制御回路350、スケーラ364、マックスプール回路366、および書き込み制御回路352を制御する。
図4は、一例に従って、プログラマブルIC228を示すブロック図である。プログラマブルIC228は、プログラマブルロジック3、構成ロジック25、および構成メモリ26を含む。プログラマブルIC228は、NVM224、RAM226および他の回路29などの外部回路に連結されてもよい。プログラマブルロジック3は、ロジックセル30、サポート回路31、およびプログラマブル相互接続32を含む。ロジックセル30は、複数の入力の一般的な論理機能を実装するように構成され得る回路を含む。サポート回路31は、トランシーバ、入力/出力ブロック、デジタル信号プロセッサ、メモリなどの専用回路を含む。ロジックセルおよびサポート回路31は、プログラマブル相互接続32を介して相互接続することができる。ロジックセル30をプログラミングするための情報、サポート回路31のパラメータを設定するための情報、およびプログラマブル相互接続32をプログラミングするための情報は、構成ロジック25によって構成メモリ26に保存される。構成ロジック25は、不揮発性メモリ224または任意の他のソース(例えば、DRAM28または他の回路29)から構成データを取得することができる。いくつかの例において、プログラマブルIC228は、処理システム2を含む。処理システム2は、マイクロプロセッサ、メモリ、サポート回路、IO回路などを含むことができる。例えば、処理システム2は、処理システム210と同様の回路を含むことができる。いくつかの例において、処理システム2は、処理システム210を置換することができる。このような場合、コンピューティングシステム108の全体は、プログラマブルIC228を用いて実装され、ソフトウェア206は、処理システム2上で動作する。
図5は、多くの異なるプログラマブルタイル、例えば、トランシーバ37、構成可能なロジックブロック(CLB)33、ランダムアクセスメモリブロック(BRAM)34、入力/出力ブロック(IOB)36、構成およびクロックロジック(構成/クロック)42、デジタル信号処理ブロック(DSP)35、専用の入力/出力ブロック(I/O)41(例えば、構成ポートおよびクロックポート)、およびデジタルクロックマネージャ、アナログデジタルコンバータ、システム監視ロジックなどの他のプログラマブルロジック39を含むプログラマブルIC228のFPGA実装を示している。また、FPGAは、PCIeインターフェイス40、アナログデジタルコンバータ(ADC)38などを含むことができる。
一部のFPGAにおいて、各プログラマブルタイルは、少なくとも1つのプログラマブル相互接続素子(INT)43を含むことができる。図5の上部の例示によって示すように、プログラマブル相互接続素子43は、同一のタイル内のプログラマブルロジック要素の入出力端子48への接続を有する。また、各プログラマブル相互接続素子43は、同一のタイルまたは他のタイル内の隣接するプログラマブル相互接続素子の相互接続セグメント49への接続を含むことができる。さらに、各プログラマブル相互接続素子43は、ロジックブロック(図示せず)間の一般的なルーティングリソースの相互接続セグメント50への接続を含むことができる。一般的なルーティングリソースは、相互接続セグメント(例えば、相互接続セグメント50)のトラックを含むロジックブロック(図示せず)と相互接続セグメントを接続するためのスイッチブロック(図示せず)との間のルーティングチャネルを含むことができる。一般的なルーティングリソースの相互接続セグメント(例えば、相互接続セグメント50)は、1つ以上のロジックブロックを跨ることができる。プログラマブル相互接続素子43は、一般的なルーティングリソースと共に、図示されたFPGAのプログラマブル相互接続構造(プログラマブル相互接続)を実装する。
一実装例において、CLB33は、ユーザロジックを実装するようにプログラムできる構成可能なロジック素子(CLE)44と、単一のプログラマブル相互接続素子(INT)43とを含むことができる。BRAM34は、1つ以上のプログラマブル相互接続素子に加えて、BRAMロジック要素(BRL)45を含むことができる。通常、タイルに含まれる相互接続素子の数は、タイルの高さに依存する。図示の例において、BRAMタイルは、5つのCLBと同様の高さを有するが、他の数(例えば、4つ)のCLBと同様の高さを有してもよい。DSPタイル35は、適切な数のプログラマブル相互接続素子に加えて、DSPロジック素子(DSPL)46を含むことができる。IOB36は、例えば、1つのプログラマブル相互接続素子43に加えて、2つの入力/出力ロジック素子(IOL)47を含むことができる。当業者には明らかなように、例えば、I/Oロジック素子47に接続された実際のI/Oパッドは、一般的には、入力/出力ロジック素子47の領域に限定されない。
図示の例において、(図8に示された)ダイ中央付近の水平領域は、構成、クロック、および他の制御ロジックに使用されている。この水平領域または水平コラムから延在する垂直コラム51は、FPGAの全幅に亘ってクロックおよび構成信号を分配するように使用される。
図5に示された構造を利用する一部のFPGAは、FPGAの大部分を構成する規則的なコラム状構造を乱す追加のロジックブロックを含む。追加のロジックブロックは、プログラマブルブロックおよび/または専用ロジックであってもよい。
なお、図5は、単に例示的なFPGA構造を示すことを意図している。例えば、一行内のロジックブロックの数、行の相対幅、行の数および順番、行に含まれるロジックブロックの種類、ロジックブロックの相対サイズ、および図5の上部に示された相互接続/ロジック実装は、単に例示的なものである。例えば、実際のFPGAにおいて、ユーザロジックの効率的な実装を容易にするために、一般的に、CLBの2つ以上の隣接する行は、CLBの出現する箇所に含まれる。隣接するCLB行の数は、FPGAの全体サイズによって変化する。
汎用化画像処理の画像前処理
図6は、一例に従って、畳み込みプロセッサ600を示すブロック図である。畳み込みプロセッサ600は、メモリ602、画像プリプロセッサ604、およびプロセッサ606を含む。画像プリプロセッサ604およびプロセッサ606は、上述した加速回路230に実装されてもよい。例えば、プロセッサ606は、DSPアレイ362であってもよい。画像プリプロセッサ604は、画像プリプロセッサ344であってもよい。メモリ602は、ハードウェアアクセラレータ116内のRAM226であってもよい。以下、図7を参照して、画像プリプロセッサ604の例示的な構造を説明する。他の例において、畳み込みプロセッサ600は、図3に示されている加速回路と異なる構造を有する加速回路または他の種類の回路に実装されてもよい。
動作時、メモリ602は、入力画像データ802を記憶する。以下、図8Aを参照して例示的な入力画像データ802を説明する。一般的に、入力画像データ802は、複数の画像を含み、各画像は、2次元配列のサンプルからなる。画像プリプロセッサ604は、外部回路(例えば、制御ロジック342)から命令データを受け取る。命令データに応答して、画像プリプロセッサ604は、メモリ602から画像データ802のブロックを取得し、画像ブロックを複数の並列ストリームの画像サンプル(サンプルストリーム)にフォーマットする。各ストリーム中の画像サンプルは、フィルタサイズ、ストライドおよび拡張を含む畳み込みパラメータに基づいて並べられる。以下、ストライドおよび拡張の概念を含め、画像データの畳み込みを簡単に説明する。プロセッサ606は、サンプルストリームおよび畳み込みフィルタデータを受け取る。プロセッサ606は、入力画像データ802および畳み込みフィルタデータの畳み込みをもたらす演算を実行する。プロセッサ606は、処理の結果として、出力画像データを生成する。
一例において、プロセッサ606は、シストリックアレイに形成されたデータ処理ユニット(DPU)607を含む。以下でさらに説明するように、畳み込みは、行列乗算を用いて実行することができる。DPU607は、サンプルストリームおよびフィルタデータに基づいて、積和演算を実行することによって、出力画像データを生成する。他の例において、プロセッサ606は、サンプルストリームおよびフィルタデータをベクトルとして処理する1つ以上のコアを有するベクトルプロセッサであってもよい。さらに他の例において、画像プリプロセッサ604は、プロセッサ606に加えてまたはプロセッサ606の代わりに、画像サンプルストリームの他の消費者(consumer)に連結されてもよい(例えば、後の処理のためにメモリに記憶されてもよい)。他の例において、プロセッサ606は、畳み込みの代わりに他の演算(例えば、フィルタリング演算)を実行することができる。一般的に、画像プリプロセッサ604は、画像サンプルの消費者が特定の演算を実行するために必要とする特定のサンプルパターンを有する画像サンプルストリームを生成する。
図7は、一例に従って、画像プリプロセッサ604を示すブロック図である。画像プリプロセッサ604は、入力バッファ回路(入力バッファ)705、行バッファ回路(行バッファ)708、相互接続ネットワーク710、シフトレジスタ回路(シフトレジスタ)712、および制御回路714を含む。画像プリプロセッサ604は、メモリコントローラ702を含むことができる。代替的には、メモリコントローラ702は、画像プリプロセッサ604の外部(例えば、図3に示されたメモリコントローラ310の一部)に実装されてもよい。制御回路714は、画像プリプロセッサ604の外部の他の制御回路(例えば、図3に示された制御ロジック342)に連結されてもよい。
一例において、入力バッファ705は、読み取り制御回路703、入力バッファ704、入力バッファ704、および行セレクタ706を含む。読み取り制御回路703は、メモリコントローラ702と、入力バッファ704および704との間に連結されている。行セレクタ706は、入力バッファ704および704と、行バッファ708との間に連結されている。動作時、読み取り制御回路703は、アドレスデータおよびコマンドデータをメモリコントローラ702に送信することによって、メモリ602から画像データを取得する。各々の入力バッファ704および704は、複数行の画像データのブロックを記憶するように構成されている。この例において、入力バッファ705は、画像データを二重にバッファする。よって、読み取り制御回路703は、画像データを入力バッファ704または704の一方にロードすると共に、行セレクタ706は、他方の入力バッファ704または704から画像データを読み取ることができる。入力バッファ705は、図7に示されるものとは異なる構造を含むことができる(例えば、入力バッファ705は、1つのバッファであってもよく、3つのバッファであってもよい)。一般的に、入力バッファ705は、行バッファ708にロードされるいくつかの画像行を有する画像データのブロックを記憶する。
行バッファ708は、複数の記憶位置を含む。例えば、行バッファ708は、複数のレジスタを含み、各レジスタは、画像データの行に対応するサンプルを記憶するように構成されている。行バッファ708は、画像データの行を記憶するのに十分な記憶位置を含む。行バッファ708に記憶されたサンプルは、相互接続ネットワーク710を介してシフトレジスタ712にロードされる。各シフトレジスタ712は、行バッファ708の異なるパターンの記憶位置にアクセスして、画像サンプルストリームを生成する。相互接続ネットワーク710は、各シフトレジスタ712と、行バッファ708内の特定のパターンの記憶位置との間の接続を含む。以下でさらに説明するように、シフトレジスタ712に連結された記憶位置のパターンは、実行されている畳み込み演算のフィルタ幅、ストライドおよび拡張に応じて、重複してもよく、非連続であってもよい。異なるフィルタ幅、ストライドおよび拡張によって、行バッファ708とシフトレジスタ712との間のアクセスパターンが異なる。
一例において、相互接続ネットワーク710は、各シフトレジスタ712の単一のアクセスパターンをサポートする。このような例において、相互接続ネットワーク710は、接続を実装するためのワイヤのみを含む。他の例において、相互接続ネットワーク710は、各シフトレジスタ712の複数のアクセスパターンをサポートする。このような例において、相互接続ネットワーク710は、異なるアクセスパターンを実装するための異なる接続を選択するためのマルチプレクサを含むことができる。シフトレジスタ712は、他の回路(例えば、プロセッサ606)によって利用される画像サンプルストリームを出力する。
制御回路714は、入力バッファ705、行バッファ708、およびシフトレジスタ712に連結されている。また、制御回路714は、命令入力を含む。制御回路714は、外部制御ロジック(例えば、制御ロジック342)から命令を受け取ることができる。制御回路714は、イネーブル信号、クロック信号などを入力バッファ705、行バッファ708およびシフトレジスタ712の各々に提供することによって、本明細書に記載の演算を実行することができる。命令入力は、メモリ602から画像データを取得するためのアドレスデータを提供することができる。制御回路714は、アドレスデータを読み取り制御回路703に提供することができる。制御回路714は、行クロックを行バッファ708に提供することによって、画像データの行を行バッファ708の記憶位置にロードする。制御回路714は、サンプルクロックをシフトレジスタ712に提供することによって、画像サンプルをシフトアウトする。一例において、(例えば、相互接続ネットワーク710がマルチプレクサを含む場合)制御回路714は、相互接続ネットワーク710に連結されてもよい。制御回路714は、モード選択信号を相互接続ネットワーク710内のマルチプレクサに提供することによって、各シフトレジスタ712のアクセスパターンを選択することができる。
図8Aは、一例に従って、畳み込み演算用の入力画像データ802、フィルタデータ804および出力画像データ806を示す。畳み込み演算は、例えばCNNの特定の層に対して実行することができる。入力画像データ802は、複数のチャネル(ID)の各々において、各々が幅(IW)および高さ(IH)を有する2次元画像を含む。したがって、入力画像データ802は、IW×IH×ID個の画像サンプルを含む。例えば、入力画像データ802は、赤、緑および青(RGB)チャネルの各々において、227×227個の画像(すなわち、227×227×3)を含むことができる。別の例において、CNNの内側畳み込み層は、(例えば、96個のチャネルを有し、各チャネルが55×55個の画像を有する場合)55×55×96個の入力画像データを含むことができる。各画像808は、2次元行列A=(aijIH×IWによって表すことができる。各画像808は、IH個の行814を含む。以下で説明するように、画像プリプロセッサ604は、行ごとに画像808を処理する。
場合によって、各画像808の左端および右端にゼロ値サンプルの列および/または各画像808の上端および下端にゼロ値サンプルの行をパディングすることができる。このパディングは、数字PHおよびPWで示され、PHは、パディングの高さを表し、PWは、パディングの幅を表す。例えば、PH=PW=0は、パディングしないことを表す。PH=PW=1は、ゼロ値サンプルのリングが画像サンプルを囲むことを意味する。PH=1は、1行のゼロ値サンプルが上端に追加され、1行のゼロ値サンプルが下端に追加されることを意味する。PW=2は、2列のゼロ値サンプルが右端に追加され、2列のゼロ値サンプルが左端に追加されることを意味する。
フィルタデータ804は、3次元フィルタ804・・・804ODを含み、各々の3次元フィルタは、幅(FW)、高さ(FH)および深さ(ID)を有する。各々の3次元フィルタ804・・・804ODは、入力画像データ802と畳み込むことによって、出力画像データ806の各々のチャネルを生成する。したがって、3次元フィルタ804・・・804ODの数は、出力画像の深さ(OD)に等しい。また、各3次元フィルタ804・・・804ODの深さは、入力画像データ802の深さ(ID)と一致する。例えば、CNNの畳み込み層は、11×11×3というサイズを有する96個の3次元フィルタを含むことができる。各フィルタ804・・・804ODの2次元断面は、2次元行列B=(bijFH×FWで表すことができる。
出力画像データ806は、複数(OD)のチャネルにおいて、各々が幅(OW)および高さ(IH)を有する2次元画像を含む。したがって、出力画像データ806は、体積OW×OH×ODを形成する。例えば、出力画像データ806は、96個のチャネルを含み、各チャネルは、55×55個の画像を有する。各画像816は、2次元行列C=(cijOH×OWで表すことができる。各画像816は、OH個の行を含む。
OHおよびOWの値は、フィルタの寸法(FH、FW)、入力画像のパディング(PH、PW)、水平ストライド(S)、垂直ストライド(S)、水平拡張(D)、および垂直拡張(D)に依存する。具体的には
Figure 2020537788
画像全体の処理を保証するために、式(IH+2PH−((D+1)(FH−1)+1))の値をSの倍数として求め、式(IW+2PW−((D+1)(FW−1)+1))の値をSの倍数として求める必要がある。
出力画像812内の出力サンプルは、本明細書において「受容フィールド」と呼ばれる各入力画像808内の入力サンプルの近傍に依存する。各受容フィールドは、FH×FW個の入力サンプルを含む。出力画像812内の所定の出力サンプルcijは、当該サンプルの受容フィールドのベクトルと所定のフィルタのベクトルとの間の点乗積をとることによって計算される。したがって、所定の出力サンプルcijの受容フィールドは、ID×FH×FW個のサンプルに等しい数の入力サンプルを含む。受容フィールドのサイズは、フィルタの寸法(FH、FW)に依存する。受容フィールドの入力サンプルおよび受容フィールドが互いに重複する度合は、畳み込みのストライドおよび拡張パラメータと、入力画像データのパディングとに依存する。
図8Bは、2次元行列乗算演算による畳み込みを示す。フィルタマトリクス902は、OD個の行および(ID×FH×FW)個の列を有する。フィルタマトリクス902において、各フィルタ804・・・804ODは、(ID×FH×FW)個の要素を有するベクトルに変換される。ベクトル化された各フィルタは、フィルタ行列906の行908になる。
出力画像マトリクス906は、OD個の行および(OH×OW)個の列を有する。出力画像マトリクス906の各行912は、出力画像812をベクトル化したものである。出力画像マトリクス906は、出力画像データ806のOD個のチャネルを表すOD個の行を含む。
入力画像マトリックス904は、ID×FH×FW個の行およびOH×OW個の列を有する。入力画像マトリクス904は、各列910が所定の出力サンプルの受容フィールドを含むように形成される。したがって、入力画像マトリックス904は、フィルタのサイズ(FH、FW)およびパディング(PH、PW)ならびに畳み込みに選択されたストライドおよび拡張に依存する。
1つの手法において、プロセッサは、行列902、904および906を生成し、行列乗算演算を実行することによって、畳み込みを実行することができる。しかしながら、このような手法は、IM2COLプロセスを用いて、大きな入力画像マトリクス904を生成する必要がある。入力画像マトリックス904は、冗長データを含む(例えば、画像サンプルは、定義された受容フィールドの重複に従った特定のパターンに従って、列間で繰り返される)。例えば、227×227×3個の画像サンプルを有する入力画像データ(例えば、パディングなしで227ピクセルの高さおよび幅を有するRGB画像)を検討する。さらに、フィルタが11×11×3個であり、ストライドが4であると仮定する。このような例において、入力画像データ802は、154587個の画像サンプルを含み、入力画像マトリックス904は、1098075個の画像サンプルを含む。各画像サンプルが1バイトである場合、入力画像マトリックス904の生成には、約1MBの一時記憶が必要になる。言うまでもなく、入力サンプルのサイズが大きくなるほど、多くの一時記憶が必要になる。さらに、入力画像行列904の計算は、畳み込み演算を実行する前に、入力画像データ802を完全に走査する必要がある。本明細書においてさらに説明するように、画像プリプロセッサ604は、入力画像マトリックス904を計算する必要性を回避するため、必要のメモリリソースを大幅に低減する。さらに、画像プリプロセッサ604は、畳み込みの計算と並行して、入力画像データ802をフォーマットする。
図9は、一例に従って、画像プリプロセッサ604を用いて、入力画像データ802を処理する方法を示す。上記の例で説明したように、入力画像データ802は、複数の画像802(例えば、画像802・・・802ID)を含む。入力画像データ802は、行優先形式でメモリ602に記憶することができる。入力バッファ705は、入力画像データ802を1ブロックずつ読み出す。一例において、各ブロックの画像データは、KH個の行814を含む。図7の例において、入力バッファ705は、入力画像データを2重にバッファする。したがって、前処理の開始時に、読み取り制御回路703は、画像808の行814・・・814KHを含むブロックBを入力バッファ704にロードする。読み取り制御回路703は、(例えば、制御回路714から受信された)垂直ストライド(S)を決定し、行814S・・・814KH+Svを含む第2のブロックBを入力バッファ704にロードする。
行セレクタ706は、バッファ704からの画像データ行を行バッファ708にロードし、読み取り制御回路703は、ブロックBを入力バッファ704にロードする。行セレクタ706は、(例えば、制御回路714によって生成された)行クロックに従って、画像データ行を行バッファ708にロードする。行セレクタ706は、入力バッファ704の読み取りに切り替える前に、入力バッファ704内のKH行を走査する。入力バッファ704に切り替えると、読み取り制御回路703は、ブロックB(明示的に図示せず)から新しい行を入力バッファ704にロードする。なお、垂直ストライド(S)に応じて、読み取り制御回路703は、KH未満の行を読み出し、画像808内のブロックBおよび任意の後続ブロックを用いて、入力バッファ704を更新することができる。ブロックBは、ブロックBと共通の行を含むため、新しい行のみが入力バッファ704に追加される。例えば、KH=11およびS=4の場合、ブロックBの最初の3行(例えば、行814...81411)は、ブロックBの最後の3行であり、再利用することができる。同様のことは、入力バッファ704に記憶された後続の奇数番号の各ブロックにも適用する。また、同様のことは、入力バッファ704に記憶されたブロックBの後続の偶数番号の各ブロックにも適用する。一般的に、最初の2つのブロックBおよびBの後、読み取り制御回路703は、入力バッファ704または入力バッファ704から最小の(KH、2×S)行を読み取る。図9にさらに示すように、読み取り制御回路703は、入力画像808当たりにOH個のブロック(B・・・BOH)を読み取る。
図9の例において、入力バッファ704および704の高さがKHであると仮定している。いくつかの例において、入力バッファ704および704は、KHを超える数の行を記憶することができる。例えば、画像プリプロセッサ604が複数のモードをサポートするように構成されている場合、入力バッファ704および704は、モードの数KH以上の行を記憶することができる。入力バッファ704および704がKHよりも多くの行を記憶することができる場合、ブロックの高さは、KHよりも大きくなる。これによって、後続のサイクルにバッファを更新するためにメモリ602から読み取る必要のある行が少なくなる。
図9の例において、1つの入力画像808が、行幅IWに従って行ごとに処理されると仮定している。入力バッファ704、704および行バッファ708は、IWを超える数の画像サンプルを記憶することができる。例えば、画像プリプロセッサ604がAlexNet CNNの各畳み込み層の畳み込みをサポートするように構成されている場合を検討する。第1の畳み込み層において、入力画像は、227×227(高さおよび幅)である。第2の畳み込み層において、入力画像は、55×55(高さおよび幅)である。第3の畳み込み層において、入力画像は、27×27(高さおよび幅)である。第4および第5の畳み込み層において、入力画像は、13×13である。入力バッファ704、704および行バッファ708は、第1の畳み込み層をサポートするために少なくとも227個の画像サンプルを記憶するように構成される。第1の層の後の畳み込み層の場合、入力画像は、交互にメモリ602に記憶される。これによって、画像プリプロセッサ604によって処理されている「画像」は、連結を有する行(例えば、2つの55個サンプル行の連結、4つの27個サンプル行の連結)を有する。
図9の例において、垂直拡張(D)がゼロ(すなわち、拡張なし)であると仮定している。垂直拡張がゼロではない場合、各ブロックB・・・BOHは、KH個の行を含むが、行のインデックスは、拡張の大きさによって異なる。例えば、垂直拡張(D)が1に設定されている場合、ブロックBは、行804、804、804、・・・、8042KW−1を含み、ブロックBは、行804、804、804、・・・、8042KW−1+Svを含む。
図10は、一例に従って、プロセッサ606をより詳細に示すブロック図である。行バッファ708は、記憶位置(例えば、レジスタ)709・・・709を含み、Tは、正の整数である。Tの数値は、少なくともCNNの最大IWをサポートするように選択することができる(例えば、AlexNet CNNの場合、T≧227)。各記憶位置709は、Mビットの画像サンプル(例えば、M=8、M=16)を記憶する。各記憶位置709は、行バッファ708に対応する出力d・・・dを介してアクセス可能である。各出力d・・・dは、Mビットの出力である。
シフトレジスタ712は、シフトレジスタ712・・・712を含み、Vは、正の整数である。Vの数値は、CNNの少なくとも最大のOW(例えば、AlexNet CNNの場合、V≧55)またはより小さいOW値の整数倍をサポートするように選択することができる。これにより、画像プリプロセッサ604は、出力画像の全体行の画像データをプロセッサ606に供給することができる。各シフトレジスタ712は、記憶位置(例えば、レジスタ)713・・・713を含み、Uは、正の整数である。一例において、Uの数値は、少なくとも最大のフィルタ幅(FW)をサポートするように選択される(例えば、AlexNet CNNの場合、U=11)。各記憶位置713は、Mビットの画像サンプルを記憶する。記憶位置713は、各々の入力sr・・・srから並列にロードされる。各入力sr・・・srは、各々のシフトレジスタ712・・・712の記憶位置713の並列ロードをサポートするように、幅U×Mを有する。各シフトレジスタ712は、Mビットの画像のサンプルストリームを出力する。したがって、画像プリプロセッサ604は、シフトレジスタ712・・・712によって各々出力されるV個のサンプルストリームを生成する。
相互接続ネットワーク710は、出力d・・・dと入力sr・・・srとの間に配置される。相互接続ネットワーク710は、接続718を含み、必要に応じてマルチプレクサ720を含む。一例において、相互接続ネットワーク710は、単一のモード(例えば、行バッファ708の1つのアクセスパターン)をサポートする。このような場合、マルチプレクサ720は、設けられない。各接続718は、入力srを異なるパターンの出力d・・・dに連結する。一例において、選択したフィルタサイズ、水平ストライドおよび水平拡張に基づいて、異なるパターンは、重複する。別の例において、相互接続ネットワーク710は、複数のモード(例えば、行バッファ708の複数のアクセスパターン)をサポートする。このような場合、ネットワーク715は、マルチプレクサ720を含む。各マルチプレクサ720の出力は、対応する出力sr・・・srに連結される。マルチプレクサ720の入力は、接続718に連結される。各マルチプレクサ720の各入力は、異なるアクセスパターンに基づいて、異なるセットの入力d・・・dに接続される。以下、相互接続ネットワーク710の例示的な構造をさらに説明する。
図11は、例示的な入力画像1102および1組の受容フィールド1104を示す。入力画像1102は、幅5および高さ5(すなわち、5×5画像)を有する。画像1102は、行列A=(aij5×5によって定義され、式中、aijは、入力サンプルである。図示の例において、畳み込みパラメータは、3×3のフィルタ寸法(FH、FW)、2の水平ストライド(S)、および0の水平拡張(D)を含む。このようなパラメータの場合、出力画像の高さ(OH)および出力画像の幅(OW)は、いずれも2である(すなわち、OH=OW=2)。出力画像は、行列C=(cij2×2によって定義され、式中、cijは、出力サンプル(図11には明示的に図示せず)である。出力サンプルc1,1は、入力画像1102の最初の3行および最初の3列の入力サンプルを含む受容フィールド11041,1を有する。出力サンプルc1,2は、入力画像1102の最初の3行および最後の3列の入力サンプルを含む受容フィールド11041,2を有する。出力サンプルc2、1は、最後の3行および最初の3列の入力サンプルを含む受容フィールド11042,1を有する。出力サンプルc2,2は、最後の3行および最後の3列の入力サンプルを含む受容フィールド11042,2を有する。
図12Aは、一例に従って、相互接続ネットワーク710の構成を示すブロック図である。相互接続ネットワーク710は、同様の畳み込みパラメータ(例えば、フィルタ3×3、ストライド2、および拡張0)を有する図11の例に示された画像1102を処理するように構成されている。相互接続ネットワーク710は、単一のモードをサポートするため、マルチプレクサ720は、必要とされず、設けられない。
この例において、行バッファ708は、入力画像1102の一行の5つのサンプルを記憶するために、少なくとも5つの記憶位置709・・・709を含む。シフトレジスタ712は、出力画像のOWと一致するように、少なくとも2つのシフトレジスタ712および712を含む。入力srは、接続7181を介して出力d・・・dに連結されている。接続718は、出力d・・・dに各々連結されている3本のワイヤを含む。入力srは、接続718を介して出力d・・・dに連結されている。接続718は、出力d・・・dに各々連結されている3本のワイヤを含む。したがって、各行サイクルにおいて、d・・・dからの画像サンプルは、シフトレジスタ712に並列にロードされ、d・・・dからの画像サンプルは、シフトレジスタ712に並列にロードされる。
図12Bは、図12Aの例に従って、行バッファ708とシフトレジスタ712との間の接続のロジック配置を示すブロック図である。相互接続ネットワーク710は、重複する行出力パターン1202を形成する。重複する行出力パターン1202は、出力パターン1202と、出力パターン1202とを含む。出力パターン1202は、出力d・・・dを提供する記憶位置709のパターンを含む。出力パターン1202は、出力d・・・dを提供する記憶位置709のパターンを含む。出力パターン1202は、接続718によってシフトレジスタ712の入力srに連結されている。出力パターン1202は、接続718によってシフトレジスタ712の入力srに連結されている。出力パターン1202と1202は、出力dによって重複する。出力パターン1202は、例に使用された畳み込みパラメータの結果である(例えば、フィルタ3×3、ストライド2、および拡張0)。
図13は、図12Aの例のシフトレジスタ712および712によって出力されたサンプルストリームを示している。シフトレジスタ712は、サンプルストリーム1302を出力する。シフトレジスタ712は、サンプルストリーム1302を出力する。入力画像1102は、図11の例に示されたものと同様である。サンプルストリーム1302は、受容フィールド11041,1のサンプルおよび後続の受容フィールド11042,1のサンプルを含む。サンプルストリーム1302は、受容フィールド11041,2のサンプルおよび後続の受容フィールド11042,2のサンプルを含む。各行サイクルにおいて、特定のストリームは、特定の受容フィールドの行を含む。3つの行サイクルの後、特定のストリームは、全ての受容フィールドを含む。6つの行サイクルの後、並列のストリーム1302および1302は、全ての受容フィールド1104を出力する。ストリーム1302および1302のサンプルパターンは、図12Aに示された接続718および718によって実装されたアクセスパターンの結果である。なお、ストリーム1302および1302は、全ての受容フィールド1104を事前に計算および記憶することなく、全ての受容フィールド1104を出力する。むしろ、画像プリプロセッサ604は、元の入力画像1102の6行を処理して、ストリーム1302および1302を生成する。プロセッサ606は、画像プリプロセッサ604によるストリームの生成に並行して、畳み込み演算を開始する。ストリーム1302および1302は、フィルタベクトルを用いたド点乗積演算に適したフォーマットである。
図14Aは、別の例に従って、相互接続ネットワーク710の構成を示すブロック図である。相互接続ネットワーク710は、幅(IW)が8である画像(例えば、8×8画像)を処理するように構成されている。相互接続ネットワーク710は、2つの異なるモードをサポートする。モードAにおいて、フィルタサイズは、3×3であり、ストライドは、2であり、拡張は、0である。モードBにおいて、フィルタサイズは、5×5であり、ストライドは、3であり、拡張は、0である。相互接続ネットワーク710は、複数のモードをサポートするため、マルチプレクサ720を含む。
この例において、行バッファ708は、入力画像の一行の8つのサンプルを記憶するために、少なくとも8つの記憶位置709・・・709を含む。シフトレジスタ712は、出力画像のOWと一致するように、少なくとも2つのシフトレジスタ712および712を含む。入力srは、マルチプレクサ720の出力に連結されている。入力srは、マルチプレクサ720の出力に連結されている。マルチプレクサ720および720の各々は、2つの入力IおよびIと、モード選択入力(モード)とを含む。マルチプレクサ720のポートIは、接続718Aを介して出力d・・・dに連結されている。接続718Aは、出力d・・・dに各々連結されている3つのワイヤを含む。マルチプレクサ720のポートIは、接続718Aを介して出力d・・・dに連結されている。接続718Aは、出力d・・・dに各々連結されている3つのワイヤを含む。モードAの場合、各行サイクルにおいて、d・・・dからの画像サンプルは、シフトレジスタ712に並列にロードされ、d・・・dからの画像サンプルは、シフトレジスタ712に並列にロードされる。
マルチプレクサ720のポートIは、接続718Bを介して出力d・・・dに連結されている。接続718Bは、出力d・・・dに各々連結されている5本のワイヤを含む。マルチプレクサ720のポートIは、接続718Bを介して出力d・・・dに連結されている。接続718Bは、出力d・・・dに各々連結されている5本のワイヤを含む。モードBの場合、各行サイクルにおいて、d・・・dからの画像サンプルは、シフトレジスタ712に並列にロードされ、d・・・dからの画像サンプルは、シフトレジスタ712に並列にロードされる。
図14Bは、図14Aの例に従って、行バッファ708とシフトレジスタ712との間の接続のロジック構成を示すブロック図である。相互接続ネットワーク710は、モードAにおいて重複する行出力パターン1202Aを形成し、モードBにおいて重複する行出力パターン1202Bを形成する。重複する行出力パターン1202Aは、出力パターン1202Aおよび出力パターン1202Aを含む。出力パターン1202Aは、出力d・・・dを提供する記憶位置709のパターンを含む。出力パターン1202Aは、出力d・・・dを提供する記憶位置709のパターンを含む。出力パターン1202Aは、接続718Aによってマルチプレクサ720の入力Iに連結されている。出力パターン1202Aは、接続718Aによってマルチプレクサ720の入力Iに連結されている。出力パターン1202Aおよび1202Aは、出力dによって重複する。出力パターン1202Aは、モードAに使用された畳み込みパラメータの結果である(例えば、フィルタ3×3、ストライド2、および拡張0)。
重複する行出力パターン1202Bは、出力パターン1202Bおよび出力パターン1202Bを含む。出力パターン1202Bは、出力d・・・dを提供する記憶位置709のパターンを含む。出力パターン1202Bは、出力d・・・dを提供する記憶位置709のパターンを含む。出力パターン1202Bは、接続718Bによってマルチプレクサ720の入力Iに連結されている。出力パターン1202Bは、接続718Bによってマルチプレクサ720の入力Iに連結されている。出力パターン1202Bおよび1202Bは、出力dおよびdによって重複する。出力パターン1202Bは、モードBに使用された畳み込みパラメータの結果である(例えば、フィルタ5×5、ストライド3、および拡張0)。
図15は、別の例に従って、行バッファ708とシフトレジスタ712との間の接続のロジック構成を示すブロック図である。相互接続ネットワーク710は、幅(IW)が8である画像(例えば、8×8画像)を処理するように構成され、3つの異なるモードをサポートする。相互接続ネットワーク710は、モードA、BおよびCにおいて、重複する行出力パターン1202A、1202Bおよび1202Cを各々形成する。モードAおよびBは、図14Bの例と同様であり、上記で詳細に説明されている。モードCは、フィルタサイズ3×3、ストライド2、拡張1を含む畳み込みパラメータによって定義される。
重複する行出力パターン1202Cは、出力パターン1202Cおよび出力パターン1202Cを含む。出力パターン1202Cは、出力d、dおよびdを提供する記憶位置709のパターンを含む。出力パターン1202Cは、出力d、dおよびdを提供する記憶位置709のパターンを含む。出力パターン1202Cは、接続718Cによってマルチプレクサ720の入力Iに連結されている。出力パターン1202Cは、接続718Cによってマルチプレクサ720の入力Iに連結されている。出力パターン1202Cおよび1202Cは、出力dおよびdによって重複する。出力パターン1202Cは、モードCに使用された畳み込みパラメータの結果である(例えば、フィルタ3×3、ストライド2、および拡張1)。
図12A、14Aおよび15に示された相互接続ネットワーク710の例示的な構成は、説明のために簡略化されている。この構成は、より大きな画像幅および異なる畳み込みパラメータに応じて拡張することができる。単一のモードをサポートする場合、相互接続ネットワーク710は、畳み込みパラメータに関連する特定のアクセスパターンを実装するために、行バッファ708とシフトレジスタ712との間に接続されたワイヤのみを含む。複数のモードをサポートする場合、相互接続ネットワーク710は、2つ以上のモードに関連する2つ以上の入力を有するマルチプレクサを含む。
図16は、一例に従って、画像プリプロセッサ604の動作方法1600を示す流れ図である。方法1600は、省略可能なステップ1602から開始する。複数の動作モードが可能である場合、制御回路714は、ステップ1602において、動作モードを選択する。制御回路714が1つの動作モードのみを含む場合、ステップ1602は、省略される。ステップ1604において、制御回路714は、入力バッファ704をロードすると共に、入力バッファ704をロードする。例えば、制御回路714は、制御信号(イネーブル信号、クロック信号、アドレスデータなど)を読み取り制御回路703に提供する。上述したように、読み取り制御回路703は、画像データのブロックを入力バッファ704および704にロードする。
ステップ1606において、制御回路714は、選択したた行を行バッファ708にロードする。例えば、制御回路714は、制御信号(イネーブル信号、クロック信号など)を行セレクタ回路706に提供することによって、行を選択して、行バッファ708にロードする。行バッファ708は、行クロックに従ってロードされる。
ステップ1608において、制御回路714は、相互接続ネットワーク710を通じて行バッファ708の内容をシフトレジスタ712に並列にロードする。相互接続ネットワーク710は、選択した(または唯一の)モードのアクセスパターンを実装する。
ステップ1608から、方法1600は、後続のステップを同時に実行する。ステップ1616において、制御回路714は、シフトレジスタ712からの画像サンプルをシフトアウトすることによって、サンプルストリームを生成する。サンプルは、サンプルクロックに従ってシフトアウトされる。同時に、ステップ1610において、行セレクタ706は、処理されるさらなる行が現在の画像ブロックに存在するか否かを判断する。さらに行が存在する場合、方法1600は、ステップ614に進み、行セレクタ706は、選択した行を行バッファ708にロードする。さらなる行が存在しない場合、方法1600は、ステップ1612に進み、行セレクタ706は、入力バッファを切り替え、読み取り制御回路703は、新しい画像データを以前に使用した入力バッファにロードする。方法1600は、ステップ1608に戻り、繰り返される。
図17は、一例に従って、画像プリプロセッサ604を設計するための方法1700を示す流れ図である。方法1700は、設計ツール104を使用して、コンピュータシステム102などのコンピュータシステム上で実行することができる。方法1700は、ステップ1702から始まる。ステップ1702において、設計ツール104は、1つ以上の畳み込み層のフィルタ、ストライドおよび拡張パラメータを識別する。ステップ1704において、設計ツールは、ステップ1702において識別されたパラメータセットに基づいて、行バッファ708のアクセスパターンを決定する。ステップ1706において、設計ツール104は、決定されたアクセスパターンに基づいて、行バッファ708の記憶位置709をシフトレジスタ712に接続するように、相互接続ネットワーク710を生成する。省略可能なステップ1708において、設計ツール104は、複数のアクセスパターンをサポートするように、マルチプレクサ720を相互接続ネットワーク710に追加する。
上記は、特定の例に関するものであるが、本発明の基本的な範囲から逸脱することなく、他の例およびさらなる例を考案することができ、本発明の範囲は、以下の特許請求の範囲によって決定される。

Claims (14)

  1. 画像データを複数の画像サンプルストリームにフォーマットするためのプリプロセッサ回路であって、
    前記画像データの複数行を記憶し、前記複数行のうちのある行を出力するように構成された第1のバッファと、
    前記第1のバッファに連結され、前記第1のバッファによって出力された前記行に対応する複数の画像サンプルを記憶するための複数の記憶位置を含む第2のバッファと、
    複数のシフトレジスタと、
    複数の接続を含む相互接続ネットワークとを含み、各接続は、前記複数のシフトレジスタの各シフトレジスタを前記複数の記憶位置のうち2つ以上の記憶位置に連結し、前記複数の記憶位置のうち1つ以上の記憶位置は、前記複数の接続のうち2つ以上の接続に連結され、
    前記複数の接続に基づいて前記複数の画像サンプルを前記複数のシフトレジスタにロードし、前記複数のシフトレジスタをシフトすることによって、前記複数の画像サンプルストリームを出力するように構成された制御回路とを含む、プリプロセッサ回路。
  2. 前記複数の接続は、複数の第1の接続であり、
    前記相互接続ネットワークは、複数のマルチプレクサを含み、
    各マルチプレクサは、前記複数の第1の接続の各々に連結された第1の入力と、前記複数のシフトレジスタの各々に連結された出力とを含む、請求項1に記載のプリプロセッサ回路。
  3. 前記相互接続ネットワークは、複数の第2の接続を含み、
    前記第2の接続の各々は、前記複数の記憶位置のうち2つ以上の記憶位置を前記複数のマルチプレクサの各々の第2の入力に連結し、
    前記複数の記憶位置のうち1つ以上の記憶位置は、前記複数の第2の接続のうち2つ以上に連結されている、請求項2に記載のプリプロセッサ回路。
  4. 前記制御回路は、前記複数のマルチプレクサを制御して、前記複数の第1の接続または前記複数の第2の接続のうち1つの接続を選択するように、前記相互接続ネットワークのモードを設定するように構成されている、請求項3に記載のプリプロセッサ回路。
  5. 各接続は、前記複数のシフトレジスタの各シフトレジスタを異なるパターンの前記複数の記憶位置に連結する、請求項1に記載のプリプロセッサ回路。
  6. 前記複数の接続のうち第1の接続を介して前記複数のシフトレジスタのうち第1のシフトレジスタに連結された前記複数の記憶位置のパターンは、前記複数の接続のうち第2の接続を介して前記複数のシフトレジスタのうち第2のシフトレジスタに連結された前記複数の記憶位置のパターンと重複する、請求項5に記載のプリプロセッサ回路。
  7. 前記異なるパターンの前記複数の記憶位置は、前記画像データとフィルタとの間の畳み込みパラメータによって定義され、
    前記パラメータは、前記フィルタの幅、水平ストライド、および水平拡張を含む、請求項5に記載のプリプロセッサ回路。
  8. 集積回路であって、
    請求項1から7のいずれか1項に記載のプリプロセッサ回路を含み、
    画像データを記憶するメモリにアクセスするように構成されたメモリコントローラと、
    前記画像プリプロセッサに連結され、前記複数の画像サンプルストリームを処理するように構成されたプロセッサとをさらに含む、集積回路。
  9. 前記プロセッサは、データ処理ユニットのシストリックアレイである、請求項8に記載の集積回路。
  10. 画像データを複数の画像サンプルストリームにフォーマットする方法であって、
    前記画像データの複数行および前記複数行のうち出力された行を、第1のバッファに記憶することと、
    前記第1のバッファによって出力された前記行に対応する複数の画像サンプルを、複数の記憶位置を有する第2のバッファに記憶することと、
    相互接続ネットワークの複数の接続に基づいて、前記複数の画像サンプルを複数のシフトレジスタにロードすることとを含み、各接続は、前記複数のシフトレジスタの各シフトレジスタを前記複数の記憶位置のうち2つ以上の記憶位置に連結し、前記複数の記憶位置のうち1つ以上の記憶位置は、前記複数の接続のうち2つ以上の接続に連結され、
    前記複数のシフトレジスタをシフトすることによって、前記複数の画像サンプルストリームを出力することを含む、方法。
  11. 各接続は、前記複数のシフトレジスタの各シフトレジスタを異なるパターンの前記複数の記憶位置に連結する、請求項10に記載の方法。
  12. 前記異なるパターンの前記複数の記憶位置は、前記画像データとフィルタとの間の畳み込みパラメータによって定義され、
    前記パラメータは、前記フィルタの幅、水平ストライド、および水平拡張を含む、請求項11に記載の方法。
  13. 前記複数の接続は、複数の第1の接続であり、
    前記相互接続ネットワークは、複数のマルチプレクサを含み、
    各マルチプレクサは、前記複数の第1の接続の各々に連結された第1の入力と、前記複数のシフトレジスタの各々に連結された出力とを含む、請求項10に記載の方法。
  14. 前記相互接続ネットワークは、複数の第2の接続を含み、
    前記第2の接続の各々は、前記複数の記憶位置のうち2つ以上の記憶位置を前記複数のマルチプレクサの各々の第2の入力に連結し、
    前記複数の記憶位置のうち1つ以上の記憶位置は、前記複数の第2の接続のうち2つ以上に連結されている、請求項13に記載の方法。
JP2020521568A 2017-10-17 2018-10-11 汎用化画像処理の画像前処理 Active JP7277449B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/786,267 2017-10-17
US15/786,267 US11386644B2 (en) 2017-10-17 2017-10-17 Image preprocessing for generalized image processing
PCT/US2018/055447 WO2019079102A1 (en) 2017-10-17 2018-10-11 IMAGE PRETREATMENT FOR GENERALIZED IMAGE PROCESSING

Publications (2)

Publication Number Publication Date
JP2020537788A true JP2020537788A (ja) 2020-12-24
JP7277449B2 JP7277449B2 (ja) 2023-05-19

Family

ID=64110087

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020521568A Active JP7277449B2 (ja) 2017-10-17 2018-10-11 汎用化画像処理の画像前処理

Country Status (6)

Country Link
US (1) US11386644B2 (ja)
EP (1) EP3698313B1 (ja)
JP (1) JP7277449B2 (ja)
KR (1) KR20200069300A (ja)
CN (1) CN111183452B (ja)
WO (1) WO2019079102A1 (ja)

Families Citing this family (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11113603B1 (en) 2017-05-01 2021-09-07 Perceive Corporation Training network with discrete weight values
KR102586173B1 (ko) * 2017-10-31 2023-10-10 삼성전자주식회사 프로세서 및 그 제어 방법
US10504462B2 (en) * 2018-01-25 2019-12-10 Qualcomm Incorporated Non-linear processing of two-dimensional data
US11494582B2 (en) * 2018-02-08 2022-11-08 Western Digital Technologies, Inc. Configurable neural network engine of tensor arrays and memory cells
US11164073B2 (en) 2018-02-08 2021-11-02 Western Digital Technologies, Inc. Systolic neural network processor with feedback control
EP3557485B1 (en) * 2018-04-19 2021-05-26 Aimotive Kft. Method for accelerating operations and accelerator apparatus
US11568227B1 (en) 2018-04-20 2023-01-31 Perceive Corporation Neural network inference circuit read controller with multiple operational modes
US11049013B1 (en) 2018-04-20 2021-06-29 Perceive Corporation Encoding of weight values stored on neural network inference circuit
US10977338B1 (en) 2018-04-20 2021-04-13 Perceive Corporation Reduced-area circuit for dot product computation
US11205115B1 (en) 2018-04-20 2021-12-21 Perceive Corporation Neural network inference circuit
US11531868B1 (en) 2018-04-20 2022-12-20 Perceive Corporation Input value cache for temporarily storing input values
US11783167B1 (en) 2018-04-20 2023-10-10 Perceive Corporation Data transfer for non-dot product computations on neural network inference circuit
US11586910B1 (en) 2018-04-20 2023-02-21 Perceive Corporation Write cache for neural network inference circuit
US11222257B1 (en) 2018-04-20 2022-01-11 Perceive Corporation Non-dot product computations on neural network inference circuit
US11210586B1 (en) 2018-04-20 2021-12-28 Perceive Corporation Weight value decoder of neural network inference circuit
US10795729B2 (en) * 2018-04-28 2020-10-06 Cambricon Technologies Corporation Limited Data accelerated processing system
US20190370644A1 (en) * 2018-06-04 2019-12-05 Lightmatter, Inc. Convolutional layers for neural networks using programmable nanophotonics
JP2020035502A (ja) * 2018-08-28 2020-03-05 キオクシア株式会社 半導体集積回路
US10430355B1 (en) 2018-10-30 2019-10-01 International Business Machines Corporation Mixing restartable and non-restartable requests with performance enhancements
US11847567B1 (en) 2018-12-05 2023-12-19 Perceive Corporation Loss-aware replication of neural network layers
US11995533B1 (en) 2018-12-05 2024-05-28 Perceive Corporation Executing replicated neural network layers on inference circuit
CN111382094B (zh) * 2018-12-29 2021-11-30 深圳云天励飞技术有限公司 一种数据处理方法及装置
US11551082B2 (en) * 2019-01-10 2023-01-10 Koninklijke Philips N.V. Parallel sequence reductions with recursive neural networks
US11347297B1 (en) 2019-01-23 2022-05-31 Perceive Corporation Neural network inference circuit employing dynamic memory sleep
US11783176B2 (en) 2019-03-25 2023-10-10 Western Digital Technologies, Inc. Enhanced storage device memory architecture for machine learning
US10929058B2 (en) 2019-03-25 2021-02-23 Western Digital Technologies, Inc. Enhanced memory device architecture for machine learning
US11216731B2 (en) * 2019-04-10 2022-01-04 Alexander Fairhart Apparatus and process for visual recognition
US11941533B1 (en) 2019-05-21 2024-03-26 Perceive Corporation Compiler for performing zero-channel removal
US11379555B2 (en) * 2019-06-28 2022-07-05 Amazon Technologies, Inc. Dilated convolution using systolic array
US11620495B1 (en) 2019-08-16 2023-04-04 Perceive Corporation Neural networks with spatial and temporal features
US11681902B2 (en) * 2019-09-27 2023-06-20 Amazon Technologies, Inc. Transposed convolution using systolic array
US11941511B1 (en) 2019-11-11 2024-03-26 Perceive Corporation Storing of intermediate computed values for subsequent use in a machine trained network
CN112819022B (zh) * 2019-11-18 2023-11-07 同方威视技术股份有限公司 基于神经网络的图像识别装置和图像识别方法
DE102020201182A1 (de) * 2020-01-31 2021-08-05 Robert Bosch Gesellschaft mit beschränkter Haftung Hardwarebeschleunigte Berechnung von Faltungen
KR20220015680A (ko) 2020-07-31 2022-02-08 삼성전자주식회사 딥러닝 연산 수행 방법 및 장치
US11748251B2 (en) 2021-01-08 2023-09-05 Microsoft Technology Licensing, Llc Storing tensors in memory based on depth
US11762946B1 (en) * 2022-09-23 2023-09-19 Recogni Inc. Systems for using shifter circuit and 3×3 convolver units to emulate functionality of larger sized convolver units

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170046101A1 (en) * 2015-08-13 2017-02-16 Microsoft Technology Licensing, Llc Data reordering using buffers and memory
JP2017079017A (ja) * 2015-10-21 2017-04-27 キヤノン株式会社 畳み込み演算装置
WO2017146817A1 (en) * 2016-02-28 2017-08-31 Google Inc. Macro i/o unit for image processor

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001054054A (ja) * 1999-08-05 2001-02-23 Canon Inc 画像処理装置およびその方法
US6744929B1 (en) * 1999-11-18 2004-06-01 Nikon Corporation Image data compression method image data compression apparatus and recording medium and data signal for providing image data compression program
US6346825B1 (en) 2000-10-06 2002-02-12 Xilinx, Inc. Block RAM with configurable data width and parity for use in a field programmable gate array
JP4076963B2 (ja) * 2004-02-06 2008-04-16 シャープ株式会社 シフトレジスタ及び表示装置
US7881320B1 (en) * 2005-12-12 2011-02-01 Xilinx, Inc. Parsing data from multiple digital bitstreams
TWI319864B (en) * 2006-01-27 2010-01-21 Driving circuit and driving method of a liquid crystal display device
TWI340941B (en) * 2006-05-19 2011-04-21 Chimei Innolux Corp System for displaying image
US7502980B2 (en) * 2006-08-24 2009-03-10 Advantest Corporation Signal generator, test apparatus, and circuit device
CA2637343A1 (en) * 2008-07-29 2010-01-29 Ignis Innovation Inc. Improving the display source driver
US8687922B2 (en) * 2012-02-24 2014-04-01 Apple Inc. Parallel scaler processing
US9235498B1 (en) * 2013-06-03 2016-01-12 Xilinx, Inc. Circuits for and methods of enabling the modification of an input data stream
US9477999B2 (en) * 2013-09-20 2016-10-25 The Board Of Trustees Of The Leland Stanford Junior University Low power programmable image processor
KR102225324B1 (ko) * 2014-06-09 2021-03-10 삼성디스플레이 주식회사 데이터 구동부
US10204396B2 (en) 2016-02-26 2019-02-12 Google Llc Compiler managed memory for image processor
US11620490B2 (en) * 2017-10-17 2023-04-04 Xilinx, Inc. Multi-layer neural network processing by a neural network accelerator using host communicated merged weights and a package of per-layer instructions

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170046101A1 (en) * 2015-08-13 2017-02-16 Microsoft Technology Licensing, Llc Data reordering using buffers and memory
JP2017079017A (ja) * 2015-10-21 2017-04-27 キヤノン株式会社 畳み込み演算装置
WO2017146817A1 (en) * 2016-02-28 2017-08-31 Google Inc. Macro i/o unit for image processor

Also Published As

Publication number Publication date
CN111183452A (zh) 2020-05-19
US20190114499A1 (en) 2019-04-18
JP7277449B2 (ja) 2023-05-19
KR20200069300A (ko) 2020-06-16
US11386644B2 (en) 2022-07-12
CN111183452B (zh) 2023-03-24
EP3698313B1 (en) 2023-12-20
WO2019079102A1 (en) 2019-04-25
EP3698313A1 (en) 2020-08-26

Similar Documents

Publication Publication Date Title
JP7277449B2 (ja) 汎用化画像処理の画像前処理
KR102562715B1 (ko) 다수의 프로세서들 및 뉴럴 네트워크 가속기를 갖는 뉴럴 네트워크 프로세싱 시스템
KR102650299B1 (ko) 대규모 병렬 소프트웨어로 정의된 하드웨어 시스템에서의 정적 블록 스케줄링
KR102578508B1 (ko) 호스트 전달되는 병합된 가중치들 및 계층별 명령어들의 패키지를 사용한 뉴럴 네트워크 가속기에 의한 다중 계층 뉴럴 네트워크 프로세싱
US11429848B2 (en) Host-directed multi-layer neural network processing via per-layer work requests
US10354733B1 (en) Software-defined memory bandwidth reduction by hierarchical stream buffering for general matrix multiplication in a programmable IC
US10984500B1 (en) Inline image preprocessing for convolution operations using a matrix multiplier on an integrated circuit
US11175920B2 (en) Efficient work execution in a parallel computing system
US10943039B1 (en) Software-driven design optimization for fixed-point multiply-accumulate circuitry
US11204747B1 (en) Re-targetable interface for data exchange between heterogeneous systems and accelerator abstraction into software instructions
US10678509B1 (en) Software-driven design optimization for mapping between floating-point and fixed-point multiply accumulators
Basalama et al. FlexCNN: An end-to-end framework for composing CNN accelerators on FPGA
US11036827B1 (en) Software-defined buffer/transposer for general matrix multiplication in a programmable IC
KR20220024774A (ko) 역전파를 직접 사용한 프로그램 가능 디바이스 블록들의 뉴럴 네트워크들의 학습
TREMOIS OPTIMIZING HW/SW PARTITION OF A COMPLEX EMBEDDED SYSTEM USING C/C+

Legal Events

Date Code Title Description
A529 Written submission of copy of amendment under article 34 pct

Free format text: JAPANESE INTERMEDIATE CODE: A529

Effective date: 20200611

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20211007

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20221129

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20221206

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230302

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230508

R150 Certificate of patent or registration of utility model

Ref document number: 7277449

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150