У меня есть две фотографии печатного объекта, первая имеет площадь печати 2,5x2,5 см ^ 2, а вторая - тот же объект, но площадь печати составляет 5,0x5,0 см ^ 2.После отделения объекта от фона и выравнивания гистограммы обеих картинок я пытаюсь использовать небольшие патчи (64x64) в подходе глубокого обучения (CNN) для понимания их паттернов и их классификации.Я пытаюсь использовать 64x64 патчи из напечатанных объектов размером 2,5x2,5 см ^ 2, чтобы обучить классификатор глубокого обучения и протестировать их с патчами из объектов 5,0x5,0 см ^ 2.Цифровые изображения обоих объектов имеют примерно одинаковое разрешение, как это определено из экстрактора объектов.Вот примеры исправлений 64x64, используемых для обучения и тестирования двоичного классификатора CNN.
64x64 исправления 2,5x2,5 см ^ 2 объекта
64x64 патч объекта 5x5cm ^ 2
Классы, которые я хочу предсказать, следующие:
Отрицательный класс (печатается впервые)
Позитивный класс (копируется и перепечатывается)
То, что я обнаружил:
- Патчи из 2,5x2,5 см ^ 2 объекта легко классифицировать, если CNN обучают патчами из объектов того же размера (площади)
- Если CNN обучен с исправлениями 64x64 из объектов размером 2,5x2,5 см ^ 2 и протестирован с исправлениями размером 64x64 из объектов размером 5x5 см ^ 2, прогнозы рассчитаны только для одного класса (точность 50%).
- Некоторые многомасштабныеи в этом сценарии отлично работают дескрипторы с множественным разрешением, такие как использование пакета визуальных слов
- . Другие базовые CNN также не работаютэтот сценарий, такой как Mobilenet, Densenet и Resnet
- Я попытался включить масштабирование в мою процедуру увеличения данных (как предложено одним ответом).Это также не сработало: - (
Это модель keras, которую я до сих пор пробовал
model = Sequential()
# GROUP1
model.add(Conv2D(filters=32, kernel_size=3, strides=1, padding='same',
input_shape=input_shape))
model.add(LeakyReLU(alpha=0.2))
# GROUP2
model.add(Conv2D(filters=32, kernel_size=3, strides=2, padding='same'))
model.add(LeakyReLU(alpha=0.2))
model.add(BatchNormalization(axis=-1, momentum=0.9, epsilon=0.001))
# GROUP3
model.add(Conv2D(filters=64, kernel_size=3, strides=1, padding='same'))
model.add(LeakyReLU(alpha=0.2))
model.add(BatchNormalization(axis=-1, momentum=0.9, epsilon=0.001))
# GROUP4
model.add(Conv2D(filters=64, kernel_size=3, strides=2, padding='same'))
model.add(LeakyReLU(alpha=0.2))
model.add(BatchNormalization(axis=-1, momentum=0.9, epsilon=0.001))
# GROUP5
model.add(Conv2D(filters=96, kernel_size=3, strides=1, padding='same'))
model.add(LeakyReLU(alpha=0.2))
model.add(BatchNormalization(axis=-1, momentum=0.9, epsilon=0.001))
# GROUP6
model.add(Conv2D(filters=96, kernel_size=3, strides=2, padding='same'))
model.add(LeakyReLU(alpha=0.2))
model.add(BatchNormalization(axis=-1, momentum=0.9, epsilon=0.001))
model.add(Flatten())
model.add(Dense(1024))
model.add(LeakyReLU(alpha=0.2))
model.add(Dense(2, activation='softmax'))
return model
, и вот увеличение данных, которое я использую
datagen = ImageDataGenerator(
width_shift_range=0.2,
height_shift_range=0.2,
horizontal_flip=True,
vertical_flip=True,
zoom_range=0.2,
fill_mode='nearest')
datagen.fit(x_train)
datagen.fit(x_validation)
# Fit the model on the batches generated by datagen.flow().
model.fit_generator(datagen.flow(x_train, y_train, batch_size=batch_size),
steps_per_epoch=x_train.shape[0] // batch_size,
validation_data=datagen.flow(x_validation, y_validation, batch_size=batch_size),
epochs=nb_epoch, verbose=1, max_q_size=100,
validation_steps=x_validation.shape[0]//batch_size,
callbacks=[lr_reducer, early_stopper, csv_logger, model_checkpoint])
Итак, есть ли какое-либо решение для повышения точности в этом очень сложном сценарии для CNN? Я имею в виду, что CNN изучает особенности из данных, и, как вы можете видеть, данные обучения и тестирования из одного и того же класса различны.Возможно ли мне выполнить какое-либо увеличение данных или операцию CNN (на моем CNN нет пропусков и пулов, как вы можете видеть выше), которые могли бы минимизировать или смоделировать данные тестирования в данных обучения?