(57)【要約】      （修正有）【課題】様々なフォーマットのストリーミング入力データに対して畳み込み及び他の深層機械学習演算を実行する構成情報を受信する構成可能畳み込みエンジンを提供する。【解決手段】畳み込みエンジンは、２つの畳み込み回路を含み、各畳み込み回路が、畳み込みカーネルを入力データに適用することによって値のストリームを生成することができる。値のストリームはそれぞれ、画像データの１つ以上のチャネルを定義することができる。チャネルマージ回路は、選択された演算モードに従って、各畳み込み回路からの値のストリームを結合する。あるモードでは、畳み込み回路からの第１及び第２のストリームは、インターリーブ方式で、第１及び第２のストリームの結合チャネルを有する出力ストリームにマージされる。別のモードでは、第１の畳み込み回路からの第１のストリームが、第２の畳み込み回路の入力に供給される。【選択図】図３
2020144907.tif 000002
【特許請求の範囲】
【請求項１】
畳み込みエンジンであって、
１つ以上の第１の畳み込みカーネルを第１の入力データに適用することによって第１の値の第１のストリームを生成するように構成された第１の畳み込み回路であって、前記第１のストリーム内の前記第１の値が、インターリーブ方式でデータの第１の複数のデータチャネルを定義する、第１の畳み込み回路と、
１つ以上の第２の畳み込みカーネルを第２の入力データに適用することによって第２の値の第２のストリームを生成するように構成された第２の畳み込み回路であって、前記第２のストリーム内の前記第２の値が、インターリーブ方式でデータの第２の複数のデータチャネルを定義する、第２の畳み込み回路と、
前記第１の畳み込み回路に連結されて前記第１のストリームを受信し、前記第２の畳み込み回路に連結されて前記第２のストリームを受信するチャネルマージ回路であって、
前記畳み込みエンジンの第１のモードでは、前記第２の値とインターリーブされた前記第１の値を含む第１の出力ストリームであって、前記第１の出力ストリームが、インターリーブ方式で前記第１の複数のチャネル及び前記第２の複数のチャネルを定義し、前記第１の畳み込み回路によって受信された前記第１の入力データが、前記第２の畳み込み回路によって受信された前記第２の入力データと同じである、第１の出力ストリームを生成し、
前記畳み込みエンジンの第２のモードでは、前記第２の畳み込み回路であって、前記第２の畳み込み回路によって使用される前記第２の入力データが、前記第１の畳み込み回路によって生成された前記第１の値の第１のストリームである、前記第２の畳み込み回路からの前記第２の値の第２のストリームを含む第２の出力ストリームを生成する、
ように構成された、チャネルマージ回路と、
を備える、畳み込みエンジン。
【請求項２】
前記畳み込みエンジンの第３のモードでは、前記チャネルマージ回路が、前記第１の値を含む第３の出力ストリーム及び前記第２の値を含む第４の出力ストリームを生成するように構成されており、前記第１の畳み込み回路によって受信された前記第１の入力データが、前記第２の畳み込み回路によって受信された前記第２の入力データと同じである、請求項１に記載の畳み込みエンジン。
【請求項３】
前記第２の畳み込み回路が第２の畳み込みカーネルを前記入力データに適用するのと同時に、前記第１の畳み込み回路が前記第１の入力データに第１の畳み込みカーネルを適用し、前記第１の畳み込みカーネルが第１のフィルタ要素を有し、前記第２の畳み込みカーネルが前記第１のフィルタ要素とは異なる第２のフィルタ要素を有する、請求項１に記載の畳み込みエンジン。
【請求項４】
前記第１の畳み込み回路が、
畳み込みコアであって、
前記第１の複数のデータチャネルの偶数チャネルを定義する偶数データ値のストリームを生成するように構成された第１の実行クラスタと、
前記第１の複数のデータチャネルの奇数チャネルを定義する奇数データ値のストリームを生成するように構成された第２の実行クラスタと、
を含む、畳み込みコアと、
前記第１の実行クラスタに連結されて前記偶数データ値のストリームを受信し、前記第２の実行クラスタに連結されて前記奇数データ値のストリームを受信する後処理回路であって、前記偶数データ値のストリーム及び前記奇数データ値のストリームから前記第１の値の第１のストリームを生成するように構成された、後処理回路と、
を含む、請求項１に記載の畳み込みエンジン。
【請求項５】
前記後処理回路が、
複数の第１の畳み込みカーネルの第１のマルチチャネル正規化相互相関（ＮＣＣ）スコアと、前記第１の実行クラスタからの前記偶数データ値のストリームとを計算するように構成された第１のマルチチャネルＮＣＣユニットと、
前記複数の第１の畳み込みカーネルの第２のマルチチャネルＮＣＣスコアと、前記第２の実行クラスタからの前記奇数データ値のストリームとを計算するように構成された第２のマルチチャネルＮＣＣユニットと、
を含む、請求項４に記載の畳み込みエンジン。
【請求項６】
前記後処理回路が、前記第１の複数のデータチャネルのうちの少なくとも１つと関連付けられた最大値又は最小値を決定するように構成されたピークファインダを更に含む、請求項５に記載の畳み込みエンジン。
【請求項７】
前記後処理回路が、
前記第１の実行クラスタからの前記偶数データ値のストリームへの非線形変換を実行するように構成された第１の応答整流ユニットと、
前記第２の実行クラスタからの前記奇数データ値のストリームへの非線形変換を実行するように構成された第２の応答整流ユニットと、
を含む、請求項４に記載の畳み込みエンジン。
【請求項８】
前記後処理回路が、
前記第１の複数のデータチャネルの前記偶数チャネルを定義する前記偶数データ値に対してチャネル間局所応答正規化を実行するように構成された第１のチャネル間局所応答正規化（ＬＲＮ）ユニットと、
前記第１の複数のデータチャネルの前記奇数チャネルを定義する前記奇数データ値に対してチャネル間局所応答正規化を実行するように構成された第２のチャネル間ＬＲＮユニットと、
を含む、請求項４に記載の畳み込みエンジン。
【請求項９】
前記第１の畳み込み回路が、
複数の第１の畳み込みカーネルを前記第１の入力データに適用することによって、前記第１の複数のデータチャネルのデータ値の少なくとも一部を生成するように構成された実行クラスタを含む畳み込みコアと、
後処理回路であって、
前記実行クラスタに連結され、前記複数の第１の畳み込みカーネルの正規化相互相関（ＮＣＣ）スコア及び前記少なくとも一部のデータ値とを計算するように構成されたマルチチャネルＮＣＣユニットと、
前記マルチチャネルＮＣＣに連結され、前記データ値の少なくとも一部に対して非線形変換を実行するように構成された応答整流ユニットと、
前記応答整流ユニットに連結され、前記応答整流ユニットの出力に対してチャネル間局所応答正規化を実行するように構成されたチャネル間局所応答正規化（ＬＲＮ）ユニットと、
前記第１の複数のデータチャネルのうちの少なくとも１つと関連付けられた最大値又は最小値を判定するように構成されたピークファインダと、
を含む、後処理回路と、
を含み、
前記畳み込みエンジンが、前記マルチチャネルＮＣＣユニット、前記応答整流ユニット、前記チャネル間ＬＲＮユニット、及び前記ピークファインダを選択的にアクティブ化させる又は非アクティブ化させるように構成された制御回路を更に含む、請求項１に記載の畳み込みエンジン。
【請求項１０】
前記畳み込みエンジンを、前記第１及び第２のモードを含む複数のモード間で切り替えるように構成された制御回路を更に備える、請求項１に記載の畳み込みエンジン。
【請求項１１】
前記第２の畳み込み回路が、第１のマルチプレクサを含み、
前記チャネルマージ回路が、第２のマルチプレクサを含み、
前記制御回路が、
前記畳み込みエンジンの前記第１のモードにおいて、
前記第１のマルチプレクサに、前記第１の入力データを、前記第２の畳み込み回路への前記第２の入力データとして選択させ、
前記第２のマルチプレクサに、前記第１の出力ストリームを、前記チャネルマージ回路の出力として選択させ、
前記畳み込みエンジンの前記第２のモードにおいて、
前記第１のマルチプレクサに、前記第１の畳み込み回路によって生成された前記第１の値の第１のストリームを、前記第２の畳み込み回路への前記第２の入力データとして選択させ、
前記第２のマルチプレクサに、前記第２の畳み込み回路によって生成された前記第２の値の第２のストリームを、前記チャネルマージ回路の前記出力として選択させる、
ように更に構成された、請求項１０に記載の畳み込みエンジン。
【請求項１２】
前記畳み込みエンジンの第３のモードにおいて、
前記チャネルマージ回路が、前記第１の値を含む第３の出力ストリームと、前記第２の値を含む第４の出力ストリームとを生成するように構成されており、
前記制御回路が、
前記第１のマルチプレクサに、前記第１の入力データを、前記第２の畳み込み回路への前記第２の入力データとして選択させ、
前記第２のマルチプレクサに、前記第２の値の第２のストリームを前記チャネルマージ回路の前記出力として選択させる、
ように更に構成された、請求項１１に記載の畳み込みエンジン。
【請求項１３】
畳み込みエンジンによって、１つ以上の第１の畳み込みカーネルを第１の入力データに適用することによって、第１の値の第１のストリームを生成することであって、前記第１のストリーム内の前記第１の値が、インターリーブ方式でデータの第１の複数のチャネルを定義する、ことと、
前記畳み込みエンジンによって、１つ以上の第２の畳み込みカーネルを第２の入力データに適用することによって、第２の値の第２のストリームを生成することであって、前記第２のストリーム内の前記第２の値が、インターリーブ方式でデータの第２の複数のチャネルを定義する、ことと、
前記畳み込みエンジンの第１のモードでは、前記第２の値とインターリーブされた前記第１の値を含む第１の出力ストリームを生成することであって、前記第１の出力ストリームが、インターリーブ方式で前記第１の複数のチャネル及び前記第２の複数のチャネルを定義し、前記第１の入力データが前記第２の入力データと同じである、ことと、
前記畳み込みエンジンの第２のモードでは、前記第２の畳み込み回路からの前記第２の値の第２のストリームを含む第２の出力ストリームを生成することであって、前記第２の入力データが、前記第１の値の第１のストリームである、ことと、
を含む、方法。
【請求項１４】
前記畳み込みエンジンの第３のモードにおいて、前記第１の値を含む第３の出力ストリームと前記第２の値を含む第４の出力ストリームとを生成することであって、前記第１の入力データが前記第２の入力データと同じである、ことを更に含む、請求項１３に記載の方法。
【請求項１５】
前記畳み込みエンジンが、第２の畳み込みカーネルを前記入力データに適用することと同時に、前記第１の入力データに第１の畳み込みカーネルを適用し、前記第１の畳み込みカーネルが第１のフィルタ要素を有し、前記第２の畳み込みカーネルが前記第１のフィルタ要素は異なる第２のフィルタ要素を有する、請求項１３に記載の方法。
【請求項１６】
前記第１の複数のデータチャネルの偶数チャネルを定義する偶数データ値のストリームを生成することと、
前記第１の複数のデータチャネルの奇数チャネルを定義する奇数データ値のストリームを生成することと、
前記偶数データ値のストリーム及び前記奇数データ値のストリームから前記第１の値の第１のストリームを生成することと、
を更に含む、請求項１３に記載の方法。
【請求項１７】
複数の第１の畳み込みカーネル及び前記偶数データ値のストリームに関して、第１のマルチチャネル正規化相互相関（ＮＣＣ）スコアを計算することと、
前記複数の第１の畳み込みカーネル及び前記奇数データ値のストリームに関して、第２のマルチチャネルＮＣＣスコアを計算することと、
を更に含む、請求項１６に記載の方法。
【請求項１８】
前記偶数データ値のストリームに対して非線形変換を実行することと、
前記奇数データ値のストリームに対して非線形変換を実行することと、
を更に含む、請求項１６に記載の方法。
【請求項１９】
前記第１の複数のデータチャネルの前記偶数チャネルを定義する前記偶数データ値に対して、チャネル間局所応答正規化を実行することと、
前記第１の複数のデータチャネルの前記奇数チャネルを定義する前記奇数データ値に対して、チャネル間局所応答正規化を実行することと、
を更に含む、請求項１７に記載の方法。
【請求項２０】
電子デバイスであって、
１つ以上の第１の畳み込みカーネルを第１の入力データに適用することによって第１の値の第１のストリームを生成するように構成された第１の畳み込み回路であって、前記第１のストリーム内の前記第１の値が、インターリーブ方式で第１の複数のデータチャネルを定義する、第１の畳み込み回路と、
１つ以上の第２の畳み込みカーネルを第２の入力データに適用することによって第２の値の第２のストリームを生成するように構成された第２の畳み込み回路であって、前記第２のストリーム内の前記第２の値が、インターリーブ方式で第２の複数のデータチャネルを定義する、第２の畳み込み回路と、
前記第１の畳み込み回路に連結されて前記第１のストリームを受信し、前記第２の畳み込み回路に連結されて前記第２のストリームを受信するチャネルマージ回路であって、
前記畳み込みエンジンの第１のモードでは、前記第２の値とインターリーブされた前記第１の値を含む第１の出力ストリームであって、前記第１の出力ストリームが、インターリーブ方式で前記第１の複数のチャネル及び前記第２の複数のチャネルを定義し、前記第１の畳み込み回路によって受信された前記第１の入力データが、前記第２の畳み込み回路によって受信された前記第２の入力データと同じである、第１の出力ストリームを生成し、
前記畳み込みエンジンの第２のモードでは、前記第１の値を含む第２の出力ストリームと前記第２の値を含む第３の出力ストリームであって、前記第１の畳み込み回路によって受信された前記第１の入力データが、前記第２の畳み込み回路によって受信された前記第２の入力データと同じである、第３の出力ストリームを生成する、
ように構成された、チャネルマージ回路と、
を備える電子デバイス。
【発明の詳細な説明】
【背景技術】
【０００１】
画像センサによってキャプチャされた又は他のデータソースから受信された画像データは、更なる処理又は消費の前に、画像処理パイプラインにおいて処理されることが多い。例えば、生画像データは、ビデオエンコーダなどの後続の構成要素に提供される前に、補正される、フィルタリングされる、又は別の方法で変更されることがある。キャプチャされた画像データの補正又は強調を行うために、様々な構成要素、ユニットステージ、又はモジュールを用いることができる。
【０００２】
そのような画像処理パイプラインは、他のシステムリソースを消費することなく、キャプチャされた画像データに対する補正又は強調を好都合に実行することができるように構成することができる。多くの画像処理アルゴリズムは、中央処理装置（central processing unit）（ＣＰＵ）上でソフトウェアプログラムを実行することにより実行することができるが、ＣＰＵ上のそのようなプログラムの実行は、ＣＰＵの著しい帯域幅及び他の周辺装置リソースを消費すると共に電力消費を増大することになる。したがって、画像処理パイプラインは、ＣＰＵとは別個のハードウェア構成要素として実装されることが多く、１つ以上の画像処理アルゴリズムを実行するための専用のものである。
【０００３】
様々な種類の画像処理は、カーネルとデータとの間の畳み込みを伴う。例えば、ぼかし、鮮明化、エンボス加工、又は画像内のエッジ検出を実行するために、様々なカーネルが使用され得る。このような畳み込み演算は、一般にＣＰＵによって実行されて、他のプロセスの可用性を低減させる。
【発明の概要】
【０００４】
実施形態は、畳み込みエンジン内の構成要素の演算を構成することによって、所望の方法で様々なチャネルの入力データの畳み込み及び機械学習操作を実行する構成可能な畳み込みエンジンに関する。畳み込みエンジンは、第１の畳み込み回路と、第２の畳み込み回路と、第１及び第２の畳み込み回路に連結されたチャネルマージ回路とを含む。第１及び第２の畳み込み回路はそれぞれ、特に畳み込みカーネルを入力データに適用することによって、値のストリームを生成する。値のストリームはそれぞれ、インターリーブ方式で画像データの１つ以上のチャネルを定義することができる。チャネルマージ回路は、選択された演算モードに従って、第１及び第２の畳み込み回路からの値のストリームを結合する。二重畳み込みモードでは、畳み込み回路からの第１及び第２のストリームは、インターリーブ方式で第１及び第２のストリームの結合されたチャネルを有する出力ストリームにマージされる。カスケードモードでは、第１の畳み込み回路からの第１のストリームは、第２の畳み込み回路の入力に供給される。チャネルマージ回路は、第２の畳み込み回路の結果を出力ストリームとして出力する。並列モードでは、チャネルマージ回路は、第１及び第２の畳み込み回路から別個のストリームとして第１及び第２のストリームを出力する。
【図面の簡単な説明】
【０００５】
【図１】一実施形態に係る、電子デバイスの概要図である。
【図２】一実施形態に係る、電子デバイスの構成要素を示すブロック図である。
【図３】一実施形態に係る、画像信号プロセッサを用いて実施された画像処理パイプラインを示すブロック図である。
【図４】一実施形態に係る、画像信号プロセッサ内のビジョンモジュールを示すブロック図である。
【図５】一実施形態に係る、畳み込みエンジンのブロック図である。
【図６Ａ】一実施形態に係る、畳み込みエンジンの二重畳み込みモードのブロック図である。
【図６Ｂ】一実施形態に係る、畳み込みエンジンのカスケードモードのブロック図である。
【図６Ｃ】は、一実施形態に係る、畳み込みエンジンの並列モードのブロック図である。
【図７】一実施形態に係る、複数のモードで畳み込みエンジンを演算させる方法を示すフローチャートである。
【図８】一実施形態に係る、畳み込みコア回路を示すブロック図である。
【図９】一実施形態に係る、応答整流ユニットによって適用される非線形変換のグラフである。
【図１０】一実施形態に係る、畳み込みコアを示すブロック図である。
【図１１Ａ】一実施形態に係る、マルチ平面フォーマットの畳み込みコア回路の入力及び出力を示す概念図である。
【図１１Ｂ】一実施形態に係る、平面フォーマットの畳み込みコア回路の入力及び出力を示す概念図である。
【図１２】一実施形態に係る、空間プーリング回路を示すブロック図である。
【図１３Ａ】一実施形態に係る、マルチ平面フォーマットの空間プーリング回路の入力及び出力を示す概念図である。
【図１３Ｂ】一実施形態に係る、マルチ平面フォーマットの空間プーリング回路の入力及び出力を示す概念図である。
【図１３Ｃ】一実施形態に係る、平面フォーマットの空間プーリング回路の入力及び出力を示す概念図である。
【図１３Ｄ】一実施形態に係る、平面フォーマットの空間プーリング回路の入力及び出力を示す概念図である。
【図１４】一実施形態に係る、空間プーリング回路を演算させる方法を示すフローチャートである。
【図１５】一実施形態に係る、チャネルマージャを示すブロック図である。
【図１６】一実施形態に係る、平面フォーマットのチャネルマージャの入力及び出力を示す概念図である。
【０００６】
種々の非限定的な実施形態を単に例示を目的として、図で示し、詳細な説明において説明する。
【発明を実施するための形態】
【０００７】
ここで、添付図面に実施例が示される実施形態への詳細な参照が行われる。以下の詳細な説明では、説明される様々な実施形態の完全な理解を提供するために数多くの具体的な詳細が記載されている。しかし、説明する実施形態は、これらの具体的な詳細なしに実施することができる。他の例では、周知の方法、手順、構成要素、回路、及びネットワークは、実施形態の態様を不必要に不明瞭にしないよう詳細には説明されていない。
【０００８】
本開示の実施形態は、畳み込みエンジン内の構成要素の演算を構成することによって、所望の方法で様々なチャネルの入力データの畳み込み及びチャネルごとの機械学習操作を実行するための構成可能畳み込みエンジンに関する。畳み込みエンジンは、第１の畳み込み回路と、第２の畳み込み回路と、第１及び第２の畳み込み回路に連結されたチャネルマージ回路と、を含む回路である。第１及び第２の畳み込み回路はそれぞれ、特に畳み込みカーネルを入力データに適用することによって、値のストリームを生成する。値のストリームはそれぞれ、インターリーブ方式で画像データの１つ以上のチャネルを定義してもよい。チャネルマージ回路は、選択された演算モードに従って、第１及び第２の畳み込み回路からの値のストリームを結合することができる。二重畳み込みモードでは、値のストリームは、第１のストリームからのチャネルと、インターリーブ方式で配置された第２のストリームからのチャネルと、を有する単一の出力ストリームに結合される。
例示的な電子デバイス
【０００９】
電子デバイス、そのようなデバイス用のユーザインターフェース、及びそのようなデバイスを使用する関連するプロセスの実施形態が説明される。いくつかの実施形態では、デバイスは、パーソナルデジタルアシスタント（ＰＤＡ）機能及び／又は音楽プレーヤ機能などの他の機能も含む、携帯電話などのポータブル通信デバイスである。ポータブル多機能デバイスの例示的な実施形態としては、カリフォルニア州クパチーノのＡｐｐｌｅ  Ｉｎｃ．からのｉＰｈｏｎｅ（登録商標）、ｉＰｏｄ  Ｔｏｕｃｈ（登録商標）、Ａｐｐｌｅ  Ｗａｔｃｈ（登録商標）、及びｉＰａｄ（登録商標）のデバイスが挙げられるが、これらに限定されない。ウェアラブルコンピュータ、ラップトップコンピュータ、又はタブレットコンピュータなどの他のポータブル電子デバイスが、任意選択的に使用される。いくつかの実施形態では、デバイスは、ポータブル通信デバイスではないが、デスクトップコンピュータ又はポータブル使用のために設計されていない他のコンピューティングデバイスである。いくつかの実施形態では、本開示の電子デバイスは、タッチ感知面（例えば、タッチスクリーンディスプレイ及び／又はタッチパッド）を含むことができる。図１に関連して以下に説明する例示的な電子デバイス（例えば、デバイス１００）は、ユーザ入力を受け取るためのタッチ感知面を含むことができる。電子デバイスは、物理キーボード、マウス、及び／又はジョイスティックなどの、１つ以上の他の物理ユーザインターフェースデバイスも含むことができる。
【００１０】
図１は、一実施形態に係る、電子デバイス１００の概要図である。デバイス１００は、「ホーム」又はメニューボタン１０４などの、１つ以上の物理ボタンを含んでもよい。メニューボタン１０４は、例えば、デバイス１００上で実行されるアプリケーションのセット内の任意のアプリケーションへナビゲートするために使用される。いくつかの実施形態では、メニューボタン１０４は、メニューボタン１０４上の指紋を識別する指紋センサを含む。指紋センサを使用して、メニューボタン１０４上の指がデバイス１００をロック解除するために記憶された指紋と一致する指紋を有するか否かを判定することができる。あるいは、いくつかの実施形態では、メニューボタン１０４は、タッチスクリーン上に表示されるグラフィカルユーザインターフェース（graphical user interface）（ＧＵＩ）内のソフトキーとして実装される。
【００１１】
いくつかの実施形態では、デバイス１００は、タッチスクリーン１５０、メニューボタン１０４、デバイスへの電源をオン／オフし、デバイスをロックするためのプッシュボタン１０６、音量調整ボタン１０８、加入者識別モジュール（Subscriber Identity Module）（ＳＩＭ）カードスロット１１０、ヘッドセットジャック１１２、及びドッキング／充電用外部ポート１２４を含む。プッシュボタン１０６は、ボタンを押し下げて、既定の時間間隔の間、ボタンを押し下げた状態で保持することによって、デバイス上の電源をオン／オフするため、ボタンを押し下げて、所定の期間が経過する前にボタンを解放することによって、デバイスをロックするため、及び／又はデバイスをロック解除する、若しくはロック解除プロセスを開始するために、使用される。代替的実施形態では、デバイス１００はまた、マイクロフォン１１３を介して、一部の機能をアクティブ化又は非アクティブ化するための口頭入力も受け入れる。デバイス１００は、メモリ（１つ以上のコンピュータ可読記憶媒体を含むことができる）、メモリコントローラ、１つ以上の中央処理装置（ＣＰＵ）、周辺機器インターフェース、ＲＦ回路、オーディオ回路、スピーカ１１１、マイクロフォン１１３、入出力（input/output）（Ｉ／Ｏ）サブシステム、及び他の入力又は制御デバイスを含むがこれらに限定されない、様々な構成要素を含む。デバイス１００は、１つ以上の画像センサ１６４と、１つ以上の近接センサ１６６と、１つ以上の加速度計１６８とを含むことができる。デバイス１００は、図１に示されていない構成要素を含んでもよい。
【００１２】
デバイス１００は、電子デバイスの単なる一実施例であり、デバイス１００は、上記に列挙したものより多い又は少ない構成要素を有することができ、それらの構成要素の一部は、１つの構成要素に組合わせる、又は異なる構成若しくは配置を有することができる。上記に列挙したデバイス１００の様々な構成要素は、１つ以上の信号処理回路及び／又は特定用途向け集積回路（application specific integrated circuits）（ＡＳＩＣ）を含む、ハードウェア、ソフトウェア、ファームウェア、又はそれらの組合せで具現化される。
【００１３】
図２は、一実施形態に係る、デバイス１００の構成要素を示すブロック図である。デバイス１００は、画像処理を含む様々な動作を実行することができる。この目的及び他の目的のために、デバイス１００は、他の構成要素の中でもとりわけ、画像センサ２０２と、システムオンチップ（system-on-a chip）（ＳＯＣ）構成要素２０４と、システムメモリ２３０と、永続的記憶装置（例えば、フラッシュメモリ）２２８と、動きセンサ２３４と、ディスプレイ２１６とを含むことができる。図２に示すような構成要素は、単なる例示である。例えば、デバイス１００は、図２に示されていない他の構成要素（スピーカ又はマイクロフォンなど）を含んでもよい。更に、いくつかの構成要素（動きセンサ２３４など）は、デバイス１００から省略されてもよい。
【００１４】
画像センサ２０２は、画像データをキャプチャするための構成要素であり、例えば、相補的金属酸化物半導体（complementary metal-oxide-semiconductor）（ＣＭＯＳ）アクティブピクセルセンサ、カメラ、ビデオカメラ、又は他のデバイスとして、具現化することができる。画像センサ２０２は、更なる処理のためにＳＯＣ構成要素２０４に送信される生画像データを生成する。いくつかの実施形態では、ＳＯＣ構成要素２０４によって処理された画像データは、ディスプレイ２１６上に表示され、システムメモリ２３０、永続的記憶装置２２８に記憶され、又は、ネットワーク接続を介してリモートコンピューティングデバイスに送信される。画像センサ２０２によって生成された生画像データは、ベイヤーカラーフィルタ配列（color filter array）（ＣＦＡ）パターン（以降、「ベイヤーパターン」とも呼ばれる）とすることができる。
【００１５】
動きセンサ２３４は、デバイス１００の動きを感知するための構成要素又は構成要素のセットである。動きセンサ２３４は、デバイス１００の向き及び／又は加速度を示すセンサ信号を生成することができる。センサ信号は、デバイス１００をオンにする、又はディスプレイ２１６上に表示された画像を回転するなどの、様々な動作のためにＳＯＣ構成要素２０４に送信される。
【００１６】
ディスプレイ２１６は、ＳＯＣ構成要素２０４によって生成されたような画像を表示するための構成要素である。ディスプレイ２１６は、例えば、液晶ディスプレイ（liquid crystal display）（ＬＣＤ）デバイス又は有機発光ダイオード（organic light emitting diode）（ＯＬＥＤ）デバイスを含むことができる。ＳＯＣ構成要素２０４から受信したデータに基づいて、ディスプレイ１１６は、メニュー、選択された動作パラメータ、画像センサ２０２によってキャプチャされＳＯＣ構成要素２０４によって処理された画像、及び／又はデバイス１００のユーザインターフェース（図示せず）から受信した他の情報などの、様々な画像を表示することができる。
【００１７】
システムメモリ２３０は、ＳＯＣ構成要素２０４によって実行するための命令を記憶するため、及びＳＯＣ構成要素２０４によって処理されたデータを記憶するための構成要素である。システムメモリ２３０は、例えば、ダイナミックランダムアクセスメモリ（dynamic random access memory）（ＤＲＡＭ）、シンクロナスＤＲＡＭ（synchronous DRAM）（ＳＤＲＡＭ）、ダブルデータレート（double data rate）（ＤＤＲ、ＤＤＲ２、ＤＤＲ３など）ＲＡＭＢＵＳ  ＤＲＡＭ（ＲＤＲＡＭ）、スタティックＲＡＭ（static RAM）（ＳＲＡＭ）、又はそれらの組合せを含む、任意の種類のメモリとして具現化することができる。いくつかの実施形態では、システムメモリ２３０は、ピクセルデータ又は他の画像データ若しくは統計を様々なフォーマットで記憶してもよい。
【００１８】
永続的記憶装置２２８は、不揮発的にデータを記憶するための構成要素である。永続的記憶装置２２８は、電源が使用可能でないときでもデータを保持する。永続的記憶装置２２８は、読み出し専用メモリ（read-only memory）（ＲＯＭ）、ＮＡＮＤ若しくはＮＯＲフラッシュメモリ、又は他の不揮発性ランダムアクセスメモリデバイスとして具現化することができる。
【００１９】
ＳＯＣ構成要素２０４は、１つ以上の集積回路（integrated circuit）（ＩＣ）チップとして具現化され、様々なデータ処理プロセスを実行する。ＳＯＣ構成要素２０４は、他のサブコンポーネントの中でもとりわけ、画像信号プロセッサ（image signal processor）（ＩＳＰ）２０６、中央プロセッサユニット（central processor unit）（ＣＰＵ）２０８、ネットワークインターフェース２１０、センサインターフェース２１２、ディスプレイコントローラ２１４、グラフィックプロセッサ（graphics processor）（ＧＰＵ）２２０、メモリコントローラ２２２、ビデオエンコーダ２２４、ストレージコントローラ２２６、及び様々な他の入出力（Ｉ／Ｏ）インターフェース２１８、並びにこれらのサブコンポーネントを接続するバス２３２を含むことができる。ＳＯＣ構成要素２０４は、図２に示されるサブコンポーネントよりも多くの又は少ないサブコンポーネントを含んでもよい。
【００２０】
ＩＳＰ２０６は、画像処理パイプラインの様々なステージを実行するハードウェアである。いくつかの実施形態では、ＩＳＰ２０６は、画像センサ２０２から生画像データを受信して、その生画像データをＳＯＣ構成要素２０４の他のサブコンポーネント又はデバイス１００の構成要素によって使用可能なフォーマットに処理することができる。ＩＳＰ２０６は、図３を参照して以下に詳細に説明するように、画像変換演算、水平及び垂直スケーリング、色空間変換、並びに／又は画像安定化変換などの、様々な画像操作演算を実行することができる。
【００２１】
ＣＰＵ２０８は、任意の好適な命令セットアーキテクチャを使用して具現化してもよく、その命令セットアーキテクチャで定義された命令を実行するように構成されてもよい。ＣＰＵ２０８は、ｘ８６、ＰｏｗｅｒＰＣ、ＳＰＡＲＣ、ＲＩＳＣ、ＡＲＭ、若しくはＭＩＰＳ命令セットアーキテクチャ（instruction set architectures）（ＩＳＡ）、又は任意の他の好適なＩＳＡなどの様々なＩＳＡのいずれかを使用する汎用又は組み込み型プロセッサであってもよい。単一のＣＰＵを図２に示すが、ＳＯＣ構成要素２０４は、複数のＣＰＵを含むことができる。マルチプロセッサシステムでは、ＣＰＵの各々は、必ずしもそうではないが、同一のＩＳＡを共通して実装してもよい。
【００２２】
グラフィック処理ユニット（Graphics processing unit）（ＧＰＵ）２２０は、グラフィックデータを実行するためのグラフィック処理回路である。例えば、ＧＰＵ２２０は、フレームバッファに表示されることになるオブジェクト（例えば、フレーム全体に対してピクセルデータを含むもの）をレンダリングすることができる。ＧＰＵ２２０は、グラフィック演算の一部又は全てを実行するようにグラフィックソフトウェア又は特定のグラフィック演算のハードウェア高速化を実行することができる１つ以上のグラフィックプロセッサを含んでもよい。
【００２３】
Ｉ／Ｏインターフェース２１８は、デバイス１００の様々な入出力構成要素とインターフェースするためのハードウェア、ソフトウェア、ファームウェア、又はそれらの組合せである。Ｉ／Ｏ構成要素は、キーパッド、ボタン、オーディオデバイス、及び全地球測位システムなどのセンサなどのデバイスを含むことができる。Ｉ／Ｏインターフェース２１８は、データをそのようなＩ／Ｏ構成要素に送信するためにデータを処理する、又は、そのようなＩ／Ｏ構成要素から受信したデータを処理する。
【００２４】
ネットワークインターフェース２１０は、１つ以上のネットワーク（例えば、キャリア又はエージェントデバイス）を介してデータをデバイス１００と他のデバイスとの間で交換することを可能にするサブコンポーネントである。例えば、ビデオ又は他の画像データは、ネットワークインターフェース２１０を介して他のデバイスから受信して、（例えば、図３に関して後述するような画像信号プロセッサ２０６へのバックエンドインターフェースを介した）後続の処理及び表示のためにシステムメモリ２３０に記憶してもよい。ネットワークとしては、ローカルエリアネットワーク（Local Area Networks）（ＬＡＮ）（例えば、イーサネット（登録商標）又は企業ネットワーク）及びワイドエリアネットワーク（Wide Area Networks)（ＷＡＮ）を挙げることができるが、これらに限定されない。ネットワークインターフェース２１０を介して受信した画像データは、ＩＳＰ２０６によって画像処理プロセスにかけることができる。
【００２５】
センサインターフェース２１２は、動きセンサ２３４とインターフェースするための回路である。センサインターフェース２１２は、動きセンサ２３４からセンサ情報を受信し、このセンサ情報を処理して、デバイス１００の向き又は移動を判定する。
【００２６】
ディスプレイコントローラ２１４は、ディスプレイ２１６上に表示されることになる画像データを送信するための回路である。ディスプレイコントローラ２１４は、ＩＳＰ２０６、ＣＰＵ２０８、グラフィックプロセッサ２２０、又はシステムメモリ２３０から画像データを受信し、ディスプレイ２１６上に表示するために好適なフォーマットに画像データを処理する。
【００２７】
メモリコントローラ２２２は、システムメモリ２３０と通信するための回路である。メモリコントローラ２２２は、ＳＯＣ構成要素２０４のＩＳＰ２０６、ＣＰＵ２０８、ＧＰＵ２２０、又は他のサブコンポーネントによって処理するためにシステムメモリ２３０からデータを読み取ることができる。メモリコントローラ２２２はまた、ＳＯＣ構成要素２０４の様々なサブコンポーネントから受信したデータをシステムメモリ２３０に書き込むことができる。
【００２８】
ビデオエンコーダ２２４は、ビデオデータを永続的記憶装置１２８に記憶するために好適なフォーマットにエンコードするため、又はネットワークを介して別のデバイスに伝送するためにネットワークインターフェースｗ１０にデータを渡すための、ハードウェア、ソフトウェア、ファームウェア、又はそれらの組合せである。
【００２９】
いくつかの実施形態では、ＳＯＣ構成要素２０４の１つ以上のサブコンポーネント又はこれらのサブコンポーネントのいくつかの機能は、ＩＳＰ２０６、ＣＰＵ２０８、又はＧＰＵ２２０上で実行されるソフトウェア構成要素によって実行することができる。そのようなソフトウェア構成要素は、システムメモリ２３０、永続的記憶装置２２８、又はネットワークインターフェース２１０を介してデバイス１００と通信する別のデバイスに記憶することができる。
【００３０】
画像データ又はビデオデータは、ＳＯＣ構成要素２０４内の様々なデータ経路を介して流れることができる。一実施例では、生画像データは、画像センサ２０２から生成して、ＩＳＰ２０６によって処理し、その後、バス２３２及びメモリコントローラ２２２を介してシステムメモリ２３０に送信することができる。画像データがシステムメモリ２３０に記憶された後で、画像データは、エンコードするためにビデオエンコーダ２２４によって、又は表示するためにディスプレイ１１６によって、バス２３２を介してアクセスすることができる。
【００３１】
別の実施例では、画像データは、画像センサ２０２以外のソースから受信される。例えば、ビデオデータは、有線又は無線ネットワークを介してＳＯＣ構成要素２０４に、ストリーミングする、ダウンロードする、又は別の方法で通信することができる。画像データは、ネットワークインターフェース２１０を介して受信し、メモリコントローラ２２２を介してシステムメモリ２３０に書き込むことができる。その後、画像データは、図３を参照して以下に詳細に説明するように、ＩＳＰ２０６によってシステムメモリ２３０から取得して、１つ以上の画像処理パイプラインステージを介して処理することができる。その後、画像データは、システムメモリ２３０に戻す、又は、ビデオエンコーダ２２４、ディスプレイコントローラ２１４（ディスプレイ２１６上に表示するために）、若しくは永続的記憶装置２２８に記憶するためにストレージコントローラ２２６に送信することができる。
例示的な画像信号処理パイプライン
【００３２】
図３は、一実施形態に係る、ＩＳＰ２０６を用いて実施された画像処理パイプラインを示すブロック図である。図３の実施形態では、ＩＳＰ２０６は、生画像データを受信するために画像センサ２０２に結合される。ＩＳＰ２０６は、出力する作成したもの、キャプチャしたもの、又は受信したものから画像情報を処理するステージのセットを含むことができる画像処理パイプラインを実装する。ＩＳＰ２０６は、他の構成要素の中でもとりわけ、センサインターフェース３０２、中央制御３２０、フロントエンドパイプラインステージ３３０、バックエンドパイプラインステージ３４０、画像統計モジュール３０４、ビジョンモジュール３２２、バックエンドインターフェース３４２、及び出力インターフェース３１６を含むことができる。ＩＳＰ２０６は、図３に示されていない他の構成要素を含むことができる、又は、図３に示す１つ以上の構成要素を省略することができる。
【００３３】
１つ以上の実施形態では、ＩＳＰ２０６の異なる構成要素は、画像データを異なる速度で処理する。図３の実施形態では、フロントエンドパイプラインステージ３３０（例えば、ロー現像ステージ３０６及びリサンプリング処理ステージ３０８）は、画像データを初期速度で処理することができる。したがって、様々な異なる技術、調整、修正、又は他の処理演算は、これらのフロントエンドパイプラインステージ３３０によって初期速度で実行される。例えば、フロントエンドパイプラインステージ３３０がクロックサイクルごとに２つのピクセルを処理する場合、ロー現像ステージ３０８の演算（例えば、ブラックレベル補償（black level compensation）、ハイライトリカバリ（highlight recovery）、及び不良ピクセル補正）は、画像データの２つのピクセルを同時に処理してもよい。対照的に、１つ以上のバックエンドパイプラインステージ３４０は、画像データを初期データレート未満の異なる速度で処理することができる。例えば、図３の実施形態では、バックエンドパイプラインステージ３４０（例えば、ノイズ処理ステージ３１０、カラー処理ステージ３１２、及び出力リスケーリング３１４）は、低減した速度（例えば、クロックサイクルごとに１ピクセル）で処理することができる。本明細書に記載される実施形態は、１つ以上のバックエンドパイプラインステージ３４０が初期データレートとは異なるレートで画像データを処理する実施形態を含むが、いくつかの実施形態では、バックエンドパイプラインステージ３４０は初期データレートで画像データを処理することができる。
【００３４】
センサインターフェース３０２は、画像センサ２０２から生画像データを受信して、生画像データをパイプライン内の他のステージによって処理可能な画像データに処理する。センサインターフェース３０２は、画像データサイズを低減するために画像トリミング、ビニング、又はスケーリングなどの様々な前処理演算を実行することができる。いくつかの実施形態では、ピクセルは、画像センサ２０２からセンサインターフェース３０２にラスター順に（すなわち、水平に、１行ごとに）送信される。パイプライン内の後続のプロセスも、ラスター順に実行することができ、結果もまた、ラスター順に出力することができる。単一の画像センサ２０２及び単一のセンサインターフェース３０２のみが図３に示されているが、２つ以上の画像センサがデバイス１００に設けられている場合、それぞれの画像センサからの生画像データを処理するために、対応する数のセンサインターフェースをＩＳＰ２０６に設けることができる。
【００３５】
フロントエンドパイプラインステージ３３０は、ロードメイン又はフルカラードメインで画像データを処理する。フロントエンドパイプラインステージ３３０は、ロー現像ステージ３０６及びリサンプリング処理ステージ３０８を含むことができるが、これらに限定されない。生画像データは、例えば、ベイヤーローフォーマットとすることができる。ベイヤーロー画像フォーマットでは、特定の色（全ての色の代わりに）に対して特定の値を有するピクセルデータが、それぞれのピクセルに与えられる。画像キャプチャセンサでは、画像データは、典型的には、ベイヤーパターンで提供される。ロー現像ステージ３０８は、画像データをベイヤーローフォーマットで処理することができる。
【００３６】
ロー現像ステージ３０８によって実行される演算としては、センサ線形化、ブラックレベル補償、固定パターンノイズ低減、不良ピクセル補正、ローノイズフィルタリング、レンズシェーディング補正、ホワイトバランスゲイン、及びハイライトリカバリが挙げられるが、これらに限定されない。センサ線形化は、他の処理のために非線形画像データを線形空間にマッピングすることを指す。ブラックレベル補償は、画像データのそれぞれの色成分（例えば、Ｇｒ、Ｒ、Ｂ、Ｇｂ）に対して独立にデジタルゲイン、オフセット、及びクリップを提供することを指す。固定パターンノイズ低減は、入力画像からダークフレームを減算し異なるゲインをピクセルに乗算することによってオフセット固定パターンノイズ及びゲイン固定パターンノイズを除去することを指す。不良ピクセル補正は、不良ピクセルを検出し、次に不良ピクセル値を置き換えることを指す。ローノイズフィルタリングは、輝度が類似の隣接したピクセルを平均化することによって画像データのノイズを低減することを指す。ハイライトリカバリは、他のチャネルからクリッピングされた（又は、ほぼクリッピングされた）それらのピクセルに対するピクセル値を推定することを指す。レンズシェーディング補正は、レンズの光学的中心からの距離にほぼ比例した明暗度の減少を補償するためにピクセルごとのゲインを適用することを指す。ホワイトバランスゲインは、全ての色成分（例えば、ベイヤーフォーマットのＧｒ、Ｒ、Ｂ、Ｇｂ）に対して独立してホワイトバランスのためのデジタルゲイン、オフセット及びクリップを提供することを指す。ＩＳＰ２０６の構成要素は、生画像データをフルカラードメインの画像データに変換することができ、したがって、ロー現像ステージ３０８は、生画像データに加えて又はその代わりに、フルカラードメインの画像データを処理することができる。
【００３７】
リサンプリング処理ステージ３０８は、様々な演算を実行して、ロー現像ステージ３０６から受信した画像データを変換、リサンプリング、又はスケーリングする。リサンプリング処理ステージ３０８によって実行される演算としては、デモザイク演算、ピクセルごと色補正演算、ガンママッピング演算、色空間変換、及び縮小又はサブバンド分割を挙げることができるが、これらに限定されない。デモザイク演算は、生画像データから欠落した色サンプルを（例えば、ベイヤーパターンに）変換又は補間して、画像データをフルカラードメインに出力することを指す。デモザイク演算は、フルカラーピクセルを得るための補間されたサンプルに対するローパス指向性フィルタリングを含むことができる。ピクセルごと色補正演算は、それぞれの色チャネルの相対ノイズ標準偏差に関する情報を用いてピクセルごとに色補正を実行して、画像データ内のノイズを増幅することなしに色を補正するプロセスを指す。ガンママッピングは、画像データを入力画像データ値から出力データ値に変換して、ブラック及びホワイト変換、セピア階調変換、ネガティブ変換、又は露光変換を含む、特殊画像効果を実行することを指す。ガンママッピングの目的のために、それぞれのピクセルの異なる色成分又はチャネルに対するルックアップテーブル（又はピクセル値を別の値にインデックス付けする他の構造）（例えば、Ｙ、Ｃｂ、及びＣｒの色成分に対する別個のルックアップテーブル）を使用することができる。色空間変換は、入力画像データの色空間を異なるフォーマットに変換することを指す。一実施形態では、リサンプリング処理ステージ３０８は、更なる処理のためにＲＢＤフォーマットをＹＣｂＣｒフォーマットに変換する。
【００３８】
中央制御３２０は、ＩＳＰ２０６内の他の構成要素の全体の演算を制御して連係させることができる。中央制御３２０は、ＩＳＰ２０６の他の構成要素の開始及び停止を制御するために、様々な演算パラメータを監視すること（例えば、クロックサイクル、メモリ待ち時間、サービスの品質、及び状態情報をログ記録すること）、ＩＳＰ２０６の他の構成要素に対する制御パラメータを更新又は管理すること、及びセンサインターフェース３０２とインターフェースすることを含むがこれらに限定されない演算を実行する。例えば、中央制御３２０は、他の構成要素がアイドル状態にある間に、ＩＳＰ２０６内の他の構成要素に対するプログラム可能なパラメータを更新することができる。プログラム可能なパラメータを更新した後で、中央制御３２０は、ＩＳＰ２０６のこれらの構成要素を実行状態にして、１つ以上の演算又はタスクを実行することができる。中央制御３２０はまた、リサンプリング処理ステージ３０８の前、その間、又はその後に、（例えば、図２のシステムメモリ２３０に書き込むことにより）画像データを記憶するようにＩＳＰ２０６の他の構成要素に命令することができる。このようにして、リサンプリング処理ステージ３０８からの画像データ出力を、バックエンドパイプラインステージ３４０を介して処理することに加えて又はその代わりに、ロー又はフルカラードメインフォーマットのフル解像度の画像データを記憶することができる。
【００３９】
画像統計モジュール３０４は、様々な動作を実行して、画像データに関連付けられた統計情報を収集する。統計情報を収集するための動作としては、センサ線形化、マスクパターン化不良ピクセル、サブサンプル生画像データ、非パターン化不良ピクセルの検出及び置き換え、ブラックレベル補償、レンズシェーディング補正、並びに逆ブラックレベル補償を挙げることができるが、これらに限定されない。そのような動作のうちの１つ以上を実行した後で、３Ａ統計（オートホワイトバランス（Auto white balance）（ＡＷＢ）、自動露出（auto exposure）（ＡＥ）、オートフォーカス（auto focus）（ＡＦ））などの統計情報、ヒストグラム（例えば、２Ｄカラー若しくは成分）、又は任意の他の画像データ情報が収集又は追跡されてもよい。いくつかの実施形態では、特定のピクセルの値又はピクセル値のエリアは、先行する動作がクリップされたピクセルを識別する場合、特定の統計データ（例えば、ＡＦ統計）の収集から除外することができる。単一の統計モジュール３０４のみが図３に示されているが、複数の画像統計モジュールがＩＳＰ２０６に含まれていてもよい。そのような実施形態では、それぞれの統計モジュールは、同じ又は異なる画像データに対して異なる情報を収集するように中央制御３２０によってプログラムすることができる。
【００４０】
ビジョンモジュール３２２は、様々な演算を実行して、画像データ内の貌面検出などのＣＰＵ２０８でのコンピュータビジョン演算を容易にする。ビジョンモジュール３２２は、前処理、包括的階調マッピング及びガンマ補正、ビジョンノイズフィルタリング、リサイズ、キーポイント検出、畳み込み、並びに配向勾配ヒストグラム（ＨＯＧ）の生成を含む、様々な演算を実行することができる。前処理は、入力画像データがＹＣｒＣｂフォーマットでない場合、サブサンプリング又はビニング演算、及びルミナンスの計算を含むことができる。包括的マッピング及びガンマ補正は、ルミナンス画像に対して前処理したデータに対して実行することができる。ビジョンノイズフィルタリングは、ピクセル不良を除去して画像データ内に存在するノイズを低減し、それによって後続のコンピュータビジョンアルゴリズムの品質及び性能を向上するために実行される。そのようなビジョンノイズフィルタリングは、ドット又は不良ピクセルを検出して修復すること、及び類似の輝度の隣接するピクセルを平均化することによりノイズを低減するために双方向フィルタリングを実行することを含むことができる。様々なビジョンアルゴリズムは、異なるサイズ及びスケールの画像を使用する。画像のリサイズは、例えば、ビニング又は線形補間動作により実行される。キーポイントは、同じシーン又は対象物の他の画像内のマッチングに良好に適合した画像パッチによって囲まれた画像内の位置である。そのようなキーポイントは、画像位置調整、裁判官室姿勢を計算すること、及び対象物追跡に有用である。キーポイント検出は、画像内のそのようなキーポイントを特定するプロセスを指す。畳み込みは、画像／ビデオ処理及びマシンビジョンにおいて使用することができる。畳み込みは、例えば、画像のエッジマップを生成する又は画像を平滑化するために実行することができる。ＨＯＧは、画像解析及びコンピュータビジョンのタスクのための画像パッチの記述を提供する。ＨＯＧは、例えば、（ｉ）簡単な差分フィルタを用いて水平及び垂直勾配を計算すること、（ｉｉ）水平及び垂直勾配から勾配の向き及び大きさを計算すること、並びに（ｉｉｉ）勾配の向きをビニングすることにより、生成することができる。
【００４１】
バックエンドインターフェース３４２は、画像センサ２０２以外の画像ソースから画像データを受信し、それを処理のためにＩＳＰ２０６の他の構成要素に転送する。例えば、画像データは、ネットワーク接続を介して受信して、システムメモリ２３０に記憶することができる。バックエンドインターフェース３４２は、システムメモリ２３０に記憶された画像データを取り出して、それを処理のためにバックエンドパイプラインステージ３４０に提供する。バックエンドインターフェース３４２によって実行される多くの演算のうちの１つは、取り出された画像データをバックエンド処理ステージ３４０によって利用することができるフォーマットに変換することである。例えば、バックエンドインターフェース３４２は、ＲＧＢ、ＹＣｂＣｒ  ４：２：０、又はＹＣｂＣｒ  ４：２：２にフォーマットされた画像データをＹＣｂＣｒ  ４：４：４カラーフォーマットに変換することができる。
【００４２】
バックエンドパイプラインステージ３４０は、特定のフルカラーフォーマット（例えば、ＹＣｂＣｒ  ４：４：４又はＲＧＢ）に従って画像データを処理する。いくつかの実施形態では、バックエンドパイプラインステージ３４０の構成要素は、更なる処理の前に、画像データを特定のフルカラーフォーマットに変換することができる。バックエンドパイプラインステージ３４０は、他のステージの中でもとりわけ、ノイズ処理ステージ３１０及びカラー処理ステージ３１２を含むことができる。バックエンドパイプラインステージ３４０は、図３に示されていない他のステージを含むことができる。
【００４３】
ノイズ処理ステージ３１０は、様々な演算を実行して、画像データ内のノイズを低減する。ノイズ処理ステージ３１０によって実行される演算としては、色空間変換、ガンマ／デガンママッピング、時間フィルタリング、ノイズフィルタリング、ルマ鮮鋭化、及びクロマノイズ低減が挙げられるが、これらに限定されない。色空間変換は、画像データを１つの色空間フォーマットから別の色空間フォーマットに変換（例えば、ＲＧＢフォーマットをＹＣｂＣｒフォーマットに変換）することができる。ガンマ／デガンマ演算は、特殊画像効果を実行するために、画像データを入力画像データ値から出力データ値に変換する。時間フィルタリングは、ノイズを低減するために、前にフィルタリングされた画像フレームを用いてノイズをフィルタリングする。例えば、前の画像フレームのピクセル値が、現在の画像フレームのピクセル値と混合される。ノイズフィルタリングは、例えば、空間ノイズフィルタリングを含むことができる。ルマ鮮鋭化は、ピクセルデータのルマ値を鮮鋭化することができ、クロマ抑制は、クロマをグレー（すなわち、色がない）に減衰させることができる。いくつかの実施形態では、ルマ鮮鋭化及びクロマ抑制は、空間ノーズフィルタリングと同時に実行することができる。ノイズフィルタリングの度合（aggressiveness）は、画像の異なる領域に対して異なって判定されてもよい。空間ノイズフィルタリングは、時間フィルタリングを実装する時間ループの一部に含まれてもよい。例えば、前の画像フレームは、処理されることになる次の画像フレームに対する参照フレームとして記憶される前に時間フィルタ及び空間ノイズフィルタによって処理されてもよい。他の実施形態では、空間ノイズフィルタリングは、時間フィルタリングに対する時間ループの一部として含まれなくてもよい（例えば、空間ノイズフィルタは、画像フレームが参照画像フレームとして記憶された後にそれに適用されてもよい（よって、空間的にフィルタリングされた参照フレームではない））。
【００４４】
カラー処理ステージ３１２は、画像データ内の色情報を調整することに関連付けられた様々な演算を実行することができる。カラー処理ステージ３１２で実行される演算としては、局所階調マッピング、ゲイン／オフセット／クリップ、色補正、３次元カラールックアップ、ガンマ変換、及び色空間変換が挙げられるが、これらに限定されない。局所階調マッピングは、画像をレンダリングするときの更なる制御を提供するために、空間的に変化する局所階調曲線を指す。例えば、階調曲線の２次元グリッド（中央制御３２０によってプログラミングすることができる）は、円滑に変化する階調曲線が画像にわたって生成されるように双線形的に補間されてもよい。いくつかの実施形態では、局所階調マッピングはまた、例えば、画像内のシャドウの青色を暗くしながら空をより青くするために使用することができる、空間的に変化し、かつ明暗度が変化する色補正行列を適用してもよい。デジタルゲイン／オフセット／クリップは、画像データの色チャネル又は成分ごとに提供されてもよい。色補正は、色補正変換行列を画像データに適用することができる。３Ｄカラールックアップは、拡張型階調マッピング、色空間変換、及び他の色変換を実行するために、色成分出力値（例えば、Ｒ、Ｇ、Ｂ）の３次元アレイを利用してもよい。ガンマ変換は、例えば、ガンマ補正、階調マッピング、又はヒストグラムマッチングを実行するために、入力画像データ値を出力データ値にマッピングすることにより、実行することができる。色空間変換は、１つの色空間から別へ（例えば、ＲＧＢからＹＣｂＣｒに）画像データを変換するために実行されてもよい。他の処理技術がまた、ブラック及びホワイト変換、セピア階調変換、ネガティブ変換、又は露光変換を含む、他の特殊画像効果を実行するようにカラー処理ステージ３１２の一部として実行されてもよい。
【００４５】
出力リスケーリングモジュール３１４は、ＩＳＰ２０６が画像データを処理するにつれて動作中（on the fly）の歪みをリサンプリング、変換及び補正してもよい。出力リスケーリングモジュール３１４は、ピクセルごとの部分的入力座標を計算して、多相リサンプリングフィルタを介して出力ピクセルを補間するためにこの部分的座標を使用してもよい。部分的入力座標は、画像をリサイズ又はトリミングすること（例えば、単純な水平及び垂直スケーリング変換を介して）、画像を回転及び刈り取ること（例えば、非分離可能行列変換を介して）、視点ワーピング（perspective warping）（例えば、追加の幅変換を介して）、及び画像データのキャプチャの間に画像センサにおける変化を原因とするストリップ（例えば、ロールシャッタに起因した）に区分的に適用されるピクセルごとの視野分割（per-pixel perspective divides）、並びに幾何学的歪み補正（例えば、補間された放射ゲインテーブルをインデックス付けするために光学的中心からの放射距離を計算すること、及び放射レンズ歪みを原因とする放射状摂動を座標に適用することを介して）など、出力座標の様々な考えられる変換から生成されてもよい。
【００４６】
出力リスケーリングモジュール３１４は、出力リスケーリングモジュール３１４で画像データが処理される際に、画像データに変換を適用することができる。出力リスケーリングモジュール３１４は、水平及び垂直スケーリング成分を含むことができる。設計の垂直部分は、垂直フィルタによって必要とされる「支持」を保持するために、画像データ線バッファの列を実装することができる。ＩＳＰ２０６をストリーミングデバイスとすることができるので、行の有限長のスライディングウィンドウ内の画像データの行のみをフィルタが使用するために利用可能であってもよい。新しい入力行のための余裕を設けるために行が破棄されると、その行は、利用可能でなくてもよい。出力リスケーリングモジュール３１４は、前の行にわたる計算された入力Ｙ座標を統計的に監視し、それを使用して垂直支持ウィンドウを保持するために行の最適なセットを計算することができる。それぞれの後続の行に対して、出力リスケーリングモジュールは、垂直支持ウィンドウの中心に関する推量を自動的に生成することができる。いくつかの実施形態では、出力リスケーリングモジュール３１４は、画像フレームのキャプチャ中のセンサの動きによって生じたアーチファクト及び動きを補正するために、入力画像データと出力画像データとの間のピクセルごとの視野変換を実行するデジタル微分解析器（digital difference analyzer）（ＤＤＡ）ステッパとしてエンコードされた区分的視野変換のテーブルを実装することができる。出力リスケーリングは、図１及び２に関して上述したように、出力インターフェース３１４を介してシステム１００の様々な他の構成要素に画像データを提供することができる。
【００４７】
各種実施形態では、構成要素３０２〜３４２の機能は、図３に示す画像処理パイプライン内のこれらの機能的ユニットの順序によって暗示された順序とは異なる順序で実行されてもよく、又は図３に示すユニットとは異なる機能的構成要素によって実行されてもよい。更に、図３に記載されたような様々な構成要素は、ハードウェア、ファームウェア、又はソフトウェアの様々な組合せで具現化することができる。
例示的なビジョンモジュール
【００４８】
ビジョンモジュール３２２は、図３を参照して上述したように、ＣＰＵ２０８でのコンピュータビジョン演算を容易にするために、様々な演算を実行する。この目的のために、ビジョンモジュール３２２は、他の構成要素の中でも、図４に示すように、配向勾配（ＨＯＧ）モジュール４１２のヒストグラム、マルチプレクサ４２０、及び畳み込みエンジン４１４を含んでもよい。ビジョンモジュール３２２は、スケーリングモジュールなどの図４に図示されていない他の構成要素を含んでもよい。
【００４９】
ＨＯＧエンジン４００は、画像を処理して、画像ごとにＨＯＧデータ４２６を生成する。ＨＯＧデータ４２６の例は、画像内の特定された勾配配向に基づいて画像に対して生成されるヒストグラム配向勾配である。ＨＯＧデータ４２６は、画像分類、シーン検出、表情検出、ヒト検出、対象物検出、シーン分類、及びテキスト分類などの様々なコンピュータビジョン用途で使用することができる。
【００５０】
マルチプレクサ４２０は、ＨＯＧエンジン４１２からＨＯＧデータ４２６を受信し、ＨＯＧエンジン４１２（例えば、ＤＲＡＭメモリ）以外の画像処理プロセッサ２０６の構成要素からピクセルデータ４２４を受信し、様々な演算モードに従って、畳み込みエンジン４１４に送られる入力データ４２２としてのＨＯＧデータ４２６又はピクセルデータ４２４のいずれかを選択する。１つのモードでは、マルチプレクサ４２０は、入力データ４２２として、ＨＯＧデータ４２６を畳み込みエンジン４１４に転送し得る。別のモードでは、マルチプレクサ４２０は、鮮鋭化、ぼかし、及びエッジ検出などの演算を実行するための入力データ４２２として、ピクセルデータ４２４を畳み込みエンジン４１４に転送することができる。マルチプレクサ４２０を制御するための構成信号は、中央制御３２０から受信されてもよい。ピクセルデータ４２２は、複数のチャネルのインターリーブピクセル値のストリームである。
【００５１】
畳み込みエンジン４１４は、入力データ４２２に対して畳み込み演算を実行する構成可能回路である。この目的のために、図５を参照して以下詳述するように、畳み込みエンジン４１４は、畳み込みカーネル情報を記憶する、計算を実行する、及び乗算値を累算して出力４２８を生成するための構成要素を含む。
【００５２】
図４に示されるようなビジョンモジュール３２２の構造は単なる例示に過ぎず、様々な変更を図４の構造体に加えることができる。例えば、ＨＯＧエンジン４１２及びマルチプレクサ４２０などの構成要素は省略されてもよい。あるいは、マルチプレクサ４２０は、３つ以上のソースからピクセルデータを受信し、ストリーム入力データ４２２として畳み込みエンジン４１４に入力するための１つのソースを選択することができる。
【００５３】
以下の説明では、入力データ４２２は説明上、ピクセル値であると仮定する。しかしながら、入力データ４２２は、畳み込み演算に適した他の種類のデータ（例えば、ＨＯＧデータ）であってもよいことに留意されたい。
例示的な畳み込みエンジンアーキテクチャ
【００５４】
図５は、一実施形態に係る、畳み込みエンジン４１４を示すブロック図である。畳み込みエンジン４１４は、画像／ビデオ処理及びコンピュータビジョンを容易にするために、インターリーブされたマルチチャネル画像データに対する演算を実行する回路である。畳み込みエンジン４１４は、畳み込み演算、チャネル間処理演算、及びチャネルごとの処理演算などの、マルチチャネル画像データに対して様々なタイプの演算を実行することができる。例示的な畳み込み操作は、エッジマップ又は平滑化画像を生成することを含み得る。例えば、ガウスカーネルと畳み込まれた画像は、ノイズ及びエイリアスを低減した平滑な画像を生成することができる。別の実施例では、畳み込みエンジン４１４は、画像が１組の複数の方向性畳み込みカーネルで畳み込まれたときに分類するためのガボール特徴などの画像特徴を生成する。更に、いくつかの実施形態では、畳み込みエンジン４１４は、人又は物体の検出などの深層機械学習分類タスクのためのテンプレートマッチングを容易にする。
【００５５】
畳み込みエンジン４１４は、空間プーリング及び局所応答正規化などの畳み込みニューラルネットワーク（ＣＮＮ）タスクを容易にする様々な演算を実行する。ＣＮＮは、画像分類、物体検出、及びその他のコンピュータビジョンタスクを実行することができる深層学習アーキテクチャである。
【００５６】
畳み込みエンジン４１４は、例えばバス２３２から入力データ４２２を受信し、記憶された畳み込みカーネル情報に基づいて入力データ４２２に対して畳み込み演算を実行し、畳み込み演算の結果にチャネル間及びチャネルごとの処理を実行し、出力データ４２８を生成する。
【００５７】
畳み込みエンジン４１４は、他の構成要素の中でもとりわけ、第１の畳み込み回路５０２と、デマルチプレクサ回路５０３と、第２の畳み込み回路５０４と、チャネルマージ回路５０６とを含み得る。畳み込みエンジン４１４は、いくつかの実施形態では、第１の畳み込み回路５０２及び第２の畳み込み回路５０４を含むものとして示されているが、畳み込みエンジン４１４はＮ個の畳み込み回路を含んでもよい。第１の畳み込み回路５０２は入力データ４２２のストリームを受信し、１つ以上の畳み込みカーネルを入力データ４２２に適用して、値５３０のストリームを生成する。第２の畳み込み回路５０４はまた、入力データ４２２のストリーム（あるいは、第１の畳み込み回路５０２から出力された値５３０のストリーム）を受信し、１つ以上の畳み込みカーネルを入力データ４２２に適用して、値５３２のストリームを生成する。畳み込み回路５０２又は５０４によって受信及び処理された入力データのストリームはそれぞれ、入力データの１つ以上のチャネルをインターリーブ方式で定義する。
【００５８】
第１の畳み込み回路５０２は、マルチプレクサ５０８と、前処理回路５１０と、畳み込みコア回路５１２と、空間プーリング回路５１４とを含む。マルチプレクサ５０８は前処理回路５１０に連結され、前処理回路５１０は畳み込みコア回路５１２に連結され、畳み込みコア回路５１２は空間プーリング回路５１４に連結される。
【００５９】
マルチプレクサ５０８は、バス２３２から入力データ４２２を受信し、前処理回路５１０に入力データ４２２を提供する。いくつかの実施形態では、マルチプレクサ５０８は、バス２３２から入力データ４２４と１つ以上の他のデータソース（例えば、ＨＯＧデータ４２６）の間で選択し、選択されたデータを前処理回路５１０に提供する。他の実施形態では、マルチプレクサ５０８は第１の畳み込み回路５０２から省略され、前処理回路５１０は、バス２３２から入力データ４２４を受信する。
【００６０】
前処理回路５１０は、例えば、入力データ４２２にゲイン、オフセット、及びクリッピング演算を適用することによって、インターリーブされた入力データ４２２に対して前処理演算を実行する。これらの演算は、平均減算又はコントラスト拡張などの畳み込み前に各種処理を適用するために使用することができる。いくつかの実施形態では、前処理回路５１０は、入力データ４２２のストリームからの各チャネルの値を特定し、各チャネルを個々に扱い、異なるチャネルの入力値に異なるゲイン、オフセット、又はクリッピング演算を適用する。例えば、入力データ４２２は、インターリーブされたＧｒ、Ｒ、Ｂ、及びＧｂチャネルを含むベイヤー生フォーマットであってもよい。前処理回路５１０は、異なるチャネルのピクセルデータに異なるゲイン、オフセット、又はクリッピング演算を適用することができる。いくつかの実施形態では、前処理回路５１０は、前処理演算を適用することなく入力を畳み込みコア回路５１２に送信するバイパスモードで演算する。
【００６１】
畳み込みコア回路５１２は、前処理回路５１０から前処理された入力データを受信し、１つ以上の畳み込みカーネルを入力データに適用する。畳み込みコア回路５１２は、畳み込み結果に対して後処理を実行することもできる。後処理は、マルチチャネル正規化相互相関（ＮＣＣ）又はチャネル間局所応答正規化（ＬＲＮ）などの深層機械学習に関して導出される値を生成する演算を含んでもよい。マルチチャネル又はチャネル間演算は、畳み込み結果のために２つ以上のチャネルからの値を結合する。畳み込みコア回路５１２によって生成されるストリームにおける値のシーケンスは、インターリーブ方式で複数のデータチャネルを定義する。畳み込みコア回路５１２の結果は、空間プーリング回路５１４に提供される。いくつかの実施形態では、畳み込みコア回路５１２の結果は、値４３６のストリームによって示されるように、畳み込みエンジン４１４から出力される。
【００６２】
空間プーリング回路５１４は、チャネルごとの空間プーリング及びチャネルごとの局所応答正規化（ＬＲＮ）などのチャネルごとの演算を、畳み込みコア回路５１２の出力に対して実行し、値５３０のストリームを出力する。チャネルごとの演算は、各チャネルに個々に関連付けられた値を処理する。チャネルごとのＬＲＮは、応答マップ内の局所コントラストを正規化する。チャネルごとの演算が、深層機械学習を容易にするために、畳み込み層の後に適用されてもよい。空間プーリング回路５１４のチャネルごとの演算は、通常は小さいローカルウィンドウに適用され、畳み込みカーネル係数を使用しないため、畳み込み層と比較して計算コストが低い。
【００６３】
第２の畳み込み回路５０４は、マルチプレクサ５１８と、前処理回路５２０と、畳み込みコア回路５２２と、空間プーリング回路５２５とを含む。第１の畳み込み回路５０２に関する上記の説明は、第２の畳み込み回路５０４及び畳み込みエンジン４１４に含まれ得る任意の他の畳み込み回路に適用され得る。ＭＵＸ５１８は、第１の畳み込みコア回路５０２から出力された値５３０のストリームとバス２３２からの入力値４２２の間で選択し、選択された入力を前処理回路５２０に送信する。両ストリームがインターリーブ方式でデータチャネルを含むため、第２の畳み込み回路５０４は、値５３０のストリーム又は入力値４２４のストリームのいずれかに類似演算を適用することができる。前処理回路５２０、畳み込みコア回路５２２、及び空間プーリング回路５２４の演算及び機能は、前処理回路５１０の畳み込みコア回路５１２及び空間プーリング回路５１４とほぼ同じであるため、これらの回路の詳細な説明は簡潔化のため本明細書では省略する。
【００６４】
デマルチプレクサ回路５０３は、値５３０のストリームを受信し、その出力をチャネルマージ回路５０６又は第２の畳み込み回路５０４のいずれかにルーティングする回路である。デマルチプレクサ５０３は、中央制御３２０からの命令に基づいてルーティングを選択することができる。中央制御３２０は、演算モードに基づいて、畳み込み回路５０２及び５０４が直列に演算するカスケードモードと、畳み込み回路５０２及び５０４が並列に演算する他のモードの間のデマルチプレクサ５０３の選択を設定する。いくつかの実施形態では、デマルチプレクサ回路５０３は、畳み込みエンジン４１４から省略される。
【００６５】
チャネルマージ回路５０６は、第１の畳み込み回路５０２の出力に連結された入力と、第２の畳み込み回路５０４の出力に連結された別の入力と、を有する。チャネルマージ回路５０６は、畳み込み回路５０２及び５０４から値５３０及び５３２のストリームをそれぞれ受信し、それらの値を、値４２８ａ及び４２８ｂのストリームなどの出力値４２８の１つ以上の出力ストリームに結合する。畳み込み回路５０２及び５０４から受信される値のストリームは、図６Ａ〜６Ｃに関連してより詳細に後述するように、畳み込みエンジン４１４に関して選択される演算モードに応じて様々な方法で処理され得る。
【００６６】
チャネルマージ回路５０６は、チャネルマージャ５２６及びマルチプレクサ５２８を含む。チャネルマージャ５２６は、第１の畳み込みコア回路５０２から値５３０のストリームを受信し、第２の畳み込みコア回路５０４から値５３２のストリームを受信し、値５３０及び５３２をインターリーブして値５３４のストリームを生成する。値５３４のストリームは、チャネルマージャ５２６によってインターリーブ方式で結合されるように、値５３０のストリームからのチャネルと値５３２のストリームからのチャネルとを含む。
【００６７】
マルチプレクサ５２８は、チャネルマージャ５２６からの値５３４のストリームに連結される入力と、第２の畳み込みコア回路５０４からの値５３２のストリームに連結される入力とを有する。マルチプレクサ５２８は、値４２８ｂのストリームとして出力するため、値５３４のストリームと値５３２のストリームの間で選択する。チャネルマージ回路５０６は、値４２８ａのストリームとして第１の畳み込み回路５０２から値５３０のストリームを出力することもできる。
畳み込みエンジン処理モード
【００６８】
畳み込みエンジン４１４は、二重畳み込みモード、カスケードモード、及び並列モードを含む複数のモードで演算する。中央制御３２０は、指定モードで演算させるように畳み込みエンジン４１４を構成する構成情報を畳み込みエンジン４１４に送信する。構成情報は、畳み込みエンジン４１４の構成要素への命令を含む。構成情報は、畳み込み回路５０２及び５０４のそれぞれによって使用される畳み込みカーネルなど、構成要素の入力及び機能を指定してもよい。
【００６９】
図６Ａは、一実施形態に係る、畳み込みエンジン４１４の二重畳み込みモードを示すブロック図である。二重畳み込みモードでは、畳み込み回路５０２及び５０４は、異なる畳み込みカーネルを同じ入力データ４２４に適用することによって並列演算し、チャネルマージ回路５０６は、畳み込み回路５０２及び５０４からの結果を結合して出力値４２８ｂの出力ストリームを生成する。各畳み込みカーネルに関連付けられるプロパティは、フィルタ要素値、畳み込みカーネルのカーネルサイズ（例えば、カーネルによって定義されるウィンドウのピクセルの高さ及び幅）、畳み込みカーネルのスパース値、及び畳み込み間のステップ値を含み得る。第１の畳み込み回路５０２から出力された値５３０のストリーム、及び第２の畳み込み回路５０４から出力される値５３２のストリームは、チャネルマージ回路５０６に入力される。チャネルマージ回路５０６は、出力値５３０及び５３２をインターリーブすることによって出力値４２８ｂの出力ストリームを生成する。値４２８ｂの出力ストリームは、二重畳み込みモードで畳み込みエンジン４１４から出力される。
【００７０】
いくつかの実施形態では、中央制御３２０は、マルチプレクサ５０８、５１８、５２８、及びデマルチプレクサ５０３による選択を制御してデータストリームをルーティングすることによって、畳み込みエンジン４１４を二重畳み込みモードに設定する。デマルチプレクサ５０３は、使用される場合、値５３０のストリームを、出力値４２８ａの出力ストリームとして出力されるチャネルマージ回路５０６にルーティングする。マルチプレクサ５１８は、第２の畳み込み回路５０４の入力として、第１の畳み込み回路５０２から出力された値５３０のストリームを選択する。マルチプレクサ５２８は、出力値４２８ｂの出力ストリームのため、チャネルマージャ５２６から出力された値５３４のストリームを選択する。マルチプレクサ５０８は、使用される場合、第１の畳み込み回路５０２の入力として、バス２３２から入力データ４２４を選択する。
【００７１】
二重畳み込みモードは、２つの畳み込みコア回路５０２及び５０４上で同じ入力ストリームを並列処理する畳み込みエンジン４１４の構成である。畳み込み回路５０２及び５０４は、入力データに異なる畳み込みカーネルを適用することができる。多くの出力チャネルの計算を容易にするために、畳み込みエンジン４１４は、畳み込み回路５０２と５０４との間で処理タスクを分配する。例えば、第１の畳み込み回路５０２が出力チャネルの第１の半分を処理し得る一方、第２の畳み込み回路５０４が出力チャネルの第２の半分を処理し得る。チャネルマージ回路５０６は、畳み込み回路５０２及び５０４からの複数のチャネルのストリームを、相互にインターリーブされた両ストリームからのチャネルを有する単一のストリームに結合する。
【００７２】
いくつかの実施形態では、畳み込み回路５０２及び５０４はそれぞれ２つの実行クラスタを有し、各実行クラスタは１クロック当たりピクセル値（ｐｐｃ）を生成する。よって、各畳み込み回路５０２及び５０４は、２ｐｐｃを生成する。チャネルマージ回路５０６は、畳み込み回路５０２及び５０４の結果を結合して、二重畳み込みモードでのチャネルマージ後に４ｐｐｃ出力を生成する。
【００７３】
図６Ｂは、一実施形態に係る、畳み込みエンジン４１４のカスケードモードを示すブロック図である。カスケードモードでは、畳み込み回路５０２及び５０４は直列演算する。第１の畳み込み回路５０２は、１つ以上の畳み込みカーネルをバス２３２から入力データ４２２に適用して、値５３０のストリームを生成する。第２の畳み込み回路５０４は、値５３０のストリームを受信し、１つ以上の第２の畳み込みカーネルを値５３０に適用して、値５３２のストリームを生成する。畳み込み回路５０２及び５０４は、異なる畳み込みカーネルを使用してもよい。チャネルマージ回路５０６は、畳み込み回路５０４から値５３２のストリームを通過することによって出力値４２８ｂの出力ストリームを生成する。
【００７４】
中央制御３２０は、マルチプレクサ５０８、５１８、５２８、及びデマルチプレクサ５０３による選択を制御することによって、畳み込みエンジン４１４をカスケードモードに設定する。マルチプレクサ５０８は、使用される場合、第１の畳み込み回路５０２の入力として、バス２３２から入力データ４２４を選択する。デマルチプレクサ５０３は、使用される場合、値５３０のストリームをマルチプレクサ５１８にルーティングする。マルチプレクサ５１８は、第２の畳み込み回路５０４の入力として、畳み込みエンジン４１４から出力された値５３０のストリームを選択する。マルチプレクサ５２８は、出力値４２８ｂの出力ストリームの第２の畳み込み回路５０４から出力された値５３２のストリームを選択する。
【００７５】
カスケードモードでは、畳み込み回路５０２及び５０４は、演算間のメモリ転送を行うことなく、直列で２つの畳み込み演算を実行する。カスケード内の第１の畳み込み回路５０２は、２つの実行クラスタのうちの１つのみを使用することにより１ｐｐｃを生成する。第１の畳み込み回路５０２が２ｐｐｃ出力ストリームを生成する場合、後続の第２の畳み込み回路５０４は、４ｐｐｃを２回処理する必要がある。したがって、単一の実行クラスタが第１の畳み込み回路５０２内で使用されて、第２の畳み込み回路５０４に入力される１ｐｐｃのストリームを生成する。第２の畳み込み回路５０４は、第１の畳み込み回路５０２の１ｐｐｃのストリームから２ｐｐｃの出力ストリームを生成する。
【００７６】
図６Ｃは、一実施形態に係る、畳み込みエンジン４１４の並列モードを示すブロック図である。並列モードでは、畳み込み回路５０２及び５０４は、２つの別個のインターリーブ出力ストリームを生成するため、２つの単一ユニットとして並列演算する。例えば、画像は、２つの垂直ストリップに分割されてもよく、畳み込み回路５０２及び５０４はそれぞれ１つのストリップを処理する。畳み込み回路５０２及び５０４は、同じ入力データ又は異なる入力データを処理することができる。入力データが同じである場合、畳み込み回路５０２及び５０４は、入力データに異なる畳み込みカーネルを適用することができる。別の実施例では、畳み込み回路５０２及び５０４は、異なる入力データに異なるカーネルを適用する。
【００７７】
第１の畳み込み回路５０２は、１つ以上の畳み込みカーネルをバス２３２から入力データ４２２に適用して、値５３０のストリームを生成する。第２の畳み込み回路５０４は、１つ以上の第２の畳み込みカーネルをバス２３２から入力データ４２２に適用して、値５３２のストリームを生成する。チャネルマージ回路５０６は、値５３０のストリームを通過することによって出力値４２８ａの出力ストリームを生成し、値５３２のストリームを通過することによって出力値４２８ｂの出力ストリームを生成する。別個の出力ストリーム４２８ａ及び４２８ｂはそれぞれ、インターリーブ方式で複数のデータチャネルを定義してもよい。並列モードでは、畳み込み回路５０２及び５０４からの出力は、インターリーブチャネルの単一のストリームに結合されるのではなく、インターリーブチャネルの別個のストリームに保持される。
【００７８】
中央制御３２０は、マルチプレクサ５０８、５１８、５２８、及びデマルチプレクサ５０３における選択を制御することによって、畳み込みエンジン４１４を並列モードに設定する。マルチプレクサ５０８は、使用される場合、第１の畳み込み回路５０２の入力として、バス２３２から入力データ４２２を選択する。デマルチプレクサ５０３は、使用される場合、出力値４２８ａの出力ストリームとして出力するために、第１の畳み込み回路５０２の出力からチャネルマージ回路５０６に値５３０のストリームをルーティングする。マルチプレクサ５１８は、第２の畳み込み回路５０４の入力としてバス２３２から入力データ４２２を選択する。マルチプレクサ５２８は、チャネルマージ回路５０６の出力値４２８ｂの出力ストリームのために、第２の畳み込み回路５０４から出力された値５３２のストリームを選択する。チャネルマージ回路５０６はまた、値５３０のストリームを出力値４２８ａの出力ストリームに送信する。
【００７９】
並列モードでは、各畳み込み回路５０２及び５０４は、２つの実行クラスタを使用して２ｐｐｃを生成することができる。チャネルマージ回路５０６は、第１の畳み込み回路５０２から２ｐｐｃで第１のストリームを出力し、第２の畳み込み回路５０４から２ｐｐｃで第２のストリームを出力する。
【００８０】
図７は、一実施形態に係る、複数のモードで畳み込みエンジン４１４を演算させる方法を示すフローチャートである。中央制御３２０は、構成情報を畳み込みエンジン４１４に送信する７０２。構成情報は、畳み込みエンジンを、二重畳み込みモード、カスケードモード、又は直列モードなどの特定の演算モードに設定する畳み込みエンジンの構成要素のパラメータを含んでもよい。
【００８１】
構成情報は、畳み込みコア回路５０２及び５０４のそれぞれに入力される値のストリームを定義する情報を更に含んでもよい。例えば、構成情報は、畳み込みエンジン４１４の構成要素が直列ストリームから各チャネルのピクセルを識別することができるように、画像サイズ及び／又はチャネルカウントを定義することができる。
【００８２】
構成情報は、フィルタ要素値、カーネルサイズ、スパース値、及びステップ値など、各畳み込みコア回路５０２及び５０４によって使用される１つ以上の畳み込みカーネルを定義する情報を更に含んでもよい。畳み込みカーネルを定義する構成情報は、畳み込みコア回路５０２及び５０４のそれぞれによって実行される畳み込み演算を指定する。
【００８３】
構成情報を受信した後、畳み込みエンジン４１４の構成は、構成情報に従って更新され７０４、構成情報に記載されているような演算を実行する。構成の更新は、選択された演算モードに従って、畳み込みエンジン内でストリームをルーティングすることを含み得る。ルーティング制御は、図６Ａ〜６Ｃに関連して上述したように、畳み込みエンジン４１４のマルチプレクサ５０８、５１８、及び５２８を使用して設定され得る。構成の更新は、畳み込みカーネルを畳み込み回路５０２及び５０４に提供することを含み得る。畳み込み回路５０２及び５０４は、上述の演算モードに応じて１つ又は２つの実行クラスタを使用するように構成されてもよい。
【００８４】
いくつかの実施形態では、構成命令は、チャネルマージ前に各畳み込み回路５０２及び５０４において、畳み込み結果に対して実行される１つ以上の深層学習演算を更に定義することができる。例示的な演算は、正規化相互相関計算、応答整流、空間プーリング、及び局所応答正規化を含み得る。いくつかの実施形態では、チャネル間演算は、畳み込みコア回路５０２及び５０４の後処理回路７０４によって実行され得る一方で、チャネルごとの演算は空間プーリング回路５１４及び５２４によって実行される。
【００８５】
畳み込みエンジン４１４の第１の畳み込み回路５０２は、１つ以上の第１の畳み込みカーネルを第１の入力データに適用することによって、第１の値のストリームを生成する７０６。畳み込みエンジン４１４の第２の畳み込み回路５０４は、１つ以上の第２の畳み込みカーネルを第２の入力データに適用することによって、第２の値のストリームを生成する７０８。第１及び第２の入力データの生成は、畳み込みを実行することを含んでもよく、畳み込みコア回路５１２／５２２の後処理回路又は空間プーリング回路５１４／５２４を用いて１つ以上の深い学習演算を適用することを含んでもよい。
【００８６】
二重畳み込みモードでは、畳み込み回路５０２及び５０４によって使用される第１及び第２の入力データは同じであってもよく、第１及び第２の畳み込みカーネルは異なっていてもよい。カスケードモードでは、第２の畳み込み回路５０４によって使用される第２の入力データは、第１の畳み込み回路５０２の出力であり、第１及び第２の畳み込みカーネルは異なっていてもよい。並列モードでは、第１及び第２の入力データは同じであってもよく、第１及び第２の畳み込みカーネルは異なっていてもよい。
【００８７】
チャネルマージ回路は、第１の畳み込み回路５０２からの第１の値のストリーム及び第２の畳み込み回路５０４からの第２の値のストリームに基づいて、１つ以上の出力ストリームを生成する７１０。二重畳み込みモードでは、チャネルマージ回路７１０は、第１の畳み込み回路５０２からのインターリーブチャネル値のインターリーブされた第１のストリームと、第２の畳み込み回路５０４からのインターリーブチャネル値の第２のストリームとをインターリーブ方式で結合することにより出力ストリームを生成する。カスケードモードでは、チャネルマージ回路７１０は、第２の畳み込み回路５０４からのインターリーブチャネル値の第２のストリームを含む出力ストリームを生成し、インターリーブチャネル値の第２のストリームは、第２の畳み込み回路５０４においてインターリーブチャネル値の第１のストリームに１つ以上の第２の畳み込みカーネルを適用することによって導出される。直列モードでは、チャネルマージ回路７１０は、第１の畳み込み回路５０２からのインターリーブチャネル値の第１のストリームを含む第１の出力ストリームと、第２の畳み込み回路５０４からのインターリーブチャネル値の第２のストリームを含む別個の第２の出力ストリームとを生成する。
【００８８】
図７に示すプロセスは、単なる例示に過ぎず、様々な変更を該プロセスに加えることができる。例えば、第１の値のストリームの生成７０６と、第２の値のストリームの生成７０８は、畳み込みエンジン４１４の構成情報及び演算モードによって指定されるように、並列又は直列で実行され得る。
畳み込みコア回路
【００８９】
図８は、一実施形態に係る畳み込みコア回路８００を示すブロック図である。畳み込みコア回路８００は、図５に示されるように、第１の畳み込み回路５０２の畳み込みコア回路５１２又は第２の畳み込み回路５０４の畳み込み回路５２２の一例である。畳み込みコア回路８００は、畳み込みコア８０２及び後処理回路８０４を含む。畳み込みコア８０２は入力データ８３６を受信し、入力データ８３６に１つ以上の畳み込みカーネルｈを適用することによって畳み込み演算を実行する。入力データ８３６は、バス３２３からの入力データ４２２、別の畳み込み回路の出力、又は何らかの他のソースからの入力データであってもよく、上述したように前処理回路５１０によって前処理されてもよい。後処理回路８０４は、畳み込みコア８０２の出力に対して後処理を実行する。
【００９０】
畳み込みコア回路８０２は、畳み込みフロントエンド８０６と、カーネルメモリ８０８と、実行クラスタ８１０と、実行クラスタ８１２と、畳み込みバックエンド８１４とを含む。畳み込みフロントエンド８０６は、実行クラスタ８１０及び８１２に連結される。畳み込みフロントエンド８０６は、入力データ８３６を受信し、実行クラスタ８１０及び８１２による処理のために入力データ８３６を準備する。畳み込みフロントエンド８０６は、入力データ及び畳み込みカーネルを含む処理タスクを、実行クラスタ８１０及び８１２にわたって分配する。
【００９１】
実行クラスタ８１０及び８１２はそれぞれ、畳み込みフロントエンド及びカーネルメモリ８０８に連結される。各実行クラスタ８１０及び８１２は、複数の積和演算（ＭＡＣ）ユニットを含んでもよい。複数の出力チャネルが使用される場合、偶数インデックスを有する出力チャネルが一方の実行クラスタによって処理され得る一方、偶数インデックスを有する出力チャネルが他方の実行クラスタによって処理され得る。各実行クラスタ８１０及び８１２は１ｐｐｃを生成することができるため、全体として畳み込みコア８０２は２ｐｐｃを生成することができる。実行クラスタ８１０は、偶数インデックス出力チャネルを含む偶数データ値８４２のストリーム、及び奇数インデックス出力チャネルを含む奇数データ値８４４のストリームを生成する。
【００９２】
カーネルメモリ８０８は、実行クラスタ８１０及び８１２に提供される１つ以上の畳み込みカーネルｈを記憶する。いくつかの実施形態では、中央制御３２０は、１つ以上の畳み込みカーネルｈをカーネルメモリ８０８に提供して、畳み込み演算を制御する。各実行クラスタ８１０及び８１２は、畳み込みフロントエンド８０６によって準備されるように、カーネルメモリ８０８からの畳み込みカーネルを入力データ８３６に適用する。実行クラスタ８１０及び８１２は、例えば２ｐｐｃで出力値を生成するために並列に実行され得る。いくつかの実施形態では、単一の実行クラスタ８１０又は８１２のみが、例えば１ｐｐｃで出力値を生成することが可能である。
【００９３】
一実施例では、実行クラスタ８１０及び８１２は、一連の畳み込みカーネルを入力データの異なる部分に適用して、偶数インデックス出力チャネルを含む偶数データ値８４２のストリーム、及び奇数インデックス出力チャネルを含む奇数データ値８４４のストリームを生成する。偶数データ値８４２及び奇数データ値８４４はマルチチャネルデータであり、局所応答正規化及び正規化相互相関などのチャネル間演算を用いて後処理パイプラインにおいて別々に処理される。
【００９４】
いくつかの実施形態では、畳み込みフロントエンド８０６は、カーネルメモリ８０８に記憶され、実行クラスタ８１０及び８１２によって処理される畳み込みカーネルに関するカーネル統計値８４０を生成する。カーネル統計値は、畳み込みカーネルのプロパティから導出され得る。カーネル統計値８４０はΣＨ及びΣＨ2を含んでもよく、ここで、Ｈは畳み込みカーネルのカーネルデータである。畳み込みコア８０２は、カーネル統計値８４０を後処理回路８０４に送信する。
【００９５】
畳み込みバックエンド８１４は、実行クラスタ８１０及び８１２の出力に連結される。畳み込みバックエンド８１４は、各実行クラスタからの出力値の更なる処理を実行する。このような演算としては、大ビットサイズデータのマルチサイクル累算が挙げられるが、これらに限定されない。
【００９６】
いくつかの実施形態では、畳み込みコア８０２の畳み込みバックエンド８１４又は何らかの他の構成要素は、入力データ８３６に基づいて局所統計値を生成する。ローカル統計値は、ΣＩ、ΣＩ2、及びΣＩ*Ｈを含んでもよく、Ｉは入力データ８３６であり、Ｈは入力データ８３６に適用される畳み込みカーネルである。いくつかの実施形態では、ローカル統計値は、偶数データ値８４２のストリーム及び奇数データ値８４４のストリームを介して、後処理回路８０４に送信される。例えば、局所統計値は、マルチチャネルストリームの最後のアクティブチャネルなどのストリーム８４２及び８４４の補助チャネルであってもよい。他の実施形態では、ローカル統計値は、カーネル統計値８４０を有するストリームで、又は別個のストリームで送信されてもよい。
【００９７】
したがって、畳み込みコア８０２は、偶数データ値８４２のストリーム、奇数データ値８４４のストリーム、カーネル統計値８４０、及び局所統計値を生成する。これらの値は、追加処理のために後処理回路８０４に提供される。畳み込みコア８０２の例示的な回路を、図１０に関連してより詳細に後述する。
【００９８】
後処理回路８０４は、それぞれの出力ストリーム８４２及び８４４を処理する実行クラスタ８１０及び８１２の処理パイプラインを含む。実行クラスタ８１０からストリーム８４２を処理するために、後処理回路８０４は、マルチチャネル正規化相互相関（ＮＣＣ）ユニット８１６と、応答整流ユニット８１８と、チャネル間局所応答正規化（ＬＲＮ）ユニット８２０と、出力生成ユニット８２２とを含む。実行クラスタ８１２からストリーム８４４を処理するために、後処理回路８０４は、マルチチャネルＮＣＣユニット８２４と、応答整流ユニット８２６と、チャネル間ＬＲＮユニット８２８と、出力生成ユニット８３０とを含む。後処理回路８０４は、ピークファインダ８４３、デマルチプレクサ８３２、及びコアマージャ８４６を更に含んでもよい。
【００９９】
マルチチャネルＮＣＣユニット８１６は、偶数データ値８４２のストリームに関するＮＣＣスコア及び正規化カーネル統計値を計算する。マルチチャネルＮＣＣユニット８１６は畳み込みコア８０２に連結されて、偶数データ値８４２のストリーム、ローカル統計値、及びカーネル統計値８４０を受信する。マルチチャネルＮＣＣユニット８１６は、偶数データ値８４２、ローカル統計値、及びカーネル統計値８４０に基づいて、各畳み込みカーネルのＮＣＣスコアを判定する。
【０１００】
マルチチャネルＮＣＣユニット８１６は、各畳み込みカーネルのＮＣＣスコアを計算することができる。ＮＣＣスコアは、局所統計値によって定義される入力の分散によって、及びカーネル統計値によって定義されるカーネルの分散によって正規化される。ＮＣＣスコアを使用して、２つのフレーム間の最良の対応を見出すことができる。
【０１０１】
各畳み込みカーネルでは、ＮＣＣスコアは、式１によって定義され得る。
【数１】
2020144907.tif 000003
式中、Ｉは入力データであり、Ｈはカーネルデータであり、ＭI及びＭHは、Ｉ及びＨの平均であり、σI及びσHは、Ｉ及びＨの標準偏差であり、Ｎは畳み込みカーネルのサイズである。ゼロで割ることを回避して量子化誤差を低減するために、追加のスケール及びオフセット係数が適用されてもよい。
【０１０２】
マルチチャネルＮＣＣユニット８１６は、正規化カーネル統計値を計算してもよい。例えば、マルチチャネルＮＣＣユニット８１６は、等式２によって定義されるカーネル統計値を計算する。
（ＮΣＨ2−（ΣＨ）2）  （２）
式中、Ｎは畳み込みカーネルのサイズであり、Ｈはカーネルデータである。式２は、式１の分母の一部を形成し、したがって、ＮＣＣスコアを計算する過程でカーネル統計値を計算することができる。
【０１０３】
正規化カーネル統計値は、スケール係数を用いて処理されたカーネル統計値のスケール版である。スケール係数は、式３によって定義され得る。
【数２】
2020144907.tif 000004
式中、Ｎは、畳み込みカーネルのサイズである。スケール係数は、カーネル統計値をカーネルサイズとは無関係に正規化する。マルチチャネルＮＣＣユニット８１６は、正規化カーネル統計値８５２及び／又はＮＣＣスコアをピークファインダ８３４に送信する。
【０１０４】
応答整流ユニット８１８は、マルチチャネルＮＣＣユニット８１６に連結されている。応答整流ユニット８１８は、データ値８４２のストリームを受信し、データ値８４２への非線形変換を実行する。非線形変換は、高水準記述特徴の深層機械学習を容易にする。応答整流ユニットへ入力されるデータ値８４２のストリームは、マルチチャネルＮＣＣユニット８１６から送信され得る。いくつかの実施形態では、マルチチャネルＮＣＣユニット８１６は、後処理回路８０４から省略され、応答整流ユニット８１８が実行クラスタからデータ値８４２のストリームを受信する。
【０１０５】
図９は、一実施形態に係る、応答整流ユニット８１８によって適用される非線形変換のグラフである。応答整流ユニット８１８は、値８４２のストリームを入力として受信し、オフセットパラメータ９１２を値８４２に適用する。オフセットパラメータ９１２は、深層学習アーキテクチャにおける畳み込み層の後に適用されるバイアスをモデル化するように選択され得る。オフセットの適用後、応答整流ユニット８１８は、構成可能スケーリング係数９０４に基づいて、スケーリングを負入力値に適用する。応答整流ユニット８１８は、整流されたデータ値のストリームを出力する。いくつかの実施形態では、応答整流ユニット８１８は、負の値を０にクリップする。他の実施形態では、応答整流ユニット８１８は、負の値を正の値に変換する。
【０１０６】
図８を再び参照すると、応答整流ユニット８１８は、異なるチャネルに対して異なるオフセット及びスケーリングパラメータを適用することができる。応答整流ユニット８１８のパラメータは、中央制御３２０によって指定され得る。いくつかの実施形態では、中央制御３２０は、応答整流ユニット８１８の作動を非アクティブ化させることができる。ここで、応答整流ユニット８１８は、後処理パイプラインにおける値のストリームのバイパスとして演算することができる。いくつかの実施形態では、応答整流ユニット８１８は、後処理回路８０４から省略される。
【０１０７】
チャネル間ＬＲＮユニット８２０は、応答整流ユニット８１８に連結され、応答整流ユニット８１８の出力に対してチャネル間ＬＲＮを実行する。具体的には、チャネル間ＬＲＮユニット８２０は、データ値８４２のストリーム及び局所統計値を受信し、局所応答正規化を実行して、データ値の正規化畳み込み出力ストリームを生成する。チャネル間ＬＲＮユニット８２０は、深層学習アーキテクチャで使用される処理を容易にする。チャネル間ＬＲＮユニット１２００は、式４によって定義される演算の固定点近似を実行することができる。
【数３】
2020144907.tif 000005
（式中、ｘiはピクセルインデックス値であり、αは正規化の強度であり、ｉ’はｘiの周りのローカルウィンドウ内のピクセルのインデックスであり、Ｎは、ウィンドウ内のピクセルの数である。ローカルウィンドウのサポートはチャネル間であり、したがって平面フォーマットの矩形領域として表される。チャネル間ＬＲＮユニット８２０が、後処理段階でチャネル間ＬＲＮを実行して、インターリーブチャネルの直列ストリームを活用する一方、チャネルごと正規化は空間プーリング回路５１４などによって別個に処理される。
【０１０８】
出力生成ユニット８２２は、チャネル間ＬＲＮユニット８２０に連結されている。出力生成ユニット８２２は、チャネル間ＬＲＮユニット８２０の出力にスケール、オフセット、及びシフトを適用する。
【０１０９】
奇数値８４４のストリームの後処理パイプラインは、偶数値８４２のストリームの処理パイプラインとほぼ同じように演算することができるため、これらの回路の詳細な説明は簡潔化のため本明細書では省略する。
【０１１０】
コアマージャ８４６は、偶数及び奇数のチャネルを有する偶数及び奇数のストリーム８４２及び８４４（例えば、後処理後）を、インターリーブ方式で偶数及び奇数チャネルを含むデータ値８４８のストリームに結合する。コアマージャ８４７は、出力生成ユニット８２２と出力生成ユニット８３０とに連結される。
【０１１１】
後処理回路８０４は、デマルチプレクサ８３２を更に含んでもよい。デマルチプレクサ８３２は、出力生成ユニット８３０に連結され、出力生成ユニット８３０からコアマージャ８４６へ（出力ストリーム８４８への結合のために）値のストリームを提供する、又は出力ストリーム８５０として提供する。値８４８のストリームは、実行クラスタ８１０及び８１２の両方からのピクセル値を結合するため、コアマージャ８４６は、例えば２ｐｐｃの出力を生成する。値８５０のストリームは、実行クラスタ８１２からの値のみを使用して生成され、したがって、例えば、１ｐｐｃで生成されてもよい。図６Ａ〜６Ｃに関連して上述したように、畳み込みコア回路８００は、畳み込みエンジン４１４の異なる演算モードで１ｐｐｃ又は２ｐｐｃを生成するように設定され得る。
【０１１２】
ピークファインダ８３４は、第１の後処理パイプラインのマルチチャネルＮＣＣユニット８１６及び出力生成ユニット８２２に連結され、第２の後処理パイプラインのマルチチャネルＮＣＣユニット８２４及び出力生成ユニット８３０に連結される。いくつかの実施形態では、正規化カーネル統計値は、テンプレート整合結果の信頼性の信頼度測定値として使用することができる。ピークファインダ８３４は、正規化カーネル統計値８５２及び畳み込み結果を受信し、ＮＣＣスコアに基づいてテンプレートにとっての最良一致位置を提供する位置を判定する。ピークファインダ８４３は、所定の基準に基づいて位置を判定する。例えば、ピークファインダ８４３は、選択されたチャネルの最小又は最大ピクセル位置を見出すことができる。高次元特徴ベクトルのリストが入力データとして与えられるとき、ピークファインダは、畳み込みコアによって評価される距離メトリックに基づいて原点に最も近いベクトルを見つけることができる。
【０１１３】
いくつかの実施形態では、ピークファインダ８３４は、出力生成ユニット８２２及び８３０からのデータのストリームを監視する。選択されたチャネルに関して、ピークファインダ８３４は、ストリーム内のチャネルの各値にアクセスして、最小値又は最大値を有する位置を追跡する。選択された出力チャネルは、ＮＣＣスコア又は任意の他の畳み込み結果を含んでもよい。チャネルがＮＣＣスコアを含む場合（例えば、マルチチャネルＮＣＣユニット８１６が選択チャネルに対して有効化される場合）、ピークファインダ８３４は、ピーク位置及びピークＮＣＣスコアと共に正規化カーネル統計値を出力する。ＮＣＣが有効でない場合、ピークファインダ８３４は、ピーク位置及びピーク値を出力する。
【０１１４】
いくつかの実施形態では、中央制御３２０は、畳み込みコア回路８００の畳み込みコア８０２及び後処理回路８０４に構成情報を送信する。構成命令は、各後処理回路８０４の各パイプラインに対する後処理命令を含んでもよく、畳み込みコア８０２からの畳み込み結果に適用される後処理を定義することができる。
【０１１５】
後処理命令は、マルチチャネルＮＣＣユニット、応答整流ユニット、チャネル間ＬＲＮユニット、又はピークファインダが有効化されるか又は無効化されるかを定義する。いくつかの実施形態では、後処理回路８０４は、後処理命令によって指定される複数のモードで演算する。ＮＣＣモードでは、マルチチャネルＮＣＣユニットが有効化され、チャネル間ＬＲＮユニットが無効化される。ＬＲＮモードでは、マルチチャネルＮＣＣユニットが無効化され、チャネル間ＬＲＮユニットが有効化される。混合ＬＲＮ／ＮＣＣモードでは、マルチチャネルＮＣＣユニット及びチャネル間ＬＲＮユニットが有効化される。パススルーモードでは、マルチチャネルＮＣＣユニット及びチャネル間ＬＲＮユニットが無効化される。後処理パイプラインにおいて無効化された構成要素は、ストリームを処理することなく、後処理パイプライン内の次の構成要素にその入力データストリームを送ることができる。
【０１１６】
図１０は、一実施形態に係る畳み込みコア８０２のブロック図である。上述したように、畳み込みコア８０２は、畳み込みフロントエンド８０６、実行クラスタ８１０及び８１２、並びに畳み込みバックエンド８１４などの回路を含む。
【０１１７】
畳み込みフロントエンド８０６は、入力バッファ１００２と、データパスルータ１００６と、シーケンサ１０１８と、カーネル統計値ユニット１０２４とを含み得る。入力バッファ１００２は、畳み込みフロントエンド８０６にストリーミングされる際に入力データ８３６を記憶する。入力データ８３６は、インターリーブ方式で複数の入力チャネルのデータを伴うストリーム値であってもよい。入力データ８３６は、ピクセルデータ、ＨＯＧデータ、畳み込み回路８００の前サイクルの出力、別の畳み込み回路８００の出力、又はデバイス１００の他の構成要素から受信した他のデータであってもよい。
【０１１８】
データパスルータ１００６は、スキャンシーケンス内の入力バッファ１００２の所定位置でデータセット１００４を読み出し、畳み込み値の計算のために、読み出したデータ１００８を実行クラスタ８１０又は８１２に送信する回路である。データパスルータ１００６は、畳み込みカーネルを用いた並列処理のために、入力データ８３６の異なる部分を実行クラスタ８１０及び８１２に送信することができる。本明細書に記載されるスキャンシーケンスは、入力データのサブセットを処理する演算を指す。データパスルータ１００６は、畳み込みエンジン４１４の処理サイクル内の複数のスキャンシーケンスに対するデータの読取及び送信を実行して、実行クラスタ８１０及び８１２をピクセル値でポピュレートすることができる。一実施形態では、データパスルータ１００６は、スパース値に従って他の隣接ピクセルをスキップしながら、中心ピクセルのピクセル値と、中心ピクセルに隣接するサブセットのピクセルのピクセル値とを選択的に読み出す。更に、スキャンシーケンス内で処理される中心ピクセルは、ステップ値によって定義されるピクセル数により分離されてもよい。後続スキャンでは、同じ又は異なるピクセル数によって分離された、新しいセットの中心ピクセルが処理されてもよい。
【０１１９】
カーネルメモリ８０８は、カーネル情報を記憶する回路である。カーネル情報は、畳み込みカーネル内のフィルタ要素の値、スパース値、ステップ値、カーネルサイズなどを含む。カーネル情報１０２２は、実行クラスタ８１０に送信されて、実行クラスタ８１０の乗算回路ＦＥ０〜ＦＥＮ内のレジスタをポピュレートする。カーネル情報１０２２はまた、実行クラスタ８１２に送信されて、実行クラスタ８１２の乗算回路ＦＥ０〜ＦＥＮ内のレジスタをポピュレートする。カーネルメモリ８０８は、ピクセルデータの様々なチャネルで畳み込みを実行するため、及び／又は同じピクセルデータチャネルで畳み込みを実行するために、複数の畳み込みカーネルを記憶することができる。
【０１２０】
実行クラスタ８１０及び８１２は、演算を実行するプログラム可能回路である。この目的のために、実行クラスタ８１０及び８１２は、乗算回路ＦＥ０〜ＦＥＮ、圧縮器１０１０、及びマルチサイクル累算器１０１４を含み得る。乗算回路ＦＥ０〜ＦＥＮのそれぞれは、読み取られたデータ１００８内のピクセル値及びカーネルメモリ８０８内の対応するフィルタ要素値を記憶することができる。ピクセル値及び対応するフィルタ要素値は乗算回路で乗算されて、乗算値１００９を生成する。いくつかの実施形態では、圧縮器１０１０は、乗算値１００９を受信し、乗算値１００９のサブセットを累算して、圧縮値１０１２を生成する。他の実施形態では、乗算値１００９のサブセットを累算する代わりに、圧縮器１０１０は、乗算値１００９の各サブセットから（ｉ）最小値、（ｉｉ）最大値、又は（ｉｉｉ）中央値を選択することができる。マルチサイクル累算器１０１４は、圧縮値１０１２を受信し、畳み込みコア８０２の複数の処理サイクルにわたって生成された圧縮値１０１２上で、累算（又は最小値、最大値、若しくは又は中央値）を実行する。
【０１２１】
畳み込みフロントエンド８０６に戻ると、シーケンサ１０１８は、畳み込みコア８０２の他の構成要素の演算を制御して、複数の演算サイクルを実行する。シーケンサ１０１８は、実行クラスタ８１０と８１２とに処理タスクを効率的に分配することができる。上述したように、実行クラスタ８１０及び８１２は、一連の畳み込みカーネルを入力データの異なる部分に適用して、偶数インデックス出力チャネルを含む偶数データ値８４２のストリーム、及び奇数インデックス出力チャネルを含む奇数データ値８４４のストリームを生成することができる。例えば、カーネルメモリ８０８は、乗算回路ＦＥ０〜ＦＥＮに記憶されたピクセルデータの各セットについて、畳み込みカーネルのシーケンスのフィルタ要素を提供する。各畳み込みカーネルは、偶数データ値８４２及び奇数データ値８４４の異なる出力チャネルを生成する。
【０１２２】
シーケンサ１０１８の演算の別の例では、入力データのサイズ及び／又は畳み込みカーネルの数若しくはサイズは、実行クラスタの単一処理サイクルで全ての計算を実行するには大きすぎる場合がある。シーケンサ１０１８は、偶数出力チャネルと奇数出力チャネルとの間で演算を分割し、実行クラスタ８１０への偶数チャネル用の処理タスクと実行クラスタ８１２への奇数チャネル用の処理タスクとに分配する。
【０１２３】
いくつかの実施形態では、入力データのサイズ及び／又は畳み込みカーネルの数又はサイズは、両方の実行コアを使用して、畳み込みコア８０２の単一の処理サイクルで全ての計算を実行するには大きすぎる場合がある。そのような場合、シーケンサ１０１８は、演算を複数のバッチに分割し、単一サイクルにおける入力データのサブセット又は畳み込みカーネルのサブセットに基づいて計算を実行する。各サイクルでの計算結果は、マルチサイクル累算器１０１４によって処理され、複数サイクルにわたって出力値１０１３を生成する。マルチサイクル演算を実行するように他の構成要素を構成するために、シーケンサ１０１８は、マルチサイクル制御信号１０１９を他の構成要素に送信する。
【０１２４】
畳み込みバックエンド８１４は、出力バッファ１０２４と、大型データハンドラ１０２８と、出力バッファ１０３０と、大型データハンドラ１０３２とを含む。出力バッファ１０２４は、出力値１０１３を指定位置に記憶する回路である。一実施形態では、複数の出力チャネルのための一連の出力値が、出力バッファ１０２４内にインターリーブされる。実行クラスタ８１０の出力値１０１５が再び畳み込みフロントエンド８０６の入力データ８３６としてフィードバックされる演算では、出力バッファ１０２４内のデータは、次の畳み込み演算サイクルのために入力バッファ１００２にコピーされ得る。出力バッファ１０２４は、実行クラスタ８１０の出力値１０１３を処理し、出力バッファ１０３０は、実行クラスタ８１２の出力値１０１３を処理する。
【０１２５】
大型データハンドラ１０３２は、出力バッファ１０２４に記憶された出力値の更なる処理を実行する回路である。例えば、畳み込みコア８０２は、８ビット又は１６ビット精度など、様々なビットサイズを有する入力データ及び畳み込みカーネルを処理することができる。入力データ又は畳み込みカーネルのいずれかが１６ビット精度を有する場合、各出力ピクセルに２倍のクロックサイクル数が使用される。入力データ及び畳み込みカーネルの両方が１６ビット精度を有する場合、４倍を超えるクロックサイクルが使用される。畳み込みバックエンド８１４は、複数のクロックサイクルからの８ビットピクセルデータ畳み込み結果を、１６ビット精度を有するデータにマージすることができる。大型データハンドラ１０３２は、実行クラスタ８１２から出力バッファ１０２４に記憶された出力値に対して同様の処理を実行することができる。偶数データ値８４２のストリームは、大型データハンドラ１０２８から出力され、奇数データ値８４４のストリームは、大データハンドラ１０３２から出力される。いくつかの実施形態では、大型データハンドラ１０２８及び１０３２は、畳み込みバックエンド８１４から省略される。偶数及び奇数データ値８４２及び８４４のストリームは、出力バッファ１０２４及び１０３０からそれぞれ出力される。小さいデータサイズは、機械推論タスク又は低精度のデータを使用することができる他のタスクに関するより高速な処理をサポートすることができる。対照的に、大きいデータサイズは、機械訓練又は高精度のタスクに使用することができる。
【０１２６】
畳み込みコア８０２内の構成要素（及び畳み込みエンジン４１４の他の構成要素）は、構成情報を中央制御３２０から受信することによって構成され得る。構成情報において指示される構成可能パラメータ及びモードは、スパース値、ステップ値、ピクセルデータ値とフィルタ要素とのマッピング、圧縮器１０１０で実行される演算の種類（例えば、累積、最小、最大、又は中央値）、入力データ又は出力値のチャネル数、及び後処理回路８０４で実行される後処理演算の選択を含むが、これらに限定されない。
【０１２７】
図１０の畳み込みコア８０２の構造は、単なる例示に過ぎない。例えば、マルチサイクル累算器１０１４は、単一サイクル演算のみが畳み込みエンジンで実行されるように省略されてもよい。
【０１２８】
図１１Ａは、一実施形態に係る、マルチ平面フォーマットの畳み込みコア回路８００の入力及び出力を例示する概念図である。畳み込みコア回路８００は、マルチチャネル入力データ１１０２上で畳み込みを行い、マルチチャネル出力データ１１１０を生成する。入力チャネル及び出力チャネルの数は異なっていてもよい。図１１Ａに示されるマルチ平面フォーマットは、別個の画像面として各入力及び出力チャネルを表す。マルチチャネル入力データ１１０２は、３つの入力チャネル１１０４、１１０６、及び１１０８のピクセル値を有する。各入力チャネル１１０４、１１０６、及び１１０８は、１つ以上のカーネルで処理することができる。例えば、図１１Ａに示すように、畳み込みカーネル0〜3の４つの畳み込みカーネルをチャネル１１０６に適用することにより、４つの出力チャネル１１１２、１１１４、１１１６、及び１１１８を含むマルチチャネル出力データ１１１０が得られる。同じ４つの畳み込みカーネル０〜３が、チャネルごとに（例えば、スパースカーネルを使用して）入力チャネル１１０４、１１０６、及び１１０８のそれぞれに適用される場合、マルチチャネル出力は、１２個の合計出力チャネルに関して、処理される各入力チャネルのために４つのチャネルを含むことになる。異なる畳み込みカーネルを使用して、それぞれの別個の出力チャネルを生成することができる。畳み込みカーネルのサイズ、スパース値、及びステップ値は、異なる用途にとって異なるタイプの畳み込みを可能にするように柔軟であり得る。
【０１２９】
図１１Ｂは、一実施形態に係る、平面フォーマットの畳み込みコア回路８００の入力及び出力を示す概念図である。マルチチャネル入力データ１１０２及びマルチチャネル出力データ１１１０はそれぞれ、各チャネルの対応するピクセル値（図１１Ｂ中の異なる斜線パターンのボックスによって特定される）がストリーム内で相互に隣接するインターリーブ方式で複数チャネルのストリームによって定義され、続いて、平面フォーマットによって示されるようにラスター方式で次のピクセルの各チャネルの対応するピクセル値が続く。平面フォーマットは、インターリーブチャネルの単一画像面として表される複数のインターリーブチャネルからの画像を含む。
【０１３０】
マルチチャネル入力データ１１０２は、異なるチャネルからの相関ピクセル値が平面フォーマットで互いに隣接するストリームによって定義される。例えば、第１のチャネルピクセル１１２４の第２のチャネルピクセル１１２６、及び第３のチャネルピクセル１１２８は、マルチチャネル入力データ１１０２によって定義された入力画像の第１の（０，０）ピクセルを表す。マルチチャネル入力データ１１０２の次のピクセル（０，１）のピクセル値は、ピクセル１１２４、１１２６、及び１１２８に続く。次のピクセル（０，１）は、第１のチャネルピクセル１１３０、第２のチャネルピクセル１３２、及び第３のチャネルピクセル１１３４を含む。第１の行（０）の後続のピクセルは、それに応じて（０，１）ピクセルに従うことができる。後続の行（１）のピクセル値は、第１の行のピクセル値に従うことができる。例えば、第２の行（１，０）内の第１のピクセルは、第１のチャネルピクセル１１３６、続いて第２のチャネルピクセル１１３８、続いて第３のチャネルピクセル１１４０を含む。
【０１３１】
一実施例では、マルチチャネル入力データ１１０２の入力チャネルは、ＲＧＢ色チャネルを含む。別の実施例では、マルチチャネル入力データ１１０２は、ＹＣｂＣｒ色チャネルを含んでもよい。別の実施例では、マルチチャネル入力データ１１０２は、畳み込みカーネルで導出される畳み込み結果の出力チャネルを含み得る。
【０１３２】
マルチチャネル出力データ１１１０は、畳み込みカーネル１１５０などの畳み込みカーネルを適用することによってマルチチャネル入力データ１１０２から導出される。マルチチャネル出力データ１１００は、平面フォーマットによって示されるように、ストリーム内で互いに隣接する異なる出力チャネルからの相関ピクセル値のストリームを含む。例えば、出力チャネルピクセル１１４２、１１４４、１１４６、及び１１４８は、出力データ１１１０の（０，０）ピクセルに対応する。出力チャネルピクセル１１４２、１１４４、１１４６、及び１１４８は、図１１Ａに示すように、出力チャネル１１１２、１１１４、１１１６、及び１１１８にそれぞれ属する。したがって、直列ストリームは、ラスター方式で出力データ１１１０のインターリーブチャネルを定義することができる。
【０１３３】
畳み込みエンジン４１４がカスケードモードで演算するとき、畳み込みコア回路８００は、図６Ｂに関連して上述したような入力として、別の畳み込みコア回路８００の出力を使用する。畳み込みコア回路８００のマルチチャネル入力データ１１０２及びマルチチャネル出力データ１１１０は、畳み込みコア回路８００の出力データを別の畳み込みコア回路８００の入力データとして使用するモードを含む、複数の演算モードを容易にする共通のインターリーブ形式を有する。
チャネルごとの空間プーリング及び正規化
【０１３４】
図１２は、一実施形態に係る、空間プーリング回路１２００を示すブロック図である。空間プーリング回路１２００は、複数のインターリーブチャネルを有するストリーム上でチャネルごとの空間プーリング又は正規化演算を実行し、複数のインターリーブチャネルの出力ストリームも生成する。図５に関連して上述したように、畳み込み回路５０２及び５０４はそれぞれ、空間プーリング回路５１４及び空間プーリング回路５２４を含み、それぞれの畳み込みコア回路５１２及び５２２の出力ストリームを処理する。空間プーリング回路１２００は、第１の畳み込み回路５０２の空間プーリング回路５１２、又は第２の畳み込み回路５０４の空間プーリング回路５２４の一実施形態である。中央制御３２０からの命令に従って、空間プーリング回路１２００は、入力インターリーブチャネルの一部又は全てに対して、チャネルごと空間プーリング及び／又はチャネルごとの局所応答正規化を実行する。
【０１３５】
空間プーリング回路１２００は、入力バッファ１２０２と、ピクセルごとの計算ブロック１２０４と、列圧縮器１２０６と、列累算バッファ１２０８と、行圧縮器１２１０と、遅延装置１２２２と、並びに空間プーリング及び正規化（ＳＰＮ）プロセッサ１２１２とを含む。ＳＰＮプロセッサ１２１２は、平方根ユニット１２１４と、局所応答正規化ユニット（ＬＲＮ）１２１６と、マルチプレクサ１２１８と、ＳＰＮポストプロセッサ１２２０とを含む。
【０１３６】
入力バッファ１２０２は、畳み込みコア回路５１２から値１２３２のストリームを受信し、入力データを記憶する。入力データは、インターリーブ方式で複数のチャネルを定義するデータ値のストリームを含み、これらのデータ値はストリーム内に受信される際に入力バッファ１２０２に記憶される。入力バッファ１２０２は、チャネルごとの処理を容易にするために、同じチャネルの複数のピクセル値を記憶する。空間プールピクセルを生成するために、入力バッファ１２０２は、少なくとも十分な入力ピクセル値を記憶してローカルウィンドウに適合するようにサイズを決められる。複数のインターリーブチャネルからのピクセル値が単一の画像面として表される平面フォーマットでは、ローカルウィンドウは、単一のチャネルに対してのみピクセル値を選択するスパース性を有する。空間的にプールされる同じチャネルのピクセル値の数を定義するローカルウィンドウのサイズ（例えば、高さ又は幅）は、例えば、中央制御３２０からの命令によって構成可能であり得る。ローカルウィンドウの中心ピクセル間のピクセル空間を定義するローカルウィンドウの水平方向ストライドも、例えば、中央制御３２０からの命令によって構成可能であり得る。入力バッファ１２０２は、チャネルのピクセル値が１つ以上の他のチャネルのピクセル値によって分離されるインターリーブチャネルのストリームを受信するため、複数のチャネルのそれぞれに対して複数のピクセル値を記憶する。
【０１３７】
ローカルウィンドウは、空間プールピクセル値に空間的にプールされる単一チャネルの複数のピクセル値を含み得る。空間プールピクセルごとに、空間プーリング回路１２００は、ローカルウィンドウの列からのピクセル値を結合する列プーリングを実行し、次いで、ローカルウィンドウの列プール値を結合する行プーリングを実行する。「行」及び「列」は、平面画像の垂直ピクセルラインを指し、必ずしも特定の水平方向又は垂直配向を指すものではないことに留意されたい。
【０１３８】
空間プールピクセルごとに、ピクセルごとの計算１２０４は、入力バッファ１２０２からローカルウィンドウのチャネルのデータ値を取り出し、データ値に対する演算を実行する。この演算は、データ値にオフセットを適用すること、データ値を二乗すること、又はデータ値の絶対値を決定することを含み得る。
【０１３９】
列圧縮器１２０６は、ローカルウィンドウの列に関連付けられたピクセルごとの演算１２０４からの複数のデータ値を、列を表す単一の空間プール値に結合する。列圧縮器１２０６は、中央制御３２０によって指定され得るように、複数のデータ値を様々な方法で結合することができる。例えば、列圧縮器１２０６は、最小値、最大値を選択してもよく、又は値を合計に結合してもよい。
【０１４０】
列累算バッファ１２０８は、列圧縮器１２０４から複数の空間プール列値を受信し、空間プール列ピクセル値を記憶する。例えば、列累算バッファ１２０８は、ローカルウィンドウの各列の少なくとも空間プール列値を記憶する。
【０１４１】
行圧縮器１２１０は、ローカルウィンドウの各列の空間プール列値を結合する。列圧縮器１２０６と同様に、行圧縮器１２１０は、中央制御３２０によって指定され得るように、複数のデータ値を様々な方法で結合することができる。例えば、行圧縮器１２１０は、最小値、最大値を選択してもよく、又は値を合計に結合してもよい。行圧縮器１２１０の出力は、ローカルウィンドウの各ピクセルから導出された空間プール値を表す。
【０１４２】
ＳＰＮプロセッサ１２０２は、行圧縮器１２１０から受信した空間プール値を処理する。例えば、ＳＰＮプロセッサ１２０２は、空間プール値の平方根を判定することができる。ＳＰＮプロセッサ１２０２は、空間プール値を使用して、入力ストリーム１２２２に対して局所応答正規化を代替的又は追加的に実行してもよい。
【０１４３】
ＳＰＮプロセッサ１２０２は、平方根ユニット１２１４と、ＬＲＮユニット１２１６と、マルチプレクサ１２１８と、及びＳＰＮポストプロセッサ１２２０とを含む。平方根ユニット１２１４は、行圧縮器１２１０から空間プール値の平方根を算出する。
【０１４４】
ＬＲＮユニット１２１６は、行圧縮器からの空間プール値を遅延装置１２２２に格納されている入力値に適用することによって局所応答正規化を実行して、チャネルごと正規化値を生成する。遅延装置１２２２は、空間プール値と入力バッファ１２０２からの対応する入力値とを同期させることによって、局所応答正規化を容易にする。遅延装置１２２２は、入力バッファ１２０２及びＬＲＮユニット１２１６に連結される。遅延装置１２２２は、先入れ先出し（ＦＩＦＯ）メモリバッファを含み得る。
【０１４５】
マルチプレクサ１２１８は、行圧縮器１２１０の空間プール値、平方根ユニット１２１４からの空間プール値の平方根、又はＬＲＮユニット１２１６からの正規化値から出力を選択する。ＳＰＮポストプロセッサ１２２０は、マルチプレクサ１２１８の選択出力を受信し、スケール、オフセット、及び／又はシフト演算を実行する。ＳＰＮポストプロセッサ１２２０の出力は、インターリーブ方式で複数のチャネルを定義するピクセル値のストリームであり、ピクセル値は、チャネルごと空間プーリング及び／又はチャネルごとの正規化で処理される。
【０１４６】
いくつかの実施形態では、中央制御３２０は、構成要素の演算の組合せを構成することによって、空間プーリング回路１２００を異なるモードで演算させる。
【０１４７】
図５に関連して上述したように、第１の畳み込み回路５０２の空間プーリング回路５１４の出力ストリーム５３０は、第２の畳み込み回路５０４への入力として使用されてもよい、又は第２の畳み込み回路５０４の出力とインターリーブするためにチャネルマージ回路５０６に提供されてもよい。
【０１４８】
図１３Ａ及び図１３Ｂは、一実施形態に係る、マルチ平面フォーマットの空間プーリング回路１２００の入力及び出力を示す概念図である。空間プーリング回路１３００は、チャネルごと空間プーリング及び／又はチャネルごとＬＲＮをマルチチャネル入力画像上で実行し、マルチチャネル出力を生成する。入力チャネル及び出力チャネルの数は維持され、各画像のピクセル画像サイズは空間プーリングを介して減少する。
【０１４９】
図１３Ａ及び１３Ｂのマルチ平面フォーマットは、それぞれの入力及び出力チャネルを別個の画像面として表す。マルチチャネル入力データ１３０２は、チャネル１３０４、１３０６及び１３０８などの複数のチャネルからのピクセル値を有する。本実施例では、３ピクセルの幅及び高さを有するローカルウィンドウ１３１０のピクセル値は空間的にプールされて、出力チャネル１３０４の空間プール値１３１２を生成する。空間プーリング回路１２００は、個別に各チャネルのためのローカルウィンドウ１３１０を使用して、チャネル１３０４、１３０６、及び１３０８のマルチチャネル出力データ１３１４を生成する。
【０１５０】
複数チャネルの第１の空間プール値（例えば、値１３１２）が図１３Ａに示されるように計算された後、図１３Ｂに示されるようにローカルウィンドウ１３１０がシフトされて、チャネルの次の空間プール値（例えば、値１３２２）を計算する。本実施例では、ローカルウィンドウ１３１０は、ラスター方式に従って列寸法で２ピクセルシフトさせる。これにより、ローカルウィンドウ１３１０の中心ピクセルが、列寸法で２ピクセルシフトされる。空間プールピクセル計算当たりのローカルウィンドウ１３１０の中心ピクセルのシフト量は、構成可能であり得る。ローカルウィンドウは、空間プールピクセルが全て計算されるまで、空間プールピクセルごとに、所定の行（「ＳｔｒｉｄｅＸ」）及び列（「ＳｔｒｉｄｅＹ」）パラメータに従ってラスター方式でシフトさせることができる。１よりも大きいＳｔｒｉｄｅＸ及びＳｔｒｉｄｅＹパラメータを使用することにより、サブサンプリングでデータサイズ及び計算コストが低減される。これらの係数が１に等しい場合、出力ピクセルはスキップされない。シフトされたローカルウィンドウ１３１０のピクセル値は空間的にプールされて、出力チャネル１３１６の空間プール値１３２２を生成する。
【０１５１】
図１３Ｃ及び図１３Ｄは、一実施形態に係る、平面フォーマットの空間プーリング回路１３００の入力及び出力を示す概念図である。図１３Ｃは、図１３Ａに示すマルチ平面フォーマットに対応し、図１３Ｄは、図１３Ｂに示すマルチ平面フォーマットに対応する。平面フォーマットでは、各入力チャネルは、Ｃｉｎの水平間隔に配置されたピクセル列として表され、Ｃｉｎは入力チャネルの数を示す。よって、チャネルごとの演算がローカルウィンドウに適用されると、カーネルサポートは、ローカルウィンドウ１３１０によって示されるように平面フォーマットで疎になる。
【０１５２】
行（「ＳｔｒｉｄｅＸ」）及び列（「ＳｔｒｉｄｅＹ」）シフト値は、マルチ平面フォーマットのチャネルの空間座標内のピクセル単位で定義される。平面フォーマットでは、行シフトの実際の量は、行シフト値ＳｔｒｉｄｅＸに入力チャネルＣｉｎの数を乗算することによって決定される。
【０１５３】
図１４は、一実施形態に係る、空間プーリング回路１２００を演算させる方法１４００を示すフローチャートである。中央制御３２０は、空間プーリング回路１２００に構成情報を送信する１４０２。構成命令は、方法７００の７０２で論じたように、畳み込みエンジン４１４の他の構成命令に関連して送信されてもよい。
【０１５４】
構成命令は、空間プーリング回路１２００の演算モードを定義する命令を含み得る。異なる演算モードは、異なる種類の空間プーリング又はチャネルごとのＬＲＮを定義し得る。最大プーリングモードでは、列圧縮器１２０６及び行圧縮器１２１０は最大値を選択し、マルチプレクサ１２１８は行圧縮器１２１０の出力を選択する。ここで、ＳＰＮプロセッサ１２１２の累算後処理は、空間プーリング回路１２００の出力が局所応答正規化又は平方根用途を有さないようにバイパスされる。平均プーリングモードでは、列圧縮器１２０６及び行圧縮器１２１０は、合計を生成し、マルチプレクサ１２１８は、行圧縮器１２１０の出力を選択して累算後処理をバイパスする。
【０１５５】
Ｌ１−プーリングモードでは、ピクセルごとの計算１２０４は絶対値を判定し、列圧縮器１２０６及び行圧縮器１２１０は絶対値の合計を計算し、マルチプレクサ１２１８は、行圧縮器１２１０の出力を選択して累算後処理をバイパスする。Ｌ２−プーリングモードでは、ピクセルごとの計算１２０４は二乗値を判定し、列圧縮器１２０６及び行圧縮器１２１０は二乗値の合計を計算し、平方根ユニット１２１４は二乗値の合計の平方根を判定し、マルチプレクサ１２１８は平方根ユニット１２１４の出力を選択する。
【０１５６】
チャネルごとのＬＲＮモードでは、ピクセルごとの計算１２０４は二乗値を判定し、列圧縮器１２０６及び行圧縮器１２１０は二乗値の合計を計算し、ＬＲＮユニット１２１６は、二乗値の合計の平方根を使用して値を正規化し、マルチプレクサ１２１８はＬＲＮユニット１２１６の出力を選択する。
【０１５７】
構成情報の受信後、空間プーリング回路１２００の構成が構成情報に応じて更新されて１４０４、構成情報に記載されているような演算を実行する。構成の更新は、構成情報によって定義された演算モードに応じて、ピクセルごとの計算１２０４、列圧縮器１２０６、行圧縮器１２１０、平方根ユニット１２１４、及びマルチプレクサ１２１８の演算を設定することを含み得る。
【０１５８】
畳み込みコア回路５１２（又は５２２）は、入力データに対して畳み込み演算を実行することによって、インターリーブ方式で複数チャネルの値のストリームを生成する１４０６。例えば、畳み込みコア回路５１２は、構成命令に従って、複数の畳み込みカーネルを使用して入力データ上で畳み込み演算を実行して、複数チャネルを含む値のストリームを生成する。畳み込み回路５１２は、構成命令によって指定されるように、畳み込み結果に対して１つ以上の後処理演算を更に実行することができる。いくつかの実施形態では、後処理演算は、マルチチャネルＮＣＣ及びチャネル間ＬＲＮなどのチャネル間演算を含む。これらの演算は、異なるチャネルからの値を結合するものであり、空間プーリング回路１２００のチャネルごとの演算とは異なる。畳み込みコア回路５１２が複数の実行クラスタを含む場合、複数の実行クラスタの出力ストリームが結合されて、畳み込みコア回路５１２によって出力されるインターリーブ方式で複数チャネルの値のストリームを生成することができる。
【０１５９】
空間プーリング回路１２００は、各チャネルからの値のサブセットを互いにプーリングすることによって、空間プール値１４０８を生成する。例えば、畳み込みコア回路５１２からのストリームが第１及び第２のインターリーブチャネルを含む場合、空間プーリング回路１２００は、（例えば、ローカルウィンドウによって定義されるように）第１のチャネルの値のサブセットをプールすることによって第１の空間プール値を生成し、第２のチャネルの値のサブセットをプールすることによって第２の空間プール値を生成する。入力バッファ１２０２により、ストリーム１２２４からの単一チャネルの値のサブセットが記憶されて、空間プーリングを容易にすることが確保される。各チャネルからの値のサブセットは、ピクセルごとの計算１２０４、列圧縮器１２０６、行圧縮器１２１０、及びＳＰＮプロセッサ１２１２の選択演算に基づいて様々な方法でプールされ得る。空間プール値は、最大プールモード、平均プーリングモード、Ｌ１プーリングモード、又はＬ２プーリングモードなどの様々な種類の空間プーリングから導出される値を含み得る。別の例では、空間プール値は、チャネルごとＬＲＮモードなどの正規化から導出される値を含んでもよい。
【０１６０】
空間プーリング回路１２００は、複数のチャネルからの空間プール値を出力ストリーム１２２６へインターリーブする１４１０。したがって、空間プーリング回路１２００は、出力ストリーム１２２６で入力ストリーム１２２４として受信されたマルチチャネルインターリーブフォーマットを維持する一方、入力ストリーム１２２４に対してチャネルごと深層機械学習操作を実行する。
【０１６１】
空間プーリング回路１２００は、畳み込みコア回路５１２（又は５０４）から２ｐｐｃの入力ストリームを受信し、２ｐｐｃの出力ストリームを生成することができる。畳み込みコア回路５１２が１ｐｐｃのストリームを提供する場合、空間プーリング回路１２００は無効値を無視し、有効値のみを処理する。出力フレームの全幅が奇数である場合、各ラインの端部にゼロを加えて幅を均一にすることができる。
【０１６２】
図１４に示すプロセスは、単なる例示に過ぎず、様々な変更をプロセスに加えることができる。例えば、バイパスモードでは、空間プーリング回路１２００は、有効値を含む２ｐｐｃの出力ストリームを確保するために、入力ストリームを再パケット化してもよい。ピクセルごとの計算１２０４、行圧縮器１２０６、及び１２１０などのピクセル処理構成要素は、バイパスモードでバイパスされてもよい。
インターリーブチャネルマージ
【０１６３】
用途が高いスループットを必要とする場合、又は大きな深学習モデルが使用される場合、図６Ａに関連して上述したように、２つの畳み込み回路５０２及び５０４を二重畳み込みモードで並列に演算させることができる。２つの畳み込み回路５０２及び５０４は、同じ入力ストリーム上に異なる畳み込みカーネルを適用する。例えば、第１の畳み込み回路５０２が、１つ以上の畳み込みカーネルを有する出力チャネルの第１の半分を生成する一方、第２の畳み込み回路５０４は、１つ以上の異なる畳み込みカーネルを有する第２の半分を生成する。チャネルマージ回路５０６は、畳み込み回路５０２及び５０４からストリームを受信し、インターリーブ方式で、それらのストリームを、出力チャネルの第１の半分及び出力チャネルの第２の半分を含む単一の出力ストリームに結合する。インターリーブを実行するために、チャネルマージ回路は、チャネルマージャ５２６を有する。
【０１６４】
図１５は、一実施形態に係る、チャネルマージャ１５００のブロック図である。チャネルマージャ１５００は、チャネルマージ回路５０６のチャネルマージャ５２６の一実施形態である。チャネルマージャ１５００の出力は、二重畳み込みモードで演算するときに、畳み込みエンジン４１４の出力として選択される。
【０１６５】
チャネルマージャ１５００は、入力バッファ１５０２、マルチプレクサ１５０４、及びチャネルセレクタ１５０６を含む。入力バッファ１５０２は、畳み込み回路５０２に連結されて値５３０のストリームを受信し、及び畳み込み回路５０４に連結されて値５３２のストリームを受信する。値５３０及び５３２のストリームはそれぞれ、複数のインターリーブチャネルを含み得る。入力バッファ１５０２は、値５３０及び５３２を記憶して、インターリーブのための値の同期を容易にする。
【０１６６】
マルチプレクサ１５０４は、入力バッファに連結され、入力バッファ１５０２から値５３０及び５３２のストリームを受信する。チャネルセレクタ１５０６は、出力値５３４の出力ストリームに挿入するための入力ストリームからの値の選択を制御するために、マルチプレクサ１５０４に選択信号を提供する。マルチプレクサは、例えば、各入力ストリームから１つ以上の値を代替的に選択することによって、値５３０及び５３２のストリームをインターリーブして、出力値５３４の出力ストリームを生成する。特定の入力ストリームから選択される連続値の数は、ストリーム内のピクセル当たりのチャネル数によって定義され得る。出力値５３４のシーケンスは、インターリーブ方式で値５３０及び５３２のストリームのチャネルを定義する。
【０１６７】
チャネルマージャ１５００は、任意の入力ストリームを減速させることなく、同期される２つの２ｐｐｃ入力ストリームをサポートする。マージされた出力のスループットは４ｐｐｃである。２つの入力ストリームが同期化されない場合、１つ以上の入力源が入力バッファ１５０２を使用して記憶されて、チャネルマージャ１５００が両方の入力ストリームから同期化入力を受信するように遅延を提供することができる。
【０１６８】
図１６は、一実施形態に係る、平面フォーマットのチャネルマージャ１５００の入力及び出力を示す概念図である。いくつかの実施形態では、チャネルマージャ１５００は、マルチチャネル入力データ１６０２及びマルチチャネル入力データ１６０４によって示されるように、同じサイズを有する２つの入力フレームを結合する。更に、入力ストリーム５３０及び５３２は、同じ数の入力チャネルＣｉｎを有する。本実施例では、Ｃｉｎは５であり、したがって、各ピクセルＰ０、Ｐ１、Ｐ２は、各ストリームに対して５つの値のチャネルを有する。チャネルマージャ１５００は、マルチチャネル入力データ１６０２とマルチチャネル入力データ１６０４とをインターリーブすることによってマルチチャネル出力データ１６０６を生成する結果、第１のストリームのＰ０ピクセルの各チャネルのピクセル値の後に、第２のストリームのＰ０ピクセルの各チャネルのピクセル値が続く。平面フォーマットにおいてラスター方式で進むと、第１のストリームのＰ１ピクセルの各チャネルのピクセル値は、第２のストリームのＰ０ピクセルのピクセル値に続く。Ｐ１ピクセルに関しては、第１のストリームのＰ１ピクセルの各チャネルのピクセル値の後に、第２のストリームのＰ１ピクセルの各チャネルについてのピクセル値が続く。
【０１６９】
チャネルマージャ１５００は、入力ストリーム５３０（マルチチャネル入力データ１６０２を含む）及び５３２（マルチチャネル入力データ１６０４を含む）からの入力チャネルの数の２倍のチャネル数を有する出力値５３４の出力ストリームを生成する。例えば、マルチチャネル出力データの各ピクセルＰ０、Ｐ１などは、１０チャネル出力Ｃｏｕｔを有する。
【０１７０】
いくつかの実施形態では、チャネルマージャ１５００は、入力ストリーム５３０及び５３２内の画像の高さ及び幅が一致しないとき、又は入力ストリーム５３０及び５３２内のチャネルの数が一致しないときに、チャネルマージ回路５０６で無効化される。二重畳み込みモードで演算するのではなく、畳み込みエンジン４１４は、図６Ｂに示されるカスケードモード又は図６Ｃに示される並列モードなど、チャネルマージャ１５００をバイパスする異なるモードで演算することができる。
【０１７１】
いくつかの実施形態では、チャネルマージャ１５００は、コアマージャ８４６の一実施形態である。コアマージャ８４７は、（別個のパイプラインにおける後処理後）実行クラスタ８１０及び８１２のそれぞれから２つの１ｐｐｃ入力ストリームを受信し、１ｐｐｃ入力ストリームを畳み込みコア回路８００の２ｐｐｃ出力ストリームに結合する。対照的に、チャネルマージャ５２６は、２ｐｐｃ入力ストリームを受信し、４ｐｐｃ出力ストリームを生成する。したがって、チャネルマージャ５２６は、コアマージャ８４７よりも高いスループットを有する。コアマージャ８４７は、偶数及び奇数のストリーム８４２及び８４４からデータ値を選択して出力ストリームを生成するマルチプレクサと、マルチプレクサによる値の選択を制御するチャネルセレクタとを含み得る。いくつかの実施形態では、コアマージャ８４６は、偶数及び奇数のストリーム８４２及び８４４のうちの１つ以上を記憶することによって、インターリーブの同期を容易にする１つ以上の入力バッファを含み得る。コアマージャ８４６のメモリ及び処理構成要素のサイズは、スループットが低いために、チャネルマージャ１５００のメモリ及び処理構成要素のサイズよりも小さくてもよい。
【図１】
2020144907.tif 000006
【図２】
2020144907.tif 000007
【図３】
2020144907.tif 000008
【図４】
2020144907.tif 000009
【図５】
2020144907.tif 000010
【図６Ａ】
2020144907.tif 000011
【図６Ｂ】
2020144907.tif 000012
【図６Ｃ】
2020144907.tif 000013
【図７】
2020144907.tif 000014
【図８】
2020144907.tif 000015
【図９】
2020144907.tif 000016
【図１０】
2020144907.tif 000017
【図１１Ａ】
2020144907.tif 000018
【図１１Ｂ】
2020144907.tif 000019
【図１２】
2020144907.tif 000020
【図１３Ａ】
2020144907.tif 000021
【図１３Ｂ】
2020144907.tif 000022
【図１３Ｃ】
2020144907.tif 000023
【図１３Ｄ】
2020144907.tif 000024
【図１４】
2020144907.tif 000025
【図１５】
2020144907.tif 000026
【図１６】
2020144907.tif 000027
【手続補正書】
【提出日】令和2年5月25日(2020.5.25)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
畳み込みエンジンであって、
１つ以上の第１の畳み込みカーネルを第１の入力データに適用することによって第１の値の第１のストリームを生成するように構成された第１の畳み込み回路であって、前記第１のストリーム内の前記第１の値が、インターリーブ方式でデータの第１の複数のデータチャネルを定義する、第１の畳み込み回路と、
前記第１の畳み込み回路に結合された第２の畳み込み回路であって、
前記第１の畳み込み回路からの前記第１のストリームの前記第１の値を第２の入力データとして受信し、
１つ以上の第２の畳み込みカーネルを前記第２の入力データに適用することによって、インターリーブ方式でデータの第２の複数のデータチャネルを定義する第２の値を有する第２のストリームを生成する、前記第２の畳み込み回路と、
を備える、畳み込みエンジン。
【請求項２】
前記１つ以上の第１の畳み込みカーネルにおける或る第１の畳み込みカーネルは、第１のフィルタ要素を含み、
前記１つ以上の第２の畳み込みカーネルにおける或る第２の畳み込みカーネルは、前記第１のフィルタ要素とは異なる第２のフィルタ要素を含む、請求項１に記載の畳み込みエンジン。
【請求項３】
前記第２の畳み込み回路は、
第１の出力値を生成するよう構成された第１の実行クラスタと、
第２の出力値を生成するよう構成された第２の実行クラスタと、
前記第１の実行クラスタ及び前記第２の実行クラスタと結合された第１の後処理回路であって、前記第１の出力値及び前記第２の出力値を組み合わせることによって、前記第２の値を有する前記第２のストリームを生成する、前記第１の後処理回路と、
を備える、請求項１に記載の畳み込みエンジン。
【請求項４】
前記第１の畳み込み回路が、
第３の実行クラスタ及び第４の実行クラスタであって、前記第３の実行クラスタが第３の出力値を生成する一方で、前記第４の実行クラスタが非アクティブ化される、前記第３の実行クラスタ及び第４の実行クラスタと、
前記第３の実行クラスタ及び前記第４の実行クラスタに結合された第２の後処理回路であって、前記第３の出力値から第１の値の第１のストリームを生成するよう構成された前記第２の後処理回路と、
含む、請求項３に記載の畳み込みエンジン。
【請求項５】
前記第３の実行クラスタは、クロックサイクル毎に前記第３の出力値の一つを生成するよう構成され、
前記第１の実行クラスタは、クロックサイクル毎に前記第１の出力値の一つを生成するよう構成され、
前記第２の実行クラスタは、前記第１の実行クラスタと並行して、クロックサイクル毎に前記第２の出力値の一つを生成するよう構成された、
請求項４に記載の畳み込みエンジン。
【請求項６】
第１の後処理回路は、複数の第２の畳み込みカーネルに関する正規化相互相関（ＮＣＣ）スコア及び前記第１の実行クラスタからの前記第１の出力値を計算するように構成されたマルチチャネルＮＣＣユニットとを含む、請求項３に記載の畳み込みエンジン。
【請求項７】
第１の後処理回路は、前記第１の実行クラスタからの前記第１の出力値に関連付けられた最大値又は最小値を判定するように構成されたピークファインダを更に含む、請求項３に記載の畳み込みエンジン。
【請求項８】
第１の後処理回路は、前記第１の実行クラスタからの前記第１の出力値に対して非線形変換を実行するように構成された応答整流ユニットを更に含む、請求項３に記載の畳み込みエンジン。
【請求項９】
第１の後処理回路は、前記第１の実行クラスタからの前記第１の出力値に対して、インターチャネル局所応答正規化（ＬＲＮ）を実行するように構成されたＬＲＮユニットを更に含む、請求項３に記載の畳み込みエンジン。
【請求項１０】
前記第１の入力データは、インターリーブ方式で複数の画像のチャネルを定義する、第１の値の第１のストリームを含む、請求項１に記載の畳み込みエンジン。
【請求項１１】
前記第１の畳み込み回路は、
前記第１の畳み込み回路及び前記第２の畳み込み回路の外部にあるメモリに前記第１の値を記憶することなく、前記第２の畳み込み回路へ前記第１のストリームの前記第１の値を提供するよう構成されている、請求項１に記載の畳み込みエンジン。
【請求項１２】
畳み込みエンジンであって、
１つ以上の第１の畳み込みカーネルを第１の入力データに適用することによって第１の値の第１のストリームを生成するように構成された第１の畳み込み回路であって、前記第１のストリーム内の前記第１の値が、インターリーブ方式でデータの第１の複数のデータチャネルを定義する、第１の畳み込み回路と、
１つ以上の第２の畳み込みカーネルを第２の入力データに適用することによって第２の値の第２のストリームを生成するように構成された第２の畳み込み回路であって、前記第２のストリーム内の前記第２の値が、インターリーブ方式でデータの第２の複数のデータチャネルを定義し、前記第１の畳み込み回路及び前記第２の畳み込み回路が並行に作動して、前記第１の値の第１のストリーム及び前記第２の値の第２のストリームを生成する、前記第２の畳み込み回路と、
前記第１の畳み込み回路に連結されて前記第１のストリームを受信し、前記第２の畳み込み回路に連結されて前記第２のストリームを受信するチャネルマージ回路とを備え、
前記チャネルマージ回路が、
前記畳み込みエンジンの第１のモードでは、前記第１の値を含む第１の出力ストリームと、前記第２の値を含む第２の出力ストリームとを生成し、前記第１の畳み込み回路で受信された前記第１の値が、前記第２の畳み込み回路で受信された前記第２の値と同一であり、
前記畳み込みエンジンの第２のモードでは、前記第２の値とインターリーブされた前記第１の値を含む第３の出力ストリームを受信し、前記第３の出力ストリームがインターリーブ方式で前記第１の複数のデータチャネル及び前記第２の複数のデータチャネルを定義し、前記第１の畳み込み回路によって受信された前記第１の入力データが、前記第２の畳み込み回路によって受信された前記第２の入力データと同じである、ように構成されている、畳み込みエンジン。
【請求項１３】
前記第１の畳み込み回路が第１の畳み込みカーネルを前記第１の入力データに適用すると同時に、前記第２の畳み込み回路が第２の畳み込みカーネルを前記第２の入力データに適用し、
前記第１の畳み込みカーネルが第１のフィルタ要素を有し、前記第２の畳み込みカーネルが前記第１のフィルタ要素とは異なる第２のフィルタ要素を有する、請求項１２に記載の畳み込みエンジン。
【請求項１４】
前記第１の畳み込み回路は、
畳み込みコアであって、
前記第１の複数のデータチャネルの偶数チャネルを定義する偶数データ値のストリームを生成するように構成された第１の実行クラスタと、
前記第１の複数のデータチャネルの奇数チャネルを定義する奇数データ値のストリームを生成するように構成された第２の実行クラスタと、
を含む、畳み込みコアと、
前記第１の実行クラスタに連結されて前記偶数データ値のストリームを受信し、前記第２の実行クラスタに連結されて前記奇数データ値のストリームを受信する後処理回路であって、前記偶数データ値のストリーム及び前記奇数データ値のストリームから前記第１の値の第１のストリームを生成するように構成された、後処理回路と、
を含む、請求項１２に記載の畳み込みエンジン。
【請求項１５】
前記後処理回路が、
複数の第１の畳み込みカーネルのマルチチャネル正規化相互相関（ＮＣＣ）スコアと、前記偶数データ値のストリームとを計算するように構成されたマルチチャネルＮＣＣユニットを含む、請求項１４に記載の畳み込みエンジン。
【請求項１６】
前記後処理回路が、偶数チャネルに関連付けられた前記ＮＣＣスコアに基づきテンプレートにとっての最良一致位置を判定するよう構成されたピークファインダを更に含む、請求項１５に記載の畳み込みエンジン。
【請求項１７】
前記後処理回路が、前記第１の実行クラスタからの前記偶数データ値のストリームへ非線形変換を実行するように構成された応答整流ユニットを含む、請求項１４に記載の畳み込みエンジン。
【請求項１８】
第１の後処理回路は、前記第１の複数のデータチャネルの偶数チャネルを定義する偶数データ値に対して、チャネル間局所応答正規化（ＬＲＮ）を実行するように構成されたＬＲＮユニットを更に含む、請求項１４に記載の畳み込みエンジン。
【請求項１９】
前記後処理回路が、
前記第１の実行クラスタに連結され、複数の第１の畳み込みカーネルの正規化相互相関（ＮＣＣ）スコア及び前記偶数データ値のストリームを計算するように構成されたマルチチャネルＮＣＣユニットと、
前記マルチチャネルＮＣＣに連結され、前記偶数データ値のストリームに対して非線形変換を実行するように構成された応答整流ユニットと、
前記応答整流ユニットに連結され、前記応答整流ユニットの出力に対してチャネル間局所応答正規化（ＬＲＮ）を実行するように構成されたチャネル間ＬＲＮユニットと、
を含む、後処理回路と、
前記畳み込みエンジンが、前記マルチチャネルＮＣＣユニット、前記応答整流ユニット、及び前記チャネル間ＬＲＮユニットを選択的にアクティブ化させる又は非アクティブ化させるように構成された制御回路を更に含む、請求項１４に記載の畳み込みエンジン。
【請求項２０】
前記畳み込みエンジンを、前記第１及び第２のモードを含む複数のモード間で切り替えるように構成された制御回路を更に備える、請求項１２に記載の畳み込みエンジン。
【請求項２１】
前記第２の畳み込み回路が、第１のマルチプレクサを含み、
前記チャネルマージ回路が、第２のマルチプレクサを含み、
前記制御回路が、
前記畳み込みエンジンの前記第１のモードにおいて、
前記第１のマルチプレクサに、前記第１の入力データを、前記第２の畳み込み回路への前記第２の入力データとして選択させ、
前記第２のマルチプレクサに、前記第２の値の第２の出力ストリームを、前記チャネルマージ回路の前記第２の出力ストリームとして選択させ、
前記畳み込みエンジンの前記第２のモードにおいて、
前記第１のマルチプレクサに、前記第１の入力データを、前記第２の畳み込み回路への前記第２の入力データとして選択させ、
前記第２のマルチプレクサに、前記第３の出力ストリームを、前記チャネルマージ回路の出力として選択させる、
ように更に構成された、請求項２０に記載の畳み込みエンジン。
【外国語明細書】
2020144907000001.pdf