【发布时间】:2016-06-12 01:02:18
【问题描述】:
TL.DR。 theano.tensor.nnet.neighbours.images2neibs 有 3 维友好的实现吗?
我想使用接收 nxnxn 图像的神经网络对体积 (NxNxN) 执行体素分类,其中 N>n。为了对体积中的每个体素进行分类,我必须遍历每个体素。对于每次迭代,我获取并传递邻域体素作为神经网络的输入。这只是一个滑动窗口操作,操作就是神经网络。
虽然我的神经网络是在 Theano 中实现的,但滑动窗口是在 python/numpy 中实现的。由于这不是纯粹的 Theano 操作,因此分类需要永远(> 3 小时)才能将所有体素分类到一个卷中。对于2d滑动窗口操作,Theano有一个helper方法,theano.tensor.nnet.neighbours.images2neibs,对于3维图像有没有类似的实现?
编辑:
对于 n-d 滑动窗口,现有的 numpy 解决方案(1 和2)都使用np.lib.stride_tricks.as_strided 来提供“滑动窗口的视图”,从而防止内存问题。在我的实现中,滑动窗口数组从 numpy (Cython) 传递到 Python,然后传递到 Theano。为了提高性能,我可能不得不绕过 Python。
【问题讨论】:
-
或者,也许您想查看
sklearn.feature_extraction.image.extract_patches。这可以让您查看所需的nxnxn多维数据集,而无需复制数据。将它与同样不会复制的np.einsum结合起来,您可能会得到在可接受的时间内运行的东西(不能保证,从未尝试过) -
fyi
sklearn.feature_extraction.image.extract_patches也使用跨步技巧来完成工作。只需几行代码和计算即可获得正确的视图形状。 -
嗯,可行,但仅适用于彩色图像。您如何考虑将其扩展到 3D 体积?
-
嗯,你确定吗?另请参阅this comment 关于这些东西的命名,就好像它们以前不存在一样。 (只是为了完整性而添加这个 - 我没有看过你提到的论文,最后它是重要的结果)
标签: python numpy cython theano conv-neural-network