Классификация изображений с помощью CNN на Python

Вопрос или проблема

Я работаю над классификацией изображений, используя CNN. Мой набор данных содержит более 50 классов (50 папок), представляющих типы автомобильных деталей, и в каждой папке у нас есть марки автомобилей. В каждой папке с автомобилем содержатся изображения детали, сделанные с разных сторон: спереди, сзади, слева, справа, сверху, снизу. Например, папка “дверь” будет содержать разные марки автомобилей, в каждой из которых будут изображения двери, сделанные с разных сторон.

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

введите описание изображения здесь

Вы можете попробовать использовать метод tf.keras.preprocessing.image.ImageDataGenerator‘s flow_from_directory(). Вот несколько ссылок для справки:

Ответ или решение

Классификация изображений с использованием CNN в Python

Ваша задача по классификации изображений автомобильных деталей представляет собой интересный проект, связанный с глубоким обучением. С учетом того, что у вас имеется более 50 классов, каждый из которых представлен отдельной папкой на основе типа детали, и каждая папка содержит изображения различных брендов с разных ракурсов, мы можем предложить следующий подход для решения этой задачи с использованием свёрточных нейронных сетей (CNN) и библиотеки TensorFlow в Python.

Шаги для настройки модели классификации изображений

  1. Структура папок:
    Убедитесь, что структура ваших папок организована следующим образом:

    dataset/
       door/
           brand1_img1.jpg
           brand1_img2.jpg
           ...
           brand2_img1.jpg
           ...
       hood/
           ...
       ...

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

  2. Импорт необходимых библиотек:
    Необходимо начать с импорта необходимых библиотек:

    import tensorflow as tf
    from tensorflow.keras.preprocessing.image import ImageDataGenerator
    from tensorflow.keras import layers, models
  3. Подготовка данных:
    Используйте ImageDataGenerator для загрузки и предварительной обработки изображений. Этот класс предоставляет мощные инструменты для аугментации данных, что особенно полезно для улучшения обобщающей способности модели.

    train_datagen = ImageDataGenerator(
       rescale=1./255,
       rotation_range=40,
       width_shift_range=0.2,
       height_shift_range=0.2,
       shear_range=0.2,
       zoom_range=0.2,
       horizontal_flip=True
    )
    
    train_generator = train_datagen.flow_from_directory(
       'dataset/',
       target_size=(150, 150),  # Используйте размер, подходящий для вашей модели
       batch_size=32,
       class_mode='multi_outputs'  # Для многоклассовой классификации
    )
  4. Создание модели:
    Определите архитектуру свёрточной нейронной сети. Например, базовая модель может выглядеть так:

    model = models.Sequential()
    model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(150, 150, 3)))
    model.add(layers.MaxPooling2D(2, 2))
    model.add(layers.Conv2D(64, (3, 3), activation='relu'))
    model.add(layers.MaxPooling2D(2, 2))
    model.add(layers.Conv2D(128, (3, 3), activation='relu'))
    model.add(layers.MaxPooling2D(2, 2))
    model.add(layers.Flatten())
    model.add(layers.Dense(512, activation='relu'))
    model.add(layers.Dense(len(train_generator.class_indices), activation='softmax'))  # Для вывода классов
  5. Компиляция модели:
    Используйте Adam, RMSprop или другой оптимизатор для компиляции модели:

    model.compile(loss='categorical_crossentropy',
                 optimizer='adam',
                 metrics=['accuracy'])
  6. Обучение модели:
    Обучите модель на ваших данных.

    model.fit(train_generator, epochs=30)  # Измените число эпох в зависимости от качества обучения
  7. Оценка результатов:
    После завершения обучения важно проверить качество модели на тестовых данных и осуществить настройку параметров, если это необходимо.

Распознавание типа детали и ракурса

Для распознавания как типа детали, так и ракурса можно использовать многовыходную модель, где один выход будет классифицировать тип детали, а другой – ракурс. Для этого вам потребуется пометить изображения по типу детали и ракурсу.

  1. Метки классов: Создайте две метки для каждой картинки: метка типа детали и метка ракурса. Вы можете использовать подход "сначала тип, затем ракурс" (например, door_front, door_back и т.д.).

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

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

Следуя этим шагам, вы сможете создать модель для классификации изображений автомобильных деталей, которая будет способна распознавать как тип детали, так и ракурсы изображений. Не забывайте о важности аугментации данных и регуляризации для улучшения общего качества работы модели. Удачи вам в вашем проекте!

Оцените материал
Добавить комментарий

Капча загружается...