2016-02-29 27 views
16

TL.DR. theano.tensor.nnet.neighbours.images2neibs有三維友好的實現嗎?在Theano的3D滑動窗口操作?

我想使用一個神經網絡進行體積(NxNxN)的體素分類,該神經網絡需要一個nxnxn圖像,其中N> n。爲了對體積中的每個體素進行分類,我必須遍歷每個體素。對於每個迭代,我獲得並傳遞鄰域體素作爲神經網絡的輸入。這只是一個滑動窗口操作,其操作是神經網絡。

雖然我的神經網絡在Theano中實現,滑動窗口的實現是在Python/numpy中。由於這不是純粹的Theano操作,所以分類需要永久(> 3小時)來對一個體積中的所有體素進行分類。對於二維滑動窗口操作,Theano有一個輔助方法,theano.tensor.nnet.neighbours.images2neibs,對於三維圖像有沒有類似的實現?

編輯: 有現有numpy的解決方案(12)對於n-d滑動窗口,都使用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

謝謝埃肯伯格。我需要看看'np.einsum'! – teng

回答

0

如OP所述,Eickenberg和Kastner的sklearn_theano.feature_extraction.overfeat中的OverfeatTransformer實用程序與此操作相當匹配。