(57)【要約】畳み込みニューラルネットワークの畳み込み層の効率的実装のためのシステムおよび方法が、開示される。一側面では、畳み込み層のカーネルスタックにおけるカーネルの重み値は、ランネルのタイルを伴うタイルレイアウトに並べ替えられることができる。畳み込み層の入力活性化マップのピクセル値は、入力活性化マップピクセルの複数のクラスタを備えているインターリーブされたレイアウトに並べ替えられることができる。出力活性化マップは、入力活性化マップピクセルのクラスタおよびカーネルをタイル毎に使用して、決定されることができる。
2019535079.tif 000002
【特許請求の範囲】
【請求項１】
畳み込みニューラルネットワーク（ＣＮＮ）を実行するためのシステムであって、前記システムは、
畳み込みニューラルネットワークの畳み込み層を記憶するように構成された非一過性メモリであって、
前記畳み込み層は、カーネルスタックにおけるカーネルを備え、
前記カーネルスタックの前記カーネルは、基本カーネルレイアウトにおけるものであり、
前記カーネルスタックの前記カーネルの重み値は、前記基本カーネルレイアウトから複数のカーネルタイルを備えているタイルカーネルレイアウトに並べ替えられ、
カーネルタイルは、複数のカーネルランネルを備え、
カーネルランネルは、前記カーネルスタックの前記カーネルのいくつかの前記重み値を備えている、非一過性メモリと、
前記非一過性メモリと通信するハードウェアプロセッサと
を備え、
前記ハードウェアプロセッサは、
前記畳み込み層の入力活性化マップを受信することであって、前記入力活性化マップは、基本入力活性化マップレイアウトにおけるものである、ことと、
前記入力活性化マップのピクセル値を前記基本入力活性化マップレイアウトからインターリーブされた入力活性化マップレイアウトに並べ替えることであって、前記インターリーブされた入力活性化マップレイアウトは、入力活性化マップピクセルの複数のクラスタを備えている、ことと、
前記複数のカーネルタイルと前記入力活性化マップピクセルの複数のクラスタとから前記畳み込み層の出力活性化マップを決定することと
を行うための実行可能命令によってプログラムされており、
前記出力活性化マップは、インターリーブされた出力活性化マップレイアウトにおけるものであり、前記インターリーブされた出力活性化マップレイアウトは、複数のクラスタ出力活性化マップピクセルを備えている、システム。
【請求項２】
前記カーネルスタックの前記カーネルの前記重み値は、
前記カーネルスタックの幅寸法に沿ってトラバースすることと、
前記カーネルスタックの高さ寸法に沿ってトラバースすることと、
前記カーネルスタックの前記カーネルの幅寸法に沿ってトラバースすることと、
前記カーネルスタックのカーネルの高さ寸法に沿ってトラバースすることと
を反復的に行うことによって、前記基本カーネルレイアウトから前記タイルカーネルレイアウトに並べ替えられる、請求項１に記載のシステム。
【請求項３】
前記カーネルタイルの第１のカーネルランネルは、第１のカーネルスタック幅境界に対応し、前記カーネルタイルの最後のカーネルランネルは、前記第１のカーネルスタック幅境界の後続の第２のカーネルスタック幅境界に対応する、請求項１に記載のシステム。
【請求項４】
前記入力活性化マップの前記ピクセル値を前記基本入力活性化マップレイアウトから前記インターリーブされた入力活性化マップレイアウトに並べ替えるために、前記ハードウェアプロセッサは、
いくつかの入力活性化マップの寸法に沿ってトラバースすることと、
入力活性化マップの幅寸法に沿ってトラバースすることと、
入力活性化マップの高さ寸法に沿ってトラバースすることと
を反復的に行うようにプログラムされている、請求項１に記載のシステム。
【請求項５】
前記ハードウェアプロセッサは、前記出力活性化マップのピクセル値を前記インターリーブされた出力活性化マップレイアウトから基本出力活性化マップレイアウトに並べ替えるようにプログラムされている、請求項１に記載のシステム。
【請求項６】
前記出力活性化マップの前記ピクセル値を前記インターリーブされた出力活性化マップから前記基本出力活性化マップレイアウトに並べ替えるために、前記ハードウェアプロセッサは、
前記インターリーブされた出力活性化マップの幅寸法に沿ってトラバースすることと、
前記インターリーブされた出力活性化マップの高さ寸法に沿ってトラバースすることと
を反復的に行うようにプログラムされている、請求項５に記載のシステム。
【請求項７】
前記複数のカーネルタイルと前記入力活性化マップピクセルの複数のクラスタとから前記畳み込み層の前記出力活性化マップを決定するために、前記ハードウェアプロセッサは、前記複数のカーネルタイルおよび前記入力活性化マップピクセルの複数のクラスタにタイル毎に融合積和演算を実施するようにプログラムされている、請求項１−６のいずれか１項に記載のシステム。
【請求項８】
前記複数のカーネルタイルおよび前記入力活性化マップピクセルの複数のクラスタにタイル毎に前記融合積和演算を実施することは、
各出力活性化マップピクセルに対して、
前記出力活性化マップピクセルの値をゼロの値に設定することと、
前記複数のカーネルタイルの各カーネルタイルの各カーネルランネルに対して、前記各カーネルランネル、前記カーネルランネルおよび前記出力活性化マップピクセルに対応する入力活性化マップピクセル、および前記出力活性化マップピクセルに融合積和演算を実施することと
を反復的に行うことを含む、請求項７に記載のシステム。
【請求項９】
前記複数のカーネルタイルおよび前記入力活性化マップピクセルの複数のクラスタにタイル毎に前記融合積和演算を実施するために、前記ハードウェアプロセッサは、
各出力活性化マップピクセルに対して、
前記出力活性化マップピクセルの値をゼロの値に設定することと、
前記複数のカーネルタイルの各カーネルタイルの各カーネルランネルに対して、前記各カーネルランネル、前記カーネルランネルおよび前記出力活性化マップピクセルに対応する少なくとも１つの入力活性化マップピクセル、および前記出力活性化マップピクセルに融合積和演算を実施することと
を反復的に行うようにプログラムされている、請求項７に記載のシステム。
【請求項１０】
前記少なくとも１つの入力活性化マップピクセルは、２つの入力活性化マップピクセルを備えている、請求項９に記載のシステム。
【請求項１１】
前記カーネルランネルのビットでのサイズと前記入力活性化マップランネルのビットでのサイズとは、同一である、請求項１−６のいずれか１項に記載のシステム。
【請求項１２】
前記カーネルランネルのビットでの前記サイズと前記出力活性化マップランネルのビットでのサイズとは、同一である、請求項１１に記載のシステム。
【請求項１３】
前記カーネルランネルのビットでの前記サイズと前記ハードウェアプロセッサのレジスタのビットでのサイズとは、同一である、請求項１１に記載のシステム。
【請求項１４】
前記レジスタのサイズは、１２８ビットである、請求項１３に記載のシステム。
【請求項１５】
前記ハードウェアプロセッサは、単一命令多重データプロセッサを備えている、請求項１−６のいずれか１項に記載のシステム。
【請求項１６】
前記単一命令多重データプロセッサは、ベクトルプロセッサを備えている、請求項１５に記載のシステム。
【請求項１７】
前記基本カーネルレイアウトにおける前記カーネルスタックの前記カーネルは、複数のカーネルスタックチャネル内に配列され、
前記複数のカーネルスタックチャネルの数と前記入力活性化マップの数とは、同一であり、
カーネルスタックチャネルのカーネルの数と前記出力活性化マップの数とは、同一である、請求項１−６のいずれか１項に記載のシステム。
【請求項１８】
前記カーネルスタックのカーネルスタック幅と前記出力活性化マップの数とは、同一である、請求項１−６のいずれか１項に記載のシステム。
【請求項１９】
前記基本カーネルレイアウトにおける前記カーネルスタックの前記カーネルは、複数のカーネルスタックフィルタバンク内に配列され、
前記複数のカーネルスタックフィルタバンクの数と前記出力活性化マップの数とは、同一であり、
カーネルスタックフィルタバンクのカーネルの数と前記入力活性化マップの数とは、同一である、請求項１−６のいずれか１項に記載のシステム。
【請求項２０】
前記カーネルスタックのカーネルスタック高さと前記入力活性化マップの数とは、同一である、請求項１−６のいずれか１項に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の引用）
本願は、米国特許出願第６２／４０３，９３０号（２０１６年１０月４日出願、名称「ＥＦＦＩＣＩＥＮＴ  ＤＡＴＡ  ＬＡＹＯＵＴＳ  ＦＯＲ  ＣＯＮＶＯＬＵＴＩＯＮＡＬ  ＮＥＵＲＡＬ  ＮＥＴＷＯＲＫＳ」）に対する優先権の利益を主張し、上記出願の内容は、その全体が、参照により本明細書に引用される。
【０００２】
（著作権および商標登録表示）
本特許文書の開示の一部は、著作権保護を受ける内容を含む。所有権者は、特許文書または特許開示書のいずれか１つによるファクシミリ複写物には、複写物が特許商標庁の特許ファイルまたは記録として世に出現している限り異論はないが、他の場合に全ての著作権は完全に留保する。
【０００３】
（分野）
本開示は、概して、畳み込みニューラルネットワークを実装するためのシステムおよび方法に関し、より具体的には、畳み込みニューラルネットワークの畳み込み層を実装するための効率的データレイアウトに関する。
【背景技術】
【０００４】
畳み込みニューラルネットワーク（ＣＮＮ）は、人工ニューラルネットワークのためのトポロジを説明する。ＣＮＮは、眼画像セグメント化および眼追跡のために使用されることができる。ＣＮＮは、ジェスチャ認識等の他の分類問題のために使用されることができる。ＣＮＮの畳み込み層の出力活性化マップを決定するために、畳み込み層は、畳み込み層の入力活性化マップおよびカーネルを畳み込むことができる。畳み込みの計算は、計算的に高価または集約的であり得る。
【発明の概要】
【課題を解決するための手段】
【０００５】
ハードウェアコンピューティングシステム内で畳み込み演算を効率的に実施することは、多くの課題を提示し得る。故に、本開示は、畳み込みニューラルネットワークの効率的実装のためのシステムおよび方法の例を提供する。システムおよび方法は、例えば、拡張現実、複合現実、仮想現実、機械学習、コンピュータビジョン、顔認識、眼追跡、オブジェクト認識、文字、言語、または発話分析、コンピュータゲーム等、ＣＮＮが利用される任意の用途において使用されることができる。
【０００６】
一側面では、畳み込みニューラルネットワークの畳み込み層の効率的実装のための方法が、開示される。方法は、ハードウェアプロセッサの制御下にあり、方法は、畳み込みニューラルネットワークの畳み込み層を受信することであって、畳み込み層は、カーネルスタックにおけるカーネルを備え、カーネルスタックのカーネルは、基本カーネルレイアウトにおけるものである、ことと、カーネルスタックのカーネルの重み値を基本カーネルレイアウトから複数のカーネルタイルを備えているタイルカーネルレイアウトに並べ替えることであって、カーネルタイルは、複数のカーネルランネルを備え、カーネルランネルは、カーネルスタックのカーネルのいくつかの重み値を備えている、ことと、畳み込み層の入力活性化マップを受信することであって、入力活性化マップは、基本入力活性化マップレイアウトにおけるものである、ことと、入力活性化マップのピクセル値を基本入力活性化マップレイアウトから入力活性化マップピクセルの複数のクラスタを備えているインターリーブされた入力活性化マップレイアウトに並べ替えることと、畳み込み層の出力活性化マップを複数のカーネルタイルおよび入力活性化マップピクセルの複数のクラスタから決定することであって、出力活性化マップは、複数のクラスタ出力活性化マップピクセルを備えているインターリーブされた出力活性化マップレイアウトにおけるものである、こととを含む。
【０００７】
別の側面では、畳み込みニューラルネットワークの畳み込み層の効率的実装のための方法が、開示される。方法は、ハードウェアプロセッサの制御下にあり、方法は、カーネルスタックにおけるカーネルを備えている畳み込みニューラルネットワークの畳み込み層を受信することであって、カーネルスタックのカーネルは、カーネルランネルの複数のカーネルタイルを備えているタイルカーネルレイアウトにおけるものである、ことと、畳み込み層の入力活性化マップを受信することであって、入力活性化マップは、基本入力活性化マップレイアウトにおけるものである、ことと、入力活性化マップのピクセル値を基本入力活性化マップレイアウトから入力活性化マップピクセルの複数のクラスタを備えているインターリーブされた入力活性化マップレイアウトに並べ替えることと、畳み込み層の出力活性化マップを複数のカーネルタイルおよび入力活性化マップピクセルの複数のクラスタから決定することであって、出力活性化マップは、出力活性化マップピクセルの複数のクラスタを備えているインターリーブされた出力活性化マップレイアウトにおけるものである、こととを含む。
【０００８】
さらに別の側面では、畳み込みニューラルネットワークの畳み込み層の効率的実装のための方法が、開示される。方法は、ハードウェアプロセッサの制御下にあり、方法は、カーネルスタックにおけるカーネルを備えている畳み込みニューラルネットワークの畳み込み層を受信することであって、カーネルスタックのカーネルは、カーネルランネルの複数のカーネルタイルを備えているタイルカーネルレイアウトにおけるものである、ことと、畳み込み層の入力活性化マップを受信することであって、入力活性化マップは、インターリーブされた入力活性化マップレイアウトにおけるものである、ことと、畳み込み層の出力活性化マップを複数のカーネルタイルおよび入力活性化マップピクセルの複数のクラスタから決定することであって、出力活性化マップは、出力活性化マップピクセルの複数のクラスタを備えているインターリーブされた出力活性化マップレイアウトにおけるものである、こととを含む。
【０００９】
さらなる側面では、畳み込みニューラルネットワークの畳み込み層の効率的実装のための方法が、開示される。方法は、ハードウェアプロセッサの制御下にあり、方法は、カーネルスタックにおけるカーネルを備えている畳み込みニューラルネットワークの畳み込み層を受信することであって、カーネルスタックのカーネルは、カーネルランネルの複数のカーネルタイルを備えているタイルカーネルレイアウトにおけるものであり、カーネルの寸法は、１である、ことと、畳み込み層の入力活性化マップを受信することであって、入力活性化マップは、基本入力活性化マップレイアウトにおけるものである、ことと、ストライディングによって、入力活性化マップのピクセル値を基本入力活性化マップレイアウトから入力活性化マップピクセルの複数のクラスタを備えているインターリーブされた入力活性化マップレイアウトに並べ替えることと、畳み込み層の出力活性化マップを複数のカーネルタイルおよび複数の入力活性化マップタイルから決定することであって、出力活性化マップは、転置されインターリーブされた出力活性化マップレイアウトにおけるものであり、転置されインターリーブされた出力活性化マップレイアウトは、出力活性化マップの複数のクラスタを備えている、こととを含む。
【００１０】
本明細書に説明される主題の１つ以上の実装の詳細が、付随の図面および以下の説明に記載される。他の特徴、側面、および利点は、説明、図面、ならびに請求項から明白となるであろう。本概要または以下の発明を実施するための形態のいずれも、本発明の主題の範囲を定義または限定することを主張するものではない。
【図面の簡単な説明】
【００１１】
【図１】図１は、例示的２次元（２Ｄ）畳み込みの略図を示す。
【図２】図２は、畳み込みニューラルネットワークの例示的３次元（３Ｄ）畳み込み層を図式的に図示する。
【図３】図３は、３×３、１×３、または３×１カーネルの畳み込みによって完全に利用されない幅４の単一命令多重データ（ＳＩＭＤ）レジスタの略図を示す。
【図４】図４は、畳み込みニューラルネットワークの畳み込み層の入力活性化マップのピクセル値の例示的並べ替えを図式的に図示する。
【図５Ａ】図５Ａ−５Ｃは、カーネルスタックのカーネルの重み値をランネルのタイルを備えているタイルフォーマットに並べ替える例を図式的に図示する。
【図５Ｂ】図５Ａ−５Ｃは、カーネルスタックのカーネルの重み値をランネルのタイルを備えているタイルフォーマットに並べ替える例を図式的に図示する。
【図５Ｃ】図５Ａ−５Ｃは、カーネルスタックのカーネルの重み値をランネルのタイルを備えているタイルフォーマットに並べ替える例を図式的に図示する。
【図６Ａ−１】図６Ａおよび６Ｂは、ランネルのタイルを備えているタイルフォーマットへのカーネルスタックのカーネルの重みの例示的並べ替えを図式的に図示する。
【図６Ａ−２】図６Ａおよび６Ｂは、ランネルのタイルを備えているタイルフォーマットへのカーネルスタックのカーネルの重みの例示的並べ替えを図式的に図示する。
【図６Ｂ−１】図６Ａおよび６Ｂは、ランネルのタイルを備えているタイルフォーマットへのカーネルスタックのカーネルの重みの例示的並べ替えを図式的に図示する。
【図６Ｂ−２】図６Ａおよび６Ｂは、ランネルのタイルを備えているタイルフォーマットへのカーネルスタックのカーネルの重みの例示的並べ替えを図式的に図示する。
【図７−１】図７は、ランネルのタイルを備えているタイルフォーマットへのカーネルスタックのカーネルの重みの別の例示的並べ替えを図式的に図示する。
【図７−２】図７は、ランネルのタイルを備えているタイルフォーマットへのカーネルスタックのカーネルの重みの別の例示的並べ替えを図式的に図示する。
【図８】図８は、タイル毎に出力活性化マップを決定することを図示するための畳み込みニューラルネットワークの例示的３Ｄ畳み込み層を図式的に図示する。
【図９Ａ】図９Ａ−９Ｂは、タイル毎に出力活性化マップを決定することを図示するための畳み込みニューラルネットワークの例示的３Ｄ畳み込み層を図式的に図示し、カーネルスタックランネルは、カーネルスタック重み値の複数の行にストラドリングする。
【図９Ｂ】図９Ａ−９Ｂは、タイル毎に出力活性化マップを決定するステップを図示するための畳み込みニューラルネットワークの例示的３Ｄ畳み込み層を図式的に図示し、カーネルスタックランネルは、カーネルスタック重み値の複数の行にストラドリングする。
【図１０】図１０は、タイル毎に畳み込みニューラルネットワークの畳み込み層の出力活性化マップを決定する例示的プロセスのフロー図であり、それは、随意に、入力活性化マップのピクセル値およびカーネルの重み値をインターリーブされたレイアウトおよびランネルのタイルにそれぞれ並べ替えることを含む。
【図１１】図１１は、カーネルスタックのカーネルの重み値をランネルのタイルを備えているタイルフォーマットに並べ替える例を図式的に図示する。
【図１２】図１２は、ウェアラブルディスプレイシステムの例を図式的に図示する。
【００１２】
図面全体を通して、参照番号は、参照される要素間の対応を示すために再使用され得る。図面は、本明細書に説明される例示的実施形態を図示するために提供され、本開示の範囲を限定することを意図されない。
【発明を実施するための形態】
【００１３】
（概要）
データ関係およびパターンを表すモデル（関数、アルゴリズム、システム等）は、入力を受け取り、ある方法において、入力に対応する出力を生成し得る。例えば、モデルは、畳み込みニューラルネットワーク（ＣＮＮ）または深層ニューラルネットワーク（ＤＮＮ）等の機械学習方法として実装され得る。深層学習は、タスク特定のアルゴリズムとは対照的に、学習データ表現の概念に基づく、より広義の一連の機械学習方法の一部であり、すなわち、拡張現実、複合現実、仮想現実、および機械知能に重要な視聴覚計算問題を解決することにおける多くの将来性を示す。機械学習では、畳み込みニューラルネットワーク（ＣＮＮまたはＣｏｎｖＮｅｔ）は、ある種の深層フィードフォワード人工ニューラルネットワークを含み得、ＣＮＮは、視覚的画像を分析するための適用において成功を収めている。機械学習方法は、眼画像セグメント化および眼追跡を含む、様々な問題に対するロバストかつ正確なソリューションを可能にし得る、一連の方法を含む。しかしながら、機械学習方法は、計算的に集約的または高価であり得る。故に、機械学習方法を効率的に実施することは、限定されたリソースを伴う内蔵プラットフォーム上での機械学習方法の適用を可能にすることができる。
【００１４】
機械学習モデルのパラメータは、訓練と称されるプロセスにおいて学習されることができる。例えば、機械学習モデルは、入力データと、対応する入力データのためのモデルの正しいまたは好ましい出力とを含む、訓練データを使用して、訓練されることができる。機械学習モデルは、入力データを繰り返し処理することができ、機械学習モデルのパラメータ（例えば、重み値）は、モデルが正しいまたは好ましい出力を生成する（またはそれに「収束する」）まで、試行錯誤プロセス等しいもので修正されることができる。例えば、重み値の修正は、「バックプロパゲーション」と称されるプロセスを通して実施され得る。バックプロパゲーションは、予期されるモデル出力と取得されるモデル出力との間の差異を決定することと、次いで、予期されるモデル出力と取得されるモデル出力との間の差異を低減させるためのモデルの一部または全部のパラメータの値を修正する方法を決定することとを含む。
【００１５】
機械学習方法のサブカテゴリである、畳み込みニューラルネットワーク（ＣＮＮ）は、眼画像のセグメント化等の種々の用途において使用されることができる。眼画像は、眼の眼球周囲領域を含むことができ、それは、眼と、眼瞼、眉毛、睫毛、および眼を包囲する皮膚等の眼の周囲の部分とを含む。眼画像は、眼画像内の眼の瞳孔領域、虹彩領域、または強膜領域を生成するためにセグメント化されることができる。眼画像は、眼画像内の眼の周囲の眼瞼等の皮膚を含む眼画像の背景を生成するためにもセグメント化されることができる。セグメント化された眼画像は、虹彩識別および眼追跡のために使用されることができる。
【００１６】
眼追跡は、種々の仮想現実（ＶＲ）、拡張現実（ＡＲ）、または複合現実（ＭＲ）用途において有用であり得る。例えば、ＶＲ、ＡＲ、またはＭＲデバイスのユーザに表示される仮想メニューは、ユーザの眼の向き（例えば、１つ以上の眼のヨー、ピッチ、またはロールに関する）に基づいて、空間的に位置付けられ得る。ユーザの眼が移動するにつれて、仮想メニューも、適宜、再位置付けされ得る。別の例として、ＶＲ、ＡＲ、またはＭＲデバイスのユーザは、眼移動によって、仮想メニューをスクロールし得る。さらなる例として、ユーザは、眼移動を使用して、コマンドをＶＲ、ＡＲ、またはＭＲデバイスに与え得る。さらに、眼追跡は、ディスプレイ整合等の整合方法および適切なレンダリングのために使用されることができる。故に、ＣＮＮは、多数の用途のために有用であり得るので、高度のハードウェア利用を達成するＣＮＮの効率的実装は、限定されたリソースを伴う内蔵デバイス（例えば、ＶＲ、ＡＲ、またはＭＲデバイス）上での眼追跡および他のコンピュータビジョン方法のロバストな実装等のＣＮＮの用途を可能にすることができる。
【００１７】
本明細書に開示されるシステムおよび方法は、コンピュータサーバ、パーソナルコンピュータ、タブレットコンピュータ、モバイルデバイス、または内蔵デバイス等のコンピューティングデバイス上でのＣＮＮの効率的実装を可能にすることができる。コンピューティングデバイスは、ベクトルプロセッサ、超長命令語（ＶＬＩＷ）ベクトルプロセッサ、または単一命令多重データ（ＳＩＭＤ）プロセッサを含むことができる。ＣＮＮの効率的実装は、入力活性化マップ、カーネル、または出力活性化マップの効率的データレイアウトに基づくことができる。
【００１８】
ＣＮＮの畳み込み層は、カーネルのカーネルスタックを含むことができる。畳み込み層のカーネルは、その入力に適用されると、その特定の学習されたカーネルに対する応答を示す結果として生じる出力活性化マップを生成することができる。しかしながら、畳み込みの計算は、計算的に高価または集約的であり得る。そして、畳み込み層は、計算的に高価であり得る。例えば、畳み込み層は、それらが他のタイプのＣＮＮ層（例えば、サブサンプリング層）より計算を要求するので、ＣＮＮの最も計算的に高価な層であり得る。結果として生じる出力活性化マップは、次いで、ＣＮＮの別の層によって処理され得る。ＣＮＮの他の層は、例えば、正規化層（例えば、明度正規化層、バッチ正規化（ＢＮ）層、ローカルコントラスト正規化（ＬＣＮ）層、またはローカル応答正規化（ＬＲＮ）層）、正規化線形層、アップサンプリング層、連結層、プーリング層、全結合層、線形全結合層、ソフトサイン層、再帰層、または任意のそれらの組み合わせを含むことができる。
【００１９】
ＣＮＮのカーネルスタックは、カーネルのＭ行と、カーネルのＮ列とを含むことができ、各列は、カーネルスタックのフィルタバンクとも称される。カーネルスタックのカーネルは、同一幅および同一高さを有することができる。畳み込み層は、Ｍ個の入力活性化マップを受信するためのＭ個の入力チャネルを有することができる。畳み込み層は、Ｎ個の出力活性化マップを生成するためのＮ個の出力チャネルを有することができる。各出力活性化マップは、カーネルスタックのフィルタバンクおよび対応する入力活性化マップの３次元畳み込みの結果であることができる。
【００２０】
いくつかの実装では、畳み込み層を効率的に実装するために、カーネルスタックのカーネルの重み値は、カーネルのためのタイルレイアウトに並べ替えられることができる。カーネルのためのタイルレイアウトは、重み値ランネルのタイルを備えている。ランネルは、以下の２つの性質を伴う、重み値の順序付けられたリストであることができる。第１に、ランネル内の重み値の数は、重み値のデータタイプを所与として、ＳＩＭＤレジスタ等のプロセッサレジスタが一度に含むことができる重み値の数と同一であることができる。例えば、１２８−ビットＳＩＭＤレジスタに対して、ランネルは、８つの半精度浮動小数点重み値または４つの単精度浮動小数点重み値を含むことができる。第２に、ランネルは、カーネルスタックの幅寸法（Ｍ）、その後、カーネルスタックの高さ寸法（Ｎ）、その後、個々のカーネルの幅寸法、その後、個々のカーネルの高さ寸法に沿って、トラバースすることによって、反復的に埋められることができる。トラバーサルは、ランネルがカーネルスタックのカーネルの重み値で完全に埋められるまで継続する。
【００２１】
いくつかの実装では、入力活性化マップのピクセル値は、インターリーブされたレイアウトに並べ替えられることができる。例えば、畳み込み層が、Ｍ個の入力活性化マップを受信した後、入力活性化マップのピクセル値は、入力活性化マップのための基本レイアウトから入力活性化マップのためのインターリーブされたレイアウトに並べ替えられることができる。いくつかの実装では、ピクセル値は、第１の入力活性化マップの第１のピクセル値の後、第２の入力活性化マップの第１のピクセルが続き、最後の（すなわち、Ｍ番目の）入力活性化マップの第１のピクセル値までそれが続く等のように、順序付けられることができる。最後の入力活性化マップの第１のピクセル値の後、最後の入力活性化マップの第２のピクセル値まで、第１の入力活性化マップの第２のピクセル値、第２の入力活性化マップの第２のピクセル値等と続き得る。この並べ替えは、畳み込み層の入力活性化マップの全てのうちの全てのピクセル値が同様に順序付けられるまで継続することができる。並べ替えプロセスは、大規模な並べ替えられた入力活性化マップをもたらし得、それは、全ての個々の入力活性化マップを含む。並べ替えられた入力活性化マップ内の各インデックス付けされた場所は、そのインデックスにおける個々の入力活性化マップからのピクセル値のクラスタを含むことができる。有利には、この並べ替えは、例えば、ＣＮＮの初期畳み込み層または第１の畳み込み層によって、最大で１回、実施される必要しかない。いくつかの実施形態では、並べ替えは、不必要であり得る。例えば、第１の畳み込み層は、１つの入力活性化マップを畳み込み、複数の出力活性化マップを生成することができる。この場合、入力活性化マップのピクセル値の並べ替えは、不必要であり得る。１つの入力活性化マップを畳み込み、複数の出力活性化マップを生成することは、いくつかの２次元（２Ｄ）畳み込みを１つの入力活性化マップに対して並行して実施することと考えられ得る。有利には、本明細書に開示される方法は、単一の入力活性化マップに対する２Ｄ畳み込みの効率的計算を可能にし得る。
【００２２】
インターリーブされたレイアウトにおける畳み込み層の出力活性化マップは、タイル毎に決定されることができる。例えば、出力活性化マップの重み値のクラスタに対して、融合積和演算を出力活性化マップピクセル値、並べ替えられた入力活性化マップピクセル値、およびカーネルタイルに実施する。いくつかの実装では、インターリーブされたレイアウトにおける畳み込み層の出力活性化マップは、出力活性化マップのための基本レイアウトに順序付けられることができる。
【００２３】
本明細書に開示されるシステムおよび方法に基づいて効率的に実装されるＣＮＮは、有利には、畳み込み層の処理または数学的側面の観点から、カーネルを用いて、入力活性化マップの畳み込みの効率的計算を可能にすることができる。したがって、ＣＮＮに基づく用途は、コンピュータサーバ、パーソナルコンピュータ、タブレットコンピュータ、モバイルデバイス、または内蔵デバイス等のコンピューティングデバイス上で双方向レートで動作し得る。加えて、いくつかの実施形態では、効率的に実装されるＣＮＮは、データ複製が不必要であるので、コンピューティングデバイス（例えば、内蔵デバイスの内蔵プロセッサ）上で利用可能な限定された量の高速メモリの高利用を可能にすることができ、それは、内蔵プロセッサを使用してＣＮＮを実装するための著しい改良である。さらに、本明細書に開示されるデータレイアウトは、畳み込み層ではないＣＮＮの他の層（例えば、アップサンプリングおよびダウンサンプリング層）の効率的処理を可能にすることができる。入力活性化マップを再配列する必要なく、入力活性化マップは、ベクトルプロセッサによって、並行してダウンサンプリングまたはアップサンプリングされることができる。データ並べ替えは、ＣＮＮの構造に応じて、１回行われることも、全く行われないこともある。したがって、本明細書に開示されるシステムおよび方法の利点は、効率的畳み込み計算以外にも拡張する。
【００２４】
さらに、効率的に実装されるＣＮＮは、高性能または低電力消費を有することができる。いくつかの実装では、本明細書に開示されるシステムおよび方法は、有利には、コンピューティングデバイスのプロセッサが、より短い期間にわたって、オン状態または高周波数状態にあり得るので、ＣＮＮを実装するコンピューティングデバイスの電力消費を低減させることができる。ＣＮＮ、例えば、ＣＮＮの畳み込み層の最適化は、所与の電力エンベロープにおいて、改良された最適または最大の性能を達成し得、それは、制約された性能または電力エンベロープを伴うコンピューティングデバイス（例えば、内蔵デバイス）に有用であり得る。
【００２５】
畳み込みは、計算的に高価であり、かつ下層ベクトルプロセッサの能力にマッピングするために簡単ではない。最低コストで（例えば、金銭、電力消費、および熱生成上）利用可能なハードウェアリソース（例えば、計算、メモリ、および概してその２つに配分されるプロセッサダイ空間）の利用を最大限にすることが、非常に望ましいので、本開示の方法を使用したハードウェアおよびソフトウェアレベルの両方におけるこの計算的に重い演算の最適化は、有利であり得る。
【００２６】
開示される方法は、データを並べ替え、それによって、畳み込みは、計算すること（例えば、方法を使用して畳み込みを実施するために要求される乗累算の数が、演算を正しく行うために数学的に要求されるほぼ最小数の演算に低減されるという意味において）、またはメモリ使用（例えば、ｉｍ２ｃｏｌ等の競合方法と異なり、殆どまたは全く余剰量のメモリが、要求されないという意味において（ｉｍ２ｃｏｌは、データの複製を犠牲にして、高計算効率を達成し、それは、メモリ全体を非効率的にする））の両方に関して、改良または最適方式でベクトルプロセッサ上で実施され得る。本明細書に開示される実施形態は、実装の柔軟性、性能、および容易性間のトレードオフのバランスを保つ。
【００２７】
（例示的２次元畳み込み）
複合問題を解決するための１つのアプローチは、問題をより単純かつより管理可能な構成要素に分け、複合問題が単位として解決することがより容易であり得る構成に全体的に分割され得るまでそれを再帰的に継続することによる分割統治アプローチであり得る。これらの部分問題は、グラフ内の節点または頂点と考えられ得る。
【００２８】
これらの部分問題が解法されると、その結果は、元の複合問題に対する解に到達するように何らかの方法で集約される必要がある。部分問題の結果を組み合わせための方法は、単純な数式（例えば、要素毎の加算）から複合数式まで及び得る。部分問題の結果を組み合わせる演算は、グラフにおける接続または縁として表され得る。
【００２９】
節点および縁のこのグラフ（部分問題に対応し、部分問題の結果を組み合わせること）は、ネットワークを形成することができ、ネットワークは、ネットワークの入力を受信し、ネットワークの所望の出力に到達するために、一連の計算を入力および中間結果に対して実施する。ネットワークは、それが、このグラフを形成する頂点としてのニューロンと縁としての軸索とを用いて哺乳類の脳が機能する方法を表すという点において、ニューラルネットワークまたは人工ニューラルネットワークと称され得る。ネットワークは、動物における生物学的ニューラルネットワークに類似するが、コンピューティングデバイスによって実装される、計算エンティティであるという意味において、人工である。
【００３０】
畳み込み演算は、第３の関数を生成するための２つの関数（例えば、連続関数ｆおよびｇ）に関する数学演算であることができる。第３の関数は、２つの元の関数のうちの１つの修正バージョンと考えられ得、それは、元の関数機能のうちの１つが変換される量の関数として、２つの関数の点毎の乗算の積分に基づく。２つの関数ｆおよびｇに関する畳み込み演算は、下記の式（１）として表され得る。
【００３１】
【数１】
2019535079.tif 000003
【００３２】
したがって、変数ｔの周りで、２つの関数ｆおよびｇの畳み込みを決定することは、下記の擬似コードによって要約され得る：
（１）合計変数をゼロに設定する
（２）τ変数に対して、負の無限大から正の無限大まで：
（２ａ）τを上記範囲のリスト内の次の値にとり、
（２ｂ）点ｆ（τ）およびｇ（ｔ−τ）における関数ｆおよびｇの値を計算し、
（２ｃ）（２ｂ）において計算された２つの値を一緒に乗算し、
（２ｄ）（２ｃ）において計算された値を合計変数に加算し、
（２ｅ）（２ａ）に戻り、プロセスを繰り返す
（２）の終了。
【００３３】
画像処理では、画像の畳み込みは、同様に決定されることができる。例えば、畳み込み層は、その入力として、入力活性化マップを受信することができ、入力活性化マップは、上記の関数ｇに類似し得る。畳み込み層は、畳み込み層の出力活性化マップを決定するために、カーネルを用いて入力活性化マップを畳み込むことができ、カーネルは、上記の関数ｆに類似し得る。カーネルは、行列、すなわち、重み値の２次元アレイであることができる。入力活性化マップの値とカーネルの値との乗算は、上記のアクション（２ｃ）に類似する。連続である関数ｆおよびｇと異なり、入力活性化マップは、離散ピクセル値を備え、カーネルは、離散重み値を備えている。したがって、式（１）における積分は、合計することと置換されることができる。
【００３４】
図１は、例示的２次元（２Ｄ）畳み込み１００の略図を示す。例示的２Ｄ畳み込み１００は、カーネル１０８を用いて、入力活性化マップ１０４（入力特徴マップ、入力画像、または入力チャネルとも称される）を畳み込み、出力活性化マップ１１２（出力特徴マップ、出力画像、または出力チャネルとも称される）を決定する。入力活性化マップ１０４は、５ピクセル幅と、５ピクセル高さとを伴い、２５ピクセル値を含む。入力活性化マップ１０４内の数は、入力活性化マップ１０４のピクセル値を示す。示されるように、入力活性化マップ１０４の５行の各々は、ピクセル値（１，１，１，０，０）、（０，１，１，１，０）、（０，０，１，１，１）、（０，０，１，１，０）、および（０，１，１，０，１）を有することができる。カーネル１０８は、示されるように、３×３カーネルであり、すなわち、カーネル１０８は、３の高さの重み値と、３の幅の重み値とを有する。カーネル１０８内の数は、カーネル１０８の重み値を示す。カーネル１０８の３行の重み値は、（１，０，１）、（０，１，０）、および（１，０，１）であることができる。
【００３５】
カーネル１０８を用いた入力活性化マップ１０４の畳み込みは、下記の式（２）によって表され得る。
【００３６】
【数２】
2019535079.tif 000004
【００３７】
式中、τは、カーネル１０８の重み値の位置を表し、ｔは、出力活性化マップ１１２のピクセル値の位置を表す。カーネル１０８の中心における重み値１０８ｅは、（０，０）のτ値を有することができる。重み値１０８ａは、（−１，−１）のτ値を有することができる。重み値１０８ｇは、（−１，＋１）のτ値を有することができる。重み値１０８ｉは、（＋１，＋１）のτ値を有することができる。
【００３８】
出力活性化マップ１１２内の数は、出力活性化マップ１１２のピクセル値を示す。出力活性化マップ１１２の中心におけるピクセル値１１２ｅは、出力活性化マップ１１２の位置（２，２）にある。ピクセル値１１２ａは、出力活性化マップ１１２の位置（１，１）にあることができる。ピクセル値１１２ｇは、出力活性化マップ１１２の位置（１，３）にあることができる。ピクセル値１１２ｉは、出力活性化マップ１１２の位置（３，３）にあることができる。
【００３９】
出力活性化マップ１１２の位置（１，１）におけるピクセル値１１２ａを決定するために、以下の乗算が、実施されることができる：ピクセル値１０４ａは、重み値１０８ｊによって乗算されることができ、ピクセル値１０４ｂは、重み値１０８ｉによって乗算されることができ、ピクセル値１０４ｃは、重み値１０８ｈによって乗算されることができ、ピクセル値１０４ｅは、重み値１０８ｇによって乗算されることができ、ピクセル値１０４ｆは、重み値１０８ｆによって乗算されることができ、ピクセル値１０４ｇは、重み値１０８ｅによって乗算されることができ、ピクセル値１０４ｈは、重み値１０８ｃによって乗算されることができ、ピクセル値１０４ｉは、重み値１０８ｂによって乗算されることができ、ピクセル値１０４ｊは、重み値１０８ａによって乗算されることができる。さらに、上記の乗算の結果の累算または合計も、実施されることができる。
【００４０】
出力活性化マップ１１２の他のピクセル値も同様に、決定されることができる。下記の式（３）は、出力活性化マップ１１２のピクセル値１１２ａ−１１２ｉを決定することを示す。
【００４１】
【数３】
2019535079.tif 000005
【００４２】
（例示的３次元畳み込み層）
図２は、畳み込みニューラルネットワークの例示的３次元畳み込み層２００を図式的に図示する。畳み込み層２００は、Ｍ個の入力活性化マップ２０４ａ１、２０４ｂ１、・・・、および２０４ｍ１を受信するためのＭ個の入力チャネル２０４を有することができる。入力活性化マップは、Ｑの入力活性化マップ幅と、Ｐの入力活性化マップ高さとを有することができる。入力活性化マップ２０４ａ１、２０４ｂ１、・・・、および２０４ｍ１は、同一入力活性化マップ幅Ｑと、入力活性化マップ高さＰとを有することができる。
【００４３】
畳み込み層２００は、畳み込み層２００の全てのカーネルのカーネルスタック２０８を含むことができる。カーネルスタック２０８は、カーネル２０８ａ１−２０８ａｎ、２０８ｂ１−２０８ｂｎ、および２０８ｍ１−２０８ｍｎを含むことができる。カーネルスタック２０８は、カーネルのＭ行を含む。カーネルスタック２０８は、カーネルのＮ列を含み、各列は、カーネルスタック２０８のフィルタバンクとも称される。例えば、カーネル２０８ａ１、２０８ｂ１、・・・、および２０８ｍ１の列は、カーネルスタック２０８のフィルタバンクを形成する。カーネルスタック２０８のカーネルは、Ｋｘ個の重み値のカーネル幅と、Ｋｙ個の重み値のカーネル高さとを有することができ、合計Ｋｙ＊Ｋｘ個の重み値を有する。カーネルスタック２０８のカーネル２０８ａ１−２０８ａｎ、２０８ｂ１−２０８ｂｎ、および２０８ｍ１−２０８ｍｎは、同一カーネル幅Ｋｘおよびカーネル高さＫｙを有することができる。
【００４４】
畳み込み層２００は、Ｎ個の出力活性化マップ２１２ａ１、２１２ａ２、および２１２ａｎを生成するためのＮ個の出力チャネル２１２を有することができる。各出力活性化マップは、カーネルスタック２０８のフィルタバンクおよび対応する入力活性化マップの３次元畳み込みの結果であることができる。出力活性化マップは、Ｑ’の出力活性化マップ幅と、Ｐ’の出力活性化マップ高さとを有することができる。出力活性化マップ２１２ａ１、２１２ａ２、・・・、および２１２ａｎは、同一出力活性化マップ幅‘Ｑおよび出力活性化マップ高さＰ’を有することができる。
【００４５】
畳み込み層２００の演算は、下記の擬似コードによって要約され得る：
（１）値１から値Ｎの変数ｎに対して:
（２ａ）ｎ番目の出力活性化マップのピクセル値をゼロの値に設定し、
（２ｂ）値１から値Ｎの変数ｍに対して：
（３ａ）ｎ番目の出力活性化マップのピクセル値＋＝
Ｃｏｎｖｏｌｖｅ（ｍ番目の入力活性化マップ，カーネルスタックの位置（ｍ，ｎ）におけるカーネル）、式中、「Ｃｏｎｖｏｌｖｅ」は、２次元畳み込みを示し、「＋＝」は、カーネルを用いた入力活性化マップの畳み込みの結果を伴う出力活性化マップの点毎の合計を表す
（２ｂ）の終了
（１）の終了。
【００４６】
（単一命令多重データレジスタの例示的利用）
本明細書に開示されるシステムおよび方法は、コンピュータサーバ、パーソナルコンピュータ、タブレットコンピュータ、モバイルデバイス、または内蔵デバイス等のコンピューティングデバイス上でのＣＮＮの効率的実装を可能にすることができる。コンピューティングデバイスは、ベクトルプロセッサ、超長命令語（ＶＬＩＷ）ベクトルプロセッサ、または単一命令多重データ（ＳＩＭＤ）プロセッサを含むことができる。ＳＩＭＤ対応プロセッサまたはアーキテクチャは、命令セットアーキテクチャ（ＩＳＡ）またはそのＩＳＡの特定のハードウェア実装であることができ、「単一命令多重データ」演算の使用を通してデータ並列計算を実施することが可能であり、単一命令は、同一演算を入力データの複数の別個の組に実施することと並行して行われることができる。そのようなＩＳＡの非限定的例は、ｘ８６上の拡張命令のストリーミングＳＩＭＤ拡張命令（ＳＳＥ）ファミリ、Ａｄｖａｎｃｅｄ  ＲＩＳＣ  Ｍａｃｈｉｎｅ（ＡＲＭ）上のＮＥＯＮまたは高度ＳＩＭＤ拡張命令、ＰｏｗｅｒＰＣ上のＡｌｔｉＶｅｃ等を含む。故に、ＣＮＮの効率的実装は、ＳＩＭＤ対応アーキテクチャを実装するプロセッサ上のメモリおよび単一命令多重データ（ＳＩＭＤ）実行ユニットの利用を含むプロセッサの最大利用等、利用を改良することができる。
【００４７】
いくつかの実装では、カーネルのための望ましい特徴は、カーネルの中心の周囲での等距離を含むことができる。奇数である寸法を伴うカーネル（例えば、３×１カーネル）は、そのような望ましい特徴を有することができる。しかしながら、そのようなカーネルの奇数寸法は、２で除算不可能であり得る。そして、ＳＩＭＤプロセッサレジスタは、２のべき数（故に、偶数）であるレジスタ幅を有し得る。畳み込みの単純実装は、データ複製または畳み込みを一緒にバンドルすることの一方または両方を用いることなしに、ＳＩＭＤ対応プロセッサのＳＩＭＤ実行ユニットの完全利用を達成しないこともある。例えば、「ｉｍ２ｃｏｌ」および「ｃｏｌ２ｉｍ」変換が、データ複製のために使用されることができるが、それは、メモリ利用を犠牲にして生じる。さらに、「ｉｍ２ｃｏｌ」および「ｃｏｌ２ｉｍ」変換は、計算的に高価であり得る。畳み込みを一緒にバンドルすることは、（本明細書に開示されるシステムおよび方法と比較して）水平ＳＩＭＤ演算を要求し得、それは、ＳＩＭＤ実行ユニットの利用を減少させ得る余分な演算であり得る。
【００４８】
図３は、３×３、１×３、または３×１カーネルの畳み込みによって完全に利用されない幅４の単一命令多重データ（ＳＩＭＤ）レジスタの略図を示す。図３の左パネルは、３×３カーネル３０４ａを示し、各白色正方形は、カーネル３０４ａの重み値を表す。ＳＩＭＤレジスタ３０８ａは、カーネル３０４ａの４つの重み値を含むことができる。ＳＩＭＤレジスタ３０８ａが含み得る重み値の数は、重み値のデータタイプとＳＩＭＤレジスタ３０８ａのビット幅（例えば、１２８ビット）の両方に依存する。したがって、カーネル３０４ａの単純な実装は、ＳＩＭＤレジスタ３０８ａの完全利用に失敗する。図３の中央パネルは、１×３カーネル３０４ｂを示し、各白色正方形は、カーネル３０４ｂの重み値を表す。ＳＩＭＤレジスタ３０８ｂは、カーネル３０４ｂの４つの重み値を含むことができる。したがって、カーネル３０４ｂの単純な実装は、ＳＩＭＤレジスタ３０８ｂ（ならびに４つ以外の幅を伴うＳＩＭＤレジスタ）を完全に利用しないこともある。図３の右パネルは、３×１カーネル３０４ｃを示し、各白色正方形は、カーネル３０４ｃの重み値を表す。ＳＩＭＤレジスタ３０８ｃは、カーネル３０４ｃの４つの重み値を含むことができる。したがって、カーネル３０４ｃの単純な実装は、ＳＩＭＤレジスタ３０８ｃの完全利用に失敗する。
【００４９】
（畳み込み層の入力アクションマップのピクセル値の例示的並べ替え）
メモリ利用ｎに悪影響または実質的に悪影響を及ぼさずに、ＳＩＭＤレジスタの利用を改良するために、入力活性化マップのピクセル値は、並べ替えられることができる。図４は、畳み込みニューラルネットワークの畳み込み層の入力活性化マップのピクセル値の例示的並べ替え４００を図式的に図示する。入力活性化マップのピクセル値の並べ替えは、入力活性化マップを入力活性化マップのための基本レイアウト（基本入力活性化マップレイアウト）から入力活性化マップのためのインターリーブされたレイアウト（インターリーブされた入力活性化マップレイアウト）に変換する。
【００５０】
基本入力活性化マップレイアウトでは、入力活性化マップは、第１の入力活性化マップの全てのピクセル値が、第２の入力活性化マップの全てのピクセルの前に記憶される（メモリ場所の観点から）等と続き得るように、チャネル毎に順序付けられ得る。図４に図示されるように、畳み込み層は、４つの入力活性化マップ４０４、４０８、４１２、および４１６をその入力として受信することができる。基本レイアウトでは、入力活性化マップ４０４、４０８、４１２、および４１６のピクセルは、チャネル毎に記憶され得る。例えば、第１の入力活性化マップ４０４のピクセル値４０４ａおよび４０４ｂは、第２の入力活性化マップ４０８のピクセル値４０８ａおよび４０８ｂの前に記憶され得る。別の例として、第２の入力活性化マップ４０８のピクセル値４０８ａおよび４０８ｂは、第３の入力活性化マップ４１２のピクセル値４１２ａおよび４１２ｂの前に記憶され得る。さらに別の例として、第３の入力活性化マップ４１２のピクセル値４１２ａおよび４１２ｂは、第４の入力活性化マップ４１６のピクセル値４１６ａおよび４１６ｂの前に記憶され得る。
【００５１】
図４は、４つの入力活性化マップ４０４、４０８、４１２、および４１６からインターリーブされたレイアウトに並べ替えられた入力活性化マップ４２０を示す。並べ替えられた入力活性化マップ４２０は、入力活性化マップ４０４、４０８、４１２、および４１６のピクセル値を含むことができる。入力活性化マップ４０４、４０８、４１２、および４１６内の数は、ピクセル値のインデックス場所を示す。インターリーブされたレイアウトでは、第１の入力活性化マップ４０４の第１のピクセル値４０４ａ（入力活性化マップ４０４のインデックス場所１におけるピクセル値４０４ａ）の後、第２の入力活性化マップ４０８の第１のピクセル値４０８ａ（入力活性化マップ４０８のインデックス場所１におけるピクセル値４０８ａ）、第３の入力活性化マップ４１２の第１のピクセル値４１２ａ（入力活性化マップ４１２のインデックス場所１におけるピクセル値４１２ａ）、および第４の入力活性化マップ４１６の第１のピクセル値４１６ａ（入力活性化マップ４０４のインデックス場所１におけるピクセル値４１６ａ）が続き得る。
【００５２】
第４の入力活性化マップ４１６の第１のピクセル値４１６ａの後、第１の入力活性化マップ４０４の第２のピクセル値４０４ｂ（入力活性化マップ４０４のインデックス場所２におけるピクセル値４０４ｂ）、第２の入力活性化マップ４０８の第２のピクセル値４０８ｂ（入力活性化マップ４０８のインデックス場所２におけるピクセル値４０８ｂ）、第３の入力活性化マップ４１２の第２のピクセル値４１２ｂ（入力活性化マップ４１２のインデックス場所２におけるピクセル値４１２ｂ）、および第４の入力活性化マップ４１６の第２のピクセル値４１６ｂ（入力活性化マップ４１６のインデックス場所２におけるピクセル値４１６ｂ）が続き得る。並べ替えられた入力活性化マップ４２０では、全ての入力活性化マップ４０４、４０８、４１２、および４１２のピクセル値は全て、同様に順序付けられ得る。したがって、並べ替えられた入力活性化マップ４２０内の各インデックス付けされた場所は、そのインデックスにおける個々の入力活性化マップ４０４、４０８、４１２、および４１６からのピクセル値のクラスタを含むことができる。
【００５３】
同様に、畳み込み層が、Ｍ個の入力活性化マップを受信後、入力活性化マップのピクセル値は、基本入力活性化マップレイアウトからインターリーブされた入力活性化マップレイアウトに並べ替えられることができる。例えば、ピクセル値は、第１の入力活性化マップの第１のピクセル値後、Ｍ番目の入力活性化マップの第１のピクセルまで、第２の入力活性化マップの第１のピクセルが続く等となるように順序付けられることができる。Ｍ番目の入力活性化マップの第１のピクセル値の後、Ｍ番目の入力活性化マップの第２のピクセル値まで、第１の入力活性化マップの第２のピクセル値、第２の入力活性化マップの第２のピクセル値等と続き得る。この並べ替えは、Ｍ個の入力活性化マップの全てのうちの全てのピクセル値が同様に順序付けられるまで継続し得る。並べ替えプロセスは、大規模な並べ替えられた入力活性化マップをもたらし、それは、Ｍ個の個々の入力活性化マップを含む。並べ替えられた入力活性化マップ内の各インデックス付けされた場所は、そのインデックスにおける個々の入力活性化マップからのピクセル値のクラスタを含むことができる。
【００５４】
故に、出力活性化マップ４０４、４０８、４１２、および４１６も、入力活性化マップと同一方法でインターリーブされる。入力活性化マップ４０４、４０８、４１２、および４１６の行および列は、直接、並べ替えられた入力活性化マップ４２０内の行および列に対応する。例えば、入力活性化マップ４０４の位置（ｉ，ｊ）は、並べ替えられた入力活性化マップ４２０の位置（ｉ，ｊ）におけるピクセルのクラスタにインデックスを作る。
【００５５】
有利には、この並べ替えは、例えば、ＣＮＮの初期畳み込み層または第１の畳み込み層によって、最大で１回、実施される必要しかない。いくつかの実施形態では、並べ替えは、不必要であり得る。例えば、第１の畳み込み層は、１つの入力活性化マップを畳み込み、複数の出力活性化マップを生成することができる。この場合、入力活性化マップのピクセル値の並べ替えは、不必要であり得る。１つの入力活性化マップを畳み込み、複数の出力活性化マップを生成することは、いくつかの２次元（２Ｄ）畳み込みを１つの入力活性化マップに並行して実施することと考えられ得る。有利には、本明細書に開示される方法は、単一の入力活性化マップ上での２Ｄ畳み込みの効率的計算を可能にし得る。
【００５６】
入力活性化マップがインターリーブされたレイアウトでは、畳み込み層の出力活性化マップも、同様のレイアウトにおけるものであることができる。有利には、ピクセル値の並べ替えは、例えば、ＣＮＮの初期畳み込み層または第１の畳み込み層によって、最大で１回、実施されることができる。故に、ＣＮＮは、インターリーブされたレイアウトへのピクセル値の並べ替えがＣＮＮの１つのみの畳み込み層のために実施され得るので、効率的に実装されることができる。
【００５７】
例えば、出力活性化マップのためのインターリーブされたレイアウト（インターリーブされた出力活性化マップレイアウト）における並べ替えられた出力活性化マップは、出力活性化マップのための基本レイアウト（基本出力活性化マップレイアウト）における出力活性化マップを含むことができる。インターリーブされた出力活性化マップレイアウトでは、ピクセル値は、第１の出力活性化マップの第１のピクセル値の後、Ｎ番目の出力活性化マップの第１のピクセル値まで、第２の出力活性化マップの第１のピクセルが続く等となるように順序付けられることができる。基本出力活性化マップレイアウトにおける出力活性化マップの数は、Ｎによって示されることができる。Ｎ番目の出力活性化マップの第１のピクセル値の後、Ｎ番目の出力活性化マップの第２のピクセル値まで、第１の出力活性化マップの第２のピクセル値、第２の出力活性化マップの第２のピクセル値等と続き得る。Ｎ個の出力活性化マップの他のピクセル値も同様に、順序付けられ得る。インターリーブされたレイアウトにおける出力活性化マップは、Ｎ個の個々の出力活性化マップを含む。出力活性化マップ内の各インデックス付けされた場所は、そのインデックスにおける個々の出力活性化マップからのピクセル値のクラスタを含むことができる。
【００５８】
いくつかの実装では、基本出力活性化マップレイアウトでは、出力活性化マップは、第１の出力活性化マップに属する全てのピクセル値が第２の出力活性化マップに属する全てのピクセルの前に記憶される（メモリ場所の観点から）等となるように、チャネル毎に順序付けられ得る。いくつかの実装では、インターリーブされた出力活性化マップレイアウトにおける並べ替えられた出力活性化マップのピクセル値は、基本出力活性化マップレイアウトに順序付けられることができる。例えば、第１の出力活性化マップは、並べ替えられた出力活性化マップの第１のピクセル、（Ｎ＋１）番目のピクセル、（２Ｎ＋１）番目のピクセル等を含むことができる。別の例として、第２の出力活性化マップは、並べ替えられた出力活性化マップの第２のピクセル、（Ｎ＋２）番目のピクセル、（２Ｎ＋２）番目のピクセル等を含むことができる。さらに別の例として、Ｎ番目の出力活性化マップは、並べ替えられた出力活性化マップのＮ番目のピクセル、（２＊Ｎ）番目のピクセル、（３＊Ｎ）番目のピクセル等を含むことができる。
【００５９】
有利には、各ＣＮＮ層後のデータの再シャッフルは、ＣＮＮ層の出力がインターリーブされた出力活性化マップレイアウトにおけるものであり得るので、不必要であり得る。その結果、入力活性化マップのみが、１回、インターリーブされたレイアウトに並べ替えられる必要がある（例えば、ＣＮＮの入力活性化マップ、それは、ＣＮＮの入力層の入力活性化マップであり得る）。インターリーブされたレイアウトは、次いで、後続層の入力活性化マップのピクセル値を並べ替えずに、ＣＮＮの後続層を通して伝搬することができる。
【００６０】
（ランネルのタイルへのカーネルスタックのカーネルの重み値の例示的並べ替え）
畳み込み層４００の入力活性化マップ４０４、４０８、４１２、および４１２が、入力活性化マップタイルレイアウトに並べ替えられると、カーネルスタック２０８のカーネル２０８ａ１−２０８ａｎ、２０８ｂ１−２０８ｂｎ、および２０８ｍ１−２０８ｍｎは、カーネルの基本レイアウトからカーネルのタイルレイアウトに並べ替えられ、内蔵デバイス等のコンピューティングデバイスのプロセッサのロード、算術、または記憶動作のために、ベクトル演算を利用することができる。図２に示されるように、カーネルスタック２０８の行の数および入力チャネル２０４の数は、同一であることができる。カーネルスタック２０８の列の数および出力チャネル２１２の数は、同一であることができる。カーネルスタック２０８のカーネルは、Ｋｘ重み値のカーネル幅と、Ｋｙ重み値のカーネル高さとを有することができる。
【００６１】
図５Ａ−５Ｃ、６Ａ、６Ｂ、および７は、重み並べ替えの例を図示する。使用される方法に応じて、チャネルの入力および出力数（その結果、カーネルスタック寸法）には、制限が存在しない。制限を有する、説明される方法は、通常、理解がより単純であり、わずかにより高速であり、柔軟性と計算効率のトレードオフを平衡する。メモリ使用に関して、それらは全て、いくつかの実装では、等しく効率的である。第１のステップは、図５Ａ−５Ｃ、６Ａ、６Ｂ、および７に図示される全ての方法間で共有される。第１のステップでは、入力チャネルは、上で説明されるように、インターリーブされたフォーマット内に再配列される。言い換えると、第１のチャネルの第１のピクセルは、第２のチャネルの第１のピクセルの前に生じ、それは、順に、ｎ番目のチャネルの第１のピクセルの前に生じ、それは、第１のチャネルの第２のピクセルの前に生じる等と続く。続いて、カーネル重みを並べ替える。本ステップは、使用される方法に基づいて変動する。
【００６２】
ニューラルネットワークを訓練することは、基本カーネルレイアウトにおけるカーネルスタックのカーネルの重み値を学習することを含むことができる。ニューラルネットワークを訓練することは、オフラインプロセスであることができるので（例えば、コンピュータサーバ、パーソナルコンピュータ、タブレットコンピュータ、モバイルデバイス、または内蔵デバイス等のコンピューティングデバイスが、結果として生じるニューラルネットワークを使用して、画像セグメント化および眼追跡を実施する前）、開示されるシステムおよび方法を使用したカーネルの重み値の並べ替えは、有利には、ニューラルネットワークのランタイム性能の損失を伴わずに、オフライン様式で１回実施されることができる（例えば、カーネルの重み値を学習した後）。本明細書に開示される方法は、内蔵プロセッサ、通常の中央処理ユニット（ＣＰＵ）、グラフィカル処理ユニット（ＧＰＵ）、または専用ハードウェア特定用途向け集積回路（ＡＳＩＣ）設計を伴うコンピューティングデバイス上にＣＮＮを効率的に実装するために使用されることができる。
【００６３】
図５Ａ−５Ｃは、カーネルスタック２０８のカーネルの重み値をランネルのタイルを備えているタイルフォーマットに並べ替える例を図式的に図示する。カーネル寸法に関する制限は、これらの例には存在しない。図５Ａは、畳み込み層２００の２×２カーネルスタック２０８を示し、２行のカーネルと、２列のカーネルとを伴う。カーネルの第１の行は、カーネル５０４と、カーネル５０８とを含む。カーネルの第２の行は、カーネル５１２と、カーネル５１６とを含む。カーネルスタック２０８の行の数と入力チャネル２０４の数とは、同一であることができ、カーネルスタック２０８の列の数と出力チャネル２１２の数とは、同一であることができるので、カーネルスタック２０８は、２つの入力活性化マップを畳み込み、２つの出力活性化マップを生成する。カーネルスタック２０８のカーネルは、３×３の寸法を有する。カーネル内の数は、カーネル内の重み値のインデックスを示す。カーネルスタック２０８のカーネルの重み値は、３２ビットのサイズを有し、ＳＩＭＤレジスタ等のプロセッサレジスタが、６４ビットの幅を有する場合、ＳＩＭＤレジスタは、一度に２つの重み値を含むことができる。
【００６４】
カーネルスタック２０８のカーネル５０４、５０８、５１２、および５１６の重み値５０４ａ−５０４ｉ、５０８ａ−５０８ｉ、５１２ａ−５１２ｉ、および５１６ａ−５１６ｉは、カーネルの基本レイアウト（基本カーネルレイアウト）からカーネルのタイルレイアウト（タイルカーネルレイアウト）に並べ替えられることができる。カーネルのタイルレイアウトは、ランネルのタイルを含むことができる。いくつかの実装では、ランネルは、以下の性質を伴う重み値の順序付けられたリストであることができる。第１に、ランネル内の重み値の数は、重み値のデータタイプを所与として、ＳＩＭＤレジスタ等のプロセッサレジスタが一度に含むことができる重み値の数と同一であることができる。例えば、１２８−ビットＳＩＭＤレジスタに対して、ランネルは、半浮動のカーネルのための８つの半精度浮動小数点重み値（１６ビット浮動小数点数）または浮動のカーネルのための４つの単精度浮動小数点重み値（３２ビット浮動小数点数）を含むことができる。
【００６５】
第２に、ランネルは、カーネル内の恣意的開始点を所与として、以下のトラバーサル優先順位に関して、反復的に埋められることができる：
（１）カーネルスタック２０８の幅寸法（Ｎ寸法またはカーネルスタックｘ方向（Ｓｘ）、それは、図５Ａに図示されるカーネルスタック２０８に関する２と等しい）に沿ってトラバースする
（２）カーネルスタック２０８の高さ寸法（Ｍ寸法またはカーネルスタックｙ方向（Ｓｙ）、それは、図５Ａに図示されるカーネルスタック２０８に関する２と等しい）に沿ってトラバースする
（３）個々のカーネルの幅寸法（Ｋｘ、それは、図５Ａに図示されるカーネルスタック２０８のカーネルに関する２と等しい）に沿ってトラバースする
（４）個々のカーネルの高さ寸法（Ｋｙ、それは、図５Ａに図示されるカーネルスタック２０８のカーネルに関する２と等しい）に沿ってトラバースする
トラバーサルは、ランネルが重み値で完全に埋められるまで継続する。
【００６６】
いくつかの実装では、タイルは、ランネルの順序付けられたリストであることができ、ランネルの数は、「タイル」が、常時、カーネルスタック幅境界（カーネルスタック行境界とも称される）上で開始し、カーネルスタック幅境界上で終了するように選定され得る。したがって、タイルは、最後のランネルがカーネルスタック行の最後で終了するまで、徐々に多くのランネルで埋められることができる。
【００６７】
６４ビット幅を伴うＳＩＭＤレジスタに対して、ランネル幅も、６４ビットであることができる。カーネルの重み値が、３２ビットのサイズを有する場合、６４ビットＳＩＭＤレジスタは、２つの重み値を含むことができる。したがって、ランネルは、２つの３２ビット重み値を含むことができる。タイルあたりのランネルの数は、上記のトラバーサル優先順位に基づいて、１であり得る。すなわち、ランネルは、最初に、カーネル５０４のインデックス場所１において、重み値５０４ａで、次いで、カーネル５０８のインデックス場所１において、重み値５０８ａで埋められ得る。重み値５０４ａおよび５０８ａで埋めた後、ランネルは、完全に埋められる。重み値５０４ａは、カーネルスタック幅境界にあり、重み値５０８ａは、別のカーネルスタック幅境界にあるので、重み値５０４ａおよび５０８ａを伴うランネルを伴うタイルは、カーネルスタック幅境界で開始し、カーネルスタック幅境界で終了する。したがって、タイルあたりのランネルの数は、１であり得る。
【００６８】
図５Ｂは、図５Ａに示される基本レイアウトにおけるカーネルスタック２０８から変換されたタイルカーネルレイアウトにおけるカーネルスタック２０８ｍ１を示す。タイルレイアウトにおけるカーネルスタック２０８ｍ１は、１つ以上のタイルを含むことができる。タイルは、２つの重み値を伴う１つのランネルを含むことができる。カーネルスタック２０８ｍ１は、そのカーネルスタック２０８ｍ１が、畳み込み層２００の全ての重み値を包含するために必要とされるタイルを含み得るように、畳み込み層２００内に全ての重み値を含むことができる。
【００６９】
カーネルスタック２０８ｍ１は、各々が１つのランネルの１８枚のタイル５２０ａ−５２０ｒを含むことができる。カーネルスタック２０８ｍ１は、表１に示されるタイルを含むことができる。
【００７０】
【表１】
2019535079.tif 000006
【００７１】
要するに、畳み込み層２００は、２×２カーネルスタック（カーネルスタックは、３×３カーネルを含む）を用いて、２つの入力活性化マップを畳み込み、２つの出力活性化マップを生成する。カーネルスタックのカーネルの重み値は、３２ビットのサイズを有することができる。したがって、６４ビットＳＩＭＤレジスタは、２つの重み値を含むことができる（ＳＩＭＤレーンの数は、２である）。６４ビットランネルは、２つの重み値を含むことができる。そして、タイルは、１つのランネルを含むことができる。
【００７２】
図５Ｃは、図５Ａに示される基本レイアウトにおけるカーネルスタック２０８から変換された別のタイルカーネルレイアウトにおけるカーネルスタック２０８ｍ２を示す。ＳＩＭＤレジスタが、９２ビット幅を有し、カーネルの重み値が、３２ビットのサイズを有する場合、９２ビットＳＩＭＤレジスタは、３つの重み値を含むことができる。カーネルスタック２０８ｍ２は、表２に示されるタイルを含むことができる。
【００７３】
【表２】
2019535079.tif 000007
【００７４】
別の例として、畳み込み層２００は、６つの出力活性化マップを生成するために、５×５カーネルを含む４×６カーネルスタックを用いて、４つの入力活性化マップを畳み込むことができる。カーネルスタックのカーネルの重み値は、１６ビットのサイズを有することができる。したがって、１２８ビットＳＩＭＤレジスタは、８つの重み値を含むことができる。１２８ビットランネルは、８つの重み値を含むことができる。そして、タイルは、３つのランネルを含むことができる。この例では、タイルあたりのランネルの数は、カーネルスタック幅境界（すなわち、行の開始）から開始すると、３つのランネルが、次のカーネルスタック幅境界に到達するために要求され得るので、３であり得る。第１のランネルは、カーネルスタック位置（１、１）、（１、２）、（１、３）、（１、４）、（１、５）、（１、６）、（２、１）、および（２、２）におけるカーネルのインデックス場所１にピクセル値を含むことができ、それは、カーネルスタック幅境界で終了しない。第２のランネルは、カーネルスタック位置（２、３）、（２、４）、（２、５）、（２、６）、（３、１）、（３、２）、（３、３）、および（３、４）におけるカーネルのインデックス場所１にピクセル値を含むことができ、それは、カーネルスタック幅境界で終了しない。第３のランネルは、カーネルスタック位置（３、５）、（３、６）、（４、１）、（４、２）、（４、３）、（４、４）、（４、５）、および（４、６）におけるカーネルのインデックス場所１にピクセル値を含むことができ、それは、カーネルスタック幅境界で終了する。
【００７５】
（カーネル重みの例示的並べ替え−出力チャネルの数は、ＳＭＩＤレジスタ幅の倍数と等しい）
図６Ａおよび６Ｂは、カーネルスタック２０８のカーネルの重み値をランネルのタイルを備えているタイルフォーマットに並べ替える例を図式的に図示する。カーネル寸法に関する制限は、これらの例には存在しない。これらの例に図示される方法は、最も単純かつ効率的であるが、（ネットワーク内のあらゆる畳み込み層からの）出力チャネルの数がベクトルプロセッサのＳＩＭＤレジスタ幅の倍数でなければならないという限定を伴う。したがって、方法は、図５Ａ−５Ｃを参照して上で説明される方法ほど柔軟ではない。
【００７６】
図６Ａを参照すると、それは、畳み込み層２００の８×８カーネルスタック２０８を示し、８行のカーネル（Ｍ＝８）と、８列のカーネル（Ｎ＝８）とを伴う。カーネルの第１の行は、８つのカーネル６０１−６０８を含む。カーネルの第２の行は、８つのカーネル６０９−６１６を含む。カーネルの第３の行は、８つのカーネル６１７−６２４を含む。カーネルの第４の行は、８つのカーネル６２５−６３２を含む。カーネルの第５の行は、８つのカーネル６３３−６４０を含む。カーネルの第６の行は、８つのカーネル６４１−６４８を含む。カーネルの第７の行は、８つのカーネル６４９−６５６を含む。カーネルの第８の行は、８つのカーネル６５７−６６４を含む。
【００７７】
カーネルスタック２０８の行の数と入力チャネル２０４の数とは、同一であることができ、カーネルスタック２０８の列の数と出力チャネル２１２の数とは、同一であることができるので、カーネルスタック２０８は、８つの入力活性化マップを畳み込み、８つの出力活性化マップを生成する。カーネルスタック２０８のカーネルは、この例では、３×３の寸法を有する。カーネルスタック２０８のカーネルの重み値が、３２ビットのサイズを有し、ＳＩＭＤレジスタ等のプロセッサレジスタが、６４ビットの幅を有する場合、ＳＩＭＤレジスタは、一度に２つの重み値を含むことができる。
【００７８】
図６Ａは、レジスタ幅が４つの要素である場合のメモリ内にカーネル重みを配列するステップを示す。これは、ネットワークの設計時に実施される１回限りの動作である。カーネルスタック２０８の重み値６０１ａ−６０１ｉ、６０２ａ−６０２ｉ、・・・、６６３ａ−６６３ｉ、および６６４ａ−６６４ｉは、カーネルの基本レイアウト（基本カーネルレイアウト）からカーネルのタイルレイアウト（タイルカーネルレイアウト）に並べ替えられることができる。カーネル重みの略図内の数は、並べ替え後の重み値の順序を示す。カーネルのタイルレイアウトは、ランネルのタイルを含むことができる。いくつかの実装では、ランネルは、以下の性質のうちの１つ以上のものを伴う重み値の順序付けられたリストであることができる。第１に、ランネル内の重み値の数は、重み値のデータタイプを所与として、ＳＩＭＤレジスタ等のプロセッサレジスタが一度に含むことができる重み値の数と同一であることができる。例えば、１２８−ビットＳＩＭＤレジスタに対して、ランネルは、半浮動のカーネルのための８つの半精度浮動小数点重み値（１６ビット浮動小数点数）または浮動のカーネルのための４つの単精度浮動小数点重み値（３２ビット浮動小数点数）を含むことができる。
【００７９】
第２に、ランネルは、カーネル内の恣意的開始点を所与として、以下のトラバーサル優先順位に関して、反復的に埋められることができる：
（１）カーネルスタック２０８の幅寸法（Ｎ寸法またはカーネルスタックｘ方向（Ｓｘ）、それは、図６Ａに図示されるカーネルスタック２０８に関する８と等しい）に沿ってトラバースする
（２）個々のカーネルの幅寸法（Ｋｘ、それは、図６Ａに図示されるカーネルスタック２０８のカーネルに関する３と等しい）に沿ってトラバースする
（３）カーネルスタック２０８の高さ寸法（Ｍ寸法またはカーネルスタックｙ寸法（Ｓｙ）、それは、図６Ａに図示されるカーネルスタック２０８に対する８と等しい）に沿ってトラバースする
（４）個々のカーネルの高さ寸法（Ｋｙ、それは、図６Ａに図示されるカーネルスタック２０８のカーネルに対する３と等しい）に沿ってトラバースする
トラバーサルは、ランネルが重み値で完全に埋められるまで継続する。
【００８０】
このトラバーサルは、代替として、以下のように表され得る：
（１）各Ｓｘに対して
（２）各Ｋｙに対して
（３）各Ｓｙに対して
（４）各Ｋｘに対して。
【００８１】
いくつかの実装では、タイルは、ランネルの順序付けられたリストであることができ、ランネルの数は、「タイル」が、常時、カーネルスタック幅境界（カーネルスタック行境界とも称される）上で開始せず、カーネルスタック幅境界上で終了するように選定され得る。図６Ａに図示されるように、カーネル６０１−６０４、６０９−６１２、６１７−６２０、６２５−６２８、６３３−６３６、６４１−６４４、６４９−６５２、および６５７−６６０の重み値は、並べ替えられ、プロセッサの１つのコア上で処理されることができる。カーネル６０５−６０８、６１３−６１６、６２１−６２４、６２９−６３２、６３７−６４０、６４５−６４９、６５３−６５６、および６６１−６６４の重み値は、並べ替えられ、プロセッサの別のコア上で処理されることができる。いくつかの実装では、タイルは、ランネルの順序付けられたリストであることができ、ランネルの数は、「タイル」が、常時、カーネルスタック幅境界（カーネルスタック行境界とも称される）上で開始し、カーネルスタック幅境界上で終了するように選定され得る。
【００８２】
１２８ビット幅を伴うＳＩＭＤレジスタに対して、ランネル幅も、１２８ビットであることができる。カーネルの重み値が、８ビットのサイズを有する場合、１２８ビットＳＩＭＤレジスタは、８つの重み値を含むことができる。したがって、ランネルは、８つの８ビット重み値を含むことができる。タイルあたりのランネルの数は、上記のトラバーサル優先順位に基づくことができる。すなわち、ランネルは、重み値６０１ａ、６０２ａ、６０３ａ、６０４ａ、６０１ｂ、６０２ｂ、６０３ｂ、６０４ｂ、６０１ｃ、６０２ｃ、６０３ｃ、６０４ｃ、６０９ａ、・・・、６１２ｃ、・・・、６５７ａ、・・・、６６０ｃ、６０１ｄ、６０２ｄ、６０３ｄ、６０４ｄ、６０１ｅ、６０２ｅ、６０３ｅ、６０４ｅ、６０１ｆ、６０２ｆ、６０３ｆ、６０４ｆ、６０９ｄ、・・・、６１２ｆ、・・・、６５７ｄ、・・・、６６０ｆ、６０１ｇ、６０２ｇ、６０３ｇ、６０４ｇ、６０１ｈ、６０２ｈ、６０３ｈ、６０４ｈ、６０１ｉ、６０２ｉ、６０３ｉ、６０４ｉ、６０９ｇ、・・・、６１２ｉ、・・・、６５７ｇ、・・・、および６６０ｉで埋められることができる。これらの重み値は、１つのプロセッサコアを用いて処理されることができる。残りの重み値も同様に、図６Ａに図示されるように順序付けられ、別のプロセッサコアを用いて処理されることができる。
【００８３】
図６Ｂは、図６Ａに示されるカーネルスタック２０８のカーネルの重み値をランネルのタイルを備えているタイルフォーマットに並べ替える別の例を図式的に図示する。カーネルスタック２０８の重み値６０１ａ−６０１ｉ、６０２ａ−６０２ｉ、・・・、６６３ａ−６６３ｉ、および６６４ａ−６６６ｉは、カーネルの基本レイアウト（基本カーネルレイアウト）からカーネルのタイルレイアウト（タイルカーネルレイアウト）に並べ替えられることができる。カーネル重みの略図内の数は、並べ替え後の重み値の順序を示す。カーネルのタイルレイアウトは、ランネルのタイルを含むことができる。いくつかの実装では、ランネルは、以下の性質のうちの１つ以上のものを伴う重み値の順序付けられたリストであることができる。第１に、ランネル内の重み値の数は、重み値のデータタイプを所与として、ＳＩＭＤレジスタ等のプロセッサレジスタが一度に含むことができる重み値の数と同一であることができる。例えば、１２８−ビットＳＩＭＤレジスタに対して、ランネルは、半浮動のカーネルのための８つの半精度浮動小数点重み値（１６ビット浮動小数点数）または浮動のカーネルのための４つの単精度浮動小数点重み値（３２ビット浮動小数点数）を含むことができる。
【００８４】
第２に、ランネルは、カーネル内の恣意的開始点を所与として、以下のトラバーサル優先順位に関して、反復的に埋められることができる：
（１）カーネルスタック２０８の幅寸法（Ｎ寸法またはカーネルスタックｘ方向（Ｓｘ）、それは、図６Ｂに図示されるカーネルスタック２０８に関する８と等しい）に沿ってトラバースする
（２）個々のカーネルの高さ寸法（Ｋｙ、それは、図６Ｂに図示されるカーネルスタック２０８のカーネルに関する３と等しい）に沿ってトラバースする
（３）カーネルスタック２０８の高さ寸法（Ｍ寸法またはカーネルスタックｙ寸法（Ｓｙ）、それは、図６Ｂに図示されるカーネルスタック２０８に関する８と等しい）に沿ってトラバースする
（４）個々のカーネルの幅寸法（Ｋｘ、それは、図６Ｂに図示されるカーネルスタック２０８のカーネルに関する３と等しい）に沿ってトラバースする
トラバーサルは、ランネルが重み値で完全に埋められるまで継続する。
【００８５】
このトラバーサルは、代替として、以下のように表され得る：
（１）各Ｓｘに対して
（２）各Ｋｙに対して
（３）各Ｓｙに対して
（４）各Ｋｘに対して。
【００８６】
いくつかの実装では、タイルは、ランネルの順序付けられたリストであることができ、ランネルの数は、「タイル」が、常時、カーネルスタック幅境界（カーネルスタック行境界とも称される）上で開始せず、カーネルスタック幅境界上で終了するように選定され得る。図６Ａに図示されるように、カーネル６０１−６０４、６０９−６１２、６１７−６２０、６２５−６２８、６３３−６３６、６４１−６４４、６４９−６５２、および６５７−６６０の重み値は、並べ替えられ、プロセッサの１つのコア上で処理されることができる。カーネル６０５−６０８、６１３−６１６、６２１−６２４、６２９−６３２、６３７−６４０、６４５−６４９、６５３−６５６、および６６１−６６４の重み値は、並べ替えられ、プロセッサの別のコア上で処理されることができる。いくつかの実装では、タイルは、ランネルの順序付けられたリストであることができ、ランネルの数は、「タイル」が、常時、カーネルスタック幅境界（カーネルスタック行境界とも称される）上で開始し、カーネルスタック幅境界上で終了するように選定され得る。
【００８７】
６４ビット幅を伴うＳＩＭＤレジスタに対して、ランネル幅も、６４ビットであることができる。カーネルの重み値が、３２ビットのサイズを有する場合、６４ビットＳＩＭＤレジスタは、２つの重み値を含むことができる。したがって、ランネルは、２つの３２ビット重み値を含むことができる。タイルあたりのランネルの数は、上記のトラバーサル優先順位に基づくことができる。すなわち、ランネルは、重み値６０１ａ、６０２ａ、６０３ａ、６０４ａ、６０１ｂ、６０２ｂ、６０３ｂ、６０４ｂ、６０１ｃ、６０２ｃ、６０３ｃ、６０４ｃ、６０９ａ、・・・、６１２ｃ、・・・、６５７ａ、・・・、６６０ｃ、６０１ｄ、６０２ｄ、６０３ｄ、６０４ｄ、６０１ｅ、６０２ｅ、６０３ｅ、６０４ｅ、６０１ｆ、６０２ｆ、６０３ｆ、６０４ｆ、６０９ｄ、・・・、６１２ｆ、・・・、６５７ｄ、・・・、６６０ｆ、６０１ｇ、６０２ｇ、６０３ｇ、６０４ｇ、６０１ｈ、６０２ｈ、６０３ｈ、６０４ｈ、６０１ｉ、６０２ｉ、６０３ｉ、６０４ｉ、６０９ｇ、・・・、６１２ｉ、・・・、６５７ｇ、・・・、および６６０ｉで埋められることができる。これらの重み値は、１つのプロセッサコアを用いて処理されることができる。残りの重み値も同様に、図６Ｂに図示されるように順序付けられ、別のプロセッサコアを用いて処理されることができる。
【００８８】
（カーネル重みの例示的並べ替え−追加の並列処理）
図７は、カーネルスタック２０８のカーネルの重み値をランネルのタイルを備えているタイルフォーマットに並べ替える例を図式的に図示する。図７に説明される方法は、単純であり、効率的であるが、図６Ａ−６Ｂに説明される方法より制限的である。方法は、図５Ａ−５Ｃに説明される方法ほど柔軟ではない。しかしながら、より多くの並列処理が、図７に説明される方法を用いて可能である。方法は、（Ｋｘ＊Ｋｙ＊Ｓｙ）ｍｏｄ（レジスタ幅）＝０であるとき、非常に効率的である。
【００８９】
図７を参照すると、それは、畳み込み層２００の８×８カーネルスタック２０８を示し、８行のカーネル（Ｍ＝８）および８列のカーネル（Ｎ＝８）を伴う。カーネルの第１の行は、８つのカーネル６０１−６０８を含む。カーネルの第２の行は、８つのカーネル６０９−６１６を含む。カーネルの第３の行は、８つのカーネル６１７−６２４を含む。カーネルの第４の行は、８つのカーネル６２５−６３２を含む。カーネルの第５の行は、８つのカーネル６３３−６４０を含む。カーネルの第６の行は、８つのカーネル６４１−６４８を含む。カーネルの第７の行は、８つのカーネル６４９−６５６を含む。カーネルの第８の行は、８つのカーネル６５７−６６４を含む。
【００９０】
カーネルスタック２０８の行の数と入力チャネル２０４の数とは、同一であることができ、カーネルスタック２０８の列の数と出力チャネル２１２の数とは、同一であることができるので、カーネルスタック２０８は、８つの入力活性化マップを畳み込み、８つの出力活性化マップを生成する。カーネルスタック２０８のカーネルは、この例では、３×３の寸法を有する。カーネルスタック２０８のカーネルの重み値が、３２ビットのサイズを有し、ＳＩＭＤレジスタ等のプロセッサレジスタが、６４ビットの幅を有する場合、ＳＩＭＤレジスタは、一度に２つの重み値を含むことができる。
【００９１】
カーネルスタック２０８の重み値６０１ａ−６０１ｉ、６０２ａ−６０２ｉ、・・・、６６３ａ−６６３ｉ、および６６４ａ−６６４ｉは、カーネルの基本レイアウト（基本カーネルレイアウト）からカーネルのタイルレイアウト（タイルカーネルレイアウト）に並べ替えられることができる。カーネル重みの略図内の数は、並べ替え後の重み値の順序を示す。いくつかの実装では、ランネルは、以下の性質のうちの１つ以上のものを伴う重み値の順序付けられたリストであることができる。第１に、ランネル内の重み値の数は、重み値のデータタイプを所与として、ＳＩＭＤレジスタ等のプロセッサレジスタが一度に含むことができる重み値の数と同一であることができる。例えば、１２８−ビットＳＩＭＤレジスタに対して、ランネルは、半浮動のカーネルのための８つの半精度浮動小数点重み値（１６ビット浮動小数点数）または浮動のカーネルのための４つの単精度浮動小数点重み値（３２ビット浮動小数点数）を含むことができる。
【００９２】
第２に、ランネルは、カーネル内の恣意的開始点を所与として、以下のトラバーサル優先順位に関して、反復的に埋められることができる：
（１）個々のカーネルの高さ寸法（Ｋｙ、それは、図７に図示されるカーネルスタック２０８のカーネルに関する３と等しい）に沿ってトラバースする
（２）カーネルスタック２０８の高さ寸法（Ｍ寸法またはカーネルスタックｙ寸法（Ｓｙ）、それは、図７に図示されるカーネルスタック２０８に対する８と等しい）に沿ってトラバースする
（３）個々のカーネルの幅寸法（Ｋｘ、それは、図７に図示されるカーネルスタック２０８のカーネルに関する３と等しい）に沿ってトラバースする
（４）カーネルスタック２０８の高さ寸法（Ｍ寸法またはカーネルスタックｙ寸法（Ｓｘ）、それは、図７に図示されるカーネルスタック２０８に対する８と等しい）に沿ってトラバースする
トラバーサルは、ランネルが重み値で完全に埋められるまで継続する。
【００９３】
このトラバーサルは、代替として、以下のように表され得る：
（１）各Ｓｘに対して
（２）各Ｓｙに対して
（３）各Ｋｙに対して
（４）各Ｋｘに対して。
【００９４】
いくつかの実装では、タイルは、ランネルの順序付けられたリストであることができ、ランネルの数は、「タイル」が、常時、カーネルスタック高さ境界（カーネルスタック列境界とも称される）上で開始し、カーネルスタック高さ境界上で終了するように選定され得る。図６Ａに図示されるように、カーネルの重み値６０１、６０９、６１７、６２５、６３３、６４１、６４９、および６５７は、並べ替えられ、プロセッサの第１のコア上で処理されることができ、カーネルの重み値６０２、６１０、６１８、６２６、６３４、６４２、６５０、および６５８は、並べ替えられ、プロセッサの第２のコア上で処理されることができる等と続く。
【００９５】
１２８ビット幅を伴うＳＩＭＤレジスタに対して、ランネル幅も、１２８ビットであることができる。カーネルの重み値が、８ビットのサイズを有する場合、１２８ビットＳＩＭＤレジスタは、８つの重み値を含むことができる。したがって、ランネルは、８つの８ビット重み値を含むことができる。タイルあたりのランネルの数は、上記のトラバーサル優先順位に基づくことができる。すなわち、ランネルは、重み値６０１ａ、６０１ｄ、６０１ｇ、６０９ａ、６０９ｄ、６０９ｇ、６１７ａ、６１７ｄ、６１７ｇ、６２５ａ、６２５ｄ、６２５ｇ、６３３ａ、６３３ｄ、６３３ｇ、６４１ａ、６４１ｄ、６４１ｇ、６４９ａ、６４９ｄ、６４９ｇ、６５７ａ、６５７ｄ、６５７ｇ、６０１ｂ、６０１ｅ、６０１ｈ、・・・６５７ｂ、６５７ｅ、６５７ｈ、６０１ｃ、６０１ｆ、６０１ｉ、・・・６５７ｃ、６５７ｆ、および６５７ｉで埋められることができる。これらの重み値は、１つのプロセッサコアを用いて処理されることができる。残りの重み値は、図示されるように並べ替えられ、他のプロセッサコアを用いて処理されることができる。
【００９６】
いくつかの実施形態では、ランネルは、カーネル内の恣意的開始点を所与として、以下のトラバーサル優先順位に関して、反復的に埋められることができる：
（１）個々のカーネルの幅寸法（Ｋｘ、それは、図７に図示されるカーネルスタック２０８のカーネルに関する３と等しい）に沿ってトラバースする
（２）個々のカーネルの高さ寸法（Ｋｙ、それは、図７に図示されるカーネルスタック２０８のカーネルに対する３と等しい）に沿ってトラバースする
（３）カーネルスタック２０８の高さ寸法（Ｍ寸法またはカーネルスタックｙ寸法（Ｓｙ）、それは、図７に図示されるカーネルスタック２０８に関する８と等しい）に沿ってトラバースする
（４）カーネルスタック２０８の高さ寸法（Ｍ寸法またはカーネルスタック×寸法（Ｓｘ）、それは、図７に図示されるカーネルスタック２０８に対する８と等しい）に沿ってトラバースする
トラバーサルは、ランネルが重み値で完全に埋められるまで継続する。
【００９７】
このトラバーサルは、代替として、以下のように表され得る：
（１）各Ｓｘに対して
（２）各Ｓｙに対して
（３）各Ｋｘに対して
（４）各Ｋｙに対して。
【００９８】
（カーネル重みの例示的並べ替え）
図５Ａ−５Ｃ、６Ａ、６Ｂ、および７７を参照して説明される方法は、下記に例証されるように一般化されることができる。「ＲＥＢ」は、ＳＩＭＤレジスタ内の要素のサイズをビットで示す。「ＲＷＢ」は、ＳＩＭＤレジスタの幅をビットで表す。「ＲＷＥ」は、ＳＩＭＤレジスタの幅を要素で示す。ランネルは、Ｎ個の重みの集合を含み、Ｎ＝ＲＷＥである。言い換えると、以下の関係が成立する：ＲＷＥ＊ＲＥＢ＝ＲＷＢ（各ＳＩＭＤレジスタ内の要素の数×各要素が占有するビットの数＝ＳＩＭＤレジスタのビットサイズ）。例えば、１２８ビットＳＩＭＤレジスタは、ハードウェアサポートに応じて、３２ビットの４つの要素、または１６ビットの８つの要素、または８ビットの３２の要素、１ビットの１２８の要素、および、あらゆる他の可能な組み合わせに分けられることができる。
【００９９】
Ｋｗは、カーネルの幅を要素で示す。一般性を失うことなく、カーネル内の各要素は、ＲＥＢビットであることができる。そうでなければ、ＳＩＭＤレジスタは、異なるように分割されることができ、ハードウェアがそのビット深度をサポートする場合、各要素のビットサイズがカーネル要素のビットサイズと等しい結果になるか、または、ハードウェアがそのビット深度をサポートしない場合、ロード時、要素サイズを次のサポートされるサイズにプロモートするであろう。ＫＨは、要素でのカーネルの高さである。例えば、３×３カーネルは、Ｋｗ＝３と、Ｋｗ＝３とを有する。５×１カーネルは、Ｋｗ＝１と、Ｋｗ＝５とを有する。
【０１００】
Ｓｗは、カーネルスタック（カーネル要素ではなく、個々のカーネル）の幅をカーネルで示す。ＳＨは、カーネルスタックの高さをカーネルで示す。例えば、３×１カーネルから成る４×１２カーネルスタックは、Ｓｗ＝１２（出力チャネルの数とも等しい）、ＳＨ＝４（入力チャネルの数とも等しい）、Ｋｗ＝１、および、ＫＨ＝３を有する。
【０１０１】
下記は、カーネルを列毎および行毎にインデックス付けすることを説明する。インデックス付けは、１次元であることができる。カーネルは、左から右および上から下にインデックス付けされ、それらに１からＳｗ＊ＳＨまでの数を割り当てることができる。下記の表３は、１つの単一カーネル内の重みを描写し、上での略図は、カーネルスタック内の異なるカーネルを描いていた。
【０１０２】
【表３】
2019535079.tif 000008
【０１０３】
各個々のカーネル内の重みも同様に、列毎および行毎にインデックス付けされることができる。下記の表４は、１つの単一カーネル内の重みを描写し、上記の表３は、カーネルスタック内の異なるカーネルを描写する。カーネル内の要素は、左から右および上から下に漸次的にインデックス付けされる。
【０１０４】
【表４】
2019535079.tif 000009
【０１０５】
図６Ａおよび６Ｂを参照して説明される方法は、レジスタ幅内の要素の数によって除算可能な行を要求し得る。言い換えると、（Ｓｗ＊Ｋｗ）ｍｏｄ（ＲＷＥ）＝０である。しかし、それが該当する場合、全ての合理的配列が、以下によって与えられることができる。
【０１０６】
関連付けられたインデックスの昇順において、カーネルスタック（表３）の精査を開始する。カーネル、すなわち、Ｎ（Ｎ＝ＲＷＥ）個のカーネルを一度にトラバースし、Ｎ（Ｎ＝ＲＷＥ）個の重みを各個々のカーネルの対応する（例えば、同一）インデックス（表４）から選別することによって、ランネルを構成する。次いで、表３内のインデックスに従って、別の（または同一）バッチのＮ個のカーネルを選択し、対応するインデックスを伴うＮ個の重みを選別することによって、別のランネルを構成する。同一カーネルが、選定されることができるが、選択された重みは、異なっていなければならず、そうでなければ、重みは、複製される結果となるであろう：例えば、最も単純かつ合理的配列は、図６Ａに描写されるものとなるであろう。すなわち、カーネル１重み１、その後、カーネル２重み１、その後、カーネル３重み１、・・・、その後、カーネルＮ（Ｎは、ＲＷＥと等しい）重み１、その後、カーネル１重み２、・・・、その後、カーネルＮ重み２、・・・、その後、カーネル１重みＭ（Ｍ＝Ｋｗ＊ＫＨ）、・・・、その後、カーネルＮ重みＭ、その後、全てのカーネルが使い果たされるまで、第２のバッチのＮ個のカーネルのための正確に同一のパターンが続く。
【０１０７】
全ての可能な配列（その大部分は、単純ではないが、確かに可能な）は、以下のトラバーサルによって与えられるであろう：Ｎ個のカーネルをカーネルスタックのＮ個の異なる列から選択する（言い換えると、カーネルスタックの同一列からの２つのカーネルは、存在しない）。次いで、ランネルをＮ（Ｎ＝ＲＷＥ）個の重みから構成し、各々は、前述の選択されたカーネルのうちの１つからのものである。各カーネルが、全ての重みが使い果たされるまで、スタックの別個の列から生じなければならないという限定を伴って、別のランネルを別の（または同一）バッチのＮ個のカーネルからの別のＮ個の重みから作ることによって、プロセスを繰り返す。上記または下記に述べられるトラバーサルのいずれかによって与えられる各個々の配列は、正しい出力に到達するために、若干異なるアルゴリズム（ソフトウェアコードまたはハードウェア論理であるべき）を要求する。いくつかの実施形態では、同一アルゴリズムは、異なる配列に適用されることができない。
【０１０８】
図７を参照して説明される方法に関して、上記の定義が、適用されるが、トラバーサルは、若干異なる。本実施形態では、選択されたカーネルは、１つの列に限定され得る（図６Ａおよび６Ｂを参照して説明される方法のように、それらを異なる列から生じさせるように強制するものとは対照的に）。表３は、表５に示されるように、上から下および左から右に（左から右および上から下とは対照的に）再インデックス付けされることができる。
【０１０９】
【表５】
2019535079.tif 000010
【０１１０】
関連付けられたインデックスの昇順において、カーネルスタック（表５）をトラバースする。カーネル、すなわち、Ｎ（Ｎ＝ＲＷＥ）個のカーネルを一度にトラバースし、ランネルを対応する（例えば、同一）インデックスの各個々のカーネル（表４）からのＮ（Ｎ＝ＲＷＥ）個の重みから構成する。次いで、表５内のインデックスに従って、別の（または同一）バッチのＮ個のカーネルを選択し、ランネルを対応するインデックスを伴う別のＮ個の重みから形成する。全ての可能な（但し、大部分は、単純ではない）配列が、本トラバーサルによって到達されることができる：Ｎ個のカーネルをカーネルスタックの同一列から選択する。次いで、ランネルをＮ（Ｎ＝ＲＷＥ）個の重みから作り、各々は、前述の選択されたカーネルのうちの１つからのものである。全てのカーネルが、全ての重みが使い果たされるまで、同一列のスタックから生じなければならないという限定を伴って、別のＮ個の重みを別の（または同一）バッチのＮ個のカーネルから選別することによって、プロセスを繰り返す。異なる配列は、若干異なるアルゴリズムを要求し得る。
【０１１１】
（タイル毎に出力活性化マップを決定する例示的プロセス）
入力活性化マップのピクセル値（例えば、入力活性化マップ４０４、４０８、４１２、および４１６）を並べ替え、メモリ内のカーネルスタック２０８のカーネルの重み値をランネル毎に並べ替えた（例えば、図５Ａ−５Ｃに示される並べ替え）後、重み値は、タイル毎に処理され、下記の例示的擬似コードによって概略されるように、出力活性化マップを決定することができる：
（１）並べ替えられた出力活性化マップの各行ｒに対して、
（２）出力活性化マップの各列ｃに対して、
（３ａ）位置（ｃ，ｒ）における並べ替えられた出力活性化マップの値をゼロの値に設定する
（３ｂ）カーネルスタックの各タイルに対して、
（４）カーネルスタックのそのタイルの各ランネル、および対応する並べ替えられた入力活性化マップピクセル値（または、２つ以上の対応する並べ替えられた入力活性化マップピクセル値）に対して、
（５ａ）対応する並べ替えられた入力活性化マップピクセル値をロードし、ＳＩＭＤレジスタに複製する
（５ｂ）並べ替えられた出力活性化マップピクセル値、並べ替えられた入力活性化マップピクセル値、およびランネルをＦＭＡＤＤ（ＦＭＡＤＤは、融合積和演算を示す）する
（４）の終
（３ｂ）の終了
（３ｃ）並べ替えられた出力活性化マップの値のクラスタを位置（ｃ，ｒ）における出力活性化マップに記憶する
（２）の終
ステップ（１）の終了。
【０１１２】
いくつかの実装では、アクション（４）および（５）は、ＦＭＡＤＤ演算の効率的実装のために完全に展開されることができる。
【０１１３】
上記の例示的擬似コードは、以下のように書かれ得る：
出力活性化マップの各行に対して
出力活性化マップの各列に対して
／／出力タイルを０に初期化する
ｏｕｔｐｕｔ＿ｔｉｌｅ＝｛０｝
カーネルスタックの各タイルに対して
／／以下のループは完全に展開されることができる
そのカーネルスタックタイルの各ランネル、および対応する入力タイルに対して
ＦＭＡＤＤ  ｏｕｔｐｕｔ＿ｔｉｌｅ，  ｉｎｐｕｔ＿ｔｉｌｅ  および  ｋｅｒｎｅｌ＿ｔｉｌｅの対応するランネル
‘ｒｏｗ’および‘ｃｏｌｕｍｎ’において、出力活性化マップにｏｕｔｐｕｔ＿ｔｉｌｅを記憶する。
【０１１４】
図８は、タイル毎に出力活性化マップを決定することを図示するための畳み込みニューラルネットワークの例示的３Ｄ畳み込み層８００を図式的に図示する。ＣＮＮ８００は、図２に示されるＣＮＮ２００の例であり、２つの入力活性化マップ２０４ａ１および２０４ａ２を受信するための２つの入力チャネル２０４（Ｍ＝２）と、２つの出力活性化マップ２１２ａ１および２１２ａ２を決定するための２つの出力チャネル２１２（Ｎ＝２）とを伴う。図８では、カーネルスタック２０８は、カーネル２０８ａ１、２０８ａ２、２０８ｂ１、および２０８ｂ２を含み、各カーネルは、１×１（Ｋｙ＝１およびＫｘ＝１）の寸法を伴う。ＳＩＭＤレジスタが、重み値のデータタイプを所与として、カーネルスタック２０８の２つの重み値を含むことができ、レジスタの幅が、２である場合、１つのランネルを伴うタイル２は、カーネル２０８ａ１と、カーネル２０８ａ２とを含み、１つのランネルを伴うタイル２は、カーネル２０８ｂ１と、カーネル２０８ｂ２とを含む。
【０１１５】
ゼロベースのインデックス付けでは、チャネル０（すなわち、出力活性化マップ２１２ａ１）を決定するために、出力（０，０，０）および出力（１，０，０）として略される、出力チャネル２１２の行０および列０は、以下の演算を実施する：
（１）入力（０，０，０）をロードし、ＳＩＭＤレジスタに複製する（入力（０，０，０）は、入力チャネル２０４のチャネル０（すなわち、入力活性化マップ２０４ａ１）、行０、および列０を示す）
（２）入力（０，０，０）をタイル１のランネル（カーネル２０８ａ１および２０８ａ２を含む）で乗算し、アクション（２）と累算する
（３）入力（１，０，０）をロードし、ＳＩＭＤレジスタに複製する
（４）入力（１，０，０）をタイル２のランネル（カーネル２０８ｂ１および２０８ｂ２を含む）で乗算する
（５）出力（０，０，０）および出力（１，０，０）を連続して記憶し、インターリーブされた順序を維持する。
【０１１６】
出力（０，０，１）および出力（１，０，１）を決定するために、以下の演算を実施する：
（１）入力（０，０，１）をロードし、ＳＩＭＤレジスタに複製する
（２）入力（０，０，１）をタイル１のランネルで乗算する
（３）入力（１，０，１）をロードし、ＳＩＭＤレジスタに複製する
（４）入力（１，０，１）をタイル２のランネルで乗算し、アクション（２）と累算する
（５）出力（０，０，１）および出力（１，０，１）を連続して記憶する。
【０１１７】
上記のプロセスは、出力（０，１，０）および出力（１，１，０）、および出力（０，１，１）および出力（１，１，１）を決定するために繰り返されることができる。
【０１１８】
入力活性化マップのピクセル値を並べ替え、メモリ内のカーネルスタック２０８のカーネルの重み値をランネル毎に並べ替えた（例えば、図６Ａおよび６Ｂに示される並べ替え）後、重み値は、タイル毎に処理され、下記の例示的擬似コードによって概略されるように、出力活性化マップを決定することができる：
出力活性化マップの各行に対して
出力活性化マップの各列に対して
／／出力ランネルを０に初期化する
ｏｕｔｐｕｔ＿ｒｕｎｎｅｌ＝｛０｝
／／以下のループは完全に展開されることができる
配列（ａ）に説明されるように各カーネルランネルに対して
ＦＭＡＤＤ  「入力」、出力、およびカーネル「の対応するランネル」
‘ｒｏｗ’および‘ｃｏｌｕｍｎ’において、出力活性化マップにｏｕｔｐｕｔ＿ｒｕｎｎｅｌを記憶する。
【０１１９】
本明細書に説明される異なる配列は、イタリック部分（上記例示的擬似コードの「」内の部分）に影響を及ぼす。言い換えると、カーネルが配列される方法に応じて、ロードおよび乗算されるインターリーブされた活性化マップからの入力の対応するランネルは、異なり得る。
【０１２０】
入力活性化マップのピクセル値を並べ替え、メモリ内のカーネルスタック２０８のカーネルの重み値をランネル毎に並べ替えた（例えば、図７に示される並べ替え）後、重み値は、タイル毎に処理され、下記の例示的擬似コードによって概略されるように、出力活性化マップを決定することができる。
【０１２１】
出力活性化マップの各行に対して
出力活性化マップの各列に対して
／／出力活性化を０に初期化する
ｏｕｔｐｕｔ＿ａｃｔｉｖａｔｉｏｎ＝｛０｝
／／以下のループは完全に展開されることができる
配列（ａ）に説明されるように各カーネルランネルに対して
ＦＭＡＤＤ  「入力」、出力、およびカーネル「の対応するランネル」
／／記憶動作の前に水平ベクトル合計を介して出力ランネルを単一値にする
‘ｒｏｗ’および‘ｃｏｌｕｍｎ’において、出力活性化マップにｈｏｒｉｚｏｎｔａｌ＿ｖｅｃ＿ｓｕｍ（ｏｕｔｐｕｔ＿ｒｕｎｎｅｌ）を記憶する。
【０１２２】
本明細書に説明される異なる配列は、イタリック部分（上記例示的擬似コードの「」内の部分）に影響を及ぼす。言い換えると、カーネルが配列される方法に応じて、ロードおよび乗算されるインターリーブされた活性化マップからの入力の対応するランネルは、異なり得る。
【０１２３】
有利には、いくつかの実施形態では、カーネルスタックの幅が、ＳＩＭＤレジスタが含み得る重み値の数の倍数であるというランネル設定により、複製が、効率的に働く。いくつかの実施形態では、カーネルスタックの幅は、ＳＩＭＤレジスタが含み得る重み値の数の倍数ではないこともある。本明細書に開示される方法を効率的に実装するために、実施されるロードおよび記憶のタイプは、特殊化され得る。ＣＮＮは、カーネルスタックの幅がＳＩＭＤレジスタが含み得る重み値の数の倍数であるように設計されることができる。そのような設計では、より良好なＳＩＭＤ利用が、達成され得る。
【０１２４】
（カーネルスタック重み値の複数の行にストラドリングするカーネルスタックランネルを用いてタイル毎に出力活性化マップを決定する例示的プロセス）
図９Ａ−９Ｂは、カーネルスタック重み値の複数の行にストラドリングするカーネルスタックランネルを用いてタイル毎に出力活性化マップを決定することを図示するための畳み込みニューラルネットワークの例示的３Ｄ畳み込み層９００を図式的に図示する。ＣＮＮ９００は、図２に示されるＣＮＮ２００の例であり、４つの入力活性化マップを受信するための４つの入力チャネル（Ｍ＝４）と、６つの出力活性化マップを決定するための６つの出力チャネル（Ｎ＝６）とを伴う。図９Ａでは、４×６の寸法を伴うカーネルスタック２０８は、カーネル２０８ａ１−２０８ａ６、２０８ｂ１−２０８ｂ６、２０８ｃ１−２０８ｃ６、および２０８ｄ１−２０８ｄ６を含み、各カーネルは、５×３（Ｋｙ＝５およびＫｘ＝３）の寸法を伴う。図９Ａに示されるように、カーネル２０８ａ１−２０８ａ６、２０８ｂ１−２０８ｂ６、２０８ｃ１−２０８ｃ６、および２０８ｄ１−２０８ｄ６の各々は、カーネル０−５、６−１１、１２−１７、および１８−２３として略される。
【０１２５】
カーネルスタック２０８のカーネルの重み値は、トリプレット（ｘ，ｙ，ｚ）によって表され得、ｘは、カーネルを示し、ｙは、カーネルｘの列／幅座標を示し、ｚは、カーネルｘの行／高さ座標を示す。図９Ａに示されるように、カーネル２０８ａ４  ３の重み値のトリプレット表現は、ゼロベースのインデックス付けを用いて、（３，０，０）−（３，２，０）、（３，０，１）−（３，２，１）、（３，０，２）−（３，２，２）、（３，０，３）−（３，２，３）、および（３，０，４）−（３，２，４）である。
【０１２６】
設計時にカーネルスタック２０８のカーネルの重み値をランネルのタイルに並べ替えることは、以下を把握していることを要求し得る：
（１）カーネルスタック２０８が設計されるアーキテクチャのＳＩＭＤレジスタの幅
（２）カーネルスタック２０８のカーネルの重み値のデータタイプ。
【０１２７】
例えば、コンピュータアーキテクチャのＳＩＭＤレジスタが、１２８ビットの幅を有し、重み値が、半精度浮動小数点数（すなわち、それぞれ、１６ビット）である場合、各ランネルは、８つの重み値（重み値のサイズ１６ビットによって除算されるＳＩＭＤレジスタの幅１２８ビット）を保持することができる。
【０１２８】
カーネルスタック２０８のカーネルは、カーネルの基本レイアウトからカーネルのタイルレイアウトに並べ替えられることができる。タイルレイアウトにおけるカーネルスタック２０８は、各々が３つのランネルの１４タイルを含むことができる。表６は、トリプレット表現を使用したタイルレイアウトにおけるカーネルスタック２０８の重み値を示す。図９では、タイル０、ランネル０は、対角線平行線模様パターンを用いて示され、タイル０、ランネル１は、垂直平行線模様パターンを用いて示され、タイル０、ランネル２は、交差平行線模様パターンを用いて示される。
【０１２９】
【表６−１】
2019535079.tif 000011
【０１３０】
【表６−２】
2019535079.tif 000012
【０１３１】
有利には、カーネルスタック２０８の重み値を並べ替えることは、設計時に１回、生じ得る。さらに、入力活性化マップの並べ替えは、最大でＣＮＮの入力画像あたり１回、生じ得る。例えば、ＣＮＮの入力層は、ＣＮＮの入力画像を基本レイアウトからインターリーブされたレイアウトに並べ替え得る。図９Ｂは、並べ替えられた入力活性化マップ４２０を示す。
【０１３２】
いくつかの実施形態では、カーネルスタックランネルの各々は、カーネルスタック内の重み値の１つのみの行または１つの行の一部を含む。したがって、並べ替えられた入力マップのピクセル値は、タイル毎に出力活性化マップを決定するとき、ＳＩＭＤレジスタに複製されることができる。ＳＩＭＤレジスタに並べ替えられた入力マップのピクセル値を複製するプロセスは、入力ランネルの構築と称され得る。入力ランネルは、インターリーブされたレイアウトにおける入力マップの１つのチャネル内のピクセルを複製することによって、インターリーブされたレイアウトにおける入力マップから構築されることができる。
【０１３３】
いくつかの実施形態では、カーネルスタックランネルは、重み値の複数の行にストラドリングすることができる。表６および図９Ａは、いくつかのランネルがカーネルスタック２０８の重み値の複数の行にストラドリングすることを示す。例えば、表６内のタイル０、ランネル０は、２つの行にストラドリングする。カーネルスタックランネルが、カーネルスタック２０８の重み値の複数の行にストラドリングする場合、ＳＩＭＤレジスタは、２つ以上のピクセル値の値を含むことができる。ピクセル値は、ロードされ、２つ以上のＳＩＭＤレジスタに複製され得る。これは、各カーネルの各行内の全ての重み値が入力活性化マップのチャネル内のピクセル値によって乗算されなければならないので、必要であり得る。入力ランネルは、インターリーブされたレイアウトにおける入力マップから構築されることができる。例えば、入力ランネルを構築することは、第１の入力チャネルの対応するピクセル値を６回複製し、第２の入力チャネルの対応するピクセル値を２回複製することを含み得る。別の例として、入力ランネルを構築することは、第２の入力チャネルの対応するピクセルを４回複製し、第３の入力チャネルの対応するピクセルを４回複製することを含み得る。さらに別の例として、入力ランネルを構築することは、第３の入力チャネルの対応するピクセルを２回複製し、第４の（および最後の）入力チャネルの対応するピクセルを６回複製することを含み得る。
【０１３４】
図９Ｂは、図９Ａに示される例示的３Ｄ畳み込み層９００のためのインターリーブされたレイアウトにおける並べ替えられた入力活性化マップ４２０を示す。入力ピクセル値のインターリービングパターンは、入力活性化マップ４２０の境界に続き得る。同一平行線模様パターンを伴うピクセルは、基本レイアウトにおける同一入力活性化マップに属する。図９Ｂでは、各トリプレット（ｘ，ｙ，ｚ）は、チャネルｘの行ｙ、列ｚにおけるピクセル値を表す。表７は、タイルレイアウトにおけるカーネルスタック２０８のタイルを伴う１つの畳み込みを実施するための入力ランネルを示す。
【０１３５】
【表７−１】
2019535079.tif 000013
【０１３６】
【表７−２】
2019535079.tif 000014
【０１３７】
（タイル毎に出力活性化マップを決定することに先立って入力活性化マップのピクセル値およびカーネルの重み値を並べ替える例示的プロセス）
図１０は、タイル毎に畳み込みニューラルネットワーク（ＣＮＮ）の畳み込み層の出力活性化マップを決定する例示的プロセス１０００のフロー図であり、それは、随意に、入力活性化マップのピクセル値およびカーネルの重み値をランネルのタイルに並べ替えることを含む。プロセス１０００は、ブロック１００４から開始し、畳み込みニューラルネットワークの畳み込み層２００が、受信される。畳み込み層は、３次元畳み込み層であることができる。図示されるように、図２を参照すると、畳み込み層２００は、Ｍ個の入力活性化マップを受信するためのＭ個の入力チャネル２０４を有することができる。入力活性化マップは、Ｑの入力活性化マップ幅と、Ｐの入力活性化マップ高さとを有することができる。入力活性化マップは、同一入力活性化マップ幅Ｑと、入力活性化マップ高さＰとを有することができる。
【０１３８】
畳み込み層２００は、カーネルのカーネルスタック２０８を含むことができる。カーネルスタック２０８は、Ｍ行のカーネルと、Ｎ列のカーネルとを含み、各列は、カーネルスタック２０８のフィルタバンクとも称される。カーネルスタック２０８のカーネルは、Ｋｘ個の重み値のカーネル幅と、Ｋｙ個の重み値のカーネル高さとを有することができ、合計Ｋｙ＊Ｋｘ重み値を有する。カーネルスタック２０８のカーネルは、同一カーネル幅Ｋｙと、カーネル高さＫｘとを有することができる。
【０１３９】
畳み込み層２００は、Ｎ個の出力活性化マップを生成するためのＮ個の出力チャネル２１２を有することができる。各出力活性化マップは、カーネルスタック２０８のフィルタバンクおよび対応する入力活性化マップの３次元畳み込みの結果であることができる。出力活性化マップは、Ｑ’の出力活性化マップ幅と、Ｐ’の出力活性化マップ高さとを有することができる。出力活性化マップは、同一出力活性化マップ幅‘Ｑと、出力活性化マップ高さＰ’とを有することができる。
【０１４０】
決定ブロック１００８では、カーネルスタック２０８のカーネルの重み値のフォーマットが、決定されることができる。カーネルスタック２０８のカーネルの重み値が、カーネルのための基本レイアウトにおけるものである場合、プロセス１０００は、ブロック１００８に進む。ブロック１００８では、カーネルスタック２０８のカーネルの重み値は、カーネルのための基本レイアウトからカーネルのためのタイルレイアウトに並べ替えられることができる。カーネルの重み値は、ロード、算術、または記憶動作のためのベクトル演算を利用するように並べ替えられることができる。図５Ａ−５Ｃを参照して図示されるように、カーネルのためのタイルレイアウトは、重み値のランネルのタイルを備えていることができる。ランネルは、２つの性質を伴う重み値の順序付けられたリストであることができる。第１に、ランネル内の重み値の数は、重み値のデータタイプを所与として、ＳＩＭＤレジスタ等のプロセッサレジスタが一度に含むことができる重み値の数と同一であることができる。例えば、１２８−ビットＳＩＭＤレジスタに対して、ランネルは、半浮動のカーネルのための８つの半精度浮動小数点重み値または浮動のカーネルのための４つの単精度浮動小数点重み値を含むことができる。第２に、ランネルは、カーネルスタック２０８の幅寸法（Ｍ）、その後、カーネルスタック２０８の高さ寸法（Ｎ）、その後、個々のカーネルの幅寸法（Ｋｘ）、その後、個々のカーネルの高さ寸法（Ｋｙ）に沿ってトラバースすることによって、反復的に埋められることができる。トラバーサルは、ランネルがカーネルのカーネルスタック２０８の重み値で完全に埋められるまで継続する。ＣＮＮの訓練は、オフラインプロセスであることができるので（例えば、コンピュータサーバ、パーソナルコンピュータ、タブレットコンピュータ、モバイルデバイス、または内蔵デバイス等のコンピューティングデバイスが、結果として生じるＣＮＮを使用して、画像セグメント化および眼追跡を実施する前）、ブロック１００８におけるカーネルの重み値の並べ替えは、有利には、ニューラルネットワークのランタイム性能の損失を伴わずに、オフライン様式において１回実施されることができる（例えば、カーネルの重み値の学習後）。
【０１４１】
決定ブロック１００６では、カーネルスタック２０８のカーネルの重み値が、カーネルのためのタイルレイアウトにおけるものである場合、プロセス１０００は、ブロック１０１２に進む。いくつかの実施形態では、カーネルの重み値は、プロセス１０００を実装するプログラムのコンパイル時、基本レイアウトからカーネルのためのタイルレイアウトに静的に並べ替えられている。コンパイル時のそのような並べ替えは、カーネルスタック２０８の幅寸法（Ｍ）、カーネルスタック２０８の高さ寸法（Ｎ）、入力活性化マップ幅Ｑ、入力活性化マップ高さＰ、または畳み込み層２００を含むＣＮＮの特定の設定が、コンパイル時に把握され得るので、可能であり得る。したがって、ランタイム時のカーネルスタック２０８のカーネルの重み値の並べ替えは、ランタイム時には不必要であり得る。
【０１４２】
ブロック１０１２では、畳み込み層の入力活性化マップ２００が、受信されることができる。例えば、畳み込み層２００のＭ個の入力チャネル２０４のためのＭ個の入力活性化マップが、受信されることができる。入力活性化マップは、Ｑの入力活性化マップ幅と、Ｐの入力活性化マップ高さとを有することができる。入力活性化マップは、同一入力活性化マップ幅Ｑと、入力活性化マップ高さＰとを有することができる。
【０１４３】
決定ブロック１０１４では、入力活性化マップのピクセル値が入力活性化マップのための基本レイアウトまたはインターリーブされたレイアウトにおけるものであるかどうかが、決定されることができる。入力活性化マップのピクセル値が、入力活性化マップのための基本レイアウトにおけるものである場合、プロセス１０００は、ブロック１０１６に進む。ブロック１０１６では、入力活性化マップのピクセル値は、ピクセル値のクラスタを備えているインターリーブされたレイアウトに並べ替えられる。例えば、畳み込み層が、Ｍ個の入力活性化マップを受信後、入力活性化マップのピクセル値は、入力活性化マップのための基本レイアウト（基本入力活性化マップレイアウト）から入力活性化マップのためのインターリーブされたレイアウト（インターリーブされた入力活性化マップレイアウト）に並べ替えられることができる。基本入力活性化マップレイアウトの場合、入力活性化マップは、第１の入力活性化マップの全てのピクセル値が第２の入力活性化マップの全てのピクセルの前に記憶される（メモリ場所の観点から）ことができるように等、チャネル毎に順序付けられ得る。
【０１４４】
いくつかの実装では、ピクセル値は、第１の入力活性化マップの第１のピクセル値の後、Ｍ番目の入力活性化マップの第１のピクセル値まで、第２の入力活性化マップの第１のピクセルが続く等であるように順序付けられることができる。Ｍ番目の入力活性化マップの第１のピクセル値の後、Ｍ番目の入力活性化マップの第２のピクセル値まで、第１の入力活性化マップの第２のピクセル値、第２の入力活性化マップの第２のピクセル値等が続き得る。この並べ替えは、Ｍ個の入力活性化マップの全ての全てのピクセル値が同様に順序付けられるまで継続することができる。並べ替えプロセスは、大規模な並べ替えられた入力活性化マップをもたらし、それは、Ｍ個の個々の入力活性化マップを含む。並べ替えられた入力活性化マップ内の各インデックス付けされた場所は、そのインデックスにおける個々の入力活性化マップからのピクセル値のクラスタを含むことができる。
【０１４５】
決定ブロック１０１４では、入力活性化マップのピクセル値が、インターリーブされた入力活性化マップレイアウトにおけるものである場合、プロセス１０００は、ブロック１０２０に進む。いくつかの実施形態では、入力活性化マップのピクセル値は、入力活性化マップのピクセル値が別の畳み込み層の出力活性化マップであり得るので、インターリーブされた入力活性化マップレイアウトにおけるものであり得る。この他の畳み込み層の出力活性化マップは、その入力活性化マップがインターリーブされた入力活性化マップレイアウトにおけるものであるので、インターリーブされた入力活性化マップレイアウトにおけるものであり得る。有利には、初期畳み込み層の入力活性化マップ（例えば、ＣＮＮの入力活性化マップ）は、畳み込み層に対する全ての入力および出力がデータ順序を保存し得るので、１回のみ、並べ替えられる必要がある。したがって、処理時間は、データ並べ替えの複数回の工程に無駄にされる必要がない。
【０１４６】
ブロック１０２０では、インターリーブされた出力活性化マップレイアウトにおける畳み込み層の出力活性化マップが、タイル毎に決定されることができる。例えば、出力活性化マップのタイルに対して、対応する並べ替えられた出力活性化マップピクセル値、並べ替えられた入力活性化マップピクセル値、およびカーネルタイルにＦＭＡＤＤ（ＦＭＡＤＤは、融合積和演算を示す）する。いくつかの実装では、出力活性化マップのためのインターリーブされたレイアウト（インターリーブされた出力活性化マップレイアウト）内の畳み込み層の出力活性化マップは、出力活性化マップのための基本レイアウト（基本出力活性化マップレイアウト）に順序付けられることができる。インターリーブされた出力活性化マップレイアウトでは、ピクセル値は、Ｎ番目の出力活性化マップの第１のピクセル値まで、第１の出力活性化マップの第１のピクセル値、その後、第２の出力活性化マップの第１のピクセル等と順序付けられることができる。出力活性化マップのための基本レイアウト（基本出力活性化マップレイアウト）内の出力活性化マップの数は、Ｎによって示されることができる。基本出力活性化マップレイアウトでは、出力活性化マップは、第１の出力活性化マップに属する全てのピクセル値が、第２の出力活性化マップに属する全てのピクセルの前に記憶され得る（メモリ場所の観点から）等となるように、チャネル毎に順序付けられ得る。
【０１４７】
随意に、いくつかの実装では、インターリーブされた出力活性化マップレイアウトにおける並べ替えられた出力活性化マップのピクセル値は、基本出力活性化マップレイアウトに順序付けられることができる。例えば、第１の出力活性化マップは、並べ替えられた出力活性化マップの第１のピクセル、（Ｎ＋１）番目のピクセル、（２Ｎ＋１）番目のピクセル等を含むことができる。別の例として、第２の出力活性化マップは、並べ替えられた出力活性化マップの第２のピクセル、（Ｎ＋２）番目のピクセル、（２Ｎ＋２）番目のピクセル等を含むことができる。さらに別の例として、Ｎ番目の出力活性化マップは、並べ替えられた出力活性化マップのＮ番目のピクセル、（２＊Ｎ）番目のピクセル、（３＊Ｎ）番目のピクセル等を含むことができる。
【０１４８】
（カーネルスタックのカーネルの例示的データレイアウト）
上記に開示されるインターリーブされたレイアウトは、畳み込み層の効率的処理を実施するために利用されることができる。行列乗算方法は、多くのプラットフォーム上の非常に最適化されたルーチンであり得る。そして、それは、常時、異なるアーキテクチャのために継続的に最適化される。他の方法も、行列乗算を使用して、畳み込み層を実施し得る。しかしながら、これらの他の方法は、全ての畳み込み層インスタンス（例えば、「ｉｍ２ｃｏｌ」演算を実施する）のためにデータ複製を要求する。下記の開示される方法は、行列乗算を利用するが、要求され得るコストがかかるデータ複製を排除する方法を示す。
【０１４９】
図１１は、カーネルスタック２０８のカーネルの重み値をランネルのタイルを備えているタイルフォーマットに並べ替える例を図式的に図示する。いくつかの実装では、図示されるカーネルレイアウトは、分離可能カーネルのために使用されることができる。分離可能カーネルは、１の幅寸法Ｋｘまたは高さ寸法Ｋｙを有することができる。分離可能カーネルは、正確度にわずかな損失を伴って多くの畳み込みニューラルネットワーク（ＣＮＮ）のために使用されることができる。分離可能カーネルの使用は、分離可能カーネルが一度に単一寸法上で動作するので、ＣＮＮ内の浮動点演算の量を有意に低減させ得る。例えば、３×３カーネルを伴う畳み込み層は、１×３カーネルを伴う層の後に３×１カーネルを伴う層が続く（または３×１カーネルを伴う層の後に１×３カーネルを伴う層が続く）ように置換され得る。
【０１５０】
図４に図示される入力活性化マップレイアウトを使用して、入力活性化マップは、式（４）の行列乗算演算内のＡ行列によって表され得る。
【０１５１】
【数４】
2019535079.tif 000015
【０１５２】
カーネルスタックは、Ｂ行列によって表され得る。出力活性化マップは、Ｃ行列によって表され得、それは、後続のＣＮＮ層の入力活性化マップであり得る。いくつかの実装では、式（４）の行列乗算は、出力活性化マップではなく、出力活性化マップの転置を出力するように構成されることができる。この構成では、出力活性化マップは、直接、後続のＣＮＮ層に対する入力活性化マップに従い得、それは、ベクトル化記憶を使用して実装されることができる。ベクトル化記憶は、有利には、出力活性化マップのためのインターリーブされたレイアウトの場合、同一インデックスを伴う出力活性化マップのピクセル値が一緒にクラスタ化され得るので、いくつかの実装において使用され得る。
【０１５３】
図１１では、Ａ行列によって表される入力活性化マップは、図４に図示されるインターリーブされた入力活性化マップレイアウトに類似するインターリーブされたレイアウトを有することができる。例えば、Ａ行列の第１の行は、Ｍ番目の入力活性化マップの第１のピクセル値（Ｍ番目の入力活性化マップの位置（０，０）におけるピクセル値）まで、第１の入力活性化マップの第１のピクセル値（第１の入力活性化マップの位置（０，０）におけるピクセル値）、その後、第２の入力活性化マップの第１のピクセル値（第２の入力活性化マップの位置（０，０）におけるピクセル値）等を含むことができる。Ｍ番目の入力活性化マップの第１のピクセル値の後、第１、第２、およびＭ番目の入力活性化マップの第２のピクセル値（入力活性化マップの位置（０，１）におけるピクセル値）、その後、第１、第２、およびＭ番目の入力活性化マップの第３のピクセル値（入力活性化マップの位置（０，２）におけるピクセル値）が続き得る。
【０１５４】
Ａ行列の第２の行は、第１、第２、およびＭ番目の入力活性化マップの第２のピクセル値（入力活性化マップの位置（０，１）におけるピクセル値）、その後、第１、第２、およびＭ番目の入力活性化マップの第３のピクセル値（入力活性化マップの位置（０，２）におけるピクセル値）、その後、第１、第２、およびＭ番目の入力活性化マップの第４のピクセル値（入力活性化マップの位置（０，３）におけるピクセル値）を含む。
【０１５５】
図１１における行列Ａは、データ複製を要求すると考えられ得る。しかしながら、データ複製は、入力活性化マップのストライディングの修正によって回避されることができる。行の全体幅を移動させ、次の行に到達する代わりに、行ストライドは、入力チャネルの数Ｍであることができる。ピクセル値は、メモリ内で連続的であり得るので、修正される短縮されたストライディングは、実際にデータを複製する必要のないデータ複製を要求すると考えられ得る。有利には、Ｍが、ＳＩＭＤレジスタ幅の倍数である場合、修正されるストライディングは、各ロード動作が位置合わせされたロード動作であり得るように保存することができる。位置合わせされたロード動作は、あるプロセッサアーキテクチャ上で要求され得る。さらに、いくつかのプロセッサアーキテクチャに対して、位置合わせされたロード動作は、有利には、位置合わせされていないロード動作と比較して、メモリにアクセスするときのより少ない失速により、性能改良をもたらすことができる。したがって、インターリーブされたデータレイアウトは、このストライディングが実践的最適化となることを可能にする。
【０１５６】
図１１は、インターリーブされた入力画像への１×３カーネルの適用を示す。したがって、パディングを考慮するために、
【０１５７】
【数４−１】
2019535079.tif 000016
【０１５８】
である。Ａ行列は、それが、出力行全体を計算するために、行における全ての列に対して入力画像からの３つの値を必要とするので、その中に
【０１５９】
【数４−２】
2019535079.tif 000017
【０１６０】
個の値を有する。したがって、Ｃ行列サイズは、それがＮ個の出力チャネルの全ての出力チャネルからのピクセルの出力幅数を有するので、単に、
【０１６１】
【数４−３】
2019535079.tif 000018
【０１６２】
である単一行を言う。完全畳み込みの計算を行うために、入力チャネルの高さがＨである場合、最終出力を取得するための図１１に示される行列乗算の数は、Ｈである。有利には、行列乗算の数Ｈは、１つの大行列乗算の代わりに、実施され得る。データ複製の必要性を防止するための低減されたストライディングを伴うＡ行列の設定は、出力活性化マップの単一行のために一度のみ適用され得る。出力活性化マップの次の行を計算するとき、本明細書に開示される方法は、分離可能カーネル場合、前の行からの任意のデータを使用しない。
【０１６３】
図１１におけるＢ行列は、カーネルスタック２０８の１×３カーネルのタイルレイアウトを示す。分離可能カーネルを伴ういくつかの実装では、１×３カーネルの後、式（５）に示されるように、３×１カーネルを表す第２の行列Ｂ２を用いた乗算が続き得る。
【０１６４】
【数５】
2019535079.tif 000019
【０１６５】
式中、Ａ２は、３×１カーネルの入力活性化マップを示し、Ｃ２は、３×１カーネルの出力活性化マップを表す。
【０１６６】
いくつかの実装では、３×１カーネルを表す第２の行列Ｂ２は、１×３カーネルを表す行列Ｂのレイアウトと同様または同じであるレイアウトを有することができる。しかしながら、Ａ２行列は、Ｃ行列の転置であり得る。式（４）に図示される行列乗算方法の単純修正は、その転置として保存されたＣ行列をもたらし得る。その転置として保存されたＣ行列では、Ｂ２行列によって表されるカーネル（例えば、３×１カーネル）は、Ｂ行列によって表されるカーネル（例えば、１×３カーネル）が同一短縮ストライディング技法を使用して移動する方法と反対方向に沿って移動し得る。
【０１６７】
分離可能カーネルを伴ういくつかの実施形態では、入力活性化マップは、カーネルがＮ×１である場合、データが列優先フォーマットであり、カーネルが１×Ｎである場合、データが行優先フォーマットであるように配列され得る。有利には、データが列優先フォーマットまたは行優先フォーマットであるかどうかは、転置行列を行列乗算の結果として保存することが計算的に高価ではないので、重要ではないこともある。これは、依然として、インターリーブされたレイアウトにより、ベクトル化記憶を利用する。例えば、分離可能な場合では、１つのＮ×１層の後、１×Ｎ層が続く（またはその逆）。転置が第１の層から保存される限り、方法は、カーネル設定のいずれに対しても（すなわち、１×ＮまたはＮ×１）同じと考えられる。短縮されたストライディング技法は、計算がデータ複製を伴わずに実施されることを可能にする方法であり得る。この乗算技法の使用には、分離可能カーネル設定（すなわち、１×ＮまたはＮ×１）のいずれのタイプのためにも、障壁はない。
【０１６８】
Ｃ行列をその転置として保存することは、有利には、ベクトル化記憶を使用して実装されることができる。結果の転置を保存すること、および結果を直接保存することは、いずれがＣＮＮの次の層のために必要とされるにしても、計算費用を殆ど伴わずに、または最小限に伴って実施されることができる。したがって、データ再シャッフルまたは複製は、不必要であり得る。転置が、Ｃ行列のために保存される場合、出力は、直接、次のＣＮＮ層への入力として使用されることができる。
【０１６９】
（例示的性能改良）
本明細書に開示されるシステムおよび方法の例は、９．６ＧＦｌｏｐｓ／コアの絶対最大潜在能力を伴うプロセッサを使用して評価された。ＧＦｌｏｐは、十億個の不動点命令であり、ＧＦｌｏｐｓは、１秒あたり行われることができる浮動点命令数を十億単位で表す。ＳＩＭＤレジスタを埋めることによって、いくつかの不動点演算が、プロセッササイクル毎に実施されることができる。例えば、４つの浮動小数点数を保持するレジスタに対して、例えば、４つの不動点演算が、サイクル毎に実施されることができる。
【０１７０】
しかしながら、９．６ＧＦｌｏｐｓ／コアは、それが、１つの乗算−加算命令が、その出力または任意の必要もしくは有用な制御コードに対して任意の待ち時間を伴わずにサイクル毎に実施されると仮定するので、実際は、到達不可能な数であり得る。例えば、乗算演算および加算動作が、同一サイクル内で実施されない場合、それは、乗算と加算とを融合させること伴う待ち時間の一部を低減させ得るが、最大達成可能潜在能力は、４．８ＧＦｌｏｐｓ／コアであり得る。
【０１７１】
完全空間畳み込み層（３×３カーネル）に対して、ＳＩＭＤレジスタが８つの浮動小数点数を含むとき、およそ６ＧＦｌｏｐｓ／コア（絶対最大ＧＦｌｏｐｓの６７％利用）が達成された。分離可能層（１×３または３×１カーネル）に対して、およそ５ＧＦｌｏｐｓ／コア（絶対最大ＧＦｌｏｐｓの５６％利用）が達成された。分離可能設定は、層内により少ない不動点演算を要求し、概して、より少ない演算は、各ループ内で実施され、それは、ＣＮＮ層あたりの性能の若干の低下につながった。しかしながら、全体的により良好なネットワーク性能が、分離可能層を用いて達成された。結果は、特定のカーネルサイズのための本明細書に開示される方法をアセンブリにおいて一度に１ずつ最適化しながらの実験と推測の組み合わせに基づくものであった。
【０１７２】
本明細書に開示される方法を用いて達成され得る、コアあたりの不動点命令の数は、異なる実装では異なり得る。例えば、コアあたりの不動点命令の数は、４〜１００、１０〜９０、２５〜７５、４０〜６０、または任意のそれらの組み合わせのＧＦｌｏｐｓ／コアの範囲内であることができる。本明細書に開示される方法を用いて達成され得る最大ＧＦｌｏｐｓのパーセンテージ利用は、異なる実装では異なり得る。例えば、最大ＧＦｌｏｐｓのパーセンテージ利用は、３０％〜９５％、４０％〜９０％、５０％〜８０％、６０％〜７０％、または任意のそれらの組み合わせであることができる。
【０１７３】
ＧＦｌｏｐｓ／コアの観点から観察される性能は、６００ＭＨｚのプロセッサクロックに基づいた。クロック速度が２倍になる場合、それらの数は全て、約２倍増加し、メモリバンクのような相互作用コンポーネントの他の待ち時間に依存し得る。したがって、絶対最大ＧＦｌｏｐｓのパーセンテージ利用は、プロセッサクロックによって実質的に影響され得ない。
【０１７４】
観察される性能改良は、非常に効率的様式において、ベクトルアーキテクチャ上でデータを並べ替え、処理する能力の結果であった。このタイプの性能加速は、プロセッサから独立し得、同一または類似利点は、他のベクトルチップにも適用可能であり得る。
【０１７５】
（例示的用途および利点）
（追加のベクトル化演算）
本明細書に開示される入力活性化マップのインターリーブされたレイアウトは、そうでなければ、ベクトル化することが困難であり得る典型的畳み込みニューラルネットワーク（ＣＮＮ）における他のベクトル化演算にも有用であり得る。例えば、最大プーリングは、全ての入力活性化マップに適用され得るダウンサンプリング演算である。最大プーリングは、入力活性化マップ内のピクセルのウィンドウ（各寸法において２倍のダウンサンプリングのための２×２）に基づくことができる。最大プーリングは、各ウィンドウの最大値をダウンサンプリングされる出力活性化マップ内のピクセルの値として保存することができる。最大プーリングは、次いで、各寸法内にストライディングを適切に含むことができ、したがって、ピクセル値は、ウィンドウ内の最大値を探すとき、重複しない。データ並べ替えがなければ、最大プーリングは、ベクトルを横断した水平比較、位置合わせされていないロード、複数のロード、またはベクトルを完全に埋めないことのある組み合わせを行うことを要求するので、ベクトル化のために幾分扱いにくい演算であり得る。本明細書に開示されるインターリーブされた入力活性化マップレイアウトでは、すべての入力活性化マップに対するピクセル値は、隣り合わせに記憶されることができる。したがって、最大プーリングは、全ての入力活性化マップのために同時に実施されることができ、入力活性化マップの数がベクトル幅の倍数である場合、完全にベクトル化されることができる。有利には、本明細書に開示される方法は、単一画像にわたってベクトル化することが従来困難である多くの演算（例えば、アップサンプリングまたは転置のような演算）のために利用されることができる。
【０１７６】
（データ複製または後続の並べ替えの不要性）
いくつかの実装では、入力活性化マップのインターリーブされたレイアウトは、演算が、全くデータ複製を伴わずに、または最小限のみ伴って実施されることを可能にすることができる。したがって、メモリ利用効率は、高くなり得、それは、概して、より少ないメモリおよびより少量の短待ち時間メモリを有し得る内蔵システムに有用であり得る。
【０１７７】
さらに、初期畳み込み層（例えば、ＣＮＮの入力活性化マップ）の入力活性化マップのみが、畳み込み層に対する全ての入力および出力がデータ順序を保存し得るので、１回並べ替えられる必要がある。したがって、処理時間は、データ並べ替えの複数工程において無駄にされる必要がない。
【０１７８】
（電力効率）
一般に、データの処理に費やされる時間が少ないほど、プロセッサがアイドルまたはクロック解除され得る時間が多くなる。本明細書に開示される方法およびシステムを用いて、データを効率的に処理することによって、電力節約が、ＣＮＮを起動しながら、プロセッサリソースを効率的に使用することによって、達成されることができる。さらに、効率的メモリ利用のためにデータ複製を排除することによって、より少ないシステム全体リソースが、メモリ階層内のレベル間の転送のために必要とされ得る。これは、メインメモリが殆どアクセスされ得ず、かつローカルのキャッシュされたメモリが、より良好に、最適に、または最大限に利用され得るので、電力節約をもたらし得る。
【０１７９】
（レジスタ幅に合致する入力の数への依存性）
本明細書に開示される方法およびシステムは、１００％ＳＩＭＤ利用を伴うあらゆる可能な畳み込み層をもたらさないこともある。代わりに、非常に高利用率が、多くの層に関して達成されることができる。そして、畳み込み層の演算のためにレジスタを完全に埋める観点からの完全利用も、いくつかの畳み込み層に対して達成されることができる。ＳＩＭＤ利用は、層に対する入力／出力の数に依存し得、その数は、プロセッサアーキテクチャ上のレジスタに適合し得る値の数の倍数である。しかしながら、この依存は、畳み込みニューラルネットワークを設計および訓練するプロセスが柔軟であり得るので、それほど限定的ではないこともある。例えば、ＣＮＮは、ＣＮＮが、多くの場合、本開示の方法およびシステムに良好に働く層寸法を有することができるように設計されることができる。
【０１８０】
（例示的ウェアラブルディスプレイシステム）
いくつかの実施形態では、ユーザデバイスは、ウェアラブルディスプレイデバイスであることができ、またはその中に含まれることができ、有利なこととして、より没入型の仮想現実（ＶＲ）、拡張現実（ＡＲ）、または複合現実（ＭＲ）体験を提供し得、デジタル的に再現された画像またはその一部が、それらが現実のように見える様式、または現実として知覚され得る様式で装着者に提示される。
【０１８１】
理論によって限定されるわけではないが、人間の眼は、典型的には、深度知覚を提供するために、有限数深度面を解釈し得ると考えられる。その結果、知覚される深度の高度に真実味のあるシミュレーションが、これらの限定された数の深度面の各々に対応する画像の異なる表現を眼に提供することによって達成され得る。例えば、導波管のスタックを含むディスプレイが、ユーザまたは視認者の眼の正面に位置付けられて装着されるように構成され得る。導波管のスタックは、複数の導波管を使用し、画像投入デバイス（例えば、１つ以上の光ファイバを介して画像情報を送る多重化ディスプレイの離散ディスプレイまたは出力端）から、特定の導波管に関連付けられる深度面に対応する特定の角度（および発散量）における視認者の眼に光を向けることによって、３次元知覚を眼／脳に提供するために利用され得る。
【０１８２】
いくつかの実施形態では、導波管の２つのスタック（視認者の各眼のために１つ）が、異なる画像を各眼に提供するために利用され得る。一例として、拡張現実シーンは、ＡＲ技術の装着者は、人物、木、背景における建物、およびコンクリートプラットフォームを特徴とする実世界公園状設定を見るようにし得る。これらのアイテムに加えて、ＡＲ技術の装着者は、自身が、実世界プラットフォーム上に立っているロボット像およびマルハナバチの擬人化のように見える、飛んでいる漫画のようなアバタキャラクタも、そのロボットの像およびマルハナバチが実世界に存在していないにもかかわらず、「見えている」と知覚し得る。導波管のスタックは、入力画像に対応する明視野を生成するために使用され得、いくつかの実装では、ウェアラブルディスプレイは、ウェアラブル明視野ディスプレイを備えている。明視野画像を提供するためのウェアラブルディスプレイデバイスおよび導波管スタックの例が、米国特許公開第２０１５／００１６７７７号（参照することによって、これが含むあらゆるものに関してその全体として本明細書に組み込まれる）に説明されている。
【０１８３】
図１２は、ＶＲ、ＡＲ、またはＭＲ体験をディスプレイシステム装着者または視認者１２０４に提示するために使用され得るウェアラブルディスプレイシステム１２００の例を図示する。ウェアラブルディスプレイシステム１２００は、本明細書に説明される用途または実施形態（例えば、ＣＮＮの実行、入力活性化マップもしくはカーネルの値の並べ替え、眼画像セグメント化、または眼追跡）のいずれかを実施するようにプログラムされ得る。ディスプレイシステム１２００は、ディスプレイ１２０８と、そのディスプレイ１２０８の機能をサポートするための種々の機械的ならびに電子的モジュールおよびシステムとを含む。ディスプレイ１２０８は、フレーム１２１２に結合され得、それは、ディスプレイシステム装着者または視認者１２０４によって装着可能であり、装着者１２０４の眼の正面にディスプレイ１２０８を位置付けるように構成される。ディスプレイ１２０８は、明視野ディスプレイであり得る。いくつかの実施形態では、スピーカ１２１６が、フレーム１２１２に結合され、ユーザの外耳道に隣接して位置付けられ、いくつかの実施形態では、示されない別のスピーカが、ユーザの他方の外耳道に隣接して位置付けられ、ステレオ／成形可能音制御を提供する。ディスプレイ１２０８は、有線導線または無線接続性等によって、フレーム１２１２に固定して取り付けられる構成、ユーザによって装着されるヘルメットもしくは帽子に固定して取り付けられる構成、ヘッドホンに内蔵される構成、または別様にユーザ１２０４に（例えば、リュック式構成において、ベルト結合式構成において）除去可能に取り付けられる構成等、種々の構成において搭載され得るローカルデータ処理モジュール１２２４に動作可能に結合される（１２２０）。
【０１８４】
ローカル処理およびデータモジュール１２２４は、ハードウェアプロセッサならびに不揮発性メモリ、例えば、フラッシュメモリ等の非一過性デジタルメモリを備え得、その両方は、データの処理、キャッシュ、および記憶を補助するために利用され得る。データは、画像捕捉デバイス（カメラ等）、マイクロホン、慣性測定ユニット、加速度計、コンパス、ＧＰＳユニット、無線デバイス、および／もしくはジャイロスコープ等の（例えば、フレーム１２１２に動作可能に結合される、または別様に装着者１２０４に取り付けられ得る）センサから捕捉されるデータ（ａ）、ならびに／または、場合によっては処理もしくは読出後のディスプレイ１２０８への通過のために、遠隔処理モジュール１２２８および／もしくは遠隔データリポジトリ１２３２を使用して入手および／もしくは処理されるデータ（ｂ）を含む。ローカル処理およびデータモジュール１２２４は、それらの遠隔モジュール１２２８、１２３２が、互いに動作可能に結合され、ローカル処理およびデータモジュール１２２４へのリソースとして利用可能であるように、有線または無線通信リンク等を介して、通信リンク１２３６、１２４０によって、遠隔処理モジュール１２２８および遠隔データリポジトリ１２３２に動作可能に結合され得る。画像捕捉デバイスは、眼画像セグメント化、または眼追跡プロシージャにおいて使用される眼画像を捕捉するために使用されることができる。
【０１８５】
いくつかの実施形態では、遠隔処理モジュール１２２８は、画像捕捉デバイスによって捕捉されたビデオ情報等のデータおよび／または画像情報を分析ならびに処理するように構成される１つ以上のプロセッサを備え得る。ビデオデータは、ローカル処理およびデータモジュール１２２４内に、ならびに／または遠隔データリポジトリ１２３２内にローカルに記憶され得る。いくつかの実施形態では、遠隔データリポジトリ１２３２は、デジタルデータ記憶設備を備え得、それは、インターネットまたは「クラウド」リソース構成における他のネットワーキング構成を通して利用可能であり得る。いくつかの実施形態では、全てのデータが、記憶され、全ての計算が、ローカル処理およびデータモジュール１２２４において実施され、遠隔モジュールからの完全に自律的な使用を可能にする。
【０１８６】
いくつかの実装では、ローカル処理およびデータモジュール１２２４および／または遠隔処理モジュール１２２８は、本明細書に開示される入力活性化マップまたはカーネルの値の並べ替え、眼画像セグメント化、または眼追跡の実施形態を実施するようにプログラムされる。例えば、ローカル処理およびデータモジュール１２２４および／または遠隔処理モジュール１２２８は、図１０を参照して説明されるプロセス１０００および図２−９Ｂおよび１１を参照して説明される方法の実施形態を実施するようにプログラムされることができる。ローカル処理およびデータモジュール１２２４および／または遠隔処理モジュール１２２８は、本明細書に開示されるバイオメトリック抽出において、入力活性化マップまたはカーネルの値の並べ替え、眼画像セグメント化、または眼追跡技法を使用して、例えば、装着者１２０４の識別を識別または認証するようにプログラムされることができる。画像捕捉デバイスは、特定の用途のためのビデオ（例えば、眼追跡用途のための装着者の眼のビデオまたはジェスチャ識別用途のための装着者の手または指のビデオ）を捕捉することができる。ビデオは、処理モジュール１２２４、１２２８の一方または両方によって、ＣＮＮを使用して分析されることができる。ある場合には、入力活性化マップまたはカーネルの値の並べ替え、眼画像セグメント化、または眼追跡の少なくとも一部を（例えば、「クラウド」内の）遠隔処理モジュールにオフロードすることは、計算の効率または速度を改良し得る。ＣＮＮ１００のパラメータ（例えば、重み、バイアス項、プーリング層のためのサブサンプリング係数、異なる層内のカーネルの数およびサイズ、特徴マップの数等）は、データモジュール１２２４および／または１２３２内に記憶されることができる。
【０１８７】
ビデオ分析の結果（例えば、ＣＮＮ１００の出力）は、追加の動作または処理のために、処理モジュール１２２４、１２２８の一方または両方によって使用されることができる。例えば、種々のＣＮＮ用途では、バイオメトリック識別、眼追跡、ジェスチャの認識または分類、オブジェクト、姿勢等が、ウェアラブルディスプレイシステム１２００によって使用され得る。例えば、装着者の眼のビデオは、眼画像セグメント化のために使用されることができ、それは、順に、ディスプレイ１２０８を通した装着者１２０４の眼追跡のために、処理モジュール１２２４、１２２８によって使用されることができる。ウェアラブルディスプレイシステム１２００の処理モジュール１２２４、１２２８は、入力活性化マップまたはカーネルの値の並べ替え、眼画像セグメント化、または眼追跡のうちの１つ以上の実施形態を用いて、本明細書に説明されるビデオまたは画像処理用途のいずれかを実施するようにプログラムされることができる。
【０１８８】
（追加の側面）
第１の側面では、畳み込みニューラルネットワークの畳み込み層の効率的実装のための方法が、開示される。方法は、ハードウェアプロセッサの制御下にあり、方法は、畳み込みニューラルネットワークの畳み込み層を受信することであって、畳み込み層は、カーネルスタックにおけるカーネルを備え、カーネルスタックのカーネルは、基本カーネルレイアウトにおけるものである、ことと、カーネルスタックのカーネルの重み値を基本カーネルレイアウトから複数のカーネルタイルを備えているタイルカーネルレイアウトに並べ替えることであって、カーネルタイルは、複数のカーネルランネルを備え、カーネルランネルは、カーネルスタックのカーネルのいくつかの重み値を備えている、ことと、畳み込み層の入力活性化マップを受信することであって、入力活性化マップは、基本入力活性化マップレイアウトにおけるものである、ことと、入力活性化マップのピクセル値を基本入力活性化マップレイアウトから入力活性化マップピクセルの複数のクラスタを備えているインターリーブされた入力活性化マップレイアウトに並べ替えることと、畳み込み層の出力活性化マップを複数のカーネルタイルおよび入力活性化マップピクセルの複数のクラスタから決定することであって、出力活性化マップは、複数のクラスタ出力活性化マップピクセルを備えているインターリーブされた出力活性化マップレイアウトにおけるものである、こととを含む。
【０１８９】
第２の側面では、カーネルスタックのカーネルの重み値を基本カーネルレイアウトからタイルカーネルレイアウトに並べ替えることは、カーネルスタックの幅寸法に沿ってトラバースすることと、カーネルスタックの高さ寸法に沿ってトラバースすることと、カーネルスタックのカーネルの幅寸法に沿ってトラバースすることと、カーネルスタックのカーネルの高さ寸法に沿ってトラバースすることとを反復的に行うことを含む、側面１に記載の方法。
【０１９０】
第３の側面では、カーネルタイルの第１のカーネルランネルは、第１のカーネルスタック幅境界に対応し、カーネルタイルの最後のカーネルランネルは、第１のカーネルスタック幅境界の後続の第２のカーネルスタック幅境界に対応する、側面１−２のいずれか１項に記載の方法。
【０１９１】
第４の側面では、入力活性化マップのピクセル値を基本入力活性化マップレイアウトからインターリーブされた入力活性化マップレイアウトに並べ替えることは、いくつかの入力活性化マップの寸法に沿ってトラバースすることと、入力活性化マップの幅寸法に沿ってトラバースすることと、入力活性化マップの高さ寸法に沿ってトラバースすることとを反復的に行うことを含む、側面１−３のいずれか１項に記載の方法。
【０１９２】
第５の側面では、出力活性化マップのピクセル値をインターリーブされた出力活性化マップレイアウトから基本出力活性化マップレイアウトに並べ替えることをさらに含む、側面１−４のいずれか１項に記載の方法。
【０１９３】
第６の側面では、出力活性化マップのピクセル値をインターリーブされた出力活性化マップから基本出力活性化マップレイアウトに並べ替えることは、インターリーブされた出力活性化マップの幅寸法に沿ってトラバースすることと、インターリーブされた出力活性化マップの高さ寸法に沿ってトラバースすることとを反復的に行うことを含む、側面５に記載の方法。
【０１９４】
第７の側面では、畳み込み層の出力活性化マップを複数のカーネルタイルおよび入力活性化マップピクセルの複数のクラスタから決定することは、複数のカーネルタイルおよび入力活性化マップピクセルの複数のクラスタにタイル毎に融合積和演算を実施することを含む、側面１−６のいずれか１項に記載の方法。
【０１９５】
第８の側面では、複数のカーネルタイルおよび入力活性化マップピクセルの複数のクラスタにタイル毎に融合積和演算を実施することは、各出力活性化マップピクセルに対して、出力活性化マップピクセルの値をゼロの値に設定することと、複数のカーネルタイルの各カーネルタイルの各カーネルランネルに対して、融合積和演算を各カーネルランネル、カーネルランネルおよび出力活性化マップピクセルに対応する入力活性化マップピクセル、および出力活性化マップピクセルに実施することとを反復的に行うことを含む、側面７に記載の方法。
【０１９６】
第９の側面では、複数のカーネルタイルおよび入力活性化マップピクセルの複数のクラスタにタイル毎に融合積和演算を実施することは、各出力活性化マップピクセルに対して、出力活性化マップピクセルの値をゼロの値に設定することと、複数のカーネルタイルの各カーネルタイルの各カーネルランネルに対して、融合積和演算を各カーネルランネル、カーネルランネルおよび出力活性化マップピクセルに対応する少なくとも１つの入力活性化マップピクセル、および出力活性化マップピクセルに実施することとを反復的に行うことを含む、側面７に記載の方法。
【０１９７】
第１０の側面では、少なくとも１つの入力活性化マップピクセルは、２つの入力活性化マップピクセルを備えている、側面９に記載の方法。
【０１９８】
第１１の側面では、カーネルランネルのビットでのサイズと入力活性化マップランネルのビットでのサイズとは、同一である、側面１−１０のいずれか１項に記載の方法。
【０１９９】
第１２の側面では、カーネルランネルのビットでのサイズと出力活性化マップランネルのビットでのサイズとは、同一である、側面１１に記載の方法。
【０２００】
第１３の側面では、カーネルランネルのビットでのサイズとハードウェアプロセッサのレジスタのビットでのサイズとは、同一である、側面１１−１２のいずれか１項に記載の方法。
【０２０１】
第１４の側面では、レジスタのサイズは、１２８ビットである、側面１３に記載の方法。
【０２０２】
第１５の側面では、ハードウェアプロセッサは、単一命令多重データプロセッサを備えている、側面１−１４のいずれか１項に記載の方法。
【０２０３】
第１６の側面では、単一命令多重データプロセッサは、ベクトルプロセッサを備えている、側面１５に記載の方法。
【０２０４】
第１７の側面では、基本カーネルレイアウトにおけるカーネルスタックのカーネルは、複数のカーネルスタックチャネル内に配列され、複数のカーネルスタックチャネルの数と入力活性化マップの数とは、同一であり、カーネルスタックチャネルのカーネルの数と出力活性化マップの数とは、同一である、側面１−１６のいずれか１項に記載の方法。
【０２０５】
第１８の側面では、カーネルスタックのカーネルスタック幅と出力活性化マップの数とは、同一である、側面１−１７のいずれか１項に記載の方法。
【０２０６】
第１９の側面では、基本カーネルレイアウトにおけるカーネルスタックのカーネルは、複数のカーネルスタックフィルタバンク内に配列され、複数のカーネルスタックフィルタバンクの数と出力活性化マップの数とは、同一であり、カーネルスタックフィルタバンクのカーネルの数と入力活性化マップの数とは、同一である、側面１−１８のいずれか１項に記載の方法。
【０２０７】
第２０の側面では、カーネルスタックのカーネルスタック高さと入力活性化マップの数とは、同一である、側面１−１９のいずれか１項に記載の方法。
【０２０８】
第２１の側面では、畳み込みニューラルネットワークの畳み込み層の効率的実装のための方法が、開示される。方法は、ハードウェアプロセッサの制御下にあり、方法は、カーネルスタックにおけるカーネルを備えている畳み込みニューラルネットワークの畳み込み層を受信することであって、カーネルスタックのカーネルは、カーネルランネルの複数のカーネルタイルを備えているタイルカーネルレイアウトにおけるものである、ことと、畳み込み層の入力活性化マップを受信することであって、入力活性化マップは、基本入力活性化マップレイアウトにおけるものである、ことと、入力活性化マップのピクセル値を基本入力活性化マップレイアウトから入力活性化マップピクセルの複数のクラスタを備えているインターリーブされた入力活性化マップレイアウトに並べ替えることと、畳み込み層の出力活性化マップを複数のカーネルタイルおよび入力活性化マップピクセルの複数のクラスタから決定することであって、出力活性化マップは、出力活性化マップピクセルの複数のクラスタを備えているインターリーブされた出力活性化マップレイアウトにおけるものである、こととを含む。
【０２０９】
第２２の側面では、畳み込みニューラルネットワークの畳み込み層の効率的実装のための方法が、開示される。方法は、ハードウェアプロセッサの制御下にあり、方法は、カーネルスタックにおけるカーネルを備えている畳み込みニューラルネットワークの畳み込み層を受信することであって、カーネルスタックのカーネルは、カーネルランネルの複数のカーネルタイルを備えているタイルカーネルレイアウトにおけるものである、ことと、畳み込み層の入力活性化マップを受信することであって、入力活性化マップは、インターリーブされた入力活性化マップレイアウトにおけるものである、ことと、畳み込み層の出力活性化マップを複数のカーネルタイルおよび入力活性化マップピクセルの複数のクラスタから決定することであって、出力活性化マップは、出力活性化マップピクセルの複数のクラスタを備えているインターリーブされた出力活性化マップレイアウトにおけるものである、こととを含む。
【０２１０】
第２３の側面では、畳み込みニューラルネットワークの畳み込み層の効率的実装のための方法が、開示される。方法は、ハードウェアプロセッサの制御下にあり、方法は、カーネルスタックにおけるカーネルを備えている畳み込みニューラルネットワークの畳み込み層を受信することであって、カーネルスタックのカーネルは、カーネルランネルの複数のカーネルタイルを備えているタイルカーネルレイアウトにおけるものであり、カーネルの寸法は、１である、ことと、畳み込み層の入力活性化マップを受信することであって、入力活性化マップは、基本入力活性化マップレイアウトにおけるものである、ことと、ストライディングによって、入力活性化マップのピクセル値を基本入力活性化マップレイアウトから入力活性化マップピクセルの複数のクラスタを備えているインターリーブされた入力活性化マップレイアウトに並べ替えることと、畳み込み層の出力活性化マップを複数のカーネルタイルおよび複数の入力活性化マップタイルから決定することであって、出力活性化マップは、転置されインターリーブされた出力活性化マップレイアウトにおけるものであり、転置されインターリーブされた出力活性化マップレイアウトは、出力活性化マップの複数のクラスタを備えている、こととを含む。
【０２１１】
第２４の側面では、入力活性化マップのピクセル値を基本入力活性化マップレイアウトからインターリーブされた入力活性化マップレイアウトに並べ替えることは、ストライディングによって、入力活性化マップのピクセル値を基本入力活性化マップレイアウトから入力活性化マップピクセルの複数のクラスタを備えているインターリーブされた入力活性化マップレイアウトに並べ替えることを含み、ストライドのサイズは、入力活性化マップの数の倍数である、側面２３に記載の方法。
【０２１２】
第２５の側面では、入力活性化マップの数の倍数は、１である、側面２４に記載の方法。
【０２１３】
第２６の側面では、畳み込みニューラルネットワークの畳み込み層の効率的実装のための方法が、開示される。方法は、ハードウェアプロセッサの制御下にあり、方法は、カーネルスタックにおけるカーネルを備えている畳み込みニューラルネットワークの畳み込み層を受信することであって、カーネルスタックのカーネルは、カーネルランネルの複数のカーネルタイルを備えているタイルカーネルレイアウトにおけるものであり、カーネルの寸法は、１である、ことと、畳み込み層の入力活性化マップを受信することであって、入力活性化マップは、入力活性化マップピクセルの複数のクラスタを備えているインターリーブされた入力活性化マップレイアウトにおけるものであり、ストライドのサイズは、入力活性化マップの数の倍数である、ことと、畳み込み層の出力活性化マップを複数のカーネルタイルおよび複数の入力活性化マップタイルから決定することであって、出力活性化マップは、転置されインターリーブされた出力活性化マップレイアウトにおけるものであり、転置されインターリーブされた出力活性化マップレイアウトは、出力活性化マップの複数のクラスタを備えている、こととを含む。
【０２１４】
第２７の側面では、入力活性化マップの数の倍数は、１である、側面２６に記載の方法。
【０２１５】
第２８の側面では、コンピュータシステムが、開示される。コンピュータシステムは、ハードウェアプロセッサと、ハードウェアプロセッサによって実行されると、プロセッサに、側面１−２７のいずれか１項に記載の方法を実施させるその上に記憶される命令を有する非一過性メモリとを備えている。
【０２１６】
第２９の側面では、コンピュータシステムは、モバイルデバイスを備えている、側面２８に記載のコンピュータシステム。
【０２１７】
第３０の側面では、モバイルデバイスは、ウェアラブルディスプレイシステムを備えている、側面２９に記載のコンピュータシステム。
【０２１８】
第３１の側面では、畳み込みニューラルネットワーク（ＣＮＮ）を実装するためのシステムが、開示される。システムは、畳み込みニューラルネットワークの畳み込み層であって、畳み込み層は、カーネルスタックにおけるカーネルを備え、カーネルスタックのカーネルは、基本カーネルレイアウトにおけるものであり、カーネルスタックのカーネルの重み値は、基本カーネルレイアウトから複数のカーネルタイルを備えているタイルカーネルレイアウトに並べ替えられ、カーネルタイルは、複数のカーネルランネルを備え、カーネルランネルは、カーネルスタックのカーネルのいくつかの重み値を備えている、畳み込みニューラルネットワークの畳み込み層を記憶するように構成された非一過性メモリと、非一過性メモリと通信するハードウェアプロセッサであって、ハードウェアプロセッサは、畳み込み層の入力活性化マップを受信することであって、入力活性化マップは、基本入力活性化マップレイアウトにおけるものである、ことと、入力活性化マップのピクセル値を基本入力活性化マップレイアウトから入力活性化マップピクセルの複数のクラスタを備えているインターリーブされた入力活性化マップレイアウトに並べ替えることと、畳み込み層の出力活性化マップを複数のカーネルタイルおよび入力活性化マップピクセルの複数のクラスタから決定することとを行うための実行可能命令によってプログラムされ、出力活性化マップは、複数のクラスタ出力活性化マップピクセルを備えているインターリーブされた出力活性化マップレイアウトにおけるものである、ハードウェアプロセッサとを備えている。いくつかの実施形態では、ウェアラブルディスプレイシステムは、ＣＮＮを実装するためのシステムを備えていることができる。ウェアラブルディスプレイシステムは、仮想画像をウェアラブルディスプレイシステムのユーザに提示するように構成されたディスプレイを備えていることができ、ハードウェアプロセッサは、ディスプレイと通信することができる。
【０２１９】
第３２の側面では、カーネルスタックのカーネルの重み値は、カーネルスタックの幅寸法に沿ってトラバースすることと、カーネルスタックの高さ寸法に沿ってトラバースすることと、カーネルスタックのカーネルの幅寸法に沿ってトラバースすることと、カーネルスタックのカーネルの高さ寸法に沿ってトラバースすることとを反復的に行うことによって、基本カーネルレイアウトからタイルカーネルレイアウトに並べ替えられる、側面３１に記載のシステム。
【０２２０】
第３３の側面では、カーネルタイルの第１のカーネルランネルは、第１のカーネルスタック幅境界に対応し、カーネルタイルの最後のカーネルランネルは、第１のカーネルスタック幅境界の後続の第２のカーネルスタック幅境界に対応する、側面３１−３２のいずれか１項に記載のシステム。
【０２２１】
第３４の側面では、入力活性化マップのピクセル値を基本入力活性化マップレイアウトからインターリーブされた入力活性化マップレイアウトに並べ替えるために、ハードウェアプロセッサは、いくつかの入力活性化マップの寸法に沿ってトラバースすることと、入力活性化マップの幅寸法に沿ってトラバースすることと、入力活性化マップの高さ寸法に沿ってトラバースすることとを反復的に行うようにプログラムされている、側面３１−３３のいずれか１項に記載のシステム。
【０２２２】
第３５の側面では、ハードウェアプロセッサは、出力活性化マップのピクセル値をインターリーブされた出力活性化マップレイアウトから基本出力活性化マップレイアウトに並べ替えるようにプログラムされている、側面３１−３４のいずれか１項に記載のシステム。
【０２２３】
第３６の側面では、出力活性化マップのピクセル値をインターリーブされた出力活性化マップから基本出力活性化マップレイアウトに並べ替えるために、ハードウェアプロセッサは、インターリーブされた出力活性化マップの幅寸法に沿ってトラバースすることと、インターリーブされた出力活性化マップの高さ寸法に沿ってトラバースすることとを反復的に行うようにプログラムされている、側面３５に記載のシステム。
【０２２４】
第３７の側面では、畳み込み層の出力活性化マップを複数のカーネルタイルおよび入力活性化マップピクセルの複数のクラスタから決定するために、ハードウェアプロセッサは、タイル毎に融合積和演算を複数のカーネルタイルおよび入力活性化マップピクセルの複数のクラスタに実施するようにプログラムされている、側面３１−３６のいずれか１項に記載のシステム。
【０２２５】
第３８の側面では、タイル毎に融合積和演算を複数のカーネルタイルおよび入力活性化マップピクセルの複数のクラスタに実施することは、各出力活性化マップピクセルに対して、出力活性化マップピクセルの値をゼロの値に設定することと、複数のカーネルタイルの各カーネルタイルの各カーネルランネルに対して、各カーネルランネル、カーネルランネルおよび出力活性化マップピクセルに対応する入力活性化マップピクセル、および出力活性化マップピクセルに融合積和演算を実施することとを反復的に行うことを含む、側面３７に記載のシステム。
【０２２６】
第３９の側面では、タイル毎に融合積和演算を複数のカーネルタイルおよび入力活性化マップピクセルの複数のクラスタに実施するために、ハードウェアプロセッサは、各出力活性化マップピクセルに対して、出力活性化マップピクセルの値をゼロの値に設定することと、複数のカーネルタイルの各カーネルタイルの各カーネルランネルに対して、融合積和演算を各カーネルランネル、カーネルランネルおよび出力活性化マップピクセルに対応する少なくとも１つの入力活性化マップピクセル、および出力活性化マップピクセルに実施することとを反復的に行うようにプログラムされている、側面３７に記載のシステム。
【０２２７】
第４０の側面では、少なくとも１つの入力活性化マップピクセルは、２つの入力活性化マップピクセルを備えている、側面３９に記載のシステム。
【０２２８】
第４１の側面では、カーネルランネルのビットでのサイズと入力活性化マップランネルのビットでのサイズとは、同一である、側面３１−４０のいずれか１項に記載のシステム。
【０２２９】
第４２の側面では、カーネルランネルのビットでのサイズと出力活性化マップランネルのビットでのサイズとは、同一である、側面４１に記載のシステム。
【０２３０】
第４３の側面では、カーネルランネルのビットでのサイズとハードウェアプロセッサのレジスタのビットでのサイズとは、同一である、側面４１−４２のいずれか１項に記載のシステム。
【０２３１】
第４４の側面では、レジスタのサイズは、１２８ビットである、側面４３に記載のシステム。
【０２３２】
第４５の側面では、ハードウェアプロセッサは、単一命令多重データプロセッサを備えている、側面３１−４４のいずれか１項に記載のシステム。
【０２３３】
第４６の側面では、単一命令多重データプロセッサは、ベクトルプロセッサを備えている、側面４５に記載のシステム。
【０２３４】
第４７の側面では、基本カーネルレイアウトにおけるカーネルスタックのカーネルは、複数のカーネルスタックチャネル内に配列され、複数のカーネルスタックチャネルの数と入力活性化マップの数とは、同一であり、カーネルスタックチャネルのカーネルの数と出力活性化マップの数とは、同一である、側面３１−４６のいずれか１項に記載のシステム。
【０２３５】
第４８の側面では、カーネルスタックのカーネルスタック幅と出力活性化マップの数とは、同一である、側面３１−４７のいずれか１項に記載のシステム。
【０２３６】
第４９の側面では、基本カーネルレイアウトにおけるカーネルスタックのカーネルは、複数のカーネルスタックフィルタバンク内に配列され、複数のカーネルスタックフィルタバンクの数と出力活性化マップの数とは、同一であり、カーネルスタックフィルタバンクのカーネルの数と入力活性化マップの数とは、同一である、側面３１−４８のいずれか１項に記載のシステム。
【０２３７】
第５０の側面では、カーネルスタックのカーネルスタック高さと入力活性化マップの数とは、同一である、側面３１−４９のいずれか１項に記載のシステム。
【０２３８】
（結論）
本明細書に説明され、および／または添付される図に描写されるプロセス、方法、およびアルゴリズムの各々は、具体的かつ特定のコンピュータ命令を実行するように構成される１つ以上の物理的コンピューティングシステム、ハードウェアコンピュータプロセッサ、特定用途向け回路、および／もしくは電子ハードウェアによって実行されるコードモジュールにおいて具現化され、それによって完全もしくは部分的に自動化され得る。例えば、コンピューティングシステムは、具体的コンピュータ命令でプログラムされた汎用コンピュータ（例えば、サーバ）または専用コンピュータ、専用回路等を含むことができる。コードモジュールは、実行可能プログラムにコンパイルおよびリンクされ、動的リンクライブラリ内にインストールされ、または解釈されるプログラミング言語において書き込まれ得る。いくつかの実装では、特定の動作および方法が、所与の機能に特定の回路によって実施され得る。
【０２３９】
さらに、本開示の機能性のある実装は、十分に数学的、コンピュータ的、または技術的に複雑であるので、（適切な特殊化された実行可能命令を利用する）特定用途向けハードウェアまたは１つ以上の物理的コンピューティングデバイスは、例えば、関与する計算の量もしくは複雑性に起因して、または結果を実質的にリアルタイムで提供するために、機能性を実施する必要があり得る。例えば、ビデオは、多くのフレームを含み、各フレームは、数百万のピクセルを有し得、具体的にプログラムされたコンピュータハードウェアは、商業的に妥当な時間量において所望の画像処理タスクまたは用途を提供するようにビデオデータを処理する必要がある。
【０２４０】
コードモジュールまたは任意のタイプのデータは、ハードドライブ、ソリッドステートメモリ、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、光学ディスク、揮発性もしくは不揮発性記憶装置、同一物の組み合わせ、および／または同等物を含む、物理的コンピュータ記憶装置等の任意のタイプの非一過性コンピュータ読み取り可能な媒体上に記憶され得る。方法およびモジュール（またはデータ）は、無線ベースおよび有線／ケーブルベースの媒体を含む種々のコンピュータ読み取り可能な伝送媒体上で生成されたデータ信号として（例えば、搬送波または他のアナログもしくはデジタル伝搬信号の一部として）伝送され得、種々の形態（例えば、単一もしくは多重化アナログ信号の一部として、または複数の離散デジタルパケットもしくはフレームとして）をとり得る。開示されるプロセスまたはプロセスステップの結果は、任意のタイプの非一過性有形コンピュータ記憶装置内に持続的もしくは別様に記憶され得る、またはコンピュータ読み取り可能な伝送媒体を介して通信され得る。
【０２４１】
本明細書に説明される、および／または添付される図に描写されるフロー図における任意のプロセス、ブロック、状態、ステップ、もしくは機能性は、プロセスにおいて具体的機能（例えば、論理もしくは算術）またはステップを実装するための１つ以上の実行可能命令を含むコードモジュール、セグメント、またはコードの一部を潜在的に表すものとして理解されたい。種々のプロセス、ブロック、状態、ステップ、または機能性は、組み合わせられる、再配列される、追加される、削除される、修正される、または別様に本明細書に提供される例証的例から変更されることができる。いくつかの実施形態では、追加のまたは異なるコンピューティングシステム、もしくはコードモジュールが、本明細書に説明される機能性のいくつかまたは全てを実施し得る。本明細書に説明される方法およびプロセスはまた、任意の特定のシーケンスに限定されず、それに関連するブロック、ステップ、または状態は、適切な他のシーケンスで、例えば、連続して、並行して、またはある他の様式で実施されることができる。タスクまたはイベントが、開示される例示的実施形態に追加され、またはそれから除去され得る。さらに、本明細書に説明される実装における種々のシステムコンポーネントの分離は、例証を目的とし、全ての実装においてそのような分離を要求するものとして理解されるべきではない。説明されるプログラムコンポーネント、方法、およびシステムは、概して、単一のコンピュータ製品においてともに統合される、または複数のコンピュータ製品にパッケージ化され得ることを理解されたい。多くの実装変形例が、可能である。
【０２４２】
プロセス、方法、およびシステムは、ネットワーク（または分散）コンピューティング環境において実装され得る。ネットワーク環境は、企業全体コンピュータネットワーク、イントラネット、ローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、パーソナルエリアネットワーク（ＰＡＮ）、クラウドコンピューティング出ネットワーク、クラウドソースコンピューティングネットワーク、インターネット、およびワールドワイドウェブを含む。ネットワークは、有線もしくは無線ネットワークまたは任意の他のタイプの通信ネットワークであり得る。
【０２４３】
本開示のシステムおよび方法の各々は、いくつかの革新的側面を有し、そのうちのいかなるものも、本明細書に開示される望ましい属性に単独で関与しないか、またはそのために要求されない。上で説明される種々の特徴およびプロセスは、互いに独立して使用され得る、または種々の方法で組み合わせられ得る。全ての可能な組み合わせおよび副次的組み合わせが、本開示の範囲内に該当することが意図される。本開示に説明される実装の種々の修正が、当業者に容易に明白であり得、本明細書に定義される一般原理は、本開示の精神または範囲から逸脱することなく、他の実装に適用され得る。したがって、請求項は、本明細書に示される実装に限定されることを意図されず、本明細書に開示される本開示、原理、および新規の特徴と一貫する最も広い範囲を与えられるべきである。
【０２４４】
別個の実装の文脈において本明細書に説明されるある特徴はまた、単一の実装における組み合わせにおいて実装されることができる。逆に、単一の実装の文脈において説明される種々の特徴も、複数の実装において別個に、または任意の好適な副次的組み合わせにおいて実装されることができる。さらに、特徴がある組み合わせにおいて作用するものとして上で説明され、さらに、そのようなものとして最初に請求され得るが、請求される組み合わせからの１つ以上の特徴は、いくつかの場合では、組み合わせから削除されることができ、請求される組み合わせは、副次的組み合わせまたは副次的組み合わせの変形例を対象とし得る。いかなる単一の特徴または特徴のグループも、あらゆる実施形態に必要もしくは必須ではない。
【０２４５】
とりわけ、「〜できる（ｃａｎ）」、「〜し得る（ｃｏｕｌｄ）」、「〜し得る（ｍｉｇｈｔ）」、「〜し得る（ｍａｙ）」、「例えば（ｅ．ｇ．）」等、本明細書で使用される条件文は、別様に具体的に記載されない限り、または使用されるような文脈内で別様に理解されない限り、概して、ある実施形態がある特徴、要素、および／またはステップを含む一方、他の実施形態がそれらを含まないことを伝えることが意図される。したがって、そのような条件文は、概して、特徴、要素、および／もしくはステップが、１つ以上の実施形態に対していかようにも要求されること、または１つ以上の実施形態が、著者の入力または促しの有無を問わず、これらの特徴、要素、および／もしくはステップが任意の特定の実施形態において含まれる、もしくは実施されるべきかどうかを決定するための論理を必然的に含むことを示唆することを意図されない。用語「〜を備えている」、「〜を含む」、「〜を有する」、および同等物は、同義語であり、非限定的方式で包括的に使用され、追加の要素、特徴、行為、動作等を除外しない。用語「または」は、その包括的意味において使用され（およびその排他的意味において使用されず）、したがって、例えば、要素のリストを接続するために使用されると、用語「または」は、リスト内の要素のうちの１つ、いくつか、または全てを意味する。加えて、本願および添付される請求項で使用されるような冠詞「ａ」、「ａｎ」、および「ｔｈｅ」は、別様に規定されない限り、「１つ以上の」もしくは「少なくとも１つ」を意味するように解釈されるべきである。
【０２４６】
本明細書で使用されるように、項目のリスト「〜のうちの少なくとも１つ」を指す語句は、単一の要素を含む、それらの項目の任意の組み合わせを指す。ある例として、「Ａ、Ｂ、またはＣのうちの少なくとも１つ」は、Ａ、Ｂ、Ｃ、ＡおよびＢ、ＡおよびＣ、ＢおよびＣ、ならびにＡ、Ｂ、およびＣを対象とすることが意図される。語句「Ｘ、Ｙ、およびＺのうちの少なくとも１つ」等の接続文は、別様に具体的に記載されない限り、概して、項目、用語等がＸ、Ｙ、またはＺのうちの少なくとも１つであり得ることを伝えるために使用されるような文脈で別様に理解される。したがって、そのような接続文は、概して、ある実施形態が、Ｘのうちの少なくとも１つ、Ｙのうちの少なくとも１つ、およびＺのうちの少なくとも１つがそれぞれ存在するように要求することを示唆することを意図されない。
【０２４７】
同様に、動作は、特定の順序で図面に描写され得るが、それは、望ましい結果を達成するために、そのような動作が示される特定の順序で、もしくは連続的順序で実施される、または全ての図示される動作が実施される必要はないと認識されるべきである。さらに、図面は、フローチャートの形態で１つ以上の例示的プロセスを図式的に描写し得る。しかしながら、描写されない他の動作も、図式的に図示される例示的方法およびプロセス内に組み込まれることができる。例えば、１つ以上の追加の動作が、図示される動作のいずれかの前に、その後、それと同時に、またはその間に実施されることができる。加えて、動作は、他の実装において再配列される、または再順序付けられ得る。ある状況では、マルチタスクおよび並列処理が、有利であり得る。さらに、上で説明される実装における種々のシステムコンポーネントの分離は、全ての実装におけるそのような分離を要求するものとして理解されるべきではなく、説明されるプログラムコンポーネントおよびシステムは、概して、単一のソフトウェア製品においてともに統合され、または複数のソフトウェア製品にパッケージ化され得ることを理解されたい。加えて、他の実装も、以下の請求項の範囲内である。いくつかの場合では、請求項に列挙されるアクションは、異なる順序で実施され、依然として、望ましい結果を達成することができる。
【図１】
2019535079.tif 000020
【図２】
2019535079.tif 000021
【図３】
2019535079.tif 000022
【図４】
2019535079.tif 000023
【図５Ａ】
2019535079.tif 000024
【図５Ｂ】
2019535079.tif 000025
【図５Ｃ】
2019535079.tif 000026
【図６Ａ−１】
2019535079.tif 000027
【図６Ａ−２】
2019535079.tif 000028
【図６Ｂ−１】
2019535079.tif 000029
【図６Ｂ−２】
2019535079.tif 000030
【図７−１】
2019535079.tif 000031
【図７−２】
2019535079.tif 000032
【図８】
2019535079.tif 000033
【図９Ａ】
2019535079.tif 000034
【図９Ｂ】
2019535079.tif 000035
【図１０】
2019535079.tif 000036
【図１１】
2019535079.tif 000037
【図１２】
2019535079.tif 000038
【国際調査報告】
2019535079.tif 000039
2019535079.tif 000040