Как передать обучение модели resnet50 с собственным набором данных? - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь построить систему проверки лица с использованием моделей keras и resnet50 с весами vggface. Я пытаюсь достичь этого с помощью следующих шагов:

  • по двум изображениям я сначала узнаю лицо, используя mtcnn в качестве вложений
  • , затем вычисляю косинусное расстояние между двумя векторные вложения. расстояние начинается от 0 до 1 ..... (Здесь следует отметить, что чем меньше расстояние у тех же двух граней)

Используя предварительно обученную модель resnet50, я получаю довольно хороший результат , Но так как модель была обучена в основном на европейских данных, и я хочу, чтобы проверка лица на индийском субконтиненте я не мог положиться на это. Я хочу обучить их на своем собственном наборе данных. У меня есть 10000 классов с каждым классом, содержащим 2 изображения. С помощью увеличения изображения я могу создать 10-15 изображений в классе из этих двух изображений.

Вот пример кода, который я использую для обучения

base_model = VGGFace(model='resnet50',include_top=False,input_shape=(224, 224, 3))
base_model.layers.pop()
base_model.summary()
for layer in base_model.layers:
    layer.trainable = False


y=base_model.input
x=base_model.output
x=GlobalAveragePooling2D()(x)
x=Dense(1024,activation='relu')(x) #we add dense layers so that the model can learn more complex functions and classify for better results.
x=Dense(1024,activation='relu')(x) #dense layer 2
x=Dense(512,activation='relu')(x) #dense layer 3
preds=Dense(8322,activation='softmax')(x) #final layer with softmax activation

model=Model(inputs=base_model.input,outputs=preds)


model.compile(optimizer='Adam',loss='categorical_crossentropy',metrics=['accuracy'])

model.summary()
train_datagen=ImageDataGenerator(preprocessing_function=preprocess_input) #included in our dependencies

train_generator=train_datagen.flow_from_directory('/Users/imac/Desktop/Fayed/Facematching/testenv/facenet/Dataset/train', # this is where you specify the path to the main data folder
                                                 target_size=(224,224),
                                                 color_mode='rgb',
                                                 batch_size=32,
                                                 class_mode='categorical',
                                                 shuffle=True)
step_size_train=train_generator.n/train_generator.batch_size


model.fit_generator(generator=train_generator,
                   steps_per_epoch=step_size_train,
                   epochs=10)
model.save('directory')

Что касается кода кода я понимаю, что я отключаю последний слой, затем добавляю 4 слоя, обучаю их и сохраняю их в директории.

Затем загружаю модель, используя

model=load_model('directory of my saved model')
model.summary()
yhat = model.predict(samples)

Я предсказываю вложение двух изображение, а затем рассчитать расстояние косинуса. Но проблема в том, что предсказание ухудшается с моей обученной моделью. Для двух изображений одного человека предварительно обученная модель дает расстояние 0,3, тогда как моя обученная модель показывает расстояние 1,0. Хотя во время тренировок функция потерь уменьшается с каждой эпохой, а точность увеличивается, но это не отражается на моих результатах прогнозирования. Я хочу увеличить результат прогнозирования предварительно обученной модели.

Как мне добиться этого с помощью моих собственных данных?

Примечание: я относительно новичок в машинном обучении и не знаю много о слоях модели

1 Ответ

0 голосов
/ 18 февраля 2020

Я бы предложил go с триплетом или сиамским с таким количеством классов. Используйте MTCNN для извлечения граней, а затем используйте архитектуру fa cenet для генерации векторов внедрения 512 измерений, а затем визуализируйте их, используя график TSNE. Каждому лицу будет назначен небольшой кластер для встраивания. Go по этой ссылке для Keras для генерации вложений лиц: Link.

Затем попробуйте тройные и полужесткие потери вашего набора данных, чтобы объединить их в 10000 классов. Это может помочь. Go через этот подробный блог о потере триплетов: Тройняшки . Коды для go через некоторые хранилища: Код .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...