Python Tensorflow создает набор данных из реальных изображений - PullRequest
2 голосов
/ 10 апреля 2020

Я пытаюсь построить модель GAN, которая может рисовать портрет, я могу сделать это с помощью набора данных mnist, и я хочу изменить свой набор данных на портрет целевого человека. У меня было только несколько примеров изображений, поэтому я попытался расширить свои данные с помощью библиотеки ImageDataGenerator , в которую я добавил код ниже. Моя первая проблема - я не уверен, что это правильный путь, и вот мой второй вопрос: это код, который я использовал для создания данных:

import numpy as np
import pandas as pd
import seaborn as sns 
import matplotlib.pyplot as plt
from matplotlib.image import imread
import matplotlib.image as mpimg
import os
from tensorflow.keras.preprocessing.image import ImageDataGenerator
import random
img_dir = "C:\\Users\\Casper\\Desktop\\draw_ata\\atam\\"
image_shape = (150,150,3)
if not os.path.exists('pic_data'):
    os.makedirs('pic_data')
for i in range(60000):
    random_img_path = img_dir + random.choice(os.listdir(img_dir))
    image_gen = ImageDataGenerator(rotation_range=10,width_shift_range=0.1,height_shift_range=0.1,rescale=1/255, shear_range=0.05, zoom_range=0.1,horizontal_flip=True,fill_mode="nearest")
    img = imread(random_img_path, 0)
    new_img = image_gen.random_transform(img)

    mpimg.imsave("pic_data/%d.png" % i, new_img)

Он успешно сохранил изображения, но Теперь моей следующей целью было получить правильную форму, которую я могу использовать для модели GAN. Мои фотографии были в оттенках серого, но почему-то их формы были 3D, как цветные изображения. Я не обращал внимания на эту проблему и пытался двигаться дальше. Я хотел создать массив np как набор данных mnist. И вот мой код для этого:

from tensorflow.keras.layers import Input,SimpleRNN,GRU,LSTM,Dense,Flatten,GlobalMaxPooling1D,Embedding, Dropout, LeakyReLU, BatchNormalization
from tensorflow.keras.models import Model, Sequential
from tensorflow.keras.optimizers import SGD, Adam
from tensorflow.keras.datasets import mnist
from sklearn.preprocessing import StandardScaler
import numpy as np
import pandas as pd
from matplotlib.image import imread
import matplotlib.pyplot as plt
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from sklearn.model_selection import train_test_split
import os
img_dir = "C:\\Users\\Casper\\Desktop\\draw_ata\\pic_data\\"
data_train = os.listdir(img_dir)[:10000]
data_test = os.listdir(img_dir)[50000:]

for i in range(len(data_train)):
    data_train[i] = imread(img_dir + data_train[i])
data_train = np.array(data_train)
print(data_train.shape)

и вывод был (10000,), но я хочу, чтобы их формы, такие как (10000,150,150) -мое фото масштабирование были 150x150- так же, как набор данных mnist. Как я могу установить их для обучаемого набора данных, спасибо

РЕДАКТИРОВАТЬ ОК, я решил это с помощью библиотеки opencv

...