загрузить тестовые данные в pytorch - PullRequest
0 голосов
/ 19 ноября 2018

Все в названии, я просто хочу знать, как я могу загрузить свои собственные тестовые данные (image.jpg) в pytorch, чтобы проверить мой CNN.

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

спасибо за ваш ответ.У меня была проблема с загрузкой тестовых данных, и я нашел решение .

test_data = datasets.ImageFolder('root/test_cnn', transform=transform)

Например, если у меня есть 2 каталога cat & dog (в каталоге test_cnn), которые содержат изображения, Object ImageFolderавтоматически назначит изображениям cat и dog мои изображения.

Во время тестирования мне нужно просто отбросить классы.

0 голосов
/ 20 ноября 2018

Вам нужно подавать изображения в сеть так же, как на тренировке: то есть вы должны применять точно такие же преобразования, чтобы получить похожие результаты.

Предполагая, что ваша сеть была обучена с использованием этого кода (или аналогичного), вы можете видеть, что входное изображение (для проверки) претерпевает следующие преобразования :

transforms.Compose([
            transforms.Resize(256),
            transforms.CenterCrop(224),
            transforms.ToTensor(),
            normalize,
        ])),

После torchvision.transforms документов вы можете видеть, что входное изображение проходит:

  • Изменение размера до 256x256 пикс.
  • Обрезка прямоугольника 224x224 от центра изображения
  • Изображение преобразуется из типа данных uint8 в число с плавающей точкой в ​​диапазоне [0, 1] и переносится в массив 3 на 224 на 224
  • Изображение нормализует путем вычитания среднего значения и деления на стандартное значение

Вы можете сделать все это вручную для любого изображения

import numpy as np
from PIL import Image

pil_img = Image.open('image.jpg').resize((256, 256), Image.BILINEAR)  # read and resize
# center crop
w, h = pil_img.size
i = int(round((h - 224) / 2.))
j = int(round((w - 224) / 2.))
pil_img = pil_img.crop((j, i, j+224, i+224))
np_img = np.array(pil_img).astype(np.float32) / 255.
np_img = np.transpose(np_img, (2, 0, 1))  
# normalize
mean = [0.485, 0.456, 0.406]
std = [0.229, 0.224, 0.225]
for c in range(3):
  np_img = (np_img[c, ...] - mean[c]) / std[c]

Как только вы подготовите np_img для вашей модели, вы можете запустить проход прямой передачи:

pred = model(np_img[None, ...])  # note that we add a singleton leading dim for batch
...