Проект Udacity DSND по классификации пород собак с использованием передачи обучения с CNN.

В этом проекте мы используем узкие места VGG-16 и Inception-V3 для обучения классификатора пород собак. Мы обучаем CNN с нуля и сравниваем результаты двух подходов. Наконец, мы видим, как классификатор собак работает с изображениями людей.

ОБУЧЕНИЕ МОДЕЛИ CNN ПО ЦЕПИ

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

Точно так же вспомните, что лабрадоры бывают желтого, шоколадного и черного цветов. Вашему основанному на видении алгоритму придется преодолеть эту высокую внутриклассовую вариацию, чтобы определить, как отнести все эти разные оттенки к одной и той же породе.

РЕЗЮМЕ МОДЕЛИ

Я использовал максимальный пул, чтобы уменьшить размерность. Запуск CNN без объединяющих слоев замедляет работу и снижает точность. Объединение в пул ускоряет работу CNN, а также снижает вероятность чрезмерной подгонки. В этом случае объединение в пул безопасно, поскольку вполне вероятно, что соседние пиксели похожи, и понижающая дискретизация не снизит способность классификаторов обнаруживать изображение.

Я увеличил выбор фильтров с 8 до 16 до 32 до 64, что является стандартной практикой в ​​CNN.

Мы обучили модель CNN, используя архитектуру, показанную на рисунке.

Всего необходимо классифицировать 133 породы собак.

Мы использовали оптимизатор «rmsprop» и «категориальную_кросцентропию» в качестве функции потерь.

Мы использовали значение эпохи 5 для обучения этой модели.

Модель не очень хорошо работает. Его точность составляет около 2%. Это лучше, чем случайное, но их еще можно улучшить. Вот где начинается трансферное обучение.

VGG-16 и Inception-V3

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

Более совершенный подход заключался бы в использовании сети, предварительно обученной на большом наборе данных. В такой сети уже были бы изучены функции, которые полезны для большинства проблем компьютерного зрения, и использование таких функций позволило бы нам достичь большей точности, чем любой метод, который полагался бы только на доступные данные. Мы будем использовать архитектуру VGG-16 и архитектуру Inception-V3.

Мы использовали узкие места обеих этих архитектур и добавили к ним наши собственные слои в попытке повысить точность.

Архитектура модели VGG-16

Модель использует предварительно обученную модель VGG-16 в качестве экстрактора фиксированных признаков, где последний вывод свертки VGG-16 подается в качестве входных данных для нашей модели. Мы добавляем только глобальный средний уровень объединения и полностью связанный слой, который оснащен soft max.

Архитектура VGG-16 повышает точность с 2% до 41%. Мы уже видим преимущества трансферного обучения на этом примере.

Архитектура модели Inception-V3

Мы используем архитектуру, аналогичную VGG-16, и добавляем в эту модель дополнительный выпадающий слой. Выпадающий слой помогает нам повысить точность и ускорить обучение.

Эта архитектура выполняет указанные выше архитектуры с точностью тестирования 84%. Давайте посмотрим на нескольких примерах, как выглядят наши прогнозы.

ЗАКЛЮЧЕНИЕ

Мы смогли повысить точность нашей модели CNN с 4% до 84% с помощью трансферного обучения.

Вот несколько примеров вывода классификатора:

Мы видим, что классификатор неплохо справляется с классификацией изображений. В качестве забавного упражнения вы можете передать этот классификатор изображениям людей и проверить, на какую породу собак похож человек.

Мы можем продолжить точную настройку модели, изменив гиперпараметры и увеличив набор обучающих данных для дальнейшего повышения точности. Точность 80% слишком мала для использования в реальных приложениях, поэтому мы должны работать над ее дальнейшим улучшением.

Вы можете найти реализацию этого обсуждения здесь.