私は視覚アルゴリズムを実装しようとしています。これには、9x9ラプラシアンガウスフィルタを使用したプレフィルタリングステージが含まれています。高速なフィルタ実装について簡単に説明しているドキュメントを参照できますか?私は、最も効率的なフィルタリングのためにFFTを使うべきだと思います。ここでCで2D畳み込みを速く実装する方法
答えて
FFTを使用してもよろしいですか?これは高価になるアレイ全体の変換になります。すでに9x9コンボリューションフィルタを使用している場合、FFTは必要ありません。
一般的に、Cで最も畳み込みを行う最も簡単な方法は、ポインターを配列上に移動し、各ポイントで畳み込み値を合計し、データを新しい配列に書き込むループを設定することです。このループは、あなたの好きな方法(コンパイラのベクトル化、MPIライブラリ、OpenMPなど)を使って並列化することができます。境界について
:
- あなたは値が境界外で0であることを前提とした場合、ポイントのあなたの2次元配列に0の4要素の境界線を追加します。これは高価な境界を扱う `if`ステートメントの必要性を避けるでしょう。
- データが境界でラップする場合(つまり周期的な場合)、モジュロを使用するか、グリッドの反対側をコピーする4要素境界を追加します(abcdefg - > fgabcdefgabの2点)。 **注:これは、FFT **を含む任意の種類のフーリエ変換で暗黙のうちに仮定しているものです。そうでない場合は、FFTを実行する前にそれを考慮する必要があります。
9点のカーネルの最大境界の重なりがメイングリッドの外側の4点であるため、4点があります。従って、2n + 1×2n + 1カーネルにはn個の境界点が必要であった。
このコンボルーションが本当に高速で、かつ/またはグリッドが大きい場合は、プロセッサのキャッシュに保持できる小さな部分に分割して、より高速に計算することを検討してください。これはまた、実行したいGPUオフロード(このタイプの浮動小数点計算には理想的です)にも適用されます。
は理論リンク http://hebb.mit.edu/courses/9.29/2002/readings/c13-1.pdf
されており、ここで私は過去に使用したかなり良いFFTライブラリであるFFTWへのリンク、(必ずそれが適切である作るためにライセンスをチェックしてください)http://www.fftw.org/
ですあなたがしているのは、画像とカーネル(9x9マトリックス)をFFTするだけです。一緒に乗算してから、逆変換します。
しかし、9x9の行列では、実際の座標(画像のピクセルと行列の上にダブルループを置くだけ)で行う方がよい場合があります。両方の方法をお試しください!
実際には、画像全体を保持するのに十分な大きさのFFTサイズを使用する必要はありません。あなたは2d fftsを重ねてたくさん重ねることができます。 「高速コンボリューション」「重複保存」「重複加算」を検索できます。
ただし、9x9カーネルの場合。あなたはスピードをあげて多くの利点を見ないかもしれません。
- 1. TensorFlowで畳み込みRNNを実装する方法は?
- 2. 4-D畳み込みカーネルを実装する方法
- 3. 実装畳み込みニューラルネットワークのケラス
- 4. TensorFlowの完全畳み込みネットワークで損失を実装する方法は?
- 5. ウェイトなしで畳み込み接続を実装する方法は?
- 6. cntkで広い1次元畳み込みを実装する方法
- 7. CNNでマルチチャネルデータの逆畳み込みを実装する
- 8. 2Dの畳み込み定理
- 9. 2D配列のTensorFlow畳み込み
- 10. 畳み込み関数を高速化するC++
- 11. DFTを使用して畳み込みを実装する方法は?
- 12. Tensorflowを使用して畳み込みレイヤを実装する
- 13. TensorFlowにおける畳み込みのためのドロップアウトを正しく実装する方法
- 14. 畳み込みニューラルネットワークのL2正規化コスト関数の実装方法
- 15. tensorflowに畳み込みlstmの実装がありますか?
- 16. 2d畳み込みPythonでデータが欠落している
- 17. 畳み込みの2Dストライドの意味は何ですか?
- 18. ArrayFire(勾配計算)の畳み込みニューラルネットワークのバックプロックの実装
- 19. バッチ畳み込み2dがnumpyでscipyなし?
- 20. 2D畳み込みPythonでMatlabのconv2に似て
- 21. keras:畳み込み層の重みをブロックする方法は
- 22. 可変サイズ画像を持つ2D畳み込みニューラルネットワーク
- 23. 畳み込みオートエンコーダーを使用した2Dから3Dへ
- 24. 畳み込みフィルタ - Float Precision C Vs Java
- 25. 畳み込みニューラルネットワークモデルアーキテクチャ
- 26. Tensorflow畳み込みとnumpy畳み込みの違い
- 27. Javaでカスタム読み込み画面を正しく実装する方法
- 28. FFTによる畳み込みの短所は、実空間畳み込みと比べて何ですか?
- 29. 新しいデータに畳み込みニューラルネットワークを実行する方法
- 30. 完全畳み込みネットワークのデータセットをフォーマットする方法は?
ゼロの境界を使用すると、データはかなり白くゼロ平均であるとみなされます。 境界がゼロでない非平均データにぼかしフィルタを使用すると、エッジで望ましくない歪みが発生します。 –
十分です。 FFTを使用する代わりに、データが境界で折り返していると想定しますが、これも間違っている可能性があります。ゼロは高価なifを削除することでした。私は境界について何かを追加します。 –
Jukka境界は常に苦しんでいます。あなたはそれを説明するために何かをしなければならず、フィルはいくつかの伝統的な方法を言います。 境界に苦しんでいない唯一の方法は、2D畳み込みを行い、イメージのすべての辺で4ピクセルずつ切り抜くことです。 –