【文献】
Andrew Lavin et al.,"Fast Algorithms for Convolutional Neural Networks",arXiv.org [online],Cornell University,2015年11月,arXiv:1509.09308v2,pp.1-9,[令和2年10月15日検索],インターネット<URL: https://arxiv.org/pdf/1509.09308v2>
【文献】
Tianqi Chen et al.,"TVM: An Automated End-to-End Optimizing Compiler for Deep Learning",arXiv.org [online],Cornell University,2018年 5月,arXiv:1802.04799v2,pp.1-15,[令和2年10月15日検索],インターネット<URL: https://arxiv.org/pdf/1802.04799v2>
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0009】
様々な図面における同様の参照番号および記号表示は、同様の要素を示す。
【0010】
以下の詳細な説明は、畳み込みニューラルネットワーク(CNN)の高速計算について説明し、1つまたは複数の特定の実装形態との関連で開示されている主題を当業者が行うおよび使用することを可能にするために提示される。開示される実装形態の様々な修正、変更、および置換を行うことができ、それらは当業者には容易に明らかとなり、定義された一般原理は、本開示の範囲を逸脱することなく、他の実装形態および適用分野に適用され得る。場合によっては、記載の主題の理解を得るために不必要な詳細は、1つまたは複数の記載された実装形態を不必要な詳細で分かりにくくしないように、また、そのような詳細は当業者の技能の範囲内であるため、省略されることがある。本開示は、記載または図示された実装形態に限定されるのではなく、記載された原理および特徴と一致する最も広い範囲に従うことが意図されている。
【0011】
畳み込みニューラルネットワーク(CNNまたはConvNet)は、深層学習のための最も代表的なネットワーク構造および技術革新の1つである。CNNは、画像の分野で大きな成功を収めており、他の分野における問題の解決にも広く使用されている。CNNは、入力レイヤ、畳み込みレイヤ、活性化関数、バッチ正規化、プール化レイヤ、完全に接続されたレイヤ、および出力レイヤのうちの1つまたは複数を含むことができる。それらの中で、畳み込みレイヤは、通常、最も多くの計算負荷を伴い、CNN全体の最も長い計算時間を費やし得る。畳み込みレイヤは、1つまたは複数のフィルタ(カーネルとも呼ばれる)を含むことができる。畳み込みレイヤは、入力データを受信し、畳み込みレイヤの1つまたは複数のフィルタの各々で入力データの畳み込み演算を実行し、畳み込みレイヤの出力データを生成することができる。場合により、CNNは、数十の畳み込みレイヤを含み得る。
【0012】
記載されている技法は、畳み込みレイヤのコア演算である畳み込み演算の加速を助けることができる。次に、記載されている技法は、計算効率を向上させ、CNNの計算負荷を減らすことができる。
【0013】
記載されている技法は、様々なアプリケーションを有することができる。たとえば、記載されている技法は、無人のスーパーマーケット、無人の銀行、セキュリティ保護、およびスマートシティなどのエリアにおいて顔認識に適用することができる。たとえば、深い畳み込みニューラルネットワークが、顔認識において使用されている。記載されている技法は、特に大集団の中で、顔識別のタスクの処理を助けることができる。記載されている技法は、トレーニングされたCNNモデルに基づいて、顔認識の応答時間を改善することができる。記載されている技法は、顔認識の各要求の処理時間を減らすことができる。次に、システムスループットを増やすことができ、計算リソースを増やさずに運用コストを減らすことができる。
【0014】
もう1つの例として、記載されている技法は、自動車保険において使用することができる。記載されている技法は、深い畳み込みニューラルネットワーク画像技術に基づいて、車両の表面の損害を自動的に識別することができる。たとえば、自動車事故の後、車の表面の損害を写真に撮り、保険会社のクレームサーバにアップロードすることができ、自動的損害識別および補償割り当て査定を実行することができる。記載されている技法は、深い畳み込みニューラルネットワーク技術に基づいて自動的損害識別を実行するために、保険クレームサーバによって使用することができる。記載されている技法は、設備予算を増やさずに、より高速のかつより高いスループットを保険会社が提供することを可能にすることができる。
【0015】
上で論じた例とは別に、記載されている技法は、CNN技術を使用する他の多数のアプリケーションに利益をもたらすことができる。
【0016】
一部の実装形態において、記載されている技法は、計算グラフを使用し、実装することができる。計算グラフは、特に深層学習の分野において、機械学習アルゴリズムを表すために使用することができる。計算グラフは、複数のノードを含む有向グラフにすることができ、ここで、ノードは、演算または変数に対応する。変数は、それらの値を演算に入れることができ、演算は、それらの出力を他の演算に入れることができる。このように、計算グラフ内のノードは、変数の関数を定義することができる。ノードに入れられた値(すなわち、入力)およびノードから出てくる値(すなわち、出力)は、テンソルによって表すことができる。テンソルは、多次元配列として見なすことができる。テンソルは、より高いランクまたは次元のスカラ、ベクトル、マトリクス、およびテンソルを包含することができる。変数および演算子の入力および出力データを表すためにテンソルを使用することで、自動的差別化、動的メモリ管理、および他の機能の実現を助けることができる。
【0017】
演算子について、計算グラフは、演算子の関数を定義するだけでよい。各演算子の特定の実装形態を指定する必要はない。したがって、計算グラフは、演算子がCPUまたはGPU、FPGA、もしくはAIチップなどのハードウェアアクセラレータのうちの1つまたは複数において実行または他の方法で実装され得るように、柔軟性を提供する。データ変数に対する記録およびアクセスは、ローカルでもリモートでもよい。計算グラフは、機械学習プロセスのモデルトレーニング、モデル予測もしくは推論、または他のフェーズのために使用することができる。
【0018】
図1は、本開示の一実装形態による、CNNの2つの計算グラフ100および105の例示的等価変換101を示すブロック図である。2つの計算グラフ100および105は、同じCNNを表すことができる。簡潔にするために、2つの計算グラフ100および105は、CNNの単一の畳み込みレイヤの演算または関数を示す。CNNは、複数のレイヤを含むことができ、それに応じて、計算グラフによって表すことができる。
【0019】
図示するように、それぞれ、テンソルX110は入力であり、テンソルZ 170は、計算グラフ100によって表されるCNNの畳み込みレイヤの出力である。計算グラフ100は、2つのノード130および150を含む。各ノードは、ニューラルネットワークのきめの細かい基本演算として見なすことができる、変数または演算子に対応する。ノード130は、畳み込み演算子、Conv2Dを表す。Conv2D 130は、テンソルW 120を有する入力データテンソルX 110の畳み込み演算を表すことができ、テンソルW 120は、CNNの畳み込みレイヤのフィルタの重みまたはパラメータを表す。畳み込み演算の後、Conv2D 130は、テンソルY 140を出力することができる。出力テンソルY 140およびバイアス160は、CNNの畳み込みレイヤの出力Z 170をもたらす、バイアス160を出力データY 140に加える演算を表すノード150への入力の役割を果たすことができる。
【0020】
同様に、それぞれ、テンソルX' 115は入力であり、テンソルZ' 175は、計算グラフ105によって表されるCNNの畳み込みレイヤの出力である。計算グラフ105は、2つのノード135および155を含む。ノード135は、畳み込み演算子、Wino-Conv2Dを表す。Wino-Conv2D 135は、テンソルU 125を有する入力データテンソルX' 115の修正された畳み込み演算を表すことができ、テンソルU 125は、CNNの畳み込みレイヤのフィルタの修正された重みまたはパラメータを表す。畳み込み演算の後、Wino-Conv2D 135は、テンソルY' 145を出力することができる。出力テンソルY' 145およびバイアス165は、バイアス165を出力データY' 145に追加する演算を表す、ノード155への入力として働き、CNNの畳み込みレイヤの出力Z' 175をもたらすことができる。
【0021】
一部の実装形態において、計算グラフ105は、計算グラフ100の等価変換である。同じ入力(すなわち、X 110=X' 115)を所与すると、2つの計算グラフ100および105は、同じ出力(すなわち、Z 170=Z' 175)を生成することができる。
【0022】
一部の実装形態において、計算グラフ100と比較して、計算グラフ105は、CNNの高速計算のための改良されたまたは最適化された畳み込み演算を表すことができる。たとえば、機械学習プロセスのトレーニングフェーズの後、計算グラフのノードのパラメータ(たとえば、テンソルW 120またはテンソルU 125におけるフィルタまたはカーネルパラメータの値)は、トレーニングされ、知られている。機械学習プロセスの予測フェーズにおいて、これらのパラメータの値は、変更のないままである。言い換えれば、入力テンソルX' 115がどれほど変化しても、テンソルU 125の値は、変化しないことになる。そのようなものとして、テンソルU 125は、トレーニングの後に、任意の入力データX' 115に基づいて予測を実行する前に、計算することができる。テンソルU 125をあらかじめ計算することと、CNNの畳み込みレイヤへの任意の入力データX' 115にあらかじめ計算されたテンソルU 125を再使用することとによって、特にCNNへの複数の入力の予測のための、CNNの計算負荷を減らすことができる。
【0023】
そのようなものとして、計算グラフ105において、新しい畳み込み演算子Wino-Conv2D 135は、元の計算グラフ100における元の畳み込み演算子Conv2D 130に取って代わることができる。新しい畳み込み演算子Wino-Conv2D 135は、フィルタまたはカーネルパラメータとして元のテンソルW 120の代わりにテンソルU 125を使用する。計算グラフ105は、元の計算グラフ100との等価を維持しつつ、計算効率の改善を達成することができる。
【0024】
図2は、本開示の一実装形態による、CNNの高速計算のための例示的アルゴリズム200の例示的疑似コードを示すスクリーンショットである。例示的アルゴリズム200は、ウィノグラード最小フィルタリングアルゴリズム、CNNのための高速アルゴリズム、に基づく。
【0025】
CNNの畳み込みレイヤの畳み込み演算は、入力(たとえば、入力テンソルXによって表される)と畳み込みレイヤのフィルタまたはカーネル(フィルタまたはカーネルテンソルWによって表される)との間の指定された相関関係として定義し、出力(たとえば、出力テンソルYによって表される)をもたらすことができる。簡潔にするために、畳み込み演算は1のストライドを使用すると考える。所与の畳み込みレイヤについて、入力テンソルXは、[N; C
in; H; Wi]のサイズを有することができ、Nは、処理されることになる入力データのバッチサイズを表し(たとえば、畳み込まれることになるN画像のバッチ演算)、C
inは、チャネルの数を表し(たとえば、標準デジタルカメラからの画像は、赤、緑、および青の3つのチャネルを有する。各チャネルは、ピクセル値(たとえば、0から255の範囲内)を有する2次元マトリクスを含むことができる)、HおよびWiは、それぞれ、各チャネルの高さおよび幅を表す(たとえば、255*255)。フィルタまたはカーネルテンソルWは、[C
out; C
in; R; S]のサイズを有することができ、C
outは、畳み込み演算の出力チャネルの数を表し、C
inは、畳み込み演算の入力チャネルの数を表し、RおよびSは、それぞれ、畳み込みレイヤの各フィルタまたはカーネルの高さおよび幅を表す。通常は、RおよびSは、同じ値を有するように設定することができる。
【0026】
出力テンソルYは、[N; C
out; H; Wi]のサイズを有することができ、要素
【0028】
を有し、iは[0, N)の範囲からの整数であり、oは、[0, C
out)の範囲からの整数である。
【0029】
定義(たとえば、方程式(1)によって与えられるような)による計算、マトリクス乗法への換算、またはウィノグラード高速アルゴリズムの使用など、畳み込みレイヤの畳み込み演算を実装するためのいくつかの方法が存在する。たとえば、各畳み込みカーネルまたはフィルタのサイズが1x1である(すなわち、RおよびSが、同時に1と等しい)場合、前述の畳み込み演算は、マトリクス乗法に換算することができる。一部の実装形態において、たとえば、R>1またはS>1の場合、畳み込み演算は、ウィノグラード高速アルゴリズムに基づいて、実装することができる。
【0030】
ウィノグラード高速アルゴリズムによれば、rxsのサイズおよびmxnの出力サイズを有する畳み込みフィルタまたはカーネルを有する入力チャネルの畳み込みについて、最小フィルタリングアルゴリズムF(mxn;rxs)は、畳み込み演算を完了するために(m+r-1)(n+s-1)乗法のみを必要とすることが発見され得る。たとえば、サイズHxWiの所与の入力チャネルは、重複するサブブロックに分けることができ、各サブブロックは、mxnのサイズを有する。畳み込み計算は、対応する出力チャネルを生成するために、各サブブロック上で別個に実行することができる(ストライドが1である前述の想定を想起されたい)。前述のように、畳み込みレイヤにおける畳み込みフィルタまたはカーネルの幅Rおよび高さSは、一般に、同じ値に設定される。通常は、サブブロック分割のために、mおよびnは、同様に同じ値に設定される。
【0031】
簡潔にするために、例示的アルゴリズム200は、m=nおよびr=sである場合を考える。すなわち、最小フィルタリングアルゴリズムF(mm;rr)が考慮される。例示的アルゴリズム200のステップ1〜23は、CNNの単一の畳み込みレイヤの畳み込み演算のためのウィノグラードアルゴリズムの例示的実装形態を示す。CNNは、ω
o,c∈R
rxrと、第cの入力チャネルおよび第oの出力チャネルの間のフィルタまたはカーネルと、CNNのフィルタまたはカーネルのパラメータまたは重みを含むテンソルWとによって特徴付けられる。テンソルXは、CNNへの入力データを表す。
【0033】
は、入力チャネルの数を表す。α=m+r-1は、入力サブブロックのサイズを表す(隣接するサブブロックは、r-1個の重複する要素を有する)。X
c,p∈R
αxαは、第cの入力チャネルの第pのサブブロックを表す。Y
o,p∈R
αxαは、第oの出力チャネルの第pのサブブロックを表す。B
TおよびA
Tは、入力Xに対応する変換マトリクスであり、以下によって与えられる:
【0037】
ウィノグラードアルゴリズムに基づくCNNの計算のための既存の技法では、例示的アルゴリズム200(ステップ1〜23を含む)は、CNNの各畳み込みレイヤのための各入力チャネル(たとえば、画像のチャネル)のために実行される。たとえば、CNNが、各入力チャネルについて、5個の畳み込みレイヤを含む場合、例示的アルゴリズム200は、5回実行される。10個のチャネルが、予測のために入力される場合、例示的アルゴリズム200は、50回実行されることになる。
【0038】
既存の技法とは異なり、CNNの高速計算のための記載される技法は、計算負荷、特に所与の複数の入力チャネルを減らすことができる。CNNの高速計算のための記載される技法は、機械学習プロセスの予測フェーズの間に共通で変化のないファクタを再使用することができる。CNNの高速計算のための記載される技法は、そのようなファクタを識別し、それらをあらかじめ計算する。
【0039】
そのようなものとして、それらの再使用可能なファクタの計算は、入力データの値に関係なく、1度計算されるだけでよい。より具体的には、例示的アルゴリズム200において、そのような計算(たとえば、WおよびW
o,c)のために必要とされるすべてのパラメータは、トレーニングされたCNNが与えられていることが知られており、トレーニングされたCNNに基づいて予測フェーズの間に変更されないままであるので、記載される高速計算アルゴリズムは、ステップ1〜6に従って、テンソルUをあらかじめ計算することができる。たとえば、テンソルUは、オフライン処理によってテンソルWから抽出することができる。したがって、例示的アルゴリズム200のステップ1〜6(まとめて210で示されている)は、トレーニングされたCNNの各畳み込みレイヤについて1度だけ実行されればよい。たとえば、10チャネルが、予測のために入力される場合、例示的アルゴリズム200のステップ1〜6は、リアルタイムモデル予測における計算の量を減らすために、1度だけ実行されて、それにより、ランタイムを減らすことができるが、一方で、残りのステップ7〜23(まとめて220で示される)は、トレーニングされたCNNの各畳み込みレイヤについて10回実行される。
【0040】
例示的ウィノグラードアルゴリズム200に基づくあらかじめ計算されたテンソルUで、トレーニングされたCNNの計算グラフは、
図1に示すように、たとえば等価変換101により、計算グラフ105に修正することができる。たとえば、例示的ウィノグラードアルゴリズム200に基づくあらかじめ計算されたテンソルUは、トレーニングされたCNNの元の重みテンソルW 120に取って代わる、テンソルU 125の一例になり得る。畳み込み演算子Wino-Conv2D 135は、元の計算グラフ100内の元の畳み込み演算子Conv2D 130に取って代わり、例示的ウィノグラードアルゴリズム200のステップ7〜23に基づいて実装することができる。修正された計算グラフ105は、予測のために使用することができる。新しい計算グラフ105は、テンソルU 125の計算から元の計算グラフ100を解放するので、修正された計算グラフ105の計算負荷は減らされ、それにより、CNNの畳み込み演算の実行の計算効率を向上させる。シミュレーション結果は、あらかじめ計算されたU 125および畳み込み演算子Wino-Conv2D 135を有する修正された計算グラフ105に基づく計算は、元の重みテンソルW 120および畳み込み演算子Conv2D 130を有する計算グラフ100と比較して、30%も計算速度を改善することができることを示す。
【0041】
図2は、m=nおよびr=sの場合の例示的ウィノグラードアルゴリズムを示すことに留意されたい。CNNの高速計算のための記載される技法は、m=nおよびr=sの特定の要件のない一般的CNNを含む他の場合に適応させるおよび適用することができる。
【0042】
図3は、一実装形態による、CNNの高速計算のための例示的方法300のフロー図である。一部の実装形態において、方法300の様々なステップは、並行して、組み合わせて、ループで、または任意の順序で、実行することができる。提示を明確にするために、以下の説明は、概して、この説明におけるその他の図面との関連で方法300を説明する。しかしながら、方法300は、必要に応じて、たとえば、任意の適切なシステム、環境、ソフトウェア、およびハードウェア、あるいはシステム、環境、ソフトウェア、およびハードウェアの組合せによって実行され得ることが、理解されよう。たとえば、方法300は、CNNを使用する機械学習アルゴリズムを実行するように構成されたデータ処理装置によって実行することができる。データ処理装置は、たとえば、GPU、FPGA、さらにカスタムASICプロセッサなど、汎用CPUまたはハードウェアアクセラレータ、のうちの1つまたは複数を含むことができ、あるいは、それらにより実装することができる。
【0043】
310において、トレーニングされたCNNが取得される。トレーニングされたCNNを取得するステップは、たとえば、機械学習プロセスのトレーニングフェーズまたはプロセスを介して、トレーニングされたCNNを計算する(たとえば、トレーニングデータまたはサンプル入力に基づいて)ステップ、トレーニングされたCNNをメモリまたは別のデータストアから検索するステップ、あるいは、トレーニングされたCNNを別のソース(たとえば、トレーニングプロセスを実行する別のデータ処理装置)から受信するステップを含むことができる。トレーニングされたCNNは、入力データ(たとえば、入力画像)を受信および分析し、出力データ(たとえば、入力画像のカテゴリまたは分類のそれぞれの可能性)を予測することができる。
【0044】
トレーニングされたCNNは、トレーニングされたCNN内の各レイヤの知られているパラメータによって定義される知られているネットワークアーキテクチャ(たとえば、異なるレイヤの規則正しい順序)を有する。トレーニングされたCNN内の各レイヤは、トレーニングされたCNNへの入力データに作用することができる(直接またはトレーニングされたCNN内の前のレイヤの出力に作用することによって)。もう1つのレイヤに先立って、トレーニングされたCNN内のデータに作用するレイヤは、もう1つのレイヤに対して先の、前の、またはアップストリームレイヤと呼ばれる。データへのもう1つのレイヤの作用に続くまたはそのような作用の後の、トレーニングされたCNN内のデータに作用するレイヤは、もう1つのレイヤに対して後のまたはダウンストリームレイヤと呼ばれる。通常は、先のレイヤの出力は、隣接する、後のレイヤへの入力として供給される。そのように、トレーニングされたCNNへの入力データは、CNNの開始(たとえば、入力データを受信する入力レイヤまたは入力データに直接作用する最初のレイヤ)からCNNの最後(たとえば、CNNの結果を出力する出力レイヤ)までの順番で、トレーニングされたCNNの各レイヤを通過する。
【0045】
具体的には、トレーニングされたCNNは、1つまたは複数の畳み込みレイヤを含む。1つまたは複数の畳み込みレイヤの各々は、既知のフィルタパラメータ(たとえば、フィルタの数、フィルタサイズ、フィルタのパラメータ値、および接続重み)を有するそれぞれの1つまたは複数のフィルタ(またはカーネル)を含む。異なる畳み込みレイヤは、同じまたは異なる数のフィルタを含んでもよい。各フィルタは、既知のフィルタパラメータまたは重みによって定義される。一部の実装形態において、フィルタは、
図2に関して説明したように、フィルタω
o,c∈R
rxrなどのマトリクスによって表すことができる。フィルタマトリクスおよび接続重みの値は、トレーニングプロセスの間に学習され、知られ、これらの値は、たとえば入力データに基づいて予測するために、トレーニングされたCNNを使用するときに変化しない。一部の実装形態において、畳み込みレイヤのフィルタおよび/または接続重みは、集合的に、テンソルによって表すことができる。たとえば、トレーニングされたCNNの各畳み込みレイヤは、CNNのフィルタまたはカーネルのパラメータまたは重みを含むフィルタマトリクスおよび重みテンソル(たとえば、
図2に関して説明したようなテンソルW)によって表すことができる。310から、方法300は320に進む。
【0046】
320において、1つまたは複数の畳み込みレイヤの各々の再使用可能なファクタは、トレーニングされたCNNの既知のフィルタパラメータに基づいて、あらかじめ計算することができる。たとえば、1つまたは複数の畳み込みレイヤの各々について、知られている、変更のないパラメータのみに依存する再使用可能なファクタが、CNNへのいずれの入力データからも独立して、識別および計算され得る。たとえば、
図2において例示的アルゴリズム200に関して説明したような、テンソルUは、トレーニングされたCNNの1つまたは複数の畳み込みレイヤの各々の再使用可能なファクタの一例である。テンソルUは、そのような計算に必要なすべてのパラメータ(たとえば、Wおよびω
o,c)は、トレーニングされたCNNに与えられていることが知られ、トレーニングされたCNNに基づく予測フェーズの間に変更されないままであるので、例示的アルゴリズム200のステップ1〜6に従って計算することができる。
【0047】
一部の実装形態において、トレーニングされたCNNの既知のフィルタパラメータに基づいて1つまたは複数の畳み込みレイヤの各々の再使用可能なファクタをあらかじめ計算するステップは、トレーニングされたCNNへの入力データに関係なく、オフラインで、トレーニングされたCNNの既知のフィルタパラメータに基づいて、1つまたは複数の畳み込みレイヤの各々の再使用可能なファクタを計算するステップを含む。結果として、トレーニングされたCNNの各畳み込みレイヤについて、再使用可能なファクタは、たとえば、オフライン処理によって、1度だけ計算されればよく、ランタイム計算の間に検索および再使用することができる。320から、方法300は330に進む。
【0048】
330において、1つまたは複数の畳み込みレイヤの各々のあらかじめ計算された再使用可能なファクタは、たとえば、たとえば予測のために、トレーニングされたCNNを使用するときに後の検索を容易にするためにデータストアに保存することができる。一部の実装形態において、保存されたあらかじめ計算された再使用可能なファクタは、他のデータ処理デバイスに対して共有、公開、または他の方法で伝送することができる。330から、方法300は、340に進む。
【0049】
340において、トレーニングされたCNNへの入力データが受信されるかどうかに関する判定が行われる。トレーニングされたCNNへの入力データが受信されたという判定に応答して、方法300は350に進む。そうではなく、トレーニングされたCNNへの入力データが受信されないと判定された場合、方法300は380に進み、そこで方法300は停止する。
【0050】
入力データは、たとえば、1つまたは複数の画像(たとえば、人の顔を含む写真)の画像データ、または他のタイプの入力データを含むことができる。各画像は、1つまたは複数のチャネルを含むことができる。たとえば、標準デジタルカメラからの画像は、赤、緑および青の3つのチャネルを有すると見なすことができる。他方で、グレースケール画像は、単一のチャネルを有すると見なすことができる。
【0051】
一部の実装形態において、入力データは、スカラ、ベクトル、マトリクス、および高次元テンソルを含み得るテンソルによって表すことができる。一例として、グレースケール画像は、ピクセル値の2次元マトリクスによって表すことができる。マトリクス内の各ピクセルの値は、たとえば、0から255までの範囲でもよく、ゼロは黒を示し、255は白を示す。一部の実装形態において、各ピクセルの値は、それを255によって割ることによって正規化される。カラー画像の各チャネルは、ピクセル値、たとえば、0から255の範囲内、または正規化の後に0から1.0の範囲内、を有する2次元マトリクスを含むことができる。互いに積み重ねられた2次元マトリクス(各色につき1つ)は、カラー画像を表すテンソルを形成することができる。一部の実装形態において、画像データは、複数の画像を含むテンソルを含むことができる。
【0052】
たとえば、
図2の例示的アルゴリズム200に関して説明されたような入力テンソルXは、入力データの一例である。入力データは、たとえば例示的アルゴリズム200に関して説明されたような技法に従って、サブブロックまたはチャネルに分割することができる。畳み込み演算は、たとえばウィノグラードアルゴリズムまたは別の方法に従って、データのサブブロックまたはチャネルの各々に実行することができる。
【0053】
一部の実装形態において、CNNへの入力データは、トレーニングされたCNNの知られているネットワークアーキテクチャに従って、トレーニングされたCNNの各レイヤを通過することができる。340から、方法300は350に進む。
【0054】
350において、1つまたは複数の畳み込みレイヤの各々の出力(たとえば、レイヤk)が、あらかじめ計算された再使用可能なファクタおよび入力データに基づいて計算される。レイヤkの出力は、レイヤkへの入力とレイヤkのフィルタとの間で実行される畳み込み演算の結果を含む。レイヤkへの入力は、トレーニングされたCNNへの入力データ、トレーニングされたCNNの前のレイヤ(たとえば、レイヤk-1)の出力、またはそれらの組合せを含むことができる。一部の実装形態において、レイヤkの出力は、あらかじめ計算された再使用可能なファクタ(たとえば、テンソルU 125)および入力データ(直接的または間接的に前のレイヤの出力に作用することによる)に基づいてウィノグラード畳み込み演算子(たとえば、
図1に関して説明されたようなWino-Conv2D 135)を使用して、計算することができる。一部の実装形態において、レイヤkの出力は、ウィノグラード最小フィルタリングアルゴリズム(たとえば、
図2に関して説明されたような例示的アルゴリズム200)に従って、計算することができる。350から、方法300は360に進む。
【0055】
360において、トレーニングされた畳み込みネットワークの出力データが、1つまたは複数の畳み込みレイヤの各々の出力に基づいて決定される。一部の実装形態において、トレーニングされた畳み込みネットワークの出力データを決定するステップは、トレーニングされたCNNの出力データを生成、予測、または他の方法で計算するステップを含む。出力データは、予測、分類、あるいは、トレーニングされたCNNの演算によって入力データから導出される他の特徴または属性を含むことができる。たとえば、出力データは、入力画像の可能なカテゴリ(たとえば、人、犬、車、または木)の可能性のベクトルを含むことができる。もう1つの例として、出力データは、入力画像内のオブジェクトの識別(たとえば、顔認識のための)を含むことができる。さらに別の例として、出力データは、車両の入力写真に基づく車両の損害の識別または分類を含むことができる。一部の実装形態において、出力データは、入力データの強化またはフィルタリングされたバージョン(たとえば、入力写真のシャープにされたまたはぼやかされたバージョン)を含むことができる。
【0056】
一部の実装形態において、トレーニングされた畳み込みネットワークの出力データが、1つまたは複数の畳み込みレイヤの各々の出力(たとえば、k∈[1,L]のための、レイヤkの出力、Lは、トレーニングされたCNN内のレイヤの総数)のうちの1つまたは複数に基づいて決定されるという点で、トレーニングされた畳み込みネットワークの出力データは、1つまたは複数の畳み込みレイヤの各々の出力に基づいて決定される。通常は、トレーニングされた畳み込みネットワークの出力データは、トレーニングされたCNNの最後のレイヤ、レイヤL、に基づいて決定され、レイヤLの出力は、トレーニングされたCNNへの入力データに遡るまで、前のレイヤ、レイヤL-1など、の出力に基づいて決定される。一部の実装形態において、トレーニングされた畳み込みネットワークの出力データは、別の方式において1つまたは複数の畳み込みレイヤの各々の出力に基づいて決定され得る。360から、方法300は370に進む。
【0057】
370において、トレーニングされた畳み込みネットワークの出力データは、たとえばユーザインターフェース(たとえば、グラフィカルユーザインターフェース)を介して、出力され得る。たとえば、トレーニングされた畳み込みネットワークの出力データは、テーブル、グラフ、テキスト、または別のフォーマットで表すことができ、画面または別のユーザインターフェースを介してユーザに対して表示され得る。一部の実装形態において、トレーニングされた畳み込みネットワークの出力データは、保存、送信、または他の方法で別のデバイス(たとえば、ストレージデバイスまたはさらなる処理のための別のデータ処理装置)に出力することができる。
【0058】
370から、方法300は、340に戻って、トレーニングされたCNNへの入力データ(たとえば、第2の入力データと呼ばれる)が受信されたかを判定する。一部の実装形態において、トレーニングされたCNNへの第2の入力データは、分析および予測のためのトレーニングされたCNNへの追加のまたは更新された入力データ(たとえば、別の画像のセット)を含み得る。したがって、方法300は、あらかじめ計算された再使用可能なファクタおよび第2の入力データに基づいて、1つまたは複数の畳み込みレイヤの各々の第2の出力を計算するために、350に進み、次いで、トレーニングされた畳み込みネットワークの第2の出力データを1つまたは複数の畳み込みレイヤの各々の第2の出力に基づいて決定するために360に進むことができる。
【0059】
図4は、一実装形態による、本開示に記載されるような、記載のアルゴリズム、方法、機能、プロセス、流れ、および手順に関連する計算機能を提供するために使用される例示的コンピュータシステム400のブロック図である。図示されたコンピュータ402は、コンピューティングデバイスの物理または仮想インスタンス(またはその両方)を含む、サーバ、デスクトップコンピュータ、ラップトップ/ノートブックコンピュータ、ワイヤレスデータポート、スマートフォン、携帯情報端末(PDA)、タブレットコンピューティングデバイス、これらのデバイス内の1つまたは複数のプロセッサ、あるいは他の任意の適切な処理デバイスなどの任意のコンピューティングデバイスを包含することが意図されている。加えて、コンピュータ402は、キーパッド、キーボード、タッチスクリーン、またはユーザ情報を受け付けることができる他のデバイスなどの入力デバイスと、デジタルデータ、視覚もしくはオーディオ情報(または情報の組合せ)、またはグラフィカルタイプユーザインターフェース(UI)(またはGUI)を含む、コンピュータ402の動作に関連する情報を運ぶ出力デバイスとを含み得る。
【0060】
コンピュータ402は、本開示で説明される主題を実行するためのコンピュータシステムのクライアント、ネットワーク構成要素、サーバ、データベースまたは他の持続性構成要素もしくは他の任意の構成要素の役割(または役割の組合せ)を果たすことができる。図示されたコンピュータ402は、ネットワーク430と通信可能なように結合される。一部の実装形態では、コンピュータ402の1つまたは複数の構成要素は、クラウドコンピューティングを用いた、ローカルな、グローバルな、または他の環境(または環境の組合せ)を含む、環境内で動作するように構成することができる。
【0061】
高いレベルにおいて、コンピュータ402は、記載の主題に関連するデータおよび情報を受信、送信、処理、記録、または管理するように動作可能な電子コンピューティングデバイスである。いくつかの実装形態によれば、コンピュータ402はまた、アプリケーションサーバ、電子メールサーバ、ウェブサーバ、キャッシングサーバ、ストリーミングデータサーバ、または他のサーバ(またはサーバの組合せ)を含んでもよく、またはそれらと通信可能なように結合されてもよい。
【0062】
コンピュータ402は、クライアントアプリケーション(たとえば、別のコンピュータ402上で実行する)からネットワーク430を介して要求を受信し、受信した要求を適切なソフトウェアアプリケーションを使用して処理することによって、受信した要求に応答することができる。加えて、要求はまた、内部ユーザ(たとえば、コマンドコンソールからまたは他の適切なアクセス方法によって)、外部関係者またはサードパーティ、他の自動化されたアプリケーション、ならびに他の任意の適切なエンティティ、個人、システム、またはコンピュータからコンピュータ402に送られ得る。
【0063】
コンピュータ402の各構成要素は、システムバス403を使用して通信することができる。一部の実装形態では、コンピュータ402、ハードウェアまたはソフトウェア(または、ハードウェアとソフトウェアとの両方の組合せ)の構成要素のいずれかまたはすべては、アプリケーションプログラミングインターフェース(API)412またはサービスレイヤ413(または、API412およびサービスレイヤ413の組合せ)を使用してシステムバス403を介して、互いにまたはインターフェース404(またはその両方の組合せ)とインターフェースすることができる。API412は、ルーティン、データ構造体、およびオブジェクトクラスの仕様を含み得る。API412は、コンピュータ言語非依存または依存のいずれでもよく、完全なインターフェース、単一機能、またはAPIのセットも指し得る。サービスレイヤ413は、ソフトウェアサービスをコンピュータ402またはコンピュータ402に通信可能なように結合された他の構成要素(図示の有無に関わらず)に提供する。コンピュータ402の機能は、このサービスレイヤを使用してすべてのサービス消費者についてアクセス可能でもよい。サービスレイヤ413によって提供されるものなどのソフトウェアサービスは、定義されたインターフェースを介して、再利用可能な定義された機能を提供する。たとえば、インターフェースは、JAVA(登録商標)、C++、または拡張マークアップ言語(extensible markup language: XML)フォーマットにおいてもしくは他の適切なフォーマットにおいてデータを提供する他の適切な言語において書かれたソフトウェアでもよい。コンピュータ402の統合された構成要素として示されているが、代替実装形態では、コンピュータ402の他の構成要素またはコンピュータ402に通信可能なように結合された他の構成要素(図示の有無に関わらず)に対して独立型の構成要素としてAPI412またはサービスレイヤ413を示し得る。さらに、API412またはサービスレイヤ413のいずれかのまたはすべての部分は、本開示の範囲を逸脱せずに、別のソフトウェアモジュール、企業アプリケーション、またはハードウェアモジュールの子またはサブモジュールとして実装され得る。
【0064】
コンピュータ402は、インターフェース404を含む。
図4では単一のインターフェース404として示されているが、2つ以上のインターフェース404が、具体的なニーズ、要望、またはコンピュータ402の具体的な実装形態に応じて、使用され得る。インターフェース404は、分散環境においてネットワーク430に接続された他のシステム(図示の有無に関わらず)と通信するためにコンピュータ402によって使用される。一般に、インターフェース404は、ソフトウェアまたはハードウェア(またはソフトウェアとハードウェアとの組合せ)においてエンコードされたロジックを含み、ネットワーク430と通信するように動作可能である。さらに具体的には、ネットワーク430またはインターフェースのハードウェアが、図示されたコンピュータ402の中および外で物理信号を通信するように動作可能であるように、インターフェース404は、通信に関連する1つまたは複数の通信プロトコルをサポートするソフトウェアを含み得る。
【0065】
コンピュータ402は、プロセッサ405を含む。
図4では単一のプロセッサ405として示されているが、2つ以上のプロセッサが、具体的なニーズ、要望、またはコンピュータ402の具体的な実装形態に応じて使用され得る。一般に、プロセッサ405は、命令を実行し、コンピュータ402の動作と本開示に記載されるような任意のアルゴリズム、方法、機能、プロセス、フロー、および手順とを実行するために、データを操作する。
【0066】
コンピュータ402はまた、コンピュータ402またはネットワーク430に接続することができる他の構成要素(または両方の組合せ)(図示の有無に関わらず)のためのデータを保持することができるデータベース406を含む。たとえば、データベース406は、本開示と一致するデータを記録するインメモリの、従来の、または他のタイプのデータベースでもよい。一部の実装形態では、データベース406は、具体的なニーズ、要望、またはコンピュータ402および記載されている機能の具体的な実装形態に応じて、2つ以上の異なるデータベースタイプ(たとえば、ハイブリッドインメモリおよび従来のデータベース)の組合せでもよい。
図4では単一のデータベース406として示されているが、2つ以上のデータベース(同じタイプまたはタイプの組合せの)が、具体的なニーズ、要望、またはコンピュータ402および記載されている機能の具体的な実装形態に応じて、使用され得る。データベース406は、コンピュータ402の不可欠な構成要素として示されているが、代替実装形態において、データベース406は、コンピュータ402の外部にあってもよい。図示されているように、データベース406は、CNNの高速計算のために、1つまたは複数のトレーニングされたCNN416と、1つまたは複数のトレーニングされたCNN416の各畳み込みレイヤのあらかじめ計算された再使用可能なファクタ418と、ウィノグラードアルゴリズム426とを保持する。
【0067】
コンピュータ402はまた、コンピュータ402またはネットワーク430に接続することができる他の構成要素(または両方の組合せ)(図示の有無に関わらず)のためのデータを保持することができるメモリ407を含む。メモリ407は、本開示に一致する任意のデータを記録することができる。一部の実装形態では、メモリ407は、具体的なニーズ、要望、またはコンピュータ402および記載されている機能の特定の実装形態に応じて2つ以上の異なるタイプのメモリの組合せ(たとえば、半導体と磁気ストレージとの組合せ)でもよい。
図4には単一のメモリ407として示されているが、2つ以上のメモリ407(同じタイプのまたはタイプの組合せの)が、具体的なニーズ、要望、またはコンピュータ402および記載されている機能の特定の実装形態に応じて使用され得る。メモリ407は、コンピュータ402の不可欠な構成要素として示されているが、代替実装形態において、メモリ407は、コンピュータ402の外部にあってもよい。
【0068】
アプリケーション408は、具体的には本開示に記載の機能に関する、具体的なニーズ、要望、またはコンピュータ402の特定の実装形態に応じた機能を提供するアルゴリズムソフトウェアエンジンである。たとえば、アプリケーション408は、1つまたは複数の構成要素、モジュール、またはアプリケーションとしての機能を果たすことができる。さらに、単一のアプリケーション408として示されているが、アプリケーション408は、コンピュータ402上に複数のアプリケーション408として実装されてもよい。加えて、コンピュータ402に不可欠なものとして示されているが、代替実装形態において、アプリケーション408は、コンピュータ402の外部にあってもよい。
【0069】
コンピュータ402はまた、電源414を含み得る。電源414は、ユーザが自分で交換可能なようにまたはユーザが自分で交換不可能なように構成することができる再充電可能なまたは再充電不可能なバッテリを含み得る。一部の実装形態では、電源414は、電力変換または管理回路(再充電、スタンバイ、または他の電力管理機能を含む)を含むことができる。一部の実装形態では、電源414は、たとえば、コンピュータ402に電力を供給するまたは再充電可能なバッテリを再充電するために、コンピュータ402が壁ソケットまたは他の電力ソースにつながれることを可能にするための電源プラグを含むことができる。
【0070】
コンピュータ402を含むコンピュータシステムに関連付けられた、またはそのようなコンピュータシステムの外部の、任意の数のコンピュータ402が存在してよく、各コンピュータ402はネットワーク430を介して通信する。さらに、「クライアント」、「ユーザ」という用語、および他の適切な用語は、本開示の範囲を逸脱せずに、必要に応じて、互換的に使用され得る。さらに、本開示は、多数のユーザが1つのコンピュータ402を使用し得ること、または1人のユーザが複数のコンピュータ402を使用し得ることを企図している。
【0071】
本主題の記載されている実装形態は、1つまたは複数の特徴を単独でまたは組み合わせて含むことができる。
【0072】
たとえば、第1の実装形態において、コンピュータで実行される方法は、1つまたは複数の畳み込みレイヤを含むトレーニングされた畳み込みニューラルネットワークをデータ処理装置によって取得するステップであって、1つまたは複数の畳み込みレイヤの各々が、既知のフィルタパラメータを有するいくつかのフィルタを含む、ステップと、トレーニングされた畳み込みニューラルネットワークの既知のフィルタパラメータに基づいて1つまたは複数の畳み込みレイヤの各々の再使用可能なファクタをデータ処理装置によってあらかじめ計算するステップと、トレーニングされた畳み込みニューラルネットワークへの入力データをデータ処理装置によって受信するステップと、あらかじめ計算された再使用可能なファクタおよび入力データに基づいてウィノグラード畳み込み演算子を使用して1つまたは複数の畳み込みレイヤの各々の出力をデータ処理装置によって計算するステップと、トレーニングされた畳み込みネットワークの出力データを1つまたは複数の畳み込みレイヤの各々の出力に基づいてデータ処理装置によって決定するステップとを含む。
【0073】
第2の実装形態において、非一時的なコンピュータ可読記録媒体が、以下を含む動作を実行するためにコンピュータシステムによって実行可能な1つまたは複数の命令を記録する。すなわち、1つまたは複数の畳み込みレイヤの各々が、既知のフィルタパラメータを有するいくつかのフィルタを含む、1つまたは複数の畳み込みレイヤを含むトレーニングされた畳み込みニューラルネットワークを取得するステップと、トレーニングされた畳み込みニューラルネットワークの既知のフィルタパラメータに基づいて1つまたは複数の畳み込みレイヤの各々の再使用可能なファクタをあらかじめ計算するステップと、トレーニングされた畳み込みニューラルネットワークへの入力データを受信するステップと、あらかじめ計算された再使用可能なファクタおよび入力データに基づいてウィノグラード畳み込み演算子を使用して1つまたは複数の畳み込みレイヤの各々の出力を計算するステップと、トレーニングされた畳み込みネットワークの出力データを1つまたは複数の畳み込みレイヤの各々の出力に基づいて決定するステップ。
【0074】
第3の実装形態において、コンピュータが実装されたシステムが、1つまたは複数のコンピュータと、1つまたは複数のコンピュータと相互動作可能なように結合されており、1つまたは複数のコンピュータによって実行されると動作を実行する命令を記録する有形の、非一時的、機械可読の媒体を有する、1つまたは複数のコンピュータメモリデバイスとを含み、動作は、1つまたは複数の畳み込みレイヤの各々が、既知のフィルタパラメータを有するいくつかのフィルタを含む、1つまたは複数の畳み込みレイヤを含むトレーニングされた畳み込みニューラルネットワークを取得するステップと、トレーニングされた畳み込みニューラルネットワークの既知のフィルタパラメータに基づいて1つまたは複数の畳み込みレイヤの各々の再使用可能なファクタをあらかじめ計算するステップと、トレーニングされた畳み込みニューラルネットワークへの入力データを受信するステップと、あらかじめ計算された再使用可能なファクタおよび入力データに基づいてウィノグラード畳み込み演算子を使用して1つまたは複数の畳み込みレイヤの各々の出力を計算するステップと、トレーニングされた畳み込みネットワークの出力データを1つまたは複数の畳み込みレイヤの各々の出力に基づいて決定するステップとを含む。
【0075】
前述のおよび他の記載されている実装形態は、各々、以下の特徴のうちの1つまたは複数を任意選択的に含むことができる。
【0076】
トレーニングされた畳み込みニューラルネットワークの既知のフィルタパラメータに基づいて1つまたは複数の畳み込みレイヤの各々の再使用可能なファクタをあらかじめ計算するステップが、トレーニングされた畳み込みニューラルネットワークへの入力データに関係なく、オフラインで、トレーニングされた畳み込みニューラルネットワークの既知のフィルタパラメータに基づいて、1つまたは複数の畳み込みレイヤの各々の再使用可能なファクタを計算するステップを含む、以下の特徴のいずれとも組み合わせ可能な、第1の特徴。
【0077】
1つまたは複数の畳み込みレイヤの各々のあらかじめ計算された再使用可能なファクタを保存するステップをさらに含む、前のまたは以下の特徴のいずれとも組み合わせ可能な、第2の特徴。
【0078】
あらかじめ計算された再使用可能なファクタおよび入力データに基づいて1つまたは複数の畳み込みレイヤの各々の出力を計算するステップが、あらかじめ計算された再使用可能なファクタおよび入力データを用いてウィノグラード最小フィルタリングアルゴリズムに従って1つまたは複数の畳み込みレイヤの各々の出力を計算するステップを含む、前のまたは以下の特徴のいずれとも組み合わせ可能な、第3の特徴。
【0079】
トレーニングされた畳み込みニューラルネットワークへの入力データが、1つまたは複数の画像を含む、前のまたは以下の特徴のいずれとも組み合わせ可能な、第4の特徴。
【0080】
方法または演算が、トレーニングされた畳み込みニューラルネットワークへの第2の入力データをデータ処理装置によって受信するステップと、あらかじめ計算された再使用可能なファクタおよび第2の入力データに基づいて1つまたは複数の畳み込みレイヤの各々の第2の出力をデータ処理装置によって計算するステップと、1つまたは複数の畳み込みレイヤの各々の第2の出力に基づいて、データ処理装置によって、トレーニングされた畳み込みネットワークの第2の出力データを予測するステップとをさらに含む、前のまたは以下の特徴のいずれとも組み合わせ可能な、第5の特徴。
【0081】
方法または演算が、トレーニングされた畳み込みネットワークの出力データをユーザインターフェースを介して出力するステップをさらに含む、前のまたは以下の特徴のいずれとも組み合わせ可能な、第6の特徴。
【0082】
本主題の実装形態および本明細書に記載の機能の動作は、デジタル電子回路素子において、有形に実施されたコンピュータソフトウェアまたはファームウェアにおいて、本明細書で開示される構造体およびそれらの構造的同等物を含む、コンピュータハードウェアにおいて、あるいはそれらのうちの1つまたは複数の組合せにおいて、実装することができる。記載の主題のソフトウェア実装形態は、1つまたは複数のコンピュータプログラム、すなわち、データ処理装置によって実行するための、またはデータ処理装置の動作を制御するための、有形の、非一時的な、コンピュータ可読のコンピュータストレージ媒体上にエンコードされたコンピュータプログラム命令の1つまたは複数のモジュール、として実装することができる。別法として、または追加で、プログラム命令は、人工的に生成された伝搬される信号、たとえば、データ処理装置によって実行するための適切なレシーバ装置に送信するための情報をエンコードするために生成された、機械生成された電気的、光学的、または電磁的信号、内/上にエンコードすることができる。コンピュータストレージ媒体は、機械可読ストレージデバイス、機械可読ストレージ回路基板、ランダムまたはシリアルアクセスメモリデバイス、またはコンピュータストレージ媒体の組合せでもよい。1つまたは複数のコンピュータを構成することは、ソフトウェアが1つまたは複数のコンピュータによって実行されるときに、特定のコンピューティング動作が実行されるように、1つまたは複数のコンピュータが、インストールされたハードウェア、ファームウェア、またはソフトウェア(または、ハードウェア、ファームウェア、およびソフトウェアの組合せ)を有することを意味する。
【0083】
「リアル-タイム」、「リアルタイム」、「実時間」、「リアル(ファスト)タイム(RFT: real (fast) time)」、「ほぼリアルタイム(NRT: near(ly) real-time)」、「準リアルタイム」という用語、または同様の用語(当業者によって理解されるような)は、個々がアクションおよびほぼ同時に生じる応答を把握するようにアクションおよび応答が時間的に近接することを意味する。たとえば、データにアクセスするための個人のアクションに続くデータの表示に対する応答のための(または表示の開始のための)時間差は、1ミリ秒未満、1秒未満、または5秒未満でもよい。要求されたデータは、瞬時に表示される(表示を開始される)必要はないが、それは、記載のコンピューティングシステムの処理限界と、たとえば、データを集める、正確に測定する、分析する、処理する、記録する、または送信するために、必要とされる時間とを考慮して、意図的遅延なしに表示される(または表示を開始される)。
【0084】
「データ処理装置」、「コンピュータ」、または「電子コンピュータデバイス」(または当業者によって理解されるような同意語)という用語は、データ処理ハードウェアを指し、例として、プログラマブルプロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを含む、データを処理するためのすべての種類の装置、デバイス、および機械を包含する。装置はまた、専用ロジック回路素子、たとえば、中央処理装置(CPU)、FPGA(フィールドプログラマブルゲートアレイ)、またはASIC(識別用途向け集積回路)でもよく、またはそれらをさらに含み得る。一部の実装形態では、データ処理装置または専用ロジック回路素子(または、データ処理装置もしくは専用ロジック回路素子の組合せ)は、ハードウェアまたはソフトウェアを用いた(またはハードウェアおよびソフトウェアの両方の組合せを用いた)ものでもよい。装置は、コンピュータプログラムのための実行環境を作り出すコード、たとえば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、または実行環境の組合せを構成するコード、を任意選択的に含むことができる。本開示は、従来のオペレーティングシステム、たとえばLINUX、UNIX(登録商標)、WINDOWS(登録商標)、MAC OS、ANDROID(登録商標)、IOS、または他の任意の適切な従来のオペレーティングシステム、を有するまたは有さないデータ処理装置の使用を企図する。
【0085】
プログラム、ソフトウェア、ソフトウェアアプリケーション、モジュール、ソフトウェアモジュール、スクリプト、またはコードと呼ばれるまたはそのように記載されることもある、コンピュータプログラムは、コンパイル型もしくはインタープリタ型言語、または宣言型もしくは手続き型言語を含む任意の形式のプログラミング言語で書くことができ、それは、独立型のプログラムとして、あるいはコンピューティング環境における使用に適したモジュール、構成要素、サブルーティン、または他のユニットとしてを含む、任意の形式で配備することができる。コンピュータプログラムは、ファイルシステム内のファイルに対応し得るが、対応する必要はない。プログラムは、他のプログラムまたはデータ、たとえばマークアップ言語文書に記録された1つまたは複数のスクリプト、を保持するファイルの一部に、問題のプログラム専用の単一ファイルに、あるいは、複数のまとめられたファイル、たとえば、1つまたは複数のモジュール、サブプログラム、またはコードの部分を記録するファイル、に記録することができる。コンピュータプログラムは、1つのコンピュータ上でまたは1つの場所に置かれた複数のコンピュータ上で実行されるように配備されてもよく、あるいは複数の場所に分散されて通信ネットワークによって相互接続されてもよい。
【0086】
様々な図に示されたプログラムの部分は、様々なオブジェクト、方法、または他のプロセスを介して様々な特徴および機能を実装する個々のモジュールとして示されているが、プログラムは、この代わりに、必要に応じて、いくつかのサブモジュール、サードパーティサービス、構成要素、ライブラリなどを含んでもよい。逆に、様々な構成要素の特徴および機能は、必要に応じて、単一の構成要素に結合することができる。計算による決定を行うために使用される閾値は、静的に、動的に、または、静的と動的の両方で、決定することができる。
【0087】
本明細書に記載の方法、プロセス、または論理の流れは、入力データで操作することおよび出力を生成することによって機能を実行するための1つまたは複数のコンピュータプログラムを実行する1つまたは複数のプログラマブルコンピュータによって実行することができる。本方法、プロセス、または論理の流れはまた、専用ロジック回路素子、たとえば、CPU、FPGA、またはASIC、によって実行することができ、装置はまた、そのようなものとして実装することができる。
【0088】
コンピュータプログラムの実行に適したコンピュータは、汎用もしくは専用マイクロプロセッサ、その両方、または他の任意の種類のCPUに基づき得る。一般に、CPUは、メモリから命令およびデータを受信し、メモリにそれらを書き込むことになる。コンピュータの必須要素は、命令を遂行または実行するためのCPUと、命令およびデータを記録するための1つまたは複数のメモリデバイスとである。一般に、コンピュータはまた、データを記録するための1つまたは複数の大容量ストレージデバイス、たとえば、磁気、光磁気ディスク、または光ディスク、を含む、またはこれに動作可能なように結合され、これからデータを受信する、またはこれにデータを転送する、あるいはその両方を行うことになる。しかしながら、コンピュータは、このようなデバイスを有さなくてもよい。さらに、コンピュータは、別のデバイス、たとえば、いくつか例を挙げると、携帯電話、携帯情報端末(PDA)、モバイルオーディオまたはビデオプレーヤ、ゲーム機、グローバルポジショニングシステム(GPS)レシーバ、または携帯ストレージデバイス、たとえば、ユニバーサルシリアルバス(USB)フラッシュドライブ、に組み込むことができる。
【0089】
コンピュータプログラム命令およびデータを記録するのに適したコンピュータ可読記録媒体(必要に応じて、一時的または非一時的な)は、例として半導体メモリデバイス、たとえば、ランダムアクセスメモリ(RAM)、リードオンリメモリ(ROM)、相変化メモリ(PRAM: phase change memory)、スタティックランダムアクセスメモリ(SRAM)、ダイナミックランダムアクセスメモリ(DRAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、およびフラッシュメモリデバイスを含む、永続/非永続または揮発性/不揮発性のメモリ、媒体およびメモリデバイスと、磁気デバイス、たとえば、テープ、カートリッジ、カセット、内部/取り外し可能ディスク、と、光磁気ディスクと、光メモリデバイス、たとえば、デジタルビデオディスク(DVD)、CD-ROM、DVD+/-R、DVD-RAM、DVD-ROM、HD-DVD、およびBLURAY、および他の光メモリ技術、とのすべての形式を含む。メモリは、キャッシュ、クラス、フレームワーク、アプリケーション、モジュール、バックアップデータ、ジョブ、ウェブページ、ウェブページテンプレート、データ構造体、データベーステーブル、動的情報を記録するレポジトリ、および、任意のパラメータ、変数、アルゴリズム、命令、ルール、制約、もしくはその参照を含む、他の任意の適切な情報を含む、様々なオブジェクトまたはデータを記録することができる。加えて、メモリは、ログ、ポリシ、セキュリティまたはアクセスデータ、レポートファイルなど、他の任意の適切なデータを含み得る。プロセッサおよびメモリは、専用ロジック回路素子によって補完する、または専用ロジック回路素子に組み込むことができる。
【0090】
ユーザとの相互作用を提供するために、本明細書に記載される主題の実装形態は、ユーザに対して情報を表示するためのディスプレイデバイス、たとえば、ブラウン管(CRT: cathode ray tube)、液晶ディスプレイ(LCD: liquid crystal display)、発光ダイオード(LED: Light Emitting Diode)、またはプラズマモニタ、ならびに、ユーザがそれによりコンピュータに入力を提供することができる、キーボードおよびポインティングデバイス、たとえば、マウス、トラックボール、またはトラックパッド、を有するコンピュータ上に実装することができる。入力はまた、感圧性を有するタブレットコンピュータの表面、容量または電気感知を使用するマルチタッチスクリーン、または他のタイプのタッチスクリーンなど、タッチスクリーンを使用してコンピュータに提供され得る。他の種類のデバイスが、同様にユーザとの相互作用を提供するために使用され得、たとえば、ユーザに提供されるフィードバックは、任意の形式の感覚フィードバック、たとえば、視覚フィードバック、聴覚フィードバック、または触覚フィードバック、でもよく、ユーザからの入力は、音響、音声、または触覚入力を含む、任意の形式で受信することができる。加えて、コンピュータは、ユーザによって使用されるデバイスに文書を送信することおよびそのようなデバイスから文書を受信することによって、たとえば、ウェブブラウザから受信された要求に応答してユーザのクライアントデバイス上のウェブブラウザにウェブページを送信することによって、ユーザと相互作用することができる。
【0091】
「グラフィカルユーザインターフェース」、または「GUI」という用語は、1つまたは複数のグラフィカルユーザインターフェースおよび特定のグラフィカルユーザインターフェースのディスプレイの各々を記載するために単数形または複数形で使用されることがある。したがって、GUIは、情報を処理し、ユーザに情報の結果を効率的に提示する、ウェブブラウザ、タッチスクリーン、またはコマンドラインインターフェース(畳み込みレイヤI)を含むがこれらに限定されない、任意のグラフィカルユーザインターフェースを表し得る。一般に、GUIは、1つまたは複数のユーザインターフェース(UI)要素を含むことができ、それらの一部またはすべては、インタラクティブなフィールド、プルダウンリスト、およびボタンなど、ウェブブラウザに関連付けられる。これらのおよび他のUI要素は、ウェブブラウザの機能に関連し得る、またはウェブブラウザの機能を表し得る。
【0092】
本明細書に記載されている主題の実装形態は、たとえばデータサーバとして、バックエンド構成要素を含む、またはミドルウェア構成要素、たとえばアプリケーションサーバ、を含む、またはフロントエンド構成要素、たとえば、本明細書に記載されている主題の実装形態とユーザがそれを介して相互作用することができるグラフィカルユーザインターフェースまたはウェブブラウザを有するクライアントコンピュータ、を含む、コンピューティングシステム、あるいは、1つまたは複数のそのようなバックエンド、ミドルウェア、またはフロントエンド構成要素の任意の組合せにおいて実装することができる。本システムの構成要素は、ワイヤラインまたはワイヤレスデジタルデータ通信(またはデータ通信の組合せ)の任意の形式または媒体、たとえば通信ネットワーク、によって、相互接続することができる。通信ネットワークの例は、ローカルエリアネットワーク(LAN)、無線アクセスネットワーク(RAN: radio access network)、メトロポリタンエリアネットワーク(MAN)、ワイドエリアネットワーク(WAN)、ワールドワイドインターオペラビリティフォーマイクロウェーブアクセス(WIMAX: Worldwide Interoperability for Microwave Access)、たとえば802.11a/b/g/nまたは802.20(または、802.11xおよび802.20もしくは本開示と一致する他のプロトコルの組合せ)を使用する、ワイヤレスローカルエリアネットワーク(WLAN)、インターネットのすべてまたは一部、あるいは、1つまたは複数の場所にある1つまたは複数の他の任意の通信システム(または通信ネットワークの組合せ)を含む。ネットワークは、たとえば、ネットワークアドレス間でインターネットプロトコル(IP)パケット、フレームリレーフレーム、非同期転送モード(ATM: Asynchronous Transfer Mode)セル、音声、ビデオ、データ、または他の適切な情報(または通信タイプの組合せ)を用いて通信し得る。
【0093】
コンピューティングシステムは、クライアントおよびサーバを含み得る。クライアントおよびサーバは、一般に、互いに遠隔にあり、通常は、通信ネットワークを介して相互作用する。クライアントとサーバとの関係は、それぞれのコンピュータ上で実行して互いにクライアント-サーバ関係を有するコンピュータプログラムによって生じる。
【0094】
本明細書は、多くの具体的な実装形態の詳細を含むが、これらは、いずれかの発明の範囲または特許請求され得るものの範囲の制限としてではなく、特定の発明の特定の実装形態に特有であり得る特徴の説明として解釈されるべきである。別個の実装形態に関連して本明細書において説明されるある特定の特徴はまた、組み合わせて、単一の実装形態において実装することができる。逆に、単一の実装形態に関連して説明される様々な特徴はまた、別個に、複数の実装形態において、または任意の適切な部分的組合せにおいて実装することができる。さらに、前述の特徴は、ある特定の組合せにおいて作動するものとして説明され、そのようなものとして初めに請求されていることがあるが、請求されている組合せからの1つまたは複数の特徴は、場合により、その組合せから削除することができ、特許請求されている組合せは、部分的組合せまたは部分的組合せの変更形態を対象とし得る。
【0095】
本主題の特定の実装形態が説明された。記載されている実装形態の他の実装形態、変更形態、および置換は、以下の特許請求の範囲内にあることが、当業者には明らかとなろう。動作は、特定の順序で図面または特許請求の範囲に示されるが、これは、所望の結果を達成するために、そのような動作が示された特定の順序でもしくは順番に実行されること、または示されたすべての動作が実行されることを必要とすることとして理解されるべきではない(一部の動作は任意選択として考えることができる)。ある特定の環境において、マルチタスクまたは並列処理(またはマルチタスクと並列処理との組合せ)が、有利となり得、適切と判断されるように実行され得る。
【0096】
さらに、前述の実装形態における様々なシステムモジュールおよび構成要素の分離または統合は、すべての実装形態においてそのような分離または統合を必要とするものとして理解されるべきではなく、記載されているプログラム構成要素およびシステムは、一般に、単一のソフトウェア製品に統合すること、複数のソフトウェア製品にパッケージ化することができることを理解されたい。
【0097】
したがって、前述の例示的実装形態は、本開示を定義または制約しない。他の変更形態、置換、改変形態もまた、本開示の趣旨および範囲を逸脱せずに起こり得る。
【0098】
さらに、特許請求されるいずれの実装形態も、少なくとも1つのコンピュータで実行される方法と、コンピュータで実行される方法を実行するためのコンピュータ可読命令を記録する非一時的なコンピュータ可読記録媒体と、コンピュータで実行される方法または非一時的なコンピュータ可読記録媒体に記録された命令を実行するように構成されたハードウェアプロセッサに相互動作可能なように結合されたコンピュータメモリを含むコンピュータシステムとに適用可能であると考えられる。
コンピュータで実行される方法は、1つまたは複数の畳み込みレイヤを備えるトレーニングされた畳み込みニューラルネットワークを取得するステップであって、1つまたは複数の畳み込みレイヤの各々が、既知のフィルタパラメータを有する複数のフィルタを備える、ステップと、トレーニングされた畳み込みニューラルネットワークの既知のフィルタパラメータに基づいて1つまたは複数の畳み込みレイヤの各々の再使用可能なファクタをあらかじめ計算するステップと、トレーニングされた畳み込みニューラルネットワークへの入力データを受信するステップと、あらかじめ計算された再使用可能なファクタおよび入力データに基づいてウィノグラード畳み込み演算子を使用して1つまたは複数の畳み込みレイヤの各々の出力を計算するステップと、トレーニングされた畳み込みネットワークの出力データを1つまたは複数の畳み込みレイヤの各々の出力に基づいて決定するステップとを含む。