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

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

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

特許7066732設定可能且つプログラム可能な画像プロセッサユニット
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-05-02
(45)【発行日】2022-05-13
(54)【発明の名称】設定可能且つプログラム可能な画像プロセッサユニット
(51)【国際特許分類】
   G06T 1/20 20060101AFI20220506BHJP
【FI】
G06T1/20 A
【請求項の数】 24
(21)【出願番号】P 2019544742
(86)(22)【出願日】2018-01-10
(65)【公表番号】
(43)【公表日】2020-06-11
(86)【国際出願番号】 US2018013054
(87)【国際公開番号】W WO2018212795
(87)【国際公開日】2018-11-22
【審査請求日】2019-10-18
(31)【優先権主張番号】15/595,289
(32)【優先日】2017-05-15
(33)【優先権主張国・地域又は機関】US
【前置審査】
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】特許業務法人深見特許事務所
(72)【発明者】
【氏名】バッソ,ファブリツィオ
(72)【発明者】
【氏名】チャン,エドワード
(72)【発明者】
【氏名】フィンチェルスタイン,ダニエル・フレデリック
(72)【発明者】
【氏名】ナイト,ティモシー
(72)【発明者】
【氏名】マーク,ウィリアム・アール
(72)【発明者】
【氏名】メイクスナー,アルバート
(72)【発明者】
【氏名】ラビ,シャリアー
(72)【発明者】
【氏名】レッドグレイブ,ジェイソン・ルパート
(72)【発明者】
【氏名】レインデルス,マスミ
(72)【発明者】
【氏名】シャチャム,オフェル
(72)【発明者】
【氏名】スターク,ドナルド
(72)【発明者】
【氏名】トマスコ,ミッシェル
【審査官】山田 辰美
(56)【参考文献】
【文献】米国特許出願公開第2015/0091916(US,A1)
【文献】特開2007-310883(JP,A)
【文献】国際公開第2016/171909(WO,A1)
【文献】特開2005-236717(JP,A)
【文献】特開2014-222473(JP,A)
【文献】特表2016-519822(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06T 1/20
IEEE Xplore
(57)【特許請求の範囲】
【請求項1】
画像プロセッサユニットであって、
少なくとも1つの入力画像を受信するための複数の入力と、
少なくとも1つの出力画像を提供するための複数の出力と、
前記複数の入力および前記複数の出力に結合されたネットワークとを備え、前記ネットワークは、少なくとも1つの前記入力を少なくとも1つの前記出力に結合し、前記画像プロセッサユニットは、さらに
前記ネットワークに結合された画像プロセッサ回路を備え、前記ネットワークは、1つの前記入力で受信した入力画像を前記画像プロセッサ回路にルーティングし、前記画像プロセッサ回路は、画像信号処理プログラムコードを実行することによって、前記入力画像から処理済み出力画像を生成し、前記ネットワークは、前記処理済み出力画像を少なくとも1つの前記出力にルーティングし、前記画像プロセッサユニットは、さらに
埋め込み型プロセッサ回路を備え、前記埋め込み型プロセッサ回路は、カメラドライバプログラムコードを実行するように構成されるとともに、前記ネットワークの構成パラメータを設定することにより、前記入力画像および前記処理済み出力画像を含むデータのルーティングを設定するように構成され、
前記画像プロセッサ回路は、複数のステンシルプロセッサを含み、前記複数のステンシルプロセッサの各々は、ハードウェアの2次元シフトレジスタアレイに結合されたハードウェアの実行レーンアレイを含み、
前記入力画像の前記ルーティングは、
(i)前記画像プロセッサ回路を介していずれか1つの前記出力に向かう経路および
(ii)前記画像プロセッサ回路のバイパスを介していずれか1つの前記出力に向かう経路および
(iii)前記画像プロセッサ回路を介していずれか1つの前記出力と、前記画像プロセッサ回路の前記バイパスを介して他の1つの前記出力との両方に向かう経路を含む、画像プロセッサユニット。
【請求項2】
前記ネットワークは、前記入力画像を前記画像プロセッサ回路にルーティングしている間に、1つの前記入力で受信した第2の入力画像を1つの前記出力にルーティングする、請求項1に記載の画像プロセッサユニット。
【請求項3】
前記画像プロセッサ回路による前記画像信号処理プログラムコードの実行は、オフセット補正、ノイズ低減、自動ホワイトバランス、デモザイク処理、シャープニング、レンズシェーディング補正、色補正、トーンマッピングおよび時間-周波数変換のいずれかを実行することである、請求項1または2に記載の画像プロセッサユニット。
【請求項4】
前記画像プロセッサ回路による前記画像信号処理プログラムコードの実行は、画像信号処理パイプラインを実施することである、請求項1~請求項3のいずれか1項に記載の画像プロセッサユニット。
【請求項5】
前記画像プロセッサ回路による前記画像信号処理プログラムコードの実行は、画像統計値を生成することである、請求項1~請求項4のいずれか1項に記載の画像プロセッサユニット。
【請求項6】
ホストシステムへのインターフェイスをさらに備え、
前記インターフェイスは、前記ホストシステムから入力データを受信し、前記ネットワークは、前記入力データを前記画像プロセッサ回路にルーティングし、前記画像プロセッサ回路は、前記入力データに対して前記画像信号処理プログラムコードを実行することによって結果データを生成し、前記ネットワークは、前記結果データを前記ホストシステムにルーティングする、請求項1~請求項5のいずれか1項に記載の画像プロセッサユニット。
【請求項7】
前記画像プロセッサ回路による前記画像信号処理プログラムコードの実行は、ニューラルネットワーク処理、機械学習、顔検出、顔認識、製品認識、シーン認識および言語翻訳のいずれかを実行することである、請求項1~請求項6のいずれか1項に記載の画像プロセッサユニット。
【請求項8】
メモリを前記画像プロセッサユニットに結合するためのメモリインターフェイスをさらに備え、
前記ネットワークは、前記画像プロセッサ回路が前記入力画像を処理する前に、前記入力画像を前記メモリにルーティングすること、および/または、出力画像を前記メモリから1つの前記出力にルーティングすることを行う、請求項1~請求項7のいずれか1項に記載の画像プロセッサユニット。
【請求項9】
前記メモリは、複数の画像を格納し、
前記画像プロセッサ回路による前記画像信号処理プログラムコードの実行は、前記複数の画像の露出不足領域を、前記露出不足領域に比べて前記複数の画像のより少ない過度露出領域とブレンドすることである、および/または、前記複数の画像を分析することによって最良の静止画を決定することである、請求項8に記載の画像プロセッサユニット。
【請求項10】
前記画像プロセッサユニットは、アプリケーションプロセッサ上に実装される、請求項1~請求項のいずれか1項に記載の画像プロセッサユニット。
【請求項11】
画像の統計値を処理および/または生成するように構成される、請求項1~請求項1のいずれか1項に記載の画像プロセッサユニット。
【請求項12】
前記画像プロセッサユニットは、画像データのステンシルに対して未処理画像を処理するように構成され、ステンシルを処理することによって、オフセット補正、ノイズ低減、自動ホワイトバランス、デモザイク処理、シャープニング、レンズシェーディング補正、色補正、トーンマッピングおよび/または時間-周波数変換を実行する、請求項1~請求項1のいずれか1項に記載の画像プロセッサユニット。
【請求項13】
データ計算ユニットが、前記実行レーンアレイよりも広い寸法を有するシフトレジスタ構造を備え、前記実行レーンアレイの外側にレジスタが存在する、請求項1~1のいずれか1項に記載の画像プロセッサユニット。
【請求項14】
コンピューティングシステムであって、
複数の汎用プロセッサとメインメモリサブシステムとを含むホストシステムと、
1つ以上のカメラと、
画像信号処理プログラムコードを格納するための記憶媒体と、
前記1つ以上のカメラと前記ホストシステムとの間に結合された画像プロセッサユニットとを備え、
前記画像プロセッサユニットは、以下のa)、b)、c)d)およびe)を備え、すなわち、
a)少なくとも1つの入力画像を受信するための複数の入力と、
b)少なくとも1つの出力画像を提供するための複数の出力と、
c)前記複数の入力および前記複数の出力に結合されたネットワークとを備え、前記ネットワークは、少なくとも1つの前記入力を少なくとも1つの前記出力に結合し、
d)前記ネットワークに結合された画像プロセッサ回路を備え、前記ネットワークは、1つの前記入力で受信した入力画像を前記画像プロセッサ回路にルーティングし、前記画像プロセッサ回路は、前記画像信号処理プログラムコードを実行することによって、前記入力画像から処理済み出力画像を生成し、前記ネットワークは、前記処理済み出力画像を少なくとも1つの前記出力にルーティングし、
e)埋め込み型プロセッサ回路を備え、前記埋め込み型プロセッサ回路は、カメラドライバプログラムコードを実行するように構成されるとともに、前記ネットワークの構成パラメータを設定することにより、前記入力画像および前記処理済み出力画像を含むデータのルーティングを設定するように構成され、
前記画像プロセッサ回路は、複数のステンシルプロセッサを含み、前記複数のステンシルプロセッサの各々は、ハードウェアの2次元シフトレジスタアレイに結合されたハードウェアの実行レーンアレイを含み、
前記入力画像の前記ルーティングは、
(i)前記画像プロセッサ回路を介していずれか1つの前記出力に向かう経路および
(ii)前記画像プロセッサ回路のバイパスを介していずれか1つの前記出力に向かう経路および
(iii)前記画像プロセッサ回路を介していずれか1つの前記出力と、前記画像プロセッサ回路の前記バイパスを介して他の1つの前記出力との両方に向かう経路を含む、コンピューティングシステム。
【請求項15】
前記ネットワークは、前記入力画像を前記画像プロセッサ回路にルーティングしている間に、1つの前記入力で受信した第2の入力画像を1つの前記出力にルーティングする、請求項1に記載のコンピューティングシステム。
【請求項16】
前記画像プロセッサ回路による前記画像信号処理プログラムコードの実行は、オフセット補正、ノイズ低減、自動ホワイトバランス、デモザイク処理、シャープニング、レンズシェーディング補正、色補正、トーンマッピングおよび時間-周波数変換のいずれかを実行することである、請求項1または1に記載のコンピューティングシステム。
【請求項17】
ホストシステムへのインターフェイスをさらに備え、
前記インターフェイスは、前記ホストシステムから入力データを受信し、前記ネットワークは、前記入力データを前記画像プロセッサ回路にルーティングし、前記画像プロセッサ回路は、前記入力データに対して前記画像信号処理プログラムコードを実行することによって結果データを生成し、前記ネットワークは、前記結果データを前記ホストシステムにルーティングする、請求項1~1のいずれか1項に記載のコンピューティングシステム。
【請求項18】
前記画像プロセッサ回路による前記画像信号処理プログラムコードの実行は、ニューラルネットワーク処理、機械学習、顔検出、顔認識、製品認識、シーン認識および言語翻訳のいずれかを実行することである、請求項1~1のいずれか1項に記載のコンピューティングシステム。
【請求項19】
メモリを前記画像プロセッサユニットに結合するためのメモリインターフェイスをさらに備え、
前記ネットワークは、前記画像プロセッサ回路が前記入力画像を処理する前に、前記入力画像を前記メモリにルーティングすること、および/または、出力画像を前記メモリから1つの前記出力にルーティングすることを行う、請求項1~1のいずれか1項に記載のコンピューティングシステム。
【請求項20】
前記メモリは、複数の画像を格納し、
前記画像プロセッサ回路による前記画像信号処理プログラムコードの実行は、前記複数の画像の露出不足領域を、前記露出不足領域に比較して前記複数の画像のより少ない過度露出領域とブレンドすることである、および/または、前記複数の画像を分析することによって最良の静止画を決定することである、請求項19に記載のコンピューティングシステム。
【請求項21】
画像の統計値を処理および/または生成するように構成される、請求項1~2のいずれか1項に記載のコンピューティングシステム。
【請求項22】
前記画像プロセッサユニットは、画像データのステンシルに対して未処理画像を処理するように構成され、ステンシルを処理することによって、オフセット補正、ノイズ低減、自動ホワイトバランス、デモザイク処理、シャープニング、レンズシェーディング補正、色補正、トーンマッピングおよび/または時間-周波数変換を実行する、請求項1~2のいずれか1項に記載のコンピューティングシステム。
【請求項23】
データ計算ユニットが、前記実行レーンアレイよりも広い寸法を有するシフトレジスタ構造を備え、前記実行レーンアレイの外側にレジスタが存在する、請求項1~2のいずれか1項に記載のコンピューティングシステム。
【請求項24】
請求項1~1のいずれか1項に記載の画像プロセッサユニットによって実行される方法であって、
第1の入力画像を前記画像プロセッサユニットの第1の出力に転送することと、
第2の入力画像を画像プロセッサ回路に転送することとを含み、前記画像プロセッサ回路は、実行レーンアレイと、2次元シフトレジスタアレイとを備え、
前記画像プロセッサユニット上で画像信号処理プログラムコードを実行することによって処理画像を生成することを含み、前記画像信号処理プログラムコードの実行により、2次元シフトレジスタアレイは、データを前記実行レーンアレイによって実行されている画像信号演算処理の間にシフトし、
前記処理画像を前記画像プロセッサユニットの第2の出力に転送することを含む、方法。
【発明の詳細な説明】
【技術分野】
【0001】
発明の分野
本発明の分野は、一般に、計算科学に関し、より具体的には、構成可能且つプログラム可能な画像プロセッサユニットに関する。
【背景技術】
【0002】
背景
画像処理は、典型的には、アレイに編成されたピクセル値の処理を含む。ここで、空間的に編成された2次元アレイは、画像の2次元的性質を捕捉する(追加の次元は、時間(例えば2次元画像のシーケンス)、深さ(例えば、畳み込みニューラルネットワークの中間層の深さ)およびデータ型(例えば、色)を含み得る)。典型的なシナリオにおいて、アレイに編成されたピクセル値は、静止画像または動画を捕捉するための一連のフレームを生成するカメラによって提供される。従来の画像プロセッサは、通常、2つの極端のどちらかに該当する。
【発明の概要】
【発明が解決しようとする課題】
【0003】
第1の極端は、画像処理タスクを、汎用プロセッサまたは汎用の様なプロセッサ(例えば、ベクトル命令拡張を備えた汎用プロセッサ)上で実行されるソフトウェアプログラムとして実行する。第1の極端は、一般的に非常に汎用性の高いアプリケーションソフトウェア開発プラットフォームを提供するが、関連するオーバーヘッド(例えば、命令のフェッチおよびデコード、オンチップおよびオフチップデータの処理、投機的実行)と組み合わせられたより細かいデータ構造の使用は、最終的には、プログラムコードの実行中に、単位データあたりにより多くのエネルギーを消費してしまうことになる。
【0004】
反対の第2の極端は、固定機能のハードワイヤード回路をはるかに大きなデータブロックに適用する。カスタム設計された回路に直接適用される、(より細かいブロックとは対照的に)より大きなデータブロックの使用は、単位データあたりの消費電力を大幅に削減する。しかしながら、カスタム設計された固定機能回路系の使用は、一般に、プロセッサが実行することができるタスクの数が限られる結果となる。このように、(第1の極端に関連する)汎用性の高いプログラミング環境は、第2の極端に欠けている。
【0005】
汎用性の高いアプリケーションソフトウェア開発機会と、単位データあたりの電力効率の向上とを両立させた技術プラットフォームは、依然として望ましいが、欠けている解決策である。
【課題を解決するための手段】
【0006】
概要
記載されたのは、画像プロセッサユニットである。画像プロセッサユニットは、少なくとも1つの入力画像を受信するための複数の入力と、少なくとも1つの出力画像を提供するための複数の出力とを備える。画像プロセッサユニットは、複数の入力および複数の出力に結合されたネットワークとを備える。ネットワークは、少なくとも1つの入力を少なくとも1つの出力に結合する。画像プロセッサユニットは、ネットワークに結合された画像プロセッサ回路を備える。ネットワークは、1つの入力で受信した入力画像を画像プロセッサ回路にルーティングする。画像プロセッサ回路は、画像信号処理プログラムコードを実行することによって、入力画像から処理済み出力画像を生成する。ネットワークは、処理済み出力画像を少なくとも1つの出力にルーティングする。
【0007】
以下の説明および添付の図面は、本発明の実施形態を例示するために使用される。
【図面の簡単な説明】
【0008】
図1a】従来技術のコンピューティングシステムおよび集積化された画像信号処理機能を示す図である。
図1b】従来技術のコンピューティングシステムおよび集積化された画像信号処理機能を示す図である。
図1c】従来技術のコンピューティングシステムおよび集積化された画像信号処理機能を示す図である。
図2】新たな画像プロセッサアーキテクチャの実行レーンアレイおよび2次元シフトレジスタアレイを示す図である。
図3】システムに集積化された画像プロセッサユニットを示す高レベル図である。
図4a】画像プロセッサユニットの異なる構成を示す図である。
図4b】画像プロセッサユニットの異なる構成を示す図である。
図4c】画像プロセッサユニットの異なる構成を示す図である。
図4d】画像プロセッサユニットの異なる構成を示す図である。
図4e】画像プロセッサユニットの異なる構成を示す図である。
図4f】画像プロセッサユニットの異なる構成を示す図である。
図4g】画像プロセッサユニットの異なる構成を示す図である。
図4h】画像プロセッサユニットの異なる構成を示す図である。
図5】画像処理ユニットの実施形態を示す図である。
図6】画像プロセッサユニットによって実行される方法を示す図である。
図7】画像プロセッサハードウェアアーキテクチャの実施形態を示す図である。
図8a】画像データを行グループに解析すること、行グループをシートに解析すること、および重なり合うステンシルを有するシートに対して実行された処理を示す図である。
図8b】画像データを行グループに解析すること、行グループをシートに解析すること、および重なり合うステンシルを有するシートに対して実行された処理を示す図である。
図8c】画像データを行グループに解析すること、行グループをシートに解析すること、および重なり合うステンシルを有するシートに対して実行された処理を示す図である。
図8d】画像データを行グループに解析すること、行グループをシートに解析すること、および重なり合うステンシルを有するシートに対して実行された処理を示す図である。
図8e】画像データを行グループに解析すること、行グループをシートに解析すること、および重なり合うステンシルを有するシートに対して実行された処理を示す図である。
図9a】ステンシルプロセッサの実施形態を示す図である。
図9b】ステンシルプロセッサの命令語の実施形態を示す図である。
図10】ステンシルプロセッサ内のデータ計算ユニットの実施形態を示す図である。
図11a】2次元シフトアレイおよび実行レーンアレイを用いて、重なり合うステンシルを有する隣接の出力ピクセル値の対を決定する例を示す図である。
図11b】2次元シフトアレイおよび実行レーンアレイを用いて、重なり合うステンシルを有する隣接の出力ピクセル値の対を決定する例を示す図である。
図11c】2次元シフトアレイおよび実行レーンアレイを用いて、重なり合うステンシルを有する隣接の出力ピクセル値の対を決定する例を示す図である。
図11d】2次元シフトアレイおよび実行レーンアレイを用いて、重なり合うステンシルを有する隣接の出力ピクセル値の対を決定する例を示す図である。
図11e】2次元シフトアレイおよび実行レーンアレイを用いて、重なり合うステンシルを有する隣接の出力ピクセル値の対を決定する例を示す図である。
図11f】2次元シフトアレイおよび実行レーンアレイを用いて、重なり合うステンシルを有する隣接の出力ピクセル値の対を決定する例を示す図である。
図11g】2次元シフトアレイおよび実行レーンアレイを用いて、重なり合うステンシルを有する隣接の出力ピクセル値の対を決定する例を示す図である。
図11h】2次元シフトアレイおよび実行レーンアレイを用いて、重なり合うステンシルを有する隣接の出力ピクセル値の対を決定する例を示す図である。
図11i】2次元シフトアレイおよび実行レーンアレイを用いて、重なり合うステンシルを有する隣接の出力ピクセル値の対を決定する例を示す図である。
図11j】2次元シフトアレイおよび実行レーンアレイを用いて、重なり合うステンシルを有する隣接の出力ピクセル値の対を決定する例を示す図である。
図11k】2次元シフトアレイおよび実行レーンアレイを用いて、重なり合うステンシルを有する隣接の出力ピクセル値の対を決定する例を示す図である。
図12】実行レーンアレイおよび2次元シフトアレイを集積化した単位セルの実施形態を示す図である。
図13】例示的なコンピューティングシステムを示す図である。
【発明を実施するための形態】
【0009】
詳細な説明
1.0 現行の画像信号プロセッサシステムの集積
図1aは、スマートフォンなどのモバイルコンピューティングシステムの典型的な設計100を示している。図1から見られるように、コンピューティングシステムは、多くのコンピューティングシステム基本要素を含む大規模システムオンチップ(SOC、アプリケーションプロセッサとも呼ばれる)101を含む。これらのコンピューティングシステム基本要素は、1つ以上の汎用処理コア102_1~102_N、メインメモリコントローラ103、ディスプレイインターフェイス104、周辺または「I/O」制御ハブ105、および内部ネットワーク106を含む。メインメモリコントローラ103は、メインメモリ107(システムメモリとも呼ばれる)とインターフェイスで接続する。ディスプレイインターフェイス104は、平板パネルタッチスクリーンなどのディスプレイ108上で表示される出力データを提供する。
【0010】
内部ネットワーク106は、例えば、アプリケーションプロセッサの様々なコンポーネント102~105の間にデータの引き渡しを提供する。例えば、内部ネットワーク106によって、処理コア102によって実行されるソフトウェア用のプログラムコード命令およびデータは、メインメモリコントローラ103を介して、メインメモリ107から処理コア102に渡される。同様に、ソフトウェアの実行によって作成されたデータは、メインメモリコントローラ103を介して、処理コア102からメインメモリ107に渡されてもよい。さらに、例えば、メインメモリコントローラ103は、ディスプレイ108に表示されるデータをメインメモリ107から読み出し、ディスプレイインターフェイス104に転送することができる。
【0011】
他の基本的なデータ移動は、周辺機器で生成または受信されたデータを、メインメモリ107に書き込むために周辺機器制御ハブ105を介してメインメモリコントローラ103に渡すこと、またはシステムソフトウェアによる処理のために処理コア102に渡すこと、またはディスプレイ108上で表示するためにディスプレイインターフェイス104に渡すことを含む。図1に示されていないが、1つ以上のネットワークインターフェイス(例えば、セルラーネットワークインターフェイス、無線ローカルエリアネットワークインターフェイス(例えば、WiFi(登録商標)インターフェイス)、または、ポイントツーポイントリンクインターフェイス(例えば、ブルートゥース(登録商標)インターフェイス))は、周辺制御ハブ105に結合することができる。これによって、コンピューティングシステムが接続されているネットワーク/リンクから受信したデータを上述したいずれかのデータフローに従ってルーティングすることができる。
【0012】
なお、周辺制御ハブ105は、必ずしも必要ではない。すなわち、一部または全ての周辺機器は、中継の周辺制御ハブを経由せず、ネットワーク106に結合されてもよい。説明を容易にするために、本説明の残りは、周辺制御ハブ105が存在すると仮定する。内部ネットワーク106は、様々なネットワークトポロジー(例えば、リング、クロスバースイッチ、マルチドロップバス)を有する1つ以上の相互接続ネットワークで構成されてもよい。
【0013】
図1aに示すように、アプリケーションプロセッサ101上の画像信号プロセッサ110_1および110_2に各々結合された一対のカメラ109_1および109_2は、システムの周辺機器またはI/O複合体の一部を構成する。例えば、第1のカメラ109_1は、スマートフォンの前面に位置する前面カメラであってもよく、第2のカメラ109_2は、スマートフォンの背面に位置する背面カメラであってもよい。カメラ109_1および109_2は、通常、赤(R)、緑(G)および青(B)ピクセルからなる「生」(RAW)の処理されていないまたは適度に処理されたラスター走査ストリームを生成する。また、より先進的なシステムにおいて、カメラは、赤外線ピクセルストリームおよび/または深度情報(例えば、飛行時間)ピクセルもしくは他の信号ストリームを提供することもできる。ストリームは、通常、個々の画像フレームを識別できるようにフォーマットされる。次に、未処理画像は、画像信号プロセッサ110_1および110_2によって処理される。
【0014】
画像信号プロセッサ110_1および110_2によって実行される典型的なプロセスは、オフセット補正、ノイズ低減、自動ホワイトバランス、デモザイク処理、シャープニング、レンズシェーディング補正および色補正を含む。他のプロセスは、例えば、画像のサイズを拡大または縮小するためのアップコンバージョンまたはダウンコンバージョンなどのさまざまなサイズ変更操作、または画像データのフットプリント/サイズを削減するための圧縮を含む。通常、画像信号プロセッサ110_1および110_2は、画像をJPEGまたはTIFF(静止画)またはMPEG(動画ストリーム)などの非RAW業界標準フォーマットに処理する。
【0015】
図1bは、コンピューティングシステム、例えば図1aのコンピューティングシステム内の典型的な画像データフローを示している。図1bから見られるように(および上述したように)、未処理画像データ114は、カメラ109によって生成され、アプリケーションプロセッサ101上の画像信号プロセッサ110に転送される。次に、画像信号プロセッサ110は、例えば、業界標準フォーマットの静止画像またはビデオストリームを生成する。
【0016】
また、画像信号プロセッサ110は、処理する画像の様々な統計値(例えば、任意/全ての入力ストリーム/画像および/または出力ストリーム/画像の平均ピクセル値、最大ピクセル値または最小ピクセル値)を生成する。画像および統計値の両方は、コンピューティングシステムの1つ以上のCPUコア102上で動作するカメラドライバソフトウェア111によって処理される。画像および統計値を処理した後、ドライバソフトウェアは、制御信号115を生成する。この制御信号115は、(例えば、画像信号プロセッサの自動ホワイトバランス、レンズシェーディング補正または色補正プロセスを制御するために)画像信号プロセッサ110に送信され、(例えば、カメラの自動焦点合わせ機構または自動露出設定を制御するために)カメラ109に送信される。
【0017】
通常、画像信号プロセッサ110からの画像は、処理コア102上で実行するアプリケーションソフトウェアプログラム112(例えば、カメラアプリケーションまたはビデオチャットアプリケーション)および/またはシステムのディスプレイにも送信される。なお、画像および統計値の両方は、通常、画像信号プロセッサによって生成された後、メインメモリ107に格納される。その後、画像および統計値は、さらなる処理/使用のためにCPUコア102上で実行するドライバ/アプリケーションによってメインメモリ107から読み出される、および/またはディスプレイ上で表示のためにメインメモリ107から読み出され、ディスプレイに送信される。
【0018】
再び図1aを参照して、画像プロセッサ110_1および110_2は、しばしば未処理の画像データのステンシルを処理する。当該技術分野で知られているように、ステンシルとは、基本的なデータ単位として使用される画像表面領域の(「ブロック」とも呼ばれる)一部分である。例えば、画像信号プロセッサ110_1によって作成されている出力画像内の特定の「出力」ピクセル位置の新しい値は、当該特定のピクセル位置を囲む未処理の入力画像データ領域内のピクセル値の平均値として計算されてもよい。例えば、ステンシルのサイズが3×3ピクセルである場合、特定の出力ピクセル位置は、未処理の入力画像データの3×3ピクセル配列の中間ピクセルに対応し、平均値は、3×3の未処理ピクセル配列内の全ての9ピクセルに対して計算することができる。場合によって、異なるステンシルサイズおよび/またはステンシルに対して異なる機能を実行することが望ましい。したがって、理想的には、画像プロセッサ110_1および110_2は、実行する機能に対して、ある程度のユーザ定義および/またはプログラム可能性を提供することができる。
【0019】
しかしながら、画像信号プロセッサ110_1および110_2は、ユーザ定義またはプログラム可能な動作の実行にまだ適していない。すなわち、幅広い応用可能性に亘って許容可能な画像処理の改善を行うために、画像信号プロセッサ110_1および110_2は、様々なステンシルサイズおよび撮影条件に対して様々な処理アルゴリズムを実行できるように容易に構成可能にする必要がある。特に電池によって駆動されている装置例えばスマートフォンの場合、アルゴリズムの実行は、より多くの電力ではなくより少ない電力を消費する必要がある。しかしながら、背景で説明したように、特にステンシルに対して処理を実行する場合、画像信号プロセッサ110_1および110_2は、ハードワイヤードASICのようなものになり、少ない電力を消費するが、汎用性が低くなる、または伝統的なプロセッサのようなものになり、汎用性が高くなるが、より多くの電力を消費する。
【0020】
図1cを参照して、さらに他のデータフローシナリオにおいて、アプリケーションプロセッサ101上の埋め込み型画像信号プロセッサ110は、画像処理の目的に大部分または完全にバイパスされ(使用されず)、主に統計値の生成116のみに使用される。この場合、カメラ109からの未処理画像データ114は、CPUコア102上で実行するプログラムコードによる後続処理のために、メインメモリに書き込まれる。CPUコア102上で実行するカメラドライバソフトウェア111は、未処理画像データから、例えば、自動ホワイトバランス、レンズ補正および色補正を制御するための制御信号117を生成する。例えば、埋め込み型画像信号プロセッサ109の代わりに、1つ以上のCPUコア102上で実行するオペレーティングシステム112内のより高いレベルのソフトウェア118は、未処理データに対して実際の画像処理を実行することによって、例えばJPEG/MPEG画像を生成する。例えば、高レベルソフトウェア118は、オフセット補正、ノイズ低減、自動ホワイトバランス、デモザイク処理、シャープニング、レンズシェーディング補正、色補正、トーンマッピングおよび時間-周波数変換(例えば、高速フーリエ変換を含むフーリエ変換)を実行する。
【0021】
この場合、埋め込み型画像信号プロセッサ109をバイパスする代わりに、CPUコア102上で画像処理を実行するという決定は、必要な処理能力およびより精巧または複雑な画像処理タスクを実行するために必要なメモリ容量の何らかの組み合わせによるものである。すなわち、CPU処理コア102は、通常、埋め込み型画像信号プロセッサ109よりも全体の処理能力、汎用性およびメモリ割り当てが高い。そのため、より複雑な画像処理技術は、埋め込み型画像信号プロセッサ109ではなく、CPUコア102上で実行される。
【0022】
このような精巧な画像処理技術の1つは、HDR+と呼ばれ、Google(登録商標)社(カリフォルニア州マウンテンビュー)が提供するAndroid(登録商標)オペレーティングシステムを有するシステムのコンポーネントである。この画像処理技術は、カメラ109からの画像フレームの実行ストリームを待ち行列(queue)に入れ、待ち行列内のフレームに対して特定の処理を実行する。例えば、待ち行列内のより多くの画像フレームを使用して画像の露出不足部分を撮影し、待ち行列内のより少ない画像フレームを使用して画像の露出過度部分を撮影する。異なる部分をブレンドすることによって、画像撮影プロセスの全体的なダイナミックレンジ(強い信号および弱い信号の両方を撮影する能力)を強化する。別の例として、画像および/またはカメラの動きによるブレを低減するために、HDR+は、待ち行列内の画像を各々分析することによって、最もブレのないベストショットを決定する。また、HDR+は、RGBをYUV、Y′UV、YCbCr、または人間の知覚を考慮した他の色空間形式にフォーマットする。しかしながら、上記で示唆したように、処理コア102などの従来の汎用プロセッサ上で複雑な処理を実行する場合、装置の消費電力が増加する。
【0023】
2.0 新しい画像プロセッサアーキテクチャ
当技術分野で知られているように、プログラムコードを実行するための基本的な回路構造は、実行ステージおよびレジスタ空間を含む。実行ステージは、命令を実行するための実行ユニットを含む。実行される命令の入力オペランドは、レジスタ空間から実行ステージに提供される。実行ステージにおいて命令を実行することによって生成された結果は、レジスタ空間に書き込まれる。
【0024】
従来のプロセッサ上でソフトウェアスレッドの実行は、実行ステージの全体に亘って一連の命令を順次に実行する必要がある。最も一般的には、単一の入力オペランドセットから単一の結果を生成するという意味において、これらの処理は「スカラー」である。「ベクトル」プロセッサの場合、実行ステージによる命令の実行は、入力オペランドセットのベクトルから、結果のベクトルを生成する。
【0025】
図2は、ハードウェアの2次元シフトレジスタアレイ202に結合されたハードウェアの実行レーンアレイ201を含む独特な画像プロセッサアーキテクチャ200の命令実行リソースおよびレジスタリソースを示す。図2のプロセッサアーキテクチャにおいて、実行レーンアレイ201内の各実行レーンは、プロセッサ200によってサポートされる命令セットの実行に必要な実行ユニットを含む個別の実行ステージとして見なすことができる。様々な実施形態において、各実行ステージは、同一のマシンサイクルに実行する同一の命令を受信する。したがって、プロセッサは、2次元の単一命令多重データ(SIMD)プロセッサとして動作する。
【0026】
また、各実行レーンは、2次元シフトレジスタアレイ202内の対応する位置に専用のレジスタ空間を有する。例えば、隅部の実行レーン203は、隅部のシフトレジスタ位置204に専用のレジスタ空間を有し、隅部の実行レーン205は、隅部のシフトレジスタ位置206に専用のレジスタ空間を有する。
【0027】
さらに、シフトレジスタアレイ202は、その内容をシフトすることができる。これによって、各実行レーンは、各自のレジスタ空間から、前回のマシンサイクル中に別の実行レーンのレジスタ空間に保持された値を直接に処理することができる。例えば、+1の水平シフトによって、各実行レーンのレジスタ空間は、左端に隣接するレジスタ空間から値を受け取る。水平軸に沿って左右の方向に且つ垂直軸に沿って上下の方向に値をシフトする能力によって、プロセッサは、画像データのステンシルを効率的に処理することができる。すなわち、従来のプロセッサは、ステンシルを処理するときに同一のデータ値を複数回に読み取る傾向があるため、電力消費を増加する。対照的に、図2のプロセッサアーキテクチャは、メモリから値を読み取ると、レジスタ空間に残っているうちに、何度も再利用するように構成されている。
【0028】
図1のプロセッサ200の様々な処理の実施形態によれば、実行レーンアレイ201の各実行レーンは、プロセッサが生成している出力画像内の特定の位置のピクセル値を計算するように機能する。したがって、上記の3×3ステンシルの平均化の例において、入力ピクセルデータの初期ロードおよびシフトレジスタアレイ202内の8つのシフト処理の協調シフトシーケンスの後、実行レーンアレイ201の各実行レーンは、対応するピクセル位置の平均値を計算するために必要な全ての9つのピクセル値を受信して、ローカルレジスタ空間に格納する。
【0029】
プロセッサは、プログラムコードを実行し、したがって広く構成可能/適応可能である。さらに、上記で示唆したように、画像データがメモリからレジスタ空間に呼び出され、その使用が殆ど(または完全に)なくなるまでレジスタ空間に保持されるため、プロセッサは、従来のプロセッサよりも著しく少ない電力を消費する。図2のプロセッサアーキテクチャは、2次元配列構造によって画像ステンシルを処理するように特別に構成されているため、ステンシルプロセッサとも呼ばれる。
【0030】
3.0 新しい画像プロセッサのシステム集積
図3は、上述した実行レーンアレイおよび2次元シフトレジスタを有する画像プロセッサ320を含む改良したコンピューティングシステムの設計を示す。図3から見られるように、画像プロセッサ320およびその周辺ロジック321は、カメラ309とアプリケーションプロセッサ301との間に挿入される。
【0031】
図示のように、画像プロセッサ320およびその周辺ロジック321は、個別の画像プロセッサチップ322として実装される。個別の画像プロセッサチップ322は、1つ以上のカメラ309から未処理の入力データを受信し、未処理のカメラデータ、処理済みカメラデータおよび/または関連する統計値のいずれかをアプリケーションプロセッサ301に提供する。破線の境界線323は、いくつかの実施形態において画像プロセッサ320およびその周辺ロジック321をアプリケーションプロセッサ301に集積することができることを示している。図示されていないが、他の実施形態において、画像プロセッサ320およびその周辺ロジック321は、カメラ309のうちの1つに集積されてもよい(他の「クライアント」カメラは、画像プロセッサを備えた「ホスト」カメラに未処理データを送信する)。したがって、画像プロセッサ320およびその周辺ロジック321は、一般的に画像プロセッサユニット322と呼ばれる。しかしながら、簡単化のために、以下の説明における実施形態において、画像プロセッサ320およびその周辺ロジック321は、個別の半導体チップ322として実装される。
【0032】
様々な構成において、画像プロセッサ320は、アプリケーションプロセッサ301および/またはアプリケーションプロセッサ301の汎用CPUコアに集積された従来の埋め込み型画像信号プロセッサ310に比べて、より低い電力消費、より高い処理性能および/またはより高い汎用性で、カメラ309によって生成された未処理画像データに対して画像処理タスクを実行することができる。なお、汎用処理コア302、メインメモリコントローラ330およびメインメモリ331は、コンピューティングシステム全体のホストシステムの主なコンポーネントとして見なすことができる。すなわち、コンピューティングシステム全体は、通常、汎用処理コア302および(メインメモリコントローラ330およびメインメモリ331を含む)メインメモリサブシステムを備えるホストシステムを含むと見なすことができ、ディスプレイ、画像プロセッサユニット322およびカメラ309などの他の周辺装置は、ホストシステムに結合しているコンポーネントである。
【0033】
図4a~4hは、画像プロセッサおよびその周辺ロジックのいくつかの可能な構成および使用を詳細に示している。説明を簡単にするために、画像プロセッサ420およびその周辺ロジック421は、画像プロセッサチップ422としてまとめて呼ばれる。しかしながら、留意すべきことは、画像プロセッサチップ422の回路をアプリケーションプロセッサ401に集積することができ、またはカメラ409のうちの1つに集積することができることである。
【0034】
また、図4a~4hは、3つのカメラ409_1、409_2および409_3を有するシステムを示している。この場合、システムは、例えば、スマートフォンに対応する。スマートフォンの片側には、1つのカメラ409_1が設けられ、スマートフォンの反対側には、(例えば、立体画像の撮影、広い視野の画像および狭い視野の画像の撮影、カラー画像およびモノクロ画像の撮影およびS/N比の改善を行うために)2つのカメラ409_2および409_3が設けられる。
【0035】
したがって、図4a~4hの実施形態において、画像プロセッサチップ422は、(例えば、3つの別個のMIPI入力として実装され得る)3つの入力431_1、431_2および431_3と、(例えば、2つの別個のMIPI出力として実装され得る)2つの出力432_1および432_2とを有し、例えば、アプリケーションプロセッサ401上の一対の埋め込み型画像信号プロセッサ410_1および410_2に入力ストリームを提供する。また、以下でさらに説明するように、画像プロセッサチップ432は、周辺I/Oインターフェイス433(例えば、PCIeインターフェイス)を含む。したがって、画像プロセッサチップ432は、例えばコプロセッサとして、1つ以上のアプリケーションプロセッサの汎用CPUコア402によって使用されてもよい。
【0036】
図4aから見られるように、画像プロセッサ420を使用しない第1のバイパスモードが示されている。この場合、画像プロセッサチップは、1つの入力431_1で1つのカメラ409_1から未処理データ451を受け取り、同一の未処理データ451を1つの出力432_1からアプリケーションプロセッサ401上の画像信号プロセッサ410_1に転送する。図4aの構成によって、システムは、例えば、図1bに関して上述した従来のシステム構成のいずれかに逆戻りすることができる。この場合、アプリケーションプロセッサ401およびソフトウェアドライバ411は、図1bに関して上述したように動作する。
【0037】
図4bは、複数の異なるバイパス構成をサポートする画像プロセッサチップの多様な能力を示している。図4bに示すように、画像プロセッサチップ422は、3:2マルチプレクサとして見なすことができる。この3:2マルチプレクサは、チップの3つのMIPI入力431_1、431_2および431_3のいずれかに提供された未処理のカメラデータをチップの2つの出力432_1および432_2のいずれかにルーティングすることができる。なお、この画像プロセッサチップは、入力431_1、431_2および431_3のうちの1つで受信した単一の入力画像を出力432_1および432_2の2つに(および図4bに明示的に示されていない周辺インターフェイス433に)同時にルーティングするブロードキャスト構成を含む。図4bは、入力431_1、431_2および431_3でそれぞれ受信した2つ以上の入力画像を2つ以上の出力432_1、432_2および433にそれぞれルーティングする(例えば、入力431_1で受信した第1の入力画像ストリームを出力432_1にルーティングし、同時に入力431_2で受信した第2の入力画像ストリームを出力432_2にルーティングする)並列配置を含むように解釈することもできる。
【0038】
図4cから見られるように、図4aおよび4bのバイパスモードとは異なり、画像プロセッサ420は、未処理の画像ストリームからの画像を処理するために使用され、一方、アプリケーションプロセッサ401上の画像信号プロセッサ410_2は、画像の統計値を処理するために使用される。この場合、カメラ409_2からの未処理画像データは、画像プロセッサチップ422内の(画像処理のために)画像プロセッサ420に送られ、アプリケーションプロセッサ401による受信のために出力432_2に送られる。図4cの構成において、画像プロセッサ420は、画像信号プロセッサの画像処理アルゴリズム(オフセット補正、ノイズ低減、自動ホワイトバランス、デモザイク処理、シャープニング、レンズシェーディング補正、色補正、トーンマッピングおよび時間-周波数変換(例えば、高速フーリエ変換を含むフーリエ変換))を効果的に実行して、例えば、JPEGもしくはTIFF静止画像またはMPEGビデオ画像を画像プロセッサチップの周辺インターフェイス433に提供する。
【0039】
図4cの特定の実施形態において、処理画像がアプリケーションプロセッサの埋め込み型画像信号プロセッサ410_1および410_2の「前」に生成されるため、画像プロセッサチップ422は、処理画像を周辺インターフェイス433からアプリケーションプロセッサに送信する。アプリケーションプロセッサ401は、1つの標準周辺インターフェイス、例えばPCIeインターフェイス434を介して、処理画像を受信する。カメラドライバソフトウェア411は、統計値および画像を処理する。図4cには示されていないが、カメラドライバソフトウェア411は、受信した画像および統計値に対して実行した処理に基づいて、カメラおよび画像プロセッサ420に制御信号を送信する。
【0040】
図4dは、同一のシステム上で同時に動作するように、図4aのバイパスモードと図4cの画像プロセッサ構成とを組み合わせた別の構成を示している。この場合、図4aのバイパスモードは、例えば、第1のカメラ409_1に使用されてもよく、別個の画像プロセッサは、第2のカメラ409_2または(例えば、立体画像処理を実現するための)第2のカメラ409_2および第3のカメラ409_3からの画像を処理するために使用されてもよい。
【0041】
この場合、アプリケーションプロセッサ401上の1つの画像信号プロセッサ410_1は、第1のカメラ409_1の画像および統計値の両方を処理するが、アプリケーションプロセッサ401上の第2の埋め込み型画像信号プロセッサ410_2は、第2のカメラ409_2の統計値または第2のカメラ409_1および第3のカメラ409_2の統計値のみを処理する。したがって、第1のカメラの未処理データは、画像プロセッサチップ422の第1の出力432_1から送られ、第2(または第2および第3)のカメラの未処理データは、画像プロセッサチップ422の第2の出力432_2から送られる。
【0042】
図4dの構成において、第1のカメラ409_1のドライバソフトウェア411_1は、第1のカメラと、第1のカメラの画像および統計値を処理するための埋め込み型画像信号プロセッサ410_1とに制御信号を送信する。同時に、第2のカメラ409_2(または第2のカメラ409_2および第3のカメラ409_3)のドライバソフトウェア411_2は、第2のカメラ409_2(または第2のカメラ409_2および第3のカメラ409_3)と、画像プロセッサチップ422上の画像プロセッサ420とに制御信号を送信する。
【0043】
図4eから見られるように、個別の画像プロセッサは、画像の処理および統計値の生成に使用される。この場合、処理画像および統計値の両方は、出力432_1および432_2のいずれかではなく、周辺インターフェイス433/434(例えばPCIe)を介してアプリケーションプロセッサに転送することができる。図4eの構成において、カメラドライバは、画像プロセッサ420から受信した処理画像および統計値に基づいて、カメラおよび画像プロセッサ420に制御信号を送信する。図示されていないが、図4eの構成は、例えば、図4aのバイパス構成と同時に組み合わせることができる。これによって、アプリケーションプロセッサ401の埋め込み型画像信号プロセッサ410_1または410_2を用いて、第1のカメラ409_1からの画像および統計値を処理すると共に、個別の画像プロセッサを用いて、第2のカメラ409_2(または第2のカメラ409_2および第3のカメラ409_3)からの画像および統計値を処理することができる。
【0044】
上記で示唆したように、画像プロセッサチップ422上の画像プロセッサ420を用いてカメラからの未処理画像を処理するための任意の構成は、画像プロセッサの低能力2次元アレイアーキテクチャを活用して、画像データのステンシルを処理することができる。例示として、ステンシルを処理することによって、個別の画像プロセッサ上で、例えば、オフセット補正、ノイズ低減、自動ホワイトバランス、デモザイク処理、シャープニング、レンズシェーディング補正、色補正、トーンマッピング、時間-周波数変換(例えば、高速フーリエ変換を含むフーリエ変換)のいずれかを実行することができる。
【0045】
また、画像プロセッサ420上で上述したHDR+などのより複雑な画像処理アルゴリズムを実行する場合に、アプリケーションプロセッサ401の1つ以上の汎用CPUコア402上でこれらのアルゴリズムを実行する場合に比べて、著しく少ない電力を消費しながら、アルゴリズムを実施することができる。例えば、HDR+モードをサポートするために、画像の連続ストリームを、画像プロセッサチップのローカルメモリ(図示を簡単にするために、図4a~4gに示されていない)の処理行列に入れることができる。次に、画像プロセッサ420は、画像を整列し、より多くの露出不足部分をより少ない過度露出部分と合併することによって、高ダイナミックレンジの画像処理チャネルをもたらすことができる。さらに、画像プロセッサ420は、ローカルメモリ内の待ち行列内の多数の画像を分析することによって、カメラまたは撮影される対象物の動きによる最小限のブレを有する最良の静止画を決定することができる。画像プロセッサは、RGB形式の未処理データをYUV、Y′UV、YCbCr、または人間の知覚を考慮した他の色空間形式に変換することもできる。
【0046】
追加の複雑な画像処理タスクは、例えば、2つのカメラからの画像データを処理することによって、例えば、立体画像の撮影、広い視野の画像および狭い視野の画像の撮影、カラー画像およびモノクロ画像の撮影およびS/N比の改善を実現するデュアルカメラ融合(dual camera fusion)を含む。より複雑な画像処理タスクは、ニューラルネットワーク(例えば、畳み込みニューラルネットワーク、深層ニューラルネットワーク、リカレントニューラルネットワークまたは長短期記憶ネットワーク)を実行することによって、例えば、顔検出、顔認識、製品認識(特定の市販製品の認識)、シーン認識および/または言語翻訳などの機械学習機能を実現することを含む。さらに、少なくとも図4eの構成に関して、画像プロセッサ420は、配列されたハードウェアアーキテクチャを有するため、大量の電力を消費することなく統計値を計算することができる。
【0047】
特に図4eには示されていないが、様々な構成において、画像プロセッサ420によって生成された処理画像は、インターフェイス433ではなく、出力432_1および432_2のいずれかまたは両方に送られる。画像信号プロセッサ410_1および410_2は、処理画像をさらに処理するまたはバイパスすることができる。後者の場合、出力432_1および432_2から受信した処理画像は、例えば、システム/メインメモリにまたはディスプレイに直接に転送されてもよい。
【0048】
図4fは、画像プロセッサ420が未処理の入力情報を処理し、プロセッサの出力432_2に送信される未処理の出力情報または処理画像を出力する別の構成を示している。図4fの構成において、例えば、画像プロセッサチップ422上の画像プロセッサ420を用いていくつかの画像信号処理タスクを実行すると共に、アプリケーションプロセッサ上の埋め込み型画像信号プロセッサ410_2を用いて他の画像信号処理タスクを実行するまたは画像信号プロセッサ410_2をバイパスする。
【0049】
図4gは、さらに別の構成を示す。この構成において、個別の画像処理チップは、埋め込み型汎用プロセッサ435を備える。これによって、少なくとも1つのカメラ409_1、409_2および409_3のファームウェア/ドライバソフトウェア436は、アプリケーションプロセッサ401の汎用CPUコア402の上ではなく、画像プロセッサチップ422上で直接実行することができる。図4gは、画像プロセッサ420を用いて画像を処理するだけでなく統計値を生成するという図4eの画像プロセッサチップ構成を含む。埋め込み型プロセッサ435は、(例えば、直接にまたは画像プロセッサチップのローカルメモリを介して)画像プロセッサ420によって生成された画像および統計値の両方にアクセスすることができる。したがって、埋め込み型プロセッサ435上で実行するファームウェア/ドライバソフトウェア436は、画像プロセッサチップから、画像プロセッサおよび1つ以上のカメラの両方の制御信号をローカルに生成することができる。再び、画像プロセッサによって生成された処理画像および/または統計値は、出力410_1および410_2のいずれかまたは両方に送られてもよい。
【0050】
なお、図4gの手法は、例えば、図4aの手法と組み合わせることができる。これによって、例えば、1つ以上のカメラの画像、統計値および制御情報は、画像プロセッサチップ422上でローカルに生成され(図4g)、別のカメラの画像、統計値および制御情報は、アプリケーションプロセッサ401上の画像信号プロセッサ410_1および410_2のうちの1つによって生成される。
【0051】
実際には、図4a~4gを参照して上記で説明した特定のカメラまたは1対のカメラののデータフローを互いに組み合わせることによって、無数のシステムおよび画像プロセッサチップの可能な構成をもたらすことができる。すなわち、図4a~4gを参照して上記で図示または説明した特定のカメラ(または1対のカメラ)のデータフローは、第1のカメラ(または1対のカメラ)に使用することができる。構成されたデータフローは、図4a~4gを参照して上記で説明した特定のカメラ(または1対のカメラ)のデータフローと組み合わせて、別の異なるカメラ(または1対のカメラ)に使用することができる。これは、同一のデータフロー構成の複数のインスタンスを含む(例えば、図4gの構成は、2つの異なるカメラの各々のために一回ずつ、2回にインスタンス化することができる)。したがって、強調すべきことは、図4a~4gは、全ての可能な構成のうち、限られた一部のみを示していることである。
【0052】
図4hは、画像プロセッサ420をアプリケーションプロセッサ401の1つ以上のCPUコア402のコプロセッサとして使用する別の構成を示す。図4hの構成において、カメラから未処理画像を受信してその場で未加工データを処理するの代わりに、入力データは、例えば、アプリケーションプロセッサ401のいずれか/全ての汎用CPUコア402上で実行するアプリケーションソフトウェア412によって作成される。この場合、アプリケーションプロセッサ401の汎用処理コアおよびメインメモリサブシステムは、より一般的に、画像プロセッサの共同処理機能を呼び出すホストシステムと見なすことができる。アプリケーションソフトウェア412が作業中のデータをさらに処理するために非常に効率的な画像処理エンジンを必要とするときに、アプリケーションソフトウェア412は、画像プロセッサ420を呼び出してデータを処理する。
【0053】
したがって、画像プロセッサ420によって処理されている入力データは、例えば、コンピューティングシステムのメインメモリ407から、画像プロセッサのローカルメモリ(図4hには示されていない)に送られる。また、アプリケーションソフトウェア412は、実行される特定のアルゴリズム(例えば、前述した機械学習プロセスのいずれかを実施するための畳み込みニューラルネットワークアルゴリズム)を記述する1つ以上のコマンドを画像プロセッサ420に送信する。次に、画像プロセッサ420は、入力データに対して特定のアルゴリズムを実行することによって、結果の出力データを生成する。この出力データは、メインメモリ407に転送される前に画像プロセッサチップのローカルメモリに格納されてもよい(または出力データは、メインメモリ407に直接転送されてもよい)。画像プロセッサ420によって生成された結果の出力データがメインメモリ407に格納されると、アプリケーションソフトウェア412は、プログラムの実行を継続し、結果の出力データを処理することができる。なお、個別の画像プロセッサとCPUコアとの間のデータおよびコマンドの通信は、周辺インターフェイス433/434を介して行われてもよい。
【0054】
なお、図4hのコプロセッサ構成は、図4a~4gを参照して上記で説明した様々なカメラの1つ以上のデータフローと組み合わせることができる。これによって、画像プロセッサチップ422は、未処理カメラ画像の処理および共同処理を同時にサポートすることができる。
【0055】
図5は、画像プロセッサチップ522およびそのローカルメモリ540の実施形態を示す。図5から見られるように、チップ522は、画像プロセッサ520を含み、画像プロセッサ520は、例えば、図2を参照して上述したように、各々が実行レーンアレイおよび2次元シフトレジスタアレイを含む複数のステンシルプロセッサを備える。チップ522内の周辺回路は、図4a~4hを参照して上述した様々な構成をサポートする。
【0056】
この場合、画像プロセッサチップは、例えば、3つの異なるカメラからRGBストリームを同時に受信するための3つの未処理カメラ画像入力531_1、531_2および531_3を含む。また、3つの入力の各々は、一対の出力マルチプレクサ537_1、537_2およびメモリコントローラ538にルーティングされる。したがって、3つの入力531_1、531_2および531_3のいずれかは、画像プロセッサ520に直接供給されることに加えて、(例えば、バイパスモード時に)出力532_1、532_2に直接転送することができ、または(例えば、画像フレームを待ち行列に入れるために)ローカルメモリ540に直接転送することができる。メモリコントローラ538は、入力531_1、531_2または531_3、画像プロセッサ520、または周辺機器インターフェイス533のいずれかから、ローカルメモリ540に対するアクセス要求を調停する。上述したように、(例えば、コプロセッサモードの場合)処理済みの出力データをアプリケーションプロセッサに送信するおよび/またはアプリケーションプロセッサから入力データまたはコマンドを受信するために使用される周辺機器インターフェイス533は、画像プロセッサ520およびメモリコントローラ538の両方に接続され、アプリケーションプロセッサと、画像プロセッサ520および/またはローカルメモリ540との間の直接通信をサポートする。また、メモリコントローラ538は、1対の出力ポート532_1および532_2に接続され、ローカルメモリ540から出力ポート532_1および532_2のいずれかに情報を転送することもできる。
【0057】
また、画像プロセッサチップ522は、埋め込み型(例えば、汎用)プロセッサ535を含む。様々な実施形態において、埋め込み型プロセッサ535は、例えば、アプリケーションプロセッサ上で実行しているシステム構成ファームウェア/ソフトウェアによって設定された画像プロセッサチップ522の構成レジスタ空間に応じて、画像プロセッサチップ522の内部設定を管理する(例えば、図4a~4hの画像プロセッサユニットのいずれかの構成または画像プロセッサユニットの他の構成をもたらす)。図4hを参照して上述したように、埋め込み型プロセッサ535は、画像プロセッサ520および/またはカメラのファームウェア/ドライバソフトウェアを実行することによって、これらのタスクをアプリケーションプロセッサの汎用CPUコアからオフロードすることができる。
【0058】
なお、各々の出力ポート532_1、532_2および周辺インターフェイス533は、画像プロセッサチップ522の出力を含むと見なされてもよい。上述のように、一実施形態において、出力ポート532_1および532_2は、MIPIインターフェイスとして実装され、周辺インターフェイス533は、PCIeインターフェイスとして実装される。通常、MIPIインターフェイスは、主に一方向のトラフィックフローをサポートする低レベルの物理層インターフェイス(単方向インターフェイス)であり、一方、PCIeインターフェイスは、高レベルの機能(例えば、データリンクおよびトランザクション層)を含み、2方向(双方向)のトラフィックフローを容易にサポートする。それにもかかわらず、各々の出力ポート532_1、532_2および周辺インターフェイス533は、画像プロセッサチップ522から情報を送信することができるため、画像プロセッサチップ522の出力を含むものとして特徴付けることができる。
【0059】
なお、様々な構成において、同一の出力を介して、異なる出力ストリームを多重化すること(例えば、周辺インターフェイス533を介して、異なる出力ストリームを転送すること)ができる。さらに、様々な構成において、複数の出力から同一の出力ストリームをブロードキャストできる(例えば、入力531_1、531_2および531_3の1つから受信した単一の出力ストリームは、複数の出力532_1、532_2および533から送信することができる)。同様に、さらに別の可能な構成において、(例えば、1つの入力から受信した)同一の入力ストリームを出力ポートと画像プロセッサ520および/またはメモリインターフェイス538の両方に直接送信することができる。さらに、上述したように、異なる入力から各々受信した2つ以上の異なる入力ストリームを2つ以上の異なる出力に同時にルーティングすることができる(例えば、入力531_1から受信した入力ストリームを出力532_1にルーティングすると共に、入力531_2から受信した入力ストリームを出力532_2にルーティングする)。
【0060】
さらに、異なる入力から各々受信した2つ以上の異なる入力画像ストリームは、直接におよび/または間接的に(メモリインターフェイス538およびメモリ540を介して)画像プロセッサ520にルーティングすることができる。画像プロセッサ520は、例えば、2つの入力画像ストリームを処理することによって、2つの異なる処理済み出力画像ストリームをそれぞれ生成し、2つの異なる出力(例えば、出力532_1および出力532_2)にそれぞれ送信することができる。代替的に、画像プロセッサ520は、例えば、複数の入力画像ストリームを処理することによって、単一の出力画像ストリームを生成し、1つ以上の異なる出力にルーティングすることができる。さらに、入力531_1、531_2および531_3の1つから単一の入力画像ストリームを受信し、直接にまたは間接的に画像プロセッサ520にルーティングすることができる。その後、画像プロセッサは、入力画像ストリームを処理することによって、複数の処理済みの出力画像ストリームを生成することができる。次いで、複数の処理済みの出力画像ストリームは、画像処理チップ522の異なる出力(例えば、出力532_1および532_2)にそれぞれルーティングすることができる。
【0061】
図面において、線545_1および545_2の間の回路は、画像プロセッサチップ522が上述した様々な/異なる構成および関連する内部データフローをサポートできるようにするための画像プロセッサチップ522の内部ネットワークとして見なすことができる。様々な実施形態において、埋め込み型プロセッサ535を介して適切なネットワーク構成パラメータを設定することによって、ネットワークの特定のルーティングスキームを構成することができる。図示を簡単にするために、図5に示されていないが、ネットワークは、入力531_1、531_2および531_3のいずれかと周辺インターフェイス533との間のルーティング経路を含むことができる。これによって、周辺インターフェイス533は、例えば、入力531_1、531_2および531_3のいずれかから受信した入力画像ストリームのバイパス構成の出力として使用することができる。
【0062】
様々な実施形態において、画像プロセッサによって実行されるプログラムコードは、不揮発性記憶装置(例えば、不揮発性メモリ装置、ハードディスクドライブ)に格納されてもよい。不揮発性記憶装置は、ホストシステムのメイン不揮発性記憶装置、または、例えば画像プロセッサユニットに主に関連している不揮発性記憶要素である。起動時および/または実行時の必要に応じて、プログラムコードは、例えば、不揮発性記憶装置から画像プロセッサが実行するメモリ(例えば、メモリ540)にロードされる。不揮発性メモリは、画像プロセッサユニットの内部または外部に結合されてもよい。
【0063】
図6は、上述の画像プロセッサユニットを動作させる方法を示す。この方法は、第1の入力画像を画像プロセッサユニットの第1の出力にルーティングするステップ601を含む。この方法は、第2の入力画像を、実行レーンアレイおよび2次元シフトレジスタアレイを含む画像プロセッサにルーティングするステップ602を含み、画像プロセッサは、実行レーンアレイおよび2次元シフトレジスタアレイを含む。この方法は、画像プロセッサ上で画像信号処理プログラムコードを実行することによって、処理画像を生成するステップ603を含み、プログラムコードの実行により、2次元シフトレジスタアレイは、実行レーンアレイによって実行されている画像信号演算処理の間にデータをシフトする。方法は、処理画像を画像プロセッサユニットの第2の出力にルーティングするステップ604を含む。
【0064】
4.0 画像プロセッサおよびステンシルプロセッサの実施形態
図7は、画像プロセッサのハードウェアアーキテクチャ700の実施形態を示す。画像プロセッサは、例えば、模擬環境内で仮想プロセッサ用に書かれたプログラムコードを、ハードウェアプロセッサによって実際に実行されるプログラムコードに変換するためのコンパイラの対象とされてもよい。図7に示すように、アーキテクチャ700は、複数のラインバッファユニット701_1~701_Mを含み、これらのラインバッファユニットは、ネットワーク704(例えば、オンチップスイッチネットワーク、オンチップリングネットワークまたは他の種類のネットワークを含むネットワークオンチップ(NOC))を介して、複数のステンシルプロセッサユニット702_1~702_Nおよび対応するシート生成部ユニット703_1~703_Nに相互接続される。一実施形態において、任意のラインバッファユニットは、ネットワーク704を介して、任意のシート生成部および対応するステンシルプロセッサに接続することができる。
【0065】
一実施形態において、プログラムコードは、コンパイルされ、対応するステンシルプロセッサ702にロードされ、ソフトウェア開発者によって以前に定義された画像処理動作を実行する(プログラムコードは、例えば、設計および実装に応じて、ステンシルプロセッサに関連するシート生成部703にロードされてもよい)。少なくともいくつかの例において、第1のパイプラインステージ用の第1のカーネルプログラムを第1のステンシルプロセッサ702_1にロードし、第2のパイプラインステージ用の第2のカーネルプログラムを第2のステンシルプロセッサ702_2にロードすることによって、画像処理パイプラインを実現することができる。第1のカーネルは、パイプラインの第1ステージの機能を実行し、第2のカーネルは、パイプラインの第2ステージの機能を実行する。追加の制御フロー方法をインストールして、出力画像データをパイプラインの1つのステージからの次のステージに渡す。したがって、例えば、オフセット補正ステージ、ノイズ低減ステージ、自動ホワイトバランスステージ、デモザイク処理ステージ、シャープニングステージ、レンズシェーディング補正ステージ、色補正ステージ、トーンマッピングステージおよび時間-周波数変換ステージを有するように、画像処理パイプラインを容易に構築することができる。
【0066】
他の構成において、画像プロセッサは、同様のカーネルプログラムコードを動作させる2つ以上のステンシルプロセッサ702_1および702_2を備える並列マシンとして実現されてもよい。例えば、各々が同様の機能を実行する複数のステンシルプロセッサにフレームを分散することによって、高密度且つ高データレートの画像データストリームを処理することができる。
【0067】
さらに他の構成において、独自のプログラムコードのカーネルを有するように各々のステンシルプロセッサを構成し、出力画像をDAG設計における1つのカーネルから次のカーネルの入力に転送するように適切な制御フローフックをハードウェアに構成することによって、本質的に任意カーネルのDAGをハードウェアプロセッサにロードすることができる。
【0068】
一般的な流れとして、画像データのフレームは、マクロI/Oユニット705によって受信され、フレームごとに1つ以上のラインバッファユニット701に渡される。特定のラインバッファユニットは、画像データのフレームを「ライングループ」と呼ばれる画像データのより小さな領域に解析し、ネットワーク704を介してライングループを特定のシート生成部に渡す。単一の完全なまたは「フル」ライングループは、例えば、フレームの複数の連続した完全な行(row)または列(column)のデータで構成することができる(簡単化のために、本明細書では主に連続した行と称する)。シート生成部は、画像データのライングループを「シート」と呼ばれる画像データのより小さな領域にさらに解析し、そのシートを対応するステンシルプロセッサに提供する。
【0069】
単一の入力を有する画像処理パイプラインまたはDAGフローの場合、一般に、入力フレームは、同一のラインバッファユニット701_1に転送され、ラインバッファユニット701_1は、画像データをライングループに解析し、これらのライングループをシート生成部703_1(シート生成部703_1に対応するステンシルプロセッサ702_1がパイプライン/DAG内の第1のカーネルのコードを実行している)に転送する。ライングループに対するステンシルプロセッサ702_1の処理が完了すると、シート生成部703_1は、出力ライングループを「下流」のラインバッファユニット701_2に送信する(一部の使用例において、出力ライングループは、以前にライングループを送信した同様のラインバッファユニット701_1に送信されてもよい)。
【0070】
その後、他のシート生成部およびステンシルプロセッサ(例えば、シート生成部703_2およびステンシルプロセッサ702_2)上でそれぞれ実行するパイプライン/DAGの次のステージ/動作を表す1つ以上の「消費側」カーネルは、下流ラインバッファユニット701_2から、第1のステンシルプロセッサ702_1によって生成された画像データを受信する。このようにして、第1のステンシルプロセッサ上で動作する「作成側」カーネルは、出力データを、第2のステンシルプロセッサ上で動作する「消費側」カーネルに転送し、消費側カーネルは、パイプラインまたはDAG全体の設計と整合する作成側カーネルの後に次のタスクセットを実行する。
【0071】
ステンシルプロセッサ702は、画像データの複数の重なり合うステンシルを同時に処理するように設計されている。複数の重なり合うステンシルおよびステンシルプロセッサ内部ハードウェアの処理能力は、事実上、シートのサイズを決定する。この場合、ステンシルプロセッサ702において、実行レーンのアレイは、同時に動作して、複数の重なり合うステンシルによって覆われた画像データの表面領域を同時に処理する。
【0072】
以下でより詳細に説明するように、様々な実施形態において、画像データのシートは、ステンシルプロセッサ702内の2次元レジスタアレイ構造にロードされる。シートおよび2次元レジスタアレイ構造を使用することによって、例えば単一のロード動作で大量のデータを大量のレジスタ空間にロードした直後、実行レーンアレイを用いてデータに対して処理タスクを直接に実行することによって、電力消費を効果的に改善すると考えられている。さらに、実行レーンアレイおよび対応するレジスタアレイを使用することによって、容易にプログラム可能/設定可能な異なるステンシルサイズを提供する。
【0073】
図8a~8eは、ラインバッファユニット701の解析動作およびシート生成部ユニット703のより細かい解析動作並びにシート生成部703に結合されるステンシルプロセッサ702のステンシル処理動作の両方の高レベルの実施形態を示す。
【0074】
図8aは、画像データ801の入力フレームの実施形態を示す。また、図8aは、ステンシルプロセッサに処理されるように設計された3つの重なり合うステンシル802(各ステンシルは、3ピクセル×3ピクセルの寸法を有する)の概要を示す。各ステンシルが出力画像データを各々生成するための出力ピクセルは、濃い黒色で強調表示されている。簡単化のために、3つの重なり合うステンシル802は、垂直方向にのみ重なり合うように示されている。実際には、ステンシルプロセッサは、垂直方向および水平方向の両方に重なるステンシルを有するように設計されてもよいことを認識することが適切である。
【0075】
図8aから見られるように、ステンシル802がステンシルプロセッサ内で垂直に重なり合うため、単一のステンシルプロセッサが処理することができるフレーム内に広い帯域の画像データが存在する。以下でより詳細に説明するように、一実施形態において、ステンシルプロセッサは、画像データの左から右への態様で、重なり合うステンシル内のデータを処理する(上から下の順序で次のラインセットの処理を繰り返す)。したがって、ステンシルプロセッサが処理を進めるにつれて、濃い黒色の出力ピクセルブロックの数は、水平方向に沿って右側に増加する。上述したように、ラインバッファユニット701は、ステンシルプロセッサが今後多数のサイクルにわたって処理するのに十分である入力フレームからの入力画像データのライングループを解析するように機能する。ライングループの例示的な図示は、陰影領域803として示されている。一実施形態において、ラインバッファユニット701は、シート生成部との間でライングループを送受信するための異なるダイナミクスを含むことができる。例えば、「完全なグループ」と呼ばれる1つのモードにおいて、画像データの全幅のラインは、ラインバッファーユニットとシート生成部との間に渡される。「事実上大量」と呼ばれる第2のモードにおいて、最初に、ライングループの全幅行(row)のサブセットが渡され、その後、残りの行(row)が、より小さい(全幅未満の)断片で順番に渡される。
【0076】
入力画像データのライングループ803がラインバッファユニットによって画定され、シート生成部ユニットに渡されると、シート生成部ユニットは、ステンシルプロセッサのハードウェア制限により正確に適合するように、ライングループをより細かいシートにさらに解析する。より具体的には、以下でより詳細に説明するように、一実施形態において、各ステンシルプロセッサは、2次元シフトレジスタアレイを含む。2次元シフトレジスタアレイは、基本的に、画像データを実行レーンアレイの「下方」にシフトする。このようなシフトパターンによって、各実行レーンは、それ自身のステンシル内のデータを処理する(すなわち、各実行レーンは、それ自身のステンシルの情報を処理することによってそのステンシルの出力を生成する)。一実施形態において、シートは、2次元シフトレジスタアレイに「入力」されるまたはロードされる入力画像データの表面領域である。
【0077】
以下でより詳細に説明するように、様々な実施形態において、実際には、任意のサイクルにおいて、2次元レジスタデータの複数の層をシフトすることができる。便宜上、本説明の多くは、単に「2次元シフトレジスタ」などの用語を用いて、シフト可能な2次元レジスタデータの1つ以上層を有する構造を指す。
【0078】
したがって、図8bから見られるように、シート生成部は、まず、ライングループ803のシート804を解析し、それをステンシルプロセッサに提供する(この図において、データシートは、一般的に参照番号804によって示された陰影領域に対応する)。図8cおよび8dから見られるように、ステンシルプロセッサは、事実上、重なり合うステンシル802をシート上で左から右に移動することによって、入力画像データのシートを処理する。図8dに示すように、シート内のデータから出力値を計算できるピクセルの数は、使い果たされている(他のピクセル位置はシート内の情報から決定される出力値を有することができない)。簡単化のために、画像の境界領域は、無視される。
【0079】
図8eから見られるように、シート生成部は、次いで、ステンシルプロセッサが継続して処理する次のシート805を提供する。なお、次のシートの処理を開始するときのステンシルの初期位置は、(上記の図8dに示すように)第1のシートの消耗点から右への次の数列である。ステンシルプロセッサが第1のシートに対する処理と同様に新たなシートを処理することにつれて、ステンシルは、新たなシート805で右に移動し続ける。
【0080】
なお、出力ピクセル位置を囲むステンシルの境界領域により、第1のシート804のデータと第2のシート805のデータとの間にある程度の重複がある。シート生成部は、重複データを2回再送信することによって、この重複を簡単に処理することができる。別の実現例において、次のシートをステンシルプロセッサに供給するために、シート生成部は、ステンシルプロセッサに新たなデータのみを送信し、ステンシルプロセッサは、前のシートから重複データを再利用する。
【0081】
図9は、ステンシルプロセッサアーキテクチャ900の実施形態を示している。図9から見られるように、ステンシルプロセッサは、データ計算ユニット901、スカラープロセッサ902、関連メモリ903、およびI/Oユニット904を含む。データ計算ユニット901は、実行レーンアレイ905、2次元シフトアレイ構造906、およびアレイの特定の行(row)または列(column)に関連する別個のランダムアクセスメモリ907を含む。
【0082】
I/Oユニット904は、シート生成部から受信したデータの「入力」シートをデータ計算ユニット901にロードし、ステンシルプロセッサからのデータの「出力」シートをシート生成部に格納するように機能する。一実施形態において、データ計算ユニット901へのシートデータのロードは、受信したシートを画像データの行/列に解析し、画像データの行/列を2次元シフトレジスタ構造906または実行レーンアレイの行/列に対応するランダムアクセスメモリ907にロードする必要がある(以下で詳しく説明する)。最初にシートをメモリ907にロードした場合、実行レーンアレイ905内の個々の実行レーンは、(例えば、シートのデータを処理する前のロード命令に従って)シートデータをランダムアクセスメモリ907から2次元シフトレジスタ構造906に適切にロードすることができる。(シート生成部から直接にまたはメモリ907から)レジスタ構造906へのデータシートのロードが完了すると、実行レーンアレイ905の実行レーンは、データを処理し、最終的に完成したデータをシートとしてシート生成部にまたはランダムアクセスメモリ907に直接に「書き戻す」。データをランダムアクセスメモリ907に「書き戻す」場合、I/Oユニット904は、ランダムアクセスメモリ907からデータを取り出して出力シートを形成し、シート生成部に転送する。
【0083】
スカラープロセッサ902は、スカラーメモリ903からステンシルプロセッサのプログラムコードの命令を読み出し、その命令を実行レーンアレイ905内の実行レーンに発行するためのプログラムコントローラ909を含む。一実施形態において、データ計算ユニット901からSIMDのような動作をもたらすために、同様の単一命令は、実行レーンアレイ905内の全ての実行レーンにブロードキャストされる。一実施形態において、スカラーメモリ903から読み出され、実行レーンアレイ905内の実行レーンに発行された命令の命令フォーマットは、命令ごとに2つ以上のオペコードを含む非常に長い命令語(VLIW)タイプのフォーマットを含む。さらなる実施形態において、VLIWフォーマットは、(以下に説明するように、一実施形態では2つ以上の従来のALU演算を指定することができる)各実行レーンのALUによって実行される数学関数を指定するALUオペコードと、(特定の実行レーンまたは実行レーンセットに対する記憶操作を指定する)記憶オペコードとの両方を含む。
【0084】
「実行レーン」という用語は、命令を実行することができる1つ以上の実行ユニットのセット(例えば、命令を実行することができる論理回路)を指す。しかしながら、様々な実施形態において、実行レーンは、単なる実行ユニットを超えて、プロセッサのような機能性を含むことができる。例えば、実行レーンは、1つ以上の実行ユニットに加えて、受信した命令をデコードする論理回路、またはMIMDに非常に類似する設計の場合、命令をフェッチおよびデコードする論理回路を含むことができる。MIMDのようなアプローチに関して、本明細書では主に集中プログラム制御アプローチを説明してきたが、様々な代替実施形態において、(例えば、各実行レーンアレイ905がプログラムコードおよびプログラムコントローラを含む)より分散型アプローチを実装することもできる。
【0085】
実行レーンアレイ905、プログラムコントローラ909および2次元シフトレジスタ構造906の組み合わせは、広範囲のプログラム可能な機能のために、幅広く適応可能/構成可能なハードウェアプラットフォームを提供する。例えば、アプリケーションソフトウェア開発者は、個々の実行レーンが多種多様な機能を実行することができ且つ任意の出力アレイ位置に近接する入力画像データに容易にアクセスすることができれば、多くの異なる機能および寸法(例えば、ステンシルサイズ)を有するようにカーネルをプログラミングすることができる。
【0086】
実行レーンアレイ905によって処理される画像データのデータ記憶装置として機能するとは別に、ランダムアクセスメモリ907は、1つ以上のルックアップテーブルを保持することもできる。様々な実施形態において、1つ以上のスカラールックアップテーブルは、スカラーメモリ903内でインスタンス化することもできる。
【0087】
スカラールックアップは、同様のルックアップテーブルからの同様のデータ値を同様のインデックスから実行レーンアレイ905内の各実行レーンに渡すことを含む。様々な実施形態において、上述したVLIW命令フォーマットは、スカラープロセッサによって実行されるルックアップ動作をスカラールックアップテーブルに向けるスカラーオペコードを含むように拡張される。オペコードと共に使用するように指定されたインデックスは、即値オペランドであってもよく、他のデータ記憶位置からフェッチされてもよい。いずれにせよ、一実施形態において、スカラーメモリ内のスカラールックアップテーブルからのルックアップは、基本的に同一のクロックサイクル中に実行レーンアレイ905内の全ての実行レーンに同様のデータ値をブロードキャストすることを含む。ルックアップテーブルの使用および動作に関する追加の詳細は、以下でさらに説明する。
【0088】
図9bは、上述したVLIW命令語の実施形態を要約している。図9bから見られるように、VLIW命令語のフォーマットは、3つの別個の命令のフィールドを含む。3つの別個の命令は、1)スカラープロセッサによって実行されるスカラー命令951、2)実行レーンアレイ内の各々のALUによってSIMD方式でブロードキャストされ実行されるALU命令952、および3)部分的なSIMD方式でブロードキャストされ実行されるメモリ命令953を含む(例えば、実行レーンアレイ内の同一の行に沿った実行レーンが同一のランダムアクセスメモリを共有する場合、異なる行の各々からの1つの実行レーンが実際に命令を実行する(メモリ命令953のフォーマットは、命令を実行する各行の実行レーンを特定するオペランドを含むことができる)。
【0089】
命令語のフォーマットは、1つ以上の即値オペランド954のフィールドをさらに含む。命令951、952および953のどれがどの即値オペランド情報を使用するかは、命令フォーマットで特定することができる。また、命令951、952および953の各々は、それ自身に対応する入力オペランドおよび結果情報(例えば、ALU演算用のローカルレジスタ並びにメモリアクセス命令用のローカルレジスタおよびメモリアドレス)を含む。一実施形態において、スカラー命令951は、実行レーンアレイ内の実行レーンが他の2つの命令952および953のいずれかを実行する前に、スカラープロセッサによって実行される。すなわち、VLIW命令語の実行は、スカラー命令951を実行する第1のサイクルと、続いて他の命令952および953を実行する第2のサイクルとを含む(なお、様々な実施形態において、命令952および953は、並列して実行されてもよい)。
【0090】
一実施形態において、スカラープロセッサによって実行されるスカラー命令は、データ計算ユニットのメモリもしくは2Dシフトレジスタからシートをロードするまたはシートをそれに格納するようにシート生成部に発行されるコマンドを含む。この場合、シート生成部の動作は、ラインバッファユニットの動作またはシート生成部がスカラープロセッサによって発行されたコマンドを完了するまでにかかるサイクル数のプレランタイムの包含を妨げる他の変数に依存し得る。したがって、一実施形態において、スカラー命令951がシート生成部に発行されるべきコマンドに対応するか、さもなければコマンドをシート生成部703に発行させるVLIW命令語は、他の2つの命令フィールド952および953に無演算(NOOP)命令を含む。次に、プログラムコードは、シート生成部がデータ計算ユニットからシートのロードまたはデータ計算ユニットにシートの格納を完了するまで、命令フィールド952および953のNOOP命令ループに入る。この場合、スカラープロセッサは、コマンドをシート生成部に発行するときに、シート生成部がコマンドの完了時にリセットするインターロックレジスタのビットを設定することができる。NOOPループの間に、スカラープロセッサは、インターロックビットのビットを監視する。スカラープロセッサが、シート生成部がそのコマンドを完了したことを検出すると、通常の実行が再開される。
【0091】
図10は、データ計算コンポーネント1001の実施形態を示す。図10から見られるように、データ計算コンポーネント1001は、2次元シフトレジスタアレイ構造1006の「上方」に論理的に配置された実行レーンアレイ1005を含む。上述したように、様々な実施形態において、シート生成部によって提供された画像データのシートは、2次元シフトレジスタ1006にロードされる。その後、実行レーンは、レジスタ構造1006からのシートデータを処理する。
【0092】
実行レーンアレイ1005およびシフトレジスタ構造1006は、互いに対して適所に固定される。しかしながら、シフトレジスタアレイ1006内のデータを戦略的且つ協調的にシフトすることによって、実行レーンアレイ内の各実行レーンは、データ内の異なるステンシルを処理することができる。したがって、各実行レーンは、生成される出力シート内の異なるピクセルの出力画像値を決定する。図10のアーキテクチャから、実行レーンアレイ1005が垂直方向に隣接する実行レーンおよび水平方向に隣接する実行レーンを含むため、重なり合うステンシルが垂直方向だけでなく水平方向にも配置されることは明らかである。
【0093】
データ計算ユニット1001のいくつかの注目すべきアーキテクチャ上の特徴は、実行レーンアレイ1005よりも広い寸法を有するシフトレジスタ構造1006を含む。すなわち、実行レーンアレイ1005の外側にレジスタ1009の「ハロー」が存在する。ハロー1009は、実行レーンアレイの2つの側に存在すると示されているが、実現例に応じて、実行レーンアレイ1005の2つ未満(1つ)または2つ以上(3つまたは4つ)の側に存在してもよい。ハロー1005は、データを実行レーン1005の「下方」にシフトするときに、実行レーンアレイ1005の境界の外側に溢流するデータ用の「溢流」空間を提供するように機能する。単純な例として、実行レーンアレイ1005の右端を中心とする5×5のステンシルは、ステンシルの左端のピクセルを処理するときに、さらに右側に4つのハローレジスタ位置を必要とする。図面を簡単にするために、図10は、名目上の実施例において、いずれか一方側(右、底)のレジスタが水平方向接続および垂直方向接続の両方を有する場合、ハローの右側のレジスタは、水平方向シフト接続のみを有し、ハローの底側のレジスタは、垂直方向シフト接続のみを有することを示している。様々な実施形態において、ハロ領域は、画像処理命令の実行に対応する実行レーンロジックを含まない(例えば、ALUが存在しない)。しかしながら、個々のハローレジスタロケーションがメモリからデータを個別にロードし、データをメモリに格納できるように、個々のメモリアクセスユニット(M)は、各々のハロー領域の位置に存在する。
【0094】
追加の溢流空間は、アレイの各行および/または各列にもしくはその一部に結合されているランダムアクセスメモリ1007によって提供される(例えば、ランダムアクセスメモリは、4つの実行レーン行および2つの実行レーン列に跨る実行レーンアレイの「領域」に割り当てられてもよい。簡略化のために、アプリケーションの残りの部分は、主に、行および/または列に基づく割り当てスキームを指す)。この場合、実行レーンのカーネル演算が(一部の画像処理ルーチンが必要とする場合がある)2次元シフトレジスタアレイ1006の外側のピクセル値を処理することを必要とする場合、画像データの面は、ハロー領域1009からランダムアクセスメモリ1007にさらに溢流することができる。例えば、ハードウェアが実行レーンアレイの右端に位置する実行レーンの右側の4つのみの記憶素子からなるハロー領域を含む場合の6×6ステンシルを検討する。この場合、ステンシルを完全に処理するために、データをハロー1009の右端からさらに右側にシフトする必要があるであろう。ハロー領域1009の外側にシフトされたデータは、ランダムアクセスメモリ1007に溢流する。以下、ランダムアクセスメモリ1007および図9のステンシルプロセッサの他の適用例をさらに説明する。
【0095】
図11a~11kは、上述したように、画像データが実行レーンアレイ「下方」の2次元シフトレジスタアレイにシフトされる実施例を示している。図11aから見られるように、2次元シフトアレイのデータ内容は、第1のアレイ1107に示され、実行レーンアレイは、フレーム1105によって示される。また、実行レーンアレイ内の2つの隣接する実行レーン1110は、簡略に示されている。この簡略な図示において、各実行レーン1110は、シフトレジスタからデータを受け入れ、(例えば、サイクル全体のアキュムレータとして動作するように)ALU出力からデータを受け入れることができ、または出力先に出力データを書き込むことができるレジスタR1を含む。
【0096】
また、各実行レーンは、ローカルレジスタR2において、その「下方」にある2次元シフトアレイ内の内容を利用することができる。したがって、R1は、実行レーンの物理レジスタであり、R2は、2次元シフトレジスタアレイの物理レジスタである。実行レーンは、R1および/またはR2によって提供されるオペランドを処理できるALUを含む。さらに以下でより詳細に説明するように、一実施形態において、シフトレジスタは、実際にはアレイ位置ごとに複数の(ある「深さ」の)記憶/レジスタ素子で実現されるが、シフトの動作は、記憶素子の1つの面に限られる(例えば、記憶素子の1つの面のみがサイクルごとにシフトすることができる)。図11a~11kは、各々の実行レーンからの結果Xを格納するために使用されるより深いレジスタ位置の1つを示している。例示を容易にするために、より深い結果のレジスタは、その対応するレジスタR2の下方ではなく、その側方に図示されている。
【0097】
図11a~11kは、中心位置が実行レーンアレイ内に示された実行レーン位置1111の対に対して整列された2つのステンシルの計算に着目する。例示を容易にするために、実行レーン1110の対は、水平方向に隣接する実行レーンとして図示されている。実際には、以下の例によれば、実行レーン1110の対は、垂直方向に隣接する。
【0098】
まず、図11aから見られるように、実行レーンは、それらの中央ステンシルの位置を中心にして配置される。図11bは、両方の実行レーンによって実行される目的コードを示す。図11bから見られるように、両方の実行レーンのプログラムコードは、シフトレジスタアレイ内のデータを、1つの位置だけ下方にシフトさせ、1つの位置だけ右側にシフトさせる。これによって、両方の実行レーンは、対応するステンシルの左上隅に整列される。次に、プログラムコードは、(R2内の)対応する位置のデータをR1にロードさせる。
【0099】
図11cから見られるように、次に、プログラムコードによって、実行レーンの対は、シフトレジスタアレイ内のデータを1単位だけ左側にシフトする。これによって、各実行レーンの各々の位置の右側の値は、各実行レーンの位置にシフトされる。R1の値(過去値)は、次いで、(R2内の)実行レーンの位置にシフトされた新しい値と共に加算される。結果は、R1に書き込まれる。図11dから見られるように、図11cを参照して上述したものと同様のプロセスを繰り返すことによって、結果としてのR1は、上方の実行レーンの値A+B+Cおよび下方の実行レーンの値F+G+Hを含む。この時点において、両方の実行レーンは、対応するステンシルの上方の行を処理した。なお、(実行レーンアレイの左側にハロー領域が存在する場合に)左側のハロー領域に溢流し、実行レーンアレイの左側にハロー領域が存在しない場合に、ランダムアクセスメモリに溢流する。
【0100】
図11eから見られるように、次に、プログラムコードによって、シフトレジスタアレイ内のデータは、1単位だけ上方にシフトされる。これによって、両方の実行レーンは、対応するステンシルの中間行の右端に整列される。両方の実行レーンのレジスタR1は、現在、ステンシルの最上行および中間行の右端の値の合計を含む。図11fおよび11gは、両方の実行レーンのステンシルの中間行にわたって左方向に移動移動し続けることを示している。累積加算は、図11gの処理が終了する時に両方の実行レーンが対応するステンシルの最上行の値と中間行の値との合計を含むように、継続する。
【0101】
図11hは、各実行レーンを対応するステンシルの最下行に整列させる別のシフトを示している。図11iおよび11jは、両方の実行レーンのステンシルに対する処理を完了するための継続的なシフトを示している。図11kは、各実行レーンをデータアレイ内の正しい位置に整列させ、その結果をデータアレイに書き込むための追加のシフトを示している。
【0102】
なお、図11a~11kの例においてシフト動作を行うための目的コードは、(X,Y)座標で表されるシフトの方向および大きさを特定するための命令フォーマットを含むことができる。例えば、1つの位置で上方へのシフトは、目的コードでSHIFT0,+1として表現されてもよい。別の例として、1つの位置で右方向へのシフトは、目的コードでSHIFT+1,0として表現されてもよい。様々な実施形態において、目的コードでより大きいサイズのシフトを指定することができる(例えば、SHIFT0,+2)。この場合、2Dシフトレジスタハードウェアが1つのサイクルにおいて1つの位置のシフトしかサポートしない場合、命令は、機械によって複数のサイクルの実行を要求するように解釈されてもよく、または2Dシフトレジスタハードウェアは、1つのサイクルにおいて2つ以上の位置のシフトをサポートするように設計されてもよい。いか、後者の実施形態をより詳細に説明する。
【0103】
図12は、アレイ実行レーンおよび対応するシフトレジスタ構造の単位セルの別のより詳細な図を示す(様々な実施形態において、ハロー領域内のレジスタは、対応する実行レーンを含まないが、メモリ装置を含む)。一実施形態において、実行レーンおよび実行レーンアレイの各位置に関連するレジスタ空間は、実行レーンアレイの各ノードにおいて、図12に示す回路をインスタンス化することによって実現される。図12から見られるように、単位セルは、4つのレジスタR2~R5からなるレジスタファイル1202に結合される実行レーン1201を含む。任意のサイクルにおいて、実行レーン1201は、レジスタR1~R5のいずれかに対して読み書きすることができる。2つの入力オペランドを必要とする命令の場合、実行レーンは、R1~R5のいずれかから2つのオペランドを取り出すことができる。
【0104】
一実施形態において、2次元シフトレジスタ構造は、単一のサイクルにおいて、出力マルチプレクサ1203を介して、レジスタR2~R4のいずれか1つ(のみ)の内容を隣接するレジスタファイルの1つにシフト「アウト」し、入力マルチプレクサ1204を介して、レジスタR2~R4のいずれか1つ(のみ)の内容を隣接するレジスタファイルの対応するものからシフト「イン」された内容で置換することによって、隣接するレジスタファイルの間のシフトが同じ方向にあるように(例えば、全ての実行レーンが左にシフトするまたは全ての実行レーンが右にシフトする)、実現される。一般的には、同一のレジスタの内容をシフトアウトし、同一のサイクルにおいてシフトインされた内容で置換するが、マルチプレクサ1203および1204は、同一のサイクルにおいて、同一のレジスタファイル内で異なるソースレジスタおよびターゲットレジスタをシフトすることができる。
【0105】
図12に示すように、シフトシーケンスの間に、実行レーンは、そのレジスタファイル1202から内容をその左側、右側、上側および下側の隣接するレジスタファイルにシフトアウトする。同一のシフトシーケンスにおいて、実行レーンはまた、内容をその左側、右側、上側および下側の隣接するレジスタファイルうち、特定のレジスタファイルから別のレジスタファイルにシフトする。また、全ての実行レーンのシフトアウトターゲットおよびシフトインソースを同じシフト方向に一致しなければならない(例えば、シフトアウトを右隣に対して行う場合、シフトインを左隣からしなければならない)。
【0106】
一実施形態において、1つのサイクルにおいて、1つの実行レーンは、1つのレジスタの内容のみをシフトすることができるが、他の実施形態において、1つの実行レーンは、2つ以上のレジスタの内容をシフトイン/アウトすることができる。例えば、図12に示されたマルチプレクサ回路系1203および1204の第2のインスタンスが図12の設計に組み込まれた場合、同一のサイクルの間に2つのレジスタの内容をシフトアウト/インすることができる。当然ながら、1つのサイクルにおいて1つのレジスタの内容のみをシフトできる実施形態において、複数のレジスタのシフトは、数学演算の間のシフトに対してより多くのクロックサイクルを消費することによって、数学演算の間に行われてもよい(例えば、2つのレジスタは、数学演算の間に2つのシフト演算を消費することによって、その内容を数学演算の間にシフトすることができる)。
【0107】
なお、シフトシーケンス中に実行レーンのレジスタファイルの全ての内容がシフトアウトされていない場合、各実行レーンのシフトアウトされていないレジスタの内容は、所定の位置に残る(シフトされない)。したがって、シフトインされる内容によって置換えされていない未シフトの内容は、シフトサイクル中に実行レーンにローカルに保持される。各実行レーンに見られるメモリユニット(「M」)は、実行レーンアレイ内の実行レーンの行および/または列に関連するランダムアクセスメモリ空間からデータをロードするまたはデータをランダムアクセスメモリ空間に格納するために使用される。この場合、Mユニットは、実行レーンの自身のレジスタ空間からロードまたはそれに格納できないデータをロード/格納するためによく使用されるという点で、標準的なMユニットとして機能する。様々な実施形態において、Mユニットの主な動作は、ローカルレジスタからのデータをメモリに書き込み、メモリから読み出したデータをローカルレジスタに書き込むことである。
【0108】
ハードウェア実行レーン1201のALUユニットによってサポートされるISAオペコードに関して、様々な実施形態において、ハードウェアALUによってサポートされる数学的オペコードは、例えば、ADD、SUB、MOV、MUL、MAD、ABS、DIV、SHL、SHR、MIN/MAX、SEL、AND、OR、XOR、NOTを含む。上述したように、メモリアクセス命令は、実行レーン1201を用いて、データを関連するランダムアクセスメモリからフェッチまたはそれに格納することによって、実行されてもよい。また、ハードウェア実行レーン1201は、2次元シフトレジスタ構造内のデータをシフトするためのシフト演算命令(右、左、上、下)をサポートする。上述したように、プログラム制御命令は、主にステンシルプロセッサのスカラープロセッサによって実行される。
【0109】
5.0 実装の実施形態
留意すべきことは、上述した様々な画像プロセッサアーキテクチャの特徴は、必ずしも従来の画像処理に限定されず、したがって、画像プロセッサを再特徴付ける(またはしない)ことができる他のアプリケーションに適用することができることである。例えば、上述した様々な画像プロセッサアーキテクチャの特徴のいずれかを用いて、実際のカメラ画像の処理ではなく、アニメーションを作成および/または生成および/またはレンダリングする場合、画像プロセッサは、グラフィックス処理ユニットとして特徴づけられてもよい。また、上述した画像プロセッサアーキテクチャの特徴は、ビデオ処理、視覚処理、画像認識および/または機械学習などの他の技術応用に適用することもできる。このように適用される場合、画像プロセッサは、(例えば、コンピューティングシステムのCPUであるまたはその一部である)汎用プロセッサと(例えばコプロセッサとして)一体化されてもよく、またはコンピューティングシステム内のスタンドアロンプロセッサであってもよい。
【0110】
上述したハードウェア設計の実施形態は、半導体チップ内において、および/または最終的に半導体製造プロセス向けの回路設計の記述として実施することができる。後者の場合、そのような回路記述は、(例えばVHDLもしくはVerilog)レジスタ転送レベル(RTL)回路記述、ゲートレベル回路記述、トランジスタレベル回路記述もしくはマスク記述、またはそれらの様々な組み合わせの形態をとってもよい。回路記述は、典型的には、コンピュータ可読記憶媒体(例えば、CD-ROMまたは他の種類の記憶技術)上に実施される。
【0111】
留意すべきことは、前述のセクションから、上記の画像プロセッサは、(例えば、携帯装置のカメラからのデータを処理するための携帯装置のシステムオンチップ(SOC)の一部として)コンピュータシステム上のハードウェアで実現することができることである。なお、画像プロセッサがハードウェア回路として実現された場合、画像プロセッサによって処理される画像データは、カメラから直接に受信されてもよい。この場合、画像プロセッサは、別体のカメラの一部であってもよく、一体化されたカメラを備えるコンピューティングシステムの一部であってもよい。後者の場合、画像データは、カメラからまたはコンピューティングシステムのシステムメモリから直接に受信することができる(例えば、カメラは、画像データを画像プロセッサではなくシステムメモリに送信する)。なお、前述のセクションにおいて説明した機能の多くは、(アニメーションをレンダリングする)グラフィックスプロセッサユニットに適用することができる。
【0112】
図13は、コンピューティングシステムの例示的な図である。以下に説明されるコンピューティングシステムのコンポーネントの多くは、一体化されたカメラおよび関連する画像プロセッサ(例えば、スマートフォンまたはタブレットコンピューターなどの携帯装置)を備えたコンピューティングシステムに適用することができる。当業者は、この2つを簡単に区別することができる。さらに、図13のコンピューティングシステムは、ワークステーションまたはスーパーコンピューターなどの高性能コンピューティングシステムの多くの特徴を含む。
【0113】
図13から見られるように、基本的なコンピューティングシステムは、(例えば、マルチコアプロセッサまたはアプリケーションプロセッサ上に配置された複数の汎用処理コア1315_1~1315_Nおよびメインメモリコントローラ1317を含み得る)中央処理ユニット1301、システムメモリ1302、ディスプレイ1303(例えばタッチスクリーン、平板パネル)、ローカル有線ポイントツーポイントリンク(例えば、USB)インターフェイス1304、様々なネットワークI/O機能1305(イーサネット(登録商標)インターフェイスおよび/またはセルラーモデムサブシステムなど)、無線ローカルエリアネットワーク(例えばWiFi(登録商標))インターフェイス1306、ワイヤレスポイントツーポイントリンク(例えば、ブルートゥース(登録商標))インターフェイス1307、GPSインターフェイス1308、様々なセンサ1309_1~1309_N、1つ以上のカメラ1310、バッテリ1311、電力管理制御ユニット1312、スピーカおよびマイクロホン1313、並びに音声コーダ/デコーダ1314を含んでもよい。
【0114】
アプリケーションプロセッサまたはマルチコアプロセッサ1350は、そのCPU1301内の1つ以上の汎用処理コア1315、1つ以上のグラフィカル処理ユニット1316、メモリ管理機能(例えば、メモリコントローラ)1317、I/O制御機能1318および画像処理ユニット1319を含んでもよい。汎用処理コア1315は、通常、コンピューティングシステムのオペレーティングシステムおよびアプリケーションソフトウェアを実行する。グラフィックス処理ユニット1316は、通常、ディスプレイ1303上に表示されるグラフィックス情報を生成するために、グラフィックス集約機能を実行する。メモリ制御機能1317は、インターフェイスでシステムメモリ1302と接続することによって、システムメモリ1302との間でデータの書き込み/読み出しを行う。電力管理制御ユニット1312は、システム1300の電力消費を全体的に制御する。
【0115】
画像プロセッサユニット1319は、例えば、システムのカメラとシステムのアプリケーションプロセッサとの間に設けられた画像プロセッサユニットチップ上に一体化されるものを含み、上記のセクションで詳細に説明した画像プロセッサユニットの実施形態のいずれかに従って実装されてもよい。代替的にまたは組み合わせて、画像プロセッサユニット1319は、コプロセッサとして、GPU1316およびCPU1301の一方または両方に結合されてもよい。さらに、様々な実施形態において、GPU1316は、上記で詳細に説明された画像プロセッサ機能のいずれかで実装されてもよい。画像プロセッサユニットは、アプリケーションプロセッサに一体化されてもよい。
【0116】
タッチスクリーンディスプレイ1303、通信インターフェイス1304~1307、GPSインターフェイス1308、センサ1309、カメラ1310、およびスピーカ/マイクコーデック1313および1314の各々は全て、コンピューティングシステムの全体に対して様々な形態のI/O(入力および/または出力)として、必要に応じて一体化された周辺装置(例えば、1つ以上のカメラ1310)を含むI/Oとして見なすことができる。実現例に応じて、これらのI/Oコンポーネントの各々は、アプリケーションプロセッサ/マルチコアプロセッサ1350に一体化されてもよく、またはアプリケーションプロセッサ/マルチコアプロセッサ1350のダイから離れてまたはそのパッケージの外側に配置されてもよい。
【0117】
一実施形態において、1つ以上のカメラ1310は、カメラと視野内の物体との間の深度を測定することができる深度カメラを含む。アプリケーションプロセッサまたは他のプロセッサの汎用CPUコア(もしくはプログラムコードを実行するための命令実行パイプラインを有する他の機能ブロック)上で実行されるアプリケーションソフトウェア、オペレーティングシステムソフトウェア、デバイスドライバソフトウェアおよび/またはファームウェアは、上記の機能のいずれかを実行してもよい。
【0118】
本発明の実施形態は、上述した様々なプロセスを含むことができる。これらのプロセスは、機械実行可能命令で実装されてもよい。これらの命令を用いて、汎用または特殊目的のプロセッサに、特定のプロセスを実行させることができる。代替的に、これらのプロセスは、プロセスを実行するためのハードワイヤード論理を含む特定のハードウェアコンポーネントによって、またはプログラミングされたコンピュータコンポーネントとカスタムされたハードウェアコンポーネントとの任意の組み合わせによって実行されてもよい。
【0119】
また、本発明の要素は、機械実行可能命令を記憶するための機械可読媒体として提供されてもよい。機械可読媒体は、フロッピー(登録商標)ディスク、光ディスク、CD-ROM、および光磁気ディスク、フラッシュメモリ、ROM、RAM、EPROM、EEPROM、磁気もしくは光カード、伝搬媒体、または電子命令を記憶するのに適した他のタイプの媒体/機械可読媒体を含むが、それらに限定はされない。例えば、本発明は、通信リンク(例えばモデムもしくはネットワーク接続)を介して、搬送波または他の伝搬媒体に具体化されたデータ信号として遠隔のコンピュータ(例えば、サーバ)から要求側コンピュータ(例えば、クライアント)に転送されるコンピュータプログラムとしてダウンロードすることができる。
【0120】
前述の明細書において、特定の例示的な実施形態を説明した。しかしながら、特許請求の範囲に記載される本発明のより広い精神および範囲から逸脱することなく、様々な修正および変更がなされ得ることは明らかであろう。したがって、明細書および図面は、限定的ではなく例示的なものとみなされるべきである。
【0121】
以下、いくつかの例示的な実施形態を説明する。
【実施例1】
【0122】
画像プロセッサユニットであって、
少なくとも1つの入力画像を受信するための複数の入力と、
少なくとも1つの出力画像を提供するための複数の出力と、
複数の入力および複数の出力に結合されたネットワークとを備え、ネットワークは、少なくとも1つの入力を少なくとも1つの出力に結合し、
ネットワークに結合された画像プロセッサ回路を備え、ネットワークは、1つの入力で受信した入力画像を画像プロセッサ回路にルーティングし、画像プロセッサ回路は、画像信号処理プログラムコードを実行することによって、入力画像から処理済み出力画像を生成し、ネットワークは、処理済み出力画像を少なくとも1つの出力にルーティングする。
【実施例2】
【0123】
ネットワークは、入力画像を画像プロセッサ回路にルーティングしている間に、1つの入力で受信した第2の入力画像を1つの出力にルーティングする、実施例1に記載の画像プロセッサユニット。
【実施例3】
【0124】
画像プロセッサ回路による画像信号処理プログラムコードの実行は、オフセット補正、ノイズ低減、自動ホワイトバランス、デモザイク処理、シャープニング、レンズシェーディング補正、色補正、トーンマッピングおよび時間-周波数変換のいずれかを実行することである、実施例1または2に記載の画像プロセッサユニット。
【実施例4】
【0125】
画像プロセッサ回路による画像信号処理プログラムコードの実行は、画像信号処理パイプラインを実施することである、先行する実施例の少なくとも1つに記載の画像プロセッサユニット。
【実施例5】
【0126】
画像プロセッサ回路による画像信号処理プログラムコードの実行は、画像統計値を生成することである、先行する実施例の少なくとも1つに記載の画像プロセッサユニット。
【実施例6】
【0127】
ホストシステムへのインターフェイスをさらに備え、
インターフェイスは、ホストシステムから入力データを受信し、ネットワークは、入力データを画像プロセッサ回路にルーティングし、画像プロセッサ回路は、入力データに対して画像処理プログラムコードを実行することによって結果データを生成し、ネットワークは、結果データをホストにルーティングする、先行する実施例の少なくとも1つに記載の画像プロセッサユニット。
【実施例7】
【0128】
画像プロセッサ回路による画像処理プログラムコードの実行は、ニューラルネットワーク処理、機械学習、顔検出、顔認識、製品認識、シーン認識および言語翻訳のいずれかを実行することである、先行する実施例の少なくとも1つに記載の画像プロセッサユニット。
【実施例8】
【0129】
メモリを画像プロセッサユニットに結合するためのメモリインターフェイスをさらに備え、
ネットワークは、画像プロセッサ回路が入力画像を処理する前に、入力画像をメモリにルーティングすること、および/または、出力画像をメモリから1つの出力にルーティングすることを行う、先行する実施例の少なくとも1つに記載の画像プロセッサユニット。
【実施例9】
【0130】
メモリは、複数の画像を格納し、
画像プロセッサ回路による画像信号処理プログラムコードの実行は、複数の画像のより多くの露出不足領域を複数の画像のより少ない過度露出領域とブレンドすることである、および/または、複数の画像を分析することによって最良の静止画を決定することである、実施例8に記載の画像プロセッサユニット。
【実施例10】
【0131】
カメラドライバプログラムコードを実行するための埋め込み型プロセッサ回路をさらに備える、先行する実施例の少なくとも1つに記載の画像プロセッサユニット。
【実施例11】
【0132】
画像プロセッサユニットは、アプリケーションプロセッサ上に実装される、先行する実施例の少なくとも1つに記載の画像プロセッサユニット。
【実施例12】
【0133】
画像プロセッサのアーキテクチャは、ハードウェアの2次元シフトレジスタアレイに結合されたハードウェアの実行レーンアレイを含む、先行する実施例の少なくとも1つに記載の画像プロセッサ。
【実施例13】
【0134】
少なくとも1つのバイパスモードにおいて、入力データが少なくとも1つの出力に転送され、および/または画像プロセッサチップがマルチプレクサとして構成される、先行する実施例の少なくとも1つに記載の画像プロセッサ。
【実施例14】
【0135】
画像の統計値を処理および/または生成するように構成される、先行する実施例の少なくとも1つに記載の画像プロセッサ。
【実施例15】
【0136】
画像プロセッサは、画像データのステンシルに対して未処理画像を処理するように構成され、特に、ステンシルを処理することによって、オフセット補正、ノイズ低減、自動ホワイトバランス、デモザイク処理、シャープニング、レンズシェーディング補正、色補正、トーンマッピングおよび/または時間-周波数変換を実行する、先行する実施例の少なくとも1つに記載の画像プロセッサ。
【実施例16】
【0137】
ステンシルプロセッサにさらに結合される、先行する実施例の少なくとも1つに記載の画像プロセッサ。
【実施例17】
【0138】
データ計算ユニットが、実行レーンアレイよりも広い寸法を有するシフトレジスタ構造を備え、特に実行レーンアレイの外側にレジスタが存在する、先行する実施例の少なくとも1つに記載の画像プロセッサ。
【実施例18】
【0139】
コンピューティングシステムであって、
複数の汎用プロセッサとメインメモリサブシステムとを含むホストシステムと、
1つ以上のカメラと、
画像信号処理プログラムコードを格納するための記憶媒体と、
1つ以上のカメラとホストシステムとの間に結合された画像プロセッサユニットとを備え、
画像プロセッサユニットは、以下のa)、b)、c)およびd)、すなわち、
a)少なくとも1つの入力画像を受信するための複数の入力と、
b)少なくとも1つの出力画像を提供するための複数の出力と、
c)複数の入力および複数の出力に結合されたネットワークとを備え、ネットワークは、少なくとも1つの入力を少なくとも1つの出力に結合し、
d)ネットワークに結合された画像プロセッサ回路を備え、ネットワークは、1つの入力で受信した入力画像を画像プロセッサ回路にルーティングし、画像プロセッサ回路は、画像信号処理プログラムコードを実行することによって、入力画像から処理済み出力画像を生成し、ネットワークは、処理済み出力画像を少なくとも1つの出力にルーティングする。
【実施例19】
【0140】
ネットワークは、入力画像を画像プロセッサ回路にルーティングしている間に、1つの入力で受信した第2の入力画像を1つの出力にルーティングする、実施例18に記載のコンピューティングシステム。
【実施例20】
【0141】
画像プロセッサ回路による画像信号処理プログラムコードの実行は、オフセット補正、ノイズ低減、自動ホワイトバランス、デモザイク処理、シャープニング、レンズシェーディング補正、色補正、トーンマッピングおよび時間-周波数変換のいずれかを実行することである、実施例18または19に記載のコンピューティングシステム。
【実施例21】
【0142】
ホストシステムへのインターフェイスをさらに備え、
インターフェイスは、ホストシステムから入力データを受信し、ネットワークは、入力データを画像プロセッサ回路にルーティングし、画像プロセッサ回路は、入力データに対して画像処理プログラムコードを実行することによって結果データを生成し、ネットワークは、結果データをホストにルーティングする、実施例18~20の少なくとも1つに記載のコンピューティングシステム。
【実施例22】
【0143】
画像プロセッサ回路による画像処理プログラムコードの実行は、ニューラルネットワーク処理、機械学習、顔検出、顔認識、製品認識、シーン認識および言語翻訳のいずれかを実行することである、実施例18~21の少なくとも1つに記載のコンピューティングシステム。
【実施例23】
【0144】
メモリを画像プロセッサユニットに結合するためのメモリインターフェイスをさらに備え、
ネットワークは、画像プロセッサ回路が入力画像を処理する前に、入力画像をメモリにルーティングすること、および/または、出力画像をメモリから1つの出力にルーティングすることを行う、実施例18~22の少なくとも1つに記載のコンピューティングシステム。
【実施例24】
【0145】
メモリは、複数の画像を格納し、
画像プロセッサ回路による画像信号処理プログラムコードの実行は、複数の画像のより多くの露出不足領域を複数の画像のより少ない過度露出領域とブレンドすることである、および/または、複数の画像を分析することによって最良の静止画を決定することである、実施例18~23の少なくとも1つに記載のコンピューティングシステム。
【実施例25】
【0146】
画像プロセッサのアーキテクチャは、ハードウェアの2次元シフトレジスタアレイに結合されたハードウェアの実行レーンアレイを含む、実施例18~24の少なくとも1つに記載のコンピューティングシステム。
【実施例26】
【0147】
少なくとも1つのバイパスモードにおいて、入力データが少なくとも1つの出力に転送され、および/または画像プロセッサチップがマルチプレクサとして構成される、実施例18~25の少なくとも1つに記載のコンピューティングシステム。
【実施例27】
【0148】
画像の統計値を処理および/または生成するように構成される、実施例18~26の少なくとも1つに記載のコンピューティングシステム。
【実施例28】
【0149】
画像データのステンシルに対して未処理画像を処理するように構成され、特に、ステンシルを処理することによって、オフセット補正、ノイズ低減、自動ホワイトバランス、デモザイク処理、シャープニング、レンズシェーディング補正、色補正、トーンマッピングおよび/または時間-周波数変換を実行する、実施例18~27の少なくとも1つに記載のコンピューティングシステム。
【実施例29】
【0150】
データ計算ユニットが、実行レーンアレイよりも広い寸法を有するシフトレジスタ構造を備え、特に実行レーンアレイの外側にレジスタが存在する、実施例18~28の少なくとも1つに記載のコンピューティングシステム。
【実施例30】
【0151】
画像プロセッサユニットによって実行される方法であって、
第1の入力画像を画像プロセッサユニットの第1の出力に転送することと、
第2の入力画像を画像プロセッサ回路に転送することとを含み、画像プロセッサ回路は、実行レーンアレイと、2次元シフトレジスタアレイとを備え、
画像プロセッサ上で画像信号処理プログラムコードを実行することによって処理画像を生成することを含み、画像信号処理プログラムコードの実行により、2次元シフトレジスタアレイは、データを実行レーンアレイによって実行されている画像信号演算処理の間にシフトさせ、
処理画像を画像プロセッサユニットの第2の出力に転送することを含む。
【実施例31】
【0152】
画像信号処理プログラムコードの実行は、オフセット補正、ノイズ低減、自動ホワイトバランス、デモザイク処理、シャープニング、レンズシェーディング補正、色補正、トーンマッピングおよび時間-周波数変換のいずれかを実行することである、実施例30に記載の方法。
図1a
図1b
図1c
図2
図3
図4a
図4b
図4c
図4d
図4e
図4f
図4g
図4h
図5
図6
図7
図8a
図8b
図8c
図8d
図8e
図9a
図9b
図10
図11a
図11b
図11c
図11d
図11e
図11f
図11g
図11h
図11i
図11j
図11k
図12
図13