(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-06
(45)【発行日】2024-11-14
(54)【発明の名称】機械学習を用いた選択的な画像ぼやけ
(51)【国際特許分類】
G06T 5/75 20240101AFI20241107BHJP
G06T 1/00 20060101ALI20241107BHJP
H04N 23/60 20230101ALI20241107BHJP
H04N 23/611 20230101ALI20241107BHJP
【FI】
G06T5/75
G06T1/00 340A
H04N23/60 500
H04N23/611
(21)【出願番号】P 2023519574
(86)(22)【出願日】2022-08-01
(86)【国際出願番号】 US2022039060
(87)【国際公開番号】W WO2023177415
(87)【国際公開日】2023-09-21
【審査請求日】2023-03-28
(32)【優先日】2022-03-16
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】リバ,オーリー
(72)【発明者】
【氏名】ユ,ルーシー
(72)【発明者】
【氏名】ナーン,ヤエル・プリッチ
【審査官】清水 祐樹
(56)【参考文献】
【文献】特開2012-044551(JP,A)
【文献】特開2017-022560(JP,A)
【文献】特開2021-145209(JP,A)
【文献】特開2011-066827(JP,A)
【文献】米国特許出願公開第2012/0219236(US,A1)
【文献】GONG, Jie et al.,Using Depth Mapping to realize Bokeh effect with a single camera Android device,EE368 Project Report,2016年12月10日,https://web.stanford.edu/class/ee368/Project_Autumn_1617/Reports/report_gong_liu_vukkadala.pdf
(58)【調査した分野】(Int.Cl.,DB名)
G06T 1/00 - 5/94
H04N 23/60
H04N 23/611
(57)【特許請求の範囲】
【請求項1】
コンピュータ実装方法であって、
画像の深度を推定することによって、前記画像の各ピクセルの深度を示す深度マップを取得することと、
前記画像の焦点表を生成することとを含み、前記焦点表は、焦点範囲と前方勾配または後方勾配のうちの少なくとも1つとを示すパラメータを含み、
前記コンピュータ実装方法は、さらに
前記画像から1つ以上の顔が検出されたか否かを判断することと、
前記画像から1つ以上の顔が検出されたと判断された場合、前記1つ以上の顔の各顔に対応する各顔囲みボックスを特定し、前記各顔囲みボックスは、前記顔に対応する前記画像の領域を含み、
各顔囲みボックスのピクセルが前記焦点範囲に入るまで合焦深度値の範囲を拡張することによって前記顔囲みボックスの各々を含むように前記焦点表を調整すること
と、
前記画像から顔が検出されなかったと判断された場合、
前記画像に適用されるぼやけの量を制限するように、前記前方勾配および前記後方勾配のうちの少なくとも1つを調整することによって前記焦点表をスケーリング
することと、
前記焦点表および前記深度マップを用いて前記画像にぼやけを適用することによって、出力画像を生成すること
とを含み、前記出力画像は、合焦領域と、1つ以上のぼやけ領域とを含む、コンピュータ実装方法。
【請求項2】
前記焦点表は、被写体の前方の前景領域が前記画像に存在しない場合に、前記前方勾配を除外し、被写体の後方の背景領域が前記画像に存在しない場合に、前記後方勾配を除外する、請求項1に記載のコンピュータ実装方法。
【請求項3】
前記出力画像内の前記合焦領域は、前記深度マップ内のゼロのぼやけ半径に対応する深度値に関連するピクセルを含む、請求項1に記載のコンピュータ実装方法。
【請求項4】
前記焦点表を生成することは、焦点表予測モデルを使用することを含み、前記焦点表予測モデルは、訓練済み機械学習モデルであり、
前記方法は、前記焦点表予測モデルを訓練することをさらに含み、
前記訓練は、
複数の訓練画像を入力として前記焦点表予測モデルに提供することを含み、各訓練画像は、関連する深度マップおよび関連する正解ぼやけ半径画像を有し、
各訓練画像に対して、
前記焦点表予測モデルを用いて、予測焦点表を生成することと、
前記訓練画像に関連する前記予測焦点表および前記深度マップを用いて、予測ぼやけ半径画像を取得することと、
前記訓練画像に関連する前記予測ぼやけ半径画像および前記正解ぼやけ半径画像に基づいて、損失値を計算することと、
前記損失値を用いて、前記焦点表予測モデルの1つ以上のパラメータを調整することとを含む、請求項1に記載のコンピュータ実装方法。
【請求項5】
各訓練画像に関連する前記深度マップは、画像撮影時に得られた正解深度マップ、または深度予測モデルを用いて得られた推定深度マップのうちの1つである、請求項
4に記載のコンピュータ実装方法。
【請求項6】
前記焦点表予測モデルを訓練することは、前記焦点表予測モデルの前記1つ以上のパラメータを調整する前に、前記訓練画像の画像勾配を用いて前記損失値に重みを付けることをさらに含む、請求項
4に記載のコンピュータ実装方法。
【請求項7】
前記画像は、焦点と深度とに関する情報を含まない、請求項1に記載のコンピュータ実装方法。
【請求項8】
前記画像は、スキャンされた写真、メタデータが除去された画像、焦点および深度情報を記憶しないカメラを用いて撮影された画像、またはビデオのフレームである、請求項1に記載のコンピュータ実装方法。
【請求項9】
前記出力画像を表示することをさらに含む、請求項1に記載のコンピュータ実装方法。
【請求項10】
プロセッサによって実行されると、前記プロセッサに請求項1~
9のいずれか1項に記載の方法を実行させる、コンピュータプログラム。
【請求項11】
プロセッサと、
前記プロセッサに結合され、請求項
10に記載のコンピュータプログラムを記憶するメモリとを備える、コンピューティング装置。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願
本願は、2022年3月16日に提出され、「機械学習を用いた選択的な画像ぼやけ」と題された米国仮出願第63/320349号の利益を主張し、当該仮出願の全体は、あらゆる目的で参照により本明細書に組み込まれる。
【背景技術】
【0002】
背景
写真撮影において、ボケとは、画像の焦点が合っていない部分に生じたぼやけを指す。レンズ収差および絞り形状の違いは、異なるボケ効果を引き起こす。ボケ効果は、一般的な写真効果であり、例えば、画像の被写体(例えば、1人以上の人物または物体)に焦点が合っている(鮮明である)一方で、前景または背景に存在し得る画像の他の部分がぼやけているように、画像内の肖像ぼやけを生成するために使用される。
【発明の概要】
【発明が解決しようとする課題】
【0003】
画像内の様々なピクセルに対応する深度を示す深度マップを利用して、ボケ効果を生成する。深度マップに基づく焦点表は、各ピクセルに適用されるぼやけの量を示す。焦点表は、画像内の焦点面の位置および深度を示す。また、焦点表は、背景および前景内のピクセルに適用されるぼやけの量を決定する。一般的には、焦点表は、カメラによって捕捉された情報、例えば、オートフォーカス計算、ユーザ選択イベント(例えば、焦点領域の選択)に基づいて計算される。しかしながら、このような情報は、特定の画像に対して利用できない。例えば、スキャンされた画像、メタデータが除去された画像などは、このような情報を含まない。
【0004】
本明細書に記載された背景技術の説明は、本開示の文脈を概略的に示すことを目的としている。この背景技術の部分に記載されている範囲内で、現在名前を挙げている発明者の研究は、出願時に従来技術としてみなされない記載と同様に、本開示に対する従来技術として明示的にまたは暗示的に認められない。
【課題を解決するための手段】
【0005】
概要
本明細書に記載された実装形態は、出力画像を生成するための方法、コンピューティング装置、および非一時的なコンピュータ可読媒体に関する。いくつかの実装形態は、方法を含む。この方法は、画像の深度を推定することによって、画像の各ピクセルの深度を示す深度マップを取得することと、画像の焦点表を生成することとを含み、焦点表は、焦点範囲と前方勾配または後方勾配のうちの少なくとも1つとを示すパラメータを含み、この方法は、さらに、画像から1つ以上の顔が検出されたか否かを判断することと、画像から1つ以上の顔が検出されたと判断された場合、1つ以上の顔の各顔に対応する各顔囲みボックスを特定し、各顔囲みボックスは、顔に対応する画像の領域を含み、顔囲みボックスの各々を含むように焦点表を調整することを含み、画像から顔が検出されなかったと判断された場合、焦点表をスケーリングし、焦点表および深度マップを用いて画像にぼやけを適用することによって、出力画像を生成することを含み、出力画像は、合焦領域と、1つ以上のぼやけ領域とを含む。
【0006】
いくつかの実装形態において、焦点表を調整することは、各顔囲みボックスのピクセルが焦点範囲に入るまで合焦深度値の範囲を拡張することを含む。いくつかの実装形態において、焦点表は、被写体の前方の前景領域が画像に存在しない場合に、前方勾配を除外し、被写体の後方の背景領域が画像に存在しない場合に、後方勾配を除外する。いくつかの実装形態において、出力画像内の合焦領域は、深度マップ内のゼロのぼやけ半径に対応する深度値に関連するピクセルを含む。
【0007】
いくつかの実装形態において、画像は、焦点と深度とに関する情報を含まない。いくつかの実装形態において、画像は、スキャンされた写真、メタデータが除去された画像、焦点および深度情報を記憶しないカメラを用いて撮影された画像、またはビデオのフレームである。いくつかの実装形態において、方法は、出力画像を表示することをさらに含む。
【0008】
いくつかの実装形態において、焦点表を生成することは、焦点表予測モデルを使用することを含み、焦点表予測モデルは、訓練済み機械学習モデルである。いくつかの実装形態において、方法は、焦点表予測モデルを訓練することをさらに含み、訓練は、複数の訓練画像を入力として焦点表予測モデルに提供することを含み、各訓練画像は、関連する深度マップおよび関連する正解(groundtruth)ぼやけ半径画像を有し、各訓練画像に対して、焦点表予測モデルを用いて、予測焦点表を生成することと、訓練画像に関連する予測焦点表および深度マップを用いて、予測ぼやけ半径画像を取得することと、訓練画像に関連する予測ぼやけ半径画像および正解ぼやけ半径画像に基づいて、損失値を計算することと、損失値を用いて、焦点表予測モデルの1つ以上のパラメータを調整することとを含む。いくつかの実装形態において、各訓練画像に関連する深度マップは、画像撮影時に得られた正解深度マップまたは深度予測モデルを用いて得られた推定深度マップのうちの1つである。いくつかの実装形態において、焦点表予測モデルを訓練することは、焦点表予測モデルの1つ以上のパラメータを調整する前に、訓練画像の画像勾配を用いて損失値に重みを付けることをさらに含む
いくつかの実装形態は、プロセッサによって実行されると、本明細書に記載された方法のいずれかをプロセッサに実行させる命令を記憶する非一時的なコンピュータ可読媒体を含む。いくつかの実装形態は、プロセッサと、プロセッサに結合されたメモリとを備えるコンピューティング装置を含む。メモリは、プロセッサによって実行されると、本明細書に記載された方法のいずれかをプロセッサに実行させる命令を記憶する。
【図面の簡単な説明】
【0009】
【
図1】本明細書に記載された1つ以上の実装形態に使用され得る例示的なネットワーク環境を示すブロック図である。
【
図2A】異なるパラメータ化を有する焦点表の例を示す図である。
【
図2B】異なるパラメータ化を有する焦点表の例を示す図である。
【
図2C】異なるパラメータ化を有する焦点表の例を示す図である。
【
図3】いくつかの実装形態に従って、選択的なぼやけを有する出力画像を生成するための例示的な方法を示す図である。
【
図4】例示的な入力画像と、入力画像に対応する正解深度画像と、入力画像に対応する予測深度画像とを示す図である。
【
図6A】例示的な入力画像と、入力画像に対応する第1および第2の出力画像とを示す図である。
【
図6B】
図6Aの例示的な入力画像に対応する生の焦点表予測およびスケーリングされた焦点表予測を示す図である。
【
図7】いくつかの実装形態に従って、選択的なぼやけを有する出力画像を生成するための例示的な方法を示す図である。
【
図8】いくつかの実装形態に従って、例示的なコンピューティング装置を示す図である。
【発明を実施するための形態】
【0010】
詳細な説明
本文書は、画像がカメラによって取得され、(例えば、オートフォーカス計算またはユーザ選択イベントに基づいた)画像の焦点領域および/または様々な領域/ピクセルに関連する深度(例えば、深度マップ)を示す情報を含まない場合でも、画像にぼやけを適用することによってボケ効果を生成するための技術を説明する。この技術は、画像データ、例えば、画像の各ピクセルのRGB(または他の色値)に基づいて深度値を生成する単眼深度推定器に基づいて、画像のピクセルの深度を推定することを含む。この技術は、画像の焦点表(focal table)を決定することをさらに含む。例えば、焦点表は、好適に訓練された機械学習モデルを用いて決定されてもよい。単眼深度推定器によって推定された画像のピクセルの深度値は、入力として機械学習モデルに提供されてもよい。この機械学習モデルは、「撮影後焦点表予測モデル」と呼ばれてもよい。
【0011】
焦点表は、画像にぼやけを適用するために利用される。焦点表は、焦点面の位置および深度を示す。また、焦点表は、画像の背景領域および/または前景領域、すなわち、出力画像の焦点が合っていない領域に適用されるぼやけの量を示す。焦点表は、画像に写されているシーン内の深度を、ボケ効果を生成するために適用されるぼやけの量にマッピングする。
【0012】
例示的なネットワーク環境
図1は、本明細書に記載されたいくつかの実装形態に使用され得る例示的なネットワーク環境100のブロック図を示す。いくつかの実装形態において、ネットワーク環境100は、1つ以上のサーバシステム(例えば、
図1の例においてサーバシステム102)と、複数のクライアント装置(例えば、ユーザU1~U4の各ユーザに各々関連するクライアント装置120~126)とを含む。サーバシステム102およびクライアント装置120~126の各々は、ネットワーク130と通信するように構成されてもよい。
【0013】
サーバシステム102は、サーバ装置104を含むことができる。いくつかの実装形態において、サーバ装置104は、画像アプリケーション106aを提供することができる。
図1および他の図面において、参照番号の後の文字、例えば「160a」は、その特定の参照番号を有する要素への言及を表す。後ろに文字を持たない本文中の参照番号、例えば「160」は、その参照番号を有する要素の実施形態への一般的言及を表す。
【0014】
本明細書に言及された画像は、1つ以上のピクセル値(例えば、色値、輝度値など)を有するピクセルを有するデジタル画像を含むことができる。画像は、静止画像(例えば、静止画、単一フレームの画像など)、動的画像(例えば、動画、動画GIF、画像の一部分が動きを含むが他の部分が静止しているシネマグラフなど)、または映像(例えば、音声を含み得る一連の画像または画像フレーム)であってもよい。なお、本明細書に使用されている画像は、上記のいずれかであってもよい。例えば、本明細書に記載された実装形態は、静止画像(例えば、写真または他の画像)、映像、または動的画像と共に使用されてもよい。
【0015】
また、ネットワーク環境100は、1つ以上のクライアント装置、例えばクライアント装置120、122、124および126を含むことができる。クライアント装置120、122、124および126は、ネットワーク130を介して互いに通信することができ、および/またはネットワーク130を介してサーバシステム102と通信することができる。ネットワーク130は、インターネット、ローカルエリアネットワーク(LAN)、ワイヤレスネットワーク、スイッチまたはハブ接続などのうち、1つ以上を含む任意の種類の通信ネットワークであってもよい。いくつかの実装形態において、ネットワーク130は、例えば、ピアツーピアワイヤレスプロトコル(例えば、ブルートゥース(登録商標)、Wi-Fi(登録商標)ダイレクト)などを使用した装置間のピアツーピア通信を含むことができる。2つのクライアント装置120と122の間のピアツーピア通信の一例は、矢印132によって示されている。
【0016】
様々な実装形態において、ユーザU1、U2、U3およびU4は、各々のクライアント装置120、122、124および126を使用して、サーバシステム102と通信することができ、および/または互いに通信することができる。いくつかの例において、ユーザU1、U2、U3およびU4は、各々のクライアント装置および/またはサーバシステム102上で動作するアプリケーションを介して、および/またはサーバシステム102上で実装されたネットワークサービス、例えば、ソーシャルネットワークサービスまたは他の種類のネットワークサービスを介して、互いに対話することができる。例えば、各々のクライアント装置120、122、124および126は、1つ以上のサーバシステム、例えば、サーバシステム102との間でデータを通信することができる。
【0017】
いくつかの実装形態において、サーバシステム102は、適切なデータをクライアント装置に提供することができる。これによって、各クライアント装置は、サーバシステム102にアップロードされた通信コンテンツ、共有コンテンツおよび/またはネットワークサービスを受信することができる。いくつかの実施例において、ユーザU1~U4は、画像共有、オーディオまたはビデオ会議、音声、映像、テキストチャット、他の通信モードまたは通信アプリケーションを介して、対話することができる
サーバシステム102によって実装されたネットワークサービスは、ユーザが、様々な通信を実行すること、リンクおよび関連付けを形成すること、共有コンテンツ、例えば画像、テキスト、音声および他の種類のコンテンツをアップロードおよびポストすること、および/または他の機能を実行することを可能にするシステムを含むことができる。例えば、クライアント装置は、クライアント装置に送信またはストリーミングされたコンテンツポスト、サーバおよび/またはネットワークサービスを介して異なるクライアント装置から(または異なるクライアント装置から直接に)発信されたコンテンツポスト、またはサーバシステムおよび/またはネットワークサービスから発信されたコンテンツポストなどの受信データを表示することができる。いくつかの実装形態において、クライアント装置は、例えば、上述したクライアント装置間のピアツーピア通信を使用して互いに直接に通信することができる。いくつかの実装形態において、「ユーザ」は、1つ以上のプログラムまたは仮想エンティティを含むことができ、システムまたはネットワークとインターフェイスする人間を含むことができる。
【0018】
いくつかの実装形態において、クライアント装置120、122、124および/または126はいずれも、1つ以上のアプリケーションを提供することができる。例えば、
図1に示すように、クライアント装置120は、画像アプリケーション106bを提供することができる。クライアント装置122~126も、同様のアプリケーションを提供することができる。画像アプリケーション106aは、クライアント装置120のハードウェアおよび/またはソフトウェアを用いて実装されてもよい。異なる実装形態において、画像アプリケーション106aは、例えば、クライアント装置120~124のいずれか上で実行されるスタンドアロンクライアントアプリケーションであってもよく、またはサーバシステム102上で提供される画像アプリケーション106bと共に動作することができる。
【0019】
画像アプリケーション106は、ユーザ許可をもって実装され、画像に関連する種々の機能を提供することができる。例えば、このような機能は、カメラを用いて画像を撮影すること、画像を修正すること、(例えば、顔のサイズ、顔の数、画像合成、照明、露出などの要因に基づいて)画質を決定すること、画像またはビデオを記憶すること、画像にボケ効果を自動的に適用すること、ボケ効果を調整すること、画像または画像に基づいた作品を閲覧するためのユーザインターフェイスを提供することなどのうち、1つ以上を含むことができる。いくつかの実装形態において、ユーザ許可をもって画像アプリケーション106によって提供された機能は、(例えば、顔検出などの1つ以上のユーザ許可技術を用いて)画像を分析することによって、画像に写された1つ以上の人物を検出することを含んでもよい。
【0020】
なお、上記では画像アプリケーション106の様々な機能を説明したが、様々な実装形態において、画像アプリケーション106は、より少ないまたはより多い機能を提供することができる。また、各ユーザには、特定の機能を有効および/または無効にするためのオプションが提供される。画像アプリケーション106の機能は、具体的にはユーザ許可をもって実装される。
【0021】
いくつかの実装形態において、画像アプリケーション106によって、ユーザは、画像ライブラリを管理することができる。例えば、ユーザは、クライアント装置(例えば、クライアント装置120~126のいずれか)上の画像アプリケーション106bのバックアップ機能を使用して、クライアント装置上のローカル画像をサーバ装置、例えばサーバ装置104にバックアップすることができる。例えば、ユーザは、バックアップされる1つ以上の画像を手動で選択することができ、またはバックアップされる画像を識別するバックアップ設定を指定することができる。画像をサーバ装置にバックアップすることは、例えば、サーバ装置104上の画像アプリケーション106aと協働して、画像をサーバに送信してサーバに記憶することを含むことができる。
【0022】
異なる実装形態において、クライアント装置120および/またはサーバシステム102は、様々な種類の機能、例えば、カレンダー、アドレス帳、電子メール、ウェブブラウザ、ショッピング、輸送(例えば、タクシー、列車、航空会社の予約)、エンターテイメント(例えば、音楽プレーヤ、ビデオプレーヤ、ゲームアプリケーション)、ソーシャルネットワーキング(例えば、メッセージングまたはチャット、オーディオ/ビデオ通話、画像/ビデオの共有)などを提供するアプリケーションであり得る他のアプリケーション(図示せず)を含むことができる。いくつかの実装形態において、1つ以上の他のアプリケーションは、クライアント装置120上で実行されるスタンドアロンアプリケーションであってもよい。いくつかの実装形態において、1つ以上の他のアプリケーションは、他のアプリケーションのデータおよび/または機能を提供するサーバシステム、例えばサーバシステム102にアクセスすることができる。
【0023】
クライアント装置120、122、124、および/または126上のユーザインターフェイスは、画像、画像に基づいた作品、データ、他のコンテンツ、通信、プライバシー設定、通知、および他のデータを含むユーザコンテンツおよび他のコンテンツの表示を可能にすることができる。このようなユーザインターフェイスは、クライアント装置上のソフトウェア、サーバ装置上のソフトウェア、および/またはサーバ装置104上で動作するクライアントソフトウェアとサーバソフトウェアとの組み合わせ(例えば、サーバシステム102と通信するアプリケーションソフトウェアまたはクライアントソフトウェア)を用いて、表示されてもよい。ユーザインターフェイスは、クライアント装置またはサーバ装置のディスプレイ装置(例えば、タッチスクリーンまたは他のディスプレイスクリーン、プロジェクタなど)によって表示されてもよい。いくつかの実装形態において、サーバシステム上で動作するアプリケーションプログラムは、クライアント装置と通信することによって、クライアント装置でユーザ入力を受信することができ、クライアント装置で視覚データ、音声データなどのデータを出力することができる。
【0024】
図示を容易にするために、
図1は、サーバシステム102およびサーバ装置104を1つのブロックとして示し、クライアント装置120、122、124および126を4つのブロックとして示している。サーバブロック102および/または104は、複数のシステム、サーバ装置、およびネットワークデータベースを表すことができる。これらのブロックは、図示された構成とは異なる構成で設けられてもよい。例えば、サーバシステム102は、ネットワーク130を介して他のサーバシステムと通信することができる複数のサーバシステムを表すことができる。いくつかの実装形態において、サーバシステム102は、例えば、クラウドホスティングサーバを含むことができる。
【0025】
また、クライアント装置は、任意の数であってもよい。各クライアント装置は、任意の種類の電子装置、例えば、デスクトップコンピュータ、ラップトップコンピュータ、ポータブルまたはモバイル装置、携帯電話、スマートフォン、タブレットコンピュータ、テレビ、テレビセットトップボックスまたはエンターテイメント装置、ウェアラブル装置(例えば、ディスプレイグラスまたはゴーグル、腕時計、ヘッドセット、アームバンド、宝石類など)、携帯情報端末(PDA)、メディアプレーヤ、ゲーム装置などであってもよい。いくつかの実装形態において、ネットワーク環境100は、図示された構成要素の全てを含まなくてもよく、および/または本明細書に記載された要素の代わりにまたはそれらに加えて、他の種類の要素を含む他の要素を含んでもよい。
【0026】
本明細書に記載された特徴の他の実装形態は、任意の種類のシステムおよび/またはサービスを使用することができる。例えば、ソーシャルネットワーキングサービスの代わりにまたはそれに加えて、(例えば、インターネットに接続された)他のネットワークサービスを使用することができる。任意の種類の電子装置は、本明細書に記載された特徴を利用することができる。いくつかの実装形態は、コンピュータネットワークから切断されたまたは断続的に接続された1つ以上のクライアントまたはサーバ装置上で、本明細書に記載された1つ以上の特徴を提供することができる。いくつかの例において、ディスプレイ装置を含むまたはディスプレイ装置に接続されているクライアント装置は、例えば通信ネットワークを介して事前に受信され、クライアント装置のローカル記憶装置に記憶されたコンテンツポストを表示することができる。
【0027】
焦点表
いくつかの実装形態において、焦点表は、画像の合焦領域の(カメラから遠い)後方の深度を示す(後方)焦点深度値(dof_back)、合焦している深度値の範囲を示す画像の合焦範囲(in_focus_range)、カメラから後方焦点深度値よりも遠い各深度値に適用されるぼやけ半径を示す後方勾配(back_slope)、およびカメラにより近いが、合焦範囲に入らない各深度値に適用されるぼやけ半径を示す前方勾配(front_slope)とを示すことができる。
図2Aは、このような焦点表の構造を示す。
【0028】
他の実装形態において、焦点表は、合焦差(in_focus_disparity)、合焦差の後方の半分焦点深度(half_dof_back)、合焦差の前方の半分焦点深度(half_dof_front)、後方勾配、および前方勾配を示すことができる。
図2Bは、このような焦点表の構造を示す。
【0029】
さらに他の実装形態において、焦点表は、後方焦点深度(dof_back)、前方焦点深度(dof_front)、後方勾配、および前方勾配を示すことができる。
図2Cは、このような焦点表の構造を示す。
【0030】
例示的な方法
図3は、(焦点および深度に関連するメタデータを有しない)入力画像から、選択的なぼやけ(ボケ効果)を有する出力画像を自動的に生成するための例示的な方法を示す。
図3に示すように、入力画像は、深度予測器に提供される。深度予測器は、例えば、入力画像中の各ピクセルの深度を予測するための単眼深度予測器であってもよい。
図1は、例示的な入力画像(棚上の缶詰)、および入力画像の各ピクセルの深度を示す深度画像を示している。深度予測器によって決定された画像の推定深度は、焦点表推定器に提供される。
【0031】
焦点表推定器は、推定深度および入力画像(例えば、RGB画像)に基づいて焦点表を生成する。例示的な焦点表は、
図3に示されている。焦点表は、深度マップの各深度値(0~255)に対して、入力画像の各ピクセルに適用されるぼやけ量を指定するための関数である。入力画像、深度マップ、および焦点表は、ボケレンダラに提供される。焦点表は、例えば、
図2A~2Cを参照して説明された任意の種類の焦点表または異なる種類の焦点表であってもよい。
【0032】
ボケレンダラは、入力画像、深度マップおよび焦点表に基づいて出力画像を生成する。例えば、ボケレンダラは、焦点表によって示されるように、各ぼやけ量を背景領域または前景領域にある画像の様々なピクセルに適用する。深度に対応するぼやけ半径を利用してぼやけを適用することができる。
図3の例において、ぼやけ半径は、約155~255の深度マップの値を鮮明に保つ。これを超えると、ぼやけ半径が徐々に増加する。なお、実際のレンダリング半径は、「ぼやけ半径」の絶対値である。前後方向の合成を行うために、レンダリング機能は、負の値が合焦範囲の後方を示すと判断する。
【0033】
焦点表推定器
いくつかの実装形態において、焦点表推定器は、入力画像の推定深度に基づいて焦点表を生成するように訓練された機械学習モデルを含むことができる。この機械学習モデルは、本明細書において「撮影後焦点表予測モデル」または単に「焦点表予測モデル」とも呼ばれる。
【0034】
焦点表予測モデルの訓練-教師あり学習
いくつかの実装形態において、機械学習モデルは、教師あり学習を使用して焦点表を予測(推定)するように訓練されてもよい。このような実装例において、訓練データセットは、関連する深度マップを含む訓練画像セットと、訓練画像セット内の各訓練画像の正解焦点表とを含んでもよい。例えば、訓練画像は、深度情報(正解深度マップ)および焦点情報を取得し、これらの情報を画像と共に画像メタデータとして記憶するカメラを用いて撮影されてもよい。各画像の正解焦点表は、例えば、焦点情報および深度情報に基づいて、撮影時に生成および記憶されてもよい。
【0035】
訓練中、(カメラによって取得された)画像および正解深度マップは、入力として訓練中のモデルに提供される。モデルは、予測焦点表を出力として生成するように訓練される。損失値は、予測焦点表および正解焦点表に基づいて決定される。例えば、損失値は、平均二乗誤差(MSE)値であってもよい。損失値は、訓練中のモデルの1つ以上のパラメータを調整するためのフィードバックとして利用される。充分に大きい訓練データセットを利用し、閾値レベルの精度に達するまで訓練することによって、任意の入力画像の正解焦点表に近接し、画像をぼやけてボケ効果を生成するために使用できる予測焦点表を生成するように、モデルを訓練することができる。
【0036】
次に、訓練済みモデルを利用して、焦点情報が欠如している画像の焦点表を予測することができる。入力画像の焦点表を予測する間(推論段階と呼ばれる)、例えば、入力画像がスキャンされた画像である場合または深度メタデータが欠如している場合、正解深度マップが利用可能ではないことがある。このような場合、深度予測器を利用して画像の深度マップを生成することができ、深度マップを入力として訓練済みモデルに提供することができる。深度予測器は、入力画像に基づいて深度マップを予測するように構成されてもよい。例えば、深度予測器は、教師あり学習を使用して訓練された機械学習深度予測モデルを用いて実装されてもよい。これにより、訓練された深度予測モデルは、カメラからの正解深度マップに近い深度マップを生成することができる。しかしながら、例えば、異なるデータソース(例えば、各々の深度マップを有する異なるカメラ)に基づいて異なる深度予測モデルを訓練する場合、ドメインギャップが生じる可能性がある。
【0037】
これらの違いに起因して、異なる深度予測モデルによって生成された深度マップの間、および深度予測モデルの正解と出力との間に違いも生じ得る。このようなドメインギャップ(深度マップの違い)に起因して、画像の異なる深度予測器モデルによって生成された深度マップに対して訓練されたモデルによって生成された同じ出力焦点表を使用すると、異なるぼやけ出力を生成する可能性がある。
【0038】
図4は、正解深度マップと推定深度マップとの間の違いの一例を示す図である。図示から分かるように、同じ焦点表を用いて、正解深度マップおよび推定深度マップに基づいて出力ぼやけ画像を生成する場合、深度の違いによって異なるぼやけ量を同じピクセルに適用するため、入力深度マップの違いによって、ぼやけ出力画像は、異なるものになる。
【0039】
ドメインギャップに起因する問題は、各深度予測器に対してカスタム焦点表予測モデルを訓練し、推論段階で適切な訓練済みモデルを使用することによって対処することができる。しかしながら、これは、複数の深度予測器モデルおよびカスタム焦点表予測モデルを訓練し、記憶する必要があるため、非効率であり、一貫性のないぼやけ出力画像を生成する場合がある。
【0040】
焦点表予測モデルの訓練-半教師あり学習
図5は、半教師あり学習を使用してカスタム焦点表予測モデルを訓練するための例示的方法を示す。
図5に示すように、入力訓練画像は、例えば、深度予測モデルを実装する深度予測器に提供される。深度予測器から得られた推定深度マップは、訓練中焦点表予測モデル(MUT)に提供され、予測焦点表を生成する。
【0041】
ぼやけ半径画像は、各ピクセルがそのピクセルにおけるぼやけ半径であるシングルチャネル画像である。それを計算することは、微分可能である。予測焦点表および推定深度マップを利用して、予測ぼやけ半径画像を生成する。また、正解深度マップおよび正解焦点表を利用して、(目標ぼやけ半径画像とも呼ばれる)正解ぼやけ半径画像を生成する。損失関数(例えば、平均二乗誤差または他の適切な関数)を利用して、予測ぼやけ半径画像および正解ぼやけ半径画像に基づいて損失値を決定する。損失関数によって決定される損失を利用して、焦点表予測モデルを訓練する(例えば、焦点表予測モデルの1つ以上のパラメータを調整する)。例えば、モデルがニューラルネットワークである場合、このような調整は、ニューラルネットワークの1つ以上の層の1つ以上のノードの重み、またはニューラルネットワークの異なるノード間の接続性を調整することを含むことができる。
【0042】
この技術は、半教師あり、正解深度マップも正解トルース焦点表も、訓練中の焦点表予測モデルに直接に提供されない。むしろ、最終的な出力、すなわち、出力ぼやけ画像を生成するために使用されたぼやけ半径画像は、訓練に使用される。このように訓練することによって、異なる深度予測モデルが使用された場合または正解焦点表がモデルによって生成された予測焦点表とは異なるパラメータ(例えば、
図2A~
図2Cを参照して説明した異なるパラメータ化または他のパラメータ化)を有する場合でも、モデルは、ロバストであることが可能である。
【0043】
画像勾配に基づく損失の重み付け
多くの画像は、異なるレベルのテクスチャを有する異なる領域を含むことができる。例えば、天空を写す領域を含む画像は、天空領域にはほぼ同じピクセル値(色および深度)を有するが、近くの木およびより遠くの山などの風景を写す別の領域は、異なるピクセル値(色および深度)を有する場合がある。いくつかの実装形態において、損失は、(画像テクスチャを示す)入力画像の画像勾配によって重み付けられてもよい。これは、テクスチャのない領域における異なるぼやけ半径がぼやけた結果において同様であるが、テクスチャ領域においてより高い精度を生成するという事実を説明することができる。
【0044】
被写体に焦点が合っていることの保証
場合によっては、焦点表推定器は、画像の主要被写体に焦点を合わせない焦点表を生成することがある。例えば、これは、主要被写体よりもカメラに近い別の物体が存在するときに起こり得る。この状況の例として、主要被写体(例えば、人物)がカメラに面しているが、別の人物または物体がカメラに近いが、主要被写体に近くない(例えば、カメラに背を向けて立っている人物)場合が考えられる。焦点表には他の種類の誤差も可能である。例えば、訓練データが任意の姿勢且つカメラから様々な深度で被写体を写す実世界画像を充分に表していない場合に、このような誤差は、生じる可能性がある。
【0045】
焦点表推定器によって予測された焦点表が主要被写体に焦点を合わせていない場合に、例えば、パラメータin_focus_rangeが主要被写体を写す深度を除外している場合に、主要被写体にぼやけが適用されているため、出力ボケ画像が満足できない場合がある。
【0046】
このような満足できない出力画像の可能性を低減するために、いくつかの実装形態において、例えば、任意の好適な顔検出技術を用いて入力画像を分析することによって、画像内の被写体、例えば、画像内の少なくとも閾値サイズ(ピクセル数)を有する1つ以上の顔の囲みボックスを生成する。顔囲みボックスは、主要被写体を含む画像のピクセルを示す。
【0047】
これらの実装形態において、ぼやけを適用する前に、焦点表推定器によって出力された焦点表を調整することによって、主要被写体に合焦する(ぼやけない)。これは、シーン内の主要被写体を含むように焦点範囲(例えば、パラメータin_focus_range)を拡張することによって達成される。例えば、焦点範囲が深度値d1~d2を含み、主要被写体がd2よりも大きい深度値d3にある場合、焦点範囲は、値d3を含むように調整される。例えば、焦点範囲は、d1~d3に更新される。ぼやけを適用する前に焦点表を調整することによって、出力画像は、囲みボックスが正確である限り、主要被写体に合焦している。
【0048】
顔を含まない画像のぼやけ量の制限
場合によっては、ユーザは、顔を含まない画像にボケ効果を適用しようとすることがある。このような人物被写体を含まない画像の場合、美しい画像を生成するために、より少ないぼやけを適用することが好ましい。このような場合、顔検出技術を適用することによって入力画像から顔が検出されなかった場合、(適用されるぼやけの量を制御する)パラメータdof_scaleは、所定の閾値に制限される。
図6Aは、このようなシナリオを示す。
図6A(ii)に示すように、予測焦点表に基づいて制限なしで
図6A(i)の入力画像にぼやけを適用することは、ぼやけが強すぎて背景から切り取られるように見えるぼやけた画像を生成している。
図6A(iii)は、適用されるぼやけの量を制限したぼやけ画像を示し、より美しい画像を生成している。
【0049】
図6B(i)は、
図6A(ii)を生成するために使用される生の焦点表予測を示している。
図6B(ii)は、
図6A(iii)を生成するために使用されるスケーリングされた焦点表予測を示している。図示のように、生の焦点表は、0~-6を超える範囲のぼやけ半径を有するが、スケーリングされた焦点表は、同じ範囲の深度値に対するぼやけ半径を0~-3の範囲に制限する。
【0050】
例示的な方法
図7は、ぼやけ画像、例えばボケ効果を生成するために適用された選択的なぼやけを有する画像を生成するための例示的な方法700を示す。方法700は、ブロック710から始まる。
【0051】
ブロック710において、入力画像を受信する。例えば、入力画像は、焦点(画像の被写体に対応する焦点面)および深度(例えば、画像の各ピクセルの深度を示す深度マップ)に関する情報(例えば、メタデータ)を含まない任意の画像であってもよい。このような画像は、スキャンされた写真、メタデータが除去された画像、焦点および深度情報を生成または記憶しないカメラを用いて撮影された画像などであってもよい。いくつかの実装形態において、入力画像は、ビデオのフレームであってもよい。方法700は、ボケ効果を有するビデオを生成するように、ビデオの複数のフレームに対して実行されてもよい。ブロック710の後にブロック720を実行することができる。
【0052】
ブロック720において、入力画像の深度を予測する。例えば、深度予測モデルを利用して、深度予測を実行することができる。入力画像の各ピクセルの深度を示す深度マップを取得することができる。ブロック720の後にブロック730を実行することができる。
【0053】
ブロック730において、入力画像の焦点表を生成する。いくつかの実装形態において、焦点表は、訓練済み機械学習モデルを用いて生成されてもよい。焦点表は、(合焦する深度値を示す)焦点範囲ならびに(ぼやける深度値および各ぼやけ半径を示す)前方勾配および/または後方勾配を示すパラメータを含んでもよい。例えば、被写体の前方に位置する前景領域が入力画像に存在しない場合、前方勾配は、存在しなくてもよい(またはゼロであってもよい)。例えば、画像被写体の後方に位置する背景領域が入力画像に存在しない場合、後方勾配は、存在しなくてもよい(またはゼロであってもよい)。ブロック730の後にブロック740を実行することができる。
【0054】
ブロック740において、入力画像から1つ以上の顔を検出したか否かを判断する。任意の好適な顔検出技術を利用して、入力画像から顔を検出することができる。1つ以上の顔を検出した場合、ブロック740の後にブロック750を実行することができる。顔を検出しなかった場合、ブロック740の後にブロック770を実行することができる。
【0055】
ブロック750において、検出された顔の顔囲みボックスを特定する。囲みボックスは、検出された顔に対応する入力画像(ピクセル)の領域を含むことができる。ブロック750の後にブロック760を実行することができる。
【0056】
ブロック760において、顔囲みボックスに対応する領域を含むように焦点表を調整する。焦点表の調整は、顔囲みボックスのピクセルが合焦範囲に入るまで合焦深度値の範囲を拡張することを含むことができる。ブロック760の後にブロック780を実行することができる。
【0057】
ブロック740において顔を検出しなかった場合、ブロック740の後にブロック770を実行する。ブロック770において、画像に適用されるぼやけの量を制限するように焦点表をスケーリングする。スケーリングは、焦点表の前方勾配および/または後方勾配を調整することを含むことができる。ブロック770の後にブロック780を実行することができる。
【0058】
ブロック780において、焦点表および深度マップを用いて画像にぼやけを適用することによって、出力画像を生成する。出力画像は、合焦領域(ゼロのぼやけ半径に対応する深度値を有する画像のピクセル)、および1つ以上のぼやけ領域(非ゼロのぼやけ半径に対応する深度値を有する画像のピクセル)を含む。ぼやけの適用は、適切なぼやけカーネルを用いて実行されてもよい。出力画像は、ボケ効果を有する。
【0059】
いくつかの実装形態において、方法700の1つ以上のブロックを合併することができる。例えば、顔検出技術を使用して顔の検出および囲みボックスの生成を同時に実行するように、ブロック740とブロック750を合併することができる。いくつかの実装形態において、方法の1つ以上のブロックを実行しなくてもよい。例えば、いくつかの実装形態において、画像から顔を検出しなかった場合、ブロック770を実行せず、ブロック740の直後にブロック780を実行することができる。いくつかの実装形態において、ブロック740~770を実行せず、ブロック730の直後にブロック780を実行することができる。
【0060】
いくつかの実装形態において、複数の入力画像に対して方法700を実行することによって、対応する複数の出力画像を生成することができる。いくつかの実装形態において、ビデオの1つ以上のフレーム(静止画像)に対して方法700を実行することができ、出力画像を入力フレームと同じシーケンスで配置することによって、ぼやけたビデオを提供することができる。
【0061】
いくつかの実装形態において、ぼやけた出力画像は、モニタ、ウェアラブル装置、仮想現実装置などのディスプレイ装置を介して表示されてもよい。いくつかの実装形態において、ユーザが出力画像を編集できるユーザインターフェイスが提供されてもよい。
【0062】
上記の説明に加えて、本明細書に記載のシステム、プログラムまたは機能がユーザ情報(例えば、ユーザの画像および/またはビデオ、ソーシャルネットワーク、社会的行動または活動、職業、ユーザ嗜好、またはユーザの現在の場所に関する情報)の収集を可能にするかおよびいつ可能にするか並びにサーバからコンテンツまたは情報を送信するかを選択できるコントロールをユーザに与えてもよい。さらに、特定のデータを格納または使用する前に、1つ以上の方法で特定可能な個人情報を削除するように処理することができる。例えば、ユーザの個人情報が特定できないように、ユーザのIDを処理することができる。また、ユーザの場所を特定できないように、(例えば、都市、郵便番号、または州レベルなどの)位置情報を取得する場合、ユーザの地理位置を一般化することができる。したがって、ユーザは、収集されるユーザ情報、情報の用途、およびユーザに提供される情報を制御することができる。
【0063】
例示的なコンピューティング装置
図8は、本明細書に記載された1つ以上の特徴を実装するために使用され得る例示的な装置800を示すブロック図である。一例において、装置800を用いて、クライアント装置、例えば
図1に示されたクライアント装置120~126のいずれかを実装することができる。代替的に、装置800は、サーバ装置、例えばサーバ102または104を実装することができる。いくつかの実装形態において、装置800を用いて、クライアント装置、サーバ装置、またはクライアント装置とサーバ装置の両方を実装することができる。上述したように、装置800は、任意の好適なコンピュータシステム、サーバ、他の電子装置またはハードウェア装置であってもよい。
【0064】
本明細書に記載された1つ以上の方法は、任意の種類のコンピューティング装置上で実行されるスタンドアロンプログラム、ウェブブラウザ上で実行されるプログラム、モバイルコンピューティング装置(例えば、携帯電話、スマートフォン、タブレットコンピュータ、ウェアラブル装置(例えば、腕時計、アームバンド、宝飾品、ヘッドウェア、仮想現実ゴーグルまたはメガネ、拡張現実ゴーグルまたはメガネ、ヘッドマウントディスプレイ)、ラップトップコンピュータ)上で実行されるモバイルアプリケーション(アプリ)として実行することができる。一例において、クライアント/サーバ構成を使用することができる。例えば、モバイルコンピューティング装置(クライアント装置)は、ユーザからの入力データをサーバ装置に送信し、最終の出力データをサーバから受信して出力する(例えば、表示する)。別の例において、モバイルコンピューティング装置上のモバイルアプリ(および/または他のアプリ)で全ての計算を実行することができる。別の例において、モバイルコンピューティング装置と1つ以上のサーバ装置との間に計算を分担することができる。
【0065】
いくつかの実装形態において、装置800は、プロセッサ802と、メモリ804と、入力/出力(I/O)インターフェイス806とを含む。プロセッサ802は、プログラムコードを実行し、装置800の基本動作を制御するための1つ以上のプロセッサおよび/または処理回路であってもよい。「プロセッサ」は、データ、信号または他の情報を処理するための任意の適切なハードウェアシステム、メカニズムまたはコンポーネントを含む。プロセッサは、1つ以上のコア(例えば、シングルコア、デュアルコア、またはマルチコア構成)を有する汎用中央処理ユニット(CPU)、(例えば、マルチプロセッサ構成を有する)複数の処理ユニット、グラフィックス処理ユニット(GPU)、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、複雑なプログラマブルロジック装置(CPLD)、機能性を達成するための専用回路、ニューラルネットワークモデルベース処理を実行するための専用プロセッサ、ニューラル回路、行列計算(例えば、行列乗算)を行うために最適化されたプロセッサを有するシステム、または他のシステムを含むことができる。いくつかの実装形態において、プロセッサ802は、ニューラルネットワーク処理を実行するための1つ以上のコプロセッサを含むことができる。いくつかの実装形態において、プロセッサ802は、データを処理することによって確率的出力を生成するプロセッサであってよい。例えば、プロセッサ802によって生成された出力は、不正確であってもよく、または出力期待値の範囲内に正確であってもよい。処理は、特定の地理位置に制限される必要がなく、時間的に制限される必要もない。例えば、プロセッサは、「リアルタイム」、「オフライン」、「バッチモード」で機能を実行することができる。処理の一部は、異なる時間および異なる位置で、異なる(または同じ)処理システムによって実行されてもよい。コンピュータは、メモリと通信する任意のプロセッサであってもよい。
【0066】
メモリ804は、典型的には、プロセッサ802によって利用されるように装置800内に設けられ、プロセッサ802によって実行される命令を記憶するための任意の好適なプロセッサ可読記憶媒体、例えば、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、電気消去可能な読取り専用メモリ(EEPROM)、フラッシュメモリであってもよい。メモリ804は、プロセッサ802とは別に配置されてもよく、および/またはそれに一体化されてもよい。メモリ804は、オペレーティングシステム808、プロセッサ802によってサーバ装置800上で実行されるソフトウェア、例えば、機械学習アプリケーション830、他のアプリケーション812、およびアプリケーションデータ814を記憶することができる。他のアプリケーション812は、データ表示エンジン、ウェブホスティングエンジン、画像表示エンジン、画像編集アプリケーション、画像管理アプリケーション、通知エンジン、ソーシャルネットワーキングエンジンなどのアプリケーションを含むことができる。いくつかの実装形態において、機械学習アプリケーション830および他のアプリケーション812は各々、プロセッサ802が本明細書に記載された機能、例えば
図8の方法、または焦点表推定器を参照して説明された機械学習モデル訓練方法を実行することを可能にする命令を含むことができる。
【0067】
他のアプリケーション812は、例えば、画像編集アプリケーション、メディア表示アプリケーション、通信アプリケーション、ウェブホスティングエンジンまたはアプリケーション、マッピングアプリケーション、メディア共有アプリケーションなどを含むことができる。本明細書に開示された1つ以上の方法は、例えば、任意の種類のコンピューティング装置上で実行できるスタンドアロンコンピュータプログラムとして、ウェブページを有するウェブアプリケーションとして、モバイルコンピューティング装置上で実行されるモバイルアプリケーション(アプリ)として、いくつかの環境およびプラットフォームに動作することができる。
【0068】
様々な実装形態において、機械学習アプリケーションは、ベイズ分類器、サポートベクトルマシン、ニューラルネットワーク、または他の学習技術を利用することができる。いくつかの実装形態において、機械学習アプリケーション830は、訓練済みモデル834と、推論エンジン836と、データ832とを含むことができる。いくつかの実装形態において、データ832は、訓練データ、例えば訓練済みモデル834を生成するために使用されるデータを含んでもよい。例えば、訓練データは、文字、画像、音声、映像などの任意の種類のデータを含むことができる。例えば、訓練画像は、例えば、カメラによって取得され、記憶された焦点情報(例えば、焦点深度)および深度情報(例えば、画像の各ピクセルの深度)を画像メタデータとして含む画像を含んでもよい。訓練済みモデル834が焦点表推定器である場合、訓練データは、訓練画像を含むことができる。
【0069】
訓練データは、任意のソース、例えば、訓練用に明記されたデータリポジトリ、機械学習の訓練データとして使用するための許可が与えられたデータから取得されてもよい。1人以上のユーザが機械学習モデル、例えば訓練済みモデル834を訓練するために各ユーザのデータの使用を許可する実装形態において、訓練データは、これらのユーザデータを含んでもよい。1人以上のユーザが各ユーザのデータの使用を許可する実装形態において、データ832は、画像(例えば、写真または他のユーザ生成画像)などの許可データを含むことができる。
【0070】
いくつかの実装形態において、訓練データは、訓練の目的で生成された合成データ、例えば訓練されている状況におけるユーザ入力または活動に基づいていないデータ、模擬写真またはコンピュータによって生成された他の画像から得られたデータを含んでもよい。いくつかの実装形態において、機械学習アプリケーション830は、データ832を除外する。例えば、これらの実装形態において、訓練済みモデル834は、例えば、異なる装置上で生成されてもよく、機械学習アプリケーション830の一部として提供されてもよい。様々な実装形態において、訓練済みモデル834は、モデル構造または形態および関連する重みを含むデータファイルとして提供されてもよい。推論エンジン836は、訓練済みモデル834用のデータファイルを読み取ることができ、訓練済みモデル834において指定されるモデル構造または形態に基づいて、ノード接続性、層および重みを有するニューラルネットワークを実装することができる。
【0071】
いくつかの実装形態において、訓練済みモデル834は、1つ以上のモデル形態または構造を含んでもよい。例えば、モデル形態または構造は、任意の種類のニューラルネットワーク、例えば、線形ネットワーク、複数の層(例えば、入力層と出力層との間の「隠れ層」。各層は、線形ネットワークである)を実装する深層ニューラルネットワーク、畳み込みニューラルネットワーク(例えば、入力データを複数の部分またはタイルに分割または区画し、1つ以上のニューラルネットワーク層を用いて各タイルを別々に処理し、各タイルの処理から得られた結果を集約するネットワーク)、シーケンス間(sequence-to-sequence)ニューラルネットワーク(例えば、1文中の単語、1本の動画中のフレームなどのシーケンシャルデータを入力として受信し、結果シーケンスを出力として生成するネットワーク)を含むことができる。モデル形態または構造は、様々なノード間の接続および層に編成されたノードの編成を指定することができる。
【0072】
例えば、最初の層(例えば、入力層)のノードは、データを入力データ832またはアプリケーションデータ814として受信することができる。例えば、訓練済みモデルを用いて画像を分析または生成する場合もしくは効果、例えばボケ効果を適用する場合、入力データは、例えば、各ノードの1つ以上のピクセルを含むことができる。後続の中間層は、モデル形式または構造において指定された接続に従って、前の層のノードの出力を入力として受信ことができる。これらの層は、隠れ層または潜在層とも呼ばれる。
【0073】
最終層(例えば、出力層)は、機械学習アプリケーションの出力を生成する。例えば、この出力は、ボケ効果を有するぼやけ画像であってもよい。いくつかの実装形態において、モデル形態または構造は、各層中のノードの数および/または種類を指定する。
【0074】
異なる実装形態において、訓練済みモデル834は、各モデル構造または形態の層に配置された複数のノードを含むことができる。いくつかの実装形態において、ノードは、例えば、1単位の入力を処理して1単位の出力を生成するように構成された、メモリを有しない計算ノードであってもよい。ノードによって実行される計算は、例えば、複数のノード入力の各々に重みを乗算するステップと、加重和を取得するステップと、バイアス値または切片値を用いて加重和を調整することによってノード出力を生成するステップとを含んでもよい。また、いくつかの実装形態において、ノードによって実行される計算は、調整された加重和にステップ/活性化関数を適用するステップを含んでもよい。いくつかの実装形態において、ステップ/活性化関数は、非線形関数であってもよい。様々な実装形態において、このような計算は、行列乗算などの演算を含んでもよい。いくつかの実装形態において、例えば、マルチコアプロセッサの複数のプロセッサコアを用いて、またはGPUもしくは専用ニューラル回路の個々の処理ユニットを用いて、複数のノードの計算を並列に実行することができる。いくつかの実装形態において、ノードは、メモリを含んでもよく、例えば、1つ以上の前の入力を記憶し、後続の入力を処理する際に1つ以上の前の入力を使用してもよい。例えば、メモリを有するノードは、ロングショートタームメモリ(LSTM)ノードを含むことができる。LSTMノードは、メモリを用いて、ノードが有限状態マシン(FSM)のように動作することを可能にする「状態」を維持することができる。このようなノードを有するモデルは、連続データ(sequential data)、例えば、1文または1段落に含まれる複数の単語、1本の動画に含まれる複数のフレーム、会話またはその他の音声などを処理する際に有用であろう。
【0075】
いくつかの実装形態において、訓練済みモデル834は、個々のノードの埋め込みまたは重みを含んでもよい。例えば、モデルは、モデル形態または構造によって指定されるように、層に編成された複数のノードとして初期化されてもよい。初期化の時に、モデル形態に従って接続された各ノード対、例えば、ニューラルネットワークの連続層の各ノード対の間の接続に、各々の重みを適用してもよい。例えば、各々の重みは、ランダムに割り当てられてもよく、またはデフォルト値に初期化されてもよい。その後、例えば、データ832を用いてモデルを訓練して、結果を生成することができる。
【0076】
例えば、訓練ステップは、教師あり学習技術を適用することを含むことができる。教師あり学習において、訓練データは、複数の入力(例えば、1組のグレースケール画像)と、各入力に対応する期待出力(例えば、グレースケール画像に対応する1組の正解画像または他のカラー化画像)とを含むことができる。例えば、同様の入力が与えられたときにモデルが期待出力を生成する確率を高めるように、重みの値は、モデルの出力と期待出力との比較に基づいて自動的に調整される。
【0077】
いくつかの実装形態において、訓練ステップは、半教師あり学習技術または教師なし学習技術を適用することを含んでもよい。教師なし学習において、入力データのみが提供されてもよく、モデルは、データを区別するように、例えば、入力データを複数のグループにクラスタリングするように訓練されてもよい。各グループは、何らかの形で類似する入力データを含む。
【0078】
いくつかの実装形態において、教師なし学習を用いて、例えば、機械学習アプリケーション830によって使用され得る知識表現を生成することができる。様々な実装形態において、訓練済みモデルは、モデル構造に対応する1組の重みまたは埋め込みを含む。データ832を省略した実装形態において、機械学習アプリケーション830は、例えば、機械学習アプリケーション830の開発者または第三者による事前の訓練に基づいて訓練されたモデル834を含むことができる。いくつかの実装形態において、訓練済みモデル834は、例えば、重みを提供するサーバからダウンロードされた1組の固定の重みを含んでもよい。
【0079】
また、機械学習アプリケーション830は、推論エンジン836を含む。推論エンジン836は、訓練済みモデル834をアプリケーションデータ814などのデータに適用することによって推論を提供するように構成される。いくつかの実装形態において、推論エンジン836は、プロセッサ802によって実行されるソフトウェアコードを含むことができる。いくつかの実装形態において、推論エンジン836は、プロセッサ802が訓練済みモデルを適用することを可能にする(例えば、プログラマブルプロセッサ、フィールドプログラマブルゲートアレイ(FPGA)の)回路構成を指定することができる。いくつかの実装形態において、推論エンジン836は、ソフトウェア命令、ハードウェア命令、またはその組み合わせを含んでもよい。いくつかの実装形態において、推論エンジン836は、アプリケーションプログラミングインターフェイス(API)を提供することができる。オペレーティングシステム808および/または他のアプリケーション812は、このAPIを利用して、推論エンジン836を呼び出し、例えば訓練済みモデル834をアプリケーションデータ814に適用することによって、推論を生成することができる。例えば、焦点表推定器モデルの推論は、焦点表であってもよい。別の例において、深度予測モデルの推論は、画像の様々なピクセルの予測深度値であってもよい。
【0080】
機械学習アプリケーション830は、いくつかの技術利点を提供することができる。例えば、訓練済みモデル834が教師なし学習に基づいて生成された場合、推論エンジン836は、訓練済みモデル834を適用して、入力データ、例えばアプリケーションデータ814から知識表現(例えば、数値表現)を生成することができる。例えば、画像分析用に訓練されたモデルは、入力画像(例えば、10MB)よりも小さいデータサイズの画像表現(例えば、1KB)を生成することができる。いくつかの実装形態において、このような表現は、出力(例えば、ラベル、分類、画像の記述文、グレースケール画像から得られたカラー化画像)を生成するための処理コスト(例えば、計算コスト、メモリ使用量など)を低減するのに有用である。
【0081】
いくつかの実装形態において、このような表現は、入力として、推論エンジン836の出力から出力を生成する異なる機械学習アプリケーションに提供されてもよい。いくつかの実装形態において、機械学習アプリケーション830によって生成された知識表現は、例えばネットワークを介して、さらなる処理を行う異なる装置に提供されてもよい。このような実装形態において、画像ではなく知識表現を提供することは、例えば、低いコストでより速いデータ送信を可能にするという技術利益を提供することができる。別の例において、文書をクラスタ化するために訓練されたモデルは、入力文書から文書クラスタを生成することができる。文書クラスタは、元の文書にアクセスする必要なく、さらなる処理(例えば、文書がトピックに関連するか否かを判定すること、文書の分類カテゴリを判定すること)を行うために好適であるため、計算コストを節約することができる。
【0082】
いくつかの実装形態において、機械学習アプリケーション830は、オフラインで実装されてもよい。これらの実装形態において、訓練済みモデル834は、第1の段階で生成され、機械学習アプリケーション830の一部として提供されてもよい。いくつかの実装形態において、機械学習アプリケーション830は、オンラインで実装されてもよい。例えば、このような実装形態において、機械学習アプリケーション830(例えば、オペレーティングシステム808、1つ以上の他のアプリケーション812)を呼び出すアプリケーションは、機械学習アプリケーション830によって生成された推論を利用することができ(例えば、推論をユーザに提供することができ)、システムログ(例えば、ユーザによって許可される場合、推論に基づいてユーザがとる行動、またはさらなる処理の入力として利用される場合、さらなる処理の結果)を生成することができる。システムログは、定期的に、例えば、1時間ごとに、1ヵ月ごとにまたは3ヵ月ごとに生成されてもよく、ユーザによって許可された場合、訓練済みモデル834を更新するために、例えば訓練済みモデル834の埋め込みを更新するために使用されてもよい。
【0083】
いくつかの実装形態において、機械学習アプリケーション830が実行される装置800の特定の構成に適応できるように、機械学習アプリケーション830を実装してもよい。例えば、機械学習アプリケーション830は、使用可能な計算リソース、例えば、プロセッサ802を利用する計算グラフを決定することができる。例えば、機械学習アプリケーション830は、複数の装置上の分散アプリケーションとして実装された場合、計算を最適化するように、個々の装置上で実行される計算を決定することができる。別の例では、機械学習アプリケーション830は、プロセッサ802が特定の数(例えば、1000個)のGPUコアを有するGPUを含んでいると判断した場合、推論エンジンを(例えば、1000個の個別のプロセスまたはスレッドとして)実装することができる。
【0084】
いくつかの実装形態において、機械学習アプリケーション830は、1組の訓練済みモデルを実装することができる。例えば、訓練済みモデル834は、同じ入力データに各々適用可能である複数の訓練済みモデルを含むことができる。これらの実装形態において、機械学習アプリケーション830は、例えば、利用可能な計算リソース、以前の推論を使用した場合の成功率などに基づいて、特定の訓練済みモデルを選択することができる。いくつかの実装形態において、機械学習アプリケーション830は、複数の訓練済みモデルを適用するように、推論エンジン836を実行することができる。これらの実装形態において、機械学習アプリケーション830は、例えば、各訓練済みモデルを適用することによって得られた出力にスコアを付ける多数決を用いて、または1つ以上の特定の出力を選択することによって、出力を合成することができる。さらに、これらの実装形態において、機械学習アプリケーションは、個々の訓練済みモデルを適用するための時間閾値(例えば、0.5ms)を適用し、時間閾値内で利用可能な個々の出力のみを利用することができる。時間閾値内に受信されていない出力は、利用されなくてもよく、例えば破棄されてもよい。例えば、このような手法は、例えばオペレーティングシステム808または1つ以上のアプリケーション812によって機械学習アプリケーションを呼び出す間に指定された時間制限があるときに適切であろう。
【0085】
異なる実装形態において、機械学習アプリケーション830は、異なる種類の出力を生成することができる。例えば、機械学習アプリケーション830は、表現またはクラスタ(例えば、入力データの数値表現)、(例えば、画像、文書などを含む入力データの)ラベル、(例えば、入力文章に対する応答として使用され、画像または映像を適切に表現する)語句または文章、画像(例えば、入力画像、例えばグレースケール画像に応答して、機械学習アプリケーションによって生成されたカラー化画像、ボケ効果を有する画像、または他の様式の画像)、音声または映像を提供することができる。例えば、機械学習アプリケーション830は、入力映像に応答して、特定の効果を適用した出力映像を生成することができる。例えば、訓練済みモデル834がコミックブックまたは特定のアーティストからの訓練データを用いて訓練された場合、この出力映像は、例えばコミックブックまたは特定のアーティストのスタイルでレンダリングされる。いくつかの実装形態において、機械学習アプリケーション830は、呼び出すアプリケーション、例えば、オペレーティングシステム808または1つ以上のアプリケーション812によって指定された形式に基づいて出力を生成することができる。いくつかの実装形態において、呼び出されているアプリケーションは、別の機械学習アプリケーションであってもよい。このような構成は、例えば、呼び出されている機械学習アプリケーションが機械学習アプリケーション830からの出力を用いて訓練される、または機械学習アプリケーション830が呼び出されている機械学習アプリケーションからの出力を用いて訓練される敵対的生成ネットワークに使用されてもよい。
【0086】
代替的に、メモリ804内のソフトウェアのいずれも、任意の他の好適な記憶場所またはコンピュータ可読媒体上に格納されてもよい。また、メモリ804(および/または接続された他の記憶装置)は、1つ以上のメッセージ、1つ以上の分類基準、電子百科事典、辞書、類語辞典、知識ベース、メッセージデータ、文法、ユーザ設定、および/または本明細書に記載されている特徴において使用される他の命令およびデータを格納することができる。メモリ804および任意の他の種類のストレージ(例えば、磁気ディスク、光ディスク、磁気テープ、または他の有形媒体)は、「ストレージ」または「記憶装置」と見なすことができる。
【0087】
I/Oインターフェイス806は、サーバ装置800を他のシステムおよび装置に接続することを可能にする機能を提供することができる。接続された装置は、装置800の一部として含まれてもよく、または装置800から離れており、装置800と通信することができる。例えば、ネットワーク通信装置、記憶装置(例えば、メモリおよび/またはデータベース106)および入力/出力装置は、I/Oインターフェイス806を介して通信することができる。いくつかの実装形態において、I/Oインターフェイスは、入力装置(キーボード、ポインティング装置、タッチスクリーン、マイクロフォン、カメラ、スキャナ、センサなど)および/または出力装置(ディスプレイ装置、スピーカ装置、プリンタ、モータなど)などのインターフェイス装置に接続することができる。
【0088】
I/Oインターフェイス806に接続することができる装置のいくつかの例は、1つ以上のディスプレイ装置820を含むことができる。ディスプレイ装置820を用いて、コンテンツ、例えば画像、映像、および/または本明細書に記載されている出力アプリケーションのユーザインターフェイスを表示することができる。ディスプレイ装置820は、ローカル接続(例えば、ディスプレイバス)を介しておよび/またはネットワーク接続を介して、装置800に接続されてもよく、任意の好適なディスプレイ装置であってもよい。ディスプレイ装置820は、任意の好適なディスプレイ装置、例えばLCD、LED、プラズマディスプレイスクリーン、CRT、テレビ、モニタ、タッチスクリーン、3Dディスプレイスクリーン、または他の視覚ディスプレイ装置を含むことができる。例えば、ディスプレイ装置820は、モバイル装置上に設けられたフラットディスプレイスクリーン、ゴーグル、ヘッドセット装置に設けられた複数のディスプレイスクリーン、またはコンピュータ装置用のモニタスクリーンであってもよい。
【0089】
I/Oインターフェイス806は、他の入力装置および出力装置に接続することができる。いくつかの例は、画像を撮影することができる1つ以上のカメラを含む。いくつかの実装形態は、音声を(例えば、撮影された画像、音声コマンドなどの一部として)捕捉するためのマイクロフォン、音声を出力するためのオーディオスピーカ装置、または他の入出力装置を提供することができる。
【0090】
図示を容易にするために、
図7は、1つのブロックを用いて、各々のプロセッサ802、メモリ804、I/Oインターフェイス806、およびソフトウェアブロック808、812および830を示す。これらのブロックは、1つ以上のプロセッサまたは処理回路、オペレーティングシステム、メモリ、I/Oインターフェイス、アプリケーション、および/またはソフトウェアモジュールを表することができる。他の実装形態において、装置800は、図示されている構成要素の全てを有しなくてもよく、および/または本明細書に記載されている要素の代わりにそれらに加えて、他の種類の要素を含む他の要素を有してもよい。いくつかの構成要素は、本明細書のいくつかの実装形態に記載されているブロックおよび動作を実行するものとして説明されているが、環境100、装置800、同様のシステム、またはこのようなシステムに関連する任意の適切なプロセッサの任意の適切な構成要素または構成要素の組み合わせが、本明細書に記載されているブロックおよび動作を実行することができる。
【0091】
本明細書に記載された方法は、コンピュータ上で実行可能なコンピュータプログラム命令またはコードによって実装されてもよい。例えば、このコードは、1つ以上のデジタルプロセッサ(例えば、マイクロプロセッサまたは他の処理回路)によって実装されよく、コンピュータプログラム製品上に記憶されてもよい。コンピュータプログラム製品は、磁気記憶媒体、光記憶媒体、電磁記憶媒体、半導体またはソリッドステートメモリを含む半導体記憶媒体、磁気テープ、リムーバブルコンピュータディスケット、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、フラッシュメモリ、剛性磁気ディスク、光ディスク、ソリッドステートメモリドライブなどを含む。また、プログラム命令は、例えば、サーバ(例えば、分散システムおよび/またはクラウドコンピューティングシステム)から配信されたSaaS(software as a service)形式の電子信号に収容され、電子信号として提供されてもよい。代替的に、1つ以上の方法は、ハードウェア(例えば、ロジックゲート)で実装されてもよく、またはハードウェアとソフトウェアとの組み合わせで実装されてもよい。例示的なハードウェアは、プログラマブルプロセッサ(例えば、フィールドプログラマブルゲートアレイ(FPGA)、複雑なプログラマブルロジック装置)、汎用プロセッサ、グラフィックプロセッサ、特定用途向け集積回路(ASIC)などであってもよい。1つ以上の方法は、システム上で実行されるアプリケーションの一部もしくは構成要素として、または他のアプリケーションおよびオペレーティングシステムと共に実行されるアプリケーションもしくはソフトウェアとして実行することができる。
【0092】
特定の実装形態を参照して本開示を説明したが、これらの特定の実装形態は、例示に過ぎず、限定的なものではない。これらの例に示されている概念は、他の例および実装形態に適用されてもよい。
【0093】
なお、当業者に公知であるように、本開示に記載されている機能ブロック、動作、特徴、方法、装置、およびシステムは、システム、装置、および機能ブロックの異なる組み合わせに統合されてもよく、または分割されてもよい。任意の好適なプログラミング言語およびプログラミング技術を、特定の実装形態のルーチンを実装することができる。異なるプログラミング技術(例えば、手続き型またはオブジェクト指向プログラミング技術)が採用されてもよい。ルーチンは、単一の処理装置上で実行されてもよく、または複数のプロセッサ上で実行されてもよい。ステップ、動作または計算は、特定の順序で示されているが、この順序は、異なる特定の実装形態において変更されてもよい。いくつかの実装形態において、本明細書において連続的ものとして示された複数のステップまたは動作は、同時に実行されてもよい。