Метка привязана к изображению

Из примера набора данных mnist я знаю, что набор данных выглядит примерно так (60000,28,28) и метки (60000,). Когда я печатаю первые три примера набора данных Mnist

и я печатаю первые три этикетки из тех, которые:

Изображения и метки ограничены.

Я хочу знать, как я могу связать папку с (1200 изображений) размером 64 и 64 с помощью excel со столбцом с именем «ущерб» с 5 различными классами, чтобы я мог обучать нейронную сеть.

Лайк изображение двери автомобиля и повреждения 3 класса.

Можете ли вы прояснить вашу проблему? Похоже, у вас есть изображения, но нет меток, и изображения имеют непостоянный размер. Это верно?

Nick ODell 25.11.2022 17:31

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

Nick ODell 25.11.2022 17:46

@NickODell В принципе, как мне превратить мои данные в данные Mnist, у меня есть изображения в папке (1200) размером 64x64, и у меня есть метки в виде файла csv.

Dude Rar 25.11.2022 18:39
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
157
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот грубый набросок того, как вы можете подойти к этой проблеме.

Загрузка каждого изображения

Первый шаг — это предварительная обработка каждого изображения. Для этого вы можете использовать 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)

Преобразование изображений в numpy

Затем вам нужно преобразовать изображения и метки в пустой фрейм данных.

Пример для изображений:

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)

Преобразование меток в numpy

Предполагая, что вы настраиваете классификатор, такой как 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.

именно то, что я просил, ценю.

Dude Rar 25.11.2022 21:16

@ Должен ли image_search_path и путь иметь один и тот же путь к каталогу?

Dude Rar 25.11.2022 21:57

@DudeRar image_search_path должен быть glob, который соответствует изображениям в каталоге, который вы хотите загрузить. путь должен быть именем файла определенного изображения.

Nick ODell 25.11.2022 22:08

Здравствуйте еще раз, мне интересно, если я хочу увеличить изображения с помощью tf.keras.preprocessing.image.ImageDataGenerator, есть ли способ увеличить изображения, а затем добавить к images_np? потому что для набора данных меток проще, например, если я хочу увеличить метки в 5 раз, я просто использую функцию повторения панд.

Dude Rar 06.02.2023 02:01

@DudeRar np.append()?

Nick ODell 06.02.2023 02:03

Я имею в виду, могу ли я использовать ImageDataGenerator для добавления дополненных изображений в массив images_numpy. Например: images_numpy.shape = 1200,64,64,3 to images_numpy_augmented.shape = 8600,64,64,3

Dude Rar 06.02.2023 13:29

@DudeRar Да, np.append().

Nick ODell 06.02.2023 18:39

Другие вопросы по теме