1

FFT2Dの論文で

http://developer.download.nvidia.com/compute/cuda/2_2/sdk/website/projects/convolutionFFT2D/doc/convolutionFFT2D.pdf

図 1 と 2 では、次のように述べられています。

画像が畳み込みカーネルよりも大きいと仮定すると、通常は実際にそうですが、畳み込みカーネルを画像サイズに拡張し、図 1 に従ってパディングする必要があります。図 2 と 3 (以下を参照) でわかるように、拡張カーネルを使用した巡回畳み込みは、初期畳み込みカーネルを使用した巡回畳み込みと同等です。

要素のカーネルと画像の間で畳み込みを実行し、同じ要素の展開されたカーネルと画像の間で畳み込みを実行しようとすると、異なる結果が得られます。

「循環畳み込み」は古典的な「畳み込み」と同じだとどこかで読みましたが、これは正しいですか? そうでなければ、これをどのように解釈すればよいでしょうか?

4

1 に答える 1

2

いいえ、循環畳み込みとも呼ばれる循環畳み込みは、通常の畳み込みと同じではありません。カーネルは循環畳み込みで「ラップアラウンド」します。

たとえば、次のようにしx=[1 2 3 4 5]ます。h=[1 2 3]

最初に、反転hしてゼロでパディングします: h'=[0 0 3 2 1]. 次に、最初の要素を取得するために、通常の内積を実行します。

(x*h)[0] = 0*1 + 0*2 + 3*3 + 2*4 + 1*5

2 番目の要素を取得するには、カーネルを 1 つシフトして、もう一度ドットを付けます。

(x*h)[1] = 0*1 + 1*2 + 2*3 + 3*4 + 0*5

三代目も同じ。ただし、4 番目を取得するには、カーネルがラップアラウンドするため、次のようになります。

(x*h)[3] = 2*1 + 3*2 + 0*3 + 0*4 + 1*5
于 2012-07-03T18:05:56.433 に答える