Этот пост является частью проекта Udacity Data Science Nanodegree. Он познакомит вас со сверточной нейронной сетью (CNN) с помощью приложения-классификатора пород собак.

Это собака?

Пример приложения показан на рисунке 1. В качестве входных данных оно использует изображение и предсказывает породу собаки. Подожди... Мы что-то забыли? Что, если входное изображение не собака?

Обнаружить человека

Фух. Нам повезло, что существует реализация OpenCV каскадных классификаторов на основе признаков Хаара. Это помогает нам отличать человеческие лица от собачьих. После этого мы можем последовательно создать еще один классификатор, чтобы различать собак и что-то еще.

Обнаружить собаку

Теперь мы собираемся применить ResNet-50, чтобы помочь нам предсказать, является ли данное изображение собакой или нет. Благодаря ResNet-50, который содержит предварительно обученные специальные ярлыки для собак. Если прогноз дает результат от 151 до 268 включительно, это ошибка.

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

Создайте классификатор пород собак с нуля

Эта часть создаст классификатор CNN с нуля, чтобы сравнить результаты с CNN со схемой трансферного обучения. Архитектура CNN показана на рисунке 3.

К сожалению, после обучения модели прогноз может достичь точности 4% на тестовом наборе. Это непростая задача. :(

Найдите руку помощи с помощью трансферного обучения

Как было показано ранее, построить CNN с нуля и получить хороший результат непросто. Однако есть метод, который может улучшить нашу модель, включив предварительно обученную информацию в наш классификатор. Это называется трансферным обучением. В Keras доступны различные модели трансферного обучения. В этом посте будет учитываться только ResNet-50. После включения ResNet-50 в модель прогнозирования точность теста увеличивается до 80% на тестовом наборе.

Как трансферное обучение помогает нам?

Это большой вопрос. Почему наша модель прогнозирования улучшается только за счет включения этой маленькой части? Из-за того, что CNN обычно требует тысячи или миллионы обучающих данных для получения хорошего прогноза. Модель трансферного обучения сделала это за вас и обернула их в так называемые «функции узкого места». Присоединение этих функций к вашей модели прогнозирования означает, что ваша модель была обучена на миллионах изображений еще до вашей команды fit.

Протестируйте с другими изображениями

Следующие изображения покажут, насколько может работать созданная нами модель.

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

Заключительные слова

Udacity предоставляет нам хороший управляемый проект, чтобы понять, как построить CNN с трансферным обучением и без него. Показано, что для получения точного прогноза по модели машинного обучения с глубоким обучением она должна потреблять огромный объем базы данных для обучения. Эта болевая точка устраняется методом трансферного обучения. Он применяет встроенные функции узких мест в Keras, чтобы наша модель что-то знала перед обучением. Для тех, кто хотел бы следовать пошаговому руководству, пожалуйста, не стесняйтесь исследовать мой репозиторий github здесь.