python numpy cython theano conv-neural-network

python - ¿Operación de ventana deslizante 3d en Theano?



numpy cython (1)

TL.DR. ¿Existe una implementación amigable tridimensional de theano.tensor.nnet.neighbours.images2neibs ?

Me gustaría realizar una clasificación voxel de un volumen (NxNxN) usando una red neuronal que toma una imagen nxnxn, donde N> n. Para clasificar cada vóxel en el volumen, tengo que iterar a través de cada vóxel. Para cada iteración, obtengo y paso los voxels del vecindario como entrada a la red neuronal. Esto es simplemente una operación de ventana deslizante, cuya operación es la red neuronal.

Mientras que mi red neuronal está implementada en Theano, la implementación de la ventana deslizante está en python / numpy. Como esta no es una operación Theano pura, la clasificación demora una vez (> 3 horas) clasificar todos los voxels en un volumen. Para la operación de la ventana deslizante 2d, Theano tiene un método auxiliar, theano.tensor.nnet.neighbours.images2neibs , ¿existe una implementación similar para las imágenes tridimensionales?

edición: existen soluciones numpy ( 1 y 2 ) para la ventana nd deslizante, ambas utilizan np.lib.stride_tricks.as_strided para proporcionar ''vistas de la ventana deslizante'', evitando así problemas de memoria. En mi implementación, las matrices de ventanas deslizantes se pasan de numpy (Cython) a Python y luego a Theano. Para aumentar el rendimiento, es probable que tenga que pasar por alto Python.


La utilidad OverfeatTransformer de Eickenberg y Kastner en sklearn_theano.feature_extraction.overfeat sería una buena combinación para esta operación, como lo menciona OP.