TL.DR. Esiste un'implementazione amichevole tridimensionale di theano.tensor.nnet.neighbours.images2neibs
?operazione finestra scorrevole 3D in Theano?
Vorrei eseguire la classificazione voxel-wise di un volume (NxNxN) utilizzando una rete neurale che contiene un'immagine nxnxn, dove N> n. Per classificare ciascun voxel nel volume, devo scorrere ogni voxel. Per ciascuna iterrazione, ottengo e passo i voxel del vicinato come input per la rete neurale. Questa è semplicemente un'operazione a finestra scorrevole, che l'operazione è la rete neurale.
Mentre la mia rete neurale è implementata in Theano, l'implementazione della finestra scorrevole è in python/numpy. Poiché questa non è una pura operazione di Theano, la classificazione richiede sempre (> 3 ore) per classificare tutti i voxel in un volume. Per l'operazione della finestra scorrevole 2d, Theano ha un metodo di supporto, theano.tensor.nnet.neighbours.images2neibs
, esiste un'implementazione simile per le immagini tridimensionali?
edit: Ci sono soluzioni NumPy esistenti (1 e 2) per n-d finestra scorrevole, sia per uso np.lib.stride_tricks.as_strided per fornire 'vista della finestra scorrevole', evitando così problemi di memoria. Nella mia implementazione, gli array di finestre scorrevoli vengono passati da numpy (Cython) a Python e quindi a Theano. Per migliorare le prestazioni, è probabile che io debba bypassare Python.
discussione relativa. https://github.com/Theano/Theano/issues/2166 – teng
In alternativa, potresti voler controllare 'sklearn.feature_extraction.image.extract_patches'. Questo può darti una vista sui cubi 'nxnxn' desiderati senza fare una copia dei dati. Combinalo con un 'np.einsum' che non copia e puoi ottenere qualcosa che funziona in un tempo accettabile (nessuna garanzia, mai provato) – eickenberg
Grazie Eickenberg. Dovrò dare un'occhiata a 'np.einsum'! – teng