Переносное обучение использует знания, полученные при решении одной проблемы, и применяет их к другой, но связанной проблеме.

Например, знания, полученные при обучении распознаванию автомобилей, можно в какой-то степени использовать для распознавания грузовиков.

Предварительная подготовка

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

Системы и модели глубокого обучения представляют собой многоуровневые архитектуры, которые изучают разные функции на разных уровнях (иерархические представления многоуровневых функций). Затем эти слои, наконец, подключаются к последнему слою (обычно полностью подключенному слою в случае обучения с учителем), чтобы получить окончательный результат. Эта многоуровневая архитектура позволяет нам использовать предварительно обученную сеть (такую ​​как Inception V3 или VGG) без ее окончательного слоя в качестве средства извлечения фиксированных признаков для других задач.

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

Тонкая настройка

Мы можем предоставить новый набор данных для точной настройки предварительно обученной CNN. Учтите, что новый набор данных почти аналогичен исходному набору данных, который использовался для предварительного обучения. Поскольку новый набор данных подобен, для извлечения признаков из нового набора данных можно использовать одни и те же веса.

  1. Если новый набор данных очень мал, лучше обучить только последние слои сети, чтобы избежать переобучения, сохраняя фиксированными все остальные слои. Чтобы удалить последние слои предварительно обученной сети. Добавьте новые слои.Повторно обучите только новые слои.
  2. Если новый набор данных очень велик, переобучите всю сеть с начальными весами из предварительно обученной модели.

Проект:

Ссылка на Github: https://github.com/rajansh87/Face-Recognition-using-Transfer-Learning.git

Требования:

  1. Блокнот Anaconda Jupyter
  2. Python3
  3. Установите такие модули, как TensorFlow, Keras, NumPy, OpenCV.
  4. Система с подключенной веб-камерой. Примечание: при использовании внешней веб-камеры вам необходимо изменить код для создания данных. (cv2.Видеозахват(1))

Начальные шаги:

  1. Создайте рабочее пространство для проекта.
  2. Создайте каталог с именем «Набор данных», внутри которого создайте 2 подкаталога: «поезд» и «тест». Внутри обоих этих каталогов создайте подкаталог с именем человека, чье лицо должно быть распознано, в нем будут храниться изображения конкретного человека. (Примечание: для распознавания лиц нескольких людей требуется несколько таких подкаталогов)
  3. Загрузите и сохраните модель Haarcascade для фронтального распознавания лиц в своем рабочем пространстве. (Примечание: можно загрузить из моего репозитория Github)

Шаг 1. Создание набора данных:

а. Замените путь, указанный в переменной «file_name_path», на свой путь, где будут храниться фотографии человека.

Шаг 2. Создание модели:

а. Загрузка предварительно обученной модели VGG16 с рассчитанными весами и смещениями.

б. Архитектура загруженной модели.

здесь False означает, что слой заморожен и его нельзя обучить, а True означает, что он не заморожен и его можно обучить снова.

в. Заморозьте все слои, кроме последних 4 (то есть верхних 4):

д. Создайте функцию для возврата заголовка полносвязных сетевых слоев.

е. добавьте голову полностью подключенного слоя обратно в модель VGG.

ф. Окончательная структура нашей новой модели.

Шаг 3. Загрузка созданного нами набора данных:

Шаг 4. Модель обучения:

Шаг 5. Тестирование модели.

Итак, эта модель VGG16 для распознавания лиц с использованием Transfer Learning завершена, и теперь эта модель может распознавать человека по заданному изображению.