IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ クアルコム,インコーポレイテッドの特許一覧

特表2024-509408ピクセル間ニューラルネットワークにおけるデータ処理
<>
  • 特表-ピクセル間ニューラルネットワークにおけるデータ処理 図1
  • 特表-ピクセル間ニューラルネットワークにおけるデータ処理 図2
  • 特表-ピクセル間ニューラルネットワークにおけるデータ処理 図3
  • 特表-ピクセル間ニューラルネットワークにおけるデータ処理 図4
  • 特表-ピクセル間ニューラルネットワークにおけるデータ処理 図5A
  • 特表-ピクセル間ニューラルネットワークにおけるデータ処理 図5B
  • 特表-ピクセル間ニューラルネットワークにおけるデータ処理 図6
  • 特表-ピクセル間ニューラルネットワークにおけるデータ処理 図7
  • 特表-ピクセル間ニューラルネットワークにおけるデータ処理 図8
  • 特表-ピクセル間ニューラルネットワークにおけるデータ処理 図9
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-03-01
(54)【発明の名称】ピクセル間ニューラルネットワークにおけるデータ処理
(51)【国際特許分類】
   G06T 1/60 20060101AFI20240222BHJP
【FI】
G06T1/60 450D
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023552228
(86)(22)【出願日】2022-01-26
(85)【翻訳文提出日】2023-08-28
(86)【国際出願番号】 US2022013891
(87)【国際公開番号】W WO2022191930
(87)【国際公開日】2022-09-15
(31)【優先権主張番号】17/200,090
(32)【優先日】2021-03-12
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】507364838
【氏名又は名称】クアルコム,インコーポレイテッド
(74)【代理人】
【識別番号】100108453
【弁理士】
【氏名又は名称】村山 靖彦
(74)【代理人】
【識別番号】100163522
【弁理士】
【氏名又は名称】黒田 晋平
(72)【発明者】
【氏名】デイビッド・ハンセン
(72)【発明者】
【氏名】アリレザ・ショア・ハッサニ・ラシュダン
(72)【発明者】
【氏名】シヴァクマール・チダンバラム
(72)【発明者】
【氏名】ハオピン・シュ
(72)【発明者】
【氏名】ジェフリー・カー・ファイ・ウォン
(72)【発明者】
【氏名】ストン・ユン
(72)【発明者】
【氏名】ダレン・ナナプラガサン
【テーマコード(参考)】
5B047
【Fターム(参考)】
5B047AA30
5B047AB02
5B047AB04
5B047EA07
5B047EB07
5B047EB15
(57)【要約】
ニューラルネットワーク内のデータを処理するための技法が提供される。例示的な方法は、ニューラルネットワークの各レイヤによって、データ入力の第1のストライプの行を処理するステップであって、行が、水平方向に、レイヤ単位のシーケンスに従って、連続的に処理される、処理するステップと、行を処理した後、各レイヤによって、第1のストライプ内の後続の行を行単位ベースで処理するステップであって、各後続の行が、水平方向に、レイヤ単位のシーケンスに従って、連続的に処理される、処理するステップと、行および後続の処理の処理に基づいて、出力ストライプを生成するステップと、各レイヤによって、データ入力の第2のストライプを処理するステップであって、第2のストライプ内の各行が、水平方向に、レイヤ単位のシーケンスに従って処理され、第2のストライプ内の行が行単位ベースで処理される、処理するステップと、第2のストライプの処理に基づいて、別の出力ストライプを生成するステップとを含み得る。
【特許請求の範囲】
【請求項1】
装置であって、
メモリと、
前記メモリに結合された1つまたは複数のプロセッサと
を備え、前記1つまたは複数のプロセッサが、
入力データを論理的にセグメント化するストライプを備えた前記入力データを取得することであって、前記入力データの各ストライプが、データの少なくとも1つの行を含む、取得することと、
ニューラルネットワークの各レイヤによって、前記入力データの第1のストライプ内のデータの行を処理することであって、データの前記行は、前記ニューラルネットワークの各先行するレイヤが、前記ニューラルネットワークの各後続のレイヤの前に、データの特定の行を処理するというレイヤ単位のシーケンスに従って、水平方向に連続的に処理される、処理することと、
前記第1のストライプ内のデータの前記行を処理した後、前記ニューラルネットワークの各レイヤによって、前記第1のストライプ内のデータの後続の行を行単位ベースで処理することであって、データの各後続の行が、前記水平方向に、前記レイヤ単位のシーケンスに従って、連続的に処理される、処理することと、
前記ニューラルネットワークによって、データの前記行およびデータの前記後続の行の前記処理に基づいて、第1の出力ストライプを生成することと、
前記第1のストライプを処理した後、前記ニューラルネットワークの各レイヤによって、前記入力データの第2のストライプ内のデータの行を行単位ベースで処理することであって、前記第2のストライプ内のデータの各行が、前記水平方向に、前記レイヤ単位のシーケンスに従って、処理される、処理することと、
前記第2のストライプの前記処理に基づいて、第2の出力ストライプを生成することと
を行うように構成される、装置。
【請求項2】
前記第1のストライプ内のデータの前記行を前記水平方向に連続的に処理するために、前記1つまたは複数のプロセッサが、
前記ニューラルネットワークの各レイヤによって、前記行内のデータの複数のブロックを連続的に処理することであって、前記ニューラルネットワークの各レイヤが、後続のブロックを前記水平方向に沿って処理する前に、データの各先行するブロックを深さ方向に沿って処理する、処理すること
を行うように構成される、請求項1に記載の装置。
【請求項3】
前記後続の行を処理するために、前記1つまたは複数のプロセッサが、
前記ニューラルネットワークの各レイヤによって、各後続の行内のデータのそれぞれの複数のブロックを連続的に処理することであって、前記ニューラルネットワークの各レイヤが、後続の行内のデータの後続のブロックを処理する前に、前記後続の行内のデータの先行するブロックを前記深さ方向に沿って処理する、処理すること
を行うように構成される、請求項2に記載の装置。
【請求項4】
前記ニューラルネットワークが、ピクセル間ニューラルネットワークを含み、
前記入力データが、画像に関連付けられたピクセルを含む、請求項1に記載の装置。
【請求項5】
前記入力データを取得するために、前記1つまたは複数のプロセッサが、
前記入力データを前記ストライプに論理的にセグメント化することであって、各ストライプが、前記入力データのそれぞれの部分を含む、セグメント化すること
を行うように構成される、請求項1に記載の装置。
【請求項6】
前記1つまたは複数のプロセッサが、
前記第1のストライプ内のデータの前記行内の1つまたは複数のブロックに対して前記ニューラルネットワークの前のレイヤによって生成された出力を第1のメモリ内に記憶することと、
データの前記行内の前記1つまたは複数のブロックからのデータの1つまたは複数のラインを前記ニューラルネットワークの特定のレイヤに関連付けられた第2のメモリ内に記憶することであって、データの前記1つまたは複数のラインが、前のストライプ-ブロック-行に対する前記ニューラルネットワークの前記特定のレイヤのデータ入力の部分を含む、記憶することと
を行うように構成される、請求項1に記載の装置。
【請求項7】
前記1つまたは複数のプロセッサが、
前記前のレイヤによって生成された前記出力と、前記前のストライプ-ブロック-行に対する前記特定のレイヤの前記データ入力の前記部分を含むデータの前記1つまたは複数のラインとの組合せに基づいて、前記ニューラルネットワークの前記特定のレイヤに対する入力を生成することと、
前記ニューラルネットワークの前記特定のレイヤによって、前記前のレイヤに対する前記出力に基づいて、追加の出力を生成することと
を行うように構成される、請求項6に記載の装置。
【請求項8】
前記1つまたは複数のプロセッサが、
前記特定のレイヤに対する前記入力の部分を決定することと、
前記入力の前記部分を、前記ニューラルネットワークの前記特定のレイヤに関連付けられた第3のメモリ内に記憶することと
を行うように構成される、請求項7に記載の装置。
【請求項9】
前記1つまたは複数のプロセッサが、
前記特定のレイヤの前記追加の出力と、前記後続のレイヤの前のストライプ-ブロック-行からの後続のレイヤに対する前記入力の前記部分との組合せに基づいて、前記ニューラルネットワークの前記後続のレイヤに対する追加の入力を生成することと、
前記ニューラルネットワークの前記後続のレイヤによって、前記後続のレイヤに対する前記追加の入力に基づいて、第2の追加の出力を生成することと
を行うように構成される、請求項8に記載の装置。
【請求項10】
前記1つまたは複数のプロセッサが、
前記第2の追加の出力を第4のメモリ内に記憶することであって、前記第2のメモリおよび前記第3のメモリが、ラインストアメモリ内にラインストアを備え、前記第1のメモリおよび前記第4のメモリが、スクラッチメモリ内にバッファを備える、記憶すること
を行うように構成される、請求項9に記載の装置。
【請求項11】
前記1つまたは複数のプロセッサが、
データの各後続の行内の1つまたは複数のブロックに対して前記ニューラルネットワークの前のレイヤによって生成された出力を、前記ニューラルネットワークの特定のレイヤに関連付けられた第1のメモリ内に記憶することと、
データの各後続の行内の前記1つまたは複数のブロックからのデータの1つまたは複数のラインを第2のメモリ内に記憶することであって、データの前記1つまたは複数のラインが、前記ニューラルネットワークの前記特定のレイヤの1つまたは複数のデータ入力の1つまたは複数の部分を含む、記憶することと
を行うように構成される、請求項1に記載の装置。
【請求項12】
前記1つまたは複数のプロセッサが、
前記前のレイヤによって生成された前記出力と、前のストライプ-ブロック-行に対する前記特定のレイヤの前記1つまたは複数のデータ入力の前記1つまたは複数の部分を含むデータの前記1つまたは複数のラインとの組合せに基づいて、前記ニューラルネットワークの前記特定のレイヤに対する入力を生成することと、
前記ニューラルネットワークの前記特定のレイヤによって、前記前のレイヤからの前記出力と、前記前のストライプ-ブロック-行に対する前記特定のレイヤからの前記入力のサブセットとに基づいて、追加の出力を生成することと
を行うように構成される、請求項11に記載の装置。
【請求項13】
前記1つまたは複数のプロセッサが、
前記特定のレイヤに対する前記入力の部分を決定することと、
前記入力の前記部分を、前記ニューラルネットワークの後続のレイヤに関連付けられた第3のメモリ内に記憶することと、
前記追加の出力を第4のメモリ内に記憶することであって、前記第2のメモリおよび前記第4のメモリが、メモリバッファを備える、記憶することと
を行うように構成される、請求項12に記載の装置。
【請求項14】
データの前記行を処理するために、前記1つまたは複数のプロセッサが、
前記ニューラルネットワークの各後続のレイヤによって、前記ニューラルネットワークの先行するレイヤの出力を処理することであって、前記出力がデータの前記行に対応する、処理すること
を行うように構成される、請求項1に記載の装置。
【請求項15】
データの前記後続の行を処理するために、前記1つまたは複数のプロセッサが、
前記ニューラルネットワークの各後続のレイヤによって、前記ニューラルネットワークの先行するレイヤの出力を処理することであって、前記出力が前記第1のストライプ内のデータの後続の行に対応する、処理すること
を行うように構成される、請求項1に記載の装置。
【請求項16】
前記装置が、カメラデバイスを備える、請求項1に記載の装置。
【請求項17】
前記装置が、モバイルデバイスを備える、請求項1に記載の装置。
【請求項18】
方法であって、
入力データを論理的にセグメント化するストライプを備えた前記入力データを取得するステップであって、前記入力データの各ストライプが、データの少なくとも1つの行を含む、ステップと、
ニューラルネットワークの各レイヤによって、前記入力データの第1のストライプ内のデータの行を処理するステップであって、データの前記行は、前記ニューラルネットワークの各先行するレイヤが、前記ニューラルネットワークの各後続のレイヤの前に、データの特定の行を処理するというレイヤ単位のシーケンスに従って、水平方向に連続的に処理される、ステップと、
前記第1のストライプ内のデータの前記行を処理した後、前記ニューラルネットワークの各レイヤによって、前記第1のストライプ内のデータの後続の行を行単位ベースで処理するステップであって、データの各後続の行が、前記水平方向に、前記レイヤ単位のシーケンスに従って、連続的に処理される、ステップと、
前記ニューラルネットワークによって、データの前記行およびデータの前記後続の行の前記処理に基づいて、第1の出力ストライプを生成するステップと、
前記第1のストライプを処理した後、前記ニューラルネットワークの各レイヤによって、前記入力データの第2のストライプ内のデータの行を行単位ベースで処理するステップであって、前記第2のストライプ内のデータの各行が、前記水平方向に、前記レイヤ単位のシーケンスに従って、処理される、ステップと、
前記第2のストライプの前記処理に基づいて、第2の出力ストライプを生成するステップと
を含む、方法。
【請求項19】
前記第1のストライプ内のデータの前記行を水平方向に連続的に処理するステップが、
前記ニューラルネットワークの各レイヤによって、前記行内のデータの複数のブロックを連続的に処理するステップであって、前記ニューラルネットワークの各レイヤが、後続のブロックを前記水平方向に沿って処理する前に、データの各先行するブロックを深さ方向に沿って処理する、ステップ
を含む、請求項18に記載の方法。
【請求項20】
データの前記後続の行を処理するステップが、
前記ニューラルネットワークの各レイヤによって、各後続の行内のデータのそれぞれの複数のブロックを連続的に処理するステップであって、前記ニューラルネットワークの各レイヤが、後続の行内のデータの後続のブロックを処理する前に、前記後続の行内のデータの先行するブロックを前記深さ方向に沿って処理する、ステップ
を含む、請求項19に記載の方法。
【請求項21】
前記ニューラルネットワークが、ピクセル間ニューラルネットワークを含み、
前記入力データが、画像に関連付けられたピクセルを含む、請求項18に記載の方法。
【請求項22】
前記入力データを取得するステップが、
前記入力データを前記ストライプに論理的にセグメント化するステップであって、各ストライプが、前記入力データのそれぞれの部分を含む、ステップ
を含む、請求項18に記載の方法。
【請求項23】
前記第1のストライプ内のデータの前記行内の1つまたは複数のブロックに対して前記ニューラルネットワークの前のレイヤによって生成された出力を、第1のメモリ内に記憶するステップと、
データの前記行内の前記1つまたは複数のブロックからのデータの1つまたは複数のラインを、前記ニューラルネットワークの特定のレイヤに関連付けられた第2のメモリ内に記憶するステップであって、データの前記1つまたは複数のラインが、前のストライプ-ブロック-行に対する前記ニューラルネットワークの前記特定のレイヤのデータ入力の部分を含む、ステップと
をさらに含む、請求項18に記載の方法。
【請求項24】
前記前のレイヤによって生成された前記出力と、前記前のストライプ-ブロック-行に対する前記特定のレイヤの前記データ入力の前記部分を含むデータの前記1つまたは複数のラインとの組合せに基づいて、前記ニューラルネットワークの前記特定のレイヤに対する入力を生成するステップと、
前記ニューラルネットワークの前記特定のレイヤによって、前記前のレイヤに対する前記出力に基づいて、追加の出力を生成するステップと、
前記特定のレイヤに対する前記入力の部分を決定するステップと、
前記ニューラルネットワークの前記特定のレイヤに対する前記入力の部分を、前記ニューラルネットワークの前記特定のレイヤに関連付けられた第3のメモリ内に記憶するステップと
をさらに含む、請求項23に記載の方法。
【請求項25】
前記特定のレイヤの前記追加の出力と、後続のレイヤの前のストライプ-ブロック-行からの前記後続のレイヤに対する前記入力の前記部分との組合せに基づいて、前記ニューラルネットワークの前記後続のレイヤに対する追加の入力を生成するステップと、
前記ニューラルネットワークの前記後続のレイヤによって、前記後続のレイヤに対する前記追加の入力に基づいて、第2の追加の出力を生成するステップと、
前記第2の追加の出力を第4のメモリ内に記憶するステップであって、前記第2のメモリおよび前記第3のメモリが、ラインストアメモリ内にラインストアを備え、前記第1のメモリおよび前記第4のメモリが、スクラッチメモリ内にバッファを備える、ステップと
をさらに含む、請求項24に記載の方法。
【請求項26】
データの各後続の行内の1つまたは複数のブロックに対して前記ニューラルネットワークの前のレイヤによって生成された出力を、前記ニューラルネットワークの特定のレイヤに関連付けられた第1のメモリ内に記憶するステップと、
データの各後続の行内の前記1つまたは複数のブロックからのデータの1つまたは複数のラインを第2のメモリ内に記憶するステップであって、データの前記1つまたは複数のラインが、前記ニューラルネットワークの前記特定のレイヤの1つまたは複数のデータ入力の1つまたは複数の部分を含む、ステップと
をさらに含む、請求項18に記載の方法。
【請求項27】
前記前のレイヤによって生成された前記出力と、前のストライプ-ブロック-行に対する前記特定のレイヤの前記1つまたは複数のデータ入力の前記1つまたは複数の部分を含むデータの前記1つまたは複数のラインとの組合せに基づいて、前記ニューラルネットワークの前記特定のレイヤに対する入力を生成するステップと、
前記ニューラルネットワークの前記特定のレイヤによって、前記前のレイヤからの前記出力と、前記前のストライプ-ブロック-行に対する前記特定のレイヤからの前記入力のサブセットとに基づいて、追加の出力を生成するステップと
をさらに含む、請求項26に記載の方法。
【請求項28】
前記特定のレイヤに対する前記入力の部分を決定するステップと、
前記入力の前記部分を、前記ニューラルネットワークの後続のレイヤに関連付けられた第3のメモリ内に記憶するステップと、
前記追加の出力を第4のメモリ内に記憶するステップであって、前記第2のメモリおよび前記第4のメモリが、メモリバッファを備える、ステップと
をさらに含む、請求項27に記載の方法。
【請求項29】
データの前記行を処理するステップが、前記ニューラルネットワークの各後続のレイヤによって、前記ニューラルネットワークの先行するレイヤの出力を処理するステップであって、前記出力がデータの前記行に対応する、ステップを含み、
データの前記後続の行を処理するステップが、前記ニューラルネットワークの各後続のレイヤによって、前記ニューラルネットワークの先行するレイヤの出力を処理するステップであって、前記出力が前記第1のストライプ内のデータの後続の行に対応する、ステップを含む、請求項18に記載の方法。
【請求項30】
命令を記憶した非一時的コンピュータ可読記録媒体であって、前記命令が、1つまたは複数のプロセッサによって実行されると、前記1つまたは複数のプロセッサに、
入力データを論理的にセグメント化するストライプを備えた前記入力データを取得することであって、前記入力データの各ストライプが、データの少なくとも1つの行を含む、取得することと、
ニューラルネットワークの各レイヤによって、前記入力データの第1のストライプ内のデータの行を処理することであって、データの前記行は、前記ニューラルネットワークの各先行するレイヤが、前記ニューラルネットワークの各後続のレイヤの前に、データの特定の行を処理するというレイヤ単位のシーケンスに従って、水平方向に連続的に処理される、処理することと、
前記第1のストライプ内のデータの前記行を処理した後、前記ニューラルネットワークの各レイヤによって、前記第1のストライプ内のデータの後続の行を行単位ベースで処理することであって、データの各後続の行が、前記水平方向に、前記レイヤ単位のシーケンスに従って、連続的に処理される、処理することと、
前記ニューラルネットワークによって、データの前記行およびデータの前記後続の行の前記処理に基づいて、第1の出力ストライプを生成することと、
前記第1のストライプを処理した後、前記ニューラルネットワークの各レイヤによって、前記入力データの第2のストライプ内のデータの行を行単位ベースで処理することであって、前記第2のストライプ内のデータの各行が、前記水平方向に、前記レイヤ単位のシーケンスに従って、処理される、処理することと、
前記第2のストライプの前記処理に基づいて、第2の出力ストライプを生成することと
を行わせる、非一時的コンピュータ可読記録媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は概して、ニューラルネットワークに関する。たとえば、本開示の態様は、ニューラルネットワークにおいてデータを処理するための技法およびシステムに関する。
【背景技術】
【0002】
様々なデバイスおよびシステムは、様々なタイプのデータを処理し、特定の出力および/または効果を生成するために処理エンジンおよびネットワークを実装し得る。たとえば、いくつかのデバイスは、画像および/またはビデオを処理し、(たとえば、デバイス上の表示のために、アプリケーションによる使用のために、など)消費のための出力を生成するために、ニューラルネットワークを実装し得る。ニューラルネットワークは、正確な結果を伴う様々な複雑なタスクを効果的に実行し得る。ニューラルネットワークの出力および機能はまた、たとえば、中でも、コンピュータグラフィックス、エクステンデッドリアリティ(たとえば、拡張現実、仮想現実、など)、画像認識、データ処理(たとえば、画像処理、ビデオ処理、など)、データ後処理、視覚レンダリング、テレビジョンなど、様々なアプリケーションにおいて使用され得る。
【0003】
ニューラルネットワークは、一定のタスクを実行し、特定の出力を生成するために、ビデオ、画像、および/またはオーディオデータなど、大量のデータを処理することが多い。ニューラルネットワークによって処理されるデータの量およびニューラルネットワークの処理需要は、メモリ、電力リソース、および計算リソースなど、デバイスリソースにかなりの負担を課すことがある。さらに、いくつかのニューラルネットワークアーキテクチャは、他のニューラルネットワークアーキテクチャよりもリソース集中型であり得る、かつ/またはそれらの動作のための追加のリソースを必要とすることがあるかまたは利用することがある。これは、ニューラルネットワークのリソースおよび/または処理コストをさらに増大させ、ニューラルネットワークの効率性を低減し、かつ/または場合によっては、動作上の負担およびリソース負担ならびにニューラルネットワークの要件を増大させる。
【発明の概要】
【課題を解決するための手段】
【0004】
いくつかの例では、ニューラルネットワーク効率を増大させ、ニューラルネットワークのリソースおよび処理負担およびコストを低減するための技法およびシステムについて説明する。少なくとも1つの例示的な例によれば、ピクセル間ニューラルネットワークにおいてデータを処理する方法が提供される。いくつかの例では、この方法は、入力データを論理的にセグメント化するストライプを備えた入力データを取得するステップであって、入力データの各ストライプが、データの少なくとも1つの行を含む、取得するステップと、ニューラルネットワークの各レイヤによって、入力データの第1のストライプ内のデータの行を処理するステップであって、データの行は、ニューラルネットワークの各先行するレイヤがニューラルネットワークの各後続のレイヤの前にデータの特定の行を処理する、レイヤ単位のシーケンスに従って、水平方向に連続的に処理される、処理するステップと、第1のストライプ内のデータの行を処理した後、ニューラルネットワークの各レイヤによって、第1のストライプ内のデータの後続の行を行単位ベースで処理するステップであって、データの各後続の行が、水平方向に、レイヤ単位のシーケンスに従って、連続的に処理される、処理するステップと、ニューラルネットワークによって、データの行およびデータの後続の行の処理に基づいて、第1の出力ストライプを生成するステップと、第1のストライプを処理した後、ニューラルネットワークの各レイヤによって、入力データの第2のストライプ内のデータの行を行単位ベースで処理するステップであって、第2のストライプ内のデータの各行が、水平方向に、レイヤ単位のシーケンスに従って、処理される、処理するステップと、第2のストライプの処理に基づいて、第2の出力ストライプを生成するステップとを含み得る。
【0005】
少なくとも1つの例示的な例によれば、ピクセル間ニューラルネットワークにおいてデータを処理するための非一時的コンピュータ可読媒体が提供される。いくつかの態様では、非一時的コンピュータ可読媒体は、命令を含み得、命令は、1つまたは複数のプロセッサによって実行されると、1つまたは複数のプロセッサに、入力データを論理的にセグメント化するストライプを備えた入力データを取得することであって、入力データの各ストライプが、データの少なくとも1つの行を含む、取得することと、ニューラルネットワークの各レイヤによって、入力データの第1のストライプ内のデータの行を処理することであって、データの行は、ニューラルネットワークの各先行するレイヤがニューラルネットワークの各後続のレイヤの前にデータの特定の行を処理する、レイヤ単位のシーケンスに従って、水平方向に連続的に処理される、処理することと、第1のストライプ内のデータの行を処理した後、ニューラルネットワークの各レイヤによって、第1のストライプ内のデータの後続の行を行単位ベースで処理することであって、データの各後続の行が、水平方向に、レイヤ単位のシーケンスに従って、連続的に処理される、処理することと、ニューラルネットワークによって、データの行およびデータの後続の行の処理に基づいて、第1の出力ストライプを生成することと、第1のストライプを処理した後、ニューラルネットワークの各レイヤによって、入力データの第2のストライプ内のデータの行を行単位ベースで処理することであって、第2のストライプ内のデータの各行が、水平方向に、レイヤ単位のシーケンスに従って、処理される、処理することと、第2のストライプの処理に基づいて、第2の出力ストライプを生成することとを行わせる。
【0006】
少なくとも1つの例示的な例によれば、ピクセル間ニューラルネットワークにおいてデータを処理するための装置が提供される。いくつかの態様では、装置は、コンピュータ可読命令を記憶したメモリと、1つまたは複数のプロセッサとを含んでよく、1つまたは複数のプロセッサは、入力データを論理的にセグメント化するストライプを備えた入力データを取得することであって、入力データの各ストライプが、データの少なくとも1つの行を含む、取得することと、ニューラルネットワークの各レイヤによって、入力データの第1のストライプ内のデータの行を処理することであって、データの行は、ニューラルネットワークの各先行するレイヤがニューラルネットワークの各後続のレイヤの前にデータの特定の行を処理する、レイヤ単位のシーケンスに従って、水平方向に連続的に処理される、処理することと、第1のストライプ内のデータの行を処理した後、ニューラルネットワークの各レイヤによって、第1のストライプ内のデータの後続の行を行単位ベースで処理することであって、データの各後続の行が、水平方向に、レイヤ単位のシーケンスに従って、連続的に処理される、処理することと、ニューラルネットワークによって、データの行およびデータの後続の行の処理に基づいて、第1の出力ストライプを生成することと、第1のストライプを処理した後、ニューラルネットワークの各レイヤによって、入力データの第2のストライプ内のデータの行を行単位ベースで処理することであって、第2のストライプ内のデータの各行が、水平方向に、レイヤ単位のシーケンスに従って、処理される、処理することと、第2のストライプの処理に基づいて、第2の出力ストライプを生成することとを行うように構成される。
【0007】
別の例示的な例によれば、ピクセル間ニューラルネットワークにおいてデータを処理するための装置は、入力データを論理的にセグメント化するストライプを備えた入力データを取得するための手段であって、入力データの各ストライプが、データの少なくとも1つの行を含む、取得するための手段と、ニューラルネットワークの各レイヤによって、入力データの第1のストライプ内のデータの行を処理するための手段であって、データの行は、ニューラルネットワークの各先行するレイヤがニューラルネットワークの各後続のレイヤの前にデータの特定の行を処理する、レイヤ単位のシーケンスに従って、水平方向に連続的に処理される、処理するための手段と、第1のストライプ内のデータの行を処理した後、ニューラルネットワークの各レイヤによって、第1のストライプ内のデータの後続の行を行単位ベースで処理するための手段であって、データの各後続の行が、水平方向に、レイヤ単位のシーケンスに従って、連続的に処理される、処理するための手段と、ニューラルネットワークによって、データの行およびデータの後続の行の処理に基づいて、第1の出力ストライプを生成するステップと、第1のストライプを処理した後、ニューラルネットワークの各レイヤによって、入力データの第2のストライプ内のデータの行を行単位ベースで処理するための手段であって、第2のストライプ内のデータの各行が、水平方向に、レイヤ単位のシーケンスに従って、処理される、処理するための手段と、第2のストライプの処理に基づいて、第2の出力ストライプを生成するための手段とを含み得る。
【0008】
いくつかの態様では、上記で説明した方法、非一時的コンピュータ可読媒体、および装置は、第1のストライプ内のデータの行内の1つまたは複数のブロックに対してニューラルネットワークの前のレイヤによって生成された出力を第1のメモリ内に記憶し、データの行内の1つまたは複数のブロックからのデータの1つまたは複数のラインをニューラルネットワークの特定のレイヤに関連付けられた第2のメモリ内に記憶し得る。いくつかの例では、データの1つまたは複数のラインは、前のストライプ-ブロック-行に対するニューラルネットワークの特定のレイヤのデータ入力の部分を含み得る。
【0009】
いくつかの態様では、上記で説明した方法、非一時的コンピュータ可読媒体、および装置は、前のレイヤによって生成された出力と前のストライプ-ブロック-行に対する特定のレイヤのデータ入力の部分を含むデータの1つまたは複数のラインの組合せに基づいて、ニューラルネットワークの特定のレイヤに対する入力を生成し、ニューラルネットワークの特定のレイヤによって、前のレイヤに対する出力に基づいて、追加の出力を生成し得る。
【0010】
いくつかの態様では、上記で説明した方法、非一時的コンピュータ可読媒体、および装置は、特定のレイヤに対する入力の部分を決定し、入力の部分をニューラルネットワークの特定のレイヤに関連付けられた第3のメモリ内に記憶し得る。
【0011】
いくつかの態様では、上記で説明した方法、非一時的コンピュータ可読媒体、および装置は、特定のレイヤの追加の出力と後続のレイヤの前のストライプ-ブロック-行からの後続のレイヤに対する入力の部分の組合せに基づいて、ニューラルネットワークの後続のレイヤに対する追加の入力を生成し、ニューラルネットワークの後続のレイヤによって、後続のレイヤに対する追加の入力に基づいて、第2の追加の出力を生成し得る。
【0012】
いくつかの態様では、上述した方法、非一時的コンピュータ可読媒体、および装置は、第2の追加の出力を第4のメモリ内に記憶し得る。いくつかの例では、第2のメモリおよび第3のメモリは、ラインストアメモリ内にラインストアを含んでよく、第1のメモリおよび第4のメモリは、スクラッチメモリ内にバッファを含んでよい。
【0013】
いくつかの例では、第1のストライプ内のデータの行を水平方向に連続的に処理することは、ニューラルネットワークの各レイヤによって、行内のデータの複数のブロックを連続的に処理することを含み得る。場合によっては、ニューラルネットワークの各レイヤは、後続のブロックを水平方向に沿って処理する前に、データの各先行するブロックを深さ方向に沿って処理する。
【0014】
いくつかの例では、後続の行を処理することは、ニューラルネットワークの各レイヤによって、各後続の行内のデータのそれぞれの複数のブロックを連続的に処理することを含み得る。いくつかの例では、ニューラルネットワークの各レイヤは、後続の行内のデータの後続のブロックを処理する前に、後続の行内のデータの先行するブロックを深さ方向に沿って処理する。
【0015】
いくつかの例では、ニューラルネットワークはピクセル間ニューラルネットワークを含んでよく、入力データは画像に関連付けられたピクセルを含んでよい。
【0016】
いくつかの例では、入力データを取得することは、入力データをストライプに論理的にセグメント化することであって、各ストライプが、入力データのそれぞれの部分を含む、セグメント化することを含み得る。
【0017】
いくつかの態様では、上記で説明した方法、非一時的コンピュータ可読媒体、および装置は、データの各後続の行内の1つまたは複数のブロックに対してニューラルネットワークの前のレイヤによって生成された出力をニューラルネットワークの特定のレイヤに関連付けられた第1のメモリ内に記憶し、データの各後続の行内の1つまたは複数のブロックからのデータの1つまたは複数のラインを第2のメモリ内に記憶し得る。いくつかの例では、データの1つまたは複数のラインは、ニューラルネットワークの特定のレイヤの1つまたは複数のデータ入力の1つまたは複数の部分を含み得る。
【0018】
いくつかの態様では、上記で説明した方法、非一時的コンピュータ可読媒体、および装置は、前のレイヤによって生成された出力と前のストライプ-ブロック-行に対する特定のレイヤの1つまたは複数のデータ入力の1つまたは複数の部分を含むデータの1つまたは複数のラインの組合せに基づいて、ニューラルネットワークの特定のレイヤに対する入力を生成し、ニューラルネットワークの特定のレイヤによって、前のレイヤからの出力と前のストライプ-ブロック-行に対する特定のレイヤからの入力のサブセットとに基づいて、追加の出力を生成し得る。
【0019】
いくつかの態様では、上記で説明した方法、非一時的コンピュータ可読媒体、および装置は、特定のレイヤに対する入力の部分を決定し、入力の部分をニューラルネットワークの後続のレイヤに関連付けられた第3のメモリ内に記憶し、追加の出力を第4のメモリ内に記憶し得る。場合によっては、第2のメモリおよび第4のメモリは、メモリバッファを含み得る。
【0020】
いくつかの例では、データの行を処理することは、ニューラルネットワークの各後続のレイヤによって、ニューラルネットワークの先行するレイヤの出力を処理することであって、出力がデータの行に対応する、処理することを含み得る。
【0021】
いくつかの例では、データの後続の行を処理することは、ニューラルネットワークの各後続のレイヤによって、ニューラルネットワークの先行するレイヤの出力を処理することであって、出力が第1のストライプのデータの後続の行に対応する、処理することを含み得る。
【0022】
いくつかの態様では、装置は、カメラ(たとえば、IPカメラ)、モバイルデバイス(たとえば、モバイル電話もしくはいわゆる「スマートフォン、」または他のモバイルデバイス)、スマートウェアラブルデバイス、エクステンデッドリアリティデバイス(たとえば、仮想現実(VR)デバイス、拡張現実(AR)デバイス、または混合現実(MR)デバイス)、パーソナルコンピュータ、ラップトップコンピュータ、サーバコンピュータ、3Dスキャナ、マルチカメラシステム、または他のデバイスであってよく、またはそれらの部分であってよい。いくつかの態様では、装置は、1つまたは複数の画像をキャプチャするための1つのカメラまたは複数のカメラを含む。いくつかの態様では、装置は、1つまたは複数の画像、通知、および/または他の表示可能なデータを表示するためのディスプレイをさらに含む。いくつかの態様では、上記で説明した装置は、1つまたは複数のセンサーを含んでよい。
【0023】
本概要は、特許請求される主題の主要なまたは必須の特徴を特定することは意図されず、特許請求される主題の範囲を決定するために単独で使用されることも意図されない。本主題は、この特許の明細書全体、いずれかまたはすべての図面、および各請求項の適切な部分を参照することによって理解されるはずである。
【0024】
上記のことは、他の特徴および実施形態とともに、以下の明細書、特許請求の範囲、および添付の図面を参照するとより明らかになるだろう。
【0025】
本出願の例示的な実施形態について、以下の図を参照しながら以下で詳細に説明する。
【図面の簡単な説明】
【0026】
図1】本開示のいくつかの例による、例示的な画像処理システムを示す簡素化ブロック図である。
図2】本開示のいくつかの例による、ストライプおよびラスタベースの処理方式を実装するピクセル間ニューラルネットワークに対する例示的な入力を示す図である。
図3】本開示のいくつかの例による、ニューラルネットワークのための例示的なデータ処理方式を示す図である。
図4】本開示のいくつかの例による、レイヤ入力を生成するためのストライプデータを記憶するための例示的なメモリアーキテクチャを示す図である。
図5A】本開示のいくつかの例による、ニューラルネットワーク入力および出力を生成するための例示的なデータ処理アーキテクチャを示す図である。
図5B】本開示のいくつかの例による、ニューラルネットワーク入力および出力を生成するための例示的なデータ処理アーキテクチャを示す図である。
図6】本開示のいくつかの例による、垂直線オフセットでパディングされ、レイヤ出力を生成するために使用される、レイヤ入力の例を示す図である。
図7】本開示の様々な態様による、ストライプを処理するときの冗長計算を低減するための例示的な漏斗式処理方式を示す図である。
図8】本開示のいくつかの態様による、ニューラルネットワークにおいてデータを処理するための例示的なプロセスを示すフローチャートである。
図9】本明細書で説明するいくつかの態様を実装するための例示的なシステムアーキテクチャを示す図である。
【発明を実施するための形態】
【0027】
本開示のいくつかの態様および実施形態が、以下で提供される。当業者に明らかになるように、これらの態様および実施形態のうちのいくつかが独立して適用されてよく、それらのうちのいくつかは組み合わせて適用されてもよい。以下の説明では、説明のために、本出願の実施形態の完全な理解をもたらすために具体的な詳細が記載される。しかしながら、様々な実施形態がこれらの具体的な詳細なしに実践され得ることが明らかとなろう。図および説明は限定的であることを意図しない。
【0028】
以下の説明は、例示的な実施形態を提供するにすぎず、本開示の範囲、適用可能性、または構成を限定することを意図しない。むしろ、例示的な実施形態の以下の説明は、例示的な実施形態を実装することを可能にする説明を当業者に提供する。添付の特許請求の範囲に記載されるような本出願の趣旨および範囲から逸脱することなく、要素の機能および構成において様々な変更が加えられてよいことを理解されたい。
【0029】
前記のように、ニューラルネットワークは、正確な結果を伴う様々な複雑なタスクを効果的に実行し得る。多くの場合、ニューラルネットワークは、ビデオ、画像、および/またはオーディオデータなど、大量のデータを処理して、いくつかのタスクを実行し、特定の出力を生成し得る。ニューラルネットワークによって処理されるデータの量およびニューラルネットワークの処理需要は、メモリ、電力リソース、および計算リソースなど、デバイスリソースにかなりの負担を課すことがある。いくつかのニューラルネットワークアーキテクチャは、他のニューラルネットワークアーキテクチャよりもリソース集中型であり得、かつ/またはそれらの動作のための追加のリソースを必要とすることがあるかまたは利用することがある。これは、ニューラルネットワークのリソースおよび/または処理コストをさらに増大させ、ニューラルネットワークの効率性を低減し、かつ/または場合によっては、動作上の負担およびリソース負担ならびにニューラルネットワークの要件を増大させる。
【0030】
たとえば、ピクセル間ニューラルネットワーク(および、他のタイプのデータを同様に処理する他のネットワーク)は、概して、大きいメモリバッファを使用して、ピクセル間ネットワークによって処理されるデータを一時的に記憶する。しかしながら、メモリバッファ内に記憶されるデータ量および/またはメモリバッファ要件は、入力データのサイズが増大するにつれて、かなり、また持続不可能にすら、増大し得る。これは、ハードウェアコストおよびハードウェア要件の増大をもたらし得る。デバイスにおけるリソースは、ピクセル間ニューラルネットワークが処理し得るデータのタイプ、量、および/またはサイズを制限し得る。多くの場合、より大きい、より高価なメモリバッファすら、いくつかのピクセル間ニューラルネットワーク実装をサポートすること、および/またはピクセル間ニューラルネットワークが一定のタイプのデータを処理することを可能にすることができないことがある。
【0031】
場合によっては、ピクセル間ニューラルネットワークによって使用されるメモリバッファは、オーバーサブスクライブされることがある。これは、電力リソースおよび計算リソースなど、他のリソースに対する需要の増大をもたらし得る。たとえば、ピクセル間ニューラルネットワークによって使用されるメモリバッファのオーバーサブスクリプションは、ピクセル間ニューラルネットワークによって使用される帯域幅、プロセッサクロックサイクル、および電力をスパイクさせることがある。メモリバッファがオーバーサブスクライブされると、かつ/またはピクセル間ニューラルネットワークが追加のデータをメモリバッファ内に記憶することができないと、デバイスにおける性能メトリックはかなり増大し得る。場合によっては、そのような問題は、デバイスのハードウェアリソースの量および/または能力を増大させることによって低減または軽減され得る。たとえば、デバイスにおけるメモリのリソースおよび能力は、ピクセル間ニューラルネットワークによって使用されるより多い量のデータを処理するために増大され得る。しかしながら、一定のタイプのデータを処理するためにおよび/または一定のタスクを実行するために必要とされるメモリリソースの量は、高価であり得、法外なコストがかかることすらある。
【0032】
別の例として、ピクセル間ニューラルネットワークの動作のうちのいくつかまたはすべてを処理するためにカスタムプロセッサがデバイスにおいて追加され得る。カスタムプロセッサは、デバイスにおける処理能力を増大させ、ピクセル間ニューラルネットワークの追加の処理需要をサポートし得るが、ピクセル間ニューラルネットワークは、依然として、データを処理するために大量のメモリを必要とし得る。しかしながら、そのような大量のメモリをサポートするために必要とされるメモリリソースは、法外なコストがかかることがあり、かつ/または場合によっては、ピクセル間ニューラルネットワークのメモリ要件に対処するためのカスタムプロセッサの実装を妨害することがある。ピクセル間ニューラルネットワークに伴うメモリおよびリソースの問題は、より下位のデバイス実装において悪化し得る。
【0033】
たとえば、より下位のデバイスにおいて、ピクセル間ニューラルネットワークによって使用されるメモリリソースの量はより限定される。多くの場合、ピクセル間ニューラルネットワークによって使用されるメモリバッファのサイズは、低減される必要があり得る。概して、データをメモリバッファにかつ/またはメモリバッファから転送するためのメモリシステムまたはサブシステムも、同様に低減される必要があり得る。しかしながら、メモリバッファの低減は、前に説明したように、帯域幅要件にスパイクを引き起こすことがある。これは、メモリシステムまたはサブシステムの低減によりさらに悪化し得、これはデバイスにおいて利用可能な帯域幅の量をやはり低減し得る。より下位のデバイスは、したがって、メモリおよび帯域幅の低減によって不均等に影響を受ける。
【0034】
いくつかの態様では、ピクセル間ニューラルネットワークおよび大きい2次元(2D)入力(および/または3次元(3D)入力)を大きいまたはより大きい2D出力(および/または3D出力)に処理する任意の他のニューラルネットワークなど、ニューラルネットワークにおいてデータを効率的に処理し、リソース負担を低減するためのシステム、装置、プロセス(方法とも呼ばれる)、およびコンピュータ可読媒体(本明細書で「システムおよび技法」と総称される)が本明細書で説明される。本明細書で説明するシステムおよび技法は、ニューラルネットワークのリソースおよび処理負担ならびにコストを低減しながら、ニューラルネットワーク効率を増大し得る。いくつかの例では、システムおよび技法は、ニューラルネットワークが、ニューラルネットワークアレイ間でより高いデータ量を処理および/またはストリーミングし、ニューラルネットワークの動作中にメモリ内に記憶されたデータの量を低減することを可能にする、ストライプおよびラスタベースのデータ処理方式を実装するアーキテクチャを提供し得る。本明細書で説明するシステムおよび技法は、ニューラルネットワークによって処理される重複するかつ/または冗長なデータ量を低減し得る。
【0035】
データを処理するための、明細書で説明するシステムおよび技法の例が、図1図9に示され、以下で説明される。図1は、例示的なコンピューティングシステム100を示す図である。コンピューティングシステム100は、データを処理するためにニューラルネットワークを実装し得る。ニューラルネットワークは、本明細書で説明するように、処理効率を増大させ、かつ/またはリソース要件を低減するためのアーキテクチャおよびデータ処理方式を実装し得る。コンピューティングシステム100および/またはニューラルネットワークは、たとえば、エクステンデッドリアリティ、画像/ビデオ処理および/もしくは後処理、データ処理および/もしくは後処理、コンピュータグラフィックス、自動化、機械視覚、オブジェクトモデリングおよびオブジェクト登録、マルチメディアレンダリングおよび/もしくは構成、ならびに/または任意の他のデータ処理タスク、効果、および/もしくは計算のためのタスクおよび動作など、様々なタスクおよび動作を実行し得る。
【0036】
いくつかの例示的な例では、コンピューティングシステム100は、本明細書でさらに説明するように、1つまたは複数のピクセル間ニューラルネットワークを実装し、ストライプおよびラスタベースの処理方式およびアーキテクチャを実行する。いくつかの例では、ピクセル間ニューラルネットワークは、ピクセル入力を受信し、ピクセル出力を生成し得る。本開示の様々な例は、ピクセル間ニューラルネットワークに関して説明されるが、本明細書で説明するシステムおよび技法は、ニューラルネットワークの他のタイプおよび/またはアーキテクチャで、かつ/またはそれらに対して、実装され得る。たとえば、本明細書で説明するシステムおよび技法は、大きい2Dデータ入力を大きいまたはより大きい2Dデータ出力に、または任意の大きい3Dデータ入力を大きいまたはより大きい3Dデータ出力に処理する任意のニューラルネットワークのために実装され得る。本明細書のピクセル間ニューラルネットワーク例は、例示および説明のために提供される非限定的な例である。
【0037】
図1に示す例では、コンピューティングシステム100は、1つまたは複数のセンサー102、ストレージ104、メモリ106、コンピューティング構成要素110、処理エンジン130、およびレンダリングエンジン132を含む。コンピューティングシステム100は、単一のコンピューティングデバイスまたは複数のコンピューティングデバイスの一部であってよい。いくつかの例では、コンピューティングシステム100は、カメラシステム(たとえば、デジタルカメラ、IPカメラ、ビデオカメラ、セキュリティカメラなど)、電話システム(たとえば、スマートフォン、セルラー電話、会議システムなど)、デスクトップコンピュータ、XRデバイス(たとえば、ヘッドマウントディスプレイなど)、スマートウェアラブルデバイス(たとえば、スマートウォッチ、スマートグラスなど)、ラップトップもしくはノートブックコンピュータ、タブレットコンピュータ、セットトップボックス、テレビジョン、ディスプレイデバイス、デジタルメディアプレーヤ、ゲーム機、ビデオストリーミングデバイス、ドローン、車両内コンピュータ、システムオンチップ(SoC)、モノのインターネット(IoT)デバイス、または任意の他の好適な電子デバイスなど、電子デバイスの一部であってよい。
【0038】
いくつかの実装形態では、1つまたは複数のセンサー102、ストレージ104、メモリ106、コンピューティング構成要素110、処理エンジン130、およびレンダリングエンジン132は、同じコンピューティングデバイスの一部であってよい。たとえば、場合によっては、1つまたは複数のセンサー102、ストレージ104、メモリ106、コンピューティング構成要素110、処理エンジン130、およびレンダリングエンジン132は、スマートフォン、ラップトップ、タブレットコンピュータ、スマートウェアラブルデバイス、ゲームシステム、サーバ、SoC、および/または任意の他のコンピューティングデバイス内に一体化され得る。他の実装形態では、1つまたは複数のセンサー102、ストレージ104、メモリ106、コンピューティング構成要素110、処理エンジン130、および/またはレンダリングエンジン132のうちのいずれも、2つ以上の別個のコンピューティングデバイスの一部であってよい。
【0039】
1つまたは複数のセンサー102は、1つまたは複数のセンサー、レーダーセンサー、光検出および測距(LIDAR)センサー、赤外線(IR)センサー、ジャイロスコープ、加速度計、慣性測定ユニット(IMU)、オーディオセンサー、および/または任意の他のセンサーを含み得る。いくつかの例では、1つまたは複数のセンサー102は、1つまたは複数の画像センサーを含み得る。1つまたは複数の画像センサーは、画像をキャプチャすることができる画像センサーおよび/または画像キャプチャデバイスを含み得る。たとえば、1つまたは複数の画像センサーは、赤緑青(RGB)画像をキャプチャすることができる1つまたは複数のセンサーを含み得る。いくつかの例では、画像(またはフレーム)は、ピクセルごとに赤、緑、および青色成分を有する赤緑青(RGB)画像もしくはフレーム、ピクセルごとにルーマ成分ならびに2つのクロマ(色)成分(赤差および青差)を有するルーマ、赤差、青差(YCbCr)画像もしくはフレーム、または任意の他の好適なタイプのカラーもしくはモノクロピクチャを含み得る。
【0040】
場合によっては、1つまたは複数の画像センサーは、任意のタイプの画像センサー(または画像キャプチャデバイス)および/またはビデオセンサー(またはビデオキャプチャデバイス)であってよい。たとえば、1つまたは複数の画像センサーは、デジタルカメラセンサー、ビデオカメラセンサー、スマートフォンカメラセンサー、電子装置(たとえば、テレビジョン、コンピュータ、カメラなど)の一部として含まれる画像/ビデオキャプチャデバイスを含み得る。場合によっては、1つまたは複数の画像センサーは、デジタルカメラ、ビデオカメラ、IPカメラ、スマートフォン、スマートテレビジョン、ゲームシステム、スキャナ、マルチカメラシステム、または他のコンピューティングデバイスなど、カメラまたはコンピューティングデバイスの一部であってよい。たとえば、1つまたは複数の画像センサーは、スマートフォン、カメラなど、デュアルカメラシステムまたはデバイスの一部であってよい。1つまたは複数の画像センサーは、画像データおよび/またはビデオコンテンツ(たとえば、生画像および/またはビデオデータ)をキャプチャし得る。画像データおよび/またはビデオコンテンツは、本明細書で説明するような、コンピューティング構成要素110、処理エンジン130、および/またはレンダリングエンジン132によって処理され得る。
【0041】
ストレージ104は、たとえば、画像、オーディオ、ファイル、またはビデオデータなど、データを記憶するための任意のストレージデバイスであってよい。その上、ストレージ104は、コンピューティングシステム100の構成要素のいずれかからのデータも記憶し得る。たとえば、ストレージ104は、1つまたは複数のセンサー102、コンピューティング構成要素110(たとえば、パラメータ、入力、出力、生成された画像、計算結果、モデルなど)からのデータもしくは測定値、および/または処理エンジン130および/またはレンダリングエンジン132のうちのいずれかからのデータ(たとえば、出力画像、処理結果、モデルなど)を記憶し得る。いくつかの例では、ストレージ104は、コンピューティング構成要素110による処理のためのデータ(たとえば、画像データ)を記憶するためのバッファを含んでよい。メモリ106は、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、キャッシュ、メモリバッファなど、データを記憶するための任意のメモリデバイスを含んでよい。
【0042】
いくつかの実装形態では、コンピューティング構成要素110は、中央処理ユニット(CPU)112、グラフィックス処理ユニット(GPU)114、デジタル信号プロセッサ(DSP)116、画像信号プロセッサ(ISP)118、および/またはニューラル処理ユニット(NPU)120を含んでよい。いくつかの例では、コンピューティング構成要素110は、キャッシュおよび/またはメモリバッファなど、1つまたは複数のメモリを含んでよい。コンピューティング構成要素110は、データ処理、コンピュータビジョン、グラフィックスレンダリング、エクステンデッドリアリティ(たとえば、仮想現実、拡張現実など)、画像/ビデオ処理、センサー処理、認識(たとえば、テキスト認識、オブジェクト認識、特徴認識、顔認識、顔の表情認識、視線認識、年齢認識、性別認識、人種認識、追跡またはパターン認識、シーン変化認識など)、機械学習、フィルタリング、自動化、コンピュータグラフィックス、および本明細書で説明する様々な動作のうちのいずれかなど、様々な動作を実行し得る。いくつかの例では、コンピューティング構成要素110は、処理エンジン130およびレンダリングエンジン132を実装し得る。他の例では、コンピューティング構成要素110は、1つまたは複数の他の処理エンジンを実装することもできる。
【0043】
処理エンジン130およびレンダリングエンジン132のための動作は、コンピューティング構成要素110のうちの1つまたは複数によって実装され得る。1つの例示的な例では、処理エンジン130(および関連する動作)は、CPU112、DSP116、ISP118、および/またはNPU120によって実装されてよく、レンダリングエンジン132(および関連する動作)は、GPU114によって実装されてよい。場合によっては、コンピューティング構成要素110は、本明細書で説明する様々な動作のいずれをも実行するための、他の電子回路もしくはハードウェア、コンピュータソフトウェア、ファームウェア、またはそれらの任意の組合せを含んでよい。
【0044】
コンピューティング構成要素110は、処理エンジン130を実装して、画像/ビデオ処理、XRレンダリング、コンピュータビジョン、データ処理、コンピュータモデリング、ゲーム、コンピュータグラフィックスなど、様々な処理動作を実行し得る。処理エンジン130は、本明細書でさらに説明するように、ニューラルネットワークおよび処理アーキテクチャおよび/または方式を実装し得る。たとえば、処理エンジン130は、本明細書で説明するように、ピクセル間ニューラルネットワーク、およびストライプおよびラスタベースの処理方式を実装し得る。いくつかの例では、処理エンジン130は、本明細書で説明する、ストライプおよびラスタベースの処理パターンを使用して様々なタスクを実行するためにNPU120によって実装され得る。
【0045】
コンピューティングシステム100はいくつかの構成要素を含むものとして示されるが、コンピューティングシステム100は図1に示すものよりも多いまたは少ない構成要素を含むことができることを当業者は諒解されよう。たとえば、コンピューティングシステム100はまた、場合によっては、1つまたは複数の追加のメモリデバイス(たとえば、RAM、ROM、キャッシュなど)、1つまたは複数のネットワーキングインターフェース(たとえば、ワイヤードおよび/またはワイヤレス通信インターフェースなど)、1つまたは複数のディスプレイデバイス、および/または図1に示されていない他のハードウェアまたは処理デバイスを含んでもよい。コンピューティングシステム100によって実装することができるコンピューティングデバイスおよびハードウェア構成要素の例示的な例については、図9に関して以下でさらに説明する。
【0046】
前記のように、ピクセル間ニューラルネットワークアーキテクチャなど、いくつかのニューラルネットワークアーキテクチャは、データを処理するために大きいメモリバッファを使用または必要とする。メモリバッファサイズは、入力データのサイズが増大すると、持続不可能に増大し得る。大きいメモリバッファですら、いくつかのデータ処理事例には十分でないことがある。メモリバッファがオーバーサブスクライブされかつ/または満杯になると、他のリソース要件および/または利用率は実質的に増大し得る。たとえば、メモリバッファがオーバーサブスクライブされると、帯域幅、電力、クロックサイクルなども実質的に増大する。より多くのメモリバッファおよび/またはより高い能力を備えたメモリバッファを追加することは、高価であり得、メモリバッファオーバーサブスクリプションおよび/または他のリソース要件および/または利用率の増大を十分に防止および/または軽減しないことがある。大型メモリバッファのコストも、そのようなリソースニーズおよび/または制限に対処するためのカスタムプロセッサなどの他のハードウェアリソースの追加を妨げることがある。
【0047】
本明細書で説明するシステムおよび技法は、これらのおよび他の課題/限界に対処するためのアーキテクチャおよびデータ処理方式を提供する。アーキテクチャおよびデータ処理方式は、画像データ、ビデオデータ、オーディオデータ、ファイルなど、任意のタイプのデータを処理するために使用され得る。説明および例示のために、アーキテクチャおよびデータ処理方式は、画像データを処理することに関して説明される。
【0048】
いくつかの例では、本明細書で説明するシステムおよび技法は、ストライプおよびラスタベースの処理方式を提供し得る。ストライプおよびラスタベースの処理方式は、ニューラルネットワークの入力を、ニューラルネットワークが以下で説明するような特定のパターンに従って処理する垂直ストライプに分割し得る。ニューラルネットワークの各レイヤは、追加のデータを処理するために垂直方向に移動する前に、データを深さ方向および水平方向に沿ってストライプ状に処理し得る。追加のデータは、新しいデータを処理するために、この場合も、垂直方向に移動する前に、深さ方向および水平方向に沿って同様に処理され得る。
【0049】
図2は、ピクセル間ニューラルネットワークがストライプおよびラスタベースの処理方式を実装するための例示的な入力200を示す図である。入力200は、たとえば、画像、オーディオファイル、2Dデータ、3Dデータ、および/または任意の他のタイプのデータを含み得る。この例では、入力200は、ピクセル間従来型ニューラルネットワークなど、ピクセル間ニューラルネットワークによって処理されている画像を表す。入力200は、本明細書でさらに説明するように、ストライプ210Aおよびストライプ210Bを含む。
【0050】
図2では、入力200は、入力200内の異なる位置におけるストライプ210Aおよびストライプ210Bを示す、左の図230Aおよび右の図230Bに示される。左の図230Aは、第1の処理時間中の入力200の左部分におけるストライプ210Aを示し、右の図230Bは、第2の処理時間中の入力200の右部分におけるストライプ210Bを示す。入力200は、異なる時間における入力200内の異なるストライプ210Aおよび210Bを示すために、図230Aおよび230Bにおいて分割されて示されている。図2の例は2つのストライプを示すが、他の例では、入力200は図2に示すよりも多いまたは少ないストライプを含んでよい。いくつかの例では、入力200内のストライプの数は、異なってよく、またはニューラルネットワーク処理要件および/またはアーキテクチャに依存してもよい。
【0051】
ストライプ210Aおよび210Bは、各々、入力200の上部から入力200の下部に垂直に延びるいくつかのストライプブロックを含み得る。たとえば、図2は、ストライプ210Aの上部におけるストライプブロック212Aおよびストライプ210Aの下部におけるストライプブロック212B、ならびにストライプ210Bの上部におけるストライプブロック220Aおよびストライプ210Bの下部におけるストライプブロック220Bを示す。これらのストライプブロックは各々、ストライプ210Aおよび210Bの行(またはレイヤ)を表し得る。簡単のために図2には示されていないが、ストライプ210Aが上部から下部にストライプブロックの行(またはレイヤ)を含むように、ストライプ210Aは、ストライプブロック212Aからストライプブロック212Bに延びる追加のストライプブロックを含み得る。同様に、簡単のために図2には示されていないが、ストライプ210Bが上部から下部にストライプブロックの行(またはレイヤ)を含むように、ストライプ210Bは、ストライプブロック220Aからストライプブロック220Bに延びる追加のストライプブロックを含み得る。
【0052】
入力200ならびにストライプ210Aおよび210Bは、水平次元202(たとえば、x軸に沿った)、垂直次元204(たとえば、y軸に沿った)、および深さ次元206(たとえば、z軸に沿った)を含み得る。ニューラルネットワークの各レイヤは、垂直次元204に沿ってデータを処理する前に、深さ次元206および水平次元202に沿ってストライプ内のデータを処理し得る。
【0053】
ストライプ210Aは重複領域216を含んでよく、ストライプ210Bは重複領域222を含んでよい。重複領域216および222は、ニューラルネットワークによって処理される入力内にある量の重複を含み得る。示すように、重複領域216および222内の重複は、水平次元202である。垂直次元204内のいずれの重複も、ニューラルネットワークの必要に応じて使用するためにメモリ内に記憶され得る。場合によっては、重複は、一定量の余分な、かつ/または冗長な計算をもたらし得る。しかしながら、本明細書で説明するストライプ210Aおよび210Bの構成ならびにデータ処理方式は、他の方向の重複を回避し得る。したがって、入力200内の重複は、他のデータ処理方式およびアーキテクチャにおける重複量よりも少ないことがあり、余分な、かつ/または冗長な計算を少なくし得る。
【0054】
たとえば、本明細書で説明するストライプ210Aおよび210Bの構成ならびにデータ処理方式は、ストライプブロック(たとえば、ストライプブロック212A、ストライプブロック212B、ストライプブロック220A、ストライプブロック220B)の水平次元202に沿った少なくとも1つの側面、垂直次元204に沿った少なくとも1つの側面、および深さ次元206に沿った1つまたは両方の側面における重複を回避し得る。これは、ニューラルネットワークのメモリおよび処理要件ならびに/または負担をかなり低減し得る。その上、(ストライプブロックに対する)垂直次元204の1つの側面に沿って存在し得る任意の量の重複を処理し記憶する間に(ストライプブロックに対する)水平次元202の1つの側面に沿って少量の重複のみを含めることによって、ニューラルネットワークのメモリおよび処理要件ならびに/または負担がさらに低減され得る。
【0055】
図3は、ニューラルネットワーク310のための例示的なデータ処理方式300を示す図である。データ処理方式300は、ストライプ-ラスタデータ処理順序またはパターンを含み得る。ニューラルネットワーク310は、ストライプ210Aおよび210B内のデータを処理するためにデータ処理方式300を実装し得る。ニューラルネットワーク310は、入力データを処理し、出力を生成するための複数のレイヤ(たとえば、レイヤ312~318)を含んでよい。
【0056】
ニューラルネットワーク310は、大きいn次元入力を利用し、大きいまたはより大きいn次元出力を生成する任意のニューラルネットワークを含んでよい。たとえば、場合によっては、ニューラルネットワーク310は、ピクセル間ニューラルネットワークを含み得る。ピクセル間ニューラルネットワークは、画像からの入力ピクセルを処理し、画像に対する出力ピクセルを生成し得る。いくつかの例では、画像は大きいかつ/または高い解像度画像であってよい。画像は、たとえば、2D画像または3D画像であってよい。他の場合には、ニューラルネットワーク310は、2D入力から2D出力へのニューラルネットワークを含み得る。たとえば、ニューラルネットワーク310は、2D入力から2D出力を生成し得る。いくつかの例では、ニューラルネットワーク310は、2Dデータの各部分を処理および/または変換し、2Dデータの各部分に対して2Dデータ出力を生成し得る。2D入力および2D出力は、たとえば、画像、ビデオデータ、オーディオデータ、または任意の他の2Dデータを含み得る。
【0057】
また他の場合には、ニューラルネットワーク310は、3D入力から3D出力へのニューラルネットワークを含み得る。たとえば、ニューラルネットワーク310は、3D入力から3D出力を生成し得る。いくつかの例では、ニューラルネットワーク310は、3Dデータの各部分を処理および/または変換し、3Dデータの各部分に対して3Dデータ出力を生成し得る。3D入力および3D出力は、たとえば、画像、ビデオデータ、オーディオデータ、または任意の他の3Dデータを含み得る。
【0058】
図3において、ストライプ210Aおよびストライプ210Bは、データ処理方式300に従って、ストライプブロック302内のデータを処理するためのブロック行306A~Nを含む。ストライプブロック302は、タイル304内のデータを水平次元202でシフトされるストライプブロック302の深さ次元206に沿って処理するために、ストライプブロック302を水平次元202に沿ってシフトする前に、ストライプブロック302の深さ次元206に沿って最初に処理されるデータのタイル304(またはサブブロック)を含み得る。タイル304は、ストライプブロック302の深さ次元206に沿って処理され続けてよく、ストライプブロック302は、水平次元202に沿って(たとえば、対応するブロック行にわたって)処理され続けてよい。レイヤ312~318のすべてがブロック行にわたってデータを処理すると、処理方式300は、ストライプの次の行内のデータを同様に処理するために、垂直次元204で移動し得る。
【0059】
ニューラルネットワーク310の各レイヤ(たとえば、レイヤ312~318の各々)は、ニューラルネットワーク310内の次のレイヤが同じ処理順序/パターンに従ってストライプブロック302(および行)の中のデータを処理する前に、上記で説明したパターンに従ってストライプブロック302(および行)内のデータを処理し得る。たとえば、ニューラルネットワーク310内の各レイヤは、ニューラルネットワークの次のレイヤが同様のパターンでストライプブロック302内のデータを処理する前に、ストライプブロック302の深さ次元206、続いて行306Aの水平次元202に沿って、行306A内のストライプブロック302内のデータを処理し得る。
【0060】
例示のために、ニューラルネットワーク310のレイヤ312(たとえば、レイヤ0)は、ストライプブロック302の深さ次元206に沿って、ストライプ210Aの行306A内のストライプブロック302のタイル304を最初に処理し得る。レイヤ312が行306A内のストライプブロック302内のデータを処理すると、レイヤ312は、水平次元202に沿って移動し、行306A内の隣接するストライプブロック内のデータを処理し得る。レイヤ312が行306Aの水平次元202に沿って次の隣接するストライプブロックに再度移動する前に、レイヤ312は、隣接するストライプブロック内のタイルを深さ次元206に沿って処理し得る。レイヤ312が行306A内のデータの処理を終了するまで、レイヤ312はこのパターンでデータを処理し続けることができる。レイヤ312が行306A内のデータの処理を完了すると、ニューラルネットワーク310内の次のレイヤ、レイヤ314(たとえば、レイヤ1)が、同じパターンに従って行306A内のデータを処理し得る。たとえば、レイヤ314は、ストライプブロック内のデータを深さ次元に沿って連続的に処理することができ、行306A内のブロックを水平次元202に沿って連続的に処理することができる。レイヤ314が行306A内のデータの処理を完了すると、ニューラルネットワーク310の次のレイヤ、レイヤ316(たとえば、レイヤ2)が、同じパターンに従って、行306A内のデータを処理し得る。レイヤ314が行306A内のデータの処理を完了すると、ニューラルネットワーク310内の次のレイヤ、レイヤ318(たとえば、レイヤN)が、同じパターンに従って、行306A内のデータを処理し得る。
【0061】
このようにして、ニューラルネットワーク310内の各レイヤは、次の行、行306B内のデータを(たとえば、同じパターンに従って)同様に処理するために、ストライプ210Aの垂直次元204で移動する前に、上記で説明したパターンに従って、行306A内のデータを連続的に処理し得る。ニューラルネットワーク310内のすべてのレイヤが行306B内のデータの処理を完了すると、ニューラルネットワーク310は、ストライプ210Aの垂直次元204で移動することができ、ニューラルネットワーク310内の各レイヤは、ストライプ210Aの次の行内のデータを同様に処理し得る。ニューラルネットワーク310は、ストライプ210Aの最後の行(たとえば、行306N)内のデータが各レイヤによって処理されるまで、垂直次元204に沿って移動し続けることができる。
【0062】
ストライプ210Aが処理されると、ニューラルネットワーク310は、次のストライプ、ストライプ210Bを処理し得る。ニューラルネットワーク310がストライプ210B内のデータのすべての処理を完了するまで、ニューラルネットワーク310は、ストライプ210Aに関して上記で説明した順序/パターンに従って、ストライプ210Bを処理し得る。前に説明したように、入力データは、図2および図3に示すよりも多いまたは少ないストライプを含んでよい。したがって、入力データが追加のストライプを含む場合、ニューラルネットワーク310は、前に説明したように、次のストライプに進み、次のストライプ内のデータを処理し得る。ニューラルネットワーク310は、すべてのストライプが処理されるまで、いずれの追加のストライプも処理し続けることができる。
【0063】
各ストライプ(たとえば、ストライプ210Aおよび210B)は、任意の数の行を含んでよい。その上、ストライプブロック(たとえば、ストライプブロック302)およびタイル(たとえば、タイル304)のサイズは、任意の特定のサイズに限定されず、異なる実装形態において異なってよい。いくつかの例では、ストライプブロックおよび/またはタイルのサイズは、選好、ニューラルネットワークアーキテクチャ、データ経路アーキテクチャ、ニューラルネットワーク要件、入力のタイプおよび/もしくは属性、ストライプのサイズおよび/もしくは数、ならびに/または任意の他の要因に基づいてよい。たとえば、場合によっては、ストライプブロックおよび/またはタイルのサイズは、乗算累算(MAC)データ経路アーキテクチャに基づいてよい。
【0064】
いくつかの例では、データ処理方式300は、内部処理ループおよび外部処理ループを含み得る。内部処理ループは、前に説明したパターンに従って、ストライプブロック内のデータを処理し得る。いくつかの例では、内部処理ループは、ストライプブロック内の水平ブロック(またはサブタイル)を連続的にまたは並列に処理し、ストライプブロック内の垂直ブロック(またはサブタイル)を連続的にまたは並列に処理し、タイル出力深さを連続的にまたは並列に処理し、入力深さを連続的にまたは並列に処理することができる。1つの例示的な例では、水平ブロック、垂直ブロック、およびタイル出力深さは、「アンロールされ」(たとえば、並行して処理および/または出力され)てよく、入力深さは、「ウォークされ」(たとえば、連続的に処理および/または出力され)てよい。
【0065】
外部ループは、前に説明したように、入力データを特定の順序で処理し得る。たとえば、外部ループは、深さ方向、続いて水平方向、続いてニューラルネットワークレイヤ順序、続いて垂直方向、および続いてストライプ順序で、データを処理し得る。たとえば、ニューラルネットワークの第1のレイヤは、ストライプブロックの深さ次元に沿ってストライプブロック内のデータを最初に処理し得る。ニューラルネットワークの第1のレイヤは、次いで、水平方向に次のストライプブロックに移動し、次のストライプブロック内のデータを同様に処理し得る。行内のすべてブロックが処理されるまで、ニューラルネットワークの第1のレイヤは、水平方向に移動し、各ストライプブロック内のデータを水平方向に沿って処理し続けることができる。ニューラルネットワークの第2のレイヤは、次いで、行内のストライプブロックを処理するために同じパターンを実行し得る。すべてのレイヤが行内のストライプブロックを処理するまで、ニューラルネットワーク内の各後続のレイヤは、同じパターンを同様に実行し得る。すべてのレイヤが行内のストライプブロックを処理すると、ニューラルネットワークの第1のレイヤは、次の行内のストライプブロックを同様に処理するために、ストライプに沿って垂直方向に移動し得る。ニューラルネットワークの各レイヤは、次の行内のストライプブロックを連続的に処理することができ、すべてのレイヤがすべての行内のストライプブロックを処理するまで、ニューラルネットワークは、水平方向に移動し続けることができる。ニューラルネットワークは、次いで、任意の後続のストライプに進み、上記で説明した外部ループ順序に従って、後続のストライプを連続的に処理し得る。
【0066】
図4は、レイヤ入力を生成するためのストライプデータを記憶するための例示的なメモリアーキテクチャ400を示す図である。この例では、メモリアーキテクチャ400は、ラインストアメモリ402およびスクラッチメモリ420を含む。いくつかの例では、ラインストアメモリ402およびスクラッチメモリ420は、1つまたは複数のランダムアクセスメモリを含み得る。
【0067】
スクラッチメモリ420は、ニューラルネットワーク310のレイヤ(たとえば、レイヤ312~318)からの出力を記憶し得る。たとえば、スクラッチメモリ420内のバッファ422は、レイヤ0(たとえば、レイヤ312)からの出力を記憶することができ、スクラッチメモリ420内のバッファ424は、レイヤ1(たとえば、レイヤ314)からの出力を記憶することができる。ニューラルネットワークの追加のレイヤが出力を生成すると、それらの出力は、スクラッチメモリ420内に同様に記憶され得る。ニューラルネットワーク内のレイヤからの出力は、ニューラルネットワーク内の次のレイヤに対する入力として使用され得る。いくつかの例では、スクラッチメモリ420は、ニューラルネットワーク310の各レイヤの各出力に対するバッファを含み得る。場合によっては、スクラッチメモリ内のバッファ(たとえば、バッファ422および424)は、ピンポンバッファを含み得る。
【0068】
ラインストアメモリ402は、ニューラルネットワーク310内のレイヤからのデータの部分(たとえば、データのライン、データのブロック、データの窓、ストライプブロックのデータ行のサブセットなど)を記憶し得る。ラインストアメモリ402内に記憶されたデータは、ニューラルネットワーク310の2つ以上のレイヤの重複データ(たとえば、重複領域216および222)を含み得る。いくつかの例では、ラインストアメモリ402は、ラインストア404~410を含み得る。各ラインストアは、ニューラルネットワーク310のそれぞれのレイヤに対応し得、ラインストア内のデータは、そのラインストアに関連付けられたレイヤに対する入力の一部として使用され得る。この例では、ラインストア404は、ニューラルネットワーク310のレイヤ0(たとえば、レイヤ312)に対応し得、ラインストア406は、ニューラルネットワーク310のレイヤ1(たとえば、レイヤ314)に対応し得、ラインストア408は、ニューラルネットワーク310のレイヤ2(たとえば、レイヤ316)に対応し得、ラインストア410は、ニューラルネットワーク310のレイヤN(たとえば、レイヤ318)に対応し得る。ニューラルネットワークのレイヤに関連付けられたラインストア内に記憶されたデータは、ニューラルネットワーク310の前のレイヤからのデータのサブセット(たとえば、1つまたは複数のライン、1つまたは複数のデータブロック、入力窓、ストライプブロックのデータ行のサブセット)を含み得る。
【0069】
たとえば、ニューラルネットワーク310のレイヤ1(たとえば、レイヤ314)に対応するラインストア406は、ニューラルネットワーク310のレイヤ0(たとえば、レイヤ312)からの出力データのサブセットを含み得る。場合によっては、記憶されたデータのサイズは、ニューラルネットワーク310によって実装される畳み込みフィルタのサイズに基づき得る。たとえば、畳み込みフィルタは、各レイヤからの出力データ内に若干のシフトを生じさせることがある。レイヤは前のレイヤからの出力をその入力の部分として使用するため、出力データ内のシフトは、入力のサイズをそのレイヤに低減し得る。ラインストア内に記憶された前のレイヤからのデータの部分(たとえば、重複)は、したがって、その次のレイヤに対する入力のサイズを増大させるために、次のレイヤに対する入力の一部として使用され得る。例示のために、ニューラルネットワーク310のレイヤによって実装される畳み込みフィルタは、出力データのダウンスケーリングを生じさせることがある。したがって、レイヤからのダウンスケーリングされた出力は、次のレイヤに対する入力を構築するために増大する必要があり得る。
【0070】
前記のように、ニューラルネットワーク310のレイヤ1(たとえば、レイヤ314)に対応するラインストア406は、ニューラルネットワーク310のレイヤ0(たとえば、レイヤ312)からの出力データのサブセットを含み得る。同様に、ニューラルネットワーク310のレイヤ2(たとえば、レイヤ316)に対応するラインストア408は、ニューラルネットワーク310のレイヤ1(たとえば、レイヤ314)からの出力データのサブセットを含み得、ニューラルネットワーク310のレイヤN(たとえば、レイヤ318)に対応するラインストア410は、ニューラルネットワーク310のレイヤ2(たとえば、レイヤ316)からの出力データのサブセットを含み得る。いくつかの例では、レイヤ0は第1のレイヤであり、前のレイヤからのデータを有さないため、レイヤ0に対応するラインストア404内に記憶されたデータは、パディングを含み得る。パディングは、たとえば、エッジ複製(たとえば、最初の1つまたは複数の入力ラインを繰り返す)、値複製、および/または任意の他のパディング技法および/またはデータを含み得る。
【0071】
いくつかの例では、ニューラルネットワーク310の1つのレイヤからの重複データは、データ処理方式300からの垂直重複の部分を含み得る。たとえば、前に説明したように、データ処理方式300は、水平方向に重複(たとえば、重複領域216および222)を含み得る。場合によっては、水平方向の重複は、各レイヤがストライプの行(たとえば、行306A、306B、306N)内のデータを処理するとき、ニューラルネットワーク310の各レイヤによって処理され得る。下方垂直方向の追加の重複は、ストライプ内の次の行を処理するときに使用するためにラインストアメモリ402内に記憶され得る。場合によっては、この垂直重複は、ラインストア404~410に関して上記で説明した重複データを含み得る。たとえば、重複データは、ニューラルネットワーク310によって処理されるストライプの前の行から垂直方向にデータの部分を含み得る。
【0072】
メモリアーキテクチャ400は、スクラッチメモリ420内に記憶された出力およびラインストアメモリ402内の重複データを使用して、レイヤデータを準備および処理し得る。たとえば、図4では、ニューラルネットワーク310のレイヤ0の出力456は、バッファ422内に記憶され、ニューラルネットワーク310のレイヤ0からの重複データ454は、ラインストア406内に記憶される。レイヤ1に対する入力452を構築するために、バッファ422からのレイヤ0の出力456は、ラインストア406からの重複データ454と結合されてよい。レイヤ0の出力456と重複データ454の結合は、レイヤ1に対する入力452をもたらし得る。
【0073】
示すように、メモリアーキテクチャ400は、2つのメモリ(たとえば、ラインストアメモリ402およびスクラッチメモリ420)からのデータをレイヤ単位ベースで結合させて、任意の所与のレイヤに対する入力データを形成することができる。場合によっては、レイヤはシステムメモリからデータをフェッチする必要なしに、連続的に処理される。
【0074】
いくつかの例では、ラインストアメモリ402は、ニューラルネットワークレイヤごとに入力データのm個のラインを記憶し得る。たとえば、ラインストア404は、レイヤ0に対する入力データのm個のラインを記憶し得、ラインストア406は、レイヤ1に対する入力データのm個のラインを記憶し得、ラインストア408は、レイヤ2に対する入力データのm個のラインを記憶し得、ラインストア410は、レイヤNに対する入力データのm個のラインを記憶し得る。場合によっては、m個のラインは、関連するニューラルネットワークレイヤのカーネルサイズに依存し得る。
【0075】
スクラッチメモリ420内の各バッファは、特定のニューラルネットワークレイヤの出力を記憶し得る。場合によっては、バッファ内に記憶された特定のニューラルネットワークレイヤの出力は、データのn個のラインを含み得る。たとえば、バッファ422は、データのn個のラインを含むレイヤ0の出力を記憶することができ、バッファ424は、データのn個のラインを含むレイヤ1の出力を記憶することができる。
【0076】
場合によっては、データのn個のラインは、レイヤからレイヤに渡されてよい。いくつかの例では、データのn個のラインは、異なる例において異なってよく、かつ/または使用されるアーキテクチャに依存してもよい。場合によっては、ラインの数nを増大させることは、より大きいMAC並列性を可能にし得る。たとえば、MACエンジンが1024MAC/サイクルである場合、MACエンジンは、いくつかのライン(たとえば、n個のライン)を同時に、いくつかのピクセル(または他のタイプのデータ)を同時に、ならびにいくつかの入力深さおよび出力深さを同時に処理し得る。場合によっては、これらのパラメータは、内部ループタイルサイズを形成するために組み合わされてよい。
【0077】
図5Aは、ニューラルネットワークレイヤ入力および出力を生成するための例示的なデータ処理アーキテクチャ500を示す図である。データ処理アーキテクチャ500は、ラインストアメモリ402およびスクラッチメモリ420を含む。前に説明したように、スクラッチメモリ420は、ニューラルネットワーク310のレイヤ(たとえば、レイヤ312~318)からの出力を記憶し得る。たとえば、スクラッチメモリ420内のバッファ422は、レイヤ0(たとえば、レイヤ312)からの出力を記憶することができ、スクラッチメモリ420内のバッファ424は、レイヤ1(たとえば、レイヤ314)からの出力を記憶することができる。ニューラルネットワークの追加のレイヤが出力を生成すると、それらの出力は、スクラッチメモリ420内に同様に記憶され得る。ニューラルネットワーク内のレイヤからの出力は、ニューラルネットワーク内の次のレイヤに対する入力として使用され得る。いくつかの例では、スクラッチメモリ420は、ニューラルネットワーク310の各レイヤの各出力に対するバッファと同じ数のバッファを含み得る。他の例では、スクラッチメモリ420は、わずか2つ半のブロック-行-レイヤ出力程度のバッファを含んでよい。
【0078】
ラインストアメモリ402は、ニューラルネットワーク310内のレイヤからのデータの部分(たとえば、データのライン、データのブロック、データの窓、ストライプブロックのデータ行のサブセットなど)を記憶し得る。ラインストアメモリ402内に記憶されたデータは、ニューラルネットワーク310の2つ以上のレイヤの重複データ(たとえば、重複領域216および222)を含み得る。いくつかの例では、ニューラルネットワーク310の1つのレイヤからの重複データは、データ処理方式300からの垂直重複の部分を含み得る。
【0079】
データ処理アーキテクチャ500は、スクラッチメモリ420内に記憶された出力およびラインストアメモリ402内の重複データを使用して、レイヤデータを準備および処理し得る。たとえば、図5Aでは、ニューラルネットワーク310のレイヤ0の出力540は、バッファ422内に記憶され、ニューラルネットワーク310のレイヤ1の前の実行からの重複データ542はラインストア406内に記憶される。レイヤ1に対するデータを準備および処理するために、垂直コンポーザ530は、バッファ422からレイヤ0の出力540を、またラインストア406から重複データ542を取得し、ニューラルネットワーク310のレイヤ1に対するデータ544を生成し得る。データ544を生成するために、垂直コンポーザ530は、出力540と重複データ542を結合し得る。いくつかの例では、データ544は、レイヤ1に対して構築された入力を含み得る。
【0080】
データ544は、MACデータ経路532を通して処理して、レイヤ1の出力548を生成し得る。いくつかの例では、出力548は、ストライプの行内のストライプブロックに対応するデータのブロックを含み得る。データのブロックは、ストライプの行内の水平位置からの、ストライプブロックの深さ次元に沿ったデータを含み得る。他の例では、出力548は、ストライプの行に対応するレイヤ1のデータ出力を含み得る。
【0081】
レイヤ1の出力548は、次いで、レイヤ2によって使用するためにスクラッチメモリ420上のバッファ424内に記憶され得る。いくつかの例では、MACデータ経路532は、MACアレイを含んでよく、出力548を生成するための行列乗算演算を実行し得る。場合によっては、MACデータ経路532は、出力548を生成するために、レイヤ1の畳み込みカーネルを使用し得る。たとえば、畳み込みカーネルは、データを畳み込んで、出力548を生成し得る。
【0082】
ラインストア更新構成要素534は、レイヤ1の次の行に対する重複データ546を生成するために、垂直コンポーザ530によって生成されたデータ544を取得し得る。ラインストア更新構成要素534は、次いで、重複データ546をレイヤ1に関連付けられたラインストア406内に記憶し得る。いくつかの例では、垂直コンポーザ530は、重複データ546を生成するために、データ544の部分を決定および/または切断することができる。場合によっては、垂直コンポーザ530は、重複データ546を生成するために、データ544の下部を決定および/または切断することができる。データ処理アーキテクチャ500は、次いで、前にレイヤ2が実行されたときからのラインストア408内の重複データ546およびバッファ424内の出力548を使用して、レイヤ2に対するデータを準備および処理し得る。
【0083】
いくつかの例では、データ処理アーキテクチャ500は、水平重複データ550を垂直コンポーザ530によって生成されたデータ544に追加するための水平コンポーザ560を随意に含んでよい。たとえば、図5Bを参照すると、水平コンポーザ560は、データ544を垂直コンポーザ530から取得し、水平重複データ550をデータ544に追加して、MACアレイ562に対するブロック入力552を生成し得る。ブロック入力552は、MACアレイ562に対するMACアレイ入力として使用され得る。ブロック入力552は、データ544、およびデータ544の水平エッジに追加または付加された水平重複データ550を含み得る。
【0084】
いくつかの例では、水平重複データ550は、データ544がMACアレイ562によって処理されるのに先立って、水平方向のデータ(たとえば、水平重複データ550)でデータ544をパディングし得る。場合によっては、水平重複データ550をデータ544に追加することによって、データ処理アーキテクチャ500は、データ処理アーキテクチャ500およびデータ処理方式300によって使用される全帯域幅を低減し得る。いくつかの例では、水平重複データ550は、ストライプの同じ行内で処理された前の水平ロケーションからのデータのサブセットをデータ544として含み得る。
【0085】
MACアレイ562は、ブロック入力552を使用して、前に説明したようにバッファ424内に記憶され得る出力548を生成し得る。いくつかの例では、MACアレイ562は、行列乗算演算を実行して、出力548を生成し得る。場合によっては、水平コンポーザ560は、データ544および水平重複データ550に対してIM2COL演算を実装して、ブロック入力552を生成し得る。
【0086】
図5Bに示すように、データ処理アーキテクチャ500は、データをラインストアメモリ402内に記憶するための書込みコントローラ570およびラインストアメモリ402からデータを読み取る/取り出すための読取りコントローラ572を含み得る。同様に、データ処理アーキテクチャ500は、データをスクラッチメモリ420内に記憶するための書込みコントローラ574およびスクラッチメモリ420からデータを読み取る/取り出すための読取りコントローラ576を含み得る。
【0087】
図6は、垂直線オフセットでパディングされ、レイヤ出力610を生成するために使用される、レイヤ入力602の例を示す図である。この例では、レイヤ入力602は、特定のニューラルネットワークレイヤの第1のパスに対応する。レイヤ入力602は、入力ライン606およびパディング604を含む。いくつかの例では、入力ライン606は、スクラッチメモリ420内のバッファ内に記憶されたレイヤ出力など、スクラッチメモリ420から取り出されたデータを含み得る。
【0088】
場合によっては、パディング604は、入力ライン606の第1のライン608の前および/または上部に追加され得る。パディング604は、垂直線オフセットを提供し得る。いくつかの例では、垂直線オフセットは、前に説明したように畳み込みフィルタによって生じるシフトおよび/またはダウンスケーリングに対応するためにレイヤ入力のサイズを増大させるために使用され得る。場合によっては、パディング604は、ラインストアメモリ402から取り出された重複データを含み得る。重複データは、レイヤによって処理された前のストライプ行からの1つまたは複数の垂直線を含み得る。
【0089】
場合によっては、レイヤ入力602に関連付けられたレイヤがレイヤ0(たとえば、レイヤ312)であり、前の処理からの重複データが利用可能でない場合、パディング604は、レイヤ入力602をパディングするために使用される繰り返しラインおよび/または値を含み得る。たとえば、パディング604は、第1のライン608および/または入力ライン606からの1つまたは複数のラインを含み得る。
【0090】
レイヤ入力602は、レイヤ出力610を生成するために使用され得る。レイヤ出力610は、出力ライン612を含み得る。いくつかの例では、出力ライン612は、次のニューラルネットワークレイヤに対する入力を構築するために使用するためにスクラッチメモリ420のバッファ内に記憶され得る。
【0091】
図6に示すように、レイヤ入力602は、レイヤ出力610よりも大きい。いくつかの例では、ニューラルネットワークレイヤ内の畳み込みは、データ内にシフトおよび/または低減を生じさせることがある。データ内のシフトおよび/または低減は、レイヤ出力610をレイヤ入力602よりも小さくさせることがある。したがって、レイヤ出力610が次のレイヤのための入力を生成するために使用されるとき、次のレイヤに対する入力のサイズを増大させるために、レイヤ出力610の同様のパディング(たとえば、パディング604)が使用され得る。場合によっては、重複データ(たとえば、前のレイヤおよび/または行からの1つまたは複数の垂直線)は、レイヤ出力610のパディングのために使用され得る。
【0092】
図7は、ストライプを処理しているときの冗長計算を低減するための例示的な漏斗式処理方式700を示す図である。この例では、中央ストライプ710は、中央ストライプ710の各側面の上に水平重複712を含む。水平重複712は、中央ストライプ710に対応する出力ストライプ708を生成するために使用される。この例では、出力ストライプ708は、レイヤ0~Nを使用して生成される。ニューラルネットワーク(たとえば、ニューラルネットワーク310)は、レイヤ0~Nを通してストライプデータをレイヤ単位で処理し得る。
【0093】
水平重複712は、ニューラルネットワーク(および/またはニューラルネットワークのレイヤ)によって実行される動作の数と、それぞれの追加レイヤがニューラルネットワークによって実装される場合に増大し得る、帯域幅、メモリ、電力、および/または計算など、システムリソースに対する負担とを増大し得る。いくつかの例では、ニューラルネットワークによって実装されるレイヤが多ければ多いほど、リソースに対する負担およびニューラルネットワークのレイヤによって実行される冗長動作の数も増える。
【0094】
漏斗式処理方式700は、ニューラルネットワークがレイヤ単位で進むにつれて、アクティブストライプ幅を漸進的に低減することによって、リソース負担および冗長計算を低減し得る。いくつかの例では、漏斗式処理方式700は、レイヤごとのMACの数も低減し得る。
【0095】
漏斗式処理方式700は、レイヤ0に対する入力ストライプ702を最初に生成し得る。図7に示すように、レイヤ0に対する入力ストライプ702の入力範囲は、レイヤ1、2、およびNに対する入力範囲よりも大きい。たとえば、レイヤ0からレイヤ1に進むとき、漏斗式処理方式700は、レイヤ0に対する入力ストライプ702の入力範囲と比較して、レイヤ1に対する中間ストライプ704の入力範囲を低減し得る。同様に、漏斗式処理方式700は、レイヤ1に対する中間ストライプ704の入力範囲と比較して、レイヤ2に対する中間ストライプ706の入力範囲を低減し得る。漏斗式処理方式700は、レイヤ2に対する中間ストライプ706の入力範囲と比較して、レイヤNにおける出力ストライプ708に対する入力範囲をさらに低減し得る。
【0096】
このようにして、漏斗式処理方式700は、ニューラルネットワークの各レイヤに対する入力範囲、ならびに出力ストライプ708を生成するために使用される冗長計算を斬新的に低減し得る。計算および処理データの低減は、メモリ、計算、電力、帯域幅など、リソースに対する負担を低減し得る。
【0097】
図8は、本開示のいくつかの例による、ニューラルネットワークにおいてデータを処理するための例示的なプロセス800を示すフローチャートである。ブロック802において、プロセス800は、入力データを論理的にセグメント化するストライプ(たとえば、ストライプ210A、ストライプ210B)を含む入力データ(たとえば、入力200)を取得することを含み得る。入力データの各ストライプは、図2に示したストライプ210Aなど、データの少なくとも1つの行を含む。いくつかの例では、プロセス800は、入力データをストライプに論理的にセグメント化することを含み得る。場合によっては、各ストライプは、入力データのそれぞれの部分を含み得る。
【0098】
ブロック804において、プロセス800は、ニューラルネットワーク(たとえば、ニューラルネットワーク310)の各レイヤ(たとえば、レイヤ312、レイヤ314、レイヤ316、レイヤ318)によって、入力データの第1のストライプ(たとえば、ストライプ210A)内のデータの行(たとえば、行306A)を処理することを含み得る。いくつかの例では、データの行は、水平方向(たとえば、水平次元202)に、ニューラルネットワークの各先行するレイヤがニューラルネットワークの各後続のレイヤの前にデータの特定の行(たとえば、ストライプ210A内の行306Aなど、第1のストライプ内のデータの行)を処理する、レイヤ単位のシーケンスに従って、連続的に処理され得る。
【0099】
場合によっては、データの行を水平方向に連続的に処理することは、ニューラルネットワークの各レイヤによって、行内のデータの複数のブロック(たとえば、ストライプブロック302)を連続的に処理することを含み得る。場合によっては、ニューラルネットワークの各レイヤは、後続のブロックを水平方向(たとえば、水平次元202)に沿って処理する前に、データの各先行するブロックを深さ方向(たとえば、深さ次元206)に沿って処理し得る。
【0100】
場合によっては、ニューラルネットワークは畳み込みネットワークを含み得る。いくつかの例では、ニューラルネットワークはピクセル間ニューラルネットワークを含んでよく、入力データは画像に関連付けられたピクセルを含んでよい。他の場合には、ニューラルネットワークは、2Dデータ入力を2Dデータ出力に、かつ/または3Dデータ入力を3Dデータ出力に処理するニューラルネットワークを含み得る。
【0101】
いくつかの例では、レイヤ単位のシーケンスに従ってデータの行を処理することは、ニューラルネットワークの各後続のレイヤによって、ニューラルネットワークの先行するレイヤの出力を処理することを含み得る。いくつかの例では、出力はデータの行に対応し得る。
【0102】
ブロック806において、プロセス800は、ニューラルネットワークの各レイヤによって、第1のストライプ内のデータの行を処理した後、第1のストライプ内のデータの後続の行(たとえば、行306B、行306N)を行単位ベースで処理することを含み得る。いくつかの例では、データの各後続の行は、水平方向に、レイヤ単位のシーケンスに従って連続的に処理され得る(たとえば、ニューラルネットワークの各先行するレイヤは、ニューラルネットワークの各後続のレイヤの前に後続の行を処理する)。
【0103】
場合によっては、後続の行を処理することは、ニューラルネットワークの各レイヤによって、各後続の行内のデータのそれぞれの複数のブロック(たとえば、ストライプブロック302)を連続的に処理することを含み得る。場合によっては、ニューラルネットワークの各レイヤは、後続の行内のデータの後続のブロックを処理する前に、第1のストライプ内の後続の行内のデータの先行するブロックを深さ方向に沿って処理し得る。
【0104】
場合によっては、レイヤ単位のシーケンスに従って、データの後続の行を処理することは、ニューラルネットワークの各後続のレイヤによって、ニューラルネットワークの先行するレイヤの出力を処理することを含み得る。いくつかの例では、出力は、データの後続の行に対応し得る。
【0105】
ブロック808において、プロセス800は、ニューラルネットワークによって、データの行およびデータの後続の行の処理に基づいて、第1の出力ストライプを生成することを含み得る。
【0106】
ブロック810において、プロセス800は、ニューラルネットワークの各レイヤによって、第1のストライプを処理した後、入力データの第2のストライプ(たとえば、ストライプ210B)内のデータの行を処理することを含み得る。いくつかの例では、第2のストライプ内のデータの行は、行単位ベースで処理され得る。いくつかの例では、第2のストライプ内のデータの各行は、水平方向に、レイヤ単位のシーケンスに従って、処理され得る。
【0107】
ブロック812において、プロセス800は、第2のストライプの処理に基づいて、第2の出力ストライプを生成することを含み得る。いくつかの例では、ニューラルネットワークは、第1の出力ストライプおよび/または第2の出力ストライプに基づいて、入力データに対する出力を生成し得る。
【0108】
場合によっては、プロセス800は、データの行内の1つまたは複数のブロック(たとえば、ストライプブロック302)に対してニューラルネットワークの前のレイヤによって生成された出力(たとえば、出力548)を第1のメモリ(たとえば、スクラッチメモリ420)内に記憶し、データの行内の1つまたは複数のブロックからのデータの1つまたは複数のラインをニューラルネットワークの特定のレイヤに関連付けられた第2のメモリ(たとえば、ラインストアメモリ402)内に記憶することを含み得る。いくつかの例では、データの1つまたは複数のラインは、前のストライプ-ブロック-行に対するニューラルネットワークの特定のレイヤのデータ入力の部分を含み得る(たとえば、重複データ542、重複データ546)。
【0109】
いくつかの例では、プロセス800は、前のレイヤによって生成された出力と前のストライプ-行に対するこの同じレイヤに対するデータ入力の部分を含むデータの1つまたは複数のラインの組合せに基づいて、ニューラルネットワークの特定のレイヤに対する入力(たとえば、入力452、ブロック入力552)を生成することを含み得る。プロセス800は、ニューラルネットワークの特定のレイヤによって、前のレイヤに対する入力に基づいて、追加の出力を生成するステップを含み得る。
【0110】
いくつかの例では、プロセス800は、特定のレイヤに対する入力の部分(たとえば、重複データ542、重複データ546)を決定および/または切断することを含み得る。プロセス800は、入力の部分をニューラルネットワークの特定のレイヤに関連付けられた第3のメモリ(たとえば、ラインストアメモリ402)内に記憶することを含み得る。
【0111】
場合によっては、プロセス800は、特定のレイヤの追加の出力と後続のレイヤの前のブロック-行からの入力の部分の組合せに基づいて、ニューラルネットワークの後続のレイヤに対する追加の入力を生成することを含み得る。プロセス800は、ニューラルネットワークの後続のレイヤによって、後続のレイヤに対する追加の入力に基づいて、第2の追加の出力を生成することを含み得る。
【0112】
場合によっては、プロセス800は、第2の追加の出力を第4のメモリ(たとえば、スクラッチメモリ420)内に記憶することを含み得る。いくつかの例では、第2のメモリおよび第3のメモリは、ラインストアメモリ(たとえば、ラインストアメモリ402)内にラインストア(たとえば、ラインストア404、ラインストア406、ラインストア408、ラインストア410)を含んでよく、第1のメモリおよび第4のメモリは、スクラッチメモリ(たとえば、スクラッチメモリ420)内にバッファ(たとえば、バッファ422、バッファ424)を含んでよい。
【0113】
場合によっては、プロセス800は、データの各後続の行内の1つまたは複数のブロックに対してニューラルネットワークの前のレイヤによって生成された出力をニューラルネットワークの特定のレイヤに関連付けられた第1のメモリ(たとえば、スクラッチメモリ420)内に記憶することを含み得る。プロセス800は、データの各後続の行内の1つまたは複数のブロックからのデータの1つまたは複数のラインを第2のメモリ(たとえば、ラインストアメモリ402)内に記憶することを含み得る。いくつかの例では、データの1つまたは複数のラインは、ニューラルネットワークの特定のレイヤの1つまたは複数のデータ入力の1つまたは複数の部分を含み得る。
【0114】
場合によっては、プロセス800は、前のレイヤによって生成された出力と前のストライプ-ブロック-行に対する特定のレイヤの1つまたは複数のデータ入力の1つまたは複数の部分を含むデータの1つまたは複数のラインの組合せに基づいて、ニューラルネットワークの特定のレイヤに対する入力を生成することを含み得る。プロセス800は、ニューラルネットワークの特定のレイヤによって、前のレイヤからの出力と、前のストライプ-ブロック-行に対する特定のレイヤからの入力のサブセットとに基づいて、追加の出力を生成することを含み得る。
【0115】
場合によっては、プロセス800は、特定のレイヤに対する入力の部分を決定および/または切断することを含み得る。プロセス800は、入力の部分をニューラルネットワークの後続のレイヤに関連付けられた第3のメモリ(たとえば、ラインストアメモリ402)内に記憶することを含み得る。プロセス800は、追加の出力を第4のメモリ(たとえば、スクラッチメモリ420)内に記憶することをさらに含み得る。いくつかの例では、第2のメモリおよび第4のメモリは、メモリバッファ(たとえば、バッファ422、バッファ424)を含み得る。
【0116】
いくつかの例では、本明細書で説明するプロセス(たとえば、プロセス800、および/または本明細書で説明する他のプロセス)は、コンピューティングデバイスまたは装置によって実行されてよい。一例では、プロセス800は、図1のコンピューティングシステム100によって実行され得る。別の例では、プロセス800は、図9に示したコンピューティングデバイスアーキテクチャ900を有するコンピューティングシステムによって実行され得る。たとえば、図9に示すコンピューティングデバイスアーキテクチャ900を備えたコンピューティングデバイスは、図8の動作および/または図1図8のうちのいずれかに関して本明細書で説明した構成要素および/または動作を実装し得る。
【0117】
コンピューティングデバイスは、モバイルデバイス(たとえば、モバイルフォン)、デスクトップコンピューティングデバイス、タブレットコンピューティングデバイス、ウェアラブルデバイス(たとえば、VRヘッドセット、ARヘッドセット、ARグラス、ネットワーク接続ウォッチもしくはスマートウォッチ、または他のウェアラブルデバイス)、サーバコンピュータ、自律運転車もしくは自律運転車のコンピューティングデバイス、ロボティックデバイス、ラップトップコンピュータ、スマートテレビジョン、カメラ、ならびに/または、プロセス800および/もしくは本明細書で説明する任意の他のプロセスを含む、本明細書で説明するプロセスを実行するためのリソース能力を持つ任意の他のコンピューティングデバイスなどの、任意の適切なデバイスを含み得る。場合によっては、コンピューティングデバイスまたは装置は、1つまたは複数の入力デバイス、1つまたは複数の出力デバイス、1つまたは複数のプロセッサ、1つまたは複数のマイクロプロセッサ、1つまたは複数のマイクロコンピュータ、1つまたは複数のカメラ、1つまたは複数のセンサー、および/または本明細書で説明するプロセスのステップを実行するように構成される他の構成要素などの、様々な構成要素を含み得る。いくつかの例では、コンピューティングデバイスは、ディスプレイ、データを通信および/または受信するように構成されたネットワークインターフェース、それらの任意の組合せ、および/または他の構成要素を含んでよい。ネットワークインターフェースは、インターネットプロトコル(IP)ベースのデータまたは他のタイプのデータを通信および/または受信するように構成され得る。
【0118】
コンピューティングデバイスの構成要素は、回路構成の中に実装され得る。たとえば、構成要素は、1つまたは複数のプログラマブル電子回路(たとえば、マイクロプロセッサ、グラフィックス処理ユニット(GPU)、デジタル信号プロセッサ(DSP)、中央処理ユニット(CPU)、および/または他の好適な電子回路)を含み得る、電子回路もしくは他の電子ハードウェアを含むことができ、かつ/またはそれらを使用して実装されることが可能であり、かつ/あるいは本明細書で説明する様々な動作を実行するために、コンピュータソフトウェア、ファームウェア、もしくはそれらの任意の組合せを含むことができ、かつ/またはそれらを使用して実装されることが可能である。
【0119】
プロセス800は、論理フロー図として示され、その動作は、ハードウェア、コンピュータ命令、またはそれらの組合せで実装され得る一連の動作を表す。コンピュータ命令のコンテキストでは、動作は、1つまたは複数のプロセッサによって実行されたとき、記載された動作を実行する、1つまたは複数のコンピュータ可読記憶媒体上に記憶されたコンピュータ実行可能命令を表す。概して、コンピュータ実行可能命令は、特定の機能を実行するかまたは特定のデータタイプを実装するルーチン、プログラム、オブジェクト、構成要素、データ構造などを含む。動作が説明される順序は、限定として解釈されることを意図せず、説明する任意の数の動作は、プロセスを実装するために任意の順序で、かつ/または並列に組み合わせられ得る。
【0120】
追加として、プロセス800、および/または本明細書で説明する他のプロセスは、実行可能命令を用いて構成された1つまたは複数のコンピュータシステムの制御下で実行されてよく、1つまたは複数のプロセッサ上で、ハードウェアによって、またはそれらの組合せで、集合的に実行するコード(たとえば、実行可能命令、1つまたは複数のコンピュータプログラム、または1つまたは複数のアプリケーション)として実装されてよい。上述のように、コードは、たとえば、1つまたは複数のプロセッサによって実行可能な複数の命令を備えるコンピュータプログラムの形で、コンピュータ可読記憶媒体または機械可読記憶媒体上に記憶されてもよい。コンピュータ可読記憶媒体または機械可読記憶媒体は非一時的であってもよい。
【0121】
図9は、本明細書で説明する様々な技法を実装することができる、例示的なコンピューティングデバイスの例示的なコンピューティングデバイスアーキテクチャ900を示す。たとえば、コンピューティングデバイスアーキテクチャ900は、図1に示したコンピューティングシステム100の少なくともいくつかの部分を実装することができる。コンピューティングデバイスアーキテクチャ900の構成要素は、バスなどの接続905を使用して互いに電気的に通信しているものとして示されている。例示的なコンピューティングデバイスアーキテクチャ900は、処理ユニット(CPUまたはプロセッサ)910と、読取り専用メモリ(ROM)920およびランダムアクセスメモリ(RAM)925などのコンピューティングデバイスメモリ915を含む様々なコンピューティングデバイス構成要素をプロセッサ910に結合する、コンピューティングデバイス接続905とを含む。
【0122】
コンピューティングデバイスアーキテクチャ900は、プロセッサ910に直接接続される、その近くにある、またはその一部として統合される高速メモリのキャッシュを含むことができる。コンピューティングデバイスアーキテクチャ900は、プロセッサ910による高速アクセスのために、キャッシュ912にメモリ915および/またはストレージデバイス930からデータをコピーすることができる。このようにして、キャッシュは、データを待機している間のプロセッサ910の遅延をなくす、性能の向上をもたらすことができる。これらおよび他のモジュールは、様々な行動を実行するようにプロセッサ910を制御することができ、またはそれを制御するように構成され得る。他のコンピューティングデバイスメモリ915も、使用可能であってもよい。メモリ915は、異なる性能特性を備えた複数の異なるタイプのメモリを含むことができる。プロセッサ910は、任意の汎用プロセッサ、およびストレージデバイス930内に記憶され、プロセッサ910、ならびにソフトウェア命令がプロセッサ設計へと組み込まれるような専用プロセッサを制御するように構成される、ハードウェアまたはソフトウェアサービス(たとえば、サービス1 932、サービス2 934、およびサービス3 936)を含むことができる。プロセッサ910は、複数のコアまたはプロセッサ、バス、メモリコントローラ、キャッシュなどを含む、自己完結型のシステムであってもよい。マルチコアプロセッサは、対称でも非対称でもよい。
【0123】
コンピューティングデバイスアーキテクチャ900とのユーザ対話を可能にするために、入力デバイス945は、発話のためのマイクロフォン、ジェスチャまたはグラフィカル入力のためのタッチ感知スクリーン、キーボード、マウス、モーション入力、発話などの、任意の数の入力機構を表すことができる。出力デバイス935は、ディスプレイ、プロジェクタ、テレビジョン、スピーカデバイスなど、当業者に知られているいくつかの出力機構のうちの1つまたは複数であってもよい。場合によっては、マルチモーダルコンピューティングデバイスが、コンピューティングデバイスアーキテクチャ900と通信するためにユーザが複数のタイプの入力を提供することを可能にし得る。通信インターフェース940は、概して、ユーザ入力およびコンピューティングデバイス出力を支配して管理することができる。いずれの特定のハードウェア構成に対しても作用する制約がないので、この基本的な特徴は、開発されるにつれて、改善されたハードウェアまたはファームウェアの構成により容易に置き換えられることがある。
【0124】
ストレージデバイス930は、不揮発性メモリであり、ハードディスク、または、磁気カセット、フラッシュメモリカード、ソリッドステートメモリデバイス、デジタル多用途ディスク、カートリッジ、ランダムアクセスメモリ(RAM)925、読取り専用メモリ(ROM)920、およびそれらのハイブリッドなどの、コンピュータによってアクセス可能であるデータを記憶することができる他のタイプのコンピュータ可読媒体であり得る。ストレージデバイス930は、プロセッサ910を制御するためのサービス932、サービス934、サービス936を含むことができる。他のハードウェアまたはソフトウェアモジュールが企図される。ストレージデバイス930はコンピューティングデバイス接続905に接続され得る。一態様では、特定の機能を実行するハードウェアモジュールは、機能を実行するために、プロセッサ910、接続905、出力デバイス935などの必要なハードウェア構成要素と接続している、コンピュータ可読媒体内に記憶されているソフトウェア構成要素を含むことができる。
【0125】
「コンピュータ可読媒体」という用語は、限定はされないが、ポータブルまたは非ポータブルのストレージデバイス、光ストレージデバイス、ならびに、命令および/またはデータを記憶し、収容し、または搬送することができる様々な他の媒体を含む。コンピュータ可読媒体は、データがそこに記憶され得るとともに、ワイヤレスにまたはワイヤード接続を介して伝搬する搬送波および/または一時的な電子信号を含まない、非一時的媒体を含んでもよい。非一時的媒体の例は、限定はされないが、磁気ディスクもしくは磁気テープ、コンパクトディスク(CD)もしくはデジタル多用途ディスク(DVD)などの光記憶媒体、フラッシュメモリ、メモリ、またはメモリデバイスを含んでもよい。コンピュータ可読媒体は、プロシージャ、関数、サブプログラム、プログラム、ルーチン、サブルーチン、モジュール、ソフトウェアパッケージ、クラス、または命令、データ構造、もしくはプログラムステートメントの任意の組合せを表す場合がある、コードおよび/または機械実行可能命令を記憶していてもよい。コードセグメントは、情報、データ、引数、パラメータ、またはメモリ内容を渡すことおよび/または受けることによって、別のコードセグメントまたはハードウェア回路に結合されてもよい。情報、引数、パラメータ、データなどは、メモリ共有、メッセージパッシング、トークンパッシング、ネットワーク送信などを含む、任意の適切な手段を介して渡され、転送され、または送信されてもよい。
【0126】
いくつかの実施形態では、コンピュータ可読ストレージデバイス、媒体、およびメモリは、ビットストリームなどを含むケーブルまたはワイヤレス信号を含み得る。しかしながら、言及されるとき、非一時的コンピュータ可読記憶媒体は、エネルギー、キャリア信号、電磁波、および信号それ自体などの媒体を明確に除く。
【0127】
本明細書で提供する実施形態および例の完全な理解を与えるために、上記の説明において具体的な詳細が提供されている。しかしながら、本実施形態がこれらの具体的な詳細なしに実践され得ることが当業者によって理解されよう。説明を明快にするために、いくつかの事例では、本技術は、デバイスと、デバイス構成要素と、ソフトウェア、またはハードウェアとソフトウェアの組合せにおいて具現化された方法におけるステップまたはルーチンとを備える個々の機能ブロックを含むものとして提示されることがある。図に示されるものおよび/または本明細書で説明されるもの以外の追加の構成要素が使用されてもよい。たとえば、不必要な詳細で実施形態を不明瞭にしないように、回路、システム、ネットワーク、プロセス、または他の構成要素がブロック図の形態で構成要素として示されることがある。他の事例では、実施形態を不明瞭にすることを避けるために、よく知られている回路、プロセス、アルゴリズム、構造、および技法は、不必要な詳細なしに示されることがある。
【0128】
個々の実施形態が、フローチャート、流れ図、データフロー図、構造図、またはブロック図として示されるプロセスまたは方法として上で説明されることがある。フローチャートは動作を逐次プロセスとして説明することがあるが、動作の多くは並列にまたは同時に実行することができる。加えて、動作の順序は並べ替えられてよい。プロセスは、その動作が完了するときに終了するが、図に含まれない追加のステップを有することも可能である。プロセスは、方法、関数、プロシージャ、サブルーチン、サブプログラムなどに対応し得る。プロセスが関数に対応するとき、その終了は、その関数が呼出し関数またはメイン関数に戻ることに対応することがある。
【0129】
上記で説明した例によるプロセスおよび方法は、記憶されたまたは他の方法でコンピュータ可読媒体から入手可能なコンピュータ実行可能命令を使用して実装され得る。そのような命令は、たとえば、汎用コンピュータ、専用コンピュータ、もしくは処理デバイスに特定の機能もしくは機能のグループを実行させるか、または特定の機能もしくは機能のグループを実行するように汎用コンピュータ、専用コンピュータ、もしくは処理デバイスを他の方法で構成する、命令およびデータを含むことができる。使用されるコンピュータリソースの部分は、ネットワークを介してアクセス可能であり得る。コンピュータ実行可能命令は、たとえば、アセンブリ言語、ファームウェア、ソースコードなどのバイナリ、中間フォーマット命令であってよい。命令、使用される情報、および/または記載した例による方法中に作成される情報を記憶するのに使用され得るコンピュータ可読媒体の例は、磁気または光ディスク、フラッシュメモリ、不揮発性メモリを設けられたUSBデバイス、ネットワーク接続されたストレージデバイスなどを含む。
【0130】
これらの開示によるプロセスおよび方法を実装するデバイスは、ハードウェア、ソフトウェア、ファームウェア、ミドルウェア、マイクロコード、ハードウェア記述言語、またはそれらの任意の組合せを含むことができ、様々なフォームファクタのうちのいずれかをとることができる。ソフトウェア、ファームウェア、ミドルウェア、またはマイクロコードで実装されるとき、必要なタスクを実行するためのプログラムコードまたはコードセグメント(たとえば、コンピュータプログラム製品)は、コンピュータ可読媒体または機械可読媒体の中に記憶されてよい。プロセッサは、必要なタスクを実行してよい。フォームファクタの典型的な例は、ラップトップ、スマートフォン、モバイルフォン、タブレットデバイスまたは他の小型フォームファクタパーソナルコンピュータ、携帯情報端末、ラックマウントデバイス、スタンドアロンデバイスなどを含む。本明細書で説明する機能性はまた、周辺装置またはアドインカードの中で具現され得る。そのような機能性はまた、さらなる例として、異なるチップの中の回路基板上、または単一のデバイスの中で実行する異なるプロセス上で実装され得る。
【0131】
命令、そのような命令を伝えるための媒体、命令を実行するためのコンピューティングリソース、およびそのようなコンピューティングリソースをサポートするための他の構造は、本開示で説明する機能を提供するための例示的な手段である。
【0132】
上記の説明では、本出願の態様はそれらの特定の実施形態を参照しながら説明されるが、本出願がそれらに限定されないことを当業者は認識されよう。したがって、本出願の例示的な実施形態が本明細書で詳細に説明されているが、本発明の概念が別のやり方で様々に具現および採用され得ることと、従来技術によって限定される場合を除き、添付の特許請求の範囲がそのような変形を含むものと解釈されることが意図されることとを理解されたい。上記で説明した適用例の様々な特徴および態様は、個別にまたは共同で使用され得る。さらに、実施形態は、本明細書のより広い趣旨および範囲から逸脱することなく、本明細書で説明するもの以外の任意の数の環境および適用例において利用され得る。したがって、本明細書および図面は、限定的ではなく例示的であると見なされるべきである。例示のために、方法は特定の順序で説明された。代替実施形態では、方法は説明された順序とは異なる順序で実行され得ることを諒解されたい。
【0133】
本明細書で使用する、未満(「<」)およびよりも大きい(「>」)という記号または用語は、本明細書の範囲から逸脱することなく、それぞれ、以下(「≦」)および以上(「≧」)という記号で置き換えられ得ることを、当業者は諒解されよう。
【0134】
構成要素がいくつかの動作を実行する「ように構成される」ものとして説明される場合、そのような構成は、たとえば、動作を実行するように電子回路もしくは他のハードウェアを設計することによって、動作を実行するようにプログラマブル電子回路(たとえば、マイクロプロセッサ、または他の適切な電子回路)をプログラムすることによって、またはそれらの任意の組合せで達成され得る。
【0135】
「に結合された」という句は、直接もしくは間接的にのいずれかで別の構成要素に物理的に接続された任意の構成要素、および/または、直接もしくは間接的にのいずれかで別の構成要素と通信している(たとえば、ワイヤードもしくはワイヤレス接続および/または他の好適な通信インターフェースを介して他の構成要素に接続された)任意の構成要素を指す。
【0136】
セット「のうちの少なくとも1つ」および/またはセットのうちの「1つまたは複数」と記載する請求項の文言または他の文言は、セットの1つのメンバーまたはセットの(任意の組合せでの)複数のメンバーが請求項を満足することを示す。たとえば、「AおよびBのうちの少なくとも1つ」または「AまたはBの少なくとも1つ」を記載する請求項の文言は、A、B、またはAおよびBを意味する。別の例において、「A、B、およびCのうちの少なくとも1つ」または「A、B、またはCのうちの少なくとも1つ」を記載する請求項の文言は、A、B、C、またはAおよびB、またはAおよびC、またはBおよびC、またはAおよびBおよびCを意味する。セット「の少なくとも1つ」および/またはセットの「1つまたは複数」という文言は、セットに列挙される項目にセットを限定しない。たとえば、「AおよびBのうちの少なくとも1つ」または「AまたはBのうちの少なくとも1つ」を記載する請求項の文言は、A、B、またはAおよびBを意味することができ、加えて、AおよびBのセットに列挙されていない項目をさらに含むことができる。
【0137】
本明細書で開示した例に関して説明した様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズムステップは、電子ハードウェア、コンピュータソフトウェア、ファームウェア、またはそれらの組合せとして実装されてもよい。ハードウェアとソフトウェアとのこの互換性を明瞭に示すために、様々な例示的な構成要素、ブロック、モジュール、回路、およびステップが、それらの機能性に関して上記で概略的に説明されている。そのような機能性が、ハードウェアとして実装されるのか、それともソフトウェアとして実装されるのかは、具体的な適用例および全体的なシステムに課される設計制約によって決まる。当業者は、説明された機能性を具体的な適用例ごとに様々な方法で実装してもよいが、そのような実装決定は、本出願の範囲からの逸脱を引き起こすものと解釈されるべきではない。
【0138】
本明細書で説明する技法はまた、電子ハードウェア、コンピュータソフトウェア、ファームウェア、またはそれらの任意の組合せにおいて実装され得る。そのような技法は、汎用コンピュータ、ワイヤレス通信デバイスハンドセット、またはワイヤレス通信デバイスハンドセットおよび他のデバイスにおける適用例を含む複数の用途を有する集積回路デバイスなどの、様々なデバイスのうちのいずれかにおいて実装され得る。モジュールまたは構成要素として説明される任意の特徴は、集積論理デバイスの中で一緒に、または個別であるが相互動作可能な論理デバイスとして別々に実装され得る。ソフトウェアで実装される場合、技法は、実行されると、上記で説明した方法、アルゴリズム、および/または動作のうちの1つまたは複数を実行する命令を含むプログラムコードを備える、コンピュータ可読データ記憶媒体によって少なくとも部分的に実現され得る。コンピュータ可読データ記憶媒体は、コンピュータプログラム製品の一部を形成してもよく、これはパッケージング材料を含んでもよい。コンピュータ可読媒体は、同期ダイナミックランダムアクセスメモリ(SDRAM)などのランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、不揮発性ランダムアクセスメモリ(NVRAM)、電気的消去可能プログラマブル読取り専用メモリ(EEPROM)、FLASHメモリ、磁気または光データ記憶媒体などの、メモリまたはデータ記憶媒体を備え得る。技法は、追加または代替として、伝搬される信号または波などの、命令またはデータ構造の形でプログラムコードを搬送または通信し、コンピュータによってアクセスされ、読み取られ、かつ/または実行されることが可能である、コンピュータ可読通信媒体によって少なくとも部分的に実現されてもよい。
【0139】
プログラムコードは、1つまたは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、または他の均等な集積論理回路構成もしくは個別論理回路構成などの、1つまたは複数のプロセッサを含み得るプロセッサによって実行されてよい。そのようなプロセッサは、本開示で説明する技法のうちのいずれかを実行するように構成され得る。汎用プロセッサはマイクロプロセッサであってよいが、代替として、プロセッサは任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態機械であってよい。プロセッサはまた、コンピューティングデバイスの組合せ、たとえば、DSPとマイクロプロセッサとの組合せ、複数のマイクロプロセッサ、DSPコアと連携した1つまたは複数のマイクロプロセッサ、または任意の他のそのような構成として実装されてよい。したがって、本明細書で使用する「プロセッサ」という用語は、上記の構造、上記の構造の任意の組合せ、または本明細書で説明する技法の実装に適した任意の他の構造もしくは装置のうちのいずれかを指すことがある。
【0140】
本開示の説明のための例は、以下を含む。
【0141】
態様1: 装置であって、メモリと、メモリに結合された1つまたは複数のプロセッサとを備え、1つまたは複数のプロセッサが、入力データを論理的にセグメント化するストライプを備えた入力データを取得することであって、入力データの各ストライプが、データの少なくとも1つの行を含む、取得することと、ニューラルネットワークの各レイヤによって、入力データの第1のストライプ内のデータの行を処理することであって、データの行は、ニューラルネットワークの各先行するレイヤがニューラルネットワークの各後続のレイヤの前にデータの特定の行を処理する、レイヤ単位のシーケンスに従って、水平方向に連続的に処理される、処理することと、第1のストライプ内のデータの行を処理した後、ニューラルネットワークの各レイヤによって、第1のストライプ内のデータの後続の行を行単位ベースで処理することであって、データの各後続の行が、水平方向に、レイヤ単位のシーケンスに従って、連続的に処理される、処理することと、ニューラルネットワークによって、データの行およびデータの後続の行の処理に基づいて、第1の出力ストライプを生成することと、第1のストライプを処理した後、ニューラルネットワークの各レイヤによって、入力データの第2のストライプ内のデータの行を行単位ベースで処理することであって、第2のストライプ内のデータの各行が、水平方向に、レイヤ単位のシーケンスに従って、処理される、処理することと、第2のストライプの処理に基づいて、第2の出力ストライプを生成することとを行うように構成される、装置。
【0142】
態様2: 第1のストライプ内のデータの行を水平方向に連続的に処理するために、1つまたは複数のプロセッサが、ニューラルネットワークの各レイヤによって、行内のデータの複数のブロックを連続的に処理することであって、ニューラルネットワークの各レイヤが、後続のブロックを水平方向に沿って処理する前に、データの各先行するブロックを深さ方向に沿って処理する、処理することを行うように構成される、態様1の装置。
【0143】
態様3: 後続の行を処理するために、1つまたは複数のプロセッサが、ニューラルネットワークの各レイヤによって、各後続の行内のデータのそれぞれの複数のブロックを連続的に処理することであって、ニューラルネットワークの各レイヤが、後続の行内のデータの後続のブロックを処理する前に、後続の行内のデータの先行するブロックを深さ方向に沿って処理する、処理することを行うように構成される、態様2の装置。
【0144】
態様4: ニューラルネットワークがピクセル間ニューラルネットワークを含み、入力データが画像に関連付けられたピクセルを含む、態様1から3のうちのいずれかの装置。
【0145】
態様5: 入力データを取得するために、1つまたは複数のプロセッサが、入力データをストライプに論理的にセグメント化することであって、各ストライプが、入力データのそれぞれの部分を含む、セグメント化することを行うように構成される、態様1から4のいずれかの装置。
【0146】
態様6: 1つまたは複数のプロセッサが、第1のストライプ内のデータの行内の1つまたは複数のブロックに対してニューラルネットワークの前のレイヤによって生成された出力を第1のメモリ内に記憶することと、データの行内の1つまたは複数のブロックからのデータの1つまたは複数のラインをニューラルネットワークの特定のレイヤに関連付けられた第2のメモリ内に記憶することであって、データの1つまたは複数のラインが、前のストライプ-ブロック-行に対するニューラルネットワークの特定のレイヤのデータ入力の部分を含む、記憶することとを行うように構成される、態様1から5のいずれかの装置。
【0147】
態様7: 1つまたは複数のプロセッサが、前のレイヤによって生成された出力と前のストライプ-ブロック-行に対する特定のレイヤのデータ入力の部分を含むデータの1つまたは複数のラインの組合せに基づいて、ニューラルネットワークの特定のレイヤに対する入力を生成することと、ニューラルネットワークの特定のレイヤによって、前のレイヤに対する出力に基づいて、追加の出力を生成することとを行うように構成される、態様6の装置。
【0148】
態様8: 1つまたは複数のプロセッサが、特定のレイヤに対する入力の部分を決定することと、入力の部分をニューラルネットワークの特定のレイヤに関連付けられた第3のメモリ内に記憶することとを行うように構成される、態様7の装置。
【0149】
態様9: 1つまたは複数のプロセッサが、特定のレイヤの追加の出力と後続のレイヤの前のストライプ-ブロック-行からの後続のレイヤに対する入力の部分の組合せに基づいて、ニューラルネットワークの後続のレイヤに対する追加の入力を生成することと、ニューラルネットワークの後続のレイヤによって、後続のレイヤに対する追加の入力に基づいて、第2の追加の出力を生成することとを行うように構成される、態様8の装置。
【0150】
態様10: 1つまたは複数のプロセッサが、第2の追加の出力を第4のメモリ内に記憶することであって、第2のメモリおよび第3のメモリが、ラインストアメモリ内にラインストアを備え、第1のメモリおよび第4のメモリが、スクラッチメモリ内にバッファを備える、記憶することを行うように構成される、態様9の装置。
【0151】
態様11: 1つまたは複数のプロセッサが、データの各後続の行内の1つまたは複数のブロックに対してニューラルネットワークの前のレイヤによって生成された出力をニューラルネットワークの特定のレイヤに関連付けられた第1のメモリ内に記憶することと、データの各後続の行内の1つまたは複数のブロックからのデータの1つまたは複数のラインを第2のメモリ内に記憶することであって、データの1つまたは複数のラインが、ニューラルネットワークの特定のレイヤの1つまたは複数のデータ入力の1つまたは複数の部分を含む、記憶することとを行うように構成される、態様1から10のいずれかの装置。
【0152】
態様12: 1つまたは複数のプロセッサが、前のレイヤによって生成された出力と前のストライプ-ブロック-行に対する特定のレイヤの1つまたは複数のデータ入力の1つまたは複数の部分を含むデータの1つまたは複数のラインの組合せに基づいて、ニューラルネットワークの特定のレイヤに対する入力を生成することと、ニューラルネットワークの特定のレイヤによって、前のレイヤからの出力と前のストライプ-ブロック-行に対する特定のレイヤからの入力のサブセットとに基づいて、追加の出力を生成することとを行うように構成される、態様11の装置。
【0153】
態様13: 1つまたは複数のプロセッサが、特定のレイヤに対する入力の部分を決定することと、入力の部分をニューラルネットワークの後続のレイヤに関連付けられた第3のメモリ内に記憶することと、追加の出力を第4のメモリ内に記憶することであって、第2のメモリおよび第4のメモリが、メモリバッファを備える、記憶することとを行うように構成される、態様12の装置。
【0154】
態様14: データの行を処理するために、1つまたは複数のプロセッサが、ニューラルネットワークの各後続のレイヤによって、ニューラルネットワークの先行するレイヤの出力を処理することであって、出力がデータの行に対応する、処理することを行うように構成される、態様1から13のいずれかの装置。
【0155】
態様15: データの後続の行を処理するために、1つまたは複数のプロセッサが、ニューラルネットワークの各後続のレイヤによって、ニューラルネットワークの先行するレイヤの出力を処理することであって、出力が第1のストライプ内のデータの後続の行に対応する、処理することを行うように構成される、態様1から14のいずれかの装置。
【0156】
態様16: 装置がカメラデバイスを備える、態様1から15のうちのいずれかの装置。
【0157】
態様17: 装置がモバイルデバイスを備える、態様1から16のうちのいずれかの装置。
【0158】
態様18: 方法であって、入力データを論理的にセグメント化するストライプを備えた入力データを取得するステップであって、入力データの各ストライプが、データの少なくとも1つの行を含む、取得するステップと、ニューラルネットワークの各レイヤによって、入力データの第1のストライプ内のデータの行を処理するステップであって、データの行は、ニューラルネットワークの各先行するレイヤがニューラルネットワークの各後続のレイヤの前にデータの特定の行を処理する、レイヤ単位のシーケンスに従って、水平方向に連続的に処理される、処理するステップと、第1のストライプ内のデータの行を処理した後、ニューラルネットワークの各レイヤによって、第1のストライプ内のデータの後続の行を行単位ベースで処理するステップであって、データの各後続の行が、水平方向に、レイヤ単位のシーケンスに従って、連続的に処理される、処理するステップと、ニューラルネットワークによって、データの行およびデータの後続の行の処理に基づいて、第1の出力ストライプを生成するステップと、第1のストライプを処理した後、ニューラルネットワークの各レイヤによって、入力データの第2のストライプ内のデータの行を行単位ベースで処理するステップであって、第2のストライプ内のデータの各行が、水平方向に、レイヤ単位のシーケンスに従って、処理される、処理するステップと、第2のストライプの処理に基づいて、第2の出力ストライプを生成するステップとを含む、方法。
【0159】
態様19: 第1のストライプ内のデータの行を水平方向に連続的に処理するステップが、ニューラルネットワークの各レイヤによって、行内のデータの複数のブロックを連続的に処理するステップであって、ニューラルネットワークの各レイヤが、後続のブロックを水平方向に沿って処理する前に、データの各先行するブロックを深さ方向に沿って処理する、処理するステップを含む、態様18の方法。
【0160】
態様20: データの後続の行を処理するステップが、ニューラルネットワークの各レイヤによって、各後続の行内のデータのそれぞれの複数のブロックを連続的に処理するステップであって、ニューラルネットワークの各レイヤが、後続の行内のデータの後続のブロックを処理する前に、後続の行内のデータの先行するブロックを深さ方向に沿って処理する、処理するステップを含む、態様19の方法。
【0161】
態様21: ニューラルネットワークがピクセル間ニューラルネットワークを含み、入力データが画像に関連付けられたピクセルを含む、態様18から20のうちのいずれかの方法。
【0162】
態様22: 入力データを取得するステップが、入力データをストライプに論理的にセグメント化するステップであって、各ストライプが、入力データのそれぞれの部分を含む、論理的にセグメント化するステップを含む、態様18から21のいずれかの方法。
【0163】
態様23: 第1のストライプ内のデータの行内の1つまたは複数のブロックに対してニューラルネットワークの前のレイヤによって生成された出力を第1のメモリ内に記憶するステップと、データの行内の1つまたは複数のブロックからのデータの1つまたは複数のラインをニューラルネットワークの特定のレイヤに関連付けられた第2のメモリ内に記憶するステップであって、データの1つまたは複数のラインが、前のストライプ-ブロック-行に対するニューラルネットワークの特定のレイヤのデータ入力の部分を含む、記憶するステップとをさらに含む、態様18から22のいずれかの方法。
【0164】
態様24: 前のレイヤによって生成された出力と前のストライプ-ブロック-行に対する特定のレイヤのデータ入力の部分を含むデータの1つまたは複数のラインの組合せに基づいて、ニューラルネットワークの特定のレイヤに対する入力を生成するステップと、ニューラルネットワークの特定のレイヤによって、前のレイヤに対する出力に基づいて、追加の出力を生成するステップとをさらに含む、態様23の方法。
【0165】
態様25: 特定のレイヤに対する入力の部分を決定するステップと、入力の部分をニューラルネットワークの特定のレイヤに関連付けられた第3のメモリ内に記憶するステップとをさらに含む、態様24の方法。
【0166】
態様26: 特定のレイヤの追加の出力と後続のレイヤの前のストライプ-ブロック-行からの後続のレイヤに対する入力の部分の組合せに基づいて、ニューラルネットワークの後続のレイヤに対する追加の入力を生成するステップと、ニューラルネットワークの後続のレイヤによって、後続のレイヤに対する追加の入力に基づいて、第2の追加の出力を生成するステップとをさらに含む、態様25の方法。
【0167】
態様27: 第2の追加の出力を第4のメモリ内に記憶するステップであって、第2のメモリおよび第3のメモリが、ラインストアメモリ内にラインストアを備え、第1のメモリおよび第4のメモリが、スクラッチメモリ内にバッファを備える、記憶するステップをさらに含む、態様26の方法。
【0168】
態様28: データの各後続の行内の1つまたは複数のブロックに対してニューラルネットワークの前のレイヤによって生成された出力をニューラルネットワークの特定のレイヤに関連付けられた第1のメモリ内に記憶するステップと、データの各後続の行内の1つまたは複数のブロックからのデータの1つまたは複数のラインを第2のメモリ内に記憶するステップであって、データの1つまたは複数のラインが、ニューラルネットワークの特定のレイヤの1つまたは複数のデータ入力の1つまたは複数の部分を含む、記憶するステップとをさらに含む、態様18から27のいずれかの方法。
【0169】
態様29: 前のレイヤによって生成された出力と前のストライプ-ブロック-行に対する特定のレイヤの1つまたは複数のデータ入力の1つまたは複数の部分を含むデータの1つまたは複数のラインの組合せに基づいて、ニューラルネットワークの特定のレイヤに対する入力を生成するステップと、ニューラルネットワークの特定のレイヤによって、前のレイヤからの出力と前のストライプ-ブロック-行に対する特定のレイヤからの入力のサブセットとに基づいて、追加の出力を生成するステップとをさらに含む、態様28の方法。
【0170】
態様30: 特定のレイヤに対する入力の部分を決定するステップと、入力の部分をニューラルネットワークの後続のレイヤに関連付けられた第3のメモリ内に記憶するステップと、追加の出力を第4のメモリ内に記憶するステップであって、第2のメモリおよび第4のメモリが、メモリバッファを備える、記憶するステップとをさらに含む、態様29の方法。
【0171】
態様31: データの行を処理するステップが、ニューラルネットワークの各後続のレイヤによって、ニューラルネットワークの先行するレイヤの出力を処理するステップであって、出力がデータの行に対応する、処理するステップを含む、態様18から30のいずれかの方法。
【0172】
態様32: データの後続の行を処理するステップが、ニューラルネットワークの各後続のレイヤによって、ニューラルネットワークの先行するレイヤの出力を処理するステップであって、出力が第1のストライプ内のデータの後続の行に対応する、処理するステップを含む、態様18から31のいずれかの方法。
【0173】
態様33: 命令を記憶した非一時的コンピュータ可読媒体であって、命令が、1つまたは複数のプロセッサによって実行されたとき、1つまたは複数のプロセッサに、態様18から32のうちのいずれかによる方法を実行させる、非一時的コンピュータ可読媒体。
【0174】
態様34: 態様18から32のいずれかによる方法を実行するための手段を備える装置。
【符号の説明】
【0175】
100 コンピューティングシステム
102 センサー
104 ストレージ
106 メモリ
110 コンピューティング構成要素
112 中央処理ユニット(CPU)
114 グラフィックス処理ユニット(GPU)
116 デジタル信号プロセッサ(DSP)
118 画像信号プロセッサ(ISP)
120 ニューラル処理ユニット(NPU)
130 処理エンジン
132 レンダリングエンジン
200 入力
202 水平次元
204 垂直次元
206 深さ次元
210A ストライプ
210B ストライプ
212A ストライプブロック
212B ストライプブロック
216 重複領域
220A ストライプブロック
220B ストライプブロック
222 重複領域
230A 左の図、図
230B 右の図、図
300 データ処理方式、処理方式
302 ストライプブロック
304 タイル
306A 行
306B 行
306N 行
310 ニューラルネットワーク
312~318 レイヤ
400 メモリアーキテクチャ
402 ラインストアメモリ
404~410 ラインストア
420 スクラッチメモリ
422 バッファ
424 バッファ
452 入力
454 重複データ
456 出力
500 データ処理アーキテクチャ
530 垂直コンポーザ
532 MACデータ経路
534 ラインストア更新構成要素
540 出力
542 重複データ
544 データ
545 重複データ
546 重複データ
548 出力
550 水平重複データ
552 ブロック入力
560 水平コンポーザ
562 MACアレイ
570 書込みコントローラ
572 読取りコントローラ
574 書込みコントローラ
576 読取りコントローラ
602 レイヤ入力
604 パディング
606 入力ライン
608 第1のライン
610 ラインレイヤ出力、レイヤ出力
612 出力ライン
700 漏斗式処理方式
702 入力ストライプ
704 中間ストライプ
706 中間ストライプ
708 出力ストライプ
710 中央ストライプ
712 水平重複
800 プロセス
900 コンピューティングデバイスアーキテクチャ
905 接続、コンピューティングデバイス接続
910 処理ユニット(CPUまたはプロセッサ)
912 キャッシュ
915 コンピューティングデバイスメモリ、メモリ
920 読取り専用メモリ(ROM)
925 ランダムアクセスメモリ(RAM)
930 ストレージデバイス
932 サービス1、サービス
934 サービス2、サービス
935 出力デバイス
936 サービス3、サービス
940 通信インターフェース
945 入力デバイス
図1
図2
図3
図4
図5A
図5B
図6
図7
図8
図9
【国際調査報告】