Я предлагаю два варианта:
- Создайте отдельный этап «преобразования», который отображает изображение и передает его дальше без изменений.Бесплатный бонус заключается в том, что вы можете вставить его на любом этапе в списке трансформации.
import cv2
import numpy as np
def TransformShow(name="img", wait=100):
def transform_show(img):
cv2.imshow(name, np.array(img))
cv2.waitKey(wait)
return img
return transform_show
Вставьте этот «трансформатор» перед ToTensor()
:
transforms.RandomHorizontalFlip(),
TransformShow("window_name", delay_in_ms),
transforms.ToTensor(),
Используйте нольdelay_in_ms
для ожидания нажатия клавиши.
Я использую OpenCV здесь для отображения изображений.Это также можно сделать только с помощью Pillow / PIL, но мне не понравилось, как он справляется с этим.
Отменить нормализацию и отобразить изображение.
def show_image(img, name="img", wait=100):
mean = np.array([0.485, 0.456, 0.406])
std = np.array([0.229, 0.224, 0.225])
cv2.imshow(name, img.cpu().numpy().transpose((1,2,0)) * std + mean)
cv2.waitKey(wait)
, а затем вызвать его как
show_image(data[0], "unaug", 1)
Последний подход может быть аппроксимирован быстрым двухслойным, но с несколько искаженными цветами:
cv2.imshow("approx", data[0].cpu().numpy().transpose((1,2,0)) * 0.225 + 0.45)
cv2.waitKey(10)