(57)【要約】  画像変換のための画素座標、および変換画像データを格納するためのメモリアドレスを決定するため装置を含む、方法、システム、および装置。いくつかの実装形態では、システムは、機械学習モデルおよび画像の画素値を使って画像の機械学習演算を行うように構成された処理部と、画素値を格納するように構成された記憶媒体と、１つ以上のハードウェアプロセッサを含むメモリアドレス演算ユニットと備える。プロセッサは、画像の画像データを受け付け、画像の次元が機械学習モデルの次元に一致しないと判断するように構成される。これに応答して、プロセッサは、変換されたバージョンの画像の画素座標を決定し、画素座標の各々について、機械学習モデルへの入力を生成するために使われる画素値（複数可）を格納するためのメモリアドレス（複数可）を記憶媒体において決定する。
2021516382.tif 000002
【特許請求の範囲】
【請求項１】
システムであって、
画像についての機械学習演算を機械学習モデルおよび前記画像の画素値を使って行うように構成された処理部を備え、前記機械学習モデルは、特定の次元の画像を処理するように構成され、前記システムは、さらに、
前記画像の画素値を格納するように構成された記憶媒体と、
１つ以上のハードウェアプロセッサを含むメモリアドレス演算ユニットとを備え、前記１つ以上のハードウェアプロセッサは、
画像の画像データを受け付け、前記画像データは、前記画像の次元を規定し、前記画像の次元は、水平画素次元および垂直画素次元を規定し、前記水平画素次元は、前記画像の水平次元に沿った画素の数であり、前記垂直画素次元は、前記画像の垂直次元に沿った画素の数であり、前記１つ以上のハードウェアプロセッサは、さらに、
前記画像の次元が前記特定の次元に一致しないと判断し、
前記画像の次元が前記特定の次元に一致しないと判断することに応答して、
前記画像の次元および前記特定の次元に基づいて、前記画像の水平画素ストライドおよび垂直画素ストライドを決定し、
前記水平画素ストライドおよび前記垂直画素ストライドを使用して、変換されたバージョンの入力画像の複数の画素座標を決定し、各画素座標は、垂直座標および水平座標を含み、前記１つ以上のハードウェアプロセッサは、さらに、
前記複数の画素座標の各々について、画素座標についての前記機械学習モデルへの入力を生成するために使われることになる１つ以上の画素値を格納するための１つ以上のメモリアドレスを前記記憶媒体において決定し、前記画素座標ごとの１つ以上のメモリアドレスは、前記画素座標の垂直座標および水平座標に基づいており、前記１つ以上のハードウェアプロセッサは、さらに、
各メモリアドレスを前記処理部に出力するように構成される、システム。
【請求項２】
前記処理部は、各メモリアドレスを使って前記メモリアドレスに格納された画素値にアクセスし、前記メモリアドレスに格納された画素値に基づいて機械学習演算を行う、請求項１に記載のシステム。
【請求項３】
前記メモリアドレス演算ユニットは、
前記水平座標の現在値を格納するための１つ以上の第１のハードウェア記憶回路と、
前記垂直座標の現在値を格納するための１つ以上の第２のハードウェア記憶回路とを含み、
前記１つ以上のハードウェアプロセッサは、
初期の水平座標と初期の垂直座標とを含む初期の画素座標を求めること、
前記初期の水平座標を前記１つ以上の第１のハードウェア記憶回路に格納すること、
前記初期の垂直座標を前記１つ以上の第２のハードウェア記憶回路に格納すること、
前記画像の水平画素次元をトラバースするために使用される第１ループの繰り返しごとに、前記第１ループの繰り返しの後に前記水平画素ストライドを前記水平座標の現在値に加算することで前記水平座標の現在値を更新すること、
前記画像の垂直画素次元をトラバースするために使用される第２ループの繰り返しごとに、前記第１第２ループの繰り返しの後に前記垂直画素ストライドを前記垂直座標の現在値に加算することで前記垂直座標の現在値を更新すること、
によって、前記画像の複数の画素座標を決定する、請求項１または２に記載のシステム。
【請求項４】
画素座標ごとに決定された前記メモリアドレスは、前記画素座標の最近傍画素の画素値を格納するための前記記憶媒体における位置に対応し、各最近傍画素の前記画素値は、前記機械学習モデルへの入力として前記処理部によって使用される、請求項３に記載のシステム。
【請求項５】
画素座標についての前記機械学習モデルへの入力を生成するために使われることになる前記１つ以上の画素値を格納するための前記１つ以上のメモリアドレスを前記記憶媒体において決定することは、
前記第１ループまたは前記第２ループの繰り返しごとに、
前記１つ以上の第１のハードウェア記憶回路に格納された前記水平座標の現在値を特定することと、
前記１つ以上の第２のハードウェア記憶回路に格納された前記垂直座標の現在値を特定することと、
前記水平座標の現在値および前記垂直座標の現在値に基づいて、前記水平座標の現在値および前記垂直座標の現在値に対応する前記画素座標のメモリアドレスを決定することとを含む、請求項３または４に記載のシステム。
【請求項６】
前記水平座標の現在値および前記垂直座標の現在値に対応する前記画素座標のメモリアドレスを決定することは、
前記水平座標の現在値と第１次元乗数との積に基づいて第１の部分アドレス値を決定することと、
前記垂直座標の現在値と第２次元乗数との積に基づいて第２の部分アドレス値を決定することと、
前記第１の部分アドレス値と前記第２の部分アドレス値との合計を求めることによって前記水平座標の現在値および前記垂直座標の現在値に対応する前記画素座標のメモリアドレスを決定することとを含む、請求項５に記載のシステム。
【請求項７】
前記水平座標の現在値および前記垂直座標の現在値に対応する前記画素座標のメモリアドレスは、前記第１の部分アドレス値と前記第２の部分アドレス値と、基底メモリアドレスとの合計に等しい、請求項６に記載のシステム。
【請求項８】
前記第１ループは前記第２ループ内に入れ子にされている、または、前記第２ループは前記第１ループ内に入れ子にされている、請求項３〜７のいずれか１項に記載のシステム。
【請求項９】
画素座標についての前記機械学習モデルへの入力を生成するために使われることになる前記１つ以上の画素値を格納するための前記１つ以上のメモリアドレスを前記記憶媒体において決定することは、前記画素座標の画素値のバイリニア補間で使うための４つの画素座標の各々のメモリアドレスを決定することを含み、前記４つの画素座標の各々のメモリアドレスを決定することは、
前記第１ループまたは前記第２ループの繰り返しごとに、
前記１つ以上の第１のハードウェア記憶回路に格納された前記水平座標の現在値を特定することと、
前記１つ以上の第２のハードウェア記憶回路に格納された前記垂直座標の現在値を特定することと、
垂直オフセット値を特定することと、
水平オフセット値を特定することと、
前記４つの画素座標のうちの第１の画素座標について、前記第１の画素座標の第１の画素値を格納するための第１メモリアドレスを、前記水平座標の現在値と前記垂直座標の現在値との合計に基づいて決定することと、
前記４つの画素座標のうちの第２の画素座標について、前記第２の画素座標の第２の画素値を格納するための第２メモリアドレスを、前記水平座標の現在値と、前記垂直座標の現在値と、前記垂直オフセット値との合計に基づいて決定することと、
前記４つの画素座標のうちの第３の画素座標について、前記第３の画素座標の第３の画素値を格納するための第３メモリアドレスを、前記水平座標の現在値と、前記垂直座標の現在値と、前記水平オフセット値との合計に基づいて決定することと、
前記４つの画素座標のうちの第４の画素座標について、前記第４の画素座標の第４の画素値を格納するための第４メモリアドレスを、前記水平座標の現在値と、前記垂直座標の現在値と、前記垂直オフセット値と、前記水平オフセット値との合計に基づいて決定することとを含む、請求項３〜８のいずれか１項に記載のシステム。
【請求項１０】
前記垂直オフセット値は、少なくとも前記画像の水平画素の数に基づき、前記水平オフセット値は１に等しい、請求項９に記載のシステム。
【請求項１１】
前記１つ以上のハードウェアプロセッサは、前記４つの画素座標の各々のバイリニア補間の重みを決定し、各重みを前記処理部に出力し、
前記処理部は、前記４つの画素座標の各々にある前記画素値および前記４つの画素座標の各々の重みを使って前記機械学習モデルの入力画素値を決定する、請求項９または１０に記載のシステム。
【請求項１２】
前記４つの画素座標の各々の重みは、前記画素座標の水平座標の小数部分および前記画素座標の垂直座標の小数部分に基づく、請求項１１に記載のシステム。
【請求項１３】
前記処理部は、
前記複数の画素座標の各々について、前記画素座標の１つ以上のメモリアドレスに格納された画素値から１つ以上の色値を決定することによって前記機械学習モデルへの入力を生成するように構成され、
生成された前記入力を前記機械学習モデルを使って処理し、機械学習出力を生成するように構成される、請求項１〜１２のいずれか１項に記載のシステム。
【請求項１４】
１つ以上のハードウェアプロセッサによって実行される方法であって、前記方法は、
画像の画像データを受け付けるステップを含み、前記画像データは、前記画像の次元を規定し、前記画像の次元は、水平画素次元および垂直画素次元を規定し、前記水平画素次元は、前記画像の水平次元に沿った画素の数であり、前記垂直画素次元は、前記画像の垂直次元に沿った画素の数であり、前記方法は、さらに、
前記画像の次元が、機械学習モデルが処理するように構成された画像の特定の次元に一致しないと判断するステップと、
前記画像の次元が前記特定の次元に一致しないと判断することに応答して、
前記画像の次元および前記特定の次元に基づいて、前記画像の水平画素ストライドおよび垂直画素ストライドを決定するステップと、
前記水平画素ストライドおよび前記垂直画素ストライドを使用して、変換されたバージョンの入力画像の複数の画素座標を決定するステップとを含み、各画素座標は、垂直座標および水平座標を含み、前記方法は、さらに、
前記複数の画素座標の各々について、画素座標についての前記機械学習モデルへの入力を生成するために使われることになる１つ以上の画素値を格納するための１つ以上のメモリアドレスを記憶媒体において決定するステップを含み、前記画素座標ごとのメモリアドレスは、前記画素座標の垂直座標および水平座標に基づいており、前記方法は、さらに、
前記機械学習モデルを使って画像についての機械学習演算を行うように構成された処理部に各メモリアドレスを出力するステップを含む、方法。
【請求項１５】
前記処理部は、各メモリアドレスを使って前記メモリアドレスに格納された画素値にアクセスし、前記メモリアドレスに格納された画素値に基づいて機械学習演算を行う、請求項１４に記載の方法。
【請求項１６】
前記画像の複数の画素座標を決定するステップは、
初期の水平座標と初期の垂直座標とを含む初期の画素座標を求めるステップと、
前記初期の水平座標を１つ以上の第１のハードウェア記憶回路に格納するステップと、
前記初期の垂直座標を１つ以上の第２のハードウェア記憶回路に格納するステップと、
前記画像の水平画素次元をトラバースするために使用される第１ループの繰り返しごとに、前記第１ループの繰り返しの後に前記水平画素ストライドを前記水平座標の現在値に加算することによって前記水平座標の現在値を更新し、前記垂直座標の現在値に更新する度に、前記水平座標の現在値を前記１つ以上の第１のハードウェア記憶回路に格納するステップと、
前記画像の垂直画素次元をトラバースするために使用される第２ループの繰り返しごとに、前記第１第２ループの繰り返しの後に前記垂直画素ストライドを前記垂直座標の現在値に加算することによって前記垂直座標の現在値を更新し、前記垂直座標の現在値に更新する度に、前記垂直座標の現在値を前記１つ以上の第２のハードウェア記憶回路に格納するステップとを含む、請求項１４または１５に記載の方法。
【請求項１７】
画素座標ごとに決定された前記メモリアドレスは、前記画素座標の最近傍画素の画素値を格納するための前記記憶媒体における位置に対応し、各最近傍画素の前記画素値は、前記機械学習モデルへの入力として前記処理部によって使用される、請求項１６に記載の方法。
【請求項１８】
装置であって、
画像の水平座標の現在値を格納するための１つ以上の第１のハードウェア記憶回路と、
画像の垂直座標の現在値を格納するための１つ以上の第２のハードウェア記憶回路とを備え、
１つ以上のハードウェアプロセッサは、
前記画像の画像データを受け付け、前記画像データは、前記画像の次元を規定し、前記画像の次元は、水平画素次元および垂直画素次元を規定し、前記水平画素次元は、前記画像の水平次元に沿った画素の数であり、前記垂直画素次元は、前記画像の垂直次元に沿った画素の数であり、前記１つ以上のハードウェアプロセッサは、さらに、
前記画像の次元が、機械学習モデルが処理するように構成された画像の特定の次元に一致しないと判断し、
前記画像の次元が前記特定の次元に一致しないと判断することに応答して、
前記画像の次元および前記特定の次元に基づいて、前記画像の水平画素ストライドおよび垂直画素ストライドを決定し、
前記水平画素ストライドおよび前記垂直画素ストライドを使用して、変換されたバージョンの入力画像の複数の画素座標を決定し、各画素座標は、垂直座標および水平座標を含み、前記画像の次元が前記特定の次元に一致しないと判断することに応答して、さらに、
前記水平座標を前記１つ以上の第１のハードウェア記憶回路に格納し、
前記垂直座標を１つ以上の第２のハードウェア記憶回路に格納し、前記１つ以上のハードウェアプロセッサは、さらに、
前記複数の画素座標の各々について、画素座標についての前記機械学習モデルへの入力を生成するために使われることになる１つ以上の画素値を格納するための１つ以上のメモリアドレスを記憶媒体において決定し、前記画素座標ごとのメモリアドレスは、前記画素座標の垂直座標および水平座標に基づいており、前記１つ以上のハードウェアプロセッサは、さらに、
前記機械学習モデルを使って画像についての機械学習演算を行うように構成された処理部に各メモリアドレスを出力するように構成される、装置。
【請求項１９】
前記処理部は、各メモリアドレスを使って前記メモリアドレスに格納された画素値にアクセスし、前記メモリアドレスに格納された画素値に基づいて機械学習演算を行う、請求項１８に記載の装置。
【請求項２０】
前記画像の複数の画素座標を決定することは、
初期の水平座標と初期の垂直座標とを含む初期の画素座標を求めることと、
前記初期の水平座標を前記１つ以上の第１のハードウェア記憶回路に格納することと、
前記初期の垂直座標を前記１つ以上の第２のハードウェア記憶回路に格納することと、
前記画像の水平画素次元をトラバースするために使用される第１ループの繰り返しごとに、前記第１ループの繰り返しの後に前記水平画素ストライドを前記水平座標の現在値に加算することによって前記水平座標の現在値を更新し、前記垂直座標の現在値に更新する度に、前記水平座標の現在値を前記１つ以上の第１のハードウェア記憶回路に格納することと、
前記画像の垂直画素次元をトラバースするために使用される第２ループの繰り返しごとに、前記第１第２ループの繰り返しの後に前記垂直画素ストライドを前記垂直座標の現在値に加算することによって前記垂直座標の現在値を更新し、前記垂直座標の現在値に更新する度に、前記垂直座標の現在値を前記１つ以上の第２のハードウェア記憶回路に格納することとを含む、請求項１８または１９に記載の装置。
【発明の詳細な説明】
【背景技術】
【０００１】
背景
機械学習を利用して画像を分類することができる。たとえば、ニューラルネットワークを使って画像を画像の視覚的特徴に基づいて分類することができる。ニューラルネットワークとは、受け付けた入力（たとえば、画像の特徴）に対する出力（たとえば、画像の分類結果）を生成する、１つ以上の層を採用した機械学習モデルである。いくつかのニューラルネットワークは、外層に加えて１つ以上の隠れ層を含む。ネットワークにおいて、各隠れ層の出力は、次の層、すなわち、次の隠れ層またはネットワークの出力層への入力として用いられる。ネットワークの各層は、一連のパラメータの現在値に従って、受け付けた入力から出力を生成する。
【０００２】
いくつかのニューラルネットワークは、１つ以上の畳み込みニューラルネットワーク層を含む。各畳み込みニューラルネットワーク層は、関連する一連のカーネルを有する。カーネルは、重み入力の行列構造として表され得る。各畳み込み層は、これらのカーネルを用いて当該層への入力を処理する。また、層への一連の入力は、行列構造として表され得る。
【０００３】
ニューラルネットワークは、特定の形状の画像を受け付けるように構成される。しかしながら、ニューラルネットワークを使って分類されるいくつかの画像は、設定された形状とは異なる形状を有する場合がある。
【発明の概要】
【課題を解決するための手段】
【０００４】
概要
本明細書では、画像変換のための画素座標と、変換画像データを格納するためのメモリアドレスとを決定する特定用途向け演算ユニットに関する技術を説明する。
【０００５】
一般に、本明細書に記載の主題の１つの革新的な態様は、画像についての機械学習演算を機械学習モデルおよびこれらの画像の画素値を使って行うように構成された処理部を備えるシステムに組み入れることができる。機械学習モデルは、特定の次元の画像を処理するように構成され得る。システムは、画像の画素値を格納するように構成された記憶媒体と、１つ以上のハードウェアプロセッサを含むメモリアドレス演算ユニットとを備え得る。１つ以上のハードウェアプロセッサは、画像の画像データを受け付けるように構成され得る。画像データは、画像の次元を規定し得る。画像の次元は、水平画素次元と、垂直画素次元とを規定し得る。水平画素次元は、画像の水平次元に沿った画素の数であり、垂直画素次元は、画像の垂直次元に沿った画素の数である。
【０００６】
１つ以上のハードウェアプロセッサは、画像の次元が特定の次元に一致しないと判断し、画像の次元が特定の次元に一致しないと判断することに応答して、画像の次元および特定の次元に基づいて、画像の水平画素ストライド（stride）および垂直画素ストライドを決定し、水平画素ストライドおよび垂直画素ストライドを使用して、変換されたバージョンの入力画像の画素座標を決定するように構成され得る。各画素座標は、垂直座標および水平座標を含む。画素ストライドは、元画像の次元を特定の次元に変換するために用いられるファクターである。
【０００７】
画素座標の各々について、１つ以上のハードウェアプロセッサは、複数の画素座標の各々について、画素座標についての機械学習モデルへの入力を生成するために使われることになる１つ以上の画素値を格納するための１つ以上のメモリアドレスを記憶媒体において決定し、各メモリアドレスを処理部に出力するように構成され得る。画素座標ごとの１つ以上のメモリアドレスは、画素座標の垂直座標および水平座標に基づく。
【０００８】
これらのおよびその他の実装形態は、各々、次の特徴のうちの１つ以上を任意で含み得る。いくつかの態様では、処理部は、各メモリアドレスを使ってメモリアドレスに格納された画素値にアクセスし、メモリアドレスに格納された画素値に基づいて機械学習演算を行う。
【０００９】
いくつかの態様では、メモリアドレス演算ユニットは、水平座標の現在値を格納するための１つ以上の第１のハードウェア記憶回路と、垂直座標の現在値を格納するための１つ以上の第２のハードウェア記憶回路とを含む。１つ以上のプロセッサは、初期の水平座標と初期の垂直座標とを含む初期の画素座標を求め、初期の水平座標を１つ以上の第１のハードウェア記憶回路に格納し、初期の垂直座標を１つ以上の第２のハードウェア記憶回路に格納し、画像の水平画素次元をトラバースするために使用される第１ループの繰り返しごとに、第１ループの繰り返しの後に水平画素ストライドを水平座標の現在値に加算することで水平座標の現在値を更新し、画像の垂直画素次元をトラバースするために使用される第２ループの繰り返しごとに、第１第２ループの繰り返しの後に垂直画素ストライドを垂直座標の現在値に加算することで垂直座標の現在値を更新すること、によって、画像の画素座標を決定し得る。
【００１０】
いくつかの態様では、画素座標ごとに決定されたメモリアドレスは、画素座標の最近傍画素の画素値を格納するための記憶媒体における位置に対応する。各最近傍画素の画素値は、機械学習モデルへの入力として処理部によって使用され得る。
【００１１】
いくつかの態様では、画素座標についての機械学習モデルへの入力を生成するために使われることになる１つ以上の画素値を格納するための１つ以上のメモリアドレスを記憶媒体において決定することは、第１ループまたは第２ループの繰り返しごとに、１つ以上の第１のハードウェア記憶回路に格納された水平座標の現在値を特定することと、１つ以上の第２のハードウェア記憶回路に格納された垂直座標の現在値を特定することと、水平座標の現在値および垂直座標の現在値に基づいて、水平座標の現在値および垂直座標の現在値に対応する画素座標のメモリアドレスを決定することとを含む。
【００１２】
いくつかの態様では、水平座標の現在値および垂直座標の現在値に対応する画素座標のメモリアドレスを決定することは、水平座標の現在値と第１次元乗数との積に基づいて第１の部分アドレス値を決定することと、垂直座標の現在値と第２次元乗数との積に基づいて第２の部分アドレス値を決定することと、第１の部分アドレス値と第２の部分アドレス値との合計を求めることによって水平座標の現在値および垂直座標の現在値に対応する画素座標のメモリアドレスを決定することとを含む。
【００１３】
いくつかの態様では、水平座標の現在値および垂直座標の現在値に対応する画素座標のメモリアドレスは、第１の部分アドレス値と第２の部分アドレス値と、基底メモリアドレスとの合計に等しい。第１ループは第２ループ内に入れ子にされている、または、第２ループは第１ループ内に入れ子にされている。
【００１４】
いくつかの態様では、画素座標についての機械学習モデルへの入力を生成するために使われることになる１つ以上の画素値を格納するための１つ以上のメモリアドレスを記憶媒体において決定することは、画素座標の画素値のバイリニア補間で使うための４つの画素座標の各々のメモリアドレスを決定することを含む。これは、第１ループまたは第２ループの繰り返しごとに、１つ以上の第１のハードウェア記憶回路に格納された水平座標の現在値を特定することと、１つ以上の第２のハードウェア記憶回路に格納された垂直座標の現在値を特定することと、垂直オフセット値を特定することと、水平オフセット値を特定することと、４つの画素座標のうちの第１の画素座標について、第１の画素座標の第１の画素値を格納するための第１メモリアドレスを、水平座標の現在値と垂直座標の現在値との合計に基づいて決定することと、４つの画素座標のうちの第２の画素座標について、第２の画素座標の第２の画素値を格納するための第２メモリアドレスを、水平座標の現在値と、垂直座標の現在値と、垂直オフセット値との合計に基づいて決定することと、４つの画素座標のうちの第３の画素座標について、第３の画素座標の第３の画素値を格納するための第３メモリアドレスを、水平座標の現在値と、垂直座標の現在値と、水平オフセット値との合計に基づいて決定することと、４つの画素座標のうちの第４の画素座標について、第４の画素座標の第４の画素値を格納するための第４メモリアドレスを、水平座標の現在値と、垂直座標の現在値と、垂直オフセット値と、水平オフセット値との合計に基づいて決定することとを含む。
【００１５】
いくつかの態様では、垂直オフセット値は、少なくとも画像の水平画素の数に基づき、水平オフセット値は１に等しい。１つ以上のプロセッサは、４つの画素座標の各々のバイリニア補間の重みを決定し、各重みを処理部に出力し得る。処理部は、４つの画素座標の各々にある画素値および４つの画素座標の各々の重みを使って機械学習モデルの入力画素値を決定し得る。４つの画素座標の各々の重みは、画素座標の水平座標の小数部分および画素座標の垂直座標の小数部分に基づき得る。
【００１６】
いくつかの態様では、処理部は、画素座標の各々について、１つ以上のメモリアドレスに格納された画素座標の画素値から１つ以上の色値を決定することによって機械学習モデルへの入力を生成し、生成された入力を機械学習モデルを使って処理して機械学習出力を生成するように構成される。
【００１７】
本明細書に記載の主題は、次の利点のうちの１つ以上を実現するような特定の実施の形態で実現され得る。変換画像の画素座標と画素座標の画素値を格納するためのメモリアドレスとを機械学習プロセッサによって決定することにより、機械学習モデルが処理するように構成された特定の形状ではない画像についての機械学習演算を行う際の待ち時間が減る。たとえば、機械学習プロセッサは、変換するために画像を別のコンピューティングシステムに送り返さなくても、当該画像をチップ上で変換することができる。また、これにより、別のコンピューティングシステムが変換を実行することを待たずに機械学習プロセッサが画像データの処理を継続できるので、プロセッサの処理スループットも向上する。
【００１８】
単純な計算を使った少ない命令を用いて深く入れ子になったループを繰り返すことができる特定用途向け演算ユニットによって、より高いスループットと少ない待ち時間で画像をサイズ変更することが可能になる。演算ユニットのレジスタは、画像の画素座標の追跡と、画素データのメモリアドレスを決定するために使われるメモリアドレス値の追跡のために使用され得る。メモリアドレス値は、レジスタに格納された値に基づいた単純な演算を当てはめることによってすぐに特定することができる。単純な演算を使って、および機械学習演算を行う処理部とは別個のプロセッサによって画素値のメモリアドレス（および、任意で、それらの対応する重み）を決定することにより、処理部の演算サイクル数を減らすことができ、機械学習演算をさらに行えるよう、処理部の処理能力を増やすことができる。
【００１９】
画素座標値を整数部分と小数部分とに分けることによって、同じ小数値を使ってバイリニア補間用の重みと画素値のメモリアドレスとを決定することができるようになる。これにより、機械学習プロセッサのメモリストレージ要件の低減、実行される演算の数の低減（たとえば、重みを決定するために画素同士の距離を別個に演算する必要がなくなる）、および重みを決定するために必要な命令の数の低減が可能になる。当該命令数の低減によって、メモリストレージ要件がさらに抑えられる。
【００２０】
本態様およびその他の態様のその他の実装形態は、対応するシステムと、方法と、コンピュータプログラムとを含み、これらは、コンピュータ記憶装置上で符号化された、方法の動作を実行するように構成される。システム上にインストールされた、動作時にシステムに当該動作を実行させるソフトウェア、ファームウェア、ハードウェア、またはそれらの組合せにより、１つ以上のコンピュータから成るシステムを同様に構成することができる。命令を有することにより１つ以上のコンピュータプログラムを同様に構成することができる。当該命令は、データ処理装置によって実行されると、装置に当該動作を実行させる。
【００２１】
本明細書に記載の発明の主題の１つ以上の実装形態の詳細を、添付の図面および以下の説明に記載する。発明の主題のその他の潜在的特徴、態様、および利点は、説明、図面、および特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【００２２】
【図１】演算システムの例を示すブロック図である。
【図２】画像のバイリニア補間を説明する図である。
【図３】画像データのメモリアドレスを決定するための工程の例を示すフロー図である。
【図４】画像データのメモリアドレスを決定するための工程の別の例を示すフロー図である。
【図５】画像データのメモリアドレスと、バイリニア補間用の重みとを決定するための工程の例を示すフロー図である。
【発明を実施するための形態】
【００２３】
様々な図面における同じ参照番号および名称は、同じ要素を示す。
詳細な説明
一般に、ループの入れ子構造を用いてＮ次元の規則的な行列が処理される場合がある。Ｎ次元の規則的な行列は、以下、「テンソル」と称する。各ループは、Ｎ次元テンソルの各次元をトラバースする役割を担い得る。多次元テンソルは、行列であってもよく、多次元行列であってもよい。たとえば、２次元テンソルは行列であるが、３次元テンソルは複数の２次元行列から構成される３次元行列である。Ｎ次元テンソルの各次元は、１つ以上の要素を含んでもよい。各要素は、それぞれデータ値を格納してもよい。たとえば、テンソルは、プログラムにおける変数であってもよい。変数は、３つの次元を有し得る。第１次元は、３００要素分の長さを有してもよく、第２次元の長さは、１０００要素分であってもよく、第３次元の長さは、２０要素分であってもよい。もちろん、各次元において、その他の要素数が可能である。
【００２４】
入れ子ループにおいてテンソルをトラバースすることは、要素のメモリアドレス値の演算を行って、当該要素の対応するデータ値をロードまたは格納することを含み得る。ｆｏｒループがループの入れ子構造の例であり、ここでは、３つのループインデックス変数（たとえば、ｉ、ｊ、およびｋ）によって追跡される３つのループが入れ子になっており、３次元テンソルをトラバースする。ニューラルネットワークでは、テンソルに関連する１つ以上のドット積演算において要素の値が用いられてもよい。たとえば、要素の値は、対応するパラメータまたは重みで乗算されてもよい。入れ子構造のｆｏｒループを用いてテンソルの要素が順番にトラバースされて、要素がアクセスされ、当該要素の値を用いた１つ以上の演算が実行されてもよい。引き続き３次元テンソルの例を用いると、変数ｉによって追跡されるループを外側のｆｏｒループを用いてトラバースしてもよく、変数ｊによって追跡されるループを中間のｆｏｒループを用いてトラバースしてもよく、変数ｋによって追跡されるループを内側のｆｏｒループを用いてトラバースしてもよい。この例では、最初にアクセスされる要素は（ｉ＝０、ｊ＝０、ｋ＝０）であってもよく、２番目の要素は（ｉ＝０、ｊ＝０、ｋ＝１）であってもよく、以下同様である。上述したように、テンソルトラバーサルユニットを使用して、処理部が要素の値にアクセスし、当該要素の値を用いて１つ以上の演算を実行できるよう、入れ子ループを使用して要素ごとのメモリアドレスを順番に決定することができる。
【００２５】
場合によっては、外側ループインデックス変数を使った内側ループのループ範囲の設定など、ループ範囲条件をプロセッサが実行する必要がある場合がある。たとえば、入れ子ループの最も内側のループを出るかどうかを決定する際、プログラムは、入れ子ループの最も内側のループのループインデックス変数の現在値を、最も外側のループのループインデックス変数の現在値と比較してもよい。
【００２６】
これらのタスクは、分岐命令および整数演算命令など、かなりの数の命令を必要とする可能性がある。各ループ範囲が小さく、ループの繰り返し回数が多い場合、演算は、全体の実行時間のかなりの部分を要し、全体のパフォーマンスを深刻に低下させてしまう可能性がある。プロセッサのためのハードウェアテンソルトラバーサルユニットは、ループのトラバースおよびアドレス生成のすべてを行い、機械学習演算を実行するなどその他の作業を行うことができるようにプロセッサの数値演算ユニットを解放することによって、プロセッサの演算処理能力を向上させてもよい。
【００２７】
テンソルは、画像の画像値、たとえば、ニューラルネットワークまたはその他の機械学習モデルによって処理されている画像の画素の色値を含み得る。たとえば、機械学習モデルは、画像を処理し、当該画像を１つ以上のオブジェクトクラスからオブジェクトを描画している画像として分類するように構成されてもよい。別の例として、機械学習モデルは、画像を処理し、オブジェクトを描画する画像における位置を特定するように構成されてもよい。さらに別の例として、機械学習モデルは、画像を処理し、画像の数値表現、たとえば、画像のコンテンツについての情報を伝える数値のベクトルを生成するように構成されてもよい。画像値は、画像の１つ以上の画素の値を含み得る。本明細書において、画素の値は、画素値と称され、画素の色を表す値（たとえば、グレースケール値またはＲＧＢ（赤、緑、もしくは青）値）を含み得る。ＲＧＢカラーの場合、テンソルは、赤値、緑値、および青値を画素ごとに含み得る。
【００２８】
上記のように、ニューラルネットワークは、特定の形状の画像、たとえば、特定の水平次元と垂直次元とを有する画像を受け付けるように構成されてもよい。予想される入力形状に一致しない形状の画像の場合、当該画像は、ニューラルネットワークによって処理され得る前に予想される入力形状を有するよう、修正される必要がある。
【００２９】
テンソルトラバーサルユニットは、予想される入力形状に画像を変換する画像変換処理において用いられる画素座標を決定することができる。また、テンソルトラバーサルユニットは、機械学習演算を実行する処理部が画素座標の対応する画素データにアクセスするまたは当該画素データを格納できるよう、変換画像の画素ごとに１つ以上のメモリアドレス値を演算する。適切な画素座標を決定する能力がない場合、テンソルトラバーサルユニットは、画像データを処理部または別のコンピューティングシステムに送り返して、メモリアドレス値を演算する前に画像変換を実行しなければならない。これらの特徴では、画像データをホストに送り返すことに関連した処理待ち時間が低減し、テンソルトラバーサルユニットおよび処理部の演算スループットが向上する。また、テンソルトラバーサルユニットの柔軟性も向上する。
【００３０】
図１は、演算システム１０２の例を示すブロック図である。一般に、コンピューティングシステム１００は、ホスト１３０から受け付けた入力画像１３２を処理し、ホスト１３０に提供される出力１３４を生成する。コンピューティングシステム１００は、線形代数演算を行うように構成されてもよい。たとえば、コンピューティングシステム１００は、機械学習モデル、たとえば、ニューラルネットワークを用いて機械学習演算を行うように構成されてもよい。
【００３１】
コンピューティングシステム１００は、処理部１１４と、記憶媒体１１６と、テンソルトラバーサルユニット１２０とを備える。処理部１０２は、入力画像１４２の画像データに対する演算を行って出力１４４を生成する１つ以上のプロセッサを含んでもよい。出力１４４は、入力画像１４２を特徴付ける、たとえば、画像データおよび機械学習モデルに基づいて、１つ以上のカテゴリに属しているオブジェクトの画像を含んでいるとして入力画像を分類するといった、分類結果またはその他の出力であってもよい。出力１４４は、別のコンピューティングシステム、たとえば、ユーザデバイスへの、受け付けた要求に応答した出力であり得る。
【００３２】
記憶媒体１０４は、コンピューティングシステム１００内の情報を格納する。いくつかの実装形態では、記憶媒体１０４は、１つまたは複数の揮発性記憶装置である。いくつかのその他の実装形態では、記憶媒体１０４は、１つまたは複数の不揮発性記憶装置である。また、記憶媒体１０４は、フロッピー（登録商標）ディスク装置、ハードディスク装置、光ディスク装置、またはテープ装置、フラッシュメモリもしくはその他の類似の固体メモリ装置、またはストレージエリアネットワークもしくはその他の構成に含まれる装置を含む装置のアレイなど、別の形態のコンピュータ読み取り可能な媒体であってもよい。
【００３３】
テンソルトラバーサルユニット１２０は、特定用途向け集積回路として実現され得る。テンソルトラバーサルユニット１２０は、本明細書において、メモリアドレス演算ユニットとも称される。テンソルトラバーサルユニット１２０は、画像データを格納するためのメモリアドレスを決定するように構成された１つ以上のプロセッサ１２２を含み得る。また、テンソルトラバーサルユニット１２０は、数値演算ユニット１２４と、記憶回路１２６とを含む。数値演算ユニット１２４は、１つ以上の演算論理装置（ＡＬＵ）および／または１つ以上の加算器を含み得る。たとえば、数値演算ユニット１２４は、１つ以上のハードウェアＡＬＵおよび／または１つ以上のハードウェア加算器を含み得る。数値演算ユニット１２４は、画像データを格納するためのメモリアドレスを決定するように構成される。記憶回路１２６は、ハードウェアメモリストレージ、たとえば、レジスタを含む。
【００３４】
いくつかの実装形態では、テンソルトラバーサルユニット１２０は、画像の画素座標を、記憶媒体１１６に画素値を格納するためのメモリアドレスに変換する。たとえば、テンソルトラバーサルユニット１２０は、画素座標のセットを１次元のアドレス空間に変換し得る。画像の画素の画素座標は、垂直座標と水平座標とを含み得る。テンソルトラバーサルユニット１２０は、メモリアドレスを画素座標の垂直座標と水平座標との組合せ（たとえば、線型結合）にすることによってこの変換を行い得る。上述したように、画素値は、画素の色を表す値（たとえば、画素のグレースケール値またはＲＧＢ値）を含み得る。
【００３５】
テンソルトラバーサルユニット１２０は、画素座標ごとに、画素の色を表す色値（複数可）の１つ以上のメモリアドレスを決定し得る。たとえば、画像がグレースケール値を用いて表されている場合、テンソルトラバーサルユニットは、画素ごとに、画素のグレースケール値を格納するための１つのメモリアドレスを決定し得る。画像がＲＧＢ値を用いて表されている場合、テンソルトラバーサルユニットは、画素ごとに、すべての３つの色値を格納するための１つのメモリアドレスを決定し得る。この例では、各メモリアドレスは、４バイトの記憶場所を参照してもよく、無視される予備のバイトとともに、色値ごとに１バイトが利用されてもよい。ＲＧＢ色値が使われるいくつかの実装形態では、テンソルトラバーサルユニット１２０は、画素ごとに、画素の赤値を格納するための第１メモリアドレスと、画素の緑値を格納するための第２メモリアドレスと、画素の青値を格納するための第３メモリアドレスとを決定し得る。
【００３６】
また、テンソルトラバーサルユニット１２０は、画像変換処理のための画素座標を決定することができる。画像変換処理では、画像を、当該画像を処理するために処理部１１４によって用いられる機械学習モデルの特定の次元に変換する。たとえば、特定の次元よりも大きい画像は、当該特定の次元に縮小され得る。同様に、特定の次元よりも小さい画像は、当該特定の次元に拡大され得る。
【００３７】
テンソルトラバーサルユニット１２０は、最近傍法および／またはバイリニア法技術を使って拡大または縮小するための画素座標を決定することができる。いずれの技術の場合でも、テンソルトラバーサルユニット１２０は、変換画像、すなわち、機械学習モデルによって処理される画像の画素ごとに画素座標を決定することができる。本明細書において、変換画像の画素は、変換画素と称される。
【００３８】
テンソルトラバーサルユニットは、画像を変換するために最近傍補間が使われるモードと、バイリニア法が使われるモードとを切り替えることができる。たとえば、ユーザは、コンピューティングシステム１０２のユーザインターフェースを利用して、最近傍法またはバイリニア法のいずれかを選択することができる。処理部１１４は、当該選択を規定するデータを受け付けて、当該データをテンソルトラバーサルユニット１２０に提供し得る。これに応答して、テンソルトラバーサルユニット１２０は、選択された変換技術を使い得る。
【００３９】
変換画素ごとに、テンソルトラバーサルユニット１２０は、画素値（複数可）を格納するための記憶媒体１１６の１つ以上のメモリアドレスを決定し得る。最近傍補間が使われている場合、テンソルトラバーサルユニット１２０は、変換画素ごとに、変換画素の画素座標の位置に最も近い入力画像１４２の画素の画素値（複数可）を格納するためのメモリアドレスを決定し得る。たとえば、テンソルトラバーサルユニット１２０は、画素座標の位置に最も近い画素について、当該最も近い画素の色を表すために使われる１つ以上の色値を格納するためのメモリアドレスを決定し得る。
【００４０】
バイリニア法実装が使われている場合、テンソルトラバーサルユニット１２０は、入力画像１４２における画素座標の位置に最も近い４画素のメモリアドレスを決定することができる。たとえば、テンソルトラバーサルユニット１２０は、４画素の各々について、画素の色を表すために用いられる１つ以上の色値を格納するためのそれぞれのメモリアドレスを決定し得る。
【００４１】
テンソルトラバーサルユニット１２０は、これらのメモリアドレスを処理部１１４に出力し得る。処理部１２０は、メモリアドレスに格納された画素値にアクセスし、当該画素値を用いて機械学習演算を行って、たとえば、入力画像１４２を分類し得る。バイリニア法が使われている場合、処理部１２０は、後述するが、色値（たとえば、赤値、緑値、または青値）ごとの４つの画素値にアクセスし、色値ごとに、変換画素の色を表す値を決定し得る。次に、処理部１２０は、変換画素ごとの色値（複数可）を用いて機械学習演算を実行し、機械学習出力、たとえば、出力１４４を生成し得る。次に、入力画像１４２を分類する要求に応答して、処理部１２０は、機械学習出力１４４をチップ外に、たとえば、ユーザデバイスに提供する。
【００４２】
画素座標を決定するというテンソルトラバーサルユニットの能力がない場合、テンソルトラバーサルユニット１２０は、機械学習モデルのための特定の次元を有さない画像を、変換のために処理部１１４またはホスト１３０に送り返さなければならない。画素座標およびメモリアドレスを決定する能力によって、機械学習演算を実行する際の待ち時間が低減し、コンピューティングシステム１０２の処理スループット（たとえば、テンソルトラバーサルユニット１２０および／または処理部１１４の処理スループット）が向上する。
【００４３】
テンソルトラバーサルユニット１２０は、ループの入れ子構造を使って画素座標および画素座標のメモリアドレスを決定することができる。ループの入れ子構造は、画像の水平画素次元をトラバースする第１ループと、画像の垂直画素次元をトラバースする第２ループとを含み得る。第１ループの繰り返しごとに、テンソルトラバーサルユニット１２０は、更新水平座標を決定する。第２ループの繰り返しごとに、テンソルトラバーサルユニット１２０は、更新垂直座標を決定する。第１ループを第２ループ内に入れ子にしたり、第２ループを第１ループ内に入れ子にしたりすることができる。
【００４４】
変換画素の画素座標を決定するために、テンソルトラバーサルユニット１２０は、初期の変換画素の入力画像１４２内の初期の画素座標を求め得る。たとえば、この初期の変換画素は、変換画像の左上の画素であってもよい。この例では、入力画像の左上隅の座標は、（ｘ＝０，ｙ＝０）であってもよく、画像の右下隅の座標は、（ｘ＝画像に含まれる水平画素の総数、ｙ＝画像に含まれる垂直画素の総数）であってもよい。ここで、ｘは、水平次元であり、ｙは、垂直次元である。入力画像と変換画像との相対的な大きさに応じて、入力画像内の初期の変換画素の画素座標は、（ｘ＝０．３７５，ｙ＝０．３７５）に設定されてもよい。
【００４５】
この例のために、第２ループが外側ループであり、第１ループが内側ループであり、ｙ  ｍａｊｏｒ、ｘ  ｍｉｎｏｒの順に左上隅から右下隅への順に画像をトラバースすると考える。このように、画像は、画像の最上行から始まって、一度に画素の水平方向の１行をトラバースし、画像の右下隅で終わる。
【００４６】
第１ループの繰り返しごとに、テンソルトラバーサルユニット１２０は、たとえば、水平ストライドの値を水平座標の以前の値に加算することによって水平座標を更新することができる。たとえば、初期の画素座標は、（０．３７５，０．３７５）であってもよく、水平ストライドは、１．３７５であってもよい。この例では、水平ストライドの値（１．３７５）を以前の水平座標に加算することによって、第２の画素座標は、（１．７５，０．３７５）になる。テンソルトラバーサルユニット１２０は、第１ループのループ範囲条件に到達するまで、たとえば、テンソルトラバーサル１２０が画像の行の終わりに到達するまで水平ストライドの値を以前の水平座標に加算することによって入力画像１４２の水平次元をトラバースし得る。第１ループのループ条件に到達する度に、テンソルトラバーサルユニット１２０は、水平座標をその初期値（０．３７５）にリセットし、垂直ストライドの値を以前の垂直座標に加算して画像の次の行にトラバースすることによって垂直画素座標を更新し得る。この例では、２行目の最初の画素座標は、（０．３７５，１．７５）となる。テンソルトラバーサル１２０は、第２ループのループ範囲に到達するまで、たとえば、変換画像の変換画素ごとの画素座標が決定されるまでこの工程を継続し得る。
【００４７】
決定された画素座標ごとに、テンソルトラバーサルユニット１２０は、画素座標の画素値（複数可）を格納するための１つ以上のメモリアドレスを決定し得る。最近傍法実装では、テンソルトラバーサルユニット１２０は、各変換画素の最近傍画素の画素値を格納するためのメモリアドレスを決定し得る。バイリニア法実装では、テンソルトラバーサルユニット１２０は、変換画素座標ごとに４つのメモリアドレス、変換画素座標の画素値を決定するために用いられる画素値の各々について１つのアドレスを決定し得る。
【００４８】
上記例で示したように、変換画素の画素座標は、小数コンポーネントを有する場合がある。テンソルトラバーサルユニット１２０は、固定小数点数を使って画素座標値を表し得る。いくつかの実装形態では、テンソルトラバーサルユニット１２０は、画素座標の整数値を、画素座標の小数部分とは分けて格納する。たとえば、図１に示すように、テンソルトラバーサルユニット１２０は、垂直画素座標の整数部分を格納する垂直画素座標整数要素１３２と、垂直画素座標の小数部分を格納する垂直画素座標小数要素１３４とを含む。同様に、テンソルトラバーサルユニット１２０は、水平画素座標の整数部分を格納する水平画素座標整数要素１３６と、水平画素座標の小数部分を格納する水平画素座標小数要素１３８とを含む。各要素１３２〜１３８は、レジスタまたはその他の記憶回路を含み得る。
【００４９】
また、垂直ストライドの整数部分および小数部分と、水平ストライドの整数部分および小数部分とは、たとえば、それぞれのレジスタまたはその他の記憶回路に別々に格納され得る。テンソルトラバーサルユニット１２０が垂直座標を更新する場合、テンソルトラバーサルユニットは、垂直ストライドの整数部分を垂直座標の整数部分に加算し、垂直ストライドの小数部分を垂直座標の小数部分に加算し得る。この更新によって垂直座標の小数部分が１以上になるたびに、テンソルトラバーサルユニット１２０は、１という値を垂直座標の整数部分に加算し、１という値を垂直座標の小数部分から減算して垂直座標の小数部分を１よりも小さく維持し得る。
【００５０】
同様に、テンソルトラバーサルユニット１２０が水平座標を更新する場合、テンソルトラバーサルユニットは、水平ストライドの整数部分を水平座標の整数部分に加算し、水平ストライドの小数部分を水平座標の小数部分に加算し得る。この更新によって水平座標の小数部分が１以上になるたびに、テンソルトラバーサルユニット１２０は、１という値を水平座標の整数部分に加算し、１という値を水平座標の小数部分から減算して水平座標の小数部分を１よりも小さく維持し得る。
【００５１】
図２は、画像のバイリニア補間を説明する図解２００である。図解２００は、入力画像の画素レイアウト２１０と、変換されたバージョンの入力画像（「変換画像」）の画素レイアウト２２０とを含む。各レイアウト２００および２１０における四角形のそれぞれは、画素を表す。この例では、入力画像は、水平画素次元に１０画素、垂直画素次元に１０画素を有する。同様に、変換画像は、水平画素次元に７画素、垂直画素次元に７画素を有する。たとえば、機械学習モデルは、水平画素次元に７画素、垂直画素次元に７画素を有する画像を処理するように構成されてもよい。
【００５２】
入力画像を変換するために、変換画像の画素ごとに入力画像内の画素座標のセットが特定される。たとえば、変換画像の左上の画素２２２に対して点２１２の画素座標が特定される。同様に、画素２２２の右側の画素２２３に対して点２１３の画素座標が特定される。
【００５３】
変換画像の画素ごとの画素値を決定するために、当該画素の画素座標に最も近い４画素がソース画素として特定される。画素２２２については、画素座標２１２に最も近い４画素は、画素２１５ａ、２１５ｂ、２１５ｃ、および２１５ｄである。画素２２２の画素値は、ソース画素２１５ａ〜２１５ｄの画素値の加重組合せであり得る。ソース画素ごとの重みは、点２１２の画素座標からのソース画素の距離に基づき得る。たとえば、点２１２により近いソース画素の画素値は、点２１２からより離れたソース画素の画素値よりも重く加重される。この例では、ソース画素２１５ａの画素値には、ソース画素２１５ｃの画素値よりも大きな重みが割り当てられる。変換画像の画素座標、変換画像の画素ごとの４つのソース画素、および各ソース画素の画素値の重みを決定するための技術の例を以下に説明する。
【００５４】
図３は、画像データのメモリアドレスを決定するための例示的な工程３００を説明するフロー図である。工程３００は、１つ以上のコンピュータから構成されるシステム、たとえば、図１のコンピューティングシステム１０２によって実行されてもよい。システムは、テンソルトラバーサルユニット、たとえば、図１のテンソルトラバーサルユニット１２０を備える。
【００５５】
システムは、画像の画像データを受け付ける（３０２）。たとえば、テンソルトラバーサルユニットは、画像データを受け付け得る。画像データは、画像の次元を規定し得る。画像の次元は、水平画素次元と、垂直画素次元とを規定し得る。水平画素次元は、画像の水平次元に沿った画素の数である。垂直画素次元は、画像の垂直次元に沿った画素の数である。たとえば、高さ５００画素×幅４００画素の画像は、垂直画素次元が５００で、水平画素次元が４００になる。
【００５６】
システムは、画像の次元が機械学習モデルの特定の次元に一致しないと判断する（３０４）。たとえば、機械学習モデルは、特定の次元の画像を処理（たとえば、分類）するように構成されてもよい。特定の次元は、特定の垂直画素次元と、特定の水平画素次元とを規定し得る。テンソルトラバーサルユニットは、画像の次元を機械学習モデルの特定の次元と比較し得る。画像の垂直画素次元が機械学習モデルの特定の垂直画素次元に一致しない場合、または画像の水平画素次元が機械学習モデルの特定の水平画素次元に一致しない場合、テンソルトラバーサルユニットは、画像の次元が機械学習モデルの特定の次元に一致しないと判断し得る。
【００５７】
システムは、画像の水平画素ストライドと垂直画素ストライドとを決定する（３０６）。水平画素ストライドおよび垂直画素ストライドは、画像内の画素座標を変換されたバージョンの画像変換画素ごとに特定するために使われる。
【００５８】
テンソルトラバーサルユニットは、画像の次元および機械学習モデルの特定の次元に基づいて水平画素ストライドと垂直画素ストライドとを決定し得る。いくつかの実装形態では、これらのストライドは、下記の関係式１および２を使って決定される。
【００５９】
【数１】
2021516382.tif 000003
【００６０】
いくつかの実装形態では、テンソルトラバーサルユニットは、水平ストライドと垂直ストライドとを、テンソルトラバーサルユニットのそれぞれの記憶回路、たとえば、レジスタに格納する。上述したように、これらのストライドは、固定小数点数の形式で格納されてもよく、各ストライドの整数部分は、ストライドの小数部分とは別に格納されてもよい。この例では、ストライドの小数部分は、最も近い固定小数点数に端数処理されてもよい。最も近い固定小数点数は、各ストライドを格納するために使われるビットの数を用いて表され得る。たとえば、画像の次元が１０×１０であり、機械学習モデルの特定の次元が７×７である場合、水平ストライドは１．３７５となり、垂直ストライドは１．３７５となる。小数部分（０．３７５）は、小数部分を格納するためのレジスタが７ビットである場合、または小数部分の固定小数点数が７ビットを含む場合、４８／１２８に端数処理され得る。
【００６１】
システムは、変換されたバージョンの画像の画素座標を決定する（３０８）。テンソルトラバーサルユニットは、水平画素ストライドと垂直画素ストライドとを使って画素座標を決定し得る。たとえば、上述したように、テンソルトラバーサルユニットは、ループの入れ子構造を使ってストライド値を画素座標の現在値に加算することによって画素値を決定し、画素座標を決定し得る。例として、ループとストライドとを使って画素座標を決定するための工程を図４に示し、詳細を以下に説明する。
【００６２】
システムは、特定された画素座標ごとに１つ以上のメモリアドレスを決定する（３１０）。画素座標ごとのメモリアドレスは、画素座標についての機械学習モデルへの入力を生成するために使われることになる１つ以上の画素値を格納するための、記憶媒体における位置に対応する。テンソルトラバーサルユニットは、垂直座標の値および水平座標の値に基づいて画素座標のメモリアドレスを決定し得る。画素座標セットごとにメモリアドレス（複数可）を決定するための技術の例を、図４および図５を参照しながら以下に説明する。
【００６３】
図４は、画像データのメモリアドレスを格納するための別の例示的な工程４００を説明するフロー図である。工程４００は、１つ以上のコンピュータから成るシステム、たとえば、図１のコンピューティングシステム１０２によって実行されてもよい。システムは、テンソルトラバーサルユニット、たとえば、図１のテンソルトラバーサルユニット１２０を備える。
【００６４】
システムは、入力画像の初期の画素座標を求める（４０２）。初期の画素座標は、変換されたバージョンの画像変換画素の画像内の画素座標である。初期の画素座標は、画像の水平次元に沿った水平座標と、画像の垂直次元に沿った垂直座標とを含む。たとえば、変換画素の画素座標が左から右、そして上から下に決定される場合、初期の画素座標は、画像の左上近くの座標であり得る。その他の例では、初期の画素座標は、右下近く、または画像内の別の適切な位置であってもよい。
【００６５】
いくつかの実装形態では、テンソルトラバーサルユニットは、水平画素ストライドおよび／または垂直画素ストライドに基づいて初期の画素座標を求める。テンソルトラバーサルユニットは、上記関係式１および２をそれぞれ使って水平画素ストライドおよび垂直画素ストライドを決定することができる。テンソルトラバーサルユニットは、下記の関係式３および４を使って初期の水平座標および初期の垂直座標を求めることができる。
【００６６】
初期の水平座標＝水平画素ストライド−１        （３）
初期の垂直座標＝垂直画素ストライド−１        （４）
システムは、初期の水平座標を１つ以上のハードウェア記憶回路に格納する（４０４）。ハードウェア記憶回路は、テンソルトラバーサルユニットの記憶回路、たとえば、レジスタであり得る。たとえば、テンソルトラバーサルユニットは、初期の水平座標の整数部分を水平画素座標整数要素（たとえば、図１の水平画素座標整数要素１３６）に格納し、水平座標の小数部分を水平画素座標小数要素（たとえば、図１の水平画素座標小数要素１３８）に格納し得る。
【００６７】
システムは、初期の垂直座標を１つ以上のハードウェア記憶回路に格納する（４０６）。ハードウェア記憶回路は、テンソルトラバーサルユニットの記憶回路、たとえば、レジスタであり得る。たとえば、テンソルトラバーサルユニットは、初期の垂直座標の整数部分を垂直画素座標整数要素（たとえば、図１の垂直画素座標整数要素１３２）に格納し、垂直座標の小数部分を垂直画素座標小数要素（たとえば、図１の垂直画素座標小数要素１３８）に格納し得る。
【００６８】
システムは、画素座標の１つ以上のメモリアドレスを決定する（４０８）。初回の繰り返しでは、テンソルトラバーサルユニットは、初期の画素座標の１つ以上のメモリアドレスを決定し得る。上述したように、画像の水平次元および垂直次元をトラバースするために使用されるループの繰り返しごとに画素座標が更新される。更新された画素座標ごとに、テンソルトラバーサルユニットは、１つ以上のメモリアドレスを決定し得る。
【００６９】
各メモリアドレスは、画素値を格納するための記憶媒体における位置に対応する。メモリアドレスは、処理部、たとえば、図１の処理部１１４によって画素値をロードまたは格納するために使われる。たとえば、処理部は、画素値のメモリアドレスを使って画素値を取得し、画素値に基づいて機械学習モデルの入力を生成してもよい。最近傍法実装では、生成された入力は、画素値自体であってもよい。バイリニア法実装において、生成された入力は、４つの画素値の加重組合せであってもよい。
【００７０】
最近傍法実装では、画素座標のメモリアドレスは、画素座標に最も近い（たとえば、最近傍の）入力画像内の画素の画素値を格納するための記憶媒体における位置に対応する。メモリアドレスは、画素座標の垂直座標と水平座標とに基づき得る。たとえば、テンソルトラバーサルユニットは、水平座標に基づいて第１の部分アドレス値を決定し、垂直座標に基づいて第２の部分アドレス値を決定し得る。
【００７１】
いくつかの実装形態では、第１の部分アドレス値は、水平座標および第３次元（たとえば、ｚ方向）の大きさに基づく。第３次元は、画素の色を表すために使われる色値の数に基づき得る。たとえば、グレースケール値が使われる場合、第３次元の大きさは、１であり得る。ＲＧＢ色値が使われる場合、第３次元の大きさは、１（たとえば、すべての３つの色値が同じメモリアドレスに格納された場合）または３（たとえば、各色値が別々に格納された場合）であり得る。水平座標が小数部分を含んでいる可能性があるため、水平座標の値の端数が切り捨てられ得る。たとえば、テンソルトラバーサルユニットは、０．５という値が端数処理されてゼロになる五捨六入を使って水平座標の端数を切り捨て得る。第１の部分アドレス値は、端数処理された水平座標と第３次元の大きさとの積に基づき得る。
【００７２】
同様に、第２の部分アドレス値は、垂直座標、および水平次元の大きさ（たとえば、画像の水平次元に沿った画素の数）と第３次元の大きさとの積に基づき得る。垂直座標が小数部分も含んでいる可能性があるので、たとえば、五捨六入を使って垂直座標の値も端数が切り捨てられ得る。第２の部分アドレス値は、端数処理された垂直座標、および水平次元の大きさと第３次元の大きさとの積に基づき得る。これにより、画素座標のセットごとに一意のメモリアドレスが必ず割り当てられることになる。
【００７３】
画素座標のメモリアドレスは、第１の部分アドレス値と第２の部分アドレス値との合計に基づき得る。たとえば、メモリアドレスは、第１の部分アドレス値と、第２の部分アドレス値と、基底アドレスとの合計に等しくてもよい。
【００７４】
バイリニア法実装において、テンソルトラバーサルユニットは、画素座標に基づいて４つのメモリアドレスを決定し得る。各メモリアドレスは、入力画像に含まれる４つのソース画素のうちの、入力画像における画素座標の位置に最も近い１つの画素の画素値（複数可）を格納するための記憶媒体における位置に対応する。たとえば、４つのソース画素は、画素座標の位置の下の左側にある左下画素と、画素座標の位置の下の右側にある右下画素と、画素座標の位置の上の左側にある左上画素と、および画素座標の位置の上の右側にある右上画素とを含んでもよい。４つのメモリアドレスを決定するための工程例を図５および以下に説明する。
【００７５】
システムは、水平座標の現在値を更新し、画像の水平次元をトラバースするために使用されるループのループインデックスを更新する（４１０）。いくつかの実装形態では、ループインデックスを更新するために、システムは、１という値をループインデックスの以前の値に加算することによってループインデックスを繰り返し得る。いくつかの実装形態では、水平座標はループインデックスとして使用されるため、水平座標が更新された場合に更新される。
【００７６】
水平座標を更新するために、テンソルトラバーサルユニットは、水平ストライドを水平座標の現在値に加算し、水平座標の更新値を格納し得る。ループの初回の繰り返しでは、テンソルトラバーサルユニットは、水平ストライドを初期の水平座標に加算する。
【００７７】
水平座標の整数部分と小数部分とが別々に格納される場合、テンソルトラバーサルユニットは、水平画素ストライドの整数部分を水平座標の整数部分に加算し得る。同様に、テンソルトラバーサルユニットは、水平画素ストライドの小数部分を水平座標の小数部分に加算し得る。これによって水平座標の小数部分が１以上になった場合、テンソルトラバーサルユニットは、小数部分を１よりも下に維持するよう、水平座標の整数部分に１を加算し、水平座標の小数部分から１を減算し得る。
【００７８】
システムは、画像の水平次元をトラバースするために使用されるループのループインデックスがその範囲以上であるかどうかを判断する（４１２）。この範囲は、変換画像に含まれる水平画素の数に基づき得る。たとえば、機械学習モデルの特定の次元が水平次元に７画素を有する場合、画像の水平方向の各行の７画素の座標とメモリアドレスとが決定されるよう、ループは、７回の繰り返しを含んでいる可能性がある。たとえば、ループインデックスはゼロから始まり、範囲は、６である可能性がある。ループインデックスが６という値に到達した場合、システムは、ループインデックスがその範囲に等しいと判断し得る。
【００７９】
水平次元をトラバースするために使用されるループのループインデックスがその範囲以上でない場合、システムは、動作（４０８）に戻り、以前の垂直座標と更新された水平座標とを含む更新画素座標のための１つ以上のメモリアドレスを決定する。水平次元をトラバースするために使用されるループのループインデックスがその範囲以上である場合、システムは、水平座標の値を初期の水平座標にリセットし、水平次元をトラバースするために使用されるループのループインデックスをその初期値にリセットする（４１４）。
【００８０】
システムは、垂直座標の現在値を更新し、画像の垂直次元をトラバースするために使用されるループのループインデックスを更新する（４１６）。いくつかの実装形態では、ループインデックスを更新するために、システムは、１という値をループインデックスの以前の値に加算することによってループインデックスを繰り返し得る。いくつかの実装形態では、垂直座標はループインデックスとして使用されるため、垂直座標が更新された場合に更新される。
【００８１】
垂直座標を更新するために、テンソルトラバーサルユニットは、垂直ストライドを垂直座標の現在値に加算し、垂直座標の更新値を格納し得る。ループの初回の繰り返しでは、テンソルトラバーサルユニットは、垂直ストライドを初期の垂直座標に加算する。
【００８２】
垂直座標の整数部分と小数部分とが別々に格納される場合、テンソルトラバーサルユニットは、垂直画素ストライドの整数部分を垂直座標の整数部分に加算し得る。同様に、テンソルトラバーサルユニットは、垂直画素ストライドの小数部分を垂直座標の小数部分に加算し得る。これによって垂直座標の小数部分が１以上になった場合、テンソルトラバーサルユニットは、小数部分を１よりも下に維持するよう、垂直座標の整数部分に１を加算し、垂直座標の小数部分から１を減算し得る。
【００８３】
システムは、画像の垂直次元をトラバースするために使用されるループのループインデックスがその範囲以上であるかどうかを判断する（４１８）。この範囲は、変換画像に含まれる垂直画素の数に基づき得る。たとえば、機械学習モデルの特定の次元が垂直次元に７画素を有する場合、画像の垂直方向の各列の７画素の座標とメモリアドレスとが決定されるよう、ループは、７回の繰り返しを含んでいる可能性がある。たとえば、ループインデックスはゼロから始まり、範囲は、６である可能性がある。ループインデックスが６という値に到達した場合、システムは、ループインデックスがその範囲に等しいと判断し得る。
【００８４】
垂直次元をトラバースするために使用されるループのループインデックスがその範囲以上でない場合、システムは、動作（４０８）に戻り、更新された垂直座標とリセットされた水平座標（初期の水平座標）とを含む更新画素座標のための１つ以上のメモリアドレスを決定する。これにより、水平次元についてのループを使った、画像の水平次元に沿った別の行のトラバースが開始することになる。
【００８５】
水平次元をトラバースするために使用されるループのループインデックスがその範囲以上である場合、変換画像の変換画素ごとの１つ以上のメモリアドレスが決定されたとして、工程４００は終了する。
【００８６】
アドレスがたとえば順番に決定されると、テンソルトラバーサルユニットは、各メモリアドレスを処理部に出力し得る。いくつかの実装形態では、変換画素ごとのメモリアドレス（複数可）が決定された後、テンソルトラバーサルユニットは、当該メモリアドレスを出力し得る。処理部は、これらのメモリアドレスを使って画素値をロードまたは格納し得る。
【００８７】
この例では、画像の水平次元をトラバースするために使用されるループが、入力画像の垂直次元をトラバースするために使用されるループ内に入れ子にされている。下記のループの入れ子構造を使って入力画像のメモリアドレスを決定することができる。
【００８８】
【数２】
2021516382.tif 000004
【００８９】
この例では、ｉｎｉｔｉａｌ＿ｙが、初期の垂直座標であり、ｃｏｏｒｄ＿ｙが、垂直座標の現在値であり、ｓｉｚｅ＿ｙが、入力画像の垂直次元に沿った画素の数である。よって、外側ループのループ範囲は、画像の垂直次元に沿った画素の数よりも１小さい値に等しく、ループインデックスは、垂直座標の現在値である。外側ループの各繰り返しの後、垂直座標の現在値は、垂直画素ストライドを垂直座標の現在値に加算することによって更新される。これに加えて、第２の部分アドレス値（ｓｅｃｏｎｄ＿ｐａｒｔｉａｌ＿ａｄｄｒｅｓｓ＿ｖａｌｕｅ）は、（たとえば、最近傍法の場合、五捨六入、バイリニア法の場合、フロア関数を使って）垂直座標の現在値の端数を切り捨てて、端数処理された値を画像の水平次元の大きさと第３次元の大きさとの積で乗算することによって決定される。
【００９０】
同様に、ｉｎｉｔｉａｌ＿ｘが、水平座標の初期値であり、ｃｏｏｒｄ＿ｘが、水平座標の現在値であり、ｓｉｚｅ＿ｘが、画像の水平次元に沿った画素の数である。よって、内側ループのループ範囲は、画像の水平次元に沿った画素の数よりも１小さい値に等しく、ループインデックスは、水平座標の現在値である。内側ループの各繰り返しの後、水平座標の現在値は、水平画素ストライドを水平座標の現在値に加算することによって更新される。これに加えて、第１の部分アドレス値（ｆｉｒｓｔ＿ｐａｒｔｉａｌ＿ａｄｄｒｅｓｓ＿ｖａｌｕｅ）は、（たとえば、最近傍法の場合、五捨六入、バイリニア法の場合、座標以下の最大整数を出力するフロア関数を使って）水平座標の現在値の端数を切り捨てて、端数処理された値を第３次元の大きさで乗算することによって決定される。
【００９１】
また、内側ループの繰り返しごとに、画素座標のメモリアドレス（ｍｅｍｏｒｙ＿ａｄｄｒｅｓｓ）も決定される。最近傍法実装の場合、メモリアドレスは、第１の部分アドレス値と、第２の部分アドレス値と、基底アドレス（任意）との合計に等しくてもよい。後述するが、バイリニア法実装の場合、垂直オフセット値および水平オフセット値を使って４つのメモリアドレスを決定することができる。
【００９２】
図５は、画像データのメモリアドレスと、バイリニア補間用の重みとを決定するための例示的な工程５００を説明するフロー図である。工程５００は、１つ以上のコンピュータから構成されるシステム、たとえば、図１のコンピューティングシステム１０２によって実行されてもよい。このシステムは、テンソルトラバーサルユニット、たとえば、図１のテンソルトラバーサルユニット１２０を備える。入力画像を変換するためにバイリニア法が使われている場合、工程５００の動作（またはその一部）は、図４の動作４０８のサブ動作であり得る。
【００９３】
システムは、入力画像内の水平座標の現在値を特定する（５０２）。たとえば、上述したように、ループを使って入力画像の水平次元をトラバースし、変換されたバージョンの画像の変換画素の画素座標の水平座標を決定および更新することができる。ループの各繰り返しにおいて、たとえば、水平画素ストライドを水平座標の以前の値に加算することによって水平座標の現在値を更新することができる。テンソルトラバーサルユニットは、水平座標の現在値を１つ以上のハードウェア記憶回路に保持することができる。
【００９４】
システムは、入力画像内の垂直座標の現在値を特定する（５０４）。たとえば、上述したように、ループを使って入力画像の垂直次元をトラバースし、変換されたバージョンの画像の変換画素の画素座標の垂直座標を決定および更新することができる。ループの各繰り返しにおいて、たとえば、垂直画素ストライドを垂直座標の以前の値に加算することによって垂直座標の現在値を更新することができる。テンソルトラバーサルユニットは、垂直座標の現在値を１つ以上のハードウェア記憶回路に保持することができる。
【００９５】
システムは、水平オフセット値を特定する（５０６）。入力画像の水平次元をトラバースするために使用されるループが入力画像の垂直次元をトラバースするために使用されるループ内に入れ子にされるｙ−ｍａｊｏｒ、ｘ−ｍｉｎｏｒループの入れ子構造を使ってメモリアドレスを決定する実装形態では、水平オフセット値は、入力画像の第３次元の大きさ（たとえば、各画素を表すために使われる色値の数）に基づき得る。たとえば、水平オフセット値は、１であってもよい。
【００９６】
システムは、垂直オフセット値を特定する（５０８）。ｙ−ｍａｊｏｒ、ｘ−ｍｉｎｏｒループの入れ子構造を使ってメモリアドレスを決定する実装形態では、垂直オフセット値は、水平次元の大きさと第３次元の大きさとの組合せに基づき得る。たとえば、垂直オフセット値は、水平次元に沿った入力画像の画素の数の積に基づき得る。
【００９７】
ｘ−ｍａｊｏｒ、ｙ−ｍｉｎｏｒループの入れ子構造が使われる場合、水平オフセット値は、垂直次元の大きさ（たとえば、入力画像の垂直次元に沿った画素の数）と第３次元の大きさとの積に等しい値であり得る。同様に、垂直オフセット値は、第３次元の大きさであり得る。
【００９８】
システムは、４つの画素座標の各々について、メモリアドレスを決定する（５１０）。４つの画素座標は、入力画像に含まれる４つのソース画素に対応する。当該４つのソース画素のために画素の値を使用して、変換されたバージョンの画像に含まれる変換画素の画素値が決定されることになる。変換画素は、水平座標の現在値および垂直座標の現在値によって定義される画素座標にある入力画像の画素を表す、変換画像の画素である。
【００９９】
４画素は、入力画像における当該画素座標の位置に最も近い４画素であり得る。たとえば、４つのソース画素は、当該画素座標の位置の下の左側にある左下画素と、画素座標の位置の下の右側にある右下画素と、画素座標の位置の上の左側にある左上画素と、画素座標の位置の上の右側にある右上画素とを含んでもよい。
【０１００】
４つのメモリアドレスの各々は、画素座標と、１つ以上のオフセット値とに基づき得る。たとえば、テンソルトラバーサルユニットは、４つのメモリアドレスの各々を決定するために使われる第１の部分アドレス値および第２の部分アドレス値を決定し得る。上述した最近傍法実装と同様に、第１の部分アドレス値は、水平座標と、第３次元（たとえば、ｚ次元）の大きさとに基づき得る。水平座標が小数部分を含んでいる可能性があるので、水平座標の値の端数が切り捨てられ得る。たとえば、テンソルトラバーサルユニットは、水平座標以下の最大整数を出力するフロア関数を使って水平座標の端数を切り捨てることができる。第１の部分アドレス値は、端数処理された水平座標と第３次元の大きさとの積に基づき得る。画像の場合、ｚ次元の大きさは１であるため、第１の部分アドレス値は、水平座標の端数処理された値に等しい。
【０１０１】
同様に、第２の部分アドレス値は、垂直座標、および水平次元の大きさと第３次元の大きさとの積に基づき得る。垂直座標も小数部分を含んでいる可能性があるので、たとえばフロア関数を使って垂直座標の値も端数が切り捨てられ得る。第２の部分アドレス値は、端数処理された垂直座標、および水平次元の大きさと第３次元の大きさとの積に基づき得る。画像の場合、ｚ次元の大きさは１であるため、第２の部分アドレス値は、垂直座標の端数処理された値と水平次元の大きさとの積に等しい。
【０１０２】
テンソルトラバーサルユニットは、ループの入れ子構造を使って、４つのメモリアドレスを第１の部分アドレス値および第２の部分アドレス値に基づいて決定し得る。たとえば、下記のループの入れ子構造が使われ得る。
【０１０３】
【数３】
2021516382.tif 000005
【０１０４】
このループの入れ子構造の例では、ｏｆｆｓｅｔ＿ｙが、垂直オフセット値であり、ｏｆｆｓｅｔ＿ｘが、水平オフセット値である。これに加えて、ｓｉｚｅ＿ｘｚが、水平次元の大きさと第３次元の大きさとの積（たとえば、第３次元の大きさが１である場合の水平次元の大きさ）であり、ｓｉｚｅ＿ｚが、第３次元の大きさである。ループの入れ子構造によって、次の４つのメモリアドレスが生成される。（１）第１の部分アドレス値＋第２の部分アドレス値＋０＋０、（２）第１の部分アドレス値＋第２の部分アドレス値＋０＋ｓｉｚｅ＿ｚ、（３）第１の部分アドレス値＋第２の部分アドレス値＋ｓｉｚｅ＿ｘｚ＋０、（４）第１の部分アドレス値＋第２の部分アドレス値＋ｓｉｚｅ＿ｘｚ＋ｓｉｚｅ＿ｘ）。このループの入れ子構造を、バイリニア法実装の場合の上述した画素座標を決定するためのループ内に入れ子にして、４つの画素値の４つのメモリアドレスを決定することができる。
【０１０５】
システムは、４つのソース画素の各々について、重みを決定する（５１２）。ソース画素ごとの重みは、水平座標の現在値の小数部分および／または垂直座標の現在値の小数部分に基づいて決定され得る。小数部分を使った重みの決定にループの入れ子構造を使うことができる。ループの入れ子構造は、メモリアドレスを決定するために使用されるループの入れ子構造と並列して実行することができる。このようにすれば、いったん処理部４つのソース画素すべての画素値と重みとを有すると処理部がこれらの画素値と重みとを使って機械学習モデルに入力するための変換画素の画素値を生成できるよう、テンソルトラバーサルユニットが画素値にアクセスするためのメモリアドレスと、画素値に対応する重みとを一緒に、または連続して出力できるようになる。下記のループの入れ子構造を使って重みを決定することができる。
【０１０６】
【数４】
2021516382.tif 000006
【０１０７】
この例では、上述したメモリアドレスを決定するために使用されるループの入れ子構造として、水平座標（ｃｏｏｒｄ＿ｘ）と垂直座標（ｃｏｏｒｄ＿ｙ）とを決定するための外側ループが同じループ範囲（ｓｉｚｅ＿ｙ−１およびｓｉｚｅ＿ｙ−１）とループインデックス（ｃｏｏｒｄ＿ｙおよびｃｏｏｒｄ＿ｘ）とを使っている。これによって、変換されたバージョンの画像の変換画素座標ごとに４つの重みが必ず決定されることになる。
【０１０８】
ｙｙおよびｘｘのための２つの内側ループを使って、４つの重みが当該２つの内側ループのインデックス値に基づいて決定される。ｙｙについてのループは、２回繰り返される（ｙｙ＝０の場合に１回、ｙｙ＝１の場合に１回）。同様に、ｘｘについてのループは、２回繰り返される（ｘｘ＝０の場合に１回、ｘｘ＝１の場合に１回）。よって、変換画素座標ごとの内側ループの４つの条件は、（ｘｘ＝０，ｙｙ＝０）、（ｘｘ＝１，ｙｙ＝０）、（ｘｘ＝０，ｙｙ＝１）、および（ｘｘ＝１，ｙｙ＝１）となる。条件ごとに異なる重みが決定され、当該条件ごとの重みは、入力画像内の画素に対応する。当該画素の重みは、その画素値に適用されることになる。
【０１０９】
この例では、第１条件（ｘｘ＝０，ｙｙ＝０）を使って画素座標の位置の下の左側にある左下ソース画素の重みが決定される。左下ソース画素の重みは、水平座標の現在値の小数部分を１から引いた値に等しい水平方向の重みと、垂直座標の現在値の小数部分を１から引いた値に等しい垂直方向の重みとを含む。
【０１１０】
第２条件（ｘｘ＝１，ｙｙ＝０）を使って画素座標の位置の下の右側にある右下ソース画素の重みが決定される。右下ソース画素の重みは、水平座標の現在値の小数部分に等しい水平方向の重みと、垂直座標の現在値の小数部分を１から引いた値に等しい垂直方向の重みとを含む。
【０１１１】
第３条件（ｘｘ＝０，ｙｙ＝１）を使って画素座標の位置の上の左側にある左上ソース画素の重みが決定される。左上ソース画素の重みは、水平座標の現在値の小数部分を１から引いた値に等しい水平方向の重みと、垂直座標の現在値の小数部分に等しい垂直方向の重みとを含む。
【０１１２】
第４条件（ｘｘ＝１，ｙｙ＝１）を使って画素座標の位置の上の右側にある右上ソース画素の重みが決定される。右上ソース画素の重みは、水平座標の現在値の小数部分に等しい水平方向の重みと、垂直座標の現在値の小数部分に等しい垂直方向の重みとを含む。
【０１１３】
これらの演算を使うと、ソース画素ごとの水平方向の重みは、ソース画素と画素座標の現在の水平座標との水平方向の距離に反比例する。同様に、ソース画素ごとの垂直方向の重みは、ソース画素と画素座標の現在の垂直座標との垂直方向の距離に反比例する。
【０１１４】
テンソルトラバーサルユニットは、１つの画素座標についての４つの重みを処理部に出力する。次に、処理部は、水平座標の現在値と垂直座標の値の現在値とによって定義される画素座標に対応する変換画素の画素値を、ソース画素ごとの画素値およびその対応する重みを使って決定し得る。
【０１１５】
たとえば、処理部は、下記の関係式５を使って変換座標の画素値を決定することができる。
【０１１６】
【数５】
2021516382.tif 000007
【０１１７】
関係式５では、ｐｉｘｅｌ＿ｖａｌｕｅｘ０ｙ０が、左下ソース画素の画素値であり、ｗｅｉｇｈｔｘ０ｙ０が、左下ソース画素の水平方向の重みと左下ソース画素の垂直方向の重みとの積である。同様に、ｐｉｘｅｌ＿ｖａｌｕｅｘ１ｙ０が、右下ソース画素の画素値であり、ｗｅｉｇｈｔｘ１ｙ０が、右下ソース画素の水平方向の重みと右下ソース画素の垂直方向の重みとの積であり、ｐｉｘｅｌ＿ｖａｌｕｅｘ０ｙ１が、左上ソース画素の画素値であり、ｗｅｉｇｈｔｘ０ｙ１が、左上ソース画素の水平方向の重みと右上ソース画素の垂直方向の重みとの積であり、ｐｉｘｅｌ＿ｖａｌｕｅｘ１ｙ１が、右上ソース画素の画素値であり、ｗｅｉｇｈｔｘ１ｙ１が、右上ソース画素の水平方向の重みと右上ソース画素の垂直方向の重みとの積である。
【０１１８】
処理部は、関係式５を使って、変換されたバージョンの入力画像の変換画素ごとの画素値を決定することができる。グレースケール値を使って各画素の色が表わされている場合、処理部は、関係式５を使って、画素ごとに１つのグレースケール画素値を決定することができる。ＲＢＧ値を使って各画素の色が表わされている場合、処理部は、関係式５を使って、画素の各ＲＧＢ色の値を別々に決定することができる。各色値の重みは同じになる。たとえば、処理部は、関係式５を使って、４つのソース画素の各々の重みと赤値とを使って変換画素の赤値を決定することができる。また、処理部は、関係式５を使って、ソース画素ごとの重みと青値とを使って変換画素の青値を決定することができ、関係式５を使って、ソース画素ごとの重みと緑値とを使って変換画素の緑値を決定することができる。
【０１１９】
次に、処理部は、機械学習モデルへの入力としてこれらの画素値を提供し得る。機械学習モデルは、変換されたバージョンの画像と同じ形状の画像を処理するように構成される。機械学習モデルの出力は、変換されたバージョンの入力画像を使った入力画像の分類であり得る。
【０１２０】
本明細書に記載の本発明の主題の実施の形態および機能的動作は、本明細書に開示の構造およびその構造的均等物を含む、デジタル電子回路、有形に含まれるコンピュータソフトウェアまたはファームウェア、コンピュータハードウェア、またはそれらのうちの１つ以上の組合せで実現され得る。本明細書に記載の本発明の主題の実施の形態は、１つ以上のコンピュータプログラム、つまり、データ処理装置による実行のためにまたはデータ処理装置の動作を制御するために実行される、有形の非一時的なプログラムキャリア上で符号化されたコンピュータプログラム命令の１つ以上のモジュールとして実現され得る。追加的または代替的に、プログラム命令は、人為的に生成された伝播信号、たとえば、適切な受信装置に送信されてデータ処理装置によって実行される情報を符号化するために生成された、機械によって生成された電気信号、光信号、または電磁信号上で符号化され得る。コンピュータ記憶媒体は、機械によって読み取り可能な記憶装置、機械によって読み取り可能な記憶基板、ランダムアクセスメモリ素子もしくはシリアルアクセスメモリ素子、またはそれらのうちの１つ以上の組合せであり得る。
【０１２１】
１つ以上のプログラム可能なコンピュータが入力データを操作することおよび出力を生成することによって１つ以上のコンピュータプログラムを実行して機能を実行することにより、本明細書に記載のプロセスおよび論理フローが実行され得る。また、プロセスおよび論理フローは、専用の論理回路、たとえば、ＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）またはＧＰＧＰＵ（Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）によって実行され得、装置は、このような専用の論理回路として実現され得る。
【０１２２】
コンピュータプログラムの実行に適したコンピュータは、一例として、汎用マイクロプロセッサもしくは特定用途向けマイクロプロセッサまたはその両方、またはその他の種類のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を含む。一般に、ＣＰＵは、ＲＯＭ（Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、またはその両方から命令およびデータを受け取る。コンピュータの必須構成要素は、命令を実施または実行するためのＣＰＵ、ならびに命令およびデータを格納するための１つ以上のメモリ素子である。一般に、コンピュータは、データを格納するための１つ以上の大容量記憶装置、たとえば、磁気ディスク、光磁気ディスク、または光ディスクを備える、または、このような１つ以上の大容量記憶装置との間でデータの受信、送信、もしくはその両方を行うために操作可能に接続される。しかしながら、コンピュータは、このような機器を有する必要はない。また、コンピュータは、別の機器、たとえば、一例を挙げると、携帯電話、携帯情報端末（ＰＤＡ）、携帯オーディオもしくはビデオプレーヤ、ゲームコントローラ、ＧＰＳ（Ｇｌｏｂａｌ  Ｐｏｓｉｔｉｏｎｉｎｇ  Ｓｙｓｔｅｍ）受信機、またはポータブル記憶装置（たとえば、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）フラッシュドライブ）に組み込むことができる。
【０１２３】
コンピュータプログラム命令およびデータを格納するのに適した読み取り可能な媒体は、一例として、ＥＰＲＯＭ、ＥＥＰＲＯＭ、およびフラッシュメモリ素子などの半導体メモリ素子、内蔵ハードディスクまたはリムーバブルディスクなどの磁気ディスク、光磁気ディスク、ならびにＣＤ−ＲＯＭおよびＤＶＤ−ＲＯＭディスクを含むすべての形態の不揮発性メモリと、媒体と、メモリ素子とを含む。プロセッサおよびメモリは、専用の論理回路によって補われ得る、または専用の論理回路に内蔵され得る。
【０１２４】
本明細書は、多くの具体的な実装形態の詳細を含むが、これらはいかなる発明の範囲および特許請求の範囲の限定として解釈されるべきではなく、むしろ、特定の発明の特定の実施の形態に固有であり得る特徴の説明であると解釈されるべきである。別々の実施の形態を背景に本明細書において説明した特定の特徴を組み合わせて１つの実施の形態で実現することもできる。その逆に、１つの実施の形態を背景に説明した様々な特徴を複数の実施の形態または任意の適した部分的な組合せで別々に実現することもできる。また、特徴を、特定の組合せで動作するものとして上述し、そのように当初、主張し得たが、主張した組合せから得られる１つ以上の特徴を場合によっては当該組合せから削除することができ、主張した組合せは、部分的な組合せまたは部分的な組合せの変形例を対象としてもよい。
【０１２５】
同様に、動作を特定の順番で図面に示したが、所望の結果を実現するために、このような動作が図示された特定の順番または連続して実行する、または、図示した動作のすべてを実行する必要があると理解されるべきではない。特定の状況では、多重タスク処理および並列処理が有利である場合がある。また、上述した実施の形態において様々なシステムモジュールおよび構成要素が分けられていることは、このように分けることがすべての実施の形態において必要であると理解されるべきではなく、記載のプログラムコンポーネントおよびシステムは、一般に、１つのソフトウェアプロダクトに一体化することができたり、複数のソフトウェアプロダクトにパッケージ化することができたりすると理解されるべきである。
【０１２６】
本発明の主題についての特定の実施の形態を説明した。その他の実施の形態は、添付の特許請求の範囲に含まれる。たとえば、請求項に記載の動作は、異なる順序で実行することができ、それでもなお所望の結果を実現することができる。一例として、添付の図面に示した工程は、所望の結果を実現するために必ずしも図示した特定の順番または連続した工程である必要はない。特定の実装形態では、多重タスク処理および並列処理が有利である場合がある。
【図１】
2021516382.tif 000008
【図２】
2021516382.tif 000009
【図３】
2021516382.tif 000010
【図４】
2021516382.tif 000011
【図５】
2021516382.tif 000012
【手続補正書】
【提出日】令和3年1月5日(2021.1.5)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
システムであって、
画像についての機械学習演算を機械学習モデルおよび前記画像の画素値を使って行うように構成された処理部を備え、前記機械学習モデルは、特定の次元の画像を処理するように構成され、前記システムは、さらに、
前記画像の画素値を格納するように構成された記憶媒体と、
１つ以上のハードウェアプロセッサを含むメモリアドレス演算ユニットとを備え、前記１つ以上のハードウェアプロセッサは、
画像の画像データを受け付け、前記画像データは、前記画像の次元を規定し、前記画像の次元は、水平画素次元および垂直画素次元を規定し、前記水平画素次元は、前記画像の水平次元に沿った画素の数であり、前記垂直画素次元は、前記画像の垂直次元に沿った画素の数であり、前記１つ以上のハードウェアプロセッサは、さらに、
前記画像の次元が前記特定の次元に一致しないと判断し、
前記画像の次元が前記特定の次元に一致しないと判断することに応答して、
前記画像の次元および前記特定の次元に基づいて、前記画像の水平画素ストライドおよび垂直画素ストライドを決定し、
前記水平画素ストライドおよび前記垂直画素ストライドを使用して、前記画像の変換されたバージョンについての複数の画素座標を決定し、各画素座標は、垂直座標および水平座標を含み、前記１つ以上のハードウェアプロセッサは、さらに、
前記複数の画素座標の各々について、画素座標についての前記機械学習モデルへの入力を生成するために使われることになる１つ以上の画素値を格納するための１つ以上のメモリアドレスを前記記憶媒体において決定し、前記画素座標ごとの１つ以上のメモリアドレスは、前記画素座標の垂直座標および水平座標に基づいており、前記１つ以上のハードウェアプロセッサは、さらに、
各メモリアドレスを前記処理部に出力するように構成される、システム。
【請求項２】
前記処理部は、各メモリアドレスを使って前記メモリアドレスに格納された画素値にアクセスし、前記メモリアドレスに格納された画素値に基づいて機械学習演算を行う、請求項１に記載のシステム。
【請求項３】
前記メモリアドレス演算ユニットは、
前記水平座標の現在値を格納するための１つ以上の第１のハードウェア記憶回路と、
前記垂直座標の現在値を格納するための１つ以上の第２のハードウェア記憶回路とを含み、
前記１つ以上のハードウェアプロセッサは、
初期の水平座標と初期の垂直座標とを含む初期の画素座標を求めること、
前記初期の水平座標を前記１つ以上の第１のハードウェア記憶回路に格納すること、
前記初期の垂直座標を前記１つ以上の第２のハードウェア記憶回路に格納すること、
前記画像の水平画素次元をトラバースするために使用される第１ループの繰り返しごとに、前記第１ループの繰り返しの後に前記水平画素ストライドを前記水平座標の現在値に加算することで前記水平座標の現在値を更新すること、
前記画像の垂直画素次元をトラバースするために使用される第２ループの繰り返しごとに、前記第２ループの繰り返しの後に前記垂直画素ストライドを前記垂直座標の現在値に加算することで前記垂直座標の現在値を更新すること、
によって、前記画像の複数の画素座標を決定する、請求項１または２に記載のシステム。
【請求項４】
画素座標ごとに決定された前記メモリアドレスは、前記画素座標の最近傍画素の画素値を格納するための前記記憶媒体における位置に対応し、各最近傍画素の前記画素値は、前記機械学習モデルへの入力として前記処理部によって使用される、請求項３に記載のシステム。
【請求項５】
画素座標についての前記機械学習モデルへの入力を生成するために使われることになる前記１つ以上の画素値を格納するための前記１つ以上のメモリアドレスを前記記憶媒体において決定することは、
前記第１ループまたは前記第２ループの繰り返しごとに、
前記１つ以上の第１のハードウェア記憶回路に格納された前記水平座標の現在値を特定することと、
前記１つ以上の第２のハードウェア記憶回路に格納された前記垂直座標の現在値を特定することと、
前記水平座標の現在値および前記垂直座標の現在値に基づいて、前記水平座標の現在値および前記垂直座標の現在値に対応する前記画素座標のメモリアドレスを決定することとを含む、請求項３または４に記載のシステム。
【請求項６】
前記水平座標の現在値および前記垂直座標の現在値に対応する前記画素座標のメモリアドレスを決定することは、
前記水平座標の現在値と第１次元乗数との積に基づいて第１の部分アドレス値を決定することと、
前記垂直座標の現在値と第２次元乗数との積に基づいて第２の部分アドレス値を決定することと、
前記第１の部分アドレス値と前記第２の部分アドレス値との合計を求めることによって前記水平座標の現在値および前記垂直座標の現在値に対応する前記画素座標のメモリアドレスを決定することとを含む、請求項５に記載のシステム。
【請求項７】
前記水平座標の現在値および前記垂直座標の現在値に対応する前記画素座標のメモリアドレスは、前記第１の部分アドレス値と前記第２の部分アドレス値と、基底メモリアドレスとの合計に等しい、請求項６に記載のシステム。
【請求項８】
前記第１ループは前記第２ループ内に入れ子にされている、または、前記第２ループは前記第１ループ内に入れ子にされている、請求項３〜７のいずれか１項に記載のシステム。
【請求項９】
画素座標についての前記機械学習モデルへの入力を生成するために使われることになる前記１つ以上の画素値を格納するための前記１つ以上のメモリアドレスを前記記憶媒体において決定することは、前記画素座標の画素値のバイリニア補間で使うための４つの画素座標の各々のメモリアドレスを決定することを含み、前記４つの画素座標の各々のメモリアドレスを決定することは、
前記第１ループまたは前記第２ループの繰り返しごとに、
前記１つ以上の第１のハードウェア記憶回路に格納された前記水平座標の現在値を特定することと、
前記１つ以上の第２のハードウェア記憶回路に格納された前記垂直座標の現在値を特定することと、
垂直オフセット値を特定することと、
水平オフセット値を特定することと、
前記４つの画素座標のうちの第１の画素座標について、前記第１の画素座標の第１の画素値を格納するための第１メモリアドレスを、前記水平座標の現在値と前記垂直座標の現在値との合計に基づいて決定することと、
前記４つの画素座標のうちの第２の画素座標について、前記第２の画素座標の第２の画素値を格納するための第２メモリアドレスを、前記水平座標の現在値と、前記垂直座標の現在値と、前記垂直オフセット値との合計に基づいて決定することと、
前記４つの画素座標のうちの第３の画素座標について、前記第３の画素座標の第３の画素値を格納するための第３メモリアドレスを、前記水平座標の現在値と、前記垂直座標の現在値と、前記水平オフセット値との合計に基づいて決定することと、
前記４つの画素座標のうちの第４の画素座標について、前記第４の画素座標の第４の画素値を格納するための第４メモリアドレスを、前記水平座標の現在値と、前記垂直座標の現在値と、前記垂直オフセット値と、前記水平オフセット値との合計に基づいて決定することとを含む、請求項３〜８のいずれか１項に記載のシステム。
【請求項１０】
前記垂直オフセット値は、少なくとも前記画像の水平画素の数に基づき、前記水平オフセット値は１に等しい、請求項９に記載のシステム。
【請求項１１】
前記１つ以上のハードウェアプロセッサは、前記４つの画素座標の各々のバイリニア補間の重みを決定し、各重みを前記処理部に出力し、
前記処理部は、前記４つの画素座標の各々にある前記画素値および前記４つの画素座標の各々の重みを使って前記機械学習モデルの入力画素値を決定する、請求項９または１０に記載のシステム。
【請求項１２】
前記４つの画素座標の各々の重みは、前記画素座標の水平座標の小数部分および前記画素座標の垂直座標の小数部分に基づく、請求項１１に記載のシステム。
【請求項１３】
前記処理部は、
前記複数の画素座標の各々について、前記画素座標の１つ以上のメモリアドレスに格納された画素値から１つ以上の色値を決定することによって前記機械学習モデルへの入力を生成するように構成され、
生成された前記入力を前記機械学習モデルを使って処理し、機械学習出力を生成するように構成される、請求項１〜１２のいずれか１項に記載のシステム。
【請求項１４】
１つ以上のハードウェアプロセッサによって実行される方法であって、前記方法は、
画像の画像データを受け付けるステップを含み、前記画像データは、前記画像の次元を規定し、前記画像の次元は、水平画素次元および垂直画素次元を規定し、前記水平画素次元は、前記画像の水平次元に沿った画素の数であり、前記垂直画素次元は、前記画像の垂直次元に沿った画素の数であり、前記方法は、さらに、
前記画像の次元が、機械学習モデルが処理するように構成された画像の特定の次元に一致しないと判断するステップと、
前記画像の次元が前記特定の次元に一致しないと判断することに応答して、
前記画像の次元および前記特定の次元に基づいて、前記画像の水平画素ストライドおよび垂直画素ストライドを決定するステップと、
前記水平画素ストライドおよび前記垂直画素ストライドを使用して、前記画像の変換されたバージョンについての複数の画素座標を決定するステップとを含み、各画素座標は、垂直座標および水平座標を含み、前記方法は、さらに、
前記複数の画素座標の各々について、画素座標についての前記機械学習モデルへの入力を生成するために使われることになる１つ以上の画素値を格納するための１つ以上のメモリアドレスを記憶媒体において決定するステップを含み、前記画素座標ごとのメモリアドレスは、前記画素座標の垂直座標および水平座標に基づいており、前記方法は、さらに、
前記機械学習モデルを使って画像についての機械学習演算を行うように構成された処理部に各メモリアドレスを出力するステップを含む、方法。
【請求項１５】
前記処理部は、各メモリアドレスを使って前記メモリアドレスに格納された画素値にアクセスし、前記メモリアドレスに格納された画素値に基づいて機械学習演算を行う、請求項１４に記載の方法。
【請求項１６】
前記画像の複数の画素座標を決定するステップは、
初期の水平座標と初期の垂直座標とを含む初期の画素座標を求めるステップと、
前記初期の水平座標を１つ以上の第１のハードウェア記憶回路に格納するステップと、
前記初期の垂直座標を１つ以上の第２のハードウェア記憶回路に格納するステップと、
前記画像の水平画素次元をトラバースするために使用される第１ループの繰り返しごとに、前記第１ループの繰り返しの後に前記水平画素ストライドを前記水平座標の現在値に加算することによって前記水平座標の現在値を更新し、前記垂直座標の現在値に更新する度に、前記水平座標の現在値を前記１つ以上の第１のハードウェア記憶回路に格納するステップと、
前記画像の垂直画素次元をトラバースするために使用される第２ループの繰り返しごとに、前記第２ループの繰り返しの後に前記垂直画素ストライドを前記垂直座標の現在値に加算することによって前記垂直座標の現在値を更新し、前記垂直座標の現在値に更新する度に、前記垂直座標の現在値を前記１つ以上の第２のハードウェア記憶回路に格納するステップとを含む、請求項１４または１５に記載の方法。
【請求項１７】
画素座標ごとに決定された前記メモリアドレスは、前記画素座標の最近傍画素の画素値を格納するための前記記憶媒体における位置に対応し、各最近傍画素の前記画素値は、前記機械学習モデルへの入力として前記処理部によって使用される、請求項１６に記載の方法。
【請求項１８】
装置であって、
画像の水平座標の現在値を格納するための１つ以上の第１のハードウェア記憶回路と、
画像の垂直座標の現在値を格納するための１つ以上の第２のハードウェア記憶回路とを備え、
１つ以上のハードウェアプロセッサは、
前記画像の画像データを受け付け、前記画像データは、前記画像の次元を規定し、前記画像の次元は、水平画素次元および垂直画素次元を規定し、前記水平画素次元は、前記画像の水平次元に沿った画素の数であり、前記垂直画素次元は、前記画像の垂直次元に沿った画素の数であり、前記１つ以上のハードウェアプロセッサは、さらに、
前記画像の次元が、機械学習モデルが処理するように構成された画像の特定の次元に一致しないと判断し、
前記画像の次元が前記特定の次元に一致しないと判断することに応答して、
前記画像の次元および前記特定の次元に基づいて、前記画像の水平画素ストライドおよび垂直画素ストライドを決定し、
前記水平画素ストライドおよび前記垂直画素ストライドを使用して、前記画像の変換されたバージョンについての複数の画素座標を決定し、各画素座標は、垂直座標および水平座標を含み、前記画像の次元が前記特定の次元に一致しないと判断することに応答して、さらに、
前記水平座標を前記１つ以上の第１のハードウェア記憶回路に格納し、
前記垂直座標を１つ以上の第２のハードウェア記憶回路に格納し、前記１つ以上のハードウェアプロセッサは、さらに、
前記複数の画素座標の各々について、画素座標についての前記機械学習モデルへの入力を生成するために使われることになる１つ以上の画素値を格納するための１つ以上のメモリアドレスを記憶媒体において決定し、前記画素座標ごとのメモリアドレスは、前記画素座標の垂直座標および水平座標に基づいており、前記１つ以上のハードウェアプロセッサは、さらに、
前記機械学習モデルを使って画像についての機械学習演算を行うように構成された処理部に各メモリアドレスを出力するように構成される、装置。
【請求項１９】
前記処理部は、各メモリアドレスを使って前記メモリアドレスに格納された画素値にアクセスし、前記メモリアドレスに格納された画素値に基づいて機械学習演算を行う、請求項１８に記載の装置。
【請求項２０】
前記画像の複数の画素座標を決定することは、
初期の水平座標と初期の垂直座標とを含む初期の画素座標を求めることと、
前記初期の水平座標を前記１つ以上の第１のハードウェア記憶回路に格納することと、
前記初期の垂直座標を前記１つ以上の第２のハードウェア記憶回路に格納することと、
前記画像の水平画素次元をトラバースするために使用される第１ループの繰り返しごとに、前記第１ループの繰り返しの後に前記水平画素ストライドを前記水平座標の現在値に加算することによって前記水平座標の現在値を更新し、前記垂直座標の現在値に更新する度に、前記水平座標の現在値を前記１つ以上の第１のハードウェア記憶回路に格納することと、
前記画像の垂直画素次元をトラバースするために使用される第２ループの繰り返しごとに、前記第２ループの繰り返しの後に前記垂直画素ストライドを前記垂直座標の現在値に加算することによって前記垂直座標の現在値を更新し、前記垂直座標の現在値に更新する度に、前記垂直座標の現在値を前記１つ以上の第２のハードウェア記憶回路に格納することとを含む、請求項１８または１９に記載の装置。
【国際調査報告】
2021516382.tif 000013
2021516382.tif 000014
2021516382.tif 000015