Crear una pila de imágenes en PyTorch
Tengo un tensor de imagen Bx3xHxW
en PyTorch y deseo crear una pila de imagen Bx3FxHxW
de esta imagen donde F=64
.
La pila de imágenes se forma desplazando la imagen original hacia la derecha. Es decir, si la imagen original debe desplazarse 2 píxeles a la derecha, las dos columnas más a la izquierda en la nueva imagen serán 0
y la tercera columna desde la izquierda de la imagen original se convertirá en la última columna de la nueva imagen desplazada.
La pila de imágenes se forma desplazando hacia la derecha la imagen original f
veces, donde f
varía de 0
a F-1
.
¿Cómo lograr esto en PyTorch de la manera más eficiente utilizando la menor cantidad posible de bucles for
? Un código numpy también funcionará ya que los dos lenguajes son bastante compatibles.
davy.ai
Para lograr esto en PyTorch, podemos utilizar la función torch.roll. Primero podemos crear un tensor de forma
Bx3xFxHxW
lleno de ceros y luego usar torch.roll para desplazar el tensor de imagen originalf
veces hacia la derecha e insertarlo en la posición correspondiente en el tensor de pila de imágenes.Aquí está el código para lograr esto:
Alternativamente, se puede implementar el enfoque anterior de manera más eficiente sin bucles for de la siguiente manera:
Podemos usar de manera similar numpy.roll para lograr el mismo resultado eficientemente en numpy de la siguiente manera:
Ambos ejemplos anteriores deberían funcionar sin la necesidad de bucles for, lo que hace que la operación sea más eficiente.