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

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

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

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

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

21
задан galfisher 10 July 2019 в 18:13
поделиться