Theano中的3D滑动窗口操作



TL.DR. 是否有theano.tensor.nnet.neighbours.images2neibs的三维友好实现?

我想使用接收 nxnxn 图像的神经网络对体积 (NxNxN) 进行体素分类,其中 N>n。 要对卷中的每个体素进行分类,我必须遍历每个体素。 对于每次迭代,我获取邻域体素并将其作为神经网络的输入传递。 这只是一个滑动窗口操作,该操作就是神经网络。

虽然我的神经网络是用 Theano 实现的,但滑动窗口实现是用 python/numpy 实现的。 由于这不是纯粹的 Theano 操作,因此分类需要很长时间(> 3 小时)才能将所有体素分类到一个卷中。 对于2D滑动窗口操作,Theano有一个辅助方法,theano.tensor.nnet.neighbours.images2neibs,三维图像有类似的实现吗?

编辑:现有的 numpy 解决方案(1 和 2)用于 n-d 滑动窗口,两者都使用 np.lib.stride_tricks.as_strided 来提供"滑动窗口的视图",从而防止内存问题。 在我的实现中,滑动窗口数组从numpy(Cython)传递到Python,然后传递到Theano。 为了提高性能,我可能不得不绕过Python。

Eickenberg 和 Kastner 在 sklearn_theano.feature_extraction.overfeat 中的 OverfeatTransformer 实用程序将非常适合此操作,如 OP 所述。

最新更新