【文献】
重岡 謙太朗 KENTAROU SHIGEOKA,GPUにおいてパラメータスイープを高速化するための並列方式 A Parallel Method for Accelerating Parameter Sweep on the GPU,情報処理学会研究報告 2012(平成24)年度▲4▼ [CD−ROM],日本,一般社団法人情報処理学会
【文献】
PEEMEN, Maurice et al.,Memory-Centric Accelerator Design for Convolutional Neural Networks,2013 IEEE 31st International Conference on Computer Design,2013年10月 6日
【文献】
BROERE, J.P.,A memory-centric SIMD neural network accelerator balancing efficiency & flexibility [online],2013年 8月20日,p.1-22,[検索日 2020.11.27],URL,https://pure.tue.nl/ws/portalfiles/portal/46950453/761299-1.pdf
(58)【調査した分野】(Int.Cl.,DB名)
前記カーネルタイルの第1のカーネルランネルは、第1のカーネルスタック幅境界に対応し、前記カーネルタイルの最後のカーネルランネルは、前記第1のカーネルスタック幅境界の後続の第2のカーネルスタック幅境界に対応する、請求項1に記載のシステム。
前記入力活性化マップの前記ピクセル値を前記基本入力活性化マップレイアウトから前記インターリーブされた入力活性化マップレイアウトに並べ替えるために、前記ハードウェアプロセッサは、
いくつかの入力活性化マップの寸法に沿ってトラバースすることと、
入力活性化マップの幅寸法に沿ってトラバースすることと、
入力活性化マップの高さ寸法に沿ってトラバースすることと
を反復的に行うようにプログラムされている、請求項1に記載のシステム。
前記ハードウェアプロセッサは、前記出力活性化マップのピクセル値を前記インターリーブされた出力活性化マップレイアウトから基本出力活性化マップレイアウトに並べ替えるようにプログラムされている、請求項1に記載のシステム。
前記出力活性化マップの前記ピクセル値を前記インターリーブされた出力活性化マップから前記基本出力活性化マップレイアウトに並べ替えるために、前記ハードウェアプロセッサは、
前記インターリーブされた出力活性化マップの高さ寸法に沿ってトラバースし、その後に、前記インターリーブされた出力活性化マップの幅寸法に沿ってトラバースすること
を反復的に行うようにプログラムされている、請求項5に記載のシステム。
前記複数のカーネルタイルと前記入力活性化マップピクセルの複数のクラスタとから前記畳み込み層の前記出力活性化マップを決定するために、前記ハードウェアプロセッサは、前記複数のカーネルタイルおよび前記入力活性化マップピクセルの複数のクラスタにタイル毎に融合積和演算を実施するようにプログラムされている、請求項1−6のいずれか1項に記載のシステム。
【発明を実施するための形態】
【0013】
(概要)
データ関係およびパターンを表すモデル(関数、アルゴリズム、システム等)は、入力を受け取り、ある方法において、入力に対応する出力を生成し得る。例えば、モデルは、畳み込みニューラルネットワーク(CNN)または深層ニューラルネットワーク(DNN)等の機械学習方法として実装され得る。深層学習は、タスク特定のアルゴリズムとは対照的に、学習データ表現の概念に基づく、より広義の一連の機械学習方法の一部であり、すなわち、拡張現実、複合現実、仮想現実、および機械知能に重要な視聴覚計算問題を解決することにおける多くの将来性を示す。機械学習では、畳み込みニューラルネットワーク(CNNまたはConvNet)は、ある種の深層フィードフォワード人工ニューラルネットワークを含み得、CNNは、視覚的画像を分析するための適用において成功を収めている。機械学習方法は、眼画像セグメント化および眼追跡を含む、様々な問題に対するロバストかつ正確なソリューションを可能にし得る、一連の方法を含む。しかしながら、機械学習方法は、計算的に集約的または高価であり得る。故に、機械学習方法を効率的に実施することは、限定されたリソースを伴う内蔵プラットフォーム上での機械学習方法の適用を可能にすることができる。
【0014】
機械学習モデルのパラメータは、訓練と称されるプロセスにおいて学習されることができる。例えば、機械学習モデルは、入力データと、対応する入力データのためのモデルの正しいまたは好ましい出力とを含む、訓練データを使用して、訓練されることができる。機械学習モデルは、入力データを繰り返し処理することができ、機械学習モデルのパラメータ(例えば、重み値)は、モデルが正しいまたは好ましい出力を生成する(またはそれに「収束する」)まで、試行錯誤プロセス等しいもので修正されることができる。例えば、重み値の修正は、「バックプロパゲーション」と称されるプロセスを通して実施され得る。バックプロパゲーションは、予期されるモデル出力と取得されるモデル出力との間の差異を決定することと、次いで、予期されるモデル出力と取得されるモデル出力との間の差異を低減させるためのモデルの一部または全部のパラメータの値を修正する方法を決定することとを含む。
【0015】
機械学習方法のサブカテゴリである、畳み込みニューラルネットワーク(CNN)は、眼画像のセグメント化等の種々の用途において使用されることができる。眼画像は、眼の眼球周囲領域を含むことができ、それは、眼と、眼瞼、眉毛、睫毛、および眼を包囲する皮膚等の眼の周囲の部分とを含む。眼画像は、眼画像内の眼の瞳孔領域、虹彩領域、または強膜領域を生成するためにセグメント化されることができる。眼画像は、眼画像内の眼の周囲の眼瞼等の皮膚を含む眼画像の背景を生成するためにもセグメント化されることができる。セグメント化された眼画像は、虹彩識別および眼追跡のために使用されることができる。
【0016】
眼追跡は、種々の仮想現実(VR)、拡張現実(AR)、または複合現実(MR)用途において有用であり得る。例えば、VR、AR、またはMRデバイスのユーザに表示される仮想メニューは、ユーザの眼の向き(例えば、1つ以上の眼のヨー、ピッチ、またはロールに関する)に基づいて、空間的に位置付けられ得る。ユーザの眼が移動するにつれて、仮想メニューも、適宜、再位置付けされ得る。別の例として、VR、AR、またはMRデバイスのユーザは、眼移動によって、仮想メニューをスクロールし得る。さらなる例として、ユーザは、眼移動を使用して、コマンドをVR、AR、またはMRデバイスに与え得る。さらに、眼追跡は、ディスプレイ整合等の整合方法および適切なレンダリングのために使用されることができる。故に、CNNは、多数の用途のために有用であり得るので、高度のハードウェア利用を達成するCNNの効率的実装は、限定されたリソースを伴う内蔵デバイス(例えば、VR、AR、またはMRデバイス)上での眼追跡および他のコンピュータビジョン方法のロバストな実装等のCNNの用途を可能にすることができる。
【0017】
本明細書に開示されるシステムおよび方法は、コンピュータサーバ、パーソナルコンピュータ、タブレットコンピュータ、モバイルデバイス、または内蔵デバイス等のコンピューティングデバイス上でのCNNの効率的実装を可能にすることができる。コンピューティングデバイスは、ベクトルプロセッサ、超長命令語(VLIW)ベクトルプロセッサ、または単一命令多重データ(SIMD)プロセッサを含むことができる。CNNの効率的実装は、入力活性化マップ、カーネル、または出力活性化マップの効率的データレイアウトに基づくことができる。
【0018】
CNNの畳み込み層は、カーネルのカーネルスタックを含むことができる。畳み込み層のカーネルは、その入力に適用されると、その特定の学習されたカーネルに対する応答を示す結果として生じる出力活性化マップを生成することができる。しかしながら、畳み込みの計算は、計算的に高価または集約的であり得る。そして、畳み込み層は、計算的に高価であり得る。例えば、畳み込み層は、それらが他のタイプのCNN層(例えば、サブサンプリング層)より計算を要求するので、CNNの最も計算的に高価な層であり得る。結果として生じる出力活性化マップは、次いで、CNNの別の層によって処理され得る。CNNの他の層は、例えば、正規化層(例えば、明度正規化層、バッチ正規化(BN)層、ローカルコントラスト正規化(LCN)層、またはローカル応答正規化(LRN)層)、正規化線形層、アップサンプリング層、連結層、プーリング層、全結合層、線形全結合層、ソフトサイン層、再帰層、または任意のそれらの組み合わせを含むことができる。
【0019】
CNNのカーネルスタックは、カーネルのM行と、カーネルのN列とを含むことができ、各列は、カーネルスタックのフィルタバンクとも称される。カーネルスタックのカーネルは、同一幅および同一高さを有することができる。畳み込み層は、M個の入力活性化マップを受信するためのM個の入力チャネルを有することができる。畳み込み層は、N個の出力活性化マップを生成するためのN個の出力チャネルを有することができる。各出力活性化マップは、カーネルスタックのフィルタバンクおよび対応する入力活性化マップの3次元畳み込みの結果であることができる。
【0020】
いくつかの実装では、畳み込み層を効率的に実装するために、カーネルスタックのカーネルの重み値は、カーネルのためのタイルレイアウトに並べ替えられることができる。カーネルのためのタイルレイアウトは、重み値ランネルのタイルを備えている。ランネルは、以下の2つの性質を伴う、重み値の順序付けられたリストであることができる。第1に、ランネル内の重み値の数は、重み値のデータタイプを所与として、SIMDレジスタ等のプロセッサレジスタが一度に含むことができる重み値の数と同一であることができる。例えば、128−ビットSIMDレジスタに対して、ランネルは、8つの半精度浮動小数点重み値または4つの単精度浮動小数点重み値を含むことができる。第2に、ランネルは、カーネルスタックの幅寸法(M)、その後、カーネルスタックの高さ寸法(N)、その後、個々のカーネルの幅寸法、その後、個々のカーネルの高さ寸法に沿って、トラバースすることによって、反復的に埋められることができる。トラバーサルは、ランネルがカーネルスタックのカーネルの重み値で完全に埋められるまで継続する。
【0021】
いくつかの実装では、入力活性化マップのピクセル値は、インターリーブされたレイアウトに並べ替えられることができる。例えば、畳み込み層が、M個の入力活性化マップを受信した後、入力活性化マップのピクセル値は、入力活性化マップのための基本レイアウトから入力活性化マップのためのインターリーブされたレイアウトに並べ替えられることができる。いくつかの実装では、ピクセル値は、第1の入力活性化マップの第1のピクセル値の後、第2の入力活性化マップの第1のピクセルが続き、最後の(すなわち、M番目の)入力活性化マップの第1のピクセル値までそれが続く等のように、順序付けられることができる。最後の入力活性化マップの第1のピクセル値の後、最後の入力活性化マップの第2のピクセル値まで、第1の入力活性化マップの第2のピクセル値、第2の入力活性化マップの第2のピクセル値等と続き得る。この並べ替えは、畳み込み層の入力活性化マップの全てのうちの全てのピクセル値が同様に順序付けられるまで継続することができる。並べ替えプロセスは、大規模な並べ替えられた入力活性化マップをもたらし得、それは、全ての個々の入力活性化マップを含む。並べ替えられた入力活性化マップ内の各インデックス付けされた場所は、そのインデックスにおける個々の入力活性化マップからのピクセル値のクラスタを含むことができる。有利には、この並べ替えは、例えば、CNNの初期畳み込み層または第1の畳み込み層によって、最大で1回、実施される必要しかない。いくつかの実施形態では、並べ替えは、不必要であり得る。例えば、第1の畳み込み層は、1つの入力活性化マップを畳み込み、複数の出力活性化マップを生成することができる。この場合、入力活性化マップのピクセル値の並べ替えは、不必要であり得る。1つの入力活性化マップを畳み込み、複数の出力活性化マップを生成することは、いくつかの2次元(2D)畳み込みを1つの入力活性化マップに対して並行して実施することと考えられ得る。有利には、本明細書に開示される方法は、単一の入力活性化マップに対する2D畳み込みの効率的計算を可能にし得る。
【0022】
インターリーブされたレイアウトにおける畳み込み層の出力活性化マップは、タイル毎に決定されることができる。例えば、出力活性化マップの重み値のクラスタに対して、融合積和演算を出力活性化マップピクセル値、並べ替えられた入力活性化マップピクセル値、およびカーネルタイルに実施する。いくつかの実装では、インターリーブされたレイアウトにおける畳み込み層の出力活性化マップは、出力活性化マップのための基本レイアウトに順序付けられることができる。
【0023】
本明細書に開示されるシステムおよび方法に基づいて効率的に実装されるCNNは、有利には、畳み込み層の処理または数学的側面の観点から、カーネルを用いて、入力活性化マップの畳み込みの効率的計算を可能にすることができる。したがって、CNNに基づく用途は、コンピュータサーバ、パーソナルコンピュータ、タブレットコンピュータ、モバイルデバイス、または内蔵デバイス等のコンピューティングデバイス上で双方向レートで動作し得る。加えて、いくつかの実施形態では、効率的に実装されるCNNは、データ複製が不必要であるので、コンピューティングデバイス(例えば、内蔵デバイスの内蔵プロセッサ)上で利用可能な限定された量の高速メモリの高利用を可能にすることができ、それは、内蔵プロセッサを使用してCNNを実装するための著しい改良である。さらに、本明細書に開示されるデータレイアウトは、畳み込み層ではないCNNの他の層(例えば、アップサンプリングおよびダウンサンプリング層)の効率的処理を可能にすることができる。入力活性化マップを再配列する必要なく、入力活性化マップは、ベクトルプロセッサによって、並行してダウンサンプリングまたはアップサンプリングされることができる。データ並べ替えは、CNNの構造に応じて、1回行われることも、全く行われないこともある。したがって、本明細書に開示されるシステムおよび方法の利点は、効率的畳み込み計算以外にも拡張する。
【0024】
さらに、効率的に実装されるCNNは、高性能または低電力消費を有することができる。いくつかの実装では、本明細書に開示されるシステムおよび方法は、有利には、コンピューティングデバイスのプロセッサが、より短い期間にわたって、オン状態または高周波数状態にあり得るので、CNNを実装するコンピューティングデバイスの電力消費を低減させることができる。CNN、例えば、CNNの畳み込み層の最適化は、所与の電力エンベロープにおいて、改良された最適または最大の性能を達成し得、それは、制約された性能または電力エンベロープを伴うコンピューティングデバイス(例えば、内蔵デバイス)に有用であり得る。
【0025】
畳み込みは、計算的に高価であり、かつ下層ベクトルプロセッサの能力にマッピングするために簡単ではない。最低コストで(例えば、金銭、電力消費、および熱生成上)利用可能なハードウェアリソース(例えば、計算、メモリ、および概してその2つに配分されるプロセッサダイ空間)の利用を最大限にすることが、非常に望ましいので、本開示の方法を使用したハードウェアおよびソフトウェアレベルの両方におけるこの計算的に重い演算の最適化は、有利であり得る。
【0026】
開示される方法は、データを並べ替え、それによって、畳み込みは、計算すること(例えば、方法を使用して畳み込みを実施するために要求される乗累算の数が、演算を正しく行うために数学的に要求されるほぼ最小数の演算に低減されるという意味において)、またはメモリ使用(例えば、im2col等の競合方法と異なり、殆どまたは全く余剰量のメモリが、要求されないという意味において(im2colは、データの複製を犠牲にして、高計算効率を達成し、それは、メモリ全体を非効率的にする))の両方に関して、改良または最適方式でベクトルプロセッサ上で実施され得る。本明細書に開示される実施形態は、実装の柔軟性、性能、および容易性間のトレードオフのバランスを保つ。
【0027】
(例示的2次元畳み込み)
複合問題を解決するための1つのアプローチは、問題をより単純かつより管理可能な構成要素に分け、複合問題が単位として解決することがより容易であり得る構成に全体的に分割され得るまでそれを再帰的に継続することによる分割統治アプローチであり得る。これらの部分問題は、グラフ内の節点または頂点と考えられ得る。
【0028】
これらの部分問題が解法されると、その結果は、元の複合問題に対する解に到達するように何らかの方法で集約される必要がある。部分問題の結果を組み合わせための方法は、単純な数式(例えば、要素毎の加算)から複合数式まで及び得る。部分問題の結果を組み合わせる演算は、グラフにおける接続または縁として表され得る。
【0029】
節点および縁のこのグラフ(部分問題に対応し、部分問題の結果を組み合わせること)は、ネットワークを形成することができ、ネットワークは、ネットワークの入力を受信し、ネットワークの所望の出力に到達するために、一連の計算を入力および中間結果に対して実施する。ネットワークは、それが、このグラフを形成する頂点としてのニューロンと縁としての軸索とを用いて哺乳類の脳が機能する方法を表すという点において、ニューラルネットワークまたは人工ニューラルネットワークと称され得る。ネットワークは、動物における生物学的ニューラルネットワークに類似するが、コンピューティングデバイスによって実装される、計算エンティティであるという意味において、人工である。
【0030】
畳み込み演算は、第3の関数を生成するための2つの関数(例えば、連続関数fおよびg)に関する数学演算であることができる。第3の関数は、2つの元の関数のうちの1つの修正バージョンと考えられ得、それは、元の関数機能のうちの1つが変換される量の関数として、2つの関数の点毎の乗算の積分に基づく。2つの関数fおよびgに関する畳み込み演算は、下記の式(1)として表され得る。
【0032】
したがって、変数tの周りで、2つの関数fおよびgの畳み込みを決定することは、下記の擬似コードによって要約され得る:
(1)合計変数をゼロに設定する
(2)τ変数に対して、負の無限大から正の無限大まで:
(2a)τを上記範囲のリスト内の次の値にとり、
(2b)点f(τ)およびg(t−τ)における関数fおよびgの値を計算し、
(2c)(2b)において計算された2つの値を一緒に乗算し、
(2d)(2c)において計算された値を合計変数に加算し、
(2e)(2a)に戻り、プロセスを繰り返す
(2)の終了。
【0033】
画像処理では、画像の畳み込みは、同様に決定されることができる。例えば、畳み込み層は、その入力として、入力活性化マップを受信することができ、入力活性化マップは、上記の関数gに類似し得る。畳み込み層は、畳み込み層の出力活性化マップを決定するために、カーネルを用いて入力活性化マップを畳み込むことができ、カーネルは、上記の関数fに類似し得る。カーネルは、行列、すなわち、重み値の2次元アレイであることができる。入力活性化マップの値とカーネルの値との乗算は、上記のアクション(2c)に類似する。連続である関数fおよびgと異なり、入力活性化マップは、離散ピクセル値を備え、カーネルは、離散重み値を備えている。したがって、式(1)における積分は、合計することと置換されることができる。
【0034】
図1は、例示的2次元(2D)畳み込み100の略図を示す。例示的2D畳み込み100は、カーネル108を用いて、入力活性化マップ104(入力特徴マップ、入力画像、または入力チャネルとも称される)を畳み込み、出力活性化マップ112(出力特徴マップ、出力画像、または出力チャネルとも称される)を決定する。入力活性化マップ104は、5ピクセル幅と、5ピクセル高さとを伴い、25ピクセル値を含む。入力活性化マップ104内の数は、入力活性化マップ104のピクセル値を示す。示されるように、入力活性化マップ104の5行の各々は、ピクセル値(1,1,1,0,0)、(0,1,1,1,0)、(0,0,1,1,1)、(0,0,1,1,0)、および(0,1,1,0,1)を有することができる。カーネル108は、示されるように、3×3カーネルであり、すなわち、カーネル108は、3の高さの重み値と、3の幅の重み値とを有する。カーネル108内の数は、カーネル108の重み値を示す。カーネル108の3行の重み値は、(1,0,1)、(0,1,0)、および(1,0,1)であることができる。
【0035】
カーネル108を用いた入力活性化マップ104の畳み込みは、下記の式(2)によって表され得る。
【0037】
式中、τは、カーネル108の重み値の位置を表し、tは、出力活性化マップ112のピクセル値の位置を表す。カーネル108の中心における重み値108eは、(0,0)のτ値を有することができる。重み値108aは、(−1,−1)のτ値を有することができる。重み値108gは、(−1,+1)のτ値を有することができる。重み値108iは、(+1,+1)のτ値を有することができる。
【0038】
出力活性化マップ112内の数は、出力活性化マップ112のピクセル値を示す。出力活性化マップ112の中心におけるピクセル値112eは、出力活性化マップ112の位置(2,2)にある。ピクセル値112aは、出力活性化マップ112の位置(1,1)にあることができる。ピクセル値112gは、出力活性化マップ112の位置(1,3)にあることができる。ピクセル値112iは、出力活性化マップ112の位置(3,3)にあることができる。
【0039】
出力活性化マップ112の位置(1,1)におけるピクセル値112aを決定するために、以下の乗算が、実施されることができる:ピクセル値104aは、重み値108jによって乗算されることができ、ピクセル値104bは、重み値108iによって乗算されることができ、ピクセル値104cは、重み値108hによって乗算されることができ、ピクセル値104eは、重み値108gによって乗算されることができ、ピクセル値104fは、重み値108fによって乗算されることができ、ピクセル値104gは、重み値108eによって乗算されることができ、ピクセル値104hは、重み値108cによって乗算されることができ、ピクセル値104iは、重み値108bによって乗算されることができ、ピクセル値104jは、重み値108aによって乗算されることができる。さらに、上記の乗算の結果の累算または合計も、実施されることができる。
【0040】
出力活性化マップ112の他のピクセル値も同様に、決定されることができる。下記の式(3)は、出力活性化マップ112のピクセル値112a−112iを決定することを示す。
【0042】
(例示的3次元畳み込み層)
図2は、畳み込みニューラルネットワークの例示的3次元畳み込み層200を図式的に図示する。畳み込み層200は、M個の入力活性化マップ204a1、204b1、・・・、および204m1を受信するためのM個の入力チャネル204を有することができる。入力活性化マップは、Qの入力活性化マップ幅と、Pの入力活性化マップ高さとを有することができる。入力活性化マップ204a1、204b1、・・・、および204m1は、同一入力活性化マップ幅Qと、入力活性化マップ高さPとを有することができる。
【0043】
畳み込み層200は、畳み込み層200の全てのカーネルのカーネルスタック208を含むことができる。カーネルスタック208は、カーネル208a1−208an、208b1−208bn、および208m1−208mnを含むことができる。カーネルスタック208は、カーネルのM行を含む。カーネルスタック208は、カーネルのN列を含み、各列は、カーネルスタック208のフィルタバンクとも称される。例えば、カーネル208a1、208b1、・・・、および208m1の列は、カーネルスタック208のフィルタバンクを形成する。カーネルスタック208のカーネルは、Kx個の重み値のカーネル幅と、Ky個の重み値のカーネル高さとを有することができ、合計Ky*Kx個の重み値を有する。カーネルスタック208のカーネル208a1−208an、208b1−208bn、および208m1−208mnは、同一カーネル幅Kxおよびカーネル高さKyを有することができる。
【0044】
畳み込み層200は、N個の出力活性化マップ212a1、212a2、および212anを生成するためのN個の出力チャネル212を有することができる。各出力活性化マップは、カーネルスタック208のフィルタバンクおよび対応する入力活性化マップの3次元畳み込みの結果であることができる。出力活性化マップは、Q’の出力活性化マップ幅と、P’の出力活性化マップ高さとを有することができる。出力活性化マップ212a1、212a2、・・・、および212anは、同一出力活性化マップ幅‘Qおよび出力活性化マップ高さP’を有することができる。
【0045】
畳み込み層200の演算は、下記の擬似コードによって要約され得る:
(1)値1から値Nの変数nに対して:
(2a)n番目の出力活性化マップのピクセル値をゼロの値に設定し、
(2b)値1から値Nの変数mに対して:
(3a)n番目の出力活性化マップのピクセル値+=
Convolve(m番目の入力活性化マップ,カーネルスタックの位置(m,n)におけるカーネル)、式中、「Convolve」は、2次元畳み込みを示し、「+=」は、カーネルを用いた入力活性化マップの畳み込みの結果を伴う出力活性化マップの点毎の合計を表す
(2b)の終了
(1)の終了。
【0046】
(単一命令多重データレジスタの例示的利用)
本明細書に開示されるシステムおよび方法は、コンピュータサーバ、パーソナルコンピュータ、タブレットコンピュータ、モバイルデバイス、または内蔵デバイス等のコンピューティングデバイス上でのCNNの効率的実装を可能にすることができる。コンピューティングデバイスは、ベクトルプロセッサ、超長命令語(VLIW)ベクトルプロセッサ、または単一命令多重データ(SIMD)プロセッサを含むことができる。SIMD対応プロセッサまたはアーキテクチャは、命令セットアーキテクチャ(ISA)またはそのISAの特定のハードウェア実装であることができ、「単一命令多重データ」演算の使用を通してデータ並列計算を実施することが可能であり、単一命令は、同一演算を入力データの複数の別個の組に実施することと並行して行われることができる。そのようなISAの非限定的例は、x86上の拡張命令のストリーミングSIMD拡張命令(SSE)ファミリ、Advanced RISC Machine(ARM)上のNEONまたは高度SIMD拡張命令、PowerPC上のAltiVec等を含む。故に、CNNの効率的実装は、SIMD対応アーキテクチャを実装するプロセッサ上のメモリおよび単一命令多重データ(SIMD)実行ユニットの利用を含むプロセッサの最大利用等、利用を改良することができる。
【0047】
いくつかの実装では、カーネルのための望ましい特徴は、カーネルの中心の周囲での等距離を含むことができる。奇数である寸法を伴うカーネル(例えば、3×1カーネル)は、そのような望ましい特徴を有することができる。しかしながら、そのようなカーネルの奇数寸法は、2で除算不可能であり得る。そして、SIMDプロセッサレジスタは、2のべき数(故に、偶数)であるレジスタ幅を有し得る。畳み込みの単純実装は、データ複製または畳み込みを一緒にバンドルすることの一方または両方を用いることなしに、SIMD対応プロセッサのSIMD実行ユニットの完全利用を達成しないこともある。例えば、「im2col」および「col2im」変換が、データ複製のために使用されることができるが、それは、メモリ利用を犠牲にして生じる。さらに、「im2col」および「col2im」変換は、計算的に高価であり得る。畳み込みを一緒にバンドルすることは、(本明細書に開示されるシステムおよび方法と比較して)水平SIMD演算を要求し得、それは、SIMD実行ユニットの利用を減少させ得る余分な演算であり得る。
【0048】
図3は、3×3、1×3、または3×1カーネルの畳み込みによって完全に利用されない幅4の単一命令多重データ(SIMD)レジスタの略図を示す。
図3の左パネルは、3×3カーネル304aを示し、各白色正方形は、カーネル304aの重み値を表す。SIMDレジスタ308aは、カーネル304aの4つの重み値を含むことができる。SIMDレジスタ308aが含み得る重み値の数は、重み値のデータタイプとSIMDレジスタ308aのビット幅(例えば、128ビット)の両方に依存する。したがって、カーネル304aの単純な実装は、SIMDレジスタ308aの完全利用に失敗する。
図3の中央パネルは、1×3カーネル304bを示し、各白色正方形は、カーネル304bの重み値を表す。SIMDレジスタ308bは、カーネル304bの4つの重み値を含むことができる。したがって、カーネル304bの単純な実装は、SIMDレジスタ308b(ならびに4つ以外の幅を伴うSIMDレジスタ)を完全に利用しないこともある。
図3の右パネルは、3×1カーネル304cを示し、各白色正方形は、カーネル304cの重み値を表す。SIMDレジスタ308cは、カーネル304cの4つの重み値を含むことができる。したがって、カーネル304cの単純な実装は、SIMDレジスタ308cの完全利用に失敗する。
【0049】
(畳み込み層の入力アクションマップのピクセル値の例示的並べ替え)
メモリ利用nに悪影響または実質的に悪影響を及ぼさずに、SIMDレジスタの利用を改良するために、入力活性化マップのピクセル値は、並べ替えられることができる。
図4は、畳み込みニューラルネットワークの畳み込み層の入力活性化マップのピクセル値の例示的並べ替え400を図式的に図示する。入力活性化マップのピクセル値の並べ替えは、入力活性化マップを入力活性化マップのための基本レイアウト(基本入力活性化マップレイアウト)から入力活性化マップのためのインターリーブされたレイアウト(インターリーブされた入力活性化マップレイアウト)に変換する。
【0050】
基本入力活性化マップレイアウトでは、入力活性化マップは、第1の入力活性化マップの全てのピクセル値が、第2の入力活性化マップの全てのピクセルの前に記憶される(メモリ場所の観点から)等と続き得るように、チャネル毎に順序付けられ得る。
図4に図示されるように、畳み込み層は、4つの入力活性化マップ404、408、412、および416をその入力として受信することができる。基本レイアウトでは、入力活性化マップ404、408、412、および416のピクセルは、チャネル毎に記憶され得る。例えば、第1の入力活性化マップ404のピクセル値404aおよび404bは、第2の入力活性化マップ408のピクセル値408aおよび408bの前に記憶され得る。別の例として、第2の入力活性化マップ408のピクセル値408aおよび408bは、第3の入力活性化マップ412のピクセル値412aおよび412bの前に記憶され得る。さらに別の例として、第3の入力活性化マップ412のピクセル値412aおよび412bは、第4の入力活性化マップ416のピクセル値416aおよび416bの前に記憶され得る。
【0051】
図4は、4つの入力活性化マップ404、408、412、および416からインターリーブされたレイアウトに並べ替えられた入力活性化マップ420を示す。並べ替えられた入力活性化マップ420は、入力活性化マップ404、408、412、および416のピクセル値を含むことができる。入力活性化マップ404、408、412、および416内の数は、ピクセル値のインデックス場所を示す。インターリーブされたレイアウトでは、第1の入力活性化マップ404の第1のピクセル値404a(入力活性化マップ404のインデックス場所1におけるピクセル値404a)の後、第2の入力活性化マップ408の第1のピクセル値408a(入力活性化マップ408のインデックス場所1におけるピクセル値408a)、第3の入力活性化マップ412の第1のピクセル値412a(入力活性化マップ412のインデックス場所1におけるピクセル値412a)、および第4の入力活性化マップ416の第1のピクセル値416a(入力活性化マップ404のインデックス場所1におけるピクセル値416a)が続き得る。
【0052】
第4の入力活性化マップ416の第1のピクセル値416aの後、第1の入力活性化マップ404の第2のピクセル値404b(入力活性化マップ404のインデックス場所2におけるピクセル値404b)、第2の入力活性化マップ408の第2のピクセル値408b(入力活性化マップ408のインデックス場所2におけるピクセル値408b)、第3の入力活性化マップ412の第2のピクセル値412b(入力活性化マップ412のインデックス場所2におけるピクセル値412b)、および第4の入力活性化マップ416の第2のピクセル値416b(入力活性化マップ416のインデックス場所2におけるピクセル値416b)が続き得る。並べ替えられた入力活性化マップ420では、全ての入力活性化マップ404、408、412、および412のピクセル値は全て、同様に順序付けられ得る。したがって、並べ替えられた入力活性化マップ420内の各インデックス付けされた場所は、そのインデックスにおける個々の入力活性化マップ404、408、412、および416からのピクセル値のクラスタを含むことができる。
【0053】
同様に、畳み込み層が、M個の入力活性化マップを受信後、入力活性化マップのピクセル値は、基本入力活性化マップレイアウトからインターリーブされた入力活性化マップレイアウトに並べ替えられることができる。例えば、ピクセル値は、第1の入力活性化マップの第1のピクセル値後、M番目の入力活性化マップの第1のピクセルまで、第2の入力活性化マップの第1のピクセルが続く等となるように順序付けられることができる。M番目の入力活性化マップの第1のピクセル値の後、M番目の入力活性化マップの第2のピクセル値まで、第1の入力活性化マップの第2のピクセル値、第2の入力活性化マップの第2のピクセル値等と続き得る。この並べ替えは、M個の入力活性化マップの全てのうちの全てのピクセル値が同様に順序付けられるまで継続し得る。並べ替えプロセスは、大規模な並べ替えられた入力活性化マップをもたらし、それは、M個の個々の入力活性化マップを含む。並べ替えられた入力活性化マップ内の各インデックス付けされた場所は、そのインデックスにおける個々の入力活性化マップからのピクセル値のクラスタを含むことができる。
【0054】
故に、出力活性化マップ404、408、412、および416も、入力活性化マップと同一方法でインターリーブされる。入力活性化マップ404、408、412、および416の行および列は、直接、並べ替えられた入力活性化マップ420内の行および列に対応する。例えば、入力活性化マップ404の位置(i,j)は、並べ替えられた入力活性化マップ420の位置(i,j)におけるピクセルのクラスタにインデックスを作る。
【0055】
有利には、この並べ替えは、例えば、CNNの初期畳み込み層または第1の畳み込み層によって、最大で1回、実施される必要しかない。いくつかの実施形態では、並べ替えは、不必要であり得る。例えば、第1の畳み込み層は、1つの入力活性化マップを畳み込み、複数の出力活性化マップを生成することができる。この場合、入力活性化マップのピクセル値の並べ替えは、不必要であり得る。1つの入力活性化マップを畳み込み、複数の出力活性化マップを生成することは、いくつかの2次元(2D)畳み込みを1つの入力活性化マップに並行して実施することと考えられ得る。有利には、本明細書に開示される方法は、単一の入力活性化マップ上での2D畳み込みの効率的計算を可能にし得る。
【0056】
入力活性化マップがインターリーブされたレイアウトでは、畳み込み層の出力活性化マップも、同様のレイアウトにおけるものであることができる。有利には、ピクセル値の並べ替えは、例えば、CNNの初期畳み込み層または第1の畳み込み層によって、最大で1回、実施されることができる。故に、CNNは、インターリーブされたレイアウトへのピクセル値の並べ替えがCNNの1つのみの畳み込み層のために実施され得るので、効率的に実装されることができる。
【0057】
例えば、出力活性化マップのためのインターリーブされたレイアウト(インターリーブされた出力活性化マップレイアウト)における並べ替えられた出力活性化マップは、出力活性化マップのための基本レイアウト(基本出力活性化マップレイアウト)における出力活性化マップを含むことができる。インターリーブされた出力活性化マップレイアウトでは、ピクセル値は、第1の出力活性化マップの第1のピクセル値の後、N番目の出力活性化マップの第1のピクセル値まで、第2の出力活性化マップの第1のピクセルが続く等となるように順序付けられることができる。基本出力活性化マップレイアウトにおける出力活性化マップの数は、Nによって示されることができる。N番目の出力活性化マップの第1のピクセル値の後、N番目の出力活性化マップの第2のピクセル値まで、第1の出力活性化マップの第2のピクセル値、第2の出力活性化マップの第2のピクセル値等と続き得る。N個の出力活性化マップの他のピクセル値も同様に、順序付けられ得る。インターリーブされたレイアウトにおける出力活性化マップは、N個の個々の出力活性化マップを含む。出力活性化マップ内の各インデックス付けされた場所は、そのインデックスにおける個々の出力活性化マップからのピクセル値のクラスタを含むことができる。
【0058】
いくつかの実装では、基本出力活性化マップレイアウトでは、出力活性化マップは、第1の出力活性化マップに属する全てのピクセル値が第2の出力活性化マップに属する全てのピクセルの前に記憶される(メモリ場所の観点から)等となるように、チャネル毎に順序付けられ得る。いくつかの実装では、インターリーブされた出力活性化マップレイアウトにおける並べ替えられた出力活性化マップのピクセル値は、基本出力活性化マップレイアウトに順序付けられることができる。例えば、第1の出力活性化マップは、並べ替えられた出力活性化マップの第1のピクセル、(N+1)番目のピクセル、(2N+1)番目のピクセル等を含むことができる。別の例として、第2の出力活性化マップは、並べ替えられた出力活性化マップの第2のピクセル、(N+2)番目のピクセル、(2N+2)番目のピクセル等を含むことができる。さらに別の例として、N番目の出力活性化マップは、並べ替えられた出力活性化マップのN番目のピクセル、(2
*N)番目のピクセル、(3
*N)番目のピクセル等を含むことができる。
【0059】
有利には、各CNN層後のデータの再シャッフルは、CNN層の出力がインターリーブされた出力活性化マップレイアウトにおけるものであり得るので、不必要であり得る。その結果、入力活性化マップのみが、1回、インターリーブされたレイアウトに並べ替えられる必要がある(例えば、CNNの入力活性化マップ、それは、CNNの入力層の入力活性化マップであり得る)。インターリーブされたレイアウトは、次いで、後続層の入力活性化マップのピクセル値を並べ替えずに、CNNの後続層を通して伝搬することができる。
【0060】
(ランネルのタイルへのカーネルスタックのカーネルの重み値の例示的並べ替え)
畳み込み層400の入力活性化マップ404、408、412、および412が、入力活性化マップタイルレイアウトに並べ替えられると、カーネルスタック208のカーネル208a1−208an、208b1−208bn、および208m1−208mnは、カーネルの基本レイアウトからカーネルのタイルレイアウトに並べ替えられ、内蔵デバイス等のコンピューティングデバイスのプロセッサのロード、算術、または記憶動作のために、ベクトル演算を利用することができる。
図2に示されるように、カーネルスタック208の行の数および入力チャネル204の数は、同一であることができる。カーネルスタック208の列の数および出力チャネル212の数は、同一であることができる。カーネルスタック208のカーネルは、Kx重み値のカーネル幅と、Ky重み値のカーネル高さとを有することができる。
【0061】
図5A−5C、6A、6B、および7は、重み並べ替えの例を図示する。使用される方法に応じて、チャネルの入力および出力数(その結果、カーネルスタック寸法)には、制限が存在しない。制限を有する、説明される方法は、通常、理解がより単純であり、わずかにより高速であり、柔軟性と計算効率のトレードオフを平衡する。メモリ使用に関して、それらは全て、いくつかの実装では、等しく効率的である。第1のステップは、
図5A−5C、6A、6B、および7に図示される全ての方法間で共有される。第1のステップでは、入力チャネルは、上で説明されるように、インターリーブされたフォーマット内に再配列される。言い換えると、第1のチャネルの第1のピクセルは、第2のチャネルの第1のピクセルの前に生じ、それは、順に、n番目のチャネルの第1のピクセルの前に生じ、それは、第1のチャネルの第2のピクセルの前に生じる等と続く。続いて、カーネル重みを並べ替える。本ステップは、使用される方法に基づいて変動する。
【0062】
ニューラルネットワークを訓練することは、基本カーネルレイアウトにおけるカーネルスタックのカーネルの重み値を学習することを含むことができる。ニューラルネットワークを訓練することは、オフラインプロセスであることができるので(例えば、コンピュータサーバ、パーソナルコンピュータ、タブレットコンピュータ、モバイルデバイス、または内蔵デバイス等のコンピューティングデバイスが、結果として生じるニューラルネットワークを使用して、画像セグメント化および眼追跡を実施する前)、開示されるシステムおよび方法を使用したカーネルの重み値の並べ替えは、有利には、ニューラルネットワークのランタイム性能の損失を伴わずに、オフライン様式で1回実施されることができる(例えば、カーネルの重み値を学習した後)。本明細書に開示される方法は、内蔵プロセッサ、通常の中央処理ユニット(CPU)、グラフィカル処理ユニット(GPU)、または専用ハードウェア特定用途向け集積回路(ASIC)設計を伴うコンピューティングデバイス上にCNNを効率的に実装するために使用されることができる。
【0063】
図5A−5Cは、カーネルスタック208のカーネルの重み値をランネルのタイルを備えているタイルフォーマットに並べ替える例を図式的に図示する。カーネル寸法に関する制限は、これらの例には存在しない。
図5Aは、畳み込み層200の2×2カーネルスタック208を示し、2行のカーネルと、2列のカーネルとを伴う。カーネルの第1の行は、カーネル504と、カーネル508とを含む。カーネルの第2の行は、カーネル512と、カーネル516とを含む。カーネルスタック208の行の数と入力チャネル204の数とは、同一であることができ、カーネルスタック208の列の数と出力チャネル212の数とは、同一であることができるので、カーネルスタック208は、2つの入力活性化マップを畳み込み、2つの出力活性化マップを生成する。カーネルスタック208のカーネルは、3×3の寸法を有する。カーネル内の数は、カーネル内の重み値のインデックスを示す。カーネルスタック208のカーネルの重み値は、32ビットのサイズを有し、SIMDレジスタ等のプロセッサレジスタが、64ビットの幅を有する場合、SIMDレジスタは、一度に2つの重み値を含むことができる。
【0064】
カーネルスタック208のカーネル504、508、512、および516の重み値504a−504i、508a−508i、512a−512i、および516a−516iは、カーネルの基本レイアウト(基本カーネルレイアウト)からカーネルのタイルレイアウト(タイルカーネルレイアウト)に並べ替えられることができる。カーネルのタイルレイアウトは、ランネルのタイルを含むことができる。いくつかの実装では、ランネルは、以下の性質を伴う重み値の順序付けられたリストであることができる。第1に、ランネル内の重み値の数は、重み値のデータタイプを所与として、SIMDレジスタ等のプロセッサレジスタが一度に含むことができる重み値の数と同一であることができる。例えば、128−ビットSIMDレジスタに対して、ランネルは、半浮動のカーネルのための8つの半精度浮動小数点重み値(16ビット浮動小数点数)または浮動のカーネルのための4つの単精度浮動小数点重み値(32ビット浮動小数点数)を含むことができる。
【0065】
第2に、ランネルは、カーネル内の恣意的開始点を所与として、以下のトラバーサル優先順位に関して、反復的に埋められることができる:
(1)カーネルスタック208の幅寸法(N寸法またはカーネルスタックx方向(Sx)、それは、
図5Aに図示されるカーネルスタック208に関する2と等しい)に沿ってトラバースする
(2)カーネルスタック208の高さ寸法(M寸法またはカーネルスタックy方向(Sy)、それは、
図5Aに図示されるカーネルスタック208に関する2と等しい)に沿ってトラバースする
(3)個々のカーネルの幅寸法(Kx、それは、
図5Aに図示されるカーネルスタック208のカーネルに関する2と等しい)に沿ってトラバースする
(4)個々のカーネルの高さ寸法(Ky、それは、
図5Aに図示されるカーネルスタック208のカーネルに関する2と等しい)に沿ってトラバースする
トラバーサルは、ランネルが重み値で完全に埋められるまで継続する。
【0066】
いくつかの実装では、タイルは、ランネルの順序付けられたリストであることができ、ランネルの数は、「タイル」が、常時、カーネルスタック幅境界(カーネルスタック行境界とも称される)上で開始し、カーネルスタック幅境界上で終了するように選定され得る。したがって、タイルは、最後のランネルがカーネルスタック行の最後で終了するまで、徐々に多くのランネルで埋められることができる。
【0067】
64ビット幅を伴うSIMDレジスタに対して、ランネル幅も、64ビットであることができる。カーネルの重み値が、32ビットのサイズを有する場合、64ビットSIMDレジスタは、2つの重み値を含むことができる。したがって、ランネルは、2つの32ビット重み値を含むことができる。タイルあたりのランネルの数は、上記のトラバーサル優先順位に基づいて、1であり得る。すなわち、ランネルは、最初に、カーネル504のインデックス場所1において、重み値504aで、次いで、カーネル508のインデックス場所1において、重み値508aで埋められ得る。重み値504aおよび508aで埋めた後、ランネルは、完全に埋められる。重み値504aは、カーネルスタック幅境界にあり、重み値508aは、別のカーネルスタック幅境界にあるので、重み値504aおよび508aを伴うランネルを伴うタイルは、カーネルスタック幅境界で開始し、カーネルスタック幅境界で終了する。したがって、タイルあたりのランネルの数は、1であり得る。
【0068】
図5Bは、
図5Aに示される基本レイアウトにおけるカーネルスタック208から変換されたタイルカーネルレイアウトにおけるカーネルスタック208m1を示す。タイルレイアウトにおけるカーネルスタック208m1は、1つ以上のタイルを含むことができる。タイルは、2つの重み値を伴う1つのランネルを含むことができる。カーネルスタック208m1は、そのカーネルスタック208m1が、畳み込み層200の全ての重み値を包含するために必要とされるタイルを含み得るように、畳み込み層200内に全ての重み値を含むことができる。
【0069】
カーネルスタック208m1は、各々が1つのランネルの18枚のタイル520a−520rを含むことができる。カーネルスタック208m1は、表1に示されるタイルを含むことができる。
【0071】
要するに、畳み込み層200は、2×2カーネルスタック(カーネルスタックは、3×3カーネルを含む)を用いて、2つの入力活性化マップを畳み込み、2つの出力活性化マップを生成する。カーネルスタックのカーネルの重み値は、32ビットのサイズを有することができる。したがって、64ビットSIMDレジスタは、2つの重み値を含むことができる(SIMDレーンの数は、2である)。64ビットランネルは、2つの重み値を含むことができる。そして、タイルは、1つのランネルを含むことができる。
【0072】
図5Cは、
図5Aに示される基本レイアウトにおけるカーネルスタック208から変換された別のタイルカーネルレイアウトにおけるカーネルスタック208m2を示す。SIMDレジスタが、92ビット幅を有し、カーネルの重み値が、32ビットのサイズを有する場合、92ビットSIMDレジスタは、3つの重み値を含むことができる。カーネルスタック208m2は、表2に示されるタイルを含むことができる。
【0074】
別の例として、畳み込み層200は、6つの出力活性化マップを生成するために、5×5カーネルを含む4×6カーネルスタックを用いて、4つの入力活性化マップを畳み込むことができる。カーネルスタックのカーネルの重み値は、16ビットのサイズを有することができる。したがって、128ビットSIMDレジスタは、8つの重み値を含むことができる。128ビットランネルは、8つの重み値を含むことができる。そして、タイルは、3つのランネルを含むことができる。この例では、タイルあたりのランネルの数は、カーネルスタック幅境界(すなわち、行の開始)から開始すると、3つのランネルが、次のカーネルスタック幅境界に到達するために要求され得るので、3であり得る。第1のランネルは、カーネルスタック位置(1、1)、(1、2)、(1、3)、(1、4)、(1、5)、(1、6)、(2、1)、および(2、2)におけるカーネルのインデックス場所1にピクセル値を含むことができ、それは、カーネルスタック幅境界で終了しない。第2のランネルは、カーネルスタック位置(2、3)、(2、4)、(2、5)、(2、6)、(3、1)、(3、2)、(3、3)、および(3、4)におけるカーネルのインデックス場所1にピクセル値を含むことができ、それは、カーネルスタック幅境界で終了しない。第3のランネルは、カーネルスタック位置(3、5)、(3、6)、(4、1)、(4、2)、(4、3)、(4、4)、(4、5)、および(4、6)におけるカーネルのインデックス場所1にピクセル値を含むことができ、それは、カーネルスタック幅境界で終了する。
【0075】
(カーネル重みの例示的並べ替え−出力チャネルの数は、SMIDレジスタ幅の倍数と等しい)
図6Aおよび6Bは、カーネルスタック208のカーネルの重み値をランネルのタイルを備えているタイルフォーマットに並べ替える例を図式的に図示する。カーネル寸法に関する制限は、これらの例には存在しない。これらの例に図示される方法は、最も単純かつ効率的であるが、(ネットワーク内のあらゆる畳み込み層からの)出力チャネルの数がベクトルプロセッサのSIMDレジスタ幅の倍数でなければならないという限定を伴う。したがって、方法は、
図5A−5Cを参照して上で説明される方法ほど柔軟ではない。
【0076】
図6Aを参照すると、それは、畳み込み層200の8×8カーネルスタック208を示し、8行のカーネル(M=8)と、8列のカーネル(N=8)とを伴う。カーネルの第1の行は、8つのカーネル601−608を含む。カーネルの第2の行は、8つのカーネル609−616を含む。カーネルの第3の行は、8つのカーネル617−624を含む。カーネルの第4の行は、8つのカーネル625−632を含む。カーネルの第5の行は、8つのカーネル633−640を含む。カーネルの第6の行は、8つのカーネル641−648を含む。カーネルの第7の行は、8つのカーネル649−656を含む。カーネルの第8の行は、8つのカーネル657−664を含む。
【0077】
カーネルスタック208の行の数と入力チャネル204の数とは、同一であることができ、カーネルスタック208の列の数と出力チャネル212の数とは、同一であることができるので、カーネルスタック208は、8つの入力活性化マップを畳み込み、8つの出力活性化マップを生成する。カーネルスタック208のカーネルは、この例では、3×3の寸法を有する。カーネルスタック208のカーネルの重み値が、32ビットのサイズを有し、SIMDレジスタ等のプロセッサレジスタが、64ビットの幅を有する場合、SIMDレジスタは、一度に2つの重み値を含むことができる。
【0078】
図6Aは、レジスタ幅が4つの要素である場合のメモリ内にカーネル重みを配列するステップを示す。これは、ネットワークの設計時に実施される1回限りの動作である。カーネルスタック208の重み値601a−601i、602a−602i、・・・、663a−663i、および664a−664iは、カーネルの基本レイアウト(基本カーネルレイアウト)からカーネルのタイルレイアウト(タイルカーネルレイアウト)に並べ替えられることができる。カーネル重みの略図内の数は、並べ替え後の重み値の順序を示す。カーネルのタイルレイアウトは、ランネルのタイルを含むことができる。いくつかの実装では、ランネルは、以下の性質のうちの1つ以上のものを伴う重み値の順序付けられたリストであることができる。第1に、ランネル内の重み値の数は、重み値のデータタイプを所与として、SIMDレジスタ等のプロセッサレジスタが一度に含むことができる重み値の数と同一であることができる。例えば、128−ビットSIMDレジスタに対して、ランネルは、半浮動のカーネルのための8つの半精度浮動小数点重み値(16ビット浮動小数点数)または浮動のカーネルのための4つの単精度浮動小数点重み値(32ビット浮動小数点数)を含むことができる。
【0079】
第2に、ランネルは、カーネル内の恣意的開始点を所与として、以下のトラバーサル優先順位に関して、反復的に埋められることができる:
(1)カーネルスタック208の幅寸法(N寸法またはカーネルスタックx方向(Sx)、それは、
図6Aに図示されるカーネルスタック208に関する8と等しい)に沿ってトラバースする
(2)個々のカーネルの幅寸法(Kx、それは、
図6Aに図示されるカーネルスタック208のカーネルに関する3と等しい)に沿ってトラバースする
(3)カーネルスタック208の高さ寸法(M寸法またはカーネルスタックy寸法(Sy)、それは、
図6Aに図示されるカーネルスタック208に対する8と等しい)に沿ってトラバースする
(4)個々のカーネルの高さ寸法(Ky、それは、
図6Aに図示されるカーネルスタック208のカーネルに対する3と等しい)に沿ってトラバースする
トラバーサルは、ランネルが重み値で完全に埋められるまで継続する。
【0080】
このトラバーサルは、代替として、以下のように表され得る:
(1)各Sxに対して
(2)各Kyに対して
(3)各Syに対して
(4)各Kxに対して。
【0081】
いくつかの実装では、タイルは、ランネルの順序付けられたリストであることができ、ランネルの数は、「タイル」が、常時、カーネルスタック幅境界(カーネルスタック行境界とも称される)上で開始せず、カーネルスタック幅境界上で終了するように選定され得る。
図6Aに図示されるように、カーネル601−604、609−612、617−620、625−628、633−636、641−644、649−652、および657−660の重み値は、並べ替えられ、プロセッサの1つのコア上で処理されることができる。カーネル605−608、613−616、621−624、629−632、637−640、645−649、653−656、および661−664の重み値は、並べ替えられ、プロセッサの別のコア上で処理されることができる。いくつかの実装では、タイルは、ランネルの順序付けられたリストであることができ、ランネルの数は、「タイル」が、常時、カーネルスタック幅境界(カーネルスタック行境界とも称される)上で開始し、カーネルスタック幅境界上で終了するように選定され得る。
【0082】
128ビット幅を伴うSIMDレジスタに対して、ランネル幅も、128ビットであることができる。カーネルの重み値が、8ビットのサイズを有する場合、128ビットSIMDレジスタは、8つの重み値を含むことができる。したがって、ランネルは、8つの8ビット重み値を含むことができる。タイルあたりのランネルの数は、上記のトラバーサル優先順位に基づくことができる。すなわち、ランネルは、重み値601a、602a、603a、604a、601b、602b、603b、604b、601c、602c、603c、604c、609a、・・・、612c、・・・、657a、・・・、660c、601d、602d、603d、604d、601e、602e、603e、604e、601f、602f、603f、604f、609d、・・・、612f、・・・、657d、・・・、660f、601g、602g、603g、604g、601h、602h、603h、604h、601i、602i、603i、604i、609g、・・・、612i、・・・、657g、・・・、および660iで埋められることができる。これらの重み値は、1つのプロセッサコアを用いて処理されることができる。残りの重み値も同様に、
図6Aに図示されるように順序付けられ、別のプロセッサコアを用いて処理されることができる。
【0083】
図6Bは、
図6Aに示されるカーネルスタック208のカーネルの重み値をランネルのタイルを備えているタイルフォーマットに並べ替える別の例を図式的に図示する。カーネルスタック208の重み値601a−601i、602a−602i、・・・、663a−663i、および664a−666iは、カーネルの基本レイアウト(基本カーネルレイアウト)からカーネルのタイルレイアウト(タイルカーネルレイアウト)に並べ替えられることができる。カーネル重みの略図内の数は、並べ替え後の重み値の順序を示す。カーネルのタイルレイアウトは、ランネルのタイルを含むことができる。いくつかの実装では、ランネルは、以下の性質のうちの1つ以上のものを伴う重み値の順序付けられたリストであることができる。第1に、ランネル内の重み値の数は、重み値のデータタイプを所与として、SIMDレジスタ等のプロセッサレジスタが一度に含むことができる重み値の数と同一であることができる。例えば、128−ビットSIMDレジスタに対して、ランネルは、半浮動のカーネルのための8つの半精度浮動小数点重み値(16ビット浮動小数点数)または浮動のカーネルのための4つの単精度浮動小数点重み値(32ビット浮動小数点数)を含むことができる。
【0084】
第2に、ランネルは、カーネル内の恣意的開始点を所与として、以下のトラバーサル優先順位に関して、反復的に埋められることができる:
(1)カーネルスタック208の幅寸法(N寸法またはカーネルスタックx方向(Sx)、それは、
図6Bに図示されるカーネルスタック208に関する8と等しい)に沿ってトラバースする
(2)個々のカーネルの高さ寸法(Ky、それは、
図6Bに図示されるカーネルスタック208のカーネルに関する3と等しい)に沿ってトラバースする
(3)カーネルスタック208の高さ寸法(M寸法またはカーネルスタックy寸法(Sy)、それは、
図6Bに図示されるカーネルスタック208に関する8と等しい)に沿ってトラバースする
(4)個々のカーネルの幅寸法(Kx、それは、
図6Bに図示されるカーネルスタック208のカーネルに関する3と等しい)に沿ってトラバースする
トラバーサルは、ランネルが重み値で完全に埋められるまで継続する。
【0085】
このトラバーサルは、代替として、以下のように表され得る:
(1)各Sxに対して
(2)各Kyに対して
(3)各Syに対して
(4)各Kxに対して。
【0086】
いくつかの実装では、タイルは、ランネルの順序付けられたリストであることができ、ランネルの数は、「タイル」が、常時、カーネルスタック幅境界(カーネルスタック行境界とも称される)上で開始せず、カーネルスタック幅境界上で終了するように選定され得る。
図6Aに図示されるように、カーネル601−604、609−612、617−620、625−628、633−636、641−644、649−652、および657−660の重み値は、並べ替えられ、プロセッサの1つのコア上で処理されることができる。カーネル605−608、613−616、621−624、629−632、637−640、645−649、653−656、および661−664の重み値は、並べ替えられ、プロセッサの別のコア上で処理されることができる。いくつかの実装では、タイルは、ランネルの順序付けられたリストであることができ、ランネルの数は、「タイル」が、常時、カーネルスタック幅境界(カーネルスタック行境界とも称される)上で開始し、カーネルスタック幅境界上で終了するように選定され得る。
【0087】
64ビット幅を伴うSIMDレジスタに対して、ランネル幅も、64ビットであることができる。カーネルの重み値が、32ビットのサイズを有する場合、64ビットSIMDレジスタは、2つの重み値を含むことができる。したがって、ランネルは、2つの32ビット重み値を含むことができる。タイルあたりのランネルの数は、上記のトラバーサル優先順位に基づくことができる。すなわち、ランネルは、重み値601a、602a、603a、604a、601b、602b、603b、604b、601c、602c、603c、604c、609a、・・・、612c、・・・、657a、・・・、660c、601d、602d、603d、604d、601e、602e、603e、604e、601f、602f、603f、604f、609d、・・・、612f、・・・、657d、・・・、660f、601g、602g、603g、604g、601h、602h、603h、604h、601i、602i、603i、604i、609g、・・・、612i、・・・、657g、・・・、および660iで埋められることができる。これらの重み値は、1つのプロセッサコアを用いて処理されることができる。残りの重み値も同様に、
図6Bに図示されるように順序付けられ、別のプロセッサコアを用いて処理されることができる。
【0088】
(カーネル重みの例示的並べ替え−追加の並列処理)
図7は、カーネルスタック208のカーネルの重み値をランネルのタイルを備えているタイルフォーマットに並べ替える例を図式的に図示する。
図7に説明される方法は、単純であり、効率的であるが、
図6A−6Bに説明される方法より制限的である。方法は、
図5A−5Cに説明される方法ほど柔軟ではない。しかしながら、より多くの並列処理が、
図7に説明される方法を用いて可能である。方法は、(Kx*Ky*Sy)mod(レジスタ幅)=0であるとき、非常に効率的である。
【0089】
図7を参照すると、それは、畳み込み層200の8×8カーネルスタック208を示し、8行のカーネル(M=8)および8列のカーネル(N=8)を伴う。カーネルの第1の行は、8つのカーネル601−608を含む。カーネルの第2の行は、8つのカーネル609−616を含む。カーネルの第3の行は、8つのカーネル617−624を含む。カーネルの第4の行は、8つのカーネル625−632を含む。カーネルの第5の行は、8つのカーネル633−640を含む。カーネルの第6の行は、8つのカーネル641−648を含む。カーネルの第7の行は、8つのカーネル649−656を含む。カーネルの第8の行は、8つのカーネル657−664を含む。
【0090】
カーネルスタック208の行の数と入力チャネル204の数とは、同一であることができ、カーネルスタック208の列の数と出力チャネル212の数とは、同一であることができるので、カーネルスタック208は、8つの入力活性化マップを畳み込み、8つの出力活性化マップを生成する。カーネルスタック208のカーネルは、この例では、3×3の寸法を有する。カーネルスタック208のカーネルの重み値が、32ビットのサイズを有し、SIMDレジスタ等のプロセッサレジスタが、64ビットの幅を有する場合、SIMDレジスタは、一度に2つの重み値を含むことができる。
【0091】
カーネルスタック208の重み値601a−601i、602a−602i、・・・、663a−663i、および664a−664iは、カーネルの基本レイアウト(基本カーネルレイアウト)からカーネルのタイルレイアウト(タイルカーネルレイアウト)に並べ替えられることができる。カーネル重みの略図内の数は、並べ替え後の重み値の順序を示す。いくつかの実装では、ランネルは、以下の性質のうちの1つ以上のものを伴う重み値の順序付けられたリストであることができる。第1に、ランネル内の重み値の数は、重み値のデータタイプを所与として、SIMDレジスタ等のプロセッサレジスタが一度に含むことができる重み値の数と同一であることができる。例えば、128−ビットSIMDレジスタに対して、ランネルは、半浮動のカーネルのための8つの半精度浮動小数点重み値(16ビット浮動小数点数)または浮動のカーネルのための4つの単精度浮動小数点重み値(32ビット浮動小数点数)を含むことができる。
【0092】
第2に、ランネルは、カーネル内の恣意的開始点を所与として、以下のトラバーサル優先順位に関して、反復的に埋められることができる:
(1)個々のカーネルの高さ寸法(Ky、それは、
図7に図示されるカーネルスタック208のカーネルに関する3と等しい)に沿ってトラバースする
(2)カーネルスタック208の高さ寸法(M寸法またはカーネルスタックy寸法(Sy)、それは、
図7に図示されるカーネルスタック208に対する8と等しい)に沿ってトラバースする
(3)個々のカーネルの幅寸法(Kx、それは、
図7に図示されるカーネルスタック208のカーネルに関する3と等しい)に沿ってトラバースする
(4)カーネルスタック208の高さ寸法(M寸法またはカーネルスタックy寸法(Sx)、それは、
図7に図示されるカーネルスタック208に対する8と等しい)に沿ってトラバースする
トラバーサルは、ランネルが重み値で完全に埋められるまで継続する。
【0093】
このトラバーサルは、代替として、以下のように表され得る:
(1)各Sxに対して
(2)各Syに対して
(3)各Kyに対して
(4)各Kxに対して。
【0094】
いくつかの実装では、タイルは、ランネルの順序付けられたリストであることができ、ランネルの数は、「タイル」が、常時、カーネルスタック高さ境界(カーネルスタック列境界とも称される)上で開始し、カーネルスタック高さ境界上で終了するように選定され得る。
図6Aに図示されるように、カーネルの重み値601、609、617、625、633、641、649、および657は、並べ替えられ、プロセッサの第1のコア上で処理されることができ、カーネルの重み値602、610、618、626、634、642、650、および658は、並べ替えられ、プロセッサの第2のコア上で処理されることができる等と続く。
【0095】
128ビット幅を伴うSIMDレジスタに対して、ランネル幅も、128ビットであることができる。カーネルの重み値が、8ビットのサイズを有する場合、128ビットSIMDレジスタは、8つの重み値を含むことができる。したがって、ランネルは、8つの8ビット重み値を含むことができる。タイルあたりのランネルの数は、上記のトラバーサル優先順位に基づくことができる。すなわち、ランネルは、重み値601a、601d、601g、609a、609d、609g、617a、617d、617g、625a、625d、625g、633a、633d、633g、641a、641d、641g、649a、649d、649g、657a、657d、657g、601b、601e、601h、・・・657b、657e、657h、601c、601f、601i、・・・657c、657f、および657iで埋められることができる。これらの重み値は、1つのプロセッサコアを用いて処理されることができる。残りの重み値は、図示されるように並べ替えられ、他のプロセッサコアを用いて処理されることができる。
【0096】
いくつかの実施形態では、ランネルは、カーネル内の恣意的開始点を所与として、以下のトラバーサル優先順位に関して、反復的に埋められることができる:
(1)個々のカーネルの幅寸法(Kx、それは、
図7に図示されるカーネルスタック208のカーネルに関する3と等しい)に沿ってトラバースする
(2)個々のカーネルの高さ寸法(Ky、それは、
図7に図示されるカーネルスタック208のカーネルに対する3と等しい)に沿ってトラバースする
(3)カーネルスタック208の高さ寸法(M寸法またはカーネルスタックy寸法(Sy)、それは、
図7に図示されるカーネルスタック208に関する8と等しい)に沿ってトラバースする
(4)カーネルスタック208の高さ寸法(M寸法またはカーネルスタック×寸法(Sx)、それは、
図7に図示されるカーネルスタック208に対する8と等しい)に沿ってトラバースする
トラバーサルは、ランネルが重み値で完全に埋められるまで継続する。
【0097】
このトラバーサルは、代替として、以下のように表され得る:
(1)各Sxに対して
(2)各Syに対して
(3)各Kxに対して
(4)各Kyに対して。
【0098】
(カーネル重みの例示的並べ替え)
図5A−5C、6A、6B、および77を参照して説明される方法は、下記に例証されるように一般化されることができる。「REB」は、SIMDレジスタ内の要素のサイズをビットで示す。「RWB」は、SIMDレジスタの幅をビットで表す。「RWE」は、SIMDレジスタの幅を要素で示す。ランネルは、N個の重みの集合を含み、N=RWEである。言い換えると、以下の関係が成立する:RWE
*REB=RWB(各SIMDレジスタ内の要素の数×各要素が占有するビットの数=SIMDレジスタのビットサイズ)。例えば、128ビットSIMDレジスタは、ハードウェアサポートに応じて、32ビットの4つの要素、または16ビットの8つの要素、または8ビットの32の要素、1ビットの128の要素、および、あらゆる他の可能な組み合わせに分けられることができる。
【0099】
Kwは、カーネルの幅を要素で示す。一般性を失うことなく、カーネル内の各要素は、REBビットであることができる。そうでなければ、SIMDレジスタは、異なるように分割されることができ、ハードウェアがそのビット深度をサポートする場合、各要素のビットサイズがカーネル要素のビットサイズと等しい結果になるか、または、ハードウェアがそのビット深度をサポートしない場合、ロード時、要素サイズを次のサポートされるサイズにプロモートするであろう。K
Hは、要素でのカーネルの高さである。例えば、3×3カーネルは、Kw=3と、Kw=3とを有する。5×1カーネルは、Kw=1と、Kw=5とを有する。
【0100】
Swは、カーネルスタック(カーネル要素ではなく、個々のカーネル)の幅をカーネルで示す。S
Hは、カーネルスタックの高さをカーネルで示す。例えば、3×1カーネルから成る4×12カーネルスタックは、Sw=12(出力チャネルの数とも等しい)、S
H=4(入力チャネルの数とも等しい)、Kw=1、および、K
H=3を有する。
【0101】
下記は、カーネルを列毎および行毎にインデックス付けすることを説明する。インデックス付けは、1次元であることができる。カーネルは、左から右および上から下にインデックス付けされ、それらに1からSw*S
Hまでの数を割り当てることができる。下記の表3は、1つの単一カーネル内の重みを描写し、上での略図は、カーネルスタック内の異なるカーネルを描いていた。
【0103】
各個々のカーネル内の重みも同様に、列毎および行毎にインデックス付けされることができる。下記の表4は、1つの単一カーネル内の重みを描写し、上記の表3は、カーネルスタック内の異なるカーネルを描写する。カーネル内の要素は、左から右および上から下に漸次的にインデックス付けされる。
【0105】
図6Aおよび6Bを参照して説明される方法は、レジスタ幅内の要素の数によって除算可能な行を要求し得る。言い換えると、(Sw*Kw)mod(RWE)=0である。しかし、それが該当する場合、全ての合理的配列が、以下によって与えられることができる。
【0106】
関連付けられたインデックスの昇順において、カーネルスタック(表3)の精査を開始する。カーネル、すなわち、N(N=RWE)個のカーネルを一度にトラバースし、N(N=RWE)個の重みを各個々のカーネルの対応する(例えば、同一)インデックス(表4)から選別することによって、ランネルを構成する。次いで、表3内のインデックスに従って、別の(または同一)バッチのN個のカーネルを選択し、対応するインデックスを伴うN個の重みを選別することによって、別のランネルを構成する。同一カーネルが、選定されることができるが、選択された重みは、異なっていなければならず、そうでなければ、重みは、複製される結果となるであろう:例えば、最も単純かつ合理的配列は、
図6Aに描写されるものとなるであろう。すなわち、カーネル1重み1、その後、カーネル2重み1、その後、カーネル3重み1、・・・、その後、カーネルN(Nは、RWEと等しい)重み1、その後、カーネル1重み2、・・・、その後、カーネルN重み2、・・・、その後、カーネル1重みM(M=Kw*K
H)、・・・、その後、カーネルN重みM、その後、全てのカーネルが使い果たされるまで、第2のバッチのN個のカーネルのための正確に同一のパターンが続く。
【0107】
全ての可能な配列(その大部分は、単純ではないが、確かに可能な)は、以下のトラバーサルによって与えられるであろう:N個のカーネルをカーネルスタックのN個の異なる列から選択する(言い換えると、カーネルスタックの同一列からの2つのカーネルは、存在しない)。次いで、ランネルをN(N=RWE)個の重みから構成し、各々は、前述の選択されたカーネルのうちの1つからのものである。各カーネルが、全ての重みが使い果たされるまで、スタックの別個の列から生じなければならないという限定を伴って、別のランネルを別の(または同一)バッチのN個のカーネルからの別のN個の重みから作ることによって、プロセスを繰り返す。上記または下記に述べられるトラバーサルのいずれかによって与えられる各個々の配列は、正しい出力に到達するために、若干異なるアルゴリズム(ソフトウェアコードまたはハードウェア論理であるべき)を要求する。いくつかの実施形態では、同一アルゴリズムは、異なる配列に適用されることができない。
【0108】
図7を参照して説明される方法に関して、上記の定義が、適用されるが、トラバーサルは、若干異なる。本実施形態では、選択されたカーネルは、1つの列に限定され得る(
図6Aおよび6Bを参照して説明される方法のように、それらを異なる列から生じさせるように強制するものとは対照的に)。表3は、表5に示されるように、上から下および左から右に(左から右および上から下とは対照的に)再インデックス付けされることができる。
【0110】
関連付けられたインデックスの昇順において、カーネルスタック(表5)をトラバースする。カーネル、すなわち、N(N=RWE)個のカーネルを一度にトラバースし、ランネルを対応する(例えば、同一)インデックスの各個々のカーネル(表4)からのN(N=RWE)個の重みから構成する。次いで、表5内のインデックスに従って、別の(または同一)バッチのN個のカーネルを選択し、ランネルを対応するインデックスを伴う別のN個の重みから形成する。全ての可能な(但し、大部分は、単純ではない)配列が、本トラバーサルによって到達されることができる:N個のカーネルをカーネルスタックの同一列から選択する。次いで、ランネルをN(N=RWE)個の重みから作り、各々は、前述の選択されたカーネルのうちの1つからのものである。全てのカーネルが、全ての重みが使い果たされるまで、同一列のスタックから生じなければならないという限定を伴って、別のN個の重みを別の(または同一)バッチのN個のカーネルから選別することによって、プロセスを繰り返す。異なる配列は、若干異なるアルゴリズムを要求し得る。
【0111】
(タイル毎に出力活性化マップを決定する例示的プロセス)
入力活性化マップのピクセル値(例えば、入力活性化マップ404、408、412、および416)を並べ替え、メモリ内のカーネルスタック208のカーネルの重み値をランネル毎に並べ替えた(例えば、
図5A−5Cに示される並べ替え)後、重み値は、タイル毎に処理され、下記の例示的擬似コードによって概略されるように、出力活性化マップを決定することができる:
(1)並べ替えられた出力活性化マップの各行rに対して、
(2)出力活性化マップの各列cに対して、
(3a)位置(c,r)における並べ替えられた出力活性化マップの値をゼロの値に設定する
(3b)カーネルスタックの各タイルに対して、
(4)カーネルスタックのそのタイルの各ランネル、および対応する並べ替えられた入力活性化マップピクセル値(または、2つ以上の対応する並べ替えられた入力活性化マップピクセル値)に対して、
(5a)対応する並べ替えられた入力活性化マップピクセル値をロードし、SIMDレジスタに複製する
(5b)並べ替えられた出力活性化マップピクセル値、並べ替えられた入力活性化マップピクセル値、およびランネルをFMADD(FMADDは、融合積和演算を示す)する
(4)の終
(3b)の終了
(3c)並べ替えられた出力活性化マップの値のクラスタを位置(c,r)における出力活性化マップに記憶する
(2)の終
ステップ(1)の終了。
【0112】
いくつかの実装では、アクション(4)および(5)は、FMADD演算の効率的実装のために完全に展開されることができる。
【0113】
上記の例示的擬似コードは、以下のように書かれ得る:
出力活性化マップの各行に対して
出力活性化マップの各列に対して
//出力タイルを0に初期化する
output_tile={0}
カーネルスタックの各タイルに対して
//以下のループは完全に展開されることができる
そのカーネルスタックタイルの各ランネル、および対応する入力タイルに対して
FMADD output_tile, input_tile および kernel_tileの対応するランネル
‘row’および‘column’において、出力活性化マップにoutput_tileを記憶する。
【0114】
図8は、タイル毎に出力活性化マップを決定することを図示するための畳み込みニューラルネットワークの例示的3D畳み込み層800を図式的に図示する。CNN800は、
図2に示されるCNN200の例であり、2つの入力活性化マップ204a1および204a2を受信するための2つの入力チャネル204(M=2)と、2つの出力活性化マップ212a1および212a2を決定するための2つの出力チャネル212(N=2)とを伴う。
図8では、カーネルスタック208は、カーネル208a1、208a2、208b1、および208b2を含み、各カーネルは、1×1(Ky=1およびKx=1)の寸法を伴う。SIMDレジスタが、重み値のデータタイプを所与として、カーネルスタック208の2つの重み値を含むことができ、レジスタの幅が、2である場合、1つのランネルを伴うタイル2は、カーネル208a1と、カーネル208a2とを含み、1つのランネルを伴うタイル2は、カーネル208b1と、カーネル208b2とを含む。
【0115】
ゼロベースのインデックス付けでは、チャネル0(すなわち、出力活性化マップ212a1)を決定するために、出力(0,0,0)および出力(1,0,0)として略される、出力チャネル212の行0および列0は、以下の演算を実施する:
(1)入力(0,0,0)をロードし、SIMDレジスタに複製する(入力(0,0,0)は、入力チャネル204のチャネル0(すなわち、入力活性化マップ204a1)、行0、および列0を示す)
(2)入力(0,0,0)をタイル1のランネル(カーネル208a1および208a2を含む)で乗算し、アクション(2)と累算する
(3)入力(1,0,0)をロードし、SIMDレジスタに複製する
(4)入力(1,0,0)をタイル2のランネル(カーネル208b1および208b2を含む)で乗算する
(5)出力(0,0,0)および出力(1,0,0)を連続して記憶し、インターリーブされた順序を維持する。
【0116】
出力(0,0,1)および出力(1,0,1)を決定するために、以下の演算を実施する:
(1)入力(0,0,1)をロードし、SIMDレジスタに複製する
(2)入力(0,0,1)をタイル1のランネルで乗算する
(3)入力(1,0,1)をロードし、SIMDレジスタに複製する
(4)入力(1,0,1)をタイル2のランネルで乗算し、アクション(2)と累算する
(5)出力(0,0,1)および出力(1,0,1)を連続して記憶する。
【0117】
上記のプロセスは、出力(0,1,0)および出力(1,1,0)、および出力(0,1,1)および出力(1,1,1)を決定するために繰り返されることができる。
【0118】
入力活性化マップのピクセル値を並べ替え、メモリ内のカーネルスタック208のカーネルの重み値をランネル毎に並べ替えた(例えば、
図6Aおよび6Bに示される並べ替え)後、重み値は、タイル毎に処理され、下記の例示的擬似コードによって概略されるように、出力活性化マップを決定することができる:
出力活性化マップの各行に対して
出力活性化マップの各列に対して
//出力ランネルを0に初期化する
output_runnel={0}
//以下のループは完全に展開されることができる
配列(a)に説明されるように各カーネルランネルに対して
FMADD 「入力」、出力、およびカーネル「の対応するランネル」
‘row’および‘column’において、出力活性化マップにoutput_runnelを記憶する。
【0119】
本明細書に説明される異なる配列は、イタリック部分(上記例示的擬似コードの「」内の部分)に影響を及ぼす。言い換えると、カーネルが配列される方法に応じて、ロードおよび乗算されるインターリーブされた活性化マップからの入力の対応するランネルは、異なり得る。
【0120】
入力活性化マップのピクセル値を並べ替え、メモリ内のカーネルスタック208のカーネルの重み値をランネル毎に並べ替えた(例えば、
図7に示される並べ替え)後、重み値は、タイル毎に処理され、下記の例示的擬似コードによって概略されるように、出力活性化マップを決定することができる。
【0121】
出力活性化マップの各行に対して
出力活性化マップの各列に対して
//出力活性化を0に初期化する
output_activation={0}
//以下のループは完全に展開されることができる
配列(a)に説明されるように各カーネルランネルに対して
FMADD 「入力」、出力、およびカーネル「の対応するランネル」
//記憶動作の前に水平ベクトル合計を介して出力ランネルを単一値にする
‘row’および‘column’において、出力活性化マップにhorizontal_vec_sum(output_runnel)を記憶する。
【0122】
本明細書に説明される異なる配列は、イタリック部分(上記例示的擬似コードの「」内の部分)に影響を及ぼす。言い換えると、カーネルが配列される方法に応じて、ロードおよび乗算されるインターリーブされた活性化マップからの入力の対応するランネルは、異なり得る。
【0123】
有利には、いくつかの実施形態では、カーネルスタックの幅が、SIMDレジスタが含み得る重み値の数の倍数であるというランネル設定により、複製が、効率的に働く。いくつかの実施形態では、カーネルスタックの幅は、SIMDレジスタが含み得る重み値の数の倍数ではないこともある。本明細書に開示される方法を効率的に実装するために、実施されるロードおよび記憶のタイプは、特殊化され得る。CNNは、カーネルスタックの幅がSIMDレジスタが含み得る重み値の数の倍数であるように設計されることができる。そのような設計では、より良好なSIMD利用が、達成され得る。
【0124】
(カーネルスタック重み値の複数の行にストラドリングするカーネルスタックランネルを用いてタイル毎に出力活性化マップを決定する例示的プロセス)
図9A−9Bは、カーネルスタック重み値の複数の行にストラドリングするカーネルスタックランネルを用いてタイル毎に出力活性化マップを決定することを図示するための畳み込みニューラルネットワークの例示的3D畳み込み層900を図式的に図示する。CNN900は、
図2に示されるCNN200の例であり、4つの入力活性化マップを受信するための4つの入力チャネル(M=4)と、6つの出力活性化マップを決定するための6つの出力チャネル(N=6)とを伴う。
図9Aでは、4×6の寸法を伴うカーネルスタック208は、カーネル208a1−208a6、208b1−208b6、208c1−208c6、および208d1−208d6を含み、各カーネルは、5×3(Ky=5およびKx=3)の寸法を伴う。
図9Aに示されるように、カーネル208a1−208a6、208b1−208b6、208c1−208c6、および208d1−208d6の各々は、カーネル0−5、6−11、12−17、および18−23として略される。
【0125】
カーネルスタック208のカーネルの重み値は、トリプレット(x,y,z)によって表され得、xは、カーネルを示し、yは、カーネルxの列/幅座標を示し、zは、カーネルxの行/高さ座標を示す。
図9Aに示されるように、カーネル208a4 3の重み値のトリプレット表現は、ゼロベースのインデックス付けを用いて、(3,0,0)−(3,2,0)、(3,0,1)−(3,2,1)、(3,0,2)−(3,2,2)、(3,0,3)−(3,2,3)、および(3,0,4)−(3,2,4)である。
【0126】
設計時にカーネルスタック208のカーネルの重み値をランネルのタイルに並べ替えることは、以下を把握していることを要求し得る:
(1)カーネルスタック208が設計されるアーキテクチャのSIMDレジスタの幅
(2)カーネルスタック208のカーネルの重み値のデータタイプ。
【0127】
例えば、コンピュータアーキテクチャのSIMDレジスタが、128ビットの幅を有し、重み値が、半精度浮動小数点数(すなわち、それぞれ、16ビット)である場合、各ランネルは、8つの重み値(重み値のサイズ16ビットによって除算されるSIMDレジスタの幅128ビット)を保持することができる。
【0128】
カーネルスタック208のカーネルは、カーネルの基本レイアウトからカーネルのタイルレイアウトに並べ替えられることができる。タイルレイアウトにおけるカーネルスタック208は、各々が3つのランネルの14タイルを含むことができる。表6は、トリプレット表現を使用したタイルレイアウトにおけるカーネルスタック208の重み値を示す。
図9では、タイル0、ランネル0は、対角線平行線模様パターンを用いて示され、タイル0、ランネル1は、垂直平行線模様パターンを用いて示され、タイル0、ランネル2は、交差平行線模様パターンを用いて示される。
【0131】
有利には、カーネルスタック208の重み値を並べ替えることは、設計時に1回、生じ得る。さらに、入力活性化マップの並べ替えは、最大でCNNの入力画像あたり1回、生じ得る。例えば、CNNの入力層は、CNNの入力画像を基本レイアウトからインターリーブされたレイアウトに並べ替え得る。
図9Bは、並べ替えられた入力活性化マップ420を示す。
【0132】
いくつかの実施形態では、カーネルスタックランネルの各々は、カーネルスタック内の重み値の1つのみの行または1つの行の一部を含む。したがって、並べ替えられた入力マップのピクセル値は、タイル毎に出力活性化マップを決定するとき、SIMDレジスタに複製されることができる。SIMDレジスタに並べ替えられた入力マップのピクセル値を複製するプロセスは、入力ランネルの構築と称され得る。入力ランネルは、インターリーブされたレイアウトにおける入力マップの1つのチャネル内のピクセルを複製することによって、インターリーブされたレイアウトにおける入力マップから構築されることができる。
【0133】
いくつかの実施形態では、カーネルスタックランネルは、重み値の複数の行にストラドリングすることができる。表6および
図9Aは、いくつかのランネルがカーネルスタック208の重み値の複数の行にストラドリングすることを示す。例えば、表6内のタイル0、ランネル0は、2つの行にストラドリングする。カーネルスタックランネルが、カーネルスタック208の重み値の複数の行にストラドリングする場合、SIMDレジスタは、2つ以上のピクセル値の値を含むことができる。ピクセル値は、ロードされ、2つ以上のSIMDレジスタに複製され得る。これは、各カーネルの各行内の全ての重み値が入力活性化マップのチャネル内のピクセル値によって乗算されなければならないので、必要であり得る。入力ランネルは、インターリーブされたレイアウトにおける入力マップから構築されることができる。例えば、入力ランネルを構築することは、第1の入力チャネルの対応するピクセル値を6回複製し、第2の入力チャネルの対応するピクセル値を2回複製することを含み得る。別の例として、入力ランネルを構築することは、第2の入力チャネルの対応するピクセルを4回複製し、第3の入力チャネルの対応するピクセルを4回複製することを含み得る。さらに別の例として、入力ランネルを構築することは、第3の入力チャネルの対応するピクセルを2回複製し、第4の(および最後の)入力チャネルの対応するピクセルを6回複製することを含み得る。
【0134】
図9Bは、
図9Aに示される例示的3D畳み込み層900のためのインターリーブされたレイアウトにおける並べ替えられた入力活性化マップ420を示す。入力ピクセル値のインターリービングパターンは、入力活性化マップ420の境界に続き得る。同一平行線模様パターンを伴うピクセルは、基本レイアウトにおける同一入力活性化マップに属する。
図9Bでは、各トリプレット(x,y,z)は、チャネルxの行y、列zにおけるピクセル値を表す。表7は、タイルレイアウトにおけるカーネルスタック208のタイルを伴う1つの畳み込みを実施するための入力ランネルを示す。
【0137】
(タイル毎に出力活性化マップを決定することに先立って入力活性化マップのピクセル値およびカーネルの重み値を並べ替える例示的プロセス)
図10は、タイル毎に畳み込みニューラルネットワーク(CNN)の畳み込み層の出力活性化マップを決定する例示的プロセス1000のフロー図であり、それは、随意に、入力活性化マップのピクセル値およびカーネルの重み値をランネルのタイルに並べ替えることを含む。プロセス1000は、ブロック1004から開始し、畳み込みニューラルネットワークの畳み込み層200が、受信される。畳み込み層は、3次元畳み込み層であることができる。図示されるように、
図2を参照すると、畳み込み層200は、M個の入力活性化マップを受信するためのM個の入力チャネル204を有することができる。入力活性化マップは、Qの入力活性化マップ幅と、Pの入力活性化マップ高さとを有することができる。入力活性化マップは、同一入力活性化マップ幅Qと、入力活性化マップ高さPとを有することができる。
【0138】
畳み込み層200は、カーネルのカーネルスタック208を含むことができる。カーネルスタック208は、M行のカーネルと、N列のカーネルとを含み、各列は、カーネルスタック208のフィルタバンクとも称される。カーネルスタック208のカーネルは、Kx個の重み値のカーネル幅と、Ky個の重み値のカーネル高さとを有することができ、合計Ky*Kx重み値を有する。カーネルスタック208のカーネルは、同一カーネル幅Kyと、カーネル高さKxとを有することができる。
【0139】
畳み込み層200は、N個の出力活性化マップを生成するためのN個の出力チャネル212を有することができる。各出力活性化マップは、カーネルスタック208のフィルタバンクおよび対応する入力活性化マップの3次元畳み込みの結果であることができる。出力活性化マップは、Q’の出力活性化マップ幅と、P’の出力活性化マップ高さとを有することができる。出力活性化マップは、同一出力活性化マップ幅‘Qと、出力活性化マップ高さP’とを有することができる。
【0140】
決定ブロック1008では、カーネルスタック208のカーネルの重み値のフォーマットが、決定されることができる。カーネルスタック208のカーネルの重み値が、カーネルのための基本レイアウトにおけるものである場合、プロセス1000は、ブロック1008に進む。ブロック1008では、カーネルスタック208のカーネルの重み値は、カーネルのための基本レイアウトからカーネルのためのタイルレイアウトに並べ替えられることができる。カーネルの重み値は、ロード、算術、または記憶動作のためのベクトル演算を利用するように並べ替えられることができる。
図5A−5Cを参照して図示されるように、カーネルのためのタイルレイアウトは、重み値のランネルのタイルを備えていることができる。ランネルは、2つの性質を伴う重み値の順序付けられたリストであることができる。第1に、ランネル内の重み値の数は、重み値のデータタイプを所与として、SIMDレジスタ等のプロセッサレジスタが一度に含むことができる重み値の数と同一であることができる。例えば、128−ビットSIMDレジスタに対して、ランネルは、半浮動のカーネルのための8つの半精度浮動小数点重み値または浮動のカーネルのための4つの単精度浮動小数点重み値を含むことができる。第2に、ランネルは、カーネルスタック208の幅寸法(M)、その後、カーネルスタック208の高さ寸法(N)、その後、個々のカーネルの幅寸法(Kx)、その後、個々のカーネルの高さ寸法(Ky)に沿ってトラバースすることによって、反復的に埋められることができる。トラバーサルは、ランネルがカーネルのカーネルスタック208の重み値で完全に埋められるまで継続する。CNNの訓練は、オフラインプロセスであることができるので(例えば、コンピュータサーバ、パーソナルコンピュータ、タブレットコンピュータ、モバイルデバイス、または内蔵デバイス等のコンピューティングデバイスが、結果として生じるCNNを使用して、画像セグメント化および眼追跡を実施する前)、ブロック1008におけるカーネルの重み値の並べ替えは、有利には、ニューラルネットワークのランタイム性能の損失を伴わずに、オフライン様式において1回実施されることができる(例えば、カーネルの重み値の学習後)。
【0141】
決定ブロック1006では、カーネルスタック208のカーネルの重み値が、カーネルのためのタイルレイアウトにおけるものである場合、プロセス1000は、ブロック1012に進む。いくつかの実施形態では、カーネルの重み値は、プロセス1000を実装するプログラムのコンパイル時、基本レイアウトからカーネルのためのタイルレイアウトに静的に並べ替えられている。コンパイル時のそのような並べ替えは、カーネルスタック208の幅寸法(M)、カーネルスタック208の高さ寸法(N)、入力活性化マップ幅Q、入力活性化マップ高さP、または畳み込み層200を含むCNNの特定の設定が、コンパイル時に把握され得るので、可能であり得る。したがって、ランタイム時のカーネルスタック208のカーネルの重み値の並べ替えは、ランタイム時には不必要であり得る。
【0142】
ブロック1012では、畳み込み層の入力活性化マップ200が、受信されることができる。例えば、畳み込み層200のM個の入力チャネル204のためのM個の入力活性化マップが、受信されることができる。入力活性化マップは、Qの入力活性化マップ幅と、Pの入力活性化マップ高さとを有することができる。入力活性化マップは、同一入力活性化マップ幅Qと、入力活性化マップ高さPとを有することができる。
【0143】
決定ブロック1014では、入力活性化マップのピクセル値が入力活性化マップのための基本レイアウトまたはインターリーブされたレイアウトにおけるものであるかどうかが、決定されることができる。入力活性化マップのピクセル値が、入力活性化マップのための基本レイアウトにおけるものである場合、プロセス1000は、ブロック1016に進む。ブロック1016では、入力活性化マップのピクセル値は、ピクセル値のクラスタを備えているインターリーブされたレイアウトに並べ替えられる。例えば、畳み込み層が、M個の入力活性化マップを受信後、入力活性化マップのピクセル値は、入力活性化マップのための基本レイアウト(基本入力活性化マップレイアウト)から入力活性化マップのためのインターリーブされたレイアウト(インターリーブされた入力活性化マップレイアウト)に並べ替えられることができる。基本入力活性化マップレイアウトの場合、入力活性化マップは、第1の入力活性化マップの全てのピクセル値が第2の入力活性化マップの全てのピクセルの前に記憶される(メモリ場所の観点から)ことができるように等、チャネル毎に順序付けられ得る。
【0144】
いくつかの実装では、ピクセル値は、第1の入力活性化マップの第1のピクセル値の後、M番目の入力活性化マップの第1のピクセル値まで、第2の入力活性化マップの第1のピクセルが続く等であるように順序付けられることができる。M番目の入力活性化マップの第1のピクセル値の後、M番目の入力活性化マップの第2のピクセル値まで、第1の入力活性化マップの第2のピクセル値、第2の入力活性化マップの第2のピクセル値等が続き得る。この並べ替えは、M個の入力活性化マップの全ての全てのピクセル値が同様に順序付けられるまで継続することができる。並べ替えプロセスは、大規模な並べ替えられた入力活性化マップをもたらし、それは、M個の個々の入力活性化マップを含む。並べ替えられた入力活性化マップ内の各インデックス付けされた場所は、そのインデックスにおける個々の入力活性化マップからのピクセル値のクラスタを含むことができる。
【0145】
決定ブロック1014では、入力活性化マップのピクセル値が、インターリーブされた入力活性化マップレイアウトにおけるものである場合、プロセス1000は、ブロック1020に進む。いくつかの実施形態では、入力活性化マップのピクセル値は、入力活性化マップのピクセル値が別の畳み込み層の出力活性化マップであり得るので、インターリーブされた入力活性化マップレイアウトにおけるものであり得る。この他の畳み込み層の出力活性化マップは、その入力活性化マップがインターリーブされた入力活性化マップレイアウトにおけるものであるので、インターリーブされた入力活性化マップレイアウトにおけるものであり得る。有利には、初期畳み込み層の入力活性化マップ(例えば、CNNの入力活性化マップ)は、畳み込み層に対する全ての入力および出力がデータ順序を保存し得るので、1回のみ、並べ替えられる必要がある。したがって、処理時間は、データ並べ替えの複数回の工程に無駄にされる必要がない。
【0146】
ブロック1020では、インターリーブされた出力活性化マップレイアウトにおける畳み込み層の出力活性化マップが、タイル毎に決定されることができる。例えば、出力活性化マップのタイルに対して、対応する並べ替えられた出力活性化マップピクセル値、並べ替えられた入力活性化マップピクセル値、およびカーネルタイルにFMADD(FMADDは、融合積和演算を示す)する。いくつかの実装では、出力活性化マップのためのインターリーブされたレイアウト(インターリーブされた出力活性化マップレイアウト)内の畳み込み層の出力活性化マップは、出力活性化マップのための基本レイアウト(基本出力活性化マップレイアウト)に順序付けられることができる。インターリーブされた出力活性化マップレイアウトでは、ピクセル値は、N番目の出力活性化マップの第1のピクセル値まで、第1の出力活性化マップの第1のピクセル値、その後、第2の出力活性化マップの第1のピクセル等と順序付けられることができる。出力活性化マップのための基本レイアウト(基本出力活性化マップレイアウト)内の出力活性化マップの数は、Nによって示されることができる。基本出力活性化マップレイアウトでは、出力活性化マップは、第1の出力活性化マップに属する全てのピクセル値が、第2の出力活性化マップに属する全てのピクセルの前に記憶され得る(メモリ場所の観点から)等となるように、チャネル毎に順序付けられ得る。
【0147】
随意に、いくつかの実装では、インターリーブされた出力活性化マップレイアウトにおける並べ替えられた出力活性化マップのピクセル値は、基本出力活性化マップレイアウトに順序付けられることができる。例えば、第1の出力活性化マップは、並べ替えられた出力活性化マップの第1のピクセル、(N+1)番目のピクセル、(2N+1)番目のピクセル等を含むことができる。別の例として、第2の出力活性化マップは、並べ替えられた出力活性化マップの第2のピクセル、(N+2)番目のピクセル、(2N+2)番目のピクセル等を含むことができる。さらに別の例として、N番目の出力活性化マップは、並べ替えられた出力活性化マップのN番目のピクセル、(2
*N)番目のピクセル、(3
*N)番目のピクセル等を含むことができる。
【0148】
(カーネルスタックのカーネルの例示的データレイアウト)
上記に開示されるインターリーブされたレイアウトは、畳み込み層の効率的処理を実施するために利用されることができる。行列乗算方法は、多くのプラットフォーム上の非常に最適化されたルーチンであり得る。そして、それは、常時、異なるアーキテクチャのために継続的に最適化される。他の方法も、行列乗算を使用して、畳み込み層を実施し得る。しかしながら、これらの他の方法は、全ての畳み込み層インスタンス(例えば、「im2col」演算を実施する)のためにデータ複製を要求する。下記の開示される方法は、行列乗算を利用するが、要求され得るコストがかかるデータ複製を排除する方法を示す。
【0149】
図11は、カーネルスタック208のカーネルの重み値をランネルのタイルを備えているタイルフォーマットに並べ替える例を図式的に図示する。いくつかの実装では、図示されるカーネルレイアウトは、分離可能カーネルのために使用されることができる。分離可能カーネルは、1の幅寸法Kxまたは高さ寸法Kyを有することができる。分離可能カーネルは、正確度にわずかな損失を伴って多くの畳み込みニューラルネットワーク(CNN)のために使用されることができる。分離可能カーネルの使用は、分離可能カーネルが一度に単一寸法上で動作するので、CNN内の浮動点演算の量を有意に低減させ得る。例えば、3×3カーネルを伴う畳み込み層は、1×3カーネルを伴う層の後に3×1カーネルを伴う層が続く(または3×1カーネルを伴う層の後に1×3カーネルを伴う層が続く)ように置換され得る。
【0150】
図4に図示される入力活性化マップレイアウトを使用して、入力活性化マップは、式(4)の行列乗算演算内のA行列によって表され得る。
【0152】
カーネルスタックは、B行列によって表され得る。出力活性化マップは、C行列によって表され得、それは、後続のCNN層の入力活性化マップであり得る。いくつかの実装では、式(4)の行列乗算は、出力活性化マップではなく、出力活性化マップの転置を出力するように構成されることができる。この構成では、出力活性化マップは、直接、後続のCNN層に対する入力活性化マップに従い得、それは、ベクトル化記憶を使用して実装されることができる。ベクトル化記憶は、有利には、出力活性化マップのためのインターリーブされたレイアウトの場合、同一インデックスを伴う出力活性化マップのピクセル値が一緒にクラスタ化され得るので、いくつかの実装において使用され得る。
【0153】
図11では、A行列によって表される入力活性化マップは、
図4に図示されるインターリーブされた入力活性化マップレイアウトに類似するインターリーブされたレイアウトを有することができる。例えば、A行列の第1の行は、M番目の入力活性化マップの第1のピクセル値(M番目の入力活性化マップの位置(0,0)におけるピクセル値)まで、第1の入力活性化マップの第1のピクセル値(第1の入力活性化マップの位置(0,0)におけるピクセル値)、その後、第2の入力活性化マップの第1のピクセル値(第2の入力活性化マップの位置(0,0)におけるピクセル値)等を含むことができる。M番目の入力活性化マップの第1のピクセル値の後、第1、第2、およびM番目の入力活性化マップの第2のピクセル値(入力活性化マップの位置(0,1)におけるピクセル値)、その後、第1、第2、およびM番目の入力活性化マップの第3のピクセル値(入力活性化マップの位置(0,2)におけるピクセル値)が続き得る。
【0154】
A行列の第2の行は、第1、第2、およびM番目の入力活性化マップの第2のピクセル値(入力活性化マップの位置(0,1)におけるピクセル値)、その後、第1、第2、およびM番目の入力活性化マップの第3のピクセル値(入力活性化マップの位置(0,2)におけるピクセル値)、その後、第1、第2、およびM番目の入力活性化マップの第4のピクセル値(入力活性化マップの位置(0,3)におけるピクセル値)を含む。
【0155】
図11における行列Aは、データ複製を要求すると考えられ得る。しかしながら、データ複製は、入力活性化マップのストライディングの修正によって回避されることができる。行の全体幅を移動させ、次の行に到達する代わりに、行ストライドは、入力チャネルの数Mであることができる。ピクセル値は、メモリ内で連続的であり得るので、修正される短縮されたストライディングは、実際にデータを複製する必要のないデータ複製を要求すると考えられ得る。有利には、Mが、SIMDレジスタ幅の倍数である場合、修正されるストライディングは、各ロード動作が位置合わせされたロード動作であり得るように保存することができる。位置合わせされたロード動作は、あるプロセッサアーキテクチャ上で要求され得る。さらに、いくつかのプロセッサアーキテクチャに対して、位置合わせされたロード動作は、有利には、位置合わせされていないロード動作と比較して、メモリにアクセスするときのより少ない失速により、性能改良をもたらすことができる。したがって、インターリーブされたデータレイアウトは、このストライディングが実践的最適化となることを可能にする。
【0156】
図11は、インターリーブされた入力画像への1×3カーネルの適用を示す。したがって、パディングを考慮するために、
【0158】
である。A行列は、それが、出力行全体を計算するために、行における全ての列に対して入力画像からの3つの値を必要とするので、その中に
【0160】
個の値を有する。したがって、C行列サイズは、それがN個の出力チャネルの全ての出力チャネルからのピクセルの出力幅数を有するので、単に、
【0162】
である単一行を言う。完全畳み込みの計算を行うために、入力チャネルの高さがHである場合、最終出力を取得するための
図11に示される行列乗算の数は、Hである。有利には、行列乗算の数Hは、1つの大行列乗算の代わりに、実施され得る。データ複製の必要性を防止するための低減されたストライディングを伴うA行列の設定は、出力活性化マップの単一行のために一度のみ適用され得る。出力活性化マップの次の行を計算するとき、本明細書に開示される方法は、分離可能カーネル場合、前の行からの任意のデータを使用しない。
【0163】
図11におけるB行列は、カーネルスタック208の1×3カーネルのタイルレイアウトを示す。分離可能カーネルを伴ういくつかの実装では、1×3カーネルの後、式(5)に示されるように、3×1カーネルを表す第2の行列B2を用いた乗算が続き得る。
【0165】
式中、A2は、3×1カーネルの入力活性化マップを示し、C2は、3×1カーネルの出力活性化マップを表す。
【0166】
いくつかの実装では、3×1カーネルを表す第2の行列B2は、1×3カーネルを表す行列Bのレイアウトと同様または同じであるレイアウトを有することができる。しかしながら、A2行列は、C行列の転置であり得る。式(4)に図示される行列乗算方法の単純修正は、その転置として保存されたC行列をもたらし得る。その転置として保存されたC行列では、B2行列によって表されるカーネル(例えば、3×1カーネル)は、B行列によって表されるカーネル(例えば、1×3カーネル)が同一短縮ストライディング技法を使用して移動する方法と反対方向に沿って移動し得る。
【0167】
分離可能カーネルを伴ういくつかの実施形態では、入力活性化マップは、カーネルがN×1である場合、データが列優先フォーマットであり、カーネルが1×Nである場合、データが行優先フォーマットであるように配列され得る。有利には、データが列優先フォーマットまたは行優先フォーマットであるかどうかは、転置行列を行列乗算の結果として保存することが計算的に高価ではないので、重要ではないこともある。これは、依然として、インターリーブされたレイアウトにより、ベクトル化記憶を利用する。例えば、分離可能な場合では、1つのN×1層の後、1×N層が続く(またはその逆)。転置が第1の層から保存される限り、方法は、カーネル設定のいずれに対しても(すなわち、1×NまたはN×1)同じと考えられる。短縮されたストライディング技法は、計算がデータ複製を伴わずに実施されることを可能にする方法であり得る。この乗算技法の使用には、分離可能カーネル設定(すなわち、1×NまたはN×1)のいずれのタイプのためにも、障壁はない。
【0168】
C行列をその転置として保存することは、有利には、ベクトル化記憶を使用して実装されることができる。結果の転置を保存すること、および結果を直接保存することは、いずれがCNNの次の層のために必要とされるにしても、計算費用を殆ど伴わずに、または最小限に伴って実施されることができる。したがって、データ再シャッフルまたは複製は、不必要であり得る。転置が、C行列のために保存される場合、出力は、直接、次のCNN層への入力として使用されることができる。
【0169】
(例示的性能改良)
本明細書に開示されるシステムおよび方法の例は、9.6GFlops/コアの絶対最大潜在能力を伴うプロセッサを使用して評価された。GFlopは、十億個の不動点命令であり、GFlopsは、1秒あたり行われることができる浮動点命令数を十億単位で表す。SIMDレジスタを埋めることによって、いくつかの不動点演算が、プロセッササイクル毎に実施されることができる。例えば、4つの浮動小数点数を保持するレジスタに対して、例えば、4つの不動点演算が、サイクル毎に実施されることができる。
【0170】
しかしながら、9.6GFlops/コアは、それが、1つの乗算−加算命令が、その出力または任意の必要もしくは有用な制御コードに対して任意の待ち時間を伴わずにサイクル毎に実施されると仮定するので、実際は、到達不可能な数であり得る。例えば、乗算演算および加算動作が、同一サイクル内で実施されない場合、それは、乗算と加算とを融合させること伴う待ち時間の一部を低減させ得るが、最大達成可能潜在能力は、4.8GFlops/コアであり得る。
【0171】
完全空間畳み込み層(3×3カーネル)に対して、SIMDレジスタが8つの浮動小数点数を含むとき、およそ6GFlops/コア(絶対最大GFlopsの67%利用)が達成された。分離可能層(1×3または3×1カーネル)に対して、およそ5GFlops/コア(絶対最大GFlopsの56%利用)が達成された。分離可能設定は、層内により少ない不動点演算を要求し、概して、より少ない演算は、各ループ内で実施され、それは、CNN層あたりの性能の若干の低下につながった。しかしながら、全体的により良好なネットワーク性能が、分離可能層を用いて達成された。結果は、特定のカーネルサイズのための本明細書に開示される方法をアセンブリにおいて一度に1ずつ最適化しながらの実験と推測の組み合わせに基づくものであった。
【0172】
本明細書に開示される方法を用いて達成され得る、コアあたりの不動点命令の数は、異なる実装では異なり得る。例えば、コアあたりの不動点命令の数は、4〜100、10〜90、25〜75、40〜60、または任意のそれらの組み合わせのGFlops/コアの範囲内であることができる。本明細書に開示される方法を用いて達成され得る最大GFlopsのパーセンテージ利用は、異なる実装では異なり得る。例えば、最大GFlopsのパーセンテージ利用は、30%〜95%、40%〜90%、50%〜80%、60%〜70%、または任意のそれらの組み合わせであることができる。
【0173】
GFlops/コアの観点から観察される性能は、600MHzのプロセッサクロックに基づいた。クロック速度が2倍になる場合、それらの数は全て、約2倍増加し、メモリバンクのような相互作用コンポーネントの他の待ち時間に依存し得る。したがって、絶対最大GFlopsのパーセンテージ利用は、プロセッサクロックによって実質的に影響され得ない。
【0174】
観察される性能改良は、非常に効率的様式において、ベクトルアーキテクチャ上でデータを並べ替え、処理する能力の結果であった。このタイプの性能加速は、プロセッサから独立し得、同一または類似利点は、他のベクトルチップにも適用可能であり得る。
【0175】
(例示的用途および利点)
(追加のベクトル化演算)
本明細書に開示される入力活性化マップのインターリーブされたレイアウトは、そうでなければ、ベクトル化することが困難であり得る典型的畳み込みニューラルネットワーク(CNN)における他のベクトル化演算にも有用であり得る。例えば、最大プーリングは、全ての入力活性化マップに適用され得るダウンサンプリング演算である。最大プーリングは、入力活性化マップ内のピクセルのウィンドウ(各寸法において2倍のダウンサンプリングのための2×2)に基づくことができる。最大プーリングは、各ウィンドウの最大値をダウンサンプリングされる出力活性化マップ内のピクセルの値として保存することができる。最大プーリングは、次いで、各寸法内にストライディングを適切に含むことができ、したがって、ピクセル値は、ウィンドウ内の最大値を探すとき、重複しない。データ並べ替えがなければ、最大プーリングは、ベクトルを横断した水平比較、位置合わせされていないロード、複数のロード、またはベクトルを完全に埋めないことのある組み合わせを行うことを要求するので、ベクトル化のために幾分扱いにくい演算であり得る。本明細書に開示されるインターリーブされた入力活性化マップレイアウトでは、すべての入力活性化マップに対するピクセル値は、隣り合わせに記憶されることができる。したがって、最大プーリングは、全ての入力活性化マップのために同時に実施されることができ、入力活性化マップの数がベクトル幅の倍数である場合、完全にベクトル化されることができる。有利には、本明細書に開示される方法は、単一画像にわたってベクトル化することが従来困難である多くの演算(例えば、アップサンプリングまたは転置のような演算)のために利用されることができる。
【0176】
(データ複製または後続の並べ替えの不要性)
いくつかの実装では、入力活性化マップのインターリーブされたレイアウトは、演算が、全くデータ複製を伴わずに、または最小限のみ伴って実施されることを可能にすることができる。したがって、メモリ利用効率は、高くなり得、それは、概して、より少ないメモリおよびより少量の短待ち時間メモリを有し得る内蔵システムに有用であり得る。
【0177】
さらに、初期畳み込み層(例えば、CNNの入力活性化マップ)の入力活性化マップのみが、畳み込み層に対する全ての入力および出力がデータ順序を保存し得るので、1回並べ替えられる必要がある。したがって、処理時間は、データ並べ替えの複数工程において無駄にされる必要がない。
【0178】
(電力効率)
一般に、データの処理に費やされる時間が少ないほど、プロセッサがアイドルまたはクロック解除され得る時間が多くなる。本明細書に開示される方法およびシステムを用いて、データを効率的に処理することによって、電力節約が、CNNを起動しながら、プロセッサリソースを効率的に使用することによって、達成されることができる。さらに、効率的メモリ利用のためにデータ複製を排除することによって、より少ないシステム全体リソースが、メモリ階層内のレベル間の転送のために必要とされ得る。これは、メインメモリが殆どアクセスされ得ず、かつローカルのキャッシュされたメモリが、より良好に、最適に、または最大限に利用され得るので、電力節約をもたらし得る。
【0179】
(レジスタ幅に合致する入力の数への依存性)
本明細書に開示される方法およびシステムは、100%SIMD利用を伴うあらゆる可能な畳み込み層をもたらさないこともある。代わりに、非常に高利用率が、多くの層に関して達成されることができる。そして、畳み込み層の演算のためにレジスタを完全に埋める観点からの完全利用も、いくつかの畳み込み層に対して達成されることができる。SIMD利用は、層に対する入力/出力の数に依存し得、その数は、プロセッサアーキテクチャ上のレジスタに適合し得る値の数の倍数である。しかしながら、この依存は、畳み込みニューラルネットワークを設計および訓練するプロセスが柔軟であり得るので、それほど限定的ではないこともある。例えば、CNNは、CNNが、多くの場合、本開示の方法およびシステムに良好に働く層寸法を有することができるように設計されることができる。
【0180】
(例示的ウェアラブルディスプレイシステム)
いくつかの実施形態では、ユーザデバイスは、ウェアラブルディスプレイデバイスであることができ、またはその中に含まれることができ、有利なこととして、より没入型の仮想現実(VR)、拡張現実(AR)、または複合現実(MR)体験を提供し得、デジタル的に再現された画像またはその一部が、それらが現実のように見える様式、または現実として知覚され得る様式で装着者に提示される。
【0181】
理論によって限定されるわけではないが、人間の眼は、典型的には、深度知覚を提供するために、有限数深度面を解釈し得ると考えられる。その結果、知覚される深度の高度に真実味のあるシミュレーションが、これらの限定された数の深度面の各々に対応する画像の異なる表現を眼に提供することによって達成され得る。例えば、導波管のスタックを含むディスプレイが、ユーザまたは視認者の眼の正面に位置付けられて装着されるように構成され得る。導波管のスタックは、複数の導波管を使用し、画像投入デバイス(例えば、1つ以上の光ファイバを介して画像情報を送る多重化ディスプレイの離散ディスプレイまたは出力端)から、特定の導波管に関連付けられる深度面に対応する特定の角度(および発散量)における視認者の眼に光を向けることによって、3次元知覚を眼/脳に提供するために利用され得る。
【0182】
いくつかの実施形態では、導波管の2つのスタック(視認者の各眼のために1つ)が、異なる画像を各眼に提供するために利用され得る。一例として、拡張現実シーンは、AR技術の装着者は、人物、木、背景における建物、およびコンクリートプラットフォームを特徴とする実世界公園状設定を見るようにし得る。これらのアイテムに加えて、AR技術の装着者は、自身が、実世界プラットフォーム上に立っているロボット像およびマルハナバチの擬人化のように見える、飛んでいる漫画のようなアバタキャラクタも、そのロボットの像およびマルハナバチが実世界に存在していないにもかかわらず、「見えている」と知覚し得る。導波管のスタックは、入力画像に対応する明視野を生成するために使用され得、いくつかの実装では、ウェアラブルディスプレイは、ウェアラブル明視野ディスプレイを備えている。明視野画像を提供するためのウェアラブルディスプレイデバイスおよび導波管スタックの例が、米国特許公開第2015/0016777号(参照することによって、これが含むあらゆるものに関してその全体として本明細書に組み込まれる)に説明されている。
【0183】
図12は、VR、AR、またはMR体験をディスプレイシステム装着者または視認者1204に提示するために使用され得るウェアラブルディスプレイシステム1200の例を図示する。ウェアラブルディスプレイシステム1200は、本明細書に説明される用途または実施形態(例えば、CNNの実行、入力活性化マップもしくはカーネルの値の並べ替え、眼画像セグメント化、または眼追跡)のいずれかを実施するようにプログラムされ得る。ディスプレイシステム1200は、ディスプレイ1208と、そのディスプレイ1208の機能をサポートするための種々の機械的ならびに電子的モジュールおよびシステムとを含む。ディスプレイ1208は、フレーム1212に結合され得、それは、ディスプレイシステム装着者または視認者1204によって装着可能であり、装着者1204の眼の正面にディスプレイ1208を位置付けるように構成される。ディスプレイ1208は、明視野ディスプレイであり得る。いくつかの実施形態では、スピーカ1216が、フレーム1212に結合され、ユーザの外耳道に隣接して位置付けられ、いくつかの実施形態では、示されない別のスピーカが、ユーザの他方の外耳道に隣接して位置付けられ、ステレオ/成形可能音制御を提供する。ディスプレイ1208は、有線導線または無線接続性等によって、フレーム1212に固定して取り付けられる構成、ユーザによって装着されるヘルメットもしくは帽子に固定して取り付けられる構成、ヘッドホンに内蔵される構成、または別様にユーザ1204に(例えば、リュック式構成において、ベルト結合式構成において)除去可能に取り付けられる構成等、種々の構成において搭載され得るローカルデータ処理モジュール1224に動作可能に結合される(1220)。
【0184】
ローカル処理およびデータモジュール1224は、ハードウェアプロセッサならびに不揮発性メモリ、例えば、フラッシュメモリ等の非一過性デジタルメモリを備え得、その両方は、データの処理、キャッシュ、および記憶を補助するために利用され得る。データは、画像捕捉デバイス(カメラ等)、マイクロホン、慣性測定ユニット、加速度計、コンパス、GPSユニット、無線デバイス、および/もしくはジャイロスコープ等の(例えば、フレーム1212に動作可能に結合される、または別様に装着者1204に取り付けられ得る)センサから捕捉されるデータ(a)、ならびに/または、場合によっては処理もしくは読出後のディスプレイ1208への通過のために、遠隔処理モジュール1228および/もしくは遠隔データリポジトリ1232を使用して入手および/もしくは処理されるデータ(b)を含む。ローカル処理およびデータモジュール1224は、それらの遠隔モジュール1228、1232が、互いに動作可能に結合され、ローカル処理およびデータモジュール1224へのリソースとして利用可能であるように、有線または無線通信リンク等を介して、通信リンク1236、1240によって、遠隔処理モジュール1228および遠隔データリポジトリ1232に動作可能に結合され得る。画像捕捉デバイスは、眼画像セグメント化、または眼追跡プロシージャにおいて使用される眼画像を捕捉するために使用されることができる。
【0185】
いくつかの実施形態では、遠隔処理モジュール1228は、画像捕捉デバイスによって捕捉されたビデオ情報等のデータおよび/または画像情報を分析ならびに処理するように構成される1つ以上のプロセッサを備え得る。ビデオデータは、ローカル処理およびデータモジュール1224内に、ならびに/または遠隔データリポジトリ1232内にローカルに記憶され得る。いくつかの実施形態では、遠隔データリポジトリ1232は、デジタルデータ記憶設備を備え得、それは、インターネットまたは「クラウド」リソース構成における他のネットワーキング構成を通して利用可能であり得る。いくつかの実施形態では、全てのデータが、記憶され、全ての計算が、ローカル処理およびデータモジュール1224において実施され、遠隔モジュールからの完全に自律的な使用を可能にする。
【0186】
いくつかの実装では、ローカル処理およびデータモジュール1224および/または遠隔処理モジュール1228は、本明細書に開示される入力活性化マップまたはカーネルの値の並べ替え、眼画像セグメント化、または眼追跡の実施形態を実施するようにプログラムされる。例えば、ローカル処理およびデータモジュール1224および/または遠隔処理モジュール1228は、
図10を参照して説明されるプロセス1000および
図2−9Bおよび11を参照して説明される方法の実施形態を実施するようにプログラムされることができる。ローカル処理およびデータモジュール1224および/または遠隔処理モジュール1228は、本明細書に開示されるバイオメトリック抽出において、入力活性化マップまたはカーネルの値の並べ替え、眼画像セグメント化、または眼追跡技法を使用して、例えば、装着者1204の識別を識別または認証するようにプログラムされることができる。画像捕捉デバイスは、特定の用途のためのビデオ(例えば、眼追跡用途のための装着者の眼のビデオまたはジェスチャ識別用途のための装着者の手または指のビデオ)を捕捉することができる。ビデオは、処理モジュール1224、1228の一方または両方によって、CNNを使用して分析されることができる。ある場合には、入力活性化マップまたはカーネルの値の並べ替え、眼画像セグメント化、または眼追跡の少なくとも一部を(例えば、「クラウド」内の)遠隔処理モジュールにオフロードすることは、計算の効率または速度を改良し得る。CNN100のパラメータ(例えば、重み、バイアス項、プーリング層のためのサブサンプリング係数、異なる層内のカーネルの数およびサイズ、特徴マップの数等)は、データモジュール1224および/または1232内に記憶されることができる。
【0187】
ビデオ分析の結果(例えば、CNN100の出力)は、追加の動作または処理のために、処理モジュール1224、1228の一方または両方によって使用されることができる。例えば、種々のCNN用途では、バイオメトリック識別、眼追跡、ジェスチャの認識または分類、オブジェクト、姿勢等が、ウェアラブルディスプレイシステム1200によって使用され得る。例えば、装着者の眼のビデオは、眼画像セグメント化のために使用されることができ、それは、順に、ディスプレイ1208を通した装着者1204の眼追跡のために、処理モジュール1224、1228によって使用されることができる。ウェアラブルディスプレイシステム1200の処理モジュール1224、1228は、入力活性化マップまたはカーネルの値の並べ替え、眼画像セグメント化、または眼追跡のうちの1つ以上の実施形態を用いて、本明細書に説明されるビデオまたは画像処理用途のいずれかを実施するようにプログラムされることができる。
【0188】
(追加の側面)
第1の側面では、畳み込みニューラルネットワークの畳み込み層の効率的実装のための方法が、開示される。方法は、ハードウェアプロセッサの制御下にあり、方法は、畳み込みニューラルネットワークの畳み込み層を受信することであって、畳み込み層は、カーネルスタックにおけるカーネルを備え、カーネルスタックのカーネルは、基本カーネルレイアウトにおけるものである、ことと、カーネルスタックのカーネルの重み値を基本カーネルレイアウトから複数のカーネルタイルを備えているタイルカーネルレイアウトに並べ替えることであって、カーネルタイルは、複数のカーネルランネルを備え、カーネルランネルは、カーネルスタックのカーネルのいくつかの重み値を備えている、ことと、畳み込み層の入力活性化マップを受信することであって、入力活性化マップは、基本入力活性化マップレイアウトにおけるものである、ことと、入力活性化マップのピクセル値を基本入力活性化マップレイアウトから入力活性化マップピクセルの複数のクラスタを備えているインターリーブされた入力活性化マップレイアウトに並べ替えることと、畳み込み層の出力活性化マップを複数のカーネルタイルおよび入力活性化マップピクセルの複数のクラスタから決定することであって、出力活性化マップは、複数のクラスタ出力活性化マップピクセルを備えているインターリーブされた出力活性化マップレイアウトにおけるものである、こととを含む。
【0189】
第2の側面では、カーネルスタックのカーネルの重み値を基本カーネルレイアウトからタイルカーネルレイアウトに並べ替えることは、カーネルスタックの幅寸法に沿ってトラバースすることと、カーネルスタックの高さ寸法に沿ってトラバースすることと、カーネルスタックのカーネルの幅寸法に沿ってトラバースすることと、カーネルスタックのカーネルの高さ寸法に沿ってトラバースすることとを反復的に行うことを含む、側面1に記載の方法。
【0190】
第3の側面では、カーネルタイルの第1のカーネルランネルは、第1のカーネルスタック幅境界に対応し、カーネルタイルの最後のカーネルランネルは、第1のカーネルスタック幅境界の後続の第2のカーネルスタック幅境界に対応する、側面1−2のいずれか1項に記載の方法。
【0191】
第4の側面では、入力活性化マップのピクセル値を基本入力活性化マップレイアウトからインターリーブされた入力活性化マップレイアウトに並べ替えることは、いくつかの入力活性化マップの寸法に沿ってトラバースすることと、入力活性化マップの幅寸法に沿ってトラバースすることと、入力活性化マップの高さ寸法に沿ってトラバースすることとを反復的に行うことを含む、側面1−3のいずれか1項に記載の方法。
【0192】
第5の側面では、出力活性化マップのピクセル値をインターリーブされた出力活性化マップレイアウトから基本出力活性化マップレイアウトに並べ替えることをさらに含む、側面1−4のいずれか1項に記載の方法。
【0193】
第6の側面では、出力活性化マップのピクセル値をインターリーブされた出力活性化マップから基本出力活性化マップレイアウトに並べ替えることは、インターリーブされた出力活性化マップの幅寸法に沿ってトラバースすることと、インターリーブされた出力活性化マップの高さ寸法に沿ってトラバースすることとを反復的に行うことを含む、側面5に記載の方法。
【0194】
第7の側面では、畳み込み層の出力活性化マップを複数のカーネルタイルおよび入力活性化マップピクセルの複数のクラスタから決定することは、複数のカーネルタイルおよび入力活性化マップピクセルの複数のクラスタにタイル毎に融合積和演算を実施することを含む、側面1−6のいずれか1項に記載の方法。
【0195】
第8の側面では、複数のカーネルタイルおよび入力活性化マップピクセルの複数のクラスタにタイル毎に融合積和演算を実施することは、各出力活性化マップピクセルに対して、出力活性化マップピクセルの値をゼロの値に設定することと、複数のカーネルタイルの各カーネルタイルの各カーネルランネルに対して、融合積和演算を各カーネルランネル、カーネルランネルおよび出力活性化マップピクセルに対応する入力活性化マップピクセル、および出力活性化マップピクセルに実施することとを反復的に行うことを含む、側面7に記載の方法。
【0196】
第9の側面では、複数のカーネルタイルおよび入力活性化マップピクセルの複数のクラスタにタイル毎に融合積和演算を実施することは、各出力活性化マップピクセルに対して、出力活性化マップピクセルの値をゼロの値に設定することと、複数のカーネルタイルの各カーネルタイルの各カーネルランネルに対して、融合積和演算を各カーネルランネル、カーネルランネルおよび出力活性化マップピクセルに対応する少なくとも1つの入力活性化マップピクセル、および出力活性化マップピクセルに実施することとを反復的に行うことを含む、側面7に記載の方法。
【0197】
第10の側面では、少なくとも1つの入力活性化マップピクセルは、2つの入力活性化マップピクセルを備えている、側面9に記載の方法。
【0198】
第11の側面では、カーネルランネルのビットでのサイズと入力活性化マップランネルのビットでのサイズとは、同一である、側面1−10のいずれか1項に記載の方法。
【0199】
第12の側面では、カーネルランネルのビットでのサイズと出力活性化マップランネルのビットでのサイズとは、同一である、側面11に記載の方法。
【0200】
第13の側面では、カーネルランネルのビットでのサイズとハードウェアプロセッサのレジスタのビットでのサイズとは、同一である、側面11−12のいずれか1項に記載の方法。
【0201】
第14の側面では、レジスタのサイズは、128ビットである、側面13に記載の方法。
【0202】
第15の側面では、ハードウェアプロセッサは、単一命令多重データプロセッサを備えている、側面1−14のいずれか1項に記載の方法。
【0203】
第16の側面では、単一命令多重データプロセッサは、ベクトルプロセッサを備えている、側面15に記載の方法。
【0204】
第17の側面では、基本カーネルレイアウトにおけるカーネルスタックのカーネルは、複数のカーネルスタックチャネル内に配列され、複数のカーネルスタックチャネルの数と入力活性化マップの数とは、同一であり、カーネルスタックチャネルのカーネルの数と出力活性化マップの数とは、同一である、側面1−16のいずれか1項に記載の方法。
【0205】
第18の側面では、カーネルスタックのカーネルスタック幅と出力活性化マップの数とは、同一である、側面1−17のいずれか1項に記載の方法。
【0206】
第19の側面では、基本カーネルレイアウトにおけるカーネルスタックのカーネルは、複数のカーネルスタックフィルタバンク内に配列され、複数のカーネルスタックフィルタバンクの数と出力活性化マップの数とは、同一であり、カーネルスタックフィルタバンクのカーネルの数と入力活性化マップの数とは、同一である、側面1−18のいずれか1項に記載の方法。
【0207】
第20の側面では、カーネルスタックのカーネルスタック高さと入力活性化マップの数とは、同一である、側面1−19のいずれか1項に記載の方法。
【0208】
第21の側面では、畳み込みニューラルネットワークの畳み込み層の効率的実装のための方法が、開示される。方法は、ハードウェアプロセッサの制御下にあり、方法は、カーネルスタックにおけるカーネルを備えている畳み込みニューラルネットワークの畳み込み層を受信することであって、カーネルスタックのカーネルは、カーネルランネルの複数のカーネルタイルを備えているタイルカーネルレイアウトにおけるものである、ことと、畳み込み層の入力活性化マップを受信することであって、入力活性化マップは、基本入力活性化マップレイアウトにおけるものである、ことと、入力活性化マップのピクセル値を基本入力活性化マップレイアウトから入力活性化マップピクセルの複数のクラスタを備えているインターリーブされた入力活性化マップレイアウトに並べ替えることと、畳み込み層の出力活性化マップを複数のカーネルタイルおよび入力活性化マップピクセルの複数のクラスタから決定することであって、出力活性化マップは、出力活性化マップピクセルの複数のクラスタを備えているインターリーブされた出力活性化マップレイアウトにおけるものである、こととを含む。
【0209】
第22の側面では、畳み込みニューラルネットワークの畳み込み層の効率的実装のための方法が、開示される。方法は、ハードウェアプロセッサの制御下にあり、方法は、カーネルスタックにおけるカーネルを備えている畳み込みニューラルネットワークの畳み込み層を受信することであって、カーネルスタックのカーネルは、カーネルランネルの複数のカーネルタイルを備えているタイルカーネルレイアウトにおけるものである、ことと、畳み込み層の入力活性化マップを受信することであって、入力活性化マップは、インターリーブされた入力活性化マップレイアウトにおけるものである、ことと、畳み込み層の出力活性化マップを複数のカーネルタイルおよび入力活性化マップピクセルの複数のクラスタから決定することであって、出力活性化マップは、出力活性化マップピクセルの複数のクラスタを備えているインターリーブされた出力活性化マップレイアウトにおけるものである、こととを含む。
【0210】
第23の側面では、畳み込みニューラルネットワークの畳み込み層の効率的実装のための方法が、開示される。方法は、ハードウェアプロセッサの制御下にあり、方法は、カーネルスタックにおけるカーネルを備えている畳み込みニューラルネットワークの畳み込み層を受信することであって、カーネルスタックのカーネルは、カーネルランネルの複数のカーネルタイルを備えているタイルカーネルレイアウトにおけるものであり、カーネルの寸法は、1である、ことと、畳み込み層の入力活性化マップを受信することであって、入力活性化マップは、基本入力活性化マップレイアウトにおけるものである、ことと、ストライディングによって、入力活性化マップのピクセル値を基本入力活性化マップレイアウトから入力活性化マップピクセルの複数のクラスタを備えているインターリーブされた入力活性化マップレイアウトに並べ替えることと、畳み込み層の出力活性化マップを複数のカーネルタイルおよび複数の入力活性化マップタイルから決定することであって、出力活性化マップは、転置されインターリーブされた出力活性化マップレイアウトにおけるものであり、転置されインターリーブされた出力活性化マップレイアウトは、出力活性化マップの複数のクラスタを備えている、こととを含む。
【0211】
第24の側面では、入力活性化マップのピクセル値を基本入力活性化マップレイアウトからインターリーブされた入力活性化マップレイアウトに並べ替えることは、ストライディングによって、入力活性化マップのピクセル値を基本入力活性化マップレイアウトから入力活性化マップピクセルの複数のクラスタを備えているインターリーブされた入力活性化マップレイアウトに並べ替えることを含み、ストライドのサイズは、入力活性化マップの数の倍数である、側面23に記載の方法。
【0212】
第25の側面では、入力活性化マップの数の倍数は、1である、側面24に記載の方法。
【0213】
第26の側面では、畳み込みニューラルネットワークの畳み込み層の効率的実装のための方法が、開示される。方法は、ハードウェアプロセッサの制御下にあり、方法は、カーネルスタックにおけるカーネルを備えている畳み込みニューラルネットワークの畳み込み層を受信することであって、カーネルスタックのカーネルは、カーネルランネルの複数のカーネルタイルを備えているタイルカーネルレイアウトにおけるものであり、カーネルの寸法は、1である、ことと、畳み込み層の入力活性化マップを受信することであって、入力活性化マップは、入力活性化マップピクセルの複数のクラスタを備えているインターリーブされた入力活性化マップレイアウトにおけるものであり、ストライドのサイズは、入力活性化マップの数の倍数である、ことと、畳み込み層の出力活性化マップを複数のカーネルタイルおよび複数の入力活性化マップタイルから決定することであって、出力活性化マップは、転置されインターリーブされた出力活性化マップレイアウトにおけるものであり、転置されインターリーブされた出力活性化マップレイアウトは、出力活性化マップの複数のクラスタを備えている、こととを含む。
【0214】
第27の側面では、入力活性化マップの数の倍数は、1である、側面26に記載の方法。
【0215】
第28の側面では、コンピュータシステムが、開示される。コンピュータシステムは、ハードウェアプロセッサと、ハードウェアプロセッサによって実行されると、プロセッサに、側面1−27のいずれか1項に記載の方法を実施させるその上に記憶される命令を有する非一過性メモリとを備えている。
【0216】
第29の側面では、コンピュータシステムは、モバイルデバイスを備えている、側面28に記載のコンピュータシステム。
【0217】
第30の側面では、モバイルデバイスは、ウェアラブルディスプレイシステムを備えている、側面29に記載のコンピュータシステム。
【0218】
第31の側面では、畳み込みニューラルネットワーク(CNN)を実装するためのシステムが、開示される。システムは、畳み込みニューラルネットワークの畳み込み層であって、畳み込み層は、カーネルスタックにおけるカーネルを備え、カーネルスタックのカーネルは、基本カーネルレイアウトにおけるものであり、カーネルスタックのカーネルの重み値は、基本カーネルレイアウトから複数のカーネルタイルを備えているタイルカーネルレイアウトに並べ替えられ、カーネルタイルは、複数のカーネルランネルを備え、カーネルランネルは、カーネルスタックのカーネルのいくつかの重み値を備えている、畳み込みニューラルネットワークの畳み込み層を記憶するように構成された非一過性メモリと、非一過性メモリと通信するハードウェアプロセッサであって、ハードウェアプロセッサは、畳み込み層の入力活性化マップを受信することであって、入力活性化マップは、基本入力活性化マップレイアウトにおけるものである、ことと、入力活性化マップのピクセル値を基本入力活性化マップレイアウトから入力活性化マップピクセルの複数のクラスタを備えているインターリーブされた入力活性化マップレイアウトに並べ替えることと、畳み込み層の出力活性化マップを複数のカーネルタイルおよび入力活性化マップピクセルの複数のクラスタから決定することとを行うための実行可能命令によってプログラムされ、出力活性化マップは、複数のクラスタ出力活性化マップピクセルを備えているインターリーブされた出力活性化マップレイアウトにおけるものである、ハードウェアプロセッサとを備えている。いくつかの実施形態では、ウェアラブルディスプレイシステムは、CNNを実装するためのシステムを備えていることができる。ウェアラブルディスプレイシステムは、仮想画像をウェアラブルディスプレイシステムのユーザに提示するように構成されたディスプレイを備えていることができ、ハードウェアプロセッサは、ディスプレイと通信することができる。
【0219】
第32の側面では、カーネルスタックのカーネルの重み値は、カーネルスタックの幅寸法に沿ってトラバースすることと、カーネルスタックの高さ寸法に沿ってトラバースすることと、カーネルスタックのカーネルの幅寸法に沿ってトラバースすることと、カーネルスタックのカーネルの高さ寸法に沿ってトラバースすることとを反復的に行うことによって、基本カーネルレイアウトからタイルカーネルレイアウトに並べ替えられる、側面31に記載のシステム。
【0220】
第33の側面では、カーネルタイルの第1のカーネルランネルは、第1のカーネルスタック幅境界に対応し、カーネルタイルの最後のカーネルランネルは、第1のカーネルスタック幅境界の後続の第2のカーネルスタック幅境界に対応する、側面31−32のいずれか1項に記載のシステム。
【0221】
第34の側面では、入力活性化マップのピクセル値を基本入力活性化マップレイアウトからインターリーブされた入力活性化マップレイアウトに並べ替えるために、ハードウェアプロセッサは、いくつかの入力活性化マップの寸法に沿ってトラバースすることと、入力活性化マップの幅寸法に沿ってトラバースすることと、入力活性化マップの高さ寸法に沿ってトラバースすることとを反復的に行うようにプログラムされている、側面31−33のいずれか1項に記載のシステム。
【0222】
第35の側面では、ハードウェアプロセッサは、出力活性化マップのピクセル値をインターリーブされた出力活性化マップレイアウトから基本出力活性化マップレイアウトに並べ替えるようにプログラムされている、側面31−34のいずれか1項に記載のシステム。
【0223】
第36の側面では、出力活性化マップのピクセル値をインターリーブされた出力活性化マップから基本出力活性化マップレイアウトに並べ替えるために、ハードウェアプロセッサは、インターリーブされた出力活性化マップの幅寸法に沿ってトラバースすることと、インターリーブされた出力活性化マップの高さ寸法に沿ってトラバースすることとを反復的に行うようにプログラムされている、側面35に記載のシステム。
【0224】
第37の側面では、畳み込み層の出力活性化マップを複数のカーネルタイルおよび入力活性化マップピクセルの複数のクラスタから決定するために、ハードウェアプロセッサは、タイル毎に融合積和演算を複数のカーネルタイルおよび入力活性化マップピクセルの複数のクラスタに実施するようにプログラムされている、側面31−36のいずれか1項に記載のシステム。
【0225】
第38の側面では、タイル毎に融合積和演算を複数のカーネルタイルおよび入力活性化マップピクセルの複数のクラスタに実施することは、各出力活性化マップピクセルに対して、出力活性化マップピクセルの値をゼロの値に設定することと、複数のカーネルタイルの各カーネルタイルの各カーネルランネルに対して、各カーネルランネル、カーネルランネルおよび出力活性化マップピクセルに対応する入力活性化マップピクセル、および出力活性化マップピクセルに融合積和演算を実施することとを反復的に行うことを含む、側面37に記載のシステム。
【0226】
第39の側面では、タイル毎に融合積和演算を複数のカーネルタイルおよび入力活性化マップピクセルの複数のクラスタに実施するために、ハードウェアプロセッサは、各出力活性化マップピクセルに対して、出力活性化マップピクセルの値をゼロの値に設定することと、複数のカーネルタイルの各カーネルタイルの各カーネルランネルに対して、融合積和演算を各カーネルランネル、カーネルランネルおよび出力活性化マップピクセルに対応する少なくとも1つの入力活性化マップピクセル、および出力活性化マップピクセルに実施することとを反復的に行うようにプログラムされている、側面37に記載のシステム。
【0227】
第40の側面では、少なくとも1つの入力活性化マップピクセルは、2つの入力活性化マップピクセルを備えている、側面39に記載のシステム。
【0228】
第41の側面では、カーネルランネルのビットでのサイズと入力活性化マップランネルのビットでのサイズとは、同一である、側面31−40のいずれか1項に記載のシステム。
【0229】
第42の側面では、カーネルランネルのビットでのサイズと出力活性化マップランネルのビットでのサイズとは、同一である、側面41に記載のシステム。
【0230】
第43の側面では、カーネルランネルのビットでのサイズとハードウェアプロセッサのレジスタのビットでのサイズとは、同一である、側面41−42のいずれか1項に記載のシステム。
【0231】
第44の側面では、レジスタのサイズは、128ビットである、側面43に記載のシステム。
【0232】
第45の側面では、ハードウェアプロセッサは、単一命令多重データプロセッサを備えている、側面31−44のいずれか1項に記載のシステム。
【0233】
第46の側面では、単一命令多重データプロセッサは、ベクトルプロセッサを備えている、側面45に記載のシステム。
【0234】
第47の側面では、基本カーネルレイアウトにおけるカーネルスタックのカーネルは、複数のカーネルスタックチャネル内に配列され、複数のカーネルスタックチャネルの数と入力活性化マップの数とは、同一であり、カーネルスタックチャネルのカーネルの数と出力活性化マップの数とは、同一である、側面31−46のいずれか1項に記載のシステム。
【0235】
第48の側面では、カーネルスタックのカーネルスタック幅と出力活性化マップの数とは、同一である、側面31−47のいずれか1項に記載のシステム。
【0236】
第49の側面では、基本カーネルレイアウトにおけるカーネルスタックのカーネルは、複数のカーネルスタックフィルタバンク内に配列され、複数のカーネルスタックフィルタバンクの数と出力活性化マップの数とは、同一であり、カーネルスタックフィルタバンクのカーネルの数と入力活性化マップの数とは、同一である、側面31−48のいずれか1項に記載のシステム。
【0237】
第50の側面では、カーネルスタックのカーネルスタック高さと入力活性化マップの数とは、同一である、側面31−49のいずれか1項に記載のシステム。
【0238】
(結論)
本明細書に説明され、および/または添付される図に描写されるプロセス、方法、およびアルゴリズムの各々は、具体的かつ特定のコンピュータ命令を実行するように構成される1つ以上の物理的コンピューティングシステム、ハードウェアコンピュータプロセッサ、特定用途向け回路、および/もしくは電子ハードウェアによって実行されるコードモジュールにおいて具現化され、それによって完全もしくは部分的に自動化され得る。例えば、コンピューティングシステムは、具体的コンピュータ命令でプログラムされた汎用コンピュータ(例えば、サーバ)または専用コンピュータ、専用回路等を含むことができる。コードモジュールは、実行可能プログラムにコンパイルおよびリンクされ、動的リンクライブラリ内にインストールされ、または解釈されるプログラミング言語において書き込まれ得る。いくつかの実装では、特定の動作および方法が、所与の機能に特定の回路によって実施され得る。
【0239】
さらに、本開示の機能性のある実装は、十分に数学的、コンピュータ的、または技術的に複雑であるので、(適切な特殊化された実行可能命令を利用する)特定用途向けハードウェアまたは1つ以上の物理的コンピューティングデバイスは、例えば、関与する計算の量もしくは複雑性に起因して、または結果を実質的にリアルタイムで提供するために、機能性を実施する必要があり得る。例えば、ビデオは、多くのフレームを含み、各フレームは、数百万のピクセルを有し得、具体的にプログラムされたコンピュータハードウェアは、商業的に妥当な時間量において所望の画像処理タスクまたは用途を提供するようにビデオデータを処理する必要がある。
【0240】
コードモジュールまたは任意のタイプのデータは、ハードドライブ、ソリッドステートメモリ、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、光学ディスク、揮発性もしくは不揮発性記憶装置、同一物の組み合わせ、および/または同等物を含む、物理的コンピュータ記憶装置等の任意のタイプの非一過性コンピュータ読み取り可能な媒体上に記憶され得る。方法およびモジュール(またはデータ)は、無線ベースおよび有線/ケーブルベースの媒体を含む種々のコンピュータ読み取り可能な伝送媒体上で生成されたデータ信号として(例えば、搬送波または他のアナログもしくはデジタル伝搬信号の一部として)伝送され得、種々の形態(例えば、単一もしくは多重化アナログ信号の一部として、または複数の離散デジタルパケットもしくはフレームとして)をとり得る。開示されるプロセスまたはプロセスステップの結果は、任意のタイプの非一過性有形コンピュータ記憶装置内に持続的もしくは別様に記憶され得る、またはコンピュータ読み取り可能な伝送媒体を介して通信され得る。
【0241】
本明細書に説明される、および/または添付される図に描写されるフロー図における任意のプロセス、ブロック、状態、ステップ、もしくは機能性は、プロセスにおいて具体的機能(例えば、論理もしくは算術)またはステップを実装するための1つ以上の実行可能命令を含むコードモジュール、セグメント、またはコードの一部を潜在的に表すものとして理解されたい。種々のプロセス、ブロック、状態、ステップ、または機能性は、組み合わせられる、再配列される、追加される、削除される、修正される、または別様に本明細書に提供される例証的例から変更されることができる。いくつかの実施形態では、追加のまたは異なるコンピューティングシステム、もしくはコードモジュールが、本明細書に説明される機能性のいくつかまたは全てを実施し得る。本明細書に説明される方法およびプロセスはまた、任意の特定のシーケンスに限定されず、それに関連するブロック、ステップ、または状態は、適切な他のシーケンスで、例えば、連続して、並行して、またはある他の様式で実施されることができる。タスクまたはイベントが、開示される例示的実施形態に追加され、またはそれから除去され得る。さらに、本明細書に説明される実装における種々のシステムコンポーネントの分離は、例証を目的とし、全ての実装においてそのような分離を要求するものとして理解されるべきではない。説明されるプログラムコンポーネント、方法、およびシステムは、概して、単一のコンピュータ製品においてともに統合される、または複数のコンピュータ製品にパッケージ化され得ることを理解されたい。多くの実装変形例が、可能である。
【0242】
プロセス、方法、およびシステムは、ネットワーク(または分散)コンピューティング環境において実装され得る。ネットワーク環境は、企業全体コンピュータネットワーク、イントラネット、ローカルエリアネットワーク(LAN)、広域ネットワーク(WAN)、パーソナルエリアネットワーク(PAN)、クラウドコンピューティング出ネットワーク、クラウドソースコンピューティングネットワーク、インターネット、およびワールドワイドウェブを含む。ネットワークは、有線もしくは無線ネットワークまたは任意の他のタイプの通信ネットワークであり得る。
【0243】
本開示のシステムおよび方法の各々は、いくつかの革新的側面を有し、そのうちのいかなるものも、本明細書に開示される望ましい属性に単独で関与しないか、またはそのために要求されない。上で説明される種々の特徴およびプロセスは、互いに独立して使用され得る、または種々の方法で組み合わせられ得る。全ての可能な組み合わせおよび副次的組み合わせが、本開示の範囲内に該当することが意図される。本開示に説明される実装の種々の修正が、当業者に容易に明白であり得、本明細書に定義される一般原理は、本開示の精神または範囲から逸脱することなく、他の実装に適用され得る。したがって、請求項は、本明細書に示される実装に限定されることを意図されず、本明細書に開示される本開示、原理、および新規の特徴と一貫する最も広い範囲を与えられるべきである。
【0244】
別個の実装の文脈において本明細書に説明されるある特徴はまた、単一の実装における組み合わせにおいて実装されることができる。逆に、単一の実装の文脈において説明される種々の特徴も、複数の実装において別個に、または任意の好適な副次的組み合わせにおいて実装されることができる。さらに、特徴がある組み合わせにおいて作用するものとして上で説明され、さらに、そのようなものとして最初に請求され得るが、請求される組み合わせからの1つ以上の特徴は、いくつかの場合では、組み合わせから削除されることができ、請求される組み合わせは、副次的組み合わせまたは副次的組み合わせの変形例を対象とし得る。いかなる単一の特徴または特徴のグループも、あらゆる実施形態に必要もしくは必須ではない。
【0245】
とりわけ、「〜できる(can)」、「〜し得る(could)」、「〜し得る(might)」、「〜し得る(may)」、「例えば(e.g.)」等、本明細書で使用される条件文は、別様に具体的に記載されない限り、または使用されるような文脈内で別様に理解されない限り、概して、ある実施形態がある特徴、要素、および/またはステップを含む一方、他の実施形態がそれらを含まないことを伝えることが意図される。したがって、そのような条件文は、概して、特徴、要素、および/もしくはステップが、1つ以上の実施形態に対していかようにも要求されること、または1つ以上の実施形態が、著者の入力または促しの有無を問わず、これらの特徴、要素、および/もしくはステップが任意の特定の実施形態において含まれる、もしくは実施されるべきかどうかを決定するための論理を必然的に含むことを示唆することを意図されない。用語「〜を備えている」、「〜を含む」、「〜を有する」、および同等物は、同義語であり、非限定的方式で包括的に使用され、追加の要素、特徴、行為、動作等を除外しない。用語「または」は、その包括的意味において使用され(およびその排他的意味において使用されず)、したがって、例えば、要素のリストを接続するために使用されると、用語「または」は、リスト内の要素のうちの1つ、いくつか、または全てを意味する。加えて、本願および添付される請求項で使用されるような冠詞「a」、「an」、および「the」は、別様に規定されない限り、「1つ以上の」もしくは「少なくとも1つ」を意味するように解釈されるべきである。
【0246】
本明細書で使用されるように、項目のリスト「〜のうちの少なくとも1つ」を指す語句は、単一の要素を含む、それらの項目の任意の組み合わせを指す。ある例として、「A、B、またはCのうちの少なくとも1つ」は、A、B、C、AおよびB、AおよびC、BおよびC、ならびにA、B、およびCを対象とすることが意図される。語句「X、Y、およびZのうちの少なくとも1つ」等の接続文は、別様に具体的に記載されない限り、概して、項目、用語等がX、Y、またはZのうちの少なくとも1つであり得ることを伝えるために使用されるような文脈で別様に理解される。したがって、そのような接続文は、概して、ある実施形態が、Xのうちの少なくとも1つ、Yのうちの少なくとも1つ、およびZのうちの少なくとも1つがそれぞれ存在するように要求することを示唆することを意図されない。
【0247】
同様に、動作は、特定の順序で図面に描写され得るが、それは、望ましい結果を達成するために、そのような動作が示される特定の順序で、もしくは連続的順序で実施される、または全ての図示される動作が実施される必要はないと認識されるべきである。さらに、図面は、フローチャートの形態で1つ以上の例示的プロセスを図式的に描写し得る。しかしながら、描写されない他の動作も、図式的に図示される例示的方法およびプロセス内に組み込まれることができる。例えば、1つ以上の追加の動作が、図示される動作のいずれかの前に、その後、それと同時に、またはその間に実施されることができる。加えて、動作は、他の実装において再配列される、または再順序付けられ得る。ある状況では、マルチタスクおよび並列処理が、有利であり得る。さらに、上で説明される実装における種々のシステムコンポーネントの分離は、全ての実装におけるそのような分離を要求するものとして理解されるべきではなく、説明されるプログラムコンポーネントおよびシステムは、概して、単一のソフトウェア製品においてともに統合され、または複数のソフトウェア製品にパッケージ化され得ることを理解されたい。加えて、他の実装も、以下の請求項の範囲内である。いくつかの場合では、請求項に列挙されるアクションは、異なる順序で実施され、依然として、望ましい結果を達成することができる。