(58)【調査した分野】(Int.Cl.,DB名)
第1の後処理回路は、複数の第2の畳み込みカーネルに関する正規化相互相関(NCC)スコア及び前記第1の実行クラスタからの前記第1の出力値を計算するように構成されたマルチチャネルNCCユニットとを含む、請求項1に記載の畳み込みエンジン。
第1の後処理回路は、前記第1の実行クラスタからの前記第1の出力値に関連付けられた最大値又は最小値を判定するように構成されたピークファインダを更に含む、請求項1に記載の畳み込みエンジン。
第1の後処理回路は、前記第1の実行クラスタからの前記第1の出力値に対して、インターチャネル局所応答正規化(LRN)を実行するように構成されたLRNユニットを更に含む、請求項1に記載の畳み込みエンジン。
前記第1の畳み込み回路が第1の畳み込みカーネルを前記第1の入力データに適用すると同時に、前記第2の畳み込み回路が第2の畳み込みカーネルを前記第2の入力データに適用し、
前記第1の畳み込みカーネルが第1のフィルタ要素を有し、前記第2の畳み込みカーネルが前記第1のフィルタ要素とは異なる第2のフィルタ要素を有する、請求項11に記載の畳み込みエンジン。
前記後処理回路が、偶数チャネルに関連付けられた前記NCCスコアに基づきテンプレートにとっての最良一致位置を判定するよう構成されたピークファインダを更に含む、請求項14に記載の畳み込みエンジン。
第1の後処理回路は、前記第1の複数のデータチャネルの偶数チャネルを定義する偶数データ値に対して、チャネル間局所応答正規化(LRN)を実行するように構成されたLRNユニットを更に含む、請求項13に記載の畳み込みエンジン。
【発明を実施するための形態】
【0007】
ここで、添付図面に実施例が示される実施形態への詳細な参照が行われる。以下の詳細な説明では、説明される様々な実施形態の完全な理解を提供するために数多くの具体的な詳細が記載されている。しかし、説明する実施形態は、これらの具体的な詳細なしに実施することができる。他の例では、周知の方法、手順、構成要素、回路、及びネットワークは、実施形態の態様を不必要に不明瞭にしないよう詳細には説明されていない。
【0008】
本開示の実施形態は、畳み込みエンジン内の構成要素の演算を構成することによって、所望の方法で様々なチャネルの入力データの畳み込み及びチャネルごとの機械学習操作を実行するための構成可能畳み込みエンジンに関する。畳み込みエンジンは、第1の畳み込み回路と、第2の畳み込み回路と、第1及び第2の畳み込み回路に連結されたチャネルマージ回路と、を含む回路である。第1及び第2の畳み込み回路はそれぞれ、特に畳み込みカーネルを入力データに適用することによって、値のストリームを生成する。値のストリームはそれぞれ、インターリーブ方式で画像データの1つ以上のチャネルを定義してもよい。チャネルマージ回路は、選択された演算モードに従って、第1及び第2の畳み込み回路からの値のストリームを結合することができる。二重畳み込みモードでは、値のストリームは、第1のストリームからのチャネルと、インターリーブ方式で配置された第2のストリームからのチャネルと、を有する単一の出力ストリームに結合される。
例示的な電子デバイス
【0009】
電子デバイス、そのようなデバイス用のユーザインターフェース、及びそのようなデバイスを使用する関連するプロセスの実施形態が説明される。いくつかの実施形態では、デバイスは、パーソナルデジタルアシスタント(PDA)機能及び/又は音楽プレーヤ機能などの他の機能も含む、携帯電話などのポータブル通信デバイスである。ポータブル多機能デバイスの例示的な実施形態としては、カリフォルニア州クパチーノのApple Inc.からのiPhone(登録商標)、iPod Touch(登録商標)、Apple Watch(登録商標)、及びiPad(登録商標)のデバイスが挙げられるが、これらに限定されない。ウェアラブルコンピュータ、ラップトップコンピュータ、又はタブレットコンピュータなどの他のポータブル電子デバイスが、任意選択的に使用される。いくつかの実施形態では、デバイスは、ポータブル通信デバイスではないが、デスクトップコンピュータ又はポータブル使用のために設計されていない他のコンピューティングデバイスである。いくつかの実施形態では、本開示の電子デバイスは、タッチ感知面(例えば、タッチスクリーンディスプレイ及び/又はタッチパッド)を含むことができる。
図1に関連して以下に説明する例示的な電子デバイス(例えば、デバイス100)は、ユーザ入力を受け取るためのタッチ感知面を含むことができる。電子デバイスは、物理キーボード、マウス、及び/又はジョイスティックなどの、1つ以上の他の物理ユーザインターフェースデバイスも含むことができる。
【0010】
図1は、一実施形態に係る、電子デバイス100の概要図である。デバイス100は、「ホーム」又はメニューボタン104などの、1つ以上の物理ボタンを含んでもよい。メニューボタン104は、例えば、デバイス100上で実行されるアプリケーションのセット内の任意のアプリケーションへナビゲートするために使用される。いくつかの実施形態では、メニューボタン104は、メニューボタン104上の指紋を識別する指紋センサを含む。指紋センサを使用して、メニューボタン104上の指がデバイス100をロック解除するために記憶された指紋と一致する指紋を有するか否かを判定することができる。あるいは、いくつかの実施形態では、メニューボタン104は、タッチスクリーン上に表示されるグラフィカルユーザインターフェース(graphical user interface)(GUI)内のソフトキーとして実装される。
【0011】
いくつかの実施形態では、デバイス100は、タッチスクリーン150、メニューボタン104、デバイスへの電源をオン/オフし、デバイスをロックするためのプッシュボタン106、音量調整ボタン108、加入者識別モジュール(Subscriber Identity Module)(SIM)カードスロット110、ヘッドセットジャック112、及びドッキング/充電用外部ポート124を含む。プッシュボタン106は、ボタンを押し下げて、既定の時間間隔の間、ボタンを押し下げた状態で保持することによって、デバイス上の電源をオン/オフするため、ボタンを押し下げて、所定の期間が経過する前にボタンを解放することによって、デバイスをロックするため、及び/又はデバイスをロック解除する、若しくはロック解除プロセスを開始するために、使用される。代替的実施形態では、デバイス100はまた、マイクロフォン113を介して、一部の機能をアクティブ化又は非アクティブ化するための口頭入力も受け入れる。デバイス100は、メモリ(1つ以上のコンピュータ可読記憶媒体を含むことができる)、メモリコントローラ、1つ以上の中央処理装置(CPU)、周辺機器インターフェース、RF回路、オーディオ回路、スピーカ111、マイクロフォン113、入出力(input/output)(I/O)サブシステム、及び他の入力又は制御デバイスを含むがこれらに限定されない、様々な構成要素を含む。デバイス100は、1つ以上の画像センサ164と、1つ以上の近接センサ166と、1つ以上の加速度計168とを含むことができる。デバイス100は、
図1に示されていない構成要素を含んでもよい。
【0012】
デバイス100は、電子デバイスの単なる一実施例であり、デバイス100は、上記に列挙したものより多い又は少ない構成要素を有することができ、それらの構成要素の一部は、1つの構成要素に組合わせる、又は異なる構成若しくは配置を有することができる。上記に列挙したデバイス100の様々な構成要素は、1つ以上の信号処理回路及び/又は特定用途向け集積回路(application specific integrated circuits)(ASIC)を含む、ハードウェア、ソフトウェア、ファームウェア、又はそれらの組合せで具現化される。
【0013】
図2は、一実施形態に係る、デバイス100の構成要素を示すブロック図である。デバイス100は、画像処理を含む様々な動作を実行することができる。この目的及び他の目的のために、デバイス100は、他の構成要素の中でもとりわけ、画像センサ202と、システムオンチップ(system-on-a chip)(SOC)構成要素204と、システムメモリ230と、永続的記憶装置(例えば、フラッシュメモリ)228と、動きセンサ234と、ディスプレイ216とを含むことができる。
図2に示すような構成要素は、単なる例示である。例えば、デバイス100は、
図2に示されていない他の構成要素(スピーカ又はマイクロフォンなど)を含んでもよい。更に、いくつかの構成要素(動きセンサ234など)は、デバイス100から省略されてもよい。
【0014】
画像センサ202は、画像データをキャプチャするための構成要素であり、例えば、相補的金属酸化物半導体(complementary metal-oxide-semiconductor)(CMOS)アクティブピクセルセンサ、カメラ、ビデオカメラ、又は他のデバイスとして、具現化することができる。画像センサ202は、更なる処理のためにSOC構成要素204に送信される生画像データを生成する。いくつかの実施形態では、SOC構成要素204によって処理された画像データは、ディスプレイ216上に表示され、システムメモリ230、永続的記憶装置228に記憶され、又は、ネットワーク接続を介してリモートコンピューティングデバイスに送信される。画像センサ202によって生成された生画像データは、ベイヤーカラーフィルタ配列(color filter array)(CFA)パターン(以降、「ベイヤーパターン」とも呼ばれる)とすることができる。
【0015】
動きセンサ234は、デバイス100の動きを感知するための構成要素又は構成要素のセットである。動きセンサ234は、デバイス100の向き及び/又は加速度を示すセンサ信号を生成することができる。センサ信号は、デバイス100をオンにする、又はディスプレイ216上に表示された画像を回転するなどの、様々な動作のためにSOC構成要素204に送信される。
【0016】
ディスプレイ216は、SOC構成要素204によって生成されたような画像を表示するための構成要素である。ディスプレイ216は、例えば、液晶ディスプレイ(liquid crystal display)(LCD)デバイス又は有機発光ダイオード(organic light emitting diode)(OLED)デバイスを含むことができる。SOC構成要素204から受信したデータに基づいて、ディスプレイ116は、メニュー、選択された動作パラメータ、画像センサ202によってキャプチャされSOC構成要素204によって処理された画像、及び/又はデバイス100のユーザインターフェース(図示せず)から受信した他の情報などの、様々な画像を表示することができる。
【0017】
システムメモリ230は、SOC構成要素204によって実行するための命令を記憶するため、及びSOC構成要素204によって処理されたデータを記憶するための構成要素である。システムメモリ230は、例えば、ダイナミックランダムアクセスメモリ(dynamic random access memory)(DRAM)、シンクロナスDRAM(synchronous DRAM)(SDRAM)、ダブルデータレート(double data rate)(DDR、DDR2、DDR3など)RAMBUS DRAM(RDRAM)、スタティックRAM(static RAM)(SRAM)、又はそれらの組合せを含む、任意の種類のメモリとして具現化することができる。いくつかの実施形態では、システムメモリ230は、ピクセルデータ又は他の画像データ若しくは統計を様々なフォーマットで記憶してもよい。
【0018】
永続的記憶装置228は、不揮発的にデータを記憶するための構成要素である。永続的記憶装置228は、電源が使用可能でないときでもデータを保持する。永続的記憶装置228は、読み出し専用メモリ(read-only memory)(ROM)、NAND若しくはNORフラッシュメモリ、又は他の不揮発性ランダムアクセスメモリデバイスとして具現化することができる。
【0019】
SOC構成要素204は、1つ以上の集積回路(integrated circuit)(IC)チップとして具現化され、様々なデータ処理プロセスを実行する。SOC構成要素204は、他のサブコンポーネントの中でもとりわけ、画像信号プロセッサ(image signal processor)(ISP)206、中央プロセッサユニット(central processor unit)(CPU)208、ネットワークインターフェース210、センサインターフェース212、ディスプレイコントローラ214、グラフィックプロセッサ(graphics processor)(GPU)220、メモリコントローラ222、ビデオエンコーダ224、ストレージコントローラ226、及び様々な他の入出力(I/O)インターフェース218、並びにこれらのサブコンポーネントを接続するバス232を含むことができる。SOC構成要素204は、
図2に示されるサブコンポーネントよりも多くの又は少ないサブコンポーネントを含んでもよい。
【0020】
ISP206は、画像処理パイプラインの様々なステージを実行するハードウェアである。いくつかの実施形態では、ISP206は、画像センサ202から生画像データを受信して、その生画像データをSOC構成要素204の他のサブコンポーネント又はデバイス100の構成要素によって使用可能なフォーマットに処理することができる。ISP206は、
図3を参照して以下に詳細に説明するように、画像変換演算、水平及び垂直スケーリング、色空間変換、並びに/又は画像安定化変換などの、様々な画像操作演算を実行することができる。
【0021】
CPU208は、任意の好適な命令セットアーキテクチャを使用して具現化してもよく、その命令セットアーキテクチャで定義された命令を実行するように構成されてもよい。CPU208は、x86、PowerPC、SPARC、RISC、ARM、若しくはMIPS命令セットアーキテクチャ(instruction set architectures)(ISA)、又は任意の他の好適なISAなどの様々なISAのいずれかを使用する汎用又は組み込み型プロセッサであってもよい。単一のCPUを
図2に示すが、SOC構成要素204は、複数のCPUを含むことができる。マルチプロセッサシステムでは、CPUの各々は、必ずしもそうではないが、同一のISAを共通して実装してもよい。
【0022】
グラフィック処理ユニット(Graphics processing unit)(GPU)220は、グラフィックデータを実行するためのグラフィック処理回路である。例えば、GPU220は、フレームバッファに表示されることになるオブジェクト(例えば、フレーム全体に対してピクセルデータを含むもの)をレンダリングすることができる。GPU220は、グラフィック演算の一部又は全てを実行するようにグラフィックソフトウェア又は特定のグラフィック演算のハードウェア高速化を実行することができる1つ以上のグラフィックプロセッサを含んでもよい。
【0023】
I/Oインターフェース218は、デバイス100の様々な入出力構成要素とインターフェースするためのハードウェア、ソフトウェア、ファームウェア、又はそれらの組合せである。I/O構成要素は、キーパッド、ボタン、オーディオデバイス、及び全地球測位システムなどのセンサなどのデバイスを含むことができる。I/Oインターフェース218は、データをそのようなI/O構成要素に送信するためにデータを処理する、又は、そのようなI/O構成要素から受信したデータを処理する。
【0024】
ネットワークインターフェース210は、1つ以上のネットワーク(例えば、キャリア又はエージェントデバイス)を介してデータをデバイス100と他のデバイスとの間で交換することを可能にするサブコンポーネントである。例えば、ビデオ又は他の画像データは、ネットワークインターフェース210を介して他のデバイスから受信して、(例えば、
図3に関して後述するような画像信号プロセッサ206へのバックエンドインターフェースを介した)後続の処理及び表示のためにシステムメモリ230に記憶してもよい。ネットワークとしては、ローカルエリアネットワーク(Local Area Networks)(LAN)(例えば、イーサネット(登録商標)又は企業ネットワーク)及びワイドエリアネットワーク(Wide Area Networks)(WAN)を挙げることができるが、これらに限定されない。ネットワークインターフェース210を介して受信した画像データは、ISP206によって画像処理プロセスにかけることができる。
【0025】
センサインターフェース212は、動きセンサ234とインターフェースするための回路である。センサインターフェース212は、動きセンサ234からセンサ情報を受信し、このセンサ情報を処理して、デバイス100の向き又は移動を判定する。
【0026】
ディスプレイコントローラ214は、ディスプレイ216上に表示されることになる画像データを送信するための回路である。ディスプレイコントローラ214は、ISP206、CPU208、グラフィックプロセッサ220、又はシステムメモリ230から画像データを受信し、ディスプレイ216上に表示するために好適なフォーマットに画像データを処理する。
【0027】
メモリコントローラ222は、システムメモリ230と通信するための回路である。メモリコントローラ222は、SOC構成要素204のISP206、CPU208、GPU220、又は他のサブコンポーネントによって処理するためにシステムメモリ230からデータを読み取ることができる。メモリコントローラ222はまた、SOC構成要素204の様々なサブコンポーネントから受信したデータをシステムメモリ230に書き込むことができる。
【0028】
ビデオエンコーダ224は、ビデオデータを永続的記憶装置128に記憶するために好適なフォーマットにエンコードするため、又はネットワークを介して別のデバイスに伝送するためにネットワークインターフェースw10にデータを渡すための、ハードウェア、ソフトウェア、ファームウェア、又はそれらの組合せである。
【0029】
いくつかの実施形態では、SOC構成要素204の1つ以上のサブコンポーネント又はこれらのサブコンポーネントのいくつかの機能は、ISP206、CPU208、又はGPU220上で実行されるソフトウェア構成要素によって実行することができる。そのようなソフトウェア構成要素は、システムメモリ230、永続的記憶装置228、又はネットワークインターフェース210を介してデバイス100と通信する別のデバイスに記憶することができる。
【0030】
画像データ又はビデオデータは、SOC構成要素204内の様々なデータ経路を介して流れることができる。一実施例では、生画像データは、画像センサ202から生成して、ISP206によって処理し、その後、バス232及びメモリコントローラ222を介してシステムメモリ230に送信することができる。画像データがシステムメモリ230に記憶された後で、画像データは、エンコードするためにビデオエンコーダ224によって、又は表示するためにディスプレイ116によって、バス232を介してアクセスすることができる。
【0031】
別の実施例では、画像データは、画像センサ202以外のソースから受信される。例えば、ビデオデータは、有線又は無線ネットワークを介してSOC構成要素204に、ストリーミングする、ダウンロードする、又は別の方法で通信することができる。画像データは、ネットワークインターフェース210を介して受信し、メモリコントローラ222を介してシステムメモリ230に書き込むことができる。その後、画像データは、
図3を参照して以下に詳細に説明するように、ISP206によってシステムメモリ230から取得して、1つ以上の画像処理パイプラインステージを介して処理することができる。その後、画像データは、システムメモリ230に戻す、又は、ビデオエンコーダ224、ディスプレイコントローラ214(ディスプレイ216上に表示するために)、若しくは永続的記憶装置228に記憶するためにストレージコントローラ226に送信することができる。
例示的な画像信号処理パイプライン
【0032】
図3は、一実施形態に係る、ISP206を用いて実施された画像処理パイプラインを示すブロック図である。
図3の実施形態では、ISP206は、生画像データを受信するために画像センサ202に結合される。ISP206は、出力する作成したもの、キャプチャしたもの、又は受信したものから画像情報を処理するステージのセットを含むことができる画像処理パイプラインを実装する。ISP206は、他の構成要素の中でもとりわけ、センサインターフェース302、中央制御320、フロントエンドパイプラインステージ330、バックエンドパイプラインステージ340、画像統計モジュール304、ビジョンモジュール322、バックエンドインターフェース342、及び出力インターフェース316を含むことができる。ISP206は、
図3に示されていない他の構成要素を含むことができる、又は、
図3に示す1つ以上の構成要素を省略することができる。
【0033】
1つ以上の実施形態では、ISP206の異なる構成要素は、画像データを異なる速度で処理する。
図3の実施形態では、フロントエンドパイプラインステージ330(例えば、ロー現像ステージ306及びリサンプリング処理ステージ308)は、画像データを初期速度で処理することができる。したがって、様々な異なる技術、調整、修正、又は他の処理演算は、これらのフロントエンドパイプラインステージ330によって初期速度で実行される。例えば、フロントエンドパイプラインステージ330がクロックサイクルごとに2つのピクセルを処理する場合、ロー現像ステージ308の演算(例えば、ブラックレベル補償(black level compensation)、ハイライトリカバリ(highlight recovery)、及び不良ピクセル補正)は、画像データの2つのピクセルを同時に処理してもよい。対照的に、1つ以上のバックエンドパイプラインステージ340は、画像データを初期データレート未満の異なる速度で処理することができる。例えば、
図3の実施形態では、バックエンドパイプラインステージ340(例えば、ノイズ処理ステージ310、カラー処理ステージ312、及び出力リスケーリング314)は、低減した速度(例えば、クロックサイクルごとに1ピクセル)で処理することができる。本明細書に記載される実施形態は、1つ以上のバックエンドパイプラインステージ340が初期データレートとは異なるレートで画像データを処理する実施形態を含むが、いくつかの実施形態では、バックエンドパイプラインステージ340は初期データレートで画像データを処理することができる。
【0034】
センサインターフェース302は、画像センサ202から生画像データを受信して、生画像データをパイプライン内の他のステージによって処理可能な画像データに処理する。センサインターフェース302は、画像データサイズを低減するために画像トリミング、ビニング、又はスケーリングなどの様々な前処理演算を実行することができる。いくつかの実施形態では、ピクセルは、画像センサ202からセンサインターフェース302にラスター順に(すなわち、水平に、1行ごとに)送信される。パイプライン内の後続のプロセスも、ラスター順に実行することができ、結果もまた、ラスター順に出力することができる。単一の画像センサ202及び単一のセンサインターフェース302のみが
図3に示されているが、2つ以上の画像センサがデバイス100に設けられている場合、それぞれの画像センサからの生画像データを処理するために、対応する数のセンサインターフェースをISP206に設けることができる。
【0035】
フロントエンドパイプラインステージ330は、ロードメイン又はフルカラードメインで画像データを処理する。フロントエンドパイプラインステージ330は、ロー現像ステージ306及びリサンプリング処理ステージ308を含むことができるが、これらに限定されない。生画像データは、例えば、ベイヤーローフォーマットとすることができる。ベイヤーロー画像フォーマットでは、特定の色(全ての色の代わりに)に対して特定の値を有するピクセルデータが、それぞれのピクセルに与えられる。画像キャプチャセンサでは、画像データは、典型的には、ベイヤーパターンで提供される。ロー現像ステージ308は、画像データをベイヤーローフォーマットで処理することができる。
【0036】
ロー現像ステージ308によって実行される演算としては、センサ線形化、ブラックレベル補償、固定パターンノイズ低減、不良ピクセル補正、ローノイズフィルタリング、レンズシェーディング補正、ホワイトバランスゲイン、及びハイライトリカバリが挙げられるが、これらに限定されない。センサ線形化は、他の処理のために非線形画像データを線形空間にマッピングすることを指す。ブラックレベル補償は、画像データのそれぞれの色成分(例えば、Gr、R、B、Gb)に対して独立にデジタルゲイン、オフセット、及びクリップを提供することを指す。固定パターンノイズ低減は、入力画像からダークフレームを減算し異なるゲインをピクセルに乗算することによってオフセット固定パターンノイズ及びゲイン固定パターンノイズを除去することを指す。不良ピクセル補正は、不良ピクセルを検出し、次に不良ピクセル値を置き換えることを指す。ローノイズフィルタリングは、輝度が類似の隣接したピクセルを平均化することによって画像データのノイズを低減することを指す。ハイライトリカバリは、他のチャネルからクリッピングされた(又は、ほぼクリッピングされた)それらのピクセルに対するピクセル値を推定することを指す。レンズシェーディング補正は、レンズの光学的中心からの距離にほぼ比例した明暗度の減少を補償するためにピクセルごとのゲインを適用することを指す。ホワイトバランスゲインは、全ての色成分(例えば、ベイヤーフォーマットのGr、R、B、Gb)に対して独立してホワイトバランスのためのデジタルゲイン、オフセット及びクリップを提供することを指す。ISP206の構成要素は、生画像データをフルカラードメインの画像データに変換することができ、したがって、ロー現像ステージ308は、生画像データに加えて又はその代わりに、フルカラードメインの画像データを処理することができる。
【0037】
リサンプリング処理ステージ308は、様々な演算を実行して、ロー現像ステージ306から受信した画像データを変換、リサンプリング、又はスケーリングする。リサンプリング処理ステージ308によって実行される演算としては、デモザイク演算、ピクセルごと色補正演算、ガンママッピング演算、色空間変換、及び縮小又はサブバンド分割を挙げることができるが、これらに限定されない。デモザイク演算は、生画像データから欠落した色サンプルを(例えば、ベイヤーパターンに)変換又は補間して、画像データをフルカラードメインに出力することを指す。デモザイク演算は、フルカラーピクセルを得るための補間されたサンプルに対するローパス指向性フィルタリングを含むことができる。ピクセルごと色補正演算は、それぞれの色チャネルの相対ノイズ標準偏差に関する情報を用いてピクセルごとに色補正を実行して、画像データ内のノイズを増幅することなしに色を補正するプロセスを指す。ガンママッピングは、画像データを入力画像データ値から出力データ値に変換して、ブラック及びホワイト変換、セピア階調変換、ネガティブ変換、又は露光変換を含む、特殊画像効果を実行することを指す。ガンママッピングの目的のために、それぞれのピクセルの異なる色成分又はチャネルに対するルックアップテーブル(又はピクセル値を別の値にインデックス付けする他の構造)(例えば、Y、Cb、及びCrの色成分に対する別個のルックアップテーブル)を使用することができる。色空間変換は、入力画像データの色空間を異なるフォーマットに変換することを指す。一実施形態では、リサンプリング処理ステージ308は、更なる処理のためにRBDフォーマットをYCbCrフォーマットに変換する。
【0038】
中央制御320は、ISP206内の他の構成要素の全体の演算を制御して連係させることができる。中央制御320は、ISP206の他の構成要素の開始及び停止を制御するために、様々な演算パラメータを監視すること(例えば、クロックサイクル、メモリ待ち時間、サービスの品質、及び状態情報をログ記録すること)、ISP206の他の構成要素に対する制御パラメータを更新又は管理すること、及びセンサインターフェース302とインターフェースすることを含むがこれらに限定されない演算を実行する。例えば、中央制御320は、他の構成要素がアイドル状態にある間に、ISP206内の他の構成要素に対するプログラム可能なパラメータを更新することができる。プログラム可能なパラメータを更新した後で、中央制御320は、ISP206のこれらの構成要素を実行状態にして、1つ以上の演算又はタスクを実行することができる。中央制御320はまた、リサンプリング処理ステージ308の前、その間、又はその後に、(例えば、
図2のシステムメモリ230に書き込むことにより)画像データを記憶するようにISP206の他の構成要素に命令することができる。このようにして、リサンプリング処理ステージ308からの画像データ出力を、バックエンドパイプラインステージ340を介して処理することに加えて又はその代わりに、ロー又はフルカラードメインフォーマットのフル解像度の画像データを記憶することができる。
【0039】
画像統計モジュール304は、様々な動作を実行して、画像データに関連付けられた統計情報を収集する。統計情報を収集するための動作としては、センサ線形化、マスクパターン化不良ピクセル、サブサンプル生画像データ、非パターン化不良ピクセルの検出及び置き換え、ブラックレベル補償、レンズシェーディング補正、並びに逆ブラックレベル補償を挙げることができるが、これらに限定されない。そのような動作のうちの1つ以上を実行した後で、3A統計(オートホワイトバランス(Auto white balance)(AWB)、自動露出(auto exposure)(AE)、オートフォーカス(auto focus)(AF))などの統計情報、ヒストグラム(例えば、2Dカラー若しくは成分)、又は任意の他の画像データ情報が収集又は追跡されてもよい。いくつかの実施形態では、特定のピクセルの値又はピクセル値のエリアは、先行する動作がクリップされたピクセルを識別する場合、特定の統計データ(例えば、AF統計)の収集から除外することができる。単一の統計モジュール304のみが
図3に示されているが、複数の画像統計モジュールがISP206に含まれていてもよい。そのような実施形態では、それぞれの統計モジュールは、同じ又は異なる画像データに対して異なる情報を収集するように中央制御320によってプログラムすることができる。
【0040】
ビジョンモジュール322は、様々な演算を実行して、画像データ内の貌面検出などのCPU208でのコンピュータビジョン演算を容易にする。ビジョンモジュール322は、前処理、包括的階調マッピング及びガンマ補正、ビジョンノイズフィルタリング、リサイズ、キーポイント検出、畳み込み、並びに配向勾配ヒストグラム(HOG)の生成を含む、様々な演算を実行することができる。前処理は、入力画像データがYCrCbフォーマットでない場合、サブサンプリング又はビニング演算、及びルミナンスの計算を含むことができる。包括的マッピング及びガンマ補正は、ルミナンス画像に対して前処理したデータに対して実行することができる。ビジョンノイズフィルタリングは、ピクセル不良を除去して画像データ内に存在するノイズを低減し、それによって後続のコンピュータビジョンアルゴリズムの品質及び性能を向上するために実行される。そのようなビジョンノイズフィルタリングは、ドット又は不良ピクセルを検出して修復すること、及び類似の輝度の隣接するピクセルを平均化することによりノイズを低減するために双方向フィルタリングを実行することを含むことができる。様々なビジョンアルゴリズムは、異なるサイズ及びスケールの画像を使用する。画像のリサイズは、例えば、ビニング又は線形補間動作により実行される。キーポイントは、同じシーン又は対象物の他の画像内のマッチングに良好に適合した画像パッチによって囲まれた画像内の位置である。そのようなキーポイントは、画像位置調整、裁判官室姿勢を計算すること、及び対象物追跡に有用である。キーポイント検出は、画像内のそのようなキーポイントを特定するプロセスを指す。畳み込みは、画像/ビデオ処理及びマシンビジョンにおいて使用することができる。畳み込みは、例えば、画像のエッジマップを生成する又は画像を平滑化するために実行することができる。HOGは、画像解析及びコンピュータビジョンのタスクのための画像パッチの記述を提供する。HOGは、例えば、(i)簡単な差分フィルタを用いて水平及び垂直勾配を計算すること、(ii)水平及び垂直勾配から勾配の向き及び大きさを計算すること、並びに(iii)勾配の向きをビニングすることにより、生成することができる。
【0041】
バックエンドインターフェース342は、画像センサ202以外の画像ソースから画像データを受信し、それを処理のためにISP206の他の構成要素に転送する。例えば、画像データは、ネットワーク接続を介して受信して、システムメモリ230に記憶することができる。バックエンドインターフェース342は、システムメモリ230に記憶された画像データを取り出して、それを処理のためにバックエンドパイプラインステージ340に提供する。バックエンドインターフェース342によって実行される多くの演算のうちの1つは、取り出された画像データをバックエンド処理ステージ340によって利用することができるフォーマットに変換することである。例えば、バックエンドインターフェース342は、RGB、YCbCr 4:2:0、又はYCbCr 4:2:2にフォーマットされた画像データをYCbCr 4:4:4カラーフォーマットに変換することができる。
【0042】
バックエンドパイプラインステージ340は、特定のフルカラーフォーマット(例えば、YCbCr 4:4:4又はRGB)に従って画像データを処理する。いくつかの実施形態では、バックエンドパイプラインステージ340の構成要素は、更なる処理の前に、画像データを特定のフルカラーフォーマットに変換することができる。バックエンドパイプラインステージ340は、他のステージの中でもとりわけ、ノイズ処理ステージ310及びカラー処理ステージ312を含むことができる。バックエンドパイプラインステージ340は、
図3に示されていない他のステージを含むことができる。
【0043】
ノイズ処理ステージ310は、様々な演算を実行して、画像データ内のノイズを低減する。ノイズ処理ステージ310によって実行される演算としては、色空間変換、ガンマ/デガンママッピング、時間フィルタリング、ノイズフィルタリング、ルマ鮮鋭化、及びクロマノイズ低減が挙げられるが、これらに限定されない。色空間変換は、画像データを1つの色空間フォーマットから別の色空間フォーマットに変換(例えば、RGBフォーマットをYCbCrフォーマットに変換)することができる。ガンマ/デガンマ演算は、特殊画像効果を実行するために、画像データを入力画像データ値から出力データ値に変換する。時間フィルタリングは、ノイズを低減するために、前にフィルタリングされた画像フレームを用いてノイズをフィルタリングする。例えば、前の画像フレームのピクセル値が、現在の画像フレームのピクセル値と混合される。ノイズフィルタリングは、例えば、空間ノイズフィルタリングを含むことができる。ルマ鮮鋭化は、ピクセルデータのルマ値を鮮鋭化することができ、クロマ抑制は、クロマをグレー(すなわち、色がない)に減衰させることができる。いくつかの実施形態では、ルマ鮮鋭化及びクロマ抑制は、空間ノーズフィルタリングと同時に実行することができる。ノイズフィルタリングの度合(aggressiveness)は、画像の異なる領域に対して異なって判定されてもよい。空間ノイズフィルタリングは、時間フィルタリングを実装する時間ループの一部に含まれてもよい。例えば、前の画像フレームは、処理されることになる次の画像フレームに対する参照フレームとして記憶される前に時間フィルタ及び空間ノイズフィルタによって処理されてもよい。他の実施形態では、空間ノイズフィルタリングは、時間フィルタリングに対する時間ループの一部として含まれなくてもよい(例えば、空間ノイズフィルタは、画像フレームが参照画像フレームとして記憶された後にそれに適用されてもよい(よって、空間的にフィルタリングされた参照フレームではない))。
【0044】
カラー処理ステージ312は、画像データ内の色情報を調整することに関連付けられた様々な演算を実行することができる。カラー処理ステージ312で実行される演算としては、局所階調マッピング、ゲイン/オフセット/クリップ、色補正、3次元カラールックアップ、ガンマ変換、及び色空間変換が挙げられるが、これらに限定されない。局所階調マッピングは、画像をレンダリングするときの更なる制御を提供するために、空間的に変化する局所階調曲線を指す。例えば、階調曲線の2次元グリッド(中央制御320によってプログラミングすることができる)は、円滑に変化する階調曲線が画像にわたって生成されるように双線形的に補間されてもよい。いくつかの実施形態では、局所階調マッピングはまた、例えば、画像内のシャドウの青色を暗くしながら空をより青くするために使用することができる、空間的に変化し、かつ明暗度が変化する色補正行列を適用してもよい。デジタルゲイン/オフセット/クリップは、画像データの色チャネル又は成分ごとに提供されてもよい。色補正は、色補正変換行列を画像データに適用することができる。3Dカラールックアップは、拡張型階調マッピング、色空間変換、及び他の色変換を実行するために、色成分出力値(例えば、R、G、B)の3次元アレイを利用してもよい。ガンマ変換は、例えば、ガンマ補正、階調マッピング、又はヒストグラムマッチングを実行するために、入力画像データ値を出力データ値にマッピングすることにより、実行することができる。色空間変換は、1つの色空間から別へ(例えば、RGBからYCbCrに)画像データを変換するために実行されてもよい。他の処理技術がまた、ブラック及びホワイト変換、セピア階調変換、ネガティブ変換、又は露光変換を含む、他の特殊画像効果を実行するようにカラー処理ステージ312の一部として実行されてもよい。
【0045】
出力リスケーリングモジュール314は、ISP206が画像データを処理するにつれて動作中(on the fly)の歪みをリサンプリング、変換及び補正してもよい。出力リスケーリングモジュール314は、ピクセルごとの部分的入力座標を計算して、多相リサンプリングフィルタを介して出力ピクセルを補間するためにこの部分的座標を使用してもよい。部分的入力座標は、画像をリサイズ又はトリミングすること(例えば、単純な水平及び垂直スケーリング変換を介して)、画像を回転及び刈り取ること(例えば、非分離可能行列変換を介して)、視点ワーピング(perspective warping)(例えば、追加の幅変換を介して)、及び画像データのキャプチャの間に画像センサにおける変化を原因とするストリップ(例えば、ロールシャッタに起因した)に区分的に適用されるピクセルごとの視野分割(per-pixel perspective divides)、並びに幾何学的歪み補正(例えば、補間された放射ゲインテーブルをインデックス付けするために光学的中心からの放射距離を計算すること、及び放射レンズ歪みを原因とする放射状摂動を座標に適用することを介して)など、出力座標の様々な考えられる変換から生成されてもよい。
【0046】
出力リスケーリングモジュール314は、出力リスケーリングモジュール314で画像データが処理される際に、画像データに変換を適用することができる。出力リスケーリングモジュール314は、水平及び垂直スケーリング成分を含むことができる。設計の垂直部分は、垂直フィルタによって必要とされる「支持」を保持するために、画像データ線バッファの列を実装することができる。ISP206をストリーミングデバイスとすることができるので、行の有限長のスライディングウィンドウ内の画像データの行のみをフィルタが使用するために利用可能であってもよい。新しい入力行のための余裕を設けるために行が破棄されると、その行は、利用可能でなくてもよい。出力リスケーリングモジュール314は、前の行にわたる計算された入力Y座標を統計的に監視し、それを使用して垂直支持ウィンドウを保持するために行の最適なセットを計算することができる。それぞれの後続の行に対して、出力リスケーリングモジュールは、垂直支持ウィンドウの中心に関する推量を自動的に生成することができる。いくつかの実施形態では、出力リスケーリングモジュール314は、画像フレームのキャプチャ中のセンサの動きによって生じたアーチファクト及び動きを補正するために、入力画像データと出力画像データとの間のピクセルごとの視野変換を実行するデジタル微分解析器(digital difference analyzer)(DDA)ステッパとしてエンコードされた区分的視野変換のテーブルを実装することができる。出力リスケーリングは、
図1及び2に関して上述したように、出力インターフェース314を介してシステム100の様々な他の構成要素に画像データを提供することができる。
【0047】
各種実施形態では、構成要素302〜342の機能は、
図3に示す画像処理パイプライン内のこれらの機能的ユニットの順序によって暗示された順序とは異なる順序で実行されてもよく、又は
図3に示すユニットとは異なる機能的構成要素によって実行されてもよい。更に、
図3に記載されたような様々な構成要素は、ハードウェア、ファームウェア、又はソフトウェアの様々な組合せで具現化することができる。
例示的なビジョンモジュール
【0048】
ビジョンモジュール322は、
図3を参照して上述したように、CPU208でのコンピュータビジョン演算を容易にするために、様々な演算を実行する。この目的のために、ビジョンモジュール322は、他の構成要素の中でも、
図4に示すように、配向勾配(HOG)モジュール412のヒストグラム、マルチプレクサ420、及び畳み込みエンジン414を含んでもよい。ビジョンモジュール322は、スケーリングモジュールなどの
図4に図示されていない他の構成要素を含んでもよい。
【0049】
HOGエンジン400は、画像を処理して、画像ごとにHOGデータ426を生成する。HOGデータ426の例は、画像内の特定された勾配配向に基づいて画像に対して生成されるヒストグラム配向勾配である。HOGデータ426は、画像分類、シーン検出、表情検出、ヒト検出、対象物検出、シーン分類、及びテキスト分類などの様々なコンピュータビジョン用途で使用することができる。
【0050】
マルチプレクサ420は、HOGエンジン412からHOGデータ426を受信し、HOGエンジン412(例えば、DRAMメモリ)以外の画像処理プロセッサ206の構成要素からピクセルデータ424を受信し、様々な演算モードに従って、畳み込みエンジン414に送られる入力データ422としてのHOGデータ426又はピクセルデータ424のいずれかを選択する。1つのモードでは、マルチプレクサ420は、入力データ422として、HOGデータ426を畳み込みエンジン414に転送し得る。別のモードでは、マルチプレクサ420は、鮮鋭化、ぼかし、及びエッジ検出などの演算を実行するための入力データ422として、ピクセルデータ424を畳み込みエンジン414に転送することができる。マルチプレクサ420を制御するための構成信号は、中央制御320から受信されてもよい。ピクセルデータ422は、複数のチャネルのインターリーブピクセル値のストリームである。
【0051】
畳み込みエンジン414は、入力データ422に対して畳み込み演算を実行する構成可能回路である。この目的のために、
図5を参照して以下詳述するように、畳み込みエンジン414は、畳み込みカーネル情報を記憶する、計算を実行する、及び乗算値を累算して出力428を生成するための構成要素を含む。
【0052】
図4に示されるようなビジョンモジュール322の構造は単なる例示に過ぎず、様々な変更を
図4の構造体に加えることができる。例えば、HOGエンジン412及びマルチプレクサ420などの構成要素は省略されてもよい。あるいは、マルチプレクサ420は、3つ以上のソースからピクセルデータを受信し、ストリーム入力データ422として畳み込みエンジン414に入力するための1つのソースを選択することができる。
【0053】
以下の説明では、入力データ422は説明上、ピクセル値であると仮定する。しかしながら、入力データ422は、畳み込み演算に適した他の種類のデータ(例えば、HOGデータ)であってもよいことに留意されたい。
例示的な畳み込みエンジンアーキテクチャ
【0054】
図5は、一実施形態に係る、畳み込みエンジン414を示すブロック図である。畳み込みエンジン414は、画像/ビデオ処理及びコンピュータビジョンを容易にするために、インターリーブされたマルチチャネル画像データに対する演算を実行する回路である。畳み込みエンジン414は、畳み込み演算、チャネル間処理演算、及びチャネルごとの処理演算などの、マルチチャネル画像データに対して様々なタイプの演算を実行することができる。例示的な畳み込み操作は、エッジマップ又は平滑化画像を生成することを含み得る。例えば、ガウスカーネルと畳み込まれた画像は、ノイズ及びエイリアスを低減した平滑な画像を生成することができる。別の実施例では、畳み込みエンジン414は、画像が1組の複数の方向性畳み込みカーネルで畳み込まれたときに分類するためのガボール特徴などの画像特徴を生成する。更に、いくつかの実施形態では、畳み込みエンジン414は、人又は物体の検出などの深層機械学習分類タスクのためのテンプレートマッチングを容易にする。
【0055】
畳み込みエンジン414は、空間プーリング及び局所応答正規化などの畳み込みニューラルネットワーク(CNN)タスクを容易にする様々な演算を実行する。CNNは、画像分類、物体検出、及びその他のコンピュータビジョンタスクを実行することができる深層学習アーキテクチャである。
【0056】
畳み込みエンジン414は、例えばバス232から入力データ422を受信し、記憶された畳み込みカーネル情報に基づいて入力データ422に対して畳み込み演算を実行し、畳み込み演算の結果にチャネル間及びチャネルごとの処理を実行し、出力データ428を生成する。
【0057】
畳み込みエンジン414は、他の構成要素の中でもとりわけ、第1の畳み込み回路502と、デマルチプレクサ回路503と、第2の畳み込み回路504と、チャネルマージ回路506とを含み得る。畳み込みエンジン414は、いくつかの実施形態では、第1の畳み込み回路502及び第2の畳み込み回路504を含むものとして示されているが、畳み込みエンジン414はN個の畳み込み回路を含んでもよい。第1の畳み込み回路502は入力データ422のストリームを受信し、1つ以上の畳み込みカーネルを入力データ422に適用して、値530のストリームを生成する。第2の畳み込み回路504はまた、入力データ422のストリーム(あるいは、第1の畳み込み回路502から出力された値530のストリーム)を受信し、1つ以上の畳み込みカーネルを入力データ422に適用して、値532のストリームを生成する。畳み込み回路502又は504によって受信及び処理された入力データのストリームはそれぞれ、入力データの1つ以上のチャネルをインターリーブ方式で定義する。
【0058】
第1の畳み込み回路502は、マルチプレクサ508と、前処理回路510と、畳み込みコア回路512と、空間プーリング回路514とを含む。マルチプレクサ508は前処理回路510に連結され、前処理回路510は畳み込みコア回路512に連結され、畳み込みコア回路512は空間プーリング回路514に連結される。
【0059】
マルチプレクサ508は、バス232から入力データ422を受信し、前処理回路510に入力データ422を提供する。いくつかの実施形態では、マルチプレクサ508は、バス232から入力データ424と1つ以上の他のデータソース(例えば、HOGデータ426)の間で選択し、選択されたデータを前処理回路510に提供する。他の実施形態では、マルチプレクサ508は第1の畳み込み回路502から省略され、前処理回路510は、バス232から入力データ424を受信する。
【0060】
前処理回路510は、例えば、入力データ422にゲイン、オフセット、及びクリッピング演算を適用することによって、インターリーブされた入力データ422に対して前処理演算を実行する。これらの演算は、平均減算又はコントラスト拡張などの畳み込み前に各種処理を適用するために使用することができる。いくつかの実施形態では、前処理回路510は、入力データ422のストリームからの各チャネルの値を特定し、各チャネルを個々に扱い、異なるチャネルの入力値に異なるゲイン、オフセット、又はクリッピング演算を適用する。例えば、入力データ422は、インターリーブされたGr、R、B、及びGbチャネルを含むベイヤー生フォーマットであってもよい。前処理回路510は、異なるチャネルのピクセルデータに異なるゲイン、オフセット、又はクリッピング演算を適用することができる。いくつかの実施形態では、前処理回路510は、前処理演算を適用することなく入力を畳み込みコア回路512に送信するバイパスモードで演算する。
【0061】
畳み込みコア回路512は、前処理回路510から前処理された入力データを受信し、1つ以上の畳み込みカーネルを入力データに適用する。畳み込みコア回路512は、畳み込み結果に対して後処理を実行することもできる。後処理は、マルチチャネル正規化相互相関(NCC)又はチャネル間局所応答正規化(LRN)などの深層機械学習に関して導出される値を生成する演算を含んでもよい。マルチチャネル又はチャネル間演算は、畳み込み結果のために2つ以上のチャネルからの値を結合する。畳み込みコア回路512によって生成されるストリームにおける値のシーケンスは、インターリーブ方式で複数のデータチャネルを定義する。畳み込みコア回路512の結果は、空間プーリング回路514に提供される。いくつかの実施形態では、畳み込みコア回路512の結果は、値436のストリームによって示されるように、畳み込みエンジン414から出力される。
【0062】
空間プーリング回路514は、チャネルごとの空間プーリング及びチャネルごとの局所応答正規化(LRN)などのチャネルごとの演算を、畳み込みコア回路512の出力に対して実行し、値530のストリームを出力する。チャネルごとの演算は、各チャネルに個々に関連付けられた値を処理する。チャネルごとのLRNは、応答マップ内の局所コントラストを正規化する。チャネルごとの演算が、深層機械学習を容易にするために、畳み込み層の後に適用されてもよい。空間プーリング回路514のチャネルごとの演算は、通常は小さいローカルウィンドウに適用され、畳み込みカーネル係数を使用しないため、畳み込み層と比較して計算コストが低い。
【0063】
第2の畳み込み回路504は、マルチプレクサ518と、前処理回路520と、畳み込みコア回路522と、空間プーリング回路525とを含む。第1の畳み込み回路502に関する上記の説明は、第2の畳み込み回路504及び畳み込みエンジン414に含まれ得る任意の他の畳み込み回路に適用され得る。MUX518は、第1の畳み込みコア回路502から出力された値530のストリームとバス232からの入力値422の間で選択し、選択された入力を前処理回路520に送信する。両ストリームがインターリーブ方式でデータチャネルを含むため、第2の畳み込み回路504は、値530のストリーム又は入力値424のストリームのいずれかに類似演算を適用することができる。前処理回路520、畳み込みコア回路522、及び空間プーリング回路524の演算及び機能は、前処理回路510の畳み込みコア回路512及び空間プーリング回路514とほぼ同じであるため、これらの回路の詳細な説明は簡潔化のため本明細書では省略する。
【0064】
デマルチプレクサ回路503は、値530のストリームを受信し、その出力をチャネルマージ回路506又は第2の畳み込み回路504のいずれかにルーティングする回路である。デマルチプレクサ503は、中央制御320からの命令に基づいてルーティングを選択することができる。中央制御320は、演算モードに基づいて、畳み込み回路502及び504が直列に演算するカスケードモードと、畳み込み回路502及び504が並列に演算する他のモードの間のデマルチプレクサ503の選択を設定する。いくつかの実施形態では、デマルチプレクサ回路503は、畳み込みエンジン414から省略される。
【0065】
チャネルマージ回路506は、第1の畳み込み回路502の出力に連結された入力と、第2の畳み込み回路504の出力に連結された別の入力と、を有する。チャネルマージ回路506は、畳み込み回路502及び504から値530及び532のストリームをそれぞれ受信し、それらの値を、値428a及び428bのストリームなどの出力値428の1つ以上の出力ストリームに結合する。畳み込み回路502及び504から受信される値のストリームは、
図6A〜6Cに関連してより詳細に後述するように、畳み込みエンジン414に関して選択される演算モードに応じて様々な方法で処理され得る。
【0066】
チャネルマージ回路506は、チャネルマージャ526及びマルチプレクサ528を含む。チャネルマージャ526は、第1の畳み込みコア回路502から値530のストリームを受信し、第2の畳み込みコア回路504から値532のストリームを受信し、値530及び532をインターリーブして値534のストリームを生成する。値534のストリームは、チャネルマージャ526によってインターリーブ方式で結合されるように、値530のストリームからのチャネルと値532のストリームからのチャネルとを含む。
【0067】
マルチプレクサ528は、チャネルマージャ526からの値534のストリームに連結される入力と、第2の畳み込みコア回路504からの値532のストリームに連結される入力とを有する。マルチプレクサ528は、値428bのストリームとして出力するため、値534のストリームと値532のストリームの間で選択する。チャネルマージ回路506は、値428aのストリームとして第1の畳み込み回路502から値530のストリームを出力することもできる。
畳み込みエンジン処理モード
【0068】
畳み込みエンジン414は、二重畳み込みモード、カスケードモード、及び並列モードを含む複数のモードで演算する。中央制御320は、指定モードで演算させるように畳み込みエンジン414を構成する構成情報を畳み込みエンジン414に送信する。構成情報は、畳み込みエンジン414の構成要素への命令を含む。構成情報は、畳み込み回路502及び504のそれぞれによって使用される畳み込みカーネルなど、構成要素の入力及び機能を指定してもよい。
【0069】
図6Aは、一実施形態に係る、畳み込みエンジン414の二重畳み込みモードを示すブロック図である。二重畳み込みモードでは、畳み込み回路502及び504は、異なる畳み込みカーネルを同じ入力データ424に適用することによって並列演算し、チャネルマージ回路506は、畳み込み回路502及び504からの結果を結合して出力値428bの出力ストリームを生成する。各畳み込みカーネルに関連付けられるプロパティは、フィルタ要素値、畳み込みカーネルのカーネルサイズ(例えば、カーネルによって定義されるウィンドウのピクセルの高さ及び幅)、畳み込みカーネルのスパース値、及び畳み込み間のステップ値を含み得る。第1の畳み込み回路502から出力された値530のストリーム、及び第2の畳み込み回路504から出力される値532のストリームは、チャネルマージ回路506に入力される。チャネルマージ回路506は、出力値530及び532をインターリーブすることによって出力値428bの出力ストリームを生成する。値428bの出力ストリームは、二重畳み込みモードで畳み込みエンジン414から出力される。
【0070】
いくつかの実施形態では、中央制御320は、マルチプレクサ508、518、528、及びデマルチプレクサ503による選択を制御してデータストリームをルーティングすることによって、畳み込みエンジン414を二重畳み込みモードに設定する。デマルチプレクサ503は、使用される場合、値530のストリームを、出力値428aの出力ストリームとして出力されるチャネルマージ回路506にルーティングする。マルチプレクサ518は、第2の畳み込み回路504の入力として、第1の畳み込み回路502から出力された値530のストリームを選択する。マルチプレクサ528は、出力値428bの出力ストリームのため、チャネルマージャ526から出力された値534のストリームを選択する。マルチプレクサ508は、使用される場合、第1の畳み込み回路502の入力として、バス232から入力データ424を選択する。
【0071】
二重畳み込みモードは、2つの畳み込みコア回路502及び504上で同じ入力ストリームを並列処理する畳み込みエンジン414の構成である。畳み込み回路502及び504は、入力データに異なる畳み込みカーネルを適用することができる。多くの出力チャネルの計算を容易にするために、畳み込みエンジン414は、畳み込み回路502と504との間で処理タスクを分配する。例えば、第1の畳み込み回路502が出力チャネルの第1の半分を処理し得る一方、第2の畳み込み回路504が出力チャネルの第2の半分を処理し得る。チャネルマージ回路506は、畳み込み回路502及び504からの複数のチャネルのストリームを、相互にインターリーブされた両ストリームからのチャネルを有する単一のストリームに結合する。
【0072】
いくつかの実施形態では、畳み込み回路502及び504はそれぞれ2つの実行クラスタを有し、各実行クラスタは1クロック当たりピクセル値(ppc)を生成する。よって、各畳み込み回路502及び504は、2ppcを生成する。チャネルマージ回路506は、畳み込み回路502及び504の結果を結合して、二重畳み込みモードでのチャネルマージ後に4ppc出力を生成する。
【0073】
図6Bは、一実施形態に係る、畳み込みエンジン414のカスケードモードを示すブロック図である。カスケードモードでは、畳み込み回路502及び504は直列演算する。第1の畳み込み回路502は、1つ以上の畳み込みカーネルをバス232から入力データ422に適用して、値530のストリームを生成する。第2の畳み込み回路504は、値530のストリームを受信し、1つ以上の第2の畳み込みカーネルを値530に適用して、値532のストリームを生成する。畳み込み回路502及び504は、異なる畳み込みカーネルを使用してもよい。チャネルマージ回路506は、畳み込み回路504から値532のストリームを通過することによって出力値428bの出力ストリームを生成する。
【0074】
中央制御320は、マルチプレクサ508、518、528、及びデマルチプレクサ503による選択を制御することによって、畳み込みエンジン414をカスケードモードに設定する。マルチプレクサ508は、使用される場合、第1の畳み込み回路502の入力として、バス232から入力データ424を選択する。デマルチプレクサ503は、使用される場合、値530のストリームをマルチプレクサ518にルーティングする。マルチプレクサ518は、第2の畳み込み回路504の入力として、畳み込みエンジン414から出力された値530のストリームを選択する。マルチプレクサ528は、出力値428bの出力ストリームの第2の畳み込み回路504から出力された値532のストリームを選択する。
【0075】
カスケードモードでは、畳み込み回路502及び504は、演算間のメモリ転送を行うことなく、直列で2つの畳み込み演算を実行する。カスケード内の第1の畳み込み回路502は、2つの実行クラスタのうちの1つのみを使用することにより1ppcを生成する。第1の畳み込み回路502が2ppc出力ストリームを生成する場合、後続の第2の畳み込み回路504は、4ppcを2回処理する必要がある。したがって、単一の実行クラスタが第1の畳み込み回路502内で使用されて、第2の畳み込み回路504に入力される1ppcのストリームを生成する。第2の畳み込み回路504は、第1の畳み込み回路502の1ppcのストリームから2ppcの出力ストリームを生成する。
【0076】
図6Cは、一実施形態に係る、畳み込みエンジン414の並列モードを示すブロック図である。並列モードでは、畳み込み回路502及び504は、2つの別個のインターリーブ出力ストリームを生成するため、2つの単一ユニットとして並列演算する。例えば、画像は、2つの垂直ストリップに分割されてもよく、畳み込み回路502及び504はそれぞれ1つのストリップを処理する。畳み込み回路502及び504は、同じ入力データ又は異なる入力データを処理することができる。入力データが同じである場合、畳み込み回路502及び504は、入力データに異なる畳み込みカーネルを適用することができる。別の実施例では、畳み込み回路502及び504は、異なる入力データに異なるカーネルを適用する。
【0077】
第1の畳み込み回路502は、1つ以上の畳み込みカーネルをバス232から入力データ422に適用して、値530のストリームを生成する。第2の畳み込み回路504は、1つ以上の第2の畳み込みカーネルをバス232から入力データ422に適用して、値532のストリームを生成する。チャネルマージ回路506は、値530のストリームを通過することによって出力値428aの出力ストリームを生成し、値532のストリームを通過することによって出力値428bの出力ストリームを生成する。別個の出力ストリーム428a及び428bはそれぞれ、インターリーブ方式で複数のデータチャネルを定義してもよい。並列モードでは、畳み込み回路502及び504からの出力は、インターリーブチャネルの単一のストリームに結合されるのではなく、インターリーブチャネルの別個のストリームに保持される。
【0078】
中央制御320は、マルチプレクサ508、518、528、及びデマルチプレクサ503における選択を制御することによって、畳み込みエンジン414を並列モードに設定する。マルチプレクサ508は、使用される場合、第1の畳み込み回路502の入力として、バス232から入力データ422を選択する。デマルチプレクサ503は、使用される場合、出力値428aの出力ストリームとして出力するために、第1の畳み込み回路502の出力からチャネルマージ回路506に値530のストリームをルーティングする。マルチプレクサ518は、第2の畳み込み回路504の入力としてバス232から入力データ422を選択する。マルチプレクサ528は、チャネルマージ回路506の出力値428bの出力ストリームのために、第2の畳み込み回路504から出力された値532のストリームを選択する。チャネルマージ回路506はまた、値530のストリームを出力値428aの出力ストリームに送信する。
【0079】
並列モードでは、各畳み込み回路502及び504は、2つの実行クラスタを使用して2ppcを生成することができる。チャネルマージ回路506は、第1の畳み込み回路502から2ppcで第1のストリームを出力し、第2の畳み込み回路504から2ppcで第2のストリームを出力する。
【0080】
図7は、一実施形態に係る、複数のモードで畳み込みエンジン414を演算させる方法を示すフローチャートである。中央制御320は、構成情報を畳み込みエンジン414に送信する702。構成情報は、畳み込みエンジンを、二重畳み込みモード、カスケードモード、又は直列モードなどの特定の演算モードに設定する畳み込みエンジンの構成要素のパラメータを含んでもよい。
【0081】
構成情報は、畳み込みコア回路502及び504のそれぞれに入力される値のストリームを定義する情報を更に含んでもよい。例えば、構成情報は、畳み込みエンジン414の構成要素が直列ストリームから各チャネルのピクセルを識別することができるように、画像サイズ及び/又はチャネルカウントを定義することができる。
【0082】
構成情報は、フィルタ要素値、カーネルサイズ、スパース値、及びステップ値など、各畳み込みコア回路502及び504によって使用される1つ以上の畳み込みカーネルを定義する情報を更に含んでもよい。畳み込みカーネルを定義する構成情報は、畳み込みコア回路502及び504のそれぞれによって実行される畳み込み演算を指定する。
【0083】
構成情報を受信した後、畳み込みエンジン414の構成は、構成情報に従って更新され704、構成情報に記載されているような演算を実行する。構成の更新は、選択された演算モードに従って、畳み込みエンジン内でストリームをルーティングすることを含み得る。ルーティング制御は、
図6A〜6Cに関連して上述したように、畳み込みエンジン414のマルチプレクサ508、518、及び528を使用して設定され得る。構成の更新は、畳み込みカーネルを畳み込み回路502及び504に提供することを含み得る。畳み込み回路502及び504は、上述の演算モードに応じて1つ又は2つの実行クラスタを使用するように構成されてもよい。
【0084】
いくつかの実施形態では、構成命令は、チャネルマージ前に各畳み込み回路502及び504において、畳み込み結果に対して実行される1つ以上の深層学習演算を更に定義することができる。例示的な演算は、正規化相互相関計算、応答整流、空間プーリング、及び局所応答正規化を含み得る。いくつかの実施形態では、チャネル間演算は、畳み込みコア回路502及び504の後処理回路704によって実行され得る一方で、チャネルごとの演算は空間プーリング回路514及び524によって実行される。
【0085】
畳み込みエンジン414の第1の畳み込み回路502は、1つ以上の第1の畳み込みカーネルを第1の入力データに適用することによって、第1の値のストリームを生成する706。畳み込みエンジン414の第2の畳み込み回路504は、1つ以上の第2の畳み込みカーネルを第2の入力データに適用することによって、第2の値のストリームを生成する708。第1及び第2の入力データの生成は、畳み込みを実行することを含んでもよく、畳み込みコア回路512/522の後処理回路又は空間プーリング回路514/524を用いて1つ以上の深い学習演算を適用することを含んでもよい。
【0086】
二重畳み込みモードでは、畳み込み回路502及び504によって使用される第1及び第2の入力データは同じであってもよく、第1及び第2の畳み込みカーネルは異なっていてもよい。カスケードモードでは、第2の畳み込み回路504によって使用される第2の入力データは、第1の畳み込み回路502の出力であり、第1及び第2の畳み込みカーネルは異なっていてもよい。並列モードでは、第1及び第2の入力データは同じであってもよく、第1及び第2の畳み込みカーネルは異なっていてもよい。
【0087】
チャネルマージ回路は、第1の畳み込み回路502からの第1の値のストリーム及び第2の畳み込み回路504からの第2の値のストリームに基づいて、1つ以上の出力ストリームを生成する710。二重畳み込みモードでは、チャネルマージ回路710は、第1の畳み込み回路502からのインターリーブチャネル値のインターリーブされた第1のストリームと、第2の畳み込み回路504からのインターリーブチャネル値の第2のストリームとをインターリーブ方式で結合することにより出力ストリームを生成する。カスケードモードでは、チャネルマージ回路710は、第2の畳み込み回路504からのインターリーブチャネル値の第2のストリームを含む出力ストリームを生成し、インターリーブチャネル値の第2のストリームは、第2の畳み込み回路504においてインターリーブチャネル値の第1のストリームに1つ以上の第2の畳み込みカーネルを適用することによって導出される。直列モードでは、チャネルマージ回路710は、第1の畳み込み回路502からのインターリーブチャネル値の第1のストリームを含む第1の出力ストリームと、第2の畳み込み回路504からのインターリーブチャネル値の第2のストリームを含む別個の第2の出力ストリームとを生成する。
【0088】
図7に示すプロセスは、単なる例示に過ぎず、様々な変更を該プロセスに加えることができる。例えば、第1の値のストリームの生成706と、第2の値のストリームの生成708は、畳み込みエンジン414の構成情報及び演算モードによって指定されるように、並列又は直列で実行され得る。
畳み込みコア回路
【0089】
図8は、一実施形態に係る畳み込みコア回路800を示すブロック図である。畳み込みコア回路800は、
図5に示されるように、第1の畳み込み回路502の畳み込みコア回路512又は第2の畳み込み回路504の畳み込み回路522の一例である。畳み込みコア回路800は、畳み込みコア802及び後処理回路804を含む。畳み込みコア802は入力データ836を受信し、入力データ836に1つ以上の畳み込みカーネルhを適用することによって畳み込み演算を実行する。入力データ836は、バス323からの入力データ422、別の畳み込み回路の出力、又は何らかの他のソースからの入力データであってもよく、上述したように前処理回路510によって前処理されてもよい。後処理回路804は、畳み込みコア802の出力に対して後処理を実行する。
【0090】
畳み込みコア回路802は、畳み込みフロントエンド806と、カーネルメモリ808と、実行クラスタ810と、実行クラスタ812と、畳み込みバックエンド814とを含む。畳み込みフロントエンド806は、実行クラスタ810及び812に連結される。畳み込みフロントエンド806は、入力データ836を受信し、実行クラスタ810及び812による処理のために入力データ836を準備する。畳み込みフロントエンド806は、入力データ及び畳み込みカーネルを含む処理タスクを、実行クラスタ810及び812にわたって分配する。
【0091】
実行クラスタ810及び812はそれぞれ、畳み込みフロントエンド及びカーネルメモリ808に連結される。各実行クラスタ810及び812は、複数の積和演算(MAC)ユニットを含んでもよい。複数の出力チャネルが使用される場合、偶数インデックスを有する出力チャネルが一方の実行クラスタによって処理され得る一方、偶数インデックスを有する出力チャネルが他方の実行クラスタによって処理され得る。各実行クラスタ810及び812は1ppcを生成することができるため、全体として畳み込みコア802は2ppcを生成することができる。実行クラスタ810は、偶数インデックス出力チャネルを含む偶数データ値842のストリーム、及び奇数インデックス出力チャネルを含む奇数データ値844のストリームを生成する。
【0092】
カーネルメモリ808は、実行クラスタ810及び812に提供される1つ以上の畳み込みカーネルhを記憶する。いくつかの実施形態では、中央制御320は、1つ以上の畳み込みカーネルhをカーネルメモリ808に提供して、畳み込み演算を制御する。各実行クラスタ810及び812は、畳み込みフロントエンド806によって準備されるように、カーネルメモリ808からの畳み込みカーネルを入力データ836に適用する。実行クラスタ810及び812は、例えば2ppcで出力値を生成するために並列に実行され得る。いくつかの実施形態では、単一の実行クラスタ810又は812のみが、例えば1ppcで出力値を生成することが可能である。
【0093】
一実施例では、実行クラスタ810及び812は、一連の畳み込みカーネルを入力データの異なる部分に適用して、偶数インデックス出力チャネルを含む偶数データ値842のストリーム、及び奇数インデックス出力チャネルを含む奇数データ値844のストリームを生成する。偶数データ値842及び奇数データ値844はマルチチャネルデータであり、局所応答正規化及び正規化相互相関などのチャネル間演算を用いて後処理パイプラインにおいて別々に処理される。
【0094】
いくつかの実施形態では、畳み込みフロントエンド806は、カーネルメモリ808に記憶され、実行クラスタ810及び812によって処理される畳み込みカーネルに関するカーネル統計値840を生成する。カーネル統計値は、畳み込みカーネルのプロパティから導出され得る。カーネル統計値840はΣH及びΣH
2を含んでもよく、ここで、Hは畳み込みカーネルのカーネルデータである。畳み込みコア802は、カーネル統計値840を後処理回路804に送信する。
【0095】
畳み込みバックエンド814は、実行クラスタ810及び812の出力に連結される。畳み込みバックエンド814は、各実行クラスタからの出力値の更なる処理を実行する。このような演算としては、大ビットサイズデータのマルチサイクル累算が挙げられるが、これらに限定されない。
【0096】
いくつかの実施形態では、畳み込みコア802の畳み込みバックエンド814又は何らかの他の構成要素は、入力データ836に基づいて局所統計値を生成する。ローカル統計値は、ΣI、ΣI
2、及びΣI
*Hを含んでもよく、Iは入力データ836であり、Hは入力データ836に適用される畳み込みカーネルである。いくつかの実施形態では、ローカル統計値は、偶数データ値842のストリーム及び奇数データ値844のストリームを介して、後処理回路804に送信される。例えば、局所統計値は、マルチチャネルストリームの最後のアクティブチャネルなどのストリーム842及び844の補助チャネルであってもよい。他の実施形態では、ローカル統計値は、カーネル統計値840を有するストリームで、又は別個のストリームで送信されてもよい。
【0097】
したがって、畳み込みコア802は、偶数データ値842のストリーム、奇数データ値844のストリーム、カーネル統計値840、及び局所統計値を生成する。これらの値は、追加処理のために後処理回路804に提供される。畳み込みコア802の例示的な回路を、
図10に関連してより詳細に後述する。
【0098】
後処理回路804は、それぞれの出力ストリーム842及び844を処理する実行クラスタ810及び812の処理パイプラインを含む。実行クラスタ810からストリーム842を処理するために、後処理回路804は、マルチチャネル正規化相互相関(NCC)ユニット816と、応答整流ユニット818と、チャネル間局所応答正規化(LRN)ユニット820と、出力生成ユニット822とを含む。実行クラスタ812からストリーム844を処理するために、後処理回路804は、マルチチャネルNCCユニット824と、応答整流ユニット826と、チャネル間LRNユニット828と、出力生成ユニット830とを含む。後処理回路804は、ピークファインダ843、デマルチプレクサ832、及びコアマージャ846を更に含んでもよい。
【0099】
マルチチャネルNCCユニット816は、偶数データ値842のストリームに関するNCCスコア及び正規化カーネル統計値を計算する。マルチチャネルNCCユニット816は畳み込みコア802に連結されて、偶数データ値842のストリーム、ローカル統計値、及びカーネル統計値840を受信する。マルチチャネルNCCユニット816は、偶数データ値842、ローカル統計値、及びカーネル統計値840に基づいて、各畳み込みカーネルのNCCスコアを判定する。
【0100】
マルチチャネルNCCユニット816は、各畳み込みカーネルのNCCスコアを計算することができる。NCCスコアは、局所統計値によって定義される入力の分散によって、及びカーネル統計値によって定義されるカーネルの分散によって正規化される。NCCスコアを使用して、2つのフレーム間の最良の対応を見出すことができる。
【0101】
各畳み込みカーネルでは、NCCスコアは、式1によって定義され得る。
【数1】
式中、Iは入力データであり、Hはカーネルデータであり、M
I及びM
Hは、I及びHの平均であり、σ
I及びσ
Hは、I及びHの標準偏差であり、Nは畳み込みカーネルのサイズである。ゼロで割ることを回避して量子化誤差を低減するために、追加のスケール及びオフセット係数が適用されてもよい。
【0102】
マルチチャネルNCCユニット816は、正規化カーネル統計値を計算してもよい。例えば、マルチチャネルNCCユニット816は、等式2によって定義されるカーネル統計値を計算する。
(NΣH
2−(ΣH)
2) (2)
式中、Nは畳み込みカーネルのサイズであり、Hはカーネルデータである。式2は、式1の分母の一部を形成し、したがって、NCCスコアを計算する過程でカーネル統計値を計算することができる。
【0103】
正規化カーネル統計値は、スケール係数を用いて処理されたカーネル統計値のスケール版である。スケール係数は、式3によって定義され得る。
【数2】
式中、Nは、畳み込みカーネルのサイズである。スケール係数は、カーネル統計値をカーネルサイズとは無関係に正規化する。マルチチャネルNCCユニット816は、正規化カーネル統計値852及び/又はNCCスコアをピークファインダ834に送信する。
【0104】
応答整流ユニット818は、マルチチャネルNCCユニット816に連結されている。応答整流ユニット818は、データ値842のストリームを受信し、データ値842への非線形変換を実行する。非線形変換は、高水準記述特徴の深層機械学習を容易にする。応答整流ユニットへ入力されるデータ値842のストリームは、マルチチャネルNCCユニット816から送信され得る。いくつかの実施形態では、マルチチャネルNCCユニット816は、後処理回路804から省略され、応答整流ユニット818が実行クラスタからデータ値842のストリームを受信する。
【0105】
図9は、一実施形態に係る、応答整流ユニット818によって適用される非線形変換のグラフである。応答整流ユニット818は、値842のストリームを入力として受信し、オフセットパラメータ912を値842に適用する。オフセットパラメータ912は、深層学習アーキテクチャにおける畳み込み層の後に適用されるバイアスをモデル化するように選択され得る。オフセットの適用後、応答整流ユニット818は、構成可能スケーリング係数904に基づいて、スケーリングを負入力値に適用する。応答整流ユニット818は、整流されたデータ値のストリームを出力する。いくつかの実施形態では、応答整流ユニット818は、負の値を0にクリップする。他の実施形態では、応答整流ユニット818は、負の値を正の値に変換する。
【0106】
図8を再び参照すると、応答整流ユニット818は、異なるチャネルに対して異なるオフセット及びスケーリングパラメータを適用することができる。応答整流ユニット818のパラメータは、中央制御320によって指定され得る。いくつかの実施形態では、中央制御320は、応答整流ユニット818の作動を非アクティブ化させることができる。ここで、応答整流ユニット818は、後処理パイプラインにおける値のストリームのバイパスとして演算することができる。いくつかの実施形態では、応答整流ユニット818は、後処理回路804から省略される。
【0107】
チャネル間LRNユニット820は、応答整流ユニット818に連結され、応答整流ユニット818の出力に対してチャネル間LRNを実行する。具体的には、チャネル間LRNユニット820は、データ値842のストリーム及び局所統計値を受信し、局所応答正規化を実行して、データ値の正規化畳み込み出力ストリームを生成する。チャネル間LRNユニット820は、深層学習アーキテクチャで使用される処理を容易にする。チャネル間LRNユニット1200は、式4によって定義される演算の固定点近似を実行することができる。
【数3】
(式中、x
iはピクセルインデックス値であり、αは正規化の強度であり、i’はx
iの周りのローカルウィンドウ内のピクセルのインデックスであり、Nは、ウィンドウ内のピクセルの数である。ローカルウィンドウのサポートはチャネル間であり、したがって平面フォーマットの矩形領域として表される。チャネル間LRNユニット820が、後処理段階でチャネル間LRNを実行して、インターリーブチャネルの直列ストリームを活用する一方、チャネルごと正規化は空間プーリング回路514などによって別個に処理される。
【0108】
出力生成ユニット822は、チャネル間LRNユニット820に連結されている。出力生成ユニット822は、チャネル間LRNユニット820の出力にスケール、オフセット、及びシフトを適用する。
【0109】
奇数値844のストリームの後処理パイプラインは、偶数値842のストリームの処理パイプラインとほぼ同じように演算することができるため、これらの回路の詳細な説明は簡潔化のため本明細書では省略する。
【0110】
コアマージャ846は、偶数及び奇数のチャネルを有する偶数及び奇数のストリーム842及び844(例えば、後処理後)を、インターリーブ方式で偶数及び奇数チャネルを含むデータ値848のストリームに結合する。コアマージャ847は、出力生成ユニット822と出力生成ユニット830とに連結される。
【0111】
後処理回路804は、デマルチプレクサ832を更に含んでもよい。デマルチプレクサ832は、出力生成ユニット830に連結され、出力生成ユニット830からコアマージャ846へ(出力ストリーム848への結合のために)値のストリームを提供する、又は出力ストリーム850として提供する。値848のストリームは、実行クラスタ810及び812の両方からのピクセル値を結合するため、コアマージャ846は、例えば2ppcの出力を生成する。値850のストリームは、実行クラスタ812からの値のみを使用して生成され、したがって、例えば、1ppcで生成されてもよい。
図6A〜6Cに関連して上述したように、畳み込みコア回路800は、畳み込みエンジン414の異なる演算モードで1ppc又は2ppcを生成するように設定され得る。
【0112】
ピークファインダ834は、第1の後処理パイプラインのマルチチャネルNCCユニット816及び出力生成ユニット822に連結され、第2の後処理パイプラインのマルチチャネルNCCユニット824及び出力生成ユニット830に連結される。いくつかの実施形態では、正規化カーネル統計値は、テンプレート整合結果の信頼性の信頼度測定値として使用することができる。ピークファインダ834は、正規化カーネル統計値852及び畳み込み結果を受信し、NCCスコアに基づいてテンプレートにとっての最良一致位置を提供する位置を判定する。ピークファインダ843は、所定の基準に基づいて位置を判定する。例えば、ピークファインダ843は、選択されたチャネルの最小又は最大ピクセル位置を見出すことができる。高次元特徴ベクトルのリストが入力データとして与えられるとき、ピークファインダは、畳み込みコアによって評価される距離メトリックに基づいて原点に最も近いベクトルを見つけることができる。
【0113】
いくつかの実施形態では、ピークファインダ834は、出力生成ユニット822及び830からのデータのストリームを監視する。選択されたチャネルに関して、ピークファインダ834は、ストリーム内のチャネルの各値にアクセスして、最小値又は最大値を有する位置を追跡する。選択された出力チャネルは、NCCスコア又は任意の他の畳み込み結果を含んでもよい。チャネルがNCCスコアを含む場合(例えば、マルチチャネルNCCユニット816が選択チャネルに対して有効化される場合)、ピークファインダ834は、ピーク位置及びピークNCCスコアと共に正規化カーネル統計値を出力する。NCCが有効でない場合、ピークファインダ834は、ピーク位置及びピーク値を出力する。
【0114】
いくつかの実施形態では、中央制御320は、畳み込みコア回路800の畳み込みコア802及び後処理回路804に構成情報を送信する。構成命令は、各後処理回路804の各パイプラインに対する後処理命令を含んでもよく、畳み込みコア802からの畳み込み結果に適用される後処理を定義することができる。
【0115】
後処理命令は、マルチチャネルNCCユニット、応答整流ユニット、チャネル間LRNユニット、又はピークファインダが有効化されるか又は無効化されるかを定義する。いくつかの実施形態では、後処理回路804は、後処理命令によって指定される複数のモードで演算する。NCCモードでは、マルチチャネルNCCユニットが有効化され、チャネル間LRNユニットが無効化される。LRNモードでは、マルチチャネルNCCユニットが無効化され、チャネル間LRNユニットが有効化される。混合LRN/NCCモードでは、マルチチャネルNCCユニット及びチャネル間LRNユニットが有効化される。パススルーモードでは、マルチチャネルNCCユニット及びチャネル間LRNユニットが無効化される。後処理パイプラインにおいて無効化された構成要素は、ストリームを処理することなく、後処理パイプライン内の次の構成要素にその入力データストリームを送ることができる。
【0116】
図10は、一実施形態に係る畳み込みコア802のブロック図である。上述したように、畳み込みコア802は、畳み込みフロントエンド806、実行クラスタ810及び812、並びに畳み込みバックエンド814などの回路を含む。
【0117】
畳み込みフロントエンド806は、入力バッファ1002と、データパスルータ1006と、シーケンサ1018と、カーネル統計値ユニット1024とを含み得る。入力バッファ1002は、畳み込みフロントエンド806にストリーミングされる際に入力データ836を記憶する。入力データ836は、インターリーブ方式で複数の入力チャネルのデータを伴うストリーム値であってもよい。入力データ836は、ピクセルデータ、HOGデータ、畳み込み回路800の前サイクルの出力、別の畳み込み回路800の出力、又はデバイス100の他の構成要素から受信した他のデータであってもよい。
【0118】
データパスルータ1006は、スキャンシーケンス内の入力バッファ1002の所定位置でデータセット1004を読み出し、畳み込み値の計算のために、読み出したデータ1008を実行クラスタ810又は812に送信する回路である。データパスルータ1006は、畳み込みカーネルを用いた並列処理のために、入力データ836の異なる部分を実行クラスタ810及び812に送信することができる。本明細書に記載されるスキャンシーケンスは、入力データのサブセットを処理する演算を指す。データパスルータ1006は、畳み込みエンジン414の処理サイクル内の複数のスキャンシーケンスに対するデータの読取及び送信を実行して、実行クラスタ810及び812をピクセル値でポピュレートすることができる。一実施形態では、データパスルータ1006は、スパース値に従って他の隣接ピクセルをスキップしながら、中心ピクセルのピクセル値と、中心ピクセルに隣接するサブセットのピクセルのピクセル値とを選択的に読み出す。更に、スキャンシーケンス内で処理される中心ピクセルは、ステップ値によって定義されるピクセル数により分離されてもよい。後続スキャンでは、同じ又は異なるピクセル数によって分離された、新しいセットの中心ピクセルが処理されてもよい。
【0119】
カーネルメモリ808は、カーネル情報を記憶する回路である。カーネル情報は、畳み込みカーネル内のフィルタ要素の値、スパース値、ステップ値、カーネルサイズなどを含む。カーネル情報1022は、実行クラスタ810に送信されて、実行クラスタ810の乗算回路FE0〜FEN内のレジスタをポピュレートする。カーネル情報1022はまた、実行クラスタ812に送信されて、実行クラスタ812の乗算回路FE0〜FEN内のレジスタをポピュレートする。カーネルメモリ808は、ピクセルデータの様々なチャネルで畳み込みを実行するため、及び/又は同じピクセルデータチャネルで畳み込みを実行するために、複数の畳み込みカーネルを記憶することができる。
【0120】
実行クラスタ810及び812は、演算を実行するプログラム可能回路である。この目的のために、実行クラスタ810及び812は、乗算回路FE0〜FEN、圧縮器1010、及びマルチサイクル累算器1014を含み得る。乗算回路FE0〜FENのそれぞれは、読み取られたデータ1008内のピクセル値及びカーネルメモリ808内の対応するフィルタ要素値を記憶することができる。ピクセル値及び対応するフィルタ要素値は乗算回路で乗算されて、乗算値1009を生成する。いくつかの実施形態では、圧縮器1010は、乗算値1009を受信し、乗算値1009のサブセットを累算して、圧縮値1012を生成する。他の実施形態では、乗算値1009のサブセットを累算する代わりに、圧縮器1010は、乗算値1009の各サブセットから(i)最小値、(ii)最大値、又は(iii)中央値を選択することができる。マルチサイクル累算器1014は、圧縮値1012を受信し、畳み込みコア802の複数の処理サイクルにわたって生成された圧縮値1012上で、累算(又は最小値、最大値、若しくは又は中央値)を実行する。
【0121】
畳み込みフロントエンド806に戻ると、シーケンサ1018は、畳み込みコア802の他の構成要素の演算を制御して、複数の演算サイクルを実行する。シーケンサ1018は、実行クラスタ810と812とに処理タスクを効率的に分配することができる。上述したように、実行クラスタ810及び812は、一連の畳み込みカーネルを入力データの異なる部分に適用して、偶数インデックス出力チャネルを含む偶数データ値842のストリーム、及び奇数インデックス出力チャネルを含む奇数データ値844のストリームを生成することができる。例えば、カーネルメモリ808は、乗算回路FE0〜FENに記憶されたピクセルデータの各セットについて、畳み込みカーネルのシーケンスのフィルタ要素を提供する。各畳み込みカーネルは、偶数データ値842及び奇数データ値844の異なる出力チャネルを生成する。
【0122】
シーケンサ1018の演算の別の例では、入力データのサイズ及び/又は畳み込みカーネルの数若しくはサイズは、実行クラスタの単一処理サイクルで全ての計算を実行するには大きすぎる場合がある。シーケンサ1018は、偶数出力チャネルと奇数出力チャネルとの間で演算を分割し、実行クラスタ810への偶数チャネル用の処理タスクと実行クラスタ812への奇数チャネル用の処理タスクとに分配する。
【0123】
いくつかの実施形態では、入力データのサイズ及び/又は畳み込みカーネルの数又はサイズは、両方の実行コアを使用して、畳み込みコア802の単一の処理サイクルで全ての計算を実行するには大きすぎる場合がある。そのような場合、シーケンサ1018は、演算を複数のバッチに分割し、単一サイクルにおける入力データのサブセット又は畳み込みカーネルのサブセットに基づいて計算を実行する。各サイクルでの計算結果は、マルチサイクル累算器1014によって処理され、複数サイクルにわたって出力値1013を生成する。マルチサイクル演算を実行するように他の構成要素を構成するために、シーケンサ1018は、マルチサイクル制御信号1019を他の構成要素に送信する。
【0124】
畳み込みバックエンド814は、出力バッファ1024と、大型データハンドラ1028と、出力バッファ1030と、大型データハンドラ1032とを含む。出力バッファ1024は、出力値1013を指定位置に記憶する回路である。一実施形態では、複数の出力チャネルのための一連の出力値が、出力バッファ1024内にインターリーブされる。実行クラスタ810の出力値1015が再び畳み込みフロントエンド806の入力データ836としてフィードバックされる演算では、出力バッファ1024内のデータは、次の畳み込み演算サイクルのために入力バッファ1002にコピーされ得る。出力バッファ1024は、実行クラスタ810の出力値1013を処理し、出力バッファ1030は、実行クラスタ812の出力値1013を処理する。
【0125】
大型データハンドラ1032は、出力バッファ1024に記憶された出力値の更なる処理を実行する回路である。例えば、畳み込みコア802は、8ビット又は16ビット精度など、様々なビットサイズを有する入力データ及び畳み込みカーネルを処理することができる。入力データ又は畳み込みカーネルのいずれかが16ビット精度を有する場合、各出力ピクセルに2倍のクロックサイクル数が使用される。入力データ及び畳み込みカーネルの両方が16ビット精度を有する場合、4倍を超えるクロックサイクルが使用される。畳み込みバックエンド814は、複数のクロックサイクルからの8ビットピクセルデータ畳み込み結果を、16ビット精度を有するデータにマージすることができる。大型データハンドラ1032は、実行クラスタ812から出力バッファ1024に記憶された出力値に対して同様の処理を実行することができる。偶数データ値842のストリームは、大型データハンドラ1028から出力され、奇数データ値844のストリームは、大データハンドラ1032から出力される。いくつかの実施形態では、大型データハンドラ1028及び1032は、畳み込みバックエンド814から省略される。偶数及び奇数データ値842及び844のストリームは、出力バッファ1024及び1030からそれぞれ出力される。小さいデータサイズは、機械推論タスク又は低精度のデータを使用することができる他のタスクに関するより高速な処理をサポートすることができる。対照的に、大きいデータサイズは、機械訓練又は高精度のタスクに使用することができる。
【0126】
畳み込みコア802内の構成要素(及び畳み込みエンジン414の他の構成要素)は、構成情報を中央制御320から受信することによって構成され得る。構成情報において指示される構成可能パラメータ及びモードは、スパース値、ステップ値、ピクセルデータ値とフィルタ要素とのマッピング、圧縮器1010で実行される演算の種類(例えば、累積、最小、最大、又は中央値)、入力データ又は出力値のチャネル数、及び後処理回路804で実行される後処理演算の選択を含むが、これらに限定されない。
【0127】
図10の畳み込みコア802の構造は、単なる例示に過ぎない。例えば、マルチサイクル累算器1014は、単一サイクル演算のみが畳み込みエンジンで実行されるように省略されてもよい。
【0128】
図11Aは、一実施形態に係る、マルチ平面フォーマットの畳み込みコア回路800の入力及び出力を例示する概念図である。畳み込みコア回路800は、マルチチャネル入力データ1102上で畳み込みを行い、マルチチャネル出力データ1110を生成する。入力チャネル及び出力チャネルの数は異なっていてもよい。
図11Aに示されるマルチ平面フォーマットは、別個の画像面として各入力及び出力チャネルを表す。マルチチャネル入力データ1102は、3つの入力チャネル1104、1106、及び1108のピクセル値を有する。各入力チャネル1104、1106、及び1108は、1つ以上のカーネルで処理することができる。例えば、
図11Aに示すように、畳み込みカーネル
0〜
3の4つの畳み込みカーネルをチャネル1106に適用することにより、4つの出力チャネル1112、1114、1116、及び1118を含むマルチチャネル出力データ1110が得られる。同じ4つの畳み込みカーネル0〜3が、チャネルごとに(例えば、スパースカーネルを使用して)入力チャネル1104、1106、及び1108のそれぞれに適用される場合、マルチチャネル出力は、12個の合計出力チャネルに関して、処理される各入力チャネルのために4つのチャネルを含むことになる。異なる畳み込みカーネルを使用して、それぞれの別個の出力チャネルを生成することができる。畳み込みカーネルのサイズ、スパース値、及びステップ値は、異なる用途にとって異なるタイプの畳み込みを可能にするように柔軟であり得る。
【0129】
図11Bは、一実施形態に係る、平面フォーマットの畳み込みコア回路800の入力及び出力を示す概念図である。マルチチャネル入力データ1102及びマルチチャネル出力データ1110はそれぞれ、各チャネルの対応するピクセル値(
図11B中の異なる斜線パターンのボックスによって特定される)がストリーム内で相互に隣接するインターリーブ方式で複数チャネルのストリームによって定義され、続いて、平面フォーマットによって示されるようにラスター方式で次のピクセルの各チャネルの対応するピクセル値が続く。平面フォーマットは、インターリーブチャネルの単一画像面として表される複数のインターリーブチャネルからの画像を含む。
【0130】
マルチチャネル入力データ1102は、異なるチャネルからの相関ピクセル値が平面フォーマットで互いに隣接するストリームによって定義される。例えば、第1のチャネルピクセル1124の第2のチャネルピクセル1126、及び第3のチャネルピクセル1128は、マルチチャネル入力データ1102によって定義された入力画像の第1の(0,0)ピクセルを表す。マルチチャネル入力データ1102の次のピクセル(0,1)のピクセル値は、ピクセル1124、1126、及び1128に続く。次のピクセル(0,1)は、第1のチャネルピクセル1130、第2のチャネルピクセル132、及び第3のチャネルピクセル1134を含む。第1の行(0)の後続のピクセルは、それに応じて(0,1)ピクセルに従うことができる。後続の行(1)のピクセル値は、第1の行のピクセル値に従うことができる。例えば、第2の行(1,0)内の第1のピクセルは、第1のチャネルピクセル1136、続いて第2のチャネルピクセル1138、続いて第3のチャネルピクセル1140を含む。
【0131】
一実施例では、マルチチャネル入力データ1102の入力チャネルは、RGB色チャネルを含む。別の実施例では、マルチチャネル入力データ1102は、YCbCr色チャネルを含んでもよい。別の実施例では、マルチチャネル入力データ1102は、畳み込みカーネルで導出される畳み込み結果の出力チャネルを含み得る。
【0132】
マルチチャネル出力データ1110は、畳み込みカーネル1150などの畳み込みカーネルを適用することによってマルチチャネル入力データ1102から導出される。マルチチャネル出力データ1100は、平面フォーマットによって示されるように、ストリーム内で互いに隣接する異なる出力チャネルからの相関ピクセル値のストリームを含む。例えば、出力チャネルピクセル1142、1144、1146、及び1148は、出力データ1110の(0,0)ピクセルに対応する。出力チャネルピクセル1142、1144、1146、及び1148は、
図11Aに示すように、出力チャネル1112、1114、1116、及び1118にそれぞれ属する。したがって、直列ストリームは、ラスター方式で出力データ1110のインターリーブチャネルを定義することができる。
【0133】
畳み込みエンジン414がカスケードモードで演算するとき、畳み込みコア回路800は、
図6Bに関連して上述したような入力として、別の畳み込みコア回路800の出力を使用する。畳み込みコア回路800のマルチチャネル入力データ1102及びマルチチャネル出力データ1110は、畳み込みコア回路800の出力データを別の畳み込みコア回路800の入力データとして使用するモードを含む、複数の演算モードを容易にする共通のインターリーブ形式を有する。
チャネルごとの空間プーリング及び正規化
【0134】
図12は、一実施形態に係る、空間プーリング回路1200を示すブロック図である。空間プーリング回路1200は、複数のインターリーブチャネルを有するストリーム上でチャネルごとの空間プーリング又は正規化演算を実行し、複数のインターリーブチャネルの出力ストリームも生成する。
図5に関連して上述したように、畳み込み回路502及び504はそれぞれ、空間プーリング回路514及び空間プーリング回路524を含み、それぞれの畳み込みコア回路512及び522の出力ストリームを処理する。空間プーリング回路1200は、第1の畳み込み回路502の空間プーリング回路512、又は第2の畳み込み回路504の空間プーリング回路524の一実施形態である。中央制御320からの命令に従って、空間プーリング回路1200は、入力インターリーブチャネルの一部又は全てに対して、チャネルごと空間プーリング及び/又はチャネルごとの局所応答正規化を実行する。
【0135】
空間プーリング回路1200は、入力バッファ1202と、ピクセルごとの計算ブロック1204と、列圧縮器1206と、列累算バッファ1208と、行圧縮器1210と、遅延装置1222と、並びに空間プーリング及び正規化(SPN)プロセッサ1212とを含む。SPNプロセッサ1212は、平方根ユニット1214と、局所応答正規化ユニット(LRN)1216と、マルチプレクサ1218と、SPNポストプロセッサ1220とを含む。
【0136】
入力バッファ1202は、畳み込みコア回路512から値1232のストリームを受信し、入力データを記憶する。入力データは、インターリーブ方式で複数のチャネルを定義するデータ値のストリームを含み、これらのデータ値はストリーム内に受信される際に入力バッファ1202に記憶される。入力バッファ1202は、チャネルごとの処理を容易にするために、同じチャネルの複数のピクセル値を記憶する。空間プールピクセルを生成するために、入力バッファ1202は、少なくとも十分な入力ピクセル値を記憶してローカルウィンドウに適合するようにサイズを決められる。複数のインターリーブチャネルからのピクセル値が単一の画像面として表される平面フォーマットでは、ローカルウィンドウは、単一のチャネルに対してのみピクセル値を選択するスパース性を有する。空間的にプールされる同じチャネルのピクセル値の数を定義するローカルウィンドウのサイズ(例えば、高さ又は幅)は、例えば、中央制御320からの命令によって構成可能であり得る。ローカルウィンドウの中心ピクセル間のピクセル空間を定義するローカルウィンドウの水平方向ストライドも、例えば、中央制御320からの命令によって構成可能であり得る。入力バッファ1202は、チャネルのピクセル値が1つ以上の他のチャネルのピクセル値によって分離されるインターリーブチャネルのストリームを受信するため、複数のチャネルのそれぞれに対して複数のピクセル値を記憶する。
【0137】
ローカルウィンドウは、空間プールピクセル値に空間的にプールされる単一チャネルの複数のピクセル値を含み得る。空間プールピクセルごとに、空間プーリング回路1200は、ローカルウィンドウの列からのピクセル値を結合する列プーリングを実行し、次いで、ローカルウィンドウの列プール値を結合する行プーリングを実行する。「行」及び「列」は、平面画像の垂直ピクセルラインを指し、必ずしも特定の水平方向又は垂直配向を指すものではないことに留意されたい。
【0138】
空間プールピクセルごとに、ピクセルごとの計算1204は、入力バッファ1202からローカルウィンドウのチャネルのデータ値を取り出し、データ値に対する演算を実行する。この演算は、データ値にオフセットを適用すること、データ値を二乗すること、又はデータ値の絶対値を決定することを含み得る。
【0139】
列圧縮器1206は、ローカルウィンドウの列に関連付けられたピクセルごとの演算1204からの複数のデータ値を、列を表す単一の空間プール値に結合する。列圧縮器1206は、中央制御320によって指定され得るように、複数のデータ値を様々な方法で結合することができる。例えば、列圧縮器1206は、最小値、最大値を選択してもよく、又は値を合計に結合してもよい。
【0140】
列累算バッファ1208は、列圧縮器1204から複数の空間プール列値を受信し、空間プール列ピクセル値を記憶する。例えば、列累算バッファ1208は、ローカルウィンドウの各列の少なくとも空間プール列値を記憶する。
【0141】
行圧縮器1210は、ローカルウィンドウの各列の空間プール列値を結合する。列圧縮器1206と同様に、行圧縮器1210は、中央制御320によって指定され得るように、複数のデータ値を様々な方法で結合することができる。例えば、行圧縮器1210は、最小値、最大値を選択してもよく、又は値を合計に結合してもよい。行圧縮器1210の出力は、ローカルウィンドウの各ピクセルから導出された空間プール値を表す。
【0142】
SPNプロセッサ1202は、行圧縮器1210から受信した空間プール値を処理する。例えば、SPNプロセッサ1202は、空間プール値の平方根を判定することができる。SPNプロセッサ1202は、空間プール値を使用して、入力ストリーム1222に対して局所応答正規化を代替的又は追加的に実行してもよい。
【0143】
SPNプロセッサ1202は、平方根ユニット1214と、LRNユニット1216と、マルチプレクサ1218と、及びSPNポストプロセッサ1220とを含む。平方根ユニット1214は、行圧縮器1210から空間プール値の平方根を算出する。
【0144】
LRNユニット1216は、行圧縮器からの空間プール値を遅延装置1222に格納されている入力値に適用することによって局所応答正規化を実行して、チャネルごと正規化値を生成する。遅延装置1222は、空間プール値と入力バッファ1202からの対応する入力値とを同期させることによって、局所応答正規化を容易にする。遅延装置1222は、入力バッファ1202及びLRNユニット1216に連結される。遅延装置1222は、先入れ先出し(FIFO)メモリバッファを含み得る。
【0145】
マルチプレクサ1218は、行圧縮器1210の空間プール値、平方根ユニット1214からの空間プール値の平方根、又はLRNユニット1216からの正規化値から出力を選択する。SPNポストプロセッサ1220は、マルチプレクサ1218の選択出力を受信し、スケール、オフセット、及び/又はシフト演算を実行する。SPNポストプロセッサ1220の出力は、インターリーブ方式で複数のチャネルを定義するピクセル値のストリームであり、ピクセル値は、チャネルごと空間プーリング及び/又はチャネルごとの正規化で処理される。
【0146】
いくつかの実施形態では、中央制御320は、構成要素の演算の組合せを構成することによって、空間プーリング回路1200を異なるモードで演算させる。
【0147】
図5に関連して上述したように、第1の畳み込み回路502の空間プーリング回路514の出力ストリーム530は、第2の畳み込み回路504への入力として使用されてもよい、又は第2の畳み込み回路504の出力とインターリーブするためにチャネルマージ回路506に提供されてもよい。
【0148】
図13A及び
図13Bは、一実施形態に係る、マルチ平面フォーマットの空間プーリング回路1200の入力及び出力を示す概念図である。空間プーリング回路1300は、チャネルごと空間プーリング及び/又はチャネルごとLRNをマルチチャネル入力画像上で実行し、マルチチャネル出力を生成する。入力チャネル及び出力チャネルの数は維持され、各画像のピクセル画像サイズは空間プーリングを介して減少する。
【0149】
図13A及び13Bのマルチ平面フォーマットは、それぞれの入力及び出力チャネルを別個の画像面として表す。マルチチャネル入力データ1302は、チャネル1304、1306及び1308などの複数のチャネルからのピクセル値を有する。本実施例では、3ピクセルの幅及び高さを有するローカルウィンドウ1310のピクセル値は空間的にプールされて、出力チャネル1304の空間プール値1312を生成する。空間プーリング回路1200は、個別に各チャネルのためのローカルウィンドウ1310を使用して、チャネル1304、1306、及び1308のマルチチャネル出力データ1314を生成する。
【0150】
複数チャネルの第1の空間プール値(例えば、値1312)が
図13Aに示されるように計算された後、
図13Bに示されるようにローカルウィンドウ1310がシフトされて、チャネルの次の空間プール値(例えば、値1322)を計算する。本実施例では、ローカルウィンドウ1310は、ラスター方式に従って列寸法で2ピクセルシフトさせる。これにより、ローカルウィンドウ1310の中心ピクセルが、列寸法で2ピクセルシフトされる。空間プールピクセル計算当たりのローカルウィンドウ1310の中心ピクセルのシフト量は、構成可能であり得る。ローカルウィンドウは、空間プールピクセルが全て計算されるまで、空間プールピクセルごとに、所定の行(「StrideX」)及び列(「StrideY」)パラメータに従ってラスター方式でシフトさせることができる。1よりも大きいStrideX及びStrideYパラメータを使用することにより、サブサンプリングでデータサイズ及び計算コストが低減される。これらの係数が1に等しい場合、出力ピクセルはスキップされない。シフトされたローカルウィンドウ1310のピクセル値は空間的にプールされて、出力チャネル1316の空間プール値1322を生成する。
【0151】
図13C及び
図13Dは、一実施形態に係る、平面フォーマットの空間プーリング回路1300の入力及び出力を示す概念図である。
図13Cは、
図13Aに示すマルチ平面フォーマットに対応し、
図13Dは、
図13Bに示すマルチ平面フォーマットに対応する。平面フォーマットでは、各入力チャネルは、Cinの水平間隔に配置されたピクセル列として表され、Cinは入力チャネルの数を示す。よって、チャネルごとの演算がローカルウィンドウに適用されると、カーネルサポートは、ローカルウィンドウ1310によって示されるように平面フォーマットで疎になる。
【0152】
行(「StrideX」)及び列(「StrideY」)シフト値は、マルチ平面フォーマットのチャネルの空間座標内のピクセル単位で定義される。平面フォーマットでは、行シフトの実際の量は、行シフト値StrideXに入力チャネルCinの数を乗算することによって決定される。
【0153】
図14は、一実施形態に係る、空間プーリング回路1200を演算させる方法1400を示すフローチャートである。中央制御320は、空間プーリング回路1200に構成情報を送信する1402。構成命令は、方法700の702で論じたように、畳み込みエンジン414の他の構成命令に関連して送信されてもよい。
【0154】
構成命令は、空間プーリング回路1200の演算モードを定義する命令を含み得る。異なる演算モードは、異なる種類の空間プーリング又はチャネルごとのLRNを定義し得る。最大プーリングモードでは、列圧縮器1206及び行圧縮器1210は最大値を選択し、マルチプレクサ1218は行圧縮器1210の出力を選択する。ここで、SPNプロセッサ1212の累算後処理は、空間プーリング回路1200の出力が局所応答正規化又は平方根用途を有さないようにバイパスされる。平均プーリングモードでは、列圧縮器1206及び行圧縮器1210は、合計を生成し、マルチプレクサ1218は、行圧縮器1210の出力を選択して累算後処理をバイパスする。
【0155】
L1−プーリングモードでは、ピクセルごとの計算1204は絶対値を判定し、列圧縮器1206及び行圧縮器1210は絶対値の合計を計算し、マルチプレクサ1218は、行圧縮器1210の出力を選択して累算後処理をバイパスする。L2−プーリングモードでは、ピクセルごとの計算1204は二乗値を判定し、列圧縮器1206及び行圧縮器1210は二乗値の合計を計算し、平方根ユニット1214は二乗値の合計の平方根を判定し、マルチプレクサ1218は平方根ユニット1214の出力を選択する。
【0156】
チャネルごとのLRNモードでは、ピクセルごとの計算1204は二乗値を判定し、列圧縮器1206及び行圧縮器1210は二乗値の合計を計算し、LRNユニット1216は、二乗値の合計の平方根を使用して値を正規化し、マルチプレクサ1218はLRNユニット1216の出力を選択する。
【0157】
構成情報の受信後、空間プーリング回路1200の構成が構成情報に応じて更新されて1404、構成情報に記載されているような演算を実行する。構成の更新は、構成情報によって定義された演算モードに応じて、ピクセルごとの計算1204、列圧縮器1206、行圧縮器1210、平方根ユニット1214、及びマルチプレクサ1218の演算を設定することを含み得る。
【0158】
畳み込みコア回路512(又は522)は、入力データに対して畳み込み演算を実行することによって、インターリーブ方式で複数チャネルの値のストリームを生成する1406。例えば、畳み込みコア回路512は、構成命令に従って、複数の畳み込みカーネルを使用して入力データ上で畳み込み演算を実行して、複数チャネルを含む値のストリームを生成する。畳み込み回路512は、構成命令によって指定されるように、畳み込み結果に対して1つ以上の後処理演算を更に実行することができる。いくつかの実施形態では、後処理演算は、マルチチャネルNCC及びチャネル間LRNなどのチャネル間演算を含む。これらの演算は、異なるチャネルからの値を結合するものであり、空間プーリング回路1200のチャネルごとの演算とは異なる。畳み込みコア回路512が複数の実行クラスタを含む場合、複数の実行クラスタの出力ストリームが結合されて、畳み込みコア回路512によって出力されるインターリーブ方式で複数チャネルの値のストリームを生成することができる。
【0159】
空間プーリング回路1200は、各チャネルからの値のサブセットを互いにプーリングすることによって、空間プール値1408を生成する。例えば、畳み込みコア回路512からのストリームが第1及び第2のインターリーブチャネルを含む場合、空間プーリング回路1200は、(例えば、ローカルウィンドウによって定義されるように)第1のチャネルの値のサブセットをプールすることによって第1の空間プール値を生成し、第2のチャネルの値のサブセットをプールすることによって第2の空間プール値を生成する。入力バッファ1202により、ストリーム1224からの単一チャネルの値のサブセットが記憶されて、空間プーリングを容易にすることが確保される。各チャネルからの値のサブセットは、ピクセルごとの計算1204、列圧縮器1206、行圧縮器1210、及びSPNプロセッサ1212の選択演算に基づいて様々な方法でプールされ得る。空間プール値は、最大プールモード、平均プーリングモード、L1プーリングモード、又はL2プーリングモードなどの様々な種類の空間プーリングから導出される値を含み得る。別の例では、空間プール値は、チャネルごとLRNモードなどの正規化から導出される値を含んでもよい。
【0160】
空間プーリング回路1200は、複数のチャネルからの空間プール値を出力ストリーム1226へインターリーブする1410。したがって、空間プーリング回路1200は、出力ストリーム1226で入力ストリーム1224として受信されたマルチチャネルインターリーブフォーマットを維持する一方、入力ストリーム1224に対してチャネルごと深層機械学習操作を実行する。
【0161】
空間プーリング回路1200は、畳み込みコア回路512(又は504)から2ppcの入力ストリームを受信し、2ppcの出力ストリームを生成することができる。畳み込みコア回路512が1ppcのストリームを提供する場合、空間プーリング回路1200は無効値を無視し、有効値のみを処理する。出力フレームの全幅が奇数である場合、各ラインの端部にゼロを加えて幅を均一にすることができる。
【0162】
図14に示すプロセスは、単なる例示に過ぎず、様々な変更をプロセスに加えることができる。例えば、バイパスモードでは、空間プーリング回路1200は、有効値を含む2ppcの出力ストリームを確保するために、入力ストリームを再パケット化してもよい。ピクセルごとの計算1204、行圧縮器1206、及び1210などのピクセル処理構成要素は、バイパスモードでバイパスされてもよい。
インターリーブチャネルマージ
【0163】
用途が高いスループットを必要とする場合、又は大きな深学習モデルが使用される場合、
図6Aに関連して上述したように、2つの畳み込み回路502及び504を二重畳み込みモードで並列に演算させることができる。2つの畳み込み回路502及び504は、同じ入力ストリーム上に異なる畳み込みカーネルを適用する。例えば、第1の畳み込み回路502が、1つ以上の畳み込みカーネルを有する出力チャネルの第1の半分を生成する一方、第2の畳み込み回路504は、1つ以上の異なる畳み込みカーネルを有する第2の半分を生成する。チャネルマージ回路506は、畳み込み回路502及び504からストリームを受信し、インターリーブ方式で、それらのストリームを、出力チャネルの第1の半分及び出力チャネルの第2の半分を含む単一の出力ストリームに結合する。インターリーブを実行するために、チャネルマージ回路は、チャネルマージャ526を有する。
【0164】
図15は、一実施形態に係る、チャネルマージャ1500のブロック図である。チャネルマージャ1500は、チャネルマージ回路506のチャネルマージャ526の一実施形態である。チャネルマージャ1500の出力は、二重畳み込みモードで演算するときに、畳み込みエンジン414の出力として選択される。
【0165】
チャネルマージャ1500は、入力バッファ1502、マルチプレクサ1504、及びチャネルセレクタ1506を含む。入力バッファ1502は、畳み込み回路502に連結されて値530のストリームを受信し、及び畳み込み回路504に連結されて値532のストリームを受信する。値530及び532のストリームはそれぞれ、複数のインターリーブチャネルを含み得る。入力バッファ1502は、値530及び532を記憶して、インターリーブのための値の同期を容易にする。
【0166】
マルチプレクサ1504は、入力バッファに連結され、入力バッファ1502から値530及び532のストリームを受信する。チャネルセレクタ1506は、出力値534の出力ストリームに挿入するための入力ストリームからの値の選択を制御するために、マルチプレクサ1504に選択信号を提供する。マルチプレクサは、例えば、各入力ストリームから1つ以上の値を代替的に選択することによって、値530及び532のストリームをインターリーブして、出力値534の出力ストリームを生成する。特定の入力ストリームから選択される連続値の数は、ストリーム内のピクセル当たりのチャネル数によって定義され得る。出力値534のシーケンスは、インターリーブ方式で値530及び532のストリームのチャネルを定義する。
【0167】
チャネルマージャ1500は、任意の入力ストリームを減速させることなく、同期される2つの2ppc入力ストリームをサポートする。マージされた出力のスループットは4ppcである。2つの入力ストリームが同期化されない場合、1つ以上の入力源が入力バッファ1502を使用して記憶されて、チャネルマージャ1500が両方の入力ストリームから同期化入力を受信するように遅延を提供することができる。
【0168】
図16は、一実施形態に係る、平面フォーマットのチャネルマージャ1500の入力及び出力を示す概念図である。いくつかの実施形態では、チャネルマージャ1500は、マルチチャネル入力データ1602及びマルチチャネル入力データ1604によって示されるように、同じサイズを有する2つの入力フレームを結合する。更に、入力ストリーム530及び532は、同じ数の入力チャネルCinを有する。本実施例では、Cinは5であり、したがって、各ピクセルP0、P1、P2は、各ストリームに対して5つの値のチャネルを有する。チャネルマージャ1500は、マルチチャネル入力データ1602とマルチチャネル入力データ1604とをインターリーブすることによってマルチチャネル出力データ1606を生成する結果、第1のストリームのP0ピクセルの各チャネルのピクセル値の後に、第2のストリームのP0ピクセルの各チャネルのピクセル値が続く。平面フォーマットにおいてラスター方式で進むと、第1のストリームのP1ピクセルの各チャネルのピクセル値は、第2のストリームのP0ピクセルのピクセル値に続く。P1ピクセルに関しては、第1のストリームのP1ピクセルの各チャネルのピクセル値の後に、第2のストリームのP1ピクセルの各チャネルについてのピクセル値が続く。
【0169】
チャネルマージャ1500は、入力ストリーム530(マルチチャネル入力データ1602を含む)及び532(マルチチャネル入力データ1604を含む)からの入力チャネルの数の2倍のチャネル数を有する出力値534の出力ストリームを生成する。例えば、マルチチャネル出力データの各ピクセルP0、P1などは、10チャネル出力Coutを有する。
【0170】
いくつかの実施形態では、チャネルマージャ1500は、入力ストリーム530及び532内の画像の高さ及び幅が一致しないとき、又は入力ストリーム530及び532内のチャネルの数が一致しないときに、チャネルマージ回路506で無効化される。二重畳み込みモードで演算するのではなく、畳み込みエンジン414は、
図6Bに示されるカスケードモード又は
図6Cに示される並列モードなど、チャネルマージャ1500をバイパスする異なるモードで演算することができる。
【0171】
いくつかの実施形態では、チャネルマージャ1500は、コアマージャ846の一実施形態である。コアマージャ847は、(別個のパイプラインにおける後処理後)実行クラスタ810及び812のそれぞれから2つの1ppc入力ストリームを受信し、1ppc入力ストリームを畳み込みコア回路800の2ppc出力ストリームに結合する。対照的に、チャネルマージャ526は、2ppc入力ストリームを受信し、4ppc出力ストリームを生成する。したがって、チャネルマージャ526は、コアマージャ847よりも高いスループットを有する。コアマージャ847は、偶数及び奇数のストリーム842及び844からデータ値を選択して出力ストリームを生成するマルチプレクサと、マルチプレクサによる値の選択を制御するチャネルセレクタとを含み得る。いくつかの実施形態では、コアマージャ846は、偶数及び奇数のストリーム842及び844のうちの1つ以上を記憶することによって、インターリーブの同期を容易にする1つ以上の入力バッファを含み得る。コアマージャ846のメモリ及び処理構成要素のサイズは、スループットが低いために、チャネルマージャ1500のメモリ及び処理構成要素のサイズよりも小さくてもよい。