Из примера набора данных mnist я знаю, что набор данных выглядит примерно так (60000,28,28) и метки (60000,). Когда я печатаю первые три примера набора данных Mnist
и я печатаю первые три этикетки из тех, которые:
Изображения и метки ограничены.
Я хочу знать, как я могу связать папку с (1200 изображений) размером 64 и 64 с помощью excel со столбцом с именем «ущерб» с 5 различными классами, чтобы я мог обучать нейронную сеть.
Лайк изображение двери автомобиля и повреждения 3 класса.
Автоэнкодеру не нужны метки — автоэнкодер использует изображения как на входе, так и на выходе.
@NickODell В принципе, как мне превратить мои данные в данные Mnist, у меня есть изображения в папке (1200) размером 64x64, и у меня есть метки в виде файла csv.
Вот грубый набросок того, как вы можете подойти к этой проблеме.
Первый шаг — это предварительная обработка каждого изображения. Для этого вы можете использовать Python Imaging Library.
Пример:
from PIL import Image
def load_image(path):
image = Image.open(path)
# Images can be in one of several different modes.
# Convert to single consistent mode.
image = image.convert("RGB")
image = image.resize((64, 64))
return image
Обрезка изображений, чтобы сосредоточиться на функции, на которую вы хотите обратить внимание сети, может повысить производительность, но требует некоторой работы для каждого обучающего примера и для каждого вывода.
Я бы загружал изображения так:
import glob
import pandas as pd
image_search_path = "image_directory/*.png"
def load_all_images():
images = []
for path in glob.glob(image_search_path):
image = load_image(path)
images.append({
'path': path,
'img': image,
})
return pd.DataFrame(images)
Я бы использовал Pandas для загрузки меток. Предположим, у вас есть файл Excel со столбцами path
и label
с именем labels.xlsx.
labels = pd.read_excel("labels.xlsx")
Затем у вас возникает проблема, заключающаяся в том, что загружаемые изображения, вероятно, не в том же порядке, что и ваш файл, полный меток. Вы можете исправить это, объединив два набора данных.
images = load_all_images()
images_and_labels = images.merge(labels, on = "path", validate = "1:1")
# check that no rows were dropped or added, say by a missing label
assert len(images.index) == len(images_and_labels.index)
assert len(labels.index) == len(images_and_labels.index)
Затем вам нужно преобразовать изображения и метки в пустой фрейм данных.
Пример для изображений:
import numpy as np
images_processed = []
for image in images_and_labels['img'].tolist():
image = np.array(image)
# Does the image have expected shape?
assert image.shape == (64, 64, 3)
images_process.append(image)
images_numpy = np.array(images_processed)
# Check that this has the expected shape. You'll need
# to replace 1200 with the number of training examples.
assert images_numpy.shape == (1200, 64, 64, 3)
Предполагая, что вы настраиваете классификатор, такой как MNIST, вам сначала нужно определиться с порядком категорий и сопоставить каждый элемент этого списка категорий с его позицией в этом порядке.
Порядок категорий произвольный, но вы должны быть последовательны в этом.
Пример:
categories = {
'damage high': 0,
'damage low': 1,
'damage none': 2,
}
categories_num = labels_and_images['label'].map(categories)
# Are there any labels that didn't get mapped to something?
assert categories_num.isna().sum() == 0
# Convert labels to numpy
labels_np = categories_num.values
# Check shape. You'll need to replace 1200 with the number of training examples
assert labels_np.shape == (1200,)
Теперь у вас должны быть настроены переменные images_np
и labels_np
как пустые массивы в том же стиле, что и в примере MNIST.
именно то, что я просил, ценю.
@ Должен ли image_search_path и путь иметь один и тот же путь к каталогу?
@DudeRar image_search_path должен быть glob, который соответствует изображениям в каталоге, который вы хотите загрузить. путь должен быть именем файла определенного изображения.
Здравствуйте еще раз, мне интересно, если я хочу увеличить изображения с помощью tf.keras.preprocessing.image.ImageDataGenerator, есть ли способ увеличить изображения, а затем добавить к images_np? потому что для набора данных меток проще, например, если я хочу увеличить метки в 5 раз, я просто использую функцию повторения панд.
@DudeRar np.append()?
Я имею в виду, могу ли я использовать ImageDataGenerator для добавления дополненных изображений в массив images_numpy. Например: images_numpy.shape = 1200,64,64,3 to images_numpy_augmented.shape = 8600,64,64,3
@DudeRar Да, np.append().
Можете ли вы прояснить вашу проблему? Похоже, у вас есть изображения, но нет меток, и изображения имеют непостоянный размер. Это верно?