Utiliser efficacement plusieurs tranches Numpy pour un recadrage aléatoire d'images
Cette question cherche un moyen efficace d'effectuer un recadrage aléatoire d'images à partir d'un tableau numpy contenant 4 -images dimensionnelles. L'objectif est d'extraire des recadrages de fenêtre 16x16 de chacune des quatre images, garantissant des recadrages différents pour chaque image.
Une solution proposée utilise une boucle for simple pour générer des décalages aléatoires pour chaque image et appliquer ces décalages aux tranches numpy . Cependant, pour obtenir une efficacité optimale sans sacrifier la surcharge de mémoire, des approches alternatives sont explorées.
Exploiter les foulées et l'indexation sophistiquée
Une approche consiste à exploiter stride_tricks.as_strided de numpy pour créer des glissements. fenêtres qui agissent comme des vues dans le tableau d’entrée. Cela évite la duplication de mémoire et fournit une opération virtuellement gratuite.
La fonction view_as_windows de scikit-image simplifie ce processus en créant des fenêtres coulissantes avec une taille de fenêtre spécifiée et un axe coulissant le long d'autres dimensions. Grâce à cette fonction, nous pouvons extraire efficacement les recadrages de fenêtre 16x16 souhaités, garantissant des décalages aléatoires pour chaque image.
Implémentation
Le code Python fourni démontre l'application de view_as_windows pour obtenir un recadrage aléatoire des images tout en conservant une empreinte mémoire efficace :
<code class="python">from skimage.util.shape import view_as_windows # Obtain sliding windows w = view_as_windows(X, (1,16,16,1))[...,0,:,:,0] # Retrieve specific windows using random offsets out = w[np.arange(X.shape[0]), x, y] # Rearrange to match the output format of the loop-based approach out = out.transpose(0,2,3,1)</code>
Cette approche offre une solution plus efficace pour le recadrage aléatoire des images par rapport à la méthode basée sur la boucle tout en résolvant efficacement les problèmes de surcharge de mémoire.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!