Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 4, 2024 20:24:37

Demon-rub
Зарегистрирован: 2024-08-04
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Классификация изображений

Имеется датасет (фото объектов) из 41 класса и 31 подкласса (не каждый класс содержит подклассы). Подскажите как сделать, что бы модель распознавала изображения не только по классам, но и подклассам?

   
dataset_dir = pathlib.Path(.....)
batch_size = 32
img_width = 200
img_heigth = 200
dataset_train = tf.keras.utils.image_dataset_from_directory(
    dataset_dir,
    validation_split = 0.2,
    subset= 'training',
    seed = 123,
    image_size = (img_heigth, img_width),
    batch_size = batch_size)
dataset_validation = tf.keras.utils.image_dataset_from_directory(
    dataset_dir,
    validation_split = 0.2,
    subset= 'validation',
    seed = 123,
    image_size = (img_heigth, img_width),
    batch_size = batch_size)
class_names = dataset_train.class_names
print(f'Class names: {class_names}')
model = Sequential([Rescaling(1./255, input_shape=(img_heigth, img_width, 3)),
                    #аугментация
                    RandomFlip("horizontal"),
                    RandomRotation(0.2),
                    RandomZoom(0.2),
                    RandomContrast(0.2),
                    #слои сверточные
                    tf.keras.layers.Conv2D(64,3, padding='same', activation='relu'),
                    tf.keras.layers.Conv2D(64,3, padding='same', activation='relu'),
                    tf.keras.layers.MaxPooling2D(),
                    tf.keras.layers.Conv2D(128,3, padding='same', activation='relu'),
                    tf.keras.layers.Conv2D(128,3, padding='same', activation='relu'),
                    tf.keras.layers.Conv2D(128,3, padding='same', activation='relu'),
                    tf.keras.layers.MaxPooling2D(),
                    tf.keras.layers.Conv2D(128,3, padding='same', activation='relu'),
                    tf.keras.layers.Conv2D(128,3, padding='same', activation='relu'),
                    tf.keras.layers.Conv2D(128,3, padding='same', activation='relu'),
                    tf.keras.layers.MaxPooling2D(),
                    tf.keras.layers.Dropout(0.2),
                    tf.keras.layers.BatchNormalization(),
                    tf.keras.layers.Conv2D(256,3, padding='same', activation='relu'),
                    tf.keras.layers.Conv2D(256,3, padding='same', activation='relu'),
                    tf.keras.layers.MaxPooling2D(),
                    tf.keras.layers.Dropout(0.2),
                    tf.keras.layers.BatchNormalization(),
                    # полносвязные слои
                    tf.keras.layers.Flatten(),
                    tf.keras.layers.Dense(128, activation='relu'),
                    tf.keras.layers.Dropout(0.2),
                    tf.keras.layers.BatchNormalization(),
                    tf.keras.layers.Dense(128, activation='relu'),
                    tf.keras.layers.Dropout(0.2),
                    tf.keras.layers.BatchNormalization(),
                    #выходной слой равный числу классов классификации изображений
                    tf.keras.layers.Dense(num_classes)])
model.compile(optimizer='Adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])
model.summary()

Офлайн

#2 Авг. 4, 2024 23:17:26

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1348
Репутация: +  118  -
Профиль   Отправить e-mail  

Классификация изображений

Demon-rub
Имеется датасет (фото объектов) из 41 класса и 31 подкласса (не каждый класс содержит подклассы)
скинь датасет, если большой,то можно урезанный. И что нужно определить

Отредактировано xam1816 (Авг. 4, 2024 23:17:55)

Офлайн

#3 Авг. 5, 2024 20:25:58

Demon-rub
Зарегистрирован: 2024-08-04
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Классификация изображений

Извиняюсь) а как тут скинуть сильно подрезанный дата сет? Подклассы имеются только в классе YADOVITIE. Нужно что бы нейросеть определяла не только класс гриба на фото, но и подкласс (если они имеются в данном классе). Заранее благодарен!)

Офлайн

#4 Авг. 5, 2024 21:33:35

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1348
Репутация: +  118  -
Профиль   Отправить e-mail  

Классификация изображений

Demon-rub
а как тут скинуть сильно подрезанный дата сет?
запакуй в архив и куда-нибудь типа яндекс диск закинь, сюда ссылку

Офлайн

#5 Авг. 5, 2024 21:42:35

Demon-rub
Зарегистрирован: 2024-08-04
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Офлайн

#6 Авг. 8, 2024 20:09:16

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1348
Репутация: +  118  -
Профиль   Отправить e-mail  

Классификация изображений

Demon-rub
Подскажите как сделать, что бы модель распознавала изображения не только по классам, но и подклассам?

Есть класс ядовитые, и в них в названии есть метка YAD, если их переместить в одну папку, то модель выдаст номер класса, а там уже из названия класса по метке будет понятно, ядовитый или нет

Офлайн

#7 Авг. 9, 2024 16:28:26

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1348
Репутация: +  118  -
Профиль   Отправить e-mail  

Классификация изображений

Demon-rub
model = Sequential([Rescaling(1./255, input_shapeimg_heigth, img_width, 3)),
#аугментация
RandomFlip(“horizontal”),
RandomRotation(0.2),
RandomZoom(0.2),
RandomContrast(0.2),
#слои сверточные
tf.keras.layers.Conv2D(64,3, padding='same', activation='relu'),
tf.keras.layers.Conv2D(64,3, padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(128,3, padding='same', activation='relu'),
tf.keras.layers.Conv2D(128,3, padding='same', activation='relu'),
tf.keras.layers.Conv2D(128,3, padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(128,3, padding='same', activation='relu'),
tf.keras.layers.Conv2D(128,3, padding='same', activation='relu'),
tf.keras.layers.Conv2D(128,3, padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Conv2D(256,3, padding='same', activation='relu'),
tf.keras.layers.Conv2D(256,3, padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.BatchNormalization(),
# полносвязные слои
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.BatchNormalization(),
#выходной слой равный числу классов классификации изображений
tf.keras.layers.Dense(num_classes)])

какая точность у этой модели на новых данных?, т.е если ей дать изображение гриба которого нет в dataset.

Офлайн

#8 Авг. 9, 2024 18:04:32

Demon-rub
Зарегистрирован: 2024-08-04
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Классификация изображений

Я так и сделал, в последней версии дата сета все виды и подвиды в каталоге “Классы”. Последний дата сет тоже буду дорабатывать и по классам и по набору данных. Точность - разная (на фото пример распознавания гриба которого нету в дата сете, но честно это лучший результат. Прекратил дальнейшее обучение -работаю над дата сетом))

Прикреплённый файлы:
attachment Снимок экрана (76).png (469,3 KБ)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version