2016-02-29 9 views
16

TL.DR. theano.tensor.nnet.neighbours.images2neibsの3次元のフレンドリーな実装はありますか?Theanoの3Dスライディングウィンドウ操作ですか?

N> nのnxnxn画像を取り入れたニューラルネットワークを使って、ボリューム(NxNxN)のボクセル分類を行いたいと思います。ボリューム内の各ボクセルを分類するには、各ボクセルを反復処理する必要があります。各反復について、ニューラルネットワークへの入力として近傍ボクセルを取得して渡す。これは、スライディングウィンドウ操作であり、操作はニューラルネットワークです。

私のニューラルネットワークはTheanoに実装されていますが、スライディングウィンドウの実装はpython/numpyです。これは純粋なTheano操作ではないので、1つのボリューム内のすべてのボクセルを分類するために、分類は永遠に(> 3時間)かかります。 2次元スライディングウィンドウ操作の場合、Theanoにはヘルパーメソッドtheano.tensor.nnet.neighbours.images2neibsがありますが、3次元画像にも同様の実装がありますか?

編集: N-Dスライディングウィンドウの既存のnumpyの溶液(12)があり、両方の使用は、メモリの問題を防止する、「スライディングウィンドウのビュー」を提供するnp.lib.stride_tricks.as_strided。私の実装では、スライディングウィンドウ配列はnumpy(Cython)からPythonに、そしてTheanoに渡されています。パフォーマンスを向上させるには、Pythonをバイパスする必要があります。

+0

関連の議論。 https://github.com/Theano/Theano/issues/2166 – teng

+1

また、 'sklearn.feature_extraction.image.extract_patches'をチェックアウトすることもできます。これにより、データのコピーを作成することなく、目的の 'nxnxn'キューブへのビューを提供することができます。これもコピーしない「np.einsum」と組み合わせれば、許容可能な時間内に動作するものが得られるかもしれません(保証なし、試したことはありません) – eickenberg

+0

ありがとうEickenberg。私は 'np.einsum'を見てみる必要があります! – teng

答えて

0

OPで述べたように、sklearn_theano.feature_extraction.overfeatのEickenbergとKastnerのOverfeatTransformerユーティリティはこの操作に適しています。

関連する問題