【问题标题】:3d sliding window operation in Theano?Theano中的3d滑动窗口操作?
【发布时间】: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 解决方案(12)都使用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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2017-05-11
    • 1970-01-01
    • 2017-01-07
    • 2015-08-26
    • 2016-12-28
    • 1970-01-01
    • 2016-03-06
    • 2013-04-03
    • 1970-01-01
    相关资源
    最近更新 更多