2016-02-29 9 views
16

TL.DR. Gibt es eine 3-dimensionale freundliche Implementierung von theano.tensor.nnet.neighbours.images2neibs?3D Schiebefensterbetrieb in Theano?

Ich würde gerne Voxel-weise Klassifizierung eines Volumens (NxNxN) mit einem neuronalen Netzwerk, das in einem Nxnxn Bild nimmt, wo N> n. Um jedes Voxel in dem Volumen zu klassifizieren, muss ich jedes Voxel durchlaufen. Für jede Iteration erhalte und gebe ich die Nachbarvoxel als Eingabe für das neuronale Netzwerk. Dies ist einfach eine Schiebefensteroperation, bei der es sich um das neuronale Netzwerk handelt.

Während mein neuronales Netzwerk in Theano implementiert ist, ist die Implementierung des gleitenden Fensters in Python/Numpy. Da dies keine reine Theano-Operation ist, dauert die Klassifizierung (> 3 Stunden) für die Klassifizierung aller Voxel in einem Volumen. Für den 2d-Schiebefensterbetrieb hat Theano eine Hilfsmethode, theano.tensor.nnet.neighbours.images2neibs, gibt es eine ähnliche Implementierung für 3-dimensionale Bilder?

edit: Es gibt bestehende numpy Lösungen (1 und 2) für n-d Schiebefenster, die beiden Gebräuche np.lib.stride_tricks.as_strided Ansichten des Schiebefensters 'zu liefern, wodurch Speicherprobleme zu verhindern. In meiner Implementierung werden die Sliding Window Arrays von numpy (Cython) nach Python und dann nach Theano übertragen. Um die Leistung zu steigern, muss ich wahrscheinlich Python umgehen.

+0

verwandte Diskussion. https://github.com/Theano/Theano/issues/2166 – teng

+1

Alternativ, vielleicht möchten Sie 'sklearn.feature_extraction.image.extract_patches' überprüfen. Dadurch können Sie die gewünschten 'nxnxn'-Cubes anzeigen, ohne eine Kopie der Daten zu erstellen. Kombiniere es mit einem 'np.einsum' welches auch nicht kopiert wird und du vielleicht etwas bekommst das in akzeptabler Zeit läuft (keine Garantie, nie ausprobiert) – eickenberg

+0

Danke Eickenberg. Ich muss mir 'n.einsum' anschauen! – teng

Antwort

0

Eickenberg und Kastners OverfeatTransformer-Dienstprogramm in sklearn_theano.feature_extraction.overfeat wäre eine gute Übereinstimmung für diese Operation, wie von OP erwähnt.