3d скользящее окно в Theano?

TL.DR. Существует ли трехмерная дружественная реализация theano.tensor.nnet.neighbours.images2neibs?

Я хотел бы выполнить воксельную классификацию тома (NxNxN), используя нейронную сеть, которая принимает изображение nxnxn, где N> n. Чтобы классифицировать каждый воксель в объеме, я должен пройти по каждому вокселю. Для каждой итерации я получаю и передаю окрестности вокселей в качестве входных данных для нейронной сети. Это просто операция со скользящим окном, которой является нейронная сеть.

В то время как моя нейронная сеть реализована в Theano, реализация скользящего окна находится в python/numpy. Поскольку это не чистая операция Theano, классификация занимает вечность (> 3 часа) для классификации всех вокселей в одном томе. Для операции 2d со скользящим окном у Theano есть вспомогательный метод, theano.tensor.nnet.neighbours.images2neibs, есть ли аналогичная реализация для трехмерных изображений?

Редактировать: Существуют простые решения (1 и 2) для второго скользящего окна, оба используют np.lib.stride_tricks.as_strided для предоставления "видов скользящего окна", таким образом предотвращая проблемы с памятью. В моей реализации массивы скользящих окон передаются из numpy (Cython) в Python, а затем в Theano. Чтобы повысить производительность, скорее всего, мне придется обойти Python.

Ответы

Ответ 1

Утилита Eickenberg и Kastner OverfeatTransformer в sklearn_theano.feature_extraction.overfeat будет хорошей совпадением для этой операции, как упоминалось OP.