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

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

▶ グーグル インコーポレイテッドの特許一覧

<>
  • 特許-機械学習のための画像変換 図1
  • 特許-機械学習のための画像変換 図2
  • 特許-機械学習のための画像変換 図3
  • 特許-機械学習のための画像変換 図4
  • 特許-機械学習のための画像変換 図5
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-05-13
(45)【発行日】2024-05-21
(54)【発明の名称】機械学習のための画像変換
(51)【国際特許分類】
   G06T 1/00 20060101AFI20240514BHJP
   G06T 1/40 20060101ALI20240514BHJP
   G06T 7/00 20170101ALI20240514BHJP
【FI】
G06T1/00 500B
G06T1/40
G06T7/00 350C
【請求項の数】 17
(21)【出願番号】P 2020541806
(86)(22)【出願日】2019-01-30
(65)【公表番号】
(43)【公表日】2021-07-01
(86)【国際出願番号】 US2019015770
(87)【国際公開番号】W WO2019152466
(87)【国際公開日】2019-08-08
【審査請求日】2021-01-05
【審判番号】
【審判請求日】2023-05-10
(31)【優先権主張番号】15/885,178
(32)【優先日】2018-01-31
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】キルブルー,キャレル・ダニエル
(72)【発明者】
【氏名】ナラヤナスワミ,ラビ
(72)【発明者】
【氏名】ウ,ドン・ヒョク
【合議体】
【審判長】五十嵐 努
【審判官】樫本 剛
【審判官】川崎 優
(56)【参考文献】
【文献】特表2019-533868(JP,A)
【文献】特開昭59-100974(JP,A)
【文献】吉田雄大,伊藤一成,「深層学習を用いたピクトグラム画像への情報補完手法の提案」,マルチメディア,分散,協調とモバイルシンポジウム,2017年6月,1075~1080頁
【文献】Jason Clemons et al.,“A patch memory system for image processing and computer vision”,2016 49th Annual IEEE/ACM International Symposium on Microarchitecture (MICRO),2016年10月,pages 1-13
【文献】Nikhil B,“Image Data Pre-Processing for Neural Networks - Becoming Human:Artificial Intelligence Magazine”,2017年9月11日,https://becominghuman.ai/image-data-pre-processing-for-neural-networks-498289068258
(58)【調査した分野】(Int.Cl.,DB名)
G06T 1/00 - 1/40
G06T 3/00 - 5/50
G06T 9/00 - 9/40
G06T 7/00 - 7/90
G06N 3/02 - 3/10
(57)【特許請求の範囲】
【請求項1】
システムであって、
複数の画像についての機械学習演算を学習済の機械学習モデルおよび前記複数の画像の画素値を使用して行うように構成された処理部を備え、前記機械学習モデルは、特定のサイズを有している画像を処理するように構成され、前記システムは、さらに、
前記複数の画像の画素値を格納するように構成された記憶媒体と、
1つ以上のハードウェアプロセッサを含むメモリアドレス演算ユニットとを備え、前記1つ以上のハードウェアプロセッサは、
前記機械学習モデルにより入力として処理される画像の画像データを受け付け、前記画像データは、前記画像のサイズを規定し、前記画像のサイズは、水平画素サイズおよび垂直画素サイズを規定し、前記水平画素サイズは、前記画像の水平方向に沿った画素の数であり、前記垂直画素サイズは、前記画像の垂直方向に沿った画素の数であり、前記1つ以上のハードウェアプロセッサは、さらに、
前記画像のサイズが前記特定のサイズに一致しないことを判断し、
前記画像のサイズが前記特定のサイズに一致しないと判断したことに応答して、前記特定のサイズと一致するサイズを有している変換画像のためのメモリアドレスを決定し、前記メモリアドレスを決定することは、
前記画像のサイズおよび前記特定のサイズに基づいて、前記画像の水平画素ストライドおよび垂直画素ストライドを決定することを含み、前記水平画素ストライドは、前記画像の前記水平画素サイズおよび前記特定のサイズの水平画素サイズに基づくものであり、前記垂直画素ストライドは、前記画像の前記垂直画素サイズおよび前記特定のサイズの垂直画素サイズに基づくものであり、
前記水平画素ストライドおよび前記垂直画素ストライドを使用して、前記変換画像のための複数の画素座標を決定することを含み、各画素座標は、垂直座標および水平座標を含み、
前記変換画像のための前記複数の画素座標の各々について、各画素座標についての前記機械学習モデルへの入力を生成するために使われることになる前記画像の1つ以上の画素値を格納するための、前記記憶媒体における前記メモリアドレスを決定することを含み、各画素座標についての前記1つ以上のメモリアドレスは、各画素座標の垂直座標および水平座標に基づくものであり、前記1つ以上のハードウェアプロセッサは、さらに、
前記複数の画素座標の各々について、前記変換画像についての前記メモリアドレスを示すデータを前記処理部に出力するように構成され、
前記処理部は、前記出力されたデータを使用して、前記メモリアドレスに格納された1つ以上の画素値にアクセスして、前記機械学習モデルへの入力として、前記変換画像の画素値を生成するとともに、前記生成された画素値に基づいて機械学習演算を行う、システム。
【請求項2】
前記メモリアドレス演算ユニットは、
前記水平座標の現在値を格納するための1つ以上の第1のハードウェア記憶回路と、
前記垂直座標の現在値を格納するための1つ以上の第2のハードウェア記憶回路とを含み、
前記1つ以上のハードウェアプロセッサは、
初期の水平座標と初期の垂直座標とを含む初期の画素座標を求めること、
前記初期の水平座標を前記1つ以上の第1のハードウェア記憶回路に格納すること、
前記初期の垂直座標を前記1つ以上の第2のハードウェア記憶回路に格納すること、
前記画像の水平画素サイズをトラバースするために使用される第1ループの繰り返しごとに、前記第1ループの繰り返しの後に前記水平画素ストライドを前記水平座標の現在値に加算することで前記水平座標の現在値を更新すること、
前記画像の垂直画素サイズをトラバースするために使用される第2ループの繰り返しごとに、前記第2ループの繰り返しの後に前記垂直画素ストライドを前記垂直座標の現在値に加算することで前記垂直座標の現在値を更新すること、
によって、前記複数の画素座標を決定する、請求項1に記載のシステム。
【請求項3】
画素座標ごとに決定された前記1つ以上のメモリアドレスは、当該画素座標の最近傍画素の画素値を格納するための前記記憶媒体における位置に対応し、各最近傍画素の前記画素値は、前記機械学習モデルへの入力として前記処理部によって使用される、請求項2に記載のシステム。
【請求項4】
前記1つ以上の画素値を格納するための、前記記憶媒体における前記1つ以上のメモリアドレスを決定することは、
前記第1ループまたは前記第2ループの繰り返しごとに、
前記1つ以上の第1のハードウェア記憶回路に格納された前記水平座標の現在値を特定することと、
前記1つ以上の第2のハードウェア記憶回路に格納された前記垂直座標の現在値を特定することと、
前記水平座標の現在値および前記垂直座標の現在値に基づいて、前記水平座標の現在値および前記垂直座標の現在値に対応する前記画素座標のメモリアドレスを決定することとを含む、請求項2または3に記載のシステム。
【請求項5】
前記水平座標の現在値および前記垂直座標の現在値に対応する前記画素座標のメモリアドレスを決定することは、
前記水平座標の現在値と第1サイズ乗数との積に基づいて第1の部分アドレス値を決定することと、
前記垂直座標の現在値と第2サイズ乗数との積に基づいて第2の部分アドレス値を決定することと、
前記第1の部分アドレス値と前記第2の部分アドレス値との合計を求めることによって前記水平座標の現在値および前記垂直座標の現在値に対応する前記画素座標のメモリアドレスを決定することとを含む、請求項4に記載のシステム。
【請求項6】
前記水平座標の現在値および前記垂直座標の現在値に対応する前記画素座標のメモリアドレスは、前記第1の部分アドレス値と、前記第2の部分アドレス値と、基底メモリアドレスとの合計に等しい、請求項5に記載のシステム。
【請求項7】
前記第1ループは前記第2ループ内に入れ子にされている、または、前記第2ループは前記第1ループ内に入れ子にされている、請求項2~6のいずれか1項に記載のシステム。
【請求項8】
前記1つ以上のメモリアドレスを決定することは、前記画素座標の画素値のバイリニア補間で使うための4つの画素座標の各々のメモリアドレスを決定することを含み、前記4つの画素座標の各々のメモリアドレスを決定することは、
前記第1ループまたは前記第2ループの繰り返しごとに、
前記1つ以上の第1のハードウェア記憶回路に格納された前記水平座標の現在値を特定することと、
前記1つ以上の第2のハードウェア記憶回路に格納された前記垂直座標の現在値を特定することと、
垂直オフセット値を特定することと、
水平オフセット値を特定することと、
前記4つの画素座標のうちの第1の画素座標について、前記第1の画素座標の第1の画素値を格納するための第1メモリアドレスを、前記水平座標の現在値と前記垂直座標の現在値との合計に基づいて決定することと、
前記4つの画素座標のうちの第2の画素座標について、前記第2の画素座標の第2の画素値を格納するための第2メモリアドレスを、前記水平座標の現在値と、前記垂直座標の現在値と、前記垂直オフセット値との合計に基づいて決定することと、
前記4つの画素座標のうちの第3の画素座標について、前記第3の画素座標の第3の画素値を格納するための第3メモリアドレスを、前記水平座標の現在値と、前記垂直座標の現在値と、前記水平オフセット値との合計に基づいて決定することと、
前記4つの画素座標のうちの第4の画素座標について、前記第4の画素座標の第4の画素値を格納するための第4メモリアドレスを、前記水平座標の現在値と、前記垂直座標の現在値と、前記垂直オフセット値と、前記水平オフセット値との合計に基づいて決定することとを含む、請求項2~7のいずれか1項に記載のシステム。
【請求項9】
前記垂直オフセット値は、少なくとも前記画像の水平画素の数に基づき、前記水平オフセット値は1に等しい、請求項8に記載のシステム。
【請求項10】
前記1つ以上のハードウェアプロセッサは、前記4つの画素座標の各々のバイリニア補間の重みを決定し、各重みを前記処理部に出力し、
前記処理部は、前記4つの画素座標の各々にある前記画素値および前記4つの画素座標の各々の重みを使用して前記機械学習モデルの入力画素値を決定する、請求項8または9に記載のシステム。
【請求項11】
前記4つの画素座標の各々の重みは、前記画素座標の水平座標の小数部分および前記画素座標の垂直座標の小数部分に基づく、請求項10に記載のシステム。
【請求項12】
前記処理部は、
前記複数の画素座標の各々について、前記画素座標の1つ以上のメモリアドレスに格納された画素値から1つ以上の色値を決定することによって前記機械学習モデルへの入力を生成するように構成され、
生成された前記入力を前記機械学習モデルを使用して処理し、機械学習出力を生成するように構成される、請求項1~11のいずれか1項に記載のシステム。
【請求項13】
1つ以上のハードウェアプロセッサによって実行される方法であって、前記方法は、
学習済の機械学習モデルにより入力として処理される画像の画像データを受け付けるステップを含み、前記画像データは、前記画像のサイズを規定し、前記画像のサイズは、水平画素サイズおよび垂直画素サイズを規定し、前記水平画素サイズは、前記画像の水平方向に沿った画素の数であり、前記垂直画素サイズは、前記画像の垂直方向に沿った画素の数であり、前記方法は、さらに、
前記画像のサイズが、前記機械学習モデルが処理するように構成された画像の特定のサイズに一致しないことを判断するステップと、
前記画像のサイズが前記特定のサイズに一致しないと判断したことに応答して、前記特定のサイズと一致するサイズを有している変換画像のためのメモリアドレスを決定するステップとを含み、前記メモリアドレスを決定するステップは、
前記画像のサイズおよび前記特定のサイズに基づいて、前記画像の水平画素ストライドおよび垂直画素ストライドを決定するステップとを含み、前記水平画素ストライドは、前記画像の前記水平画素サイズおよび前記特定のサイズの水平画素サイズに基づくものであり、前記垂直画素ストライドは、前記画像の前記垂直画素サイズおよび前記特定のサイズの垂直画素サイズに基づくものであり、前記方法は、さらに、
前記水平画素ストライドおよび前記垂直画素ストライドを使用して、前記変換画像のための複数の画素座標を決定するステップとを含み、各画素座標は、垂直座標および水平座標を含み、
前記変換画像のための前記複数の画素座標の各々について、各画素座標についての前記機械学習モデルへの入力を生成するために使われることになる前記画像の1つ以上の画素値を格納するための、記憶媒体における前記メモリアドレスを決定するステップを含み、各画素座標についての前記1つ以上のメモリアドレスは、各画素座標の垂直座標および水平座標に基づくものであり、前記方法は、さらに、
前記複数の画素座標の各々について、前記変換画像についての前記メモリアドレスを示すデータを、前記機械学習モデルを使用して画像についての機械学習演算を行うように構成された処理部に出力するステップを含み
前記処理部、前記出力されたデータを使用して、前記メモリアドレスに格納された1つ以上の画素値にアクセスして、前記機械学習モデルへの入力として、前記変換画像の画素値を生成するとともに、前記生成された画素値に基づいて機械学習演算を行う、方法。
【請求項14】
前記複数の画素座標を決定するステップは、
初期の水平座標と初期の垂直座標とを含む初期の画素座標を求めるステップと、
前記初期の水平座標を1つ以上の第1のハードウェア記憶回路に格納するステップと、
前記初期の垂直座標を1つ以上の第2のハードウェア記憶回路に格納するステップと、
前記画像の水平画素サイズをトラバースするために使用される第1ループの繰り返しごとに、前記第1ループの繰り返しの後に前記水平画素ストライドを前記水平座標の現在値に加算することによって前記水平座標の現在値を更新し、前記垂直座標の現在値に更新する度に、前記水平座標の現在値を前記1つ以上の第1のハードウェア記憶回路に格納するステップと、
前記画像の垂直画素サイズをトラバースするために使用される第2ループの繰り返しごとに、前記第2ループの繰り返しの後に前記垂直画素ストライドを前記垂直座標の現在値に加算することによって前記垂直座標の現在値を更新し、前記垂直座標の現在値に更新する度に、前記垂直座標の現在値を前記1つ以上の第2のハードウェア記憶回路に格納するステップとを含む、請求項13に記載の方法。
【請求項15】
画素座標ごとに決定された前記1つ以上のメモリアドレスは、当該画素座標の最近傍画素の画素値を格納するための前記記憶媒体における位置に対応し、各最近傍画素の前記画素値は、前記機械学習モデルへの入力として前記処理部によって使用される、請求項14に記載の方法。
【請求項16】
装置であって、
1つ以上のハードウェアプロセッサと、
画像の水平座標の現在値を格納するための1つ以上の第1のハードウェア記憶回路と、
画像の垂直座標の現在値を格納するための1つ以上の第2のハードウェア記憶回路とを備え、
前記1つ以上のハードウェアプロセッサは、
学習済の機械学習モデルにより入力として処理される画像の画像データを受け付け、前記画像データは、前記画像のサイズを規定し、前記画像のサイズは、水平画素サイズおよび垂直画素サイズを規定し、前記水平画素サイズは、前記画像の水平方向に沿った画素の数であり、前記垂直画素サイズは、前記画像の垂直方向に沿った画素の数であり、前記1つ以上のハードウェアプロセッサは、さらに、
前記画像のサイズが、前記機械学習モデルが処理するように構成された画像の特定のサイズに一致しないことを判断し、
前記画像のサイズが前記特定のサイズに一致しないと判断したことに応答して、前記特定のサイズと一致するサイズを有している変換画像のためのメモリアドレスを決定し、前記メモリアドレスを決定することは、
前記画像のサイズおよび前記特定のサイズに基づいて、前記画像の水平画素ストライドおよび垂直画素ストライドを決定することを含み、前記水平画素ストライドは、前記画像の前記水平画素サイズおよび前記特定のサイズの水平画素サイズに基づくものであり、前記垂直画素ストライドは、前記画像の前記垂直画素サイズおよび前記特定のサイズの垂直画素サイズに基づくものであり、
前記水平画素ストライドおよび前記垂直画素ストライドを使用して、前記変換画像のための複数の画素座標を決定することを含み、各画素座標は、垂直座標および水平座標を含み、前記画像のサイズが前記特定のサイズに一致しないと判断することに応答して、さらに、
前記水平座標を前記1つ以上の第1のハードウェア記憶回路に格納し、
前記垂直座標を1つ以上の第2のハードウェア記憶回路に格納し、前記1つ以上のハードウェアプロセッサは、さらに、
前記変換画像のための前記複数の画素座標の各々について、各画素座標についての前記機械学習モデルへの入力を生成するために使われることになる前記画像の1つ以上の画素値を格納するための、記憶媒体における前記メモリアドレスを決定することを含み、各画素座標についての前記1つ以上のメモリアドレスは、各画素座標の垂直座標および水平座標に基づくものであり、前記1つ以上のハードウェアプロセッサは、さらに、
前記装置と接続されるとともに、前記機械学習モデルを使用して画像についての機械学習演算を行うように構成された処理部に前記複数の画素座標の各々について、前記変換画像についての前記メモリアドレスを示すデータを出力するように構成され、
前記処理部は、前記出力されたデータを使用して、前記メモリアドレスに格納された1つ以上の画素値にアクセスして、前記機械学習モデルへの入力として、前記変換画像の画素値を生成するとともに、前記生成された画素値に基づいて機械学習演算を行う、装置。
【請求項17】
前記複数の画素座標を決定することは、
初期の水平座標と初期の垂直座標とを含む初期の画素座標を求めることと、
前記初期の水平座標を前記1つ以上の第1のハードウェア記憶回路に格納することと、
前記初期の垂直座標を前記1つ以上の第2のハードウェア記憶回路に格納することと、
前記画像の水平画素サイズをトラバースするために使用される第1ループの繰り返しごとに、前記第1ループの繰り返しの後に前記水平画素ストライドを前記水平座標の現在値に加算することによって前記水平座標の現在値を更新し、前記垂直座標の現在値に更新する度に、前記水平座標の現在値を前記1つ以上の第1のハードウェア記憶回路に格納することと、
前記画像の垂直画素サイズをトラバースするために使用される第2ループの繰り返しごとに、前記第2ループの繰り返しの後に前記垂直画素ストライドを前記垂直座標の現在値に加算することによって前記垂直座標の現在値を更新し、前記垂直座標の現在値に更新する度に、前記垂直座標の現在値を前記1つ以上の第2のハードウェア記憶回路に格納することとを含む、請求項16に記載の装置。
【発明の詳細な説明】
【背景技術】
【0001】
背景
機械学習を利用して画像を分類することができる。たとえば、ニューラルネットワークを使って画像を画像の視覚的特徴に基づいて分類することができる。ニューラルネットワークとは、受け付けた入力(たとえば、画像の特徴)に対する出力(たとえば、画像の分類結果)を生成する、1つ以上の層を採用した機械学習モデルである。いくつかのニューラルネットワークは、外層に加えて1つ以上の隠れ層を含む。ネットワークにおいて、各隠れ層の出力は、次の層、すなわち、次の隠れ層またはネットワークの出力層への入力として用いられる。ネットワークの各層は、一連のパラメータの現在値に従って、受け付けた入力から出力を生成する。
【0002】
いくつかのニューラルネットワークは、1つ以上の畳み込みニューラルネットワーク層を含む。各畳み込みニューラルネットワーク層は、関連する一連のカーネルを有する。カーネルは、重み入力の行列構造として表され得る。各畳み込み層は、これらのカーネルを用いて当該層への入力を処理する。また、層への一連の入力は、行列構造として表され得る。
【0003】
ニューラルネットワークは、特定の形状の画像を受け付けるように構成される。しかしながら、ニューラルネットワークを使って分類されるいくつかの画像は、設定された形状とは異なる形状を有する場合がある。
【発明の概要】
【課題を解決するための手段】
【0004】
概要
本明細書では、画像変換のための画素座標と、変換画像データを格納するためのメモリアドレスとを決定する特定用途向け演算ユニットに関する技術を説明する。
【0005】
一般に、本明細書に記載の主題の1つの革新的な態様は、画像についての機械学習演算を機械学習モデルおよびこれらの画像の画素値を使って行うように構成された処理部を備えるシステムに組み入れることができる。機械学習モデルは、特定の次元の画像を処理するように構成され得る。システムは、画像の画素値を格納するように構成された記憶媒体と、1つ以上のハードウェアプロセッサを含むメモリアドレス演算ユニットとを備え得る。1つ以上のハードウェアプロセッサは、画像の画像データを受け付けるように構成され得る。画像データは、画像の次元を規定し得る。画像の次元は、水平画素次元と、垂直画素次元とを規定し得る。水平画素次元は、画像の水平次元に沿った画素の数であり、垂直画素次元は、画像の垂直次元に沿った画素の数である。
【0006】
1つ以上のハードウェアプロセッサは、画像の次元が特定の次元に一致しないと判断し、画像の次元が特定の次元に一致しないと判断することに応答して、画像の次元および特定の次元に基づいて、画像の水平画素ストライド(stride)および垂直画素ストライドを決定し、水平画素ストライドおよび垂直画素ストライドを使用して、変換されたバージョンの入力画像の画素座標を決定するように構成され得る。各画素座標は、垂直座標および水平座標を含む。画素ストライドは、元画像の次元を特定の次元に変換するために用いられるファクターである。
【0007】
画素座標の各々について、1つ以上のハードウェアプロセッサは、複数の画素座標の各々について、画素座標についての機械学習モデルへの入力を生成するために使われることになる1つ以上の画素値を格納するための1つ以上のメモリアドレスを記憶媒体において決定し、各メモリアドレスを処理部に出力するように構成され得る。画素座標ごとの1つ以上のメモリアドレスは、画素座標の垂直座標および水平座標に基づく。
【0008】
これらのおよびその他の実装形態は、各々、次の特徴のうちの1つ以上を任意で含み得る。いくつかの態様では、処理部は、各メモリアドレスを使ってメモリアドレスに格納された画素値にアクセスし、メモリアドレスに格納された画素値に基づいて機械学習演算を行う。
【0009】
いくつかの態様では、メモリアドレス演算ユニットは、水平座標の現在値を格納するための1つ以上の第1のハードウェア記憶回路と、垂直座標の現在値を格納するための1つ以上の第2のハードウェア記憶回路とを含む。1つ以上のプロセッサは、初期の水平座標と初期の垂直座標とを含む初期の画素座標を求め、初期の水平座標を1つ以上の第1のハードウェア記憶回路に格納し、初期の垂直座標を1つ以上の第2のハードウェア記憶回路に格納し、画像の水平画素次元をトラバースするために使用される第1ループの繰り返しごとに、第1ループの繰り返しの後に水平画素ストライドを水平座標の現在値に加算することで水平座標の現在値を更新し、画像の垂直画素次元をトラバースするために使用される第2ループの繰り返しごとに、第1第2ループの繰り返しの後に垂直画素ストライドを垂直座標の現在値に加算することで垂直座標の現在値を更新すること、によって、画像の画素座標を決定し得る。
【0010】
いくつかの態様では、画素座標ごとに決定されたメモリアドレスは、画素座標の最近傍画素の画素値を格納するための記憶媒体における位置に対応する。各最近傍画素の画素値は、機械学習モデルへの入力として処理部によって使用され得る。
【0011】
いくつかの態様では、画素座標についての機械学習モデルへの入力を生成するために使われることになる1つ以上の画素値を格納するための1つ以上のメモリアドレスを記憶媒体において決定することは、第1ループまたは第2ループの繰り返しごとに、1つ以上の第1のハードウェア記憶回路に格納された水平座標の現在値を特定することと、1つ以上の第2のハードウェア記憶回路に格納された垂直座標の現在値を特定することと、水平座標の現在値および垂直座標の現在値に基づいて、水平座標の現在値および垂直座標の現在値に対応する画素座標のメモリアドレスを決定することとを含む。
【0012】
いくつかの態様では、水平座標の現在値および垂直座標の現在値に対応する画素座標のメモリアドレスを決定することは、水平座標の現在値と第1次元乗数との積に基づいて第1の部分アドレス値を決定することと、垂直座標の現在値と第2次元乗数との積に基づいて第2の部分アドレス値を決定することと、第1の部分アドレス値と第2の部分アドレス値との合計を求めることによって水平座標の現在値および垂直座標の現在値に対応する画素座標のメモリアドレスを決定することとを含む。
【0013】
いくつかの態様では、水平座標の現在値および垂直座標の現在値に対応する画素座標のメモリアドレスは、第1の部分アドレス値と第2の部分アドレス値と、基底メモリアドレスとの合計に等しい。第1ループは第2ループ内に入れ子にされている、または、第2ループは第1ループ内に入れ子にされている。
【0014】
いくつかの態様では、画素座標についての機械学習モデルへの入力を生成するために使われることになる1つ以上の画素値を格納するための1つ以上のメモリアドレスを記憶媒体において決定することは、画素座標の画素値のバイリニア補間で使うための4つの画素座標の各々のメモリアドレスを決定することを含む。これは、第1ループまたは第2ループの繰り返しごとに、1つ以上の第1のハードウェア記憶回路に格納された水平座標の現在値を特定することと、1つ以上の第2のハードウェア記憶回路に格納された垂直座標の現在値を特定することと、垂直オフセット値を特定することと、水平オフセット値を特定することと、4つの画素座標のうちの第1の画素座標について、第1の画素座標の第1の画素値を格納するための第1メモリアドレスを、水平座標の現在値と垂直座標の現在値との合計に基づいて決定することと、4つの画素座標のうちの第2の画素座標について、第2の画素座標の第2の画素値を格納するための第2メモリアドレスを、水平座標の現在値と、垂直座標の現在値と、垂直オフセット値との合計に基づいて決定することと、4つの画素座標のうちの第3の画素座標について、第3の画素座標の第3の画素値を格納するための第3メモリアドレスを、水平座標の現在値と、垂直座標の現在値と、水平オフセット値との合計に基づいて決定することと、4つの画素座標のうちの第4の画素座標について、第4の画素座標の第4の画素値を格納するための第4メモリアドレスを、水平座標の現在値と、垂直座標の現在値と、垂直オフセット値と、水平オフセット値との合計に基づいて決定することとを含む。
【0015】
いくつかの態様では、垂直オフセット値は、少なくとも画像の水平画素の数に基づき、水平オフセット値は1に等しい。1つ以上のプロセッサは、4つの画素座標の各々のバイリニア補間の重みを決定し、各重みを処理部に出力し得る。処理部は、4つの画素座標の各々にある画素値および4つの画素座標の各々の重みを使って機械学習モデルの入力画素値を決定し得る。4つの画素座標の各々の重みは、画素座標の水平座標の小数部分および画素座標の垂直座標の小数部分に基づき得る。
【0016】
いくつかの態様では、処理部は、画素座標の各々について、1つ以上のメモリアドレスに格納された画素座標の画素値から1つ以上の色値を決定することによって機械学習モデルへの入力を生成し、生成された入力を機械学習モデルを使って処理して機械学習出力を生成するように構成される。
【0017】
本明細書に記載の主題は、次の利点のうちの1つ以上を実現するような特定の実施の形態で実現され得る。変換画像の画素座標と画素座標の画素値を格納するためのメモリアドレスとを機械学習プロセッサによって決定することにより、機械学習モデルが処理するように構成された特定の形状ではない画像についての機械学習演算を行う際の待ち時間が減る。たとえば、機械学習プロセッサは、変換するために画像を別のコンピューティングシステムに送り返さなくても、当該画像をチップ上で変換することができる。また、これにより、別のコンピューティングシステムが変換を実行することを待たずに機械学習プロセッサが画像データの処理を継続できるので、プロセッサの処理スループットも向上する。
【0018】
単純な計算を使った少ない命令を用いて深く入れ子になったループを繰り返すことができる特定用途向け演算ユニットによって、より高いスループットと少ない待ち時間で画像をサイズ変更することが可能になる。演算ユニットのレジスタは、画像の画素座標の追跡と、画素データのメモリアドレスを決定するために使われるメモリアドレス値の追跡のために使用され得る。メモリアドレス値は、レジスタに格納された値に基づいた単純な演算を当てはめることによってすぐに特定することができる。単純な演算を使って、および機械学習演算を行う処理部とは別個のプロセッサによって画素値のメモリアドレス(および、任意で、それらの対応する重み)を決定することにより、処理部の演算サイクル数を減らすことができ、機械学習演算をさらに行えるよう、処理部の処理能力を増やすことができる。
【0019】
画素座標値を整数部分と小数部分とに分けることによって、同じ小数値を使ってバイリニア補間用の重みと画素値のメモリアドレスとを決定することができるようになる。これにより、機械学習プロセッサのメモリストレージ要件の低減、実行される演算の数の低減(たとえば、重みを決定するために画素同士の距離を別個に演算する必要がなくなる)、および重みを決定するために必要な命令の数の低減が可能になる。当該命令数の低減によって、メモリストレージ要件がさらに抑えられる。
【0020】
本態様およびその他の態様のその他の実装形態は、対応するシステムと、方法と、コンピュータプログラムとを含み、これらは、コンピュータ記憶装置上で符号化された、方法の動作を実行するように構成される。システム上にインストールされた、動作時にシステムに当該動作を実行させるソフトウェア、ファームウェア、ハードウェア、またはそれらの組合せにより、1つ以上のコンピュータから成るシステムを同様に構成することができる。命令を有することにより1つ以上のコンピュータプログラムを同様に構成することができる。当該命令は、データ処理装置によって実行されると、装置に当該動作を実行させる。
【0021】
本明細書に記載の発明の主題の1つ以上の実装形態の詳細を、添付の図面および以下の説明に記載する。発明の主題のその他の潜在的特徴、態様、および利点は、説明、図面、および特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【0022】
図1】演算システムの例を示すブロック図である。
図2】画像のバイリニア補間を説明する図である。
図3】画像データのメモリアドレスを決定するための工程の例を示すフロー図である。
図4】画像データのメモリアドレスを決定するための工程の別の例を示すフロー図である。
図5】画像データのメモリアドレスと、バイリニア補間用の重みとを決定するための工程の例を示すフロー図である。
【発明を実施するための形態】
【0023】
様々な図面における同じ参照番号および名称は、同じ要素を示す。
詳細な説明
一般に、ループの入れ子構造を用いてN次元の規則的な行列が処理される場合がある。N次元の規則的な行列は、以下、「テンソル」と称する。各ループは、N次元テンソルの各次元をトラバースする役割を担い得る。多次元テンソルは、行列であってもよく、多次元行列であってもよい。たとえば、2次元テンソルは行列であるが、3次元テンソルは複数の2次元行列から構成される3次元行列である。N次元テンソルの各次元は、1つ以上の要素を含んでもよい。各要素は、それぞれデータ値を格納してもよい。たとえば、テンソルは、プログラムにおける変数であってもよい。変数は、3つの次元を有し得る。第1次元は、300要素分の長さを有してもよく、第2次元の長さは、1000要素分であってもよく、第3次元の長さは、20要素分であってもよい。もちろん、各次元において、その他の要素数が可能である。
【0024】
入れ子ループにおいてテンソルをトラバースすることは、要素のメモリアドレス値の演算を行って、当該要素の対応するデータ値をロードまたは格納することを含み得る。forループがループの入れ子構造の例であり、ここでは、3つのループインデックス変数(たとえば、i、j、およびk)によって追跡される3つのループが入れ子になっており、3次元テンソルをトラバースする。ニューラルネットワークでは、テンソルに関連する1つ以上のドット積演算において要素の値が用いられてもよい。たとえば、要素の値は、対応するパラメータまたは重みで乗算されてもよい。入れ子構造のforループを用いてテンソルの要素が順番にトラバースされて、要素がアクセスされ、当該要素の値を用いた1つ以上の演算が実行されてもよい。引き続き3次元テンソルの例を用いると、変数iによって追跡されるループを外側のforループを用いてトラバースしてもよく、変数jによって追跡されるループを中間のforループを用いてトラバースしてもよく、変数kによって追跡されるループを内側のforループを用いてトラバースしてもよい。この例では、最初にアクセスされる要素は(i=0、j=0、k=0)であってもよく、2番目の要素は(i=0、j=0、k=1)であってもよく、以下同様である。上述したように、テンソルトラバーサルユニットを使用して、処理部が要素の値にアクセスし、当該要素の値を用いて1つ以上の演算を実行できるよう、入れ子ループを使用して要素ごとのメモリアドレスを順番に決定することができる。
【0025】
場合によっては、外側ループインデックス変数を使った内側ループのループ範囲の設定など、ループ範囲条件をプロセッサが実行する必要がある場合がある。たとえば、入れ子ループの最も内側のループを出るかどうかを決定する際、プログラムは、入れ子ループの最も内側のループのループインデックス変数の現在値を、最も外側のループのループインデックス変数の現在値と比較してもよい。
【0026】
これらのタスクは、分岐命令および整数演算命令など、かなりの数の命令を必要とする可能性がある。各ループ範囲が小さく、ループの繰り返し回数が多い場合、演算は、全体の実行時間のかなりの部分を要し、全体のパフォーマンスを深刻に低下させてしまう可能性がある。プロセッサのためのハードウェアテンソルトラバーサルユニットは、ループのトラバースおよびアドレス生成のすべてを行い、機械学習演算を実行するなどその他の作業を行うことができるようにプロセッサの数値演算ユニットを解放することによって、プロセッサの演算処理能力を向上させてもよい。
【0027】
テンソルは、画像の画像値、たとえば、ニューラルネットワークまたはその他の機械学習モデルによって処理されている画像の画素の色値を含み得る。たとえば、機械学習モデルは、画像を処理し、当該画像を1つ以上のオブジェクトクラスからオブジェクトを描画している画像として分類するように構成されてもよい。別の例として、機械学習モデルは、画像を処理し、オブジェクトを描画する画像における位置を特定するように構成されてもよい。さらに別の例として、機械学習モデルは、画像を処理し、画像の数値表現、たとえば、画像のコンテンツについての情報を伝える数値のベクトルを生成するように構成されてもよい。画像値は、画像の1つ以上の画素の値を含み得る。本明細書において、画素の値は、画素値と称され、画素の色を表す値(たとえば、グレースケール値またはRGB(赤、緑、もしくは青)値)を含み得る。RGBカラーの場合、テンソルは、赤値、緑値、および青値を画素ごとに含み得る。
【0028】
上記のように、ニューラルネットワークは、特定の形状の画像、たとえば、特定の水平次元と垂直次元とを有する画像を受け付けるように構成されてもよい。予想される入力形状に一致しない形状の画像の場合、当該画像は、ニューラルネットワークによって処理され得る前に予想される入力形状を有するよう、修正される必要がある。
【0029】
テンソルトラバーサルユニットは、予想される入力形状に画像を変換する画像変換処理において用いられる画素座標を決定することができる。また、テンソルトラバーサルユニットは、機械学習演算を実行する処理部が画素座標の対応する画素データにアクセスするまたは当該画素データを格納できるよう、変換画像の画素ごとに1つ以上のメモリアドレス値を演算する。適切な画素座標を決定する能力がない場合、テンソルトラバーサルユニットは、画像データを処理部または別のコンピューティングシステムに送り返して、メモリアドレス値を演算する前に画像変換を実行しなければならない。これらの特徴では、画像データをホストに送り返すことに関連した処理待ち時間が低減し、テンソルトラバーサルユニットおよび処理部の演算スループットが向上する。また、テンソルトラバーサルユニットの柔軟性も向上する。
【0030】
図1は、演算システム100の例を示すブロック図である。一般に、コンピューティングシステム102は、ホスト130から受け付けた入力画像142を処理し、ホスト130に提供される出力144を生成する。コンピューティングシステム102は、線形代数演算を行うように構成されてもよい。たとえば、コンピューティングシステム102は、機械学習モデル、たとえば、ニューラルネットワークを用いて機械学習演算を行うように構成されてもよい。
【0031】
コンピューティングシステム102は、処理部114と、記憶媒体116と、テンソルトラバーサルユニット120とを備える。処理部114は、入力画像142の画像データに対する演算を行って出力144を生成する1つ以上のプロセッサを含んでもよい。出力144は、入力画像142を特徴付ける、たとえば、画像データおよび機械学習モデルに基づいて、1つ以上のカテゴリに属しているオブジェクトの画像を含んでいるとして入力画像を分類するといった、分類結果またはその他の出力であってもよい。出力144は、別のコンピューティングシステム、たとえば、ユーザデバイスへの、受け付けた要求に応答した出力であり得る。
【0032】
記憶媒体116は、コンピューティングシステム102内の情報を格納する。いくつかの実装形態では、記憶媒体116は、1つまたは複数の揮発性記憶装置である。いくつかのその他の実装形態では、記憶媒体116は、1つまたは複数の不揮発性記憶装置である。また、記憶媒体116は、フロッピー(登録商標)ディスク装置、ハードディスク装置、光ディスク装置、またはテープ装置、フラッシュメモリもしくはその他の類似の固体メモリ装置、またはストレージエリアネットワークもしくはその他の構成に含まれる装置を含む装置のアレイなど、別の形態のコンピュータ読み取り可能な媒体であってもよい。
【0033】
テンソルトラバーサルユニット120は、特定用途向け集積回路として実現され得る。テンソルトラバーサルユニット120は、本明細書において、メモリアドレス演算ユニットとも称される。テンソルトラバーサルユニット120は、画像データを格納するためのメモリアドレスを決定するように構成された1つ以上のプロセッサ122を含み得る。また、テンソルトラバーサルユニット120は、数値演算ユニット124と、記憶回路126とを含む。数値演算ユニット124は、1つ以上の演算論理装置(ALU)および/または1つ以上の加算器を含み得る。たとえば、数値演算ユニット124は、1つ以上のハードウェアALUおよび/または1つ以上のハードウェア加算器を含み得る。数値演算ユニット124は、画像データを格納するためのメモリアドレスを決定するように構成される。記憶回路126は、ハードウェアメモリストレージ、たとえば、レジスタを含む。
【0034】
いくつかの実装形態では、テンソルトラバーサルユニット120は、画像の画素座標を、記憶媒体116に画素値を格納するためのメモリアドレスに変換する。たとえば、テンソルトラバーサルユニット120は、画素座標のセットを1次元のアドレス空間に変換し得る。画像の画素の画素座標は、垂直座標と水平座標とを含み得る。テンソルトラバーサルユニット120は、メモリアドレスを画素座標の垂直座標と水平座標との組合せ(たとえば、線型結合)にすることによってこの変換を行い得る。上述したように、画素値は、画素の色を表す値(たとえば、画素のグレースケール値またはRGB値)を含み得る。
【0035】
テンソルトラバーサルユニット120は、画素座標ごとに、画素の色を表す色値(複数可)の1つ以上のメモリアドレスを決定し得る。たとえば、画像がグレースケール値を用いて表されている場合、テンソルトラバーサルユニットは、画素ごとに、画素のグレースケール値を格納するための1つのメモリアドレスを決定し得る。画像がRGB値を用いて表されている場合、テンソルトラバーサルユニットは、画素ごとに、すべての3つの色値を格納するための1つのメモリアドレスを決定し得る。この例では、各メモリアドレスは、4バイトの記憶場所を参照してもよく、無視される予備のバイトとともに、色値ごとに1バイトが利用されてもよい。RGB色値が使われるいくつかの実装形態では、テンソルトラバーサルユニット120は、画素ごとに、画素の赤値を格納するための第1メモリアドレスと、画素の緑値を格納するための第2メモリアドレスと、画素の青値を格納するための第3メモリアドレスとを決定し得る。
【0036】
また、テンソルトラバーサルユニット120は、画像変換処理のための画素座標を決定することができる。画像変換処理では、画像を、当該画像を処理するために処理部114によって用いられる機械学習モデルの特定の次元に変換する。たとえば、特定の次元よりも大きい画像は、当該特定の次元に縮小され得る。同様に、特定の次元よりも小さい画像は、当該特定の次元に拡大され得る。
【0037】
テンソルトラバーサルユニット120は、最近傍法および/またはバイリニア法技術を使って拡大または縮小するための画素座標を決定することができる。いずれの技術の場合でも、テンソルトラバーサルユニット120は、変換画像、すなわち、機械学習モデルによって処理される画像の画素ごとに画素座標を決定することができる。本明細書において、変換画像の画素は、変換画素と称される。
【0038】
テンソルトラバーサルユニットは、画像を変換するために最近傍補間が使われるモードと、バイリニア法が使われるモードとを切り替えることができる。たとえば、ユーザは、コンピューティングシステム102のユーザインターフェースを利用して、最近傍法またはバイリニア法のいずれかを選択することができる。処理部114は、当該選択を規定するデータを受け付けて、当該データをテンソルトラバーサルユニット120に提供し得る。これに応答して、テンソルトラバーサルユニット120は、選択された変換技術を使い得る。
【0039】
変換画素ごとに、テンソルトラバーサルユニット120は、画素値(複数可)を格納するための記憶媒体116の1つ以上のメモリアドレスを決定し得る。最近傍補間が使われている場合、テンソルトラバーサルユニット120は、変換画素ごとに、変換画素の画素座標の位置に最も近い入力画像142の画素の画素値(複数可)を格納するためのメモリアドレスを決定し得る。たとえば、テンソルトラバーサルユニット120は、画素座標の位置に最も近い画素について、当該最も近い画素の色を表すために使われる1つ以上の色値を格納するためのメモリアドレスを決定し得る。
【0040】
バイリニア法実装が使われている場合、テンソルトラバーサルユニット120は、入力画像142における画素座標の位置に最も近い4画素のメモリアドレスを決定することができる。たとえば、テンソルトラバーサルユニット120は、4画素の各々について、画素の色を表すために用いられる1つ以上の色値を格納するためのそれぞれのメモリアドレスを決定し得る。
【0041】
テンソルトラバーサルユニット120は、これらのメモリアドレスを処理部114に出力し得る。処理部114は、メモリアドレスに格納された画素値にアクセスし、当該画素値を用いて機械学習演算を行って、たとえば、入力画像142を分類し得る。バイリニア法が使われている場合、処理部114は、後述するが、色値(たとえば、赤値、緑値、または青値)ごとの4つの画素値にアクセスし、色値ごとに、変換画素の色を表す値を決定し得る。次に、処理部114は、変換画素ごとの色値(複数可)を用いて機械学習演算を実行し、機械学習出力、たとえば、出力144を生成し得る。次に、入力画像142を分類する要求に応答して、処理部114は、機械学習出力144をチップ外に、たとえば、ユーザデバイスに提供する。
【0042】
画素座標を決定するというテンソルトラバーサルユニットの能力がない場合、テンソルトラバーサルユニット120は、機械学習モデルのための特定の次元を有さない画像を、変換のために処理部114またはホスト130に送り返さなければならない。画素座標およびメモリアドレスを決定する能力によって、機械学習演算を実行する際の待ち時間が低減し、コンピューティングシステム102の処理スループット(たとえば、テンソルトラバーサルユニット120および/または処理部114の処理スループット)が向上する。
【0043】
テンソルトラバーサルユニット120は、ループの入れ子構造を使って画素座標および画素座標のメモリアドレスを決定することができる。ループの入れ子構造は、画像の水平画素次元をトラバースする第1ループと、画像の垂直画素次元をトラバースする第2ループとを含み得る。第1ループの繰り返しごとに、テンソルトラバーサルユニット120は、更新水平座標を決定する。第2ループの繰り返しごとに、テンソルトラバーサルユニット120は、更新垂直座標を決定する。第1ループを第2ループ内に入れ子にしたり、第2ループを第1ループ内に入れ子にしたりすることができる。
【0044】
変換画素の画素座標を決定するために、テンソルトラバーサルユニット120は、初期の変換画素の入力画像142内の初期の画素座標を求め得る。たとえば、この初期の変換画素は、変換画像の左上の画素であってもよい。この例では、入力画像の左上隅の座標は、(x=0,y=0)であってもよく、画像の右下隅の座標は、(x=画像に含まれる水平画素の総数、y=画像に含まれる垂直画素の総数)であってもよい。ここで、xは、水平次元であり、yは、垂直次元である。入力画像と変換画像との相対的な大きさに応じて、入力画像内の初期の変換画素の画素座標は、(x=0.375,y=0.375)に設定されてもよい。
【0045】
この例のために、第2ループが外側ループであり、第1ループが内側ループであり、y
major、x minorの順に左上隅から右下隅への順に画像をトラバースすると考える。このように、画像は、画像の最上行から始まって、一度に画素の水平方向の1行をトラバースし、画像の右下隅で終わる。
【0046】
第1ループの繰り返しごとに、テンソルトラバーサルユニット120は、たとえば、水平ストライドの値を水平座標の以前の値に加算することによって水平座標を更新することができる。たとえば、初期の画素座標は、(0.375,0.375)であってもよく、水平ストライドは、1.375であってもよい。この例では、水平ストライドの値(1.375)を以前の水平座標に加算することによって、第2の画素座標は、(1.75,0.375)になる。テンソルトラバーサルユニット120は、第1ループのループ範囲条件に到達するまで、たとえば、テンソルトラバーサルユニット120が画像の行の終わりに到達するまで水平ストライドの値を以前の水平座標に加算することによって入力画像142の水平次元をトラバースし得る。第1ループのループ条件に到達する度に、テンソルトラバーサルユニット120は、水平座標をその初期値(0.375)にリセットし、垂直ストライドの値を以前の垂直座標に加算して画像の次の行にトラバースすることによって垂直画素座標を更新し得る。この例では、2行目の最初の画素座標は、(0.375,1.75)となる。テンソルトラバーサルユニット120は、第2ループのループ範囲に到達するまで、たとえば、変換画像の変換画素ごとの画素座標が決定されるまでこの工程を継続し得る。
【0047】
決定された画素座標ごとに、テンソルトラバーサルユニット120は、画素座標の画素値(複数可)を格納するための1つ以上のメモリアドレスを決定し得る。最近傍法実装では、テンソルトラバーサルユニット120は、各変換画素の最近傍画素の画素値を格納するためのメモリアドレスを決定し得る。バイリニア法実装では、テンソルトラバーサルユニット120は、変換画素座標ごとに4つのメモリアドレス、変換画素座標の画素値を決定するために用いられる画素値の各々について1つのアドレスを決定し得る。
【0048】
上記例で示したように、変換画素の画素座標は、小数コンポーネントを有する場合がある。テンソルトラバーサルユニット120は、固定小数点数を使って画素座標値を表し得る。いくつかの実装形態では、テンソルトラバーサルユニット120は、画素座標の整数値を、画素座標の小数部分とは分けて格納する。たとえば、図1に示すように、テンソルトラバーサルユニット120は、垂直画素座標の整数部分を格納する垂直画素座標整数要素132と、垂直画素座標の小数部分を格納する垂直画素座標小数要素134とを含む。同様に、テンソルトラバーサルユニット120は、水平画素座標の整数部分を格納する水平画素座標整数要素136と、水平画素座標の小数部分を格納する水平画素座標小数要素138とを含む。各要素132~138は、レジスタまたはその他の記憶回路を含み得る。
【0049】
また、垂直ストライドの整数部分および小数部分と、水平ストライドの整数部分および小数部分とは、たとえば、それぞれのレジスタまたはその他の記憶回路に別々に格納され得る。テンソルトラバーサルユニット120が垂直座標を更新する場合、テンソルトラバーサルユニットは、垂直ストライドの整数部分を垂直座標の整数部分に加算し、垂直ストライドの小数部分を垂直座標の小数部分に加算し得る。この更新によって垂直座標の小数部分が1以上になるたびに、テンソルトラバーサルユニット120は、1という値を垂直座標の整数部分に加算し、1という値を垂直座標の小数部分から減算して垂直座標の小数部分を1よりも小さく維持し得る。
【0050】
同様に、テンソルトラバーサルユニット120が水平座標を更新する場合、テンソルトラバーサルユニットは、水平ストライドの整数部分を水平座標の整数部分に加算し、水平ストライドの小数部分を水平座標の小数部分に加算し得る。この更新によって水平座標の小数部分が1以上になるたびに、テンソルトラバーサルユニット120は、1という値を水平座標の整数部分に加算し、1という値を水平座標の小数部分から減算して水平座標の小数部分を1よりも小さく維持し得る。
【0051】
図2は、画像のバイリニア補間を説明する図解200である。図解200は、入力画像の画素レイアウト210と、変換されたバージョンの入力画像(「変換画像」)の画素レイアウト220とを含む。各画素レイアウト210および220における四角形のそれぞれは、画素を表す。この例では、入力画像は、水平画素次元に10画素、垂直画素次元に10画素を有する。同様に、変換画像は、水平画素次元に7画素、垂直画素次元に7画素を有する。たとえば、機械学習モデルは、水平画素次元に7画素、垂直画素次元に7画素を有する画像を処理するように構成されてもよい。
【0052】
入力画像を変換するために、変換画像の画素ごとに入力画像内の画素座標のセットが特定される。たとえば、変換画像の左上の画素222に対して点212の画素座標が特定される。同様に、画素222の右側の画素223に対して点213の画素座標が特定される。
【0053】
変換画像の画素ごとの画素値を決定するために、当該画素の画素座標に最も近い4画素がソース画素として特定される。画素222については、212に最も近い4画素は、ソース画素215a、215b、215c、および215dである。画素222の画素値は、ソース画素215a~215dの画素値の加重組合せであり得る。ソース画素ごとの重みは、点212の画素座標からのソース画素の距離に基づき得る。たとえば、点212により近いソース画素の画素値は、点212からより離れたソース画素の画素値よりも重く加重される。この例では、ソース画素215aの画素値には、ソース画素215cの画素値よりも大きな重みが割り当てられる。変換画像の画素座標、変換画像の画素ごとの4つのソース画素、および各ソース画素の画素値の重みを決定するための技術の例を以下に説明する。
【0054】
図3は、画像データのメモリアドレスを決定するための例示的な工程300を説明するフロー図である。工程300は、1つ以上のコンピュータから構成されるシステム、たとえば、図1のコンピューティングシステム102によって実行されてもよい。システムは、テンソルトラバーサルユニット、たとえば、図1のテンソルトラバーサルユニット120を備える。
【0055】
システムは、画像の画像データを受け付ける(302)。たとえば、テンソルトラバーサルユニットは、画像データを受け付け得る。画像データは、画像の次元を規定し得る。画像の次元は、水平画素次元と、垂直画素次元とを規定し得る。水平画素次元は、画像の水平次元に沿った画素の数である。垂直画素次元は、画像の垂直次元に沿った画素の数である。たとえば、高さ500画素×幅400画素の画像は、垂直画素次元が500で、水平画素次元が400になる。
【0056】
システムは、画像の次元が機械学習モデルの特定の次元に一致しないと判断する(304)。たとえば、機械学習モデルは、特定の次元の画像を処理(たとえば、分類)するように構成されてもよい。特定の次元は、特定の垂直画素次元と、特定の水平画素次元とを規定し得る。テンソルトラバーサルユニットは、画像の次元を機械学習モデルの特定の次元と比較し得る。画像の垂直画素次元が機械学習モデルの特定の垂直画素次元に一致しない場合、または画像の水平画素次元が機械学習モデルの特定の水平画素次元に一致しない場合、テンソルトラバーサルユニットは、画像の次元が機械学習モデルの特定の次元に一致しないと判断し得る。
【0057】
システムは、画像の水平画素ストライドと垂直画素ストライドとを決定する(306)。水平画素ストライドおよび垂直画素ストライドは、画像内の画素座標を変換されたバージョンの画像変換画素ごとに特定するために使われる。
【0058】
テンソルトラバーサルユニットは、画像の次元および機械学習モデルの特定の次元に基づいて水平画素ストライドと垂直画素ストライドとを決定し得る。いくつかの実装形態では、これらのストライドは、下記の関係式1および2を使って決定される。
【0059】
【数1】
【0060】
いくつかの実装形態では、テンソルトラバーサルユニットは、水平ストライドと垂直ストライドとを、テンソルトラバーサルユニットのそれぞれの記憶回路、たとえば、レジスタに格納する。上述したように、これらのストライドは、固定小数点数の形式で格納されてもよく、各ストライドの整数部分は、ストライドの小数部分とは別に格納されてもよい。この例では、ストライドの小数部分は、最も近い固定小数点数に端数処理されてもよい。最も近い固定小数点数は、各ストライドを格納するために使われるビットの数を用いて表され得る。たとえば、画像の次元が10×10であり、機械学習モデルの特定の次元が7×7である場合、水平ストライドは1.375となり、垂直ストライドは1.375となる。小数部分(0.375)は、小数部分を格納するためのレジスタが7ビットである場合、または小数部分の固定小数点数が7ビットを含む場合、48/128に端数処理され得る。
【0061】
システムは、変換されたバージョンの画像の画素座標を決定する(308)。テンソルトラバーサルユニットは、水平画素ストライドと垂直画素ストライドとを使って画素座標を決定し得る。たとえば、上述したように、テンソルトラバーサルユニットは、ループの入れ子構造を使ってストライド値を画素座標の現在値に加算することによって画素値を決定し、画素座標を決定し得る。例として、ループとストライドとを使って画素座標を決定するための工程を図4に示し、詳細を以下に説明する。
【0062】
システムは、特定された画素座標ごとに1つ以上のメモリアドレスを決定する(310)。画素座標ごとのメモリアドレスは、画素座標についての機械学習モデルへの入力を生成するために使われることになる1つ以上の画素値を格納するための、記憶媒体における位置に対応する。テンソルトラバーサルユニットは、垂直座標の値および水平座標の値に基づいて画素座標のメモリアドレスを決定し得る。画素座標セットごとにメモリアドレス(複数可)を決定するための技術の例を、図4および図5を参照しながら以下に説明する。
【0063】
図4は、画像データのメモリアドレスを格納するための別の例示的な工程400を説明するフロー図である。工程400は、1つ以上のコンピュータから成るシステム、たとえば、図1のコンピューティングシステム102によって実行されてもよい。システムは、テンソルトラバーサルユニット、たとえば、図1のテンソルトラバーサルユニット120を備える。
【0064】
システムは、入力画像の初期の画素座標を求める(402)。初期の画素座標は、変換されたバージョンの画像変換画素の画像内の画素座標である。初期の画素座標は、画像の水平次元に沿った水平座標と、画像の垂直次元に沿った垂直座標とを含む。たとえば、変換画素の画素座標が左から右、そして上から下に決定される場合、初期の画素座標は、画像の左上近くの座標であり得る。その他の例では、初期の画素座標は、右下近く、または画像内の別の適切な位置であってもよい。
【0065】
いくつかの実装形態では、テンソルトラバーサルユニットは、水平画素ストライドおよび/または垂直画素ストライドに基づいて初期の画素座標を求める。テンソルトラバーサルユニットは、上記関係式1および2をそれぞれ使って水平画素ストライドおよび垂直画素ストライドを決定することができる。テンソルトラバーサルユニットは、下記の関係式3および4を使って初期の水平座標および初期の垂直座標を求めることができる。
【0066】
初期の水平座標=水平画素ストライド-1 (3)
初期の垂直座標=垂直画素ストライド-1 (4)
システムは、初期の水平座標を1つ以上のハードウェア記憶回路に格納する(404)。ハードウェア記憶回路は、テンソルトラバーサルユニットの記憶回路、たとえば、レジスタであり得る。たとえば、テンソルトラバーサルユニットは、初期の水平座標の整数部分を水平画素座標整数要素(たとえば、図1の水平画素座標整数要素136)に格納し、水平座標の小数部分を水平画素座標小数要素(たとえば、図1の水平画素座標小数要素138)に格納し得る。
【0067】
システムは、初期の垂直座標を1つ以上のハードウェア記憶回路に格納する(406)。ハードウェア記憶回路は、テンソルトラバーサルユニットの記憶回路、たとえば、レジスタであり得る。たとえば、テンソルトラバーサルユニットは、初期の垂直座標の整数部分を垂直画素座標整数要素(たとえば、図1の垂直画素座標整数要素132)に格納し、垂直座標の小数部分を垂直画素座標小数要素(たとえば、図1の垂直画素座標小数要素134)に格納し得る。
【0068】
システムは、画素座標の1つ以上のメモリアドレスを決定する(408)。初回の繰り返しでは、テンソルトラバーサルユニットは、初期の画素座標の1つ以上のメモリアドレスを決定し得る。上述したように、画像の水平次元および垂直次元をトラバースするために使用されるループの繰り返しごとに画素座標が更新される。更新された画素座標ごとに、テンソルトラバーサルユニットは、1つ以上のメモリアドレスを決定し得る。
【0069】
各メモリアドレスは、画素値を格納するための記憶媒体における位置に対応する。メモリアドレスは、処理部、たとえば、図1の処理部114によって画素値をロードまたは格納するために使われる。たとえば、処理部は、画素値のメモリアドレスを使って画素値を取得し、画素値に基づいて機械学習モデルの入力を生成してもよい。最近傍法実装では、生成された入力は、画素値自体であってもよい。バイリニア法実装において、生成された入力は、4つの画素値の加重組合せであってもよい。
【0070】
最近傍法実装では、画素座標のメモリアドレスは、画素座標に最も近い(たとえば、最近傍の)入力画像内の画素の画素値を格納するための記憶媒体における位置に対応する。メモリアドレスは、画素座標の垂直座標と水平座標とに基づき得る。たとえば、テンソルトラバーサルユニットは、水平座標に基づいて第1の部分アドレス値を決定し、垂直座標に基づいて第2の部分アドレス値を決定し得る。
【0071】
いくつかの実装形態では、第1の部分アドレス値は、水平座標および第3次元(たとえば、z方向)の大きさに基づく。第3次元は、画素の色を表すために使われる色値の数に基づき得る。たとえば、グレースケール値が使われる場合、第3次元の大きさは、1であり得る。RGB色値が使われる場合、第3次元の大きさは、1(たとえば、すべての3つの色値が同じメモリアドレスに格納された場合)または3(たとえば、各色値が別々に格納された場合)であり得る。水平座標が小数部分を含んでいる可能性があるため、水平座標の値の端数が切り捨てられ得る。たとえば、テンソルトラバーサルユニットは、0.5という値が端数処理されてゼロになる五捨六入を使って水平座標の端数を切り捨て得る。第1の部分アドレス値は、端数処理された水平座標と第3次元の大きさとの積に基づき得る。
【0072】
同様に、第2の部分アドレス値は、垂直座標、および水平次元の大きさ(たとえば、画像の水平次元に沿った画素の数)と第3次元の大きさとの積に基づき得る。垂直座標が小数部分も含んでいる可能性があるので、たとえば、五捨六入を使って垂直座標の値も端数が切り捨てられ得る。第2の部分アドレス値は、端数処理された垂直座標、および水平次元の大きさと第3次元の大きさとの積に基づき得る。これにより、画素座標のセットごとに一意のメモリアドレスが必ず割り当てられることになる。
【0073】
画素座標のメモリアドレスは、第1の部分アドレス値と第2の部分アドレス値との合計に基づき得る。たとえば、メモリアドレスは、第1の部分アドレス値と、第2の部分アドレス値と、基底アドレスとの合計に等しくてもよい。
【0074】
バイリニア法実装において、テンソルトラバーサルユニットは、画素座標に基づいて4つのメモリアドレスを決定し得る。各メモリアドレスは、入力画像に含まれる4つのソース画素のうちの、入力画像における画素座標の位置に最も近い1つの画素の画素値(複数可)を格納するための記憶媒体における位置に対応する。たとえば、4つのソース画素は、画素座標の位置の下の左側にある左下画素と、画素座標の位置の下の右側にある右下画素と、画素座標の位置の上の左側にある左上画素と、および画素座標の位置の上の右側にある右上画素とを含んでもよい。4つのメモリアドレスを決定するための工程例を図5および以下に説明する。
【0075】
システムは、水平座標の現在値を更新し、画像の水平次元をトラバースするために使用されるループのループインデックスを更新する(410)。いくつかの実装形態では、ループインデックスを更新するために、システムは、1という値をループインデックスの以前の値に加算することによってループインデックスを繰り返し得る。いくつかの実装形態では、水平座標はループインデックスとして使用されるため、水平座標が更新された場合に更新される。
【0076】
水平座標を更新するために、テンソルトラバーサルユニットは、水平ストライドを水平座標の現在値に加算し、水平座標の更新値を格納し得る。ループの初回の繰り返しでは、テンソルトラバーサルユニットは、水平ストライドを初期の水平座標に加算する。
【0077】
水平座標の整数部分と小数部分とが別々に格納される場合、テンソルトラバーサルユニットは、水平画素ストライドの整数部分を水平座標の整数部分に加算し得る。同様に、テンソルトラバーサルユニットは、水平画素ストライドの小数部分を水平座標の小数部分に加算し得る。これによって水平座標の小数部分が1以上になった場合、テンソルトラバーサルユニットは、小数部分を1よりも下に維持するよう、水平座標の整数部分に1を加算し、水平座標の小数部分から1を減算し得る。
【0078】
システムは、画像の水平次元をトラバースするために使用されるループのループインデックスがその範囲以上であるかどうかを判断する(412)。この範囲は、変換画像に含まれる水平画素の数に基づき得る。たとえば、機械学習モデルの特定の次元が水平次元に7画素を有する場合、画像の水平方向の各行の7画素の座標とメモリアドレスとが決定されるよう、ループは、7回の繰り返しを含んでいる可能性がある。たとえば、ループインデックスはゼロから始まり、範囲は、6である可能性がある。ループインデックスが6という値に到達した場合、システムは、ループインデックスがその範囲に等しいと判断し得る。
【0079】
水平次元をトラバースするために使用されるループのループインデックスがその範囲以上でない場合、システムは、動作(408)に戻り、以前の垂直座標と更新された水平座標とを含む更新画素座標のための1つ以上のメモリアドレスを決定する。水平次元をトラバースするために使用されるループのループインデックスがその範囲以上である場合、システムは、水平座標の値を初期の水平座標にリセットし、水平次元をトラバースするために使用されるループのループインデックスをその初期値にリセットする(414)。
【0080】
システムは、垂直座標の現在値を更新し、画像の垂直次元をトラバースするために使用されるループのループインデックスを更新する(416)。いくつかの実装形態では、ループインデックスを更新するために、システムは、1という値をループインデックスの以前の値に加算することによってループインデックスを繰り返し得る。いくつかの実装形態では、垂直座標はループインデックスとして使用されるため、垂直座標が更新された場合に更新される。
【0081】
垂直座標を更新するために、テンソルトラバーサルユニットは、垂直ストライドを垂直座標の現在値に加算し、垂直座標の更新値を格納し得る。ループの初回の繰り返しでは、テンソルトラバーサルユニットは、垂直ストライドを初期の垂直座標に加算する。
【0082】
垂直座標の整数部分と小数部分とが別々に格納される場合、テンソルトラバーサルユニットは、垂直画素ストライドの整数部分を垂直座標の整数部分に加算し得る。同様に、テンソルトラバーサルユニットは、垂直画素ストライドの小数部分を垂直座標の小数部分に加算し得る。これによって垂直座標の小数部分が1以上になった場合、テンソルトラバーサルユニットは、小数部分を1よりも下に維持するよう、垂直座標の整数部分に1を加算し、垂直座標の小数部分から1を減算し得る。
【0083】
システムは、画像の垂直次元をトラバースするために使用されるループのループインデックスがその範囲以上であるかどうかを判断する(418)。この範囲は、変換画像に含まれる垂直画素の数に基づき得る。たとえば、機械学習モデルの特定の次元が垂直次元に7画素を有する場合、画像の垂直方向の各列の7画素の座標とメモリアドレスとが決定されるよう、ループは、7回の繰り返しを含んでいる可能性がある。たとえば、ループインデックスはゼロから始まり、範囲は、6である可能性がある。ループインデックスが6という値に到達した場合、システムは、ループインデックスがその範囲に等しいと判断し得る。
【0084】
垂直次元をトラバースするために使用されるループのループインデックスがその範囲以上でない場合、システムは、動作(408)に戻り、更新された垂直座標とリセットされた水平座標(初期の水平座標)とを含む更新画素座標のための1つ以上のメモリアドレスを決定する。これにより、水平次元についてのループを使った、画像の水平次元に沿った別の行のトラバースが開始することになる。
【0085】
水平次元をトラバースするために使用されるループのループインデックスがその範囲以上である場合、変換画像の変換画素ごとの1つ以上のメモリアドレスが決定されたとして、工程400は終了する。
【0086】
アドレスがたとえば順番に決定されると、テンソルトラバーサルユニットは、各メモリアドレスを処理部に出力し得る。いくつかの実装形態では、変換画素ごとのメモリアドレス(複数可)が決定された後、テンソルトラバーサルユニットは、当該メモリアドレスを出力し得る。処理部は、これらのメモリアドレスを使って画素値をロードまたは格納し得る。
【0087】
この例では、画像の水平次元をトラバースするために使用されるループが、入力画像の垂直次元をトラバースするために使用されるループ内に入れ子にされている。下記のループの入れ子構造を使って入力画像のメモリアドレスを決定することができる。
【0088】
【数2】
【0089】
この例では、initial_yが、初期の垂直座標であり、coord_yが、垂直座標の現在値であり、size_yが、入力画像の垂直次元に沿った画素の数である。よって、外側ループのループ範囲は、画像の垂直次元に沿った画素の数よりも1小さい値に等しく、ループインデックスは、垂直座標の現在値である。外側ループの各繰り返しの後、垂直座標の現在値は、垂直画素ストライドを垂直座標の現在値に加算することによって更新される。これに加えて、第2の部分アドレス値(second_partial_address_value)は、(たとえば、最近傍法の場合、五捨六入、バイリニア法の場合、フロア関数を使って)垂直座標の現在値の端数を切り捨てて、端数処理された値を画像の水平次元の大きさと第3次元の大きさとの積で乗算することによって決定される。
【0090】
同様に、initial_xが、水平座標の初期値であり、coord_xが、水平座標の現在値であり、size_xが、画像の水平次元に沿った画素の数である。よって、内側ループのループ範囲は、画像の水平次元に沿った画素の数よりも1小さい値に等しく、ループインデックスは、水平座標の現在値である。内側ループの各繰り返しの後、水平座標の現在値は、水平画素ストライドを水平座標の現在値に加算することによって更新される。これに加えて、第1の部分アドレス値(first_partial_address_value)は、(たとえば、最近傍法の場合、五捨六入、バイリニア法の場合、座標以下の最大整数を出力するフロア関数を使って)水平座標の現在値の端数を切り捨てて、端数処理された値を第3次元の大きさで乗算することによって決定される。
【0091】
また、内側ループの繰り返しごとに、画素座標のメモリアドレス(memory_address)も決定される。最近傍法実装の場合、メモリアドレスは、第1の部分アドレス値と、第2の部分アドレス値と、基底アドレス(任意)との合計に等しくてもよい。後述するが、バイリニア法実装の場合、垂直オフセット値および水平オフセット値を使って4つのメモリアドレスを決定することができる。
【0092】
図5は、画像データのメモリアドレスと、バイリニア補間用の重みとを決定するための例示的な工程500を説明するフロー図である。工程500は、1つ以上のコンピュータから構成されるシステム、たとえば、図1のコンピューティングシステム102によって実行されてもよい。このシステムは、テンソルトラバーサルユニット、たとえば、図1のテンソルトラバーサルユニット120を備える。入力画像を変換するためにバイリニア法が使われている場合、工程500の動作(またはその一部)は、図4の動作408のサブ動作であり得る。
【0093】
システムは、入力画像内の水平座標の現在値を特定する(502)。たとえば、上述したように、ループを使って入力画像の水平次元をトラバースし、変換されたバージョンの画像の変換画素の画素座標の水平座標を決定および更新することができる。ループの各繰り返しにおいて、たとえば、水平画素ストライドを水平座標の以前の値に加算することによって水平座標の現在値を更新することができる。テンソルトラバーサルユニットは、水平座標の現在値を1つ以上のハードウェア記憶回路に保持することができる。
【0094】
システムは、入力画像内の垂直座標の現在値を特定する(504)。たとえば、上述したように、ループを使って入力画像の垂直次元をトラバースし、変換されたバージョンの画像の変換画素の画素座標の垂直座標を決定および更新することができる。ループの各繰り返しにおいて、たとえば、垂直画素ストライドを垂直座標の以前の値に加算することによって垂直座標の現在値を更新することができる。テンソルトラバーサルユニットは、垂直座標の現在値を1つ以上のハードウェア記憶回路に保持することができる。
【0095】
システムは、水平オフセット値を特定する(506)。入力画像の水平次元をトラバースするために使用されるループが入力画像の垂直次元をトラバースするために使用されるループ内に入れ子にされるy-major、x-minorループの入れ子構造を使ってメモリアドレスを決定する実装形態では、水平オフセット値は、入力画像の第3次元の大きさ(たとえば、各画素を表すために使われる色値の数)に基づき得る。たとえば、水平オフセット値は、1であってもよい。
【0096】
システムは、垂直オフセット値を特定する(508)。y-major、x-minorループの入れ子構造を使ってメモリアドレスを決定する実装形態では、垂直オフセット値は、水平次元の大きさと第3次元の大きさとの組合せに基づき得る。たとえば、垂直オフセット値は、水平次元に沿った入力画像の画素の数の積に基づき得る。
【0097】
x-major、y-minorループの入れ子構造が使われる場合、水平オフセット値は、垂直次元の大きさ(たとえば、入力画像の垂直次元に沿った画素の数)と第3次元の大きさとの積に等しい値であり得る。同様に、垂直オフセット値は、第3次元の大きさであり得る。
【0098】
システムは、4つの画素座標の各々について、メモリアドレスを決定する(510)。4つの画素座標は、入力画像に含まれる4つのソース画素に対応する。当該4つのソース画素のために画素の値を使用して、変換されたバージョンの画像に含まれる変換画素の画素値が決定されることになる。変換画素は、水平座標の現在値および垂直座標の現在値によって定義される画素座標にある入力画像の画素を表す、変換画像の画素である。
【0099】
4画素は、入力画像における当該画素座標の位置に最も近い4画素であり得る。たとえば、4つのソース画素は、当該画素座標の位置の下の左側にある左下画素と、画素座標の位置の下の右側にある右下画素と、画素座標の位置の上の左側にある左上画素と、画素座標の位置の上の右側にある右上画素とを含んでもよい。
【0100】
4つのメモリアドレスの各々は、画素座標と、1つ以上のオフセット値とに基づき得る。たとえば、テンソルトラバーサルユニットは、4つのメモリアドレスの各々を決定するために使われる第1の部分アドレス値および第2の部分アドレス値を決定し得る。上述した最近傍法実装と同様に、第1の部分アドレス値は、水平座標と、第3次元(たとえば、z次元)の大きさとに基づき得る。水平座標が小数部分を含んでいる可能性があるので、水平座標の値の端数が切り捨てられ得る。たとえば、テンソルトラバーサルユニットは、水平座標以下の最大整数を出力するフロア関数を使って水平座標の端数を切り捨てることができる。第1の部分アドレス値は、端数処理された水平座標と第3次元の大きさとの積に基づき得る。画像の場合、z次元の大きさは1であるため、第1の部分アドレス値は、水平座標の端数処理された値に等しい。
【0101】
同様に、第2の部分アドレス値は、垂直座標、および水平次元の大きさと第3次元の大きさとの積に基づき得る。垂直座標も小数部分を含んでいる可能性があるので、たとえばフロア関数を使って垂直座標の値も端数が切り捨てられ得る。第2の部分アドレス値は、端数処理された垂直座標、および水平次元の大きさと第3次元の大きさとの積に基づき得る。画像の場合、z次元の大きさは1であるため、第2の部分アドレス値は、垂直座標の端数処理された値と水平次元の大きさとの積に等しい。
【0102】
テンソルトラバーサルユニットは、ループの入れ子構造を使って、4つのメモリアドレスを第1の部分アドレス値および第2の部分アドレス値に基づいて決定し得る。たとえば、下記のループの入れ子構造が使われ得る。
【0103】
【数3】
【0104】
このループの入れ子構造の例では、offset_yが、垂直オフセット値であり、offset_xが、水平オフセット値である。これに加えて、size_xzが、水平次元の大きさと第3次元の大きさとの積(たとえば、第3次元の大きさが1である場合の水平次元の大きさ)であり、size_zが、第3次元の大きさである。ループの入れ子構造によって、次の4つのメモリアドレスが生成される。(1)第1の部分アドレス値+第2の部分アドレス値+0+0、(2)第1の部分アドレス値+第2の部分アドレス値+0+size_z、(3)第1の部分アドレス値+第2の部分アドレス値+size_xz+0、(4)第1の部分アドレス値+第2の部分アドレス値+size_xz+size_x)。このループの入れ子構造を、バイリニア法実装の場合の上述した画素座標を決定するためのループ内に入れ子にして、4つの画素値の4つのメモリアドレスを決定することができる。
【0105】
システムは、4つのソース画素の各々について、重みを決定する(512)。ソース画素ごとの重みは、水平座標の現在値の小数部分および/または垂直座標の現在値の小数部分に基づいて決定され得る。小数部分を使った重みの決定にループの入れ子構造を使うことができる。ループの入れ子構造は、メモリアドレスを決定するために使用されるループの入れ子構造と並列して実行することができる。このようにすれば、いったん処理部4つのソース画素すべての画素値と重みとを有すると処理部これらの画素値と重みとを使って機械学習モデルに入力するための変換画素の画素値を生成できるよう、テンソルトラバーサルユニットが画素値にアクセスするためのメモリアドレスと、画素値に対応する重みとを一緒に、または連続して出力できるようになる。下記のループの入れ子構造を使って重みを決定することができる。
【0106】
【数4】
【0107】
この例では、上述したメモリアドレスを決定するために使用されるループの入れ子構造として、水平座標(coord_x)と垂直座標(coord_y)とを決定するための外側ループが同じループ範囲(size_y-1およびsize_y-1)とループインデックス(coord_yおよびcoord_x)とを使っている。これによって、変換されたバージョンの画像の変換画素座標ごとに4つの重みが必ず決定されることになる。
【0108】
yyおよびxxのための2つの内側ループを使って、4つの重みが当該2つの内側ループのインデックス値に基づいて決定される。yyについてのループは、2回繰り返される(yy=0の場合に1回、yy=1の場合に1回)。同様に、xxについてのループは、2回繰り返される(xx=0の場合に1回、xx=1の場合に1回)。よって、変換画素座標ごとの内側ループの4つの条件は、(xx=0,yy=0)、(xx=1,yy=0)、(xx=0,yy=1)、および(xx=1,yy=1)となる。条件ごとに異なる重みが決定され、当該条件ごとの重みは、入力画像内の画素に対応する。当該画素の重みは、その画素値に適用されることになる。
【0109】
この例では、第1条件(xx=0,yy=0)を使って画素座標の位置の下の左側にある左下ソース画素の重みが決定される。左下ソース画素の重みは、水平座標の現在値の小数部分を1から引いた値に等しい水平方向の重みと、垂直座標の現在値の小数部分を1から引いた値に等しい垂直方向の重みとを含む。
【0110】
第2条件(xx=1,yy=0)を使って画素座標の位置の下の右側にある右下ソース画素の重みが決定される。右下ソース画素の重みは、水平座標の現在値の小数部分に等しい水平方向の重みと、垂直座標の現在値の小数部分を1から引いた値に等しい垂直方向の重みとを含む。
【0111】
第3条件(xx=0,yy=1)を使って画素座標の位置の上の左側にある左上ソース画素の重みが決定される。左上ソース画素の重みは、水平座標の現在値の小数部分を1から引いた値に等しい水平方向の重みと、垂直座標の現在値の小数部分に等しい垂直方向の重みとを含む。
【0112】
第4条件(xx=1,yy=1)を使って画素座標の位置の上の右側にある右上ソース画素の重みが決定される。右上ソース画素の重みは、水平座標の現在値の小数部分に等しい水平方向の重みと、垂直座標の現在値の小数部分に等しい垂直方向の重みとを含む。
【0113】
これらの演算を使うと、ソース画素ごとの水平方向の重みは、ソース画素と画素座標の現在の水平座標との水平方向の距離に反比例する。同様に、ソース画素ごとの垂直方向の重みは、ソース画素と画素座標の現在の垂直座標との垂直方向の距離に反比例する。
【0114】
テンソルトラバーサルユニットは、1つの画素座標についての4つの重みを処理部に出力する。次に、処理部は、水平座標の現在値と垂直座標の値の現在値とによって定義される画素座標に対応する変換画素の画素値を、ソース画素ごとの画素値およびその対応する重みを使って決定し得る。
【0115】
たとえば、処理部は、下記の関係式5を使って変換座標の画素値を決定することができる。
【0116】
【数5】
【0117】
関係式5では、pixel_valuex0y0が、左下ソース画素の画素値であり、weightx0y0が、左下ソース画素の水平方向の重みと左下ソース画素の垂直方向の重みとの積である。同様に、pixel_valuex1y0が、右下ソース画素の画素値であり、weightx1y0が、右下ソース画素の水平方向の重みと右下ソース画素の垂直方向の重みとの積であり、pixel_valuex0y1が、左上ソース画素の画素値であり、weightx0y1が、左上ソース画素の水平方向の重みと右上ソース画素の垂直方向の重みとの積であり、pixel_valuex1y1が、右上ソース画素の画素値であり、weightx1y1が、右上ソース画素の水平方向の重みと右上ソース画素の垂直方向の重みとの積である。
【0118】
処理部は、関係式5を使って、変換されたバージョンの入力画像の変換画素ごとの画素値を決定することができる。グレースケール値を使って各画素の色が表わされている場合、処理部は、関係式5を使って、画素ごとに1つのグレースケール画素値を決定することができる。RBG値を使って各画素の色が表わされている場合、処理部は、関係式5を使って、画素の各RGB色の値を別々に決定することができる。各色値の重みは同じになる。たとえば、処理部は、関係式5を使って、4つのソース画素の各々の重みと赤値とを使って変換画素の赤値を決定することができる。また、処理部は、関係式5を使って、ソース画素ごとの重みと青値とを使って変換画素の青値を決定することができ、関係式5を使って、ソース画素ごとの重みと緑値とを使って変換画素の緑値を決定することができる。
【0119】
次に、処理部は、機械学習モデルへの入力としてこれらの画素値を提供し得る。機械学習モデルは、変換されたバージョンの画像と同じ形状の画像を処理するように構成される。機械学習モデルの出力は、変換されたバージョンの入力画像を使った入力画像の分類であり得る。
【0120】
本明細書に記載の本発明の主題の実施の形態および機能的動作は、本明細書に開示の構造およびその構造的均等物を含む、デジタル電子回路、有形に含まれるコンピュータソフトウェアまたはファームウェア、コンピュータハードウェア、またはそれらのうちの1つ以上の組合せで実現され得る。本明細書に記載の本発明の主題の実施の形態は、1つ以上のコンピュータプログラム、つまり、データ処理装置による実行のためにまたはデータ処理装置の動作を制御するために実行される、有形の非一時的なプログラムキャリア上で符号化されたコンピュータプログラム命令の1つ以上のモジュールとして実現され得る。追加的または代替的に、プログラム命令は、人為的に生成された伝播信号、たとえば、適切な受信装置に送信されてデータ処理装置によって実行される情報を符号化するために生成された、機械によって生成された電気信号、光信号、または電磁信号上で符号化され得る。コンピュータ記憶媒体は、機械によって読み取り可能な記憶装置、機械によって読み取り可能な記憶基板、ランダムアクセスメモリ素子もしくはシリアルアクセスメモリ素子、またはそれらのうちの1つ以上の組合せであり得る。
【0121】
1つ以上のプログラム可能なコンピュータが入力データを操作することおよび出力を生成することによって1つ以上のコンピュータプログラムを実行して機能を実行することにより、本明細書に記載のプロセスおよび論理フローが実行され得る。また、プロセスおよび論理フローは、専用の論理回路、たとえば、FPGA(Field Programmable Gate Array)、ASIC(Application Specific Integrated Circuit)またはGPGPU(General Purpose Graphics Processing Unit)によって実行され得、装置は、このような専用の論理回路として実現され得る。
【0122】
コンピュータプログラムの実行に適したコンピュータは、一例として、汎用マイクロプロセッサもしくは特定用途向けマイクロプロセッサまたはその両方、またはその他の種類のCPU(Central Processing Unit)を含む。一般に、CPUは、ROM(Read-Only Memory)、RAM(Random Access Memory)、またはその両方から命令およびデータを受け取る。コンピュータの必須構成要素は、命令を実施または実行するためのCPU、ならびに命令およびデータを格納するための1つ以上のメモリ素子である。一般に、コンピュータは、データを格納するための1つ以上の大容量記憶装置、たとえば、磁気ディスク、光磁気ディスク、または光ディスクを備える、または、このような1つ以上の大容量記憶装置との間でデータの受信、送信、もしくはその両方を行うために操作可能に接続される。しかしながら、コンピュータは、このような機器を有する必要はない。また、コンピュータは、別の機器、たとえば、一例を挙げると、携帯電話、携帯情報端末(PDA)、携帯オーディオもしくはビデオプレーヤ、ゲームコントローラ、GPS(Global Positioning System)受信機、またはポータブル記憶装置(たとえば、USB(Universal Serial Bus)フラッシュドライブ)に組み込むことができる。
【0123】
コンピュータプログラム命令およびデータを格納するのに適した読み取り可能な媒体は、一例として、EPROM、EEPROM、およびフラッシュメモリ素子などの半導体メモリ素子、内蔵ハードディスクまたはリムーバブルディスクなどの磁気ディスク、光磁気ディスク、ならびにCD-ROMおよびDVD-ROMディスクを含むすべての形態の不揮発性メモリと、媒体と、メモリ素子とを含む。プロセッサおよびメモリは、専用の論理回路によって補われ得る、または専用の論理回路に内蔵され得る。
【0124】
本明細書は、多くの具体的な実装形態の詳細を含むが、これらはいかなる発明の範囲および特許請求の範囲の限定として解釈されるべきではなく、むしろ、特定の発明の特定の実施の形態に固有であり得る特徴の説明であると解釈されるべきである。別々の実施の形態を背景に本明細書において説明した特定の特徴を組み合わせて1つの実施の形態で実現することもできる。その逆に、1つの実施の形態を背景に説明した様々な特徴を複数の実施の形態または任意の適した部分的な組合せで別々に実現することもできる。また、特徴を、特定の組合せで動作するものとして上述し、そのように当初、主張し得たが、主張した組合せから得られる1つ以上の特徴を場合によっては当該組合せから削除することができ、主張した組合せは、部分的な組合せまたは部分的な組合せの変形例を対象としてもよい。
【0125】
同様に、動作を特定の順番で図面に示したが、所望の結果を実現するために、このような動作が図示された特定の順番または連続して実行する、または、図示した動作のすべてを実行する必要があると理解されるべきではない。特定の状況では、多重タスク処理および並列処理が有利である場合がある。また、上述した実施の形態において様々なシステムモジュールおよび構成要素が分けられていることは、このように分けることがすべての実施の形態において必要であると理解されるべきではなく、記載のプログラムコンポーネントおよびシステムは、一般に、1つのソフトウェアプロダクトに一体化することができたり、複数のソフトウェアプロダクトにパッケージ化することができたりすると理解されるべきである。
【0126】
本発明の主題についての特定の実施の形態を説明した。その他の実施の形態は、添付の特許請求の範囲に含まれる。たとえば、請求項に記載の動作は、異なる順序で実行することができ、それでもなお所望の結果を実現することができる。一例として、添付の図面に示した工程は、所望の結果を実現するために必ずしも図示した特定の順番または連続した工程である必要はない。特定の実装形態では、多重タスク処理および並列処理が有利である場合がある。
図1
図2
図3
図4
図5