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

#python #scikit-learn #deep-learning #conv-neural-network #overfitting-underfitting

#питон #scikit-учись #глубокое обучение #conv-нейронная сеть #переоснащение-недостаточное оснащение

Вопрос:

 vgg19_net = VGG19(input_shape = (200,200,3), include_top = False, weights = 'imagenet')  model_vgg19 = Sequential() model_vgg19.add(vgg19_net)  model_vgg19.add(Conv2D(128, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_uniform')) model_vgg19.add(BatchNormalization())  model_vgg19.add(Conv2D(256, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_uniform')) model_vgg19.add(BatchNormalization())   model_vgg19.add(Conv2D(512, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_uniform')) model_vgg19.add(BatchNormalization()) model_vgg19.add(MaxPooling2D())  model_vgg19.add(Conv2D(256, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_uniform')) model_vgg19.add(BatchNormalization()) model_vgg19.add(MaxPooling2D())  model_vgg19.add(Conv2D(128, 3, activation = 'relu', padding = 'same', kernel_initializer = 'he_uniform')) model_vgg19.add(BatchNormalization())    model_vgg19.add(Flatten()) model_vgg19.add(Dense(128, activation = 'relu', kernel_initializer = 'he_uniform')) model_vgg19.add(Dense(1, activation = 'sigmoid'))  model_vgg19.compile(loss='binary_crossentropy',optimizer=Adam(lr=1e-5), metrics=['accuracy']) model_vgg19.summary()  

Выше приведен мой код на python, в котором я пытаюсь добавить слои в предварительно обученную модель VGG19. У меня есть набор данных реальных и поддельных лиц, и это вопрос классификации. Я нормализовал значения пикселей (от 0 до 1) для всех изображений и использую 80% в качестве обучающих данных и 20% в качестве данных проверки. В настоящее время я получаю точность проверки 95-96%, но в моем тестовом наборе я получаю точность только около 91-92%. Я новичок в DL и все еще учусь предварительно обрабатывать изображения лиц и создавать эффективные модели. Пожалуйста, дайте мне знать, если вы увидите какие-либо отклонения в моей реализации VGG19. Я также использовал увеличение изображения, но оно не оказалось полезным. Пожалуйста, дайте мне знать, как я могу улучшить этот вопрос, так как я новичок в этом. Кроме того, набор данных является конфиденциальным, поэтому я не могу поделиться им. Прости! Существуют ли какие-либо методы предварительной обработки, которые я могу использовать на своих входных изображениях, чтобы лучше обучить свою модель?

Ответ №1:

Я не вижу никаких проблем в вашем коде. Чтобы улучшить это:- вы можете добавить отсева для уменьшения переобучения, вы также можете попробовать использовать ResNet или EfficientNet версии (что лучше FakeFace обнаружения, чем сайт VGG); больше всего можно игрушку используются для отбора признаков; ваши LR-это довольно низкий, попробуйте увеличить его.. если вы хотите продвинутые техники, вы можете попробовать несколько выходов или использовать изображения сегментация(крайне маловероятно, чтобы помочь увеличить вашу точность, но несколько выходов может).

P.S. Недавно я работал над аналогичным набором данных и сумел получить точность 98% в тестовом наборе. ( Я Использовал EffNetB2 )

Комментарии:

1. какое было бы идеальное место для добавления отсева? Спасибо.

2. Идеальным местом для добавления отсева было бы после каждой нормализации пакета или каждого альтернативного(выбор за вами). Однако ценность отсева-это то, с чем вам придется поиграть