Обзор

Знаете ли вы, что в мире существуют сотни пород собак. Есть сайт dogtime, на котором представлены 266 отдельных пород собак. Теперь представьте, что вы отправились в путешествие по прекрасному месту и нашли очень милую собаку, которую хотели узнать, породу собаки. В этом случае я могу помочь вам создать классификатор изображений, который сможет определять породу собак.

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

Загрузите наборы данных отсюда:

Загрузите набор данных о собаках

Скачать человеческий набор данных

Контур

Импорт библиотек

Импорт наборов данных

Создайте CNN для классификации изображений (с нуля)

Создайте CNN для классификации изображений (с использованием трансферного обучения)

Оцените свою модель

Наборы обучающих данных

Наличие хороших обучающих наборов данных — самая большая награда для начала классификации изображений. Я собираюсь использовать наборы данных, предоставленные udacity, в качестве программ для получения степени Data Scientist Nano. Не стесняйтесь использовать свои собственные наборы данных для лучшего обучения. В этом наборе данных я собираюсь классифицировать породы собак.

Я установил для себя целевую точность 80% при обучении менее 2 минут на графическом процессоре, т.е. модель распознает породу собаки 8 раз из 10 10 минут.

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

Импорт библиотек и наборов данных

Я также собираюсь импортировать наборы данных о людях, чтобы мы могли проверить, насколько хороша наша модель.

Я собираюсь начать с простейшей модели, чтобы обнаруживать только человека и собаку. Одна из самых простых моделей — использовать Open-CV для обнаружения лиц людей и собак. После обнаружения лиц я собираюсь нарисовать прямоугольные границы на лицах.

Как вы можете видеть на картинке выше, я импортировал необходимые библиотеки. Если вы посмотрите внимательно, я также импортирую дополнительный файл, который представляет собой XML-файл haarcascades. Вы можете легко найти этот файл в Интернете.

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

Теперь пришло время оценить нашу модель.

Как видно из изображений выше, я достиг 100% точности. Но проблема с Open CV заключается в том, что он может обнаруживать только изображения, обращенные вперед. Запуск Open CV на 100 изображениях занимает около 2 минут.

Теперь пришло время попробовать современную модель глубокого обучения. Я собираюсь построить конституционную нейронную сеть с нуля.

Предварительная обработка данных

Мы масштабируем изображения, деля каждый пиксель каждого изображения на 255.

Определение нашей модели и импорт необходимых библиотек.

Теперь мы собираемся проверить отсутствие обучаемых параметров с помощью model.summary().

компиляция модели

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

Начало обучения модели

После обучения модели точность данных проверки составляет около 9%. Что слишком низко ниже нашей целевой точности.

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

Реализация архитектуры модели с собственными скрытыми слоями.

Скомпилируйте модель

Xception_model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])

примеряем нашу модель и начинаем обучение.

Как мы видим на изображении выше, наша модель обучается быстро, и это занимает около 1 секунды за эпоху. Я тренируюсь с 20 эпохами, что занимает около 20 секунд. Теперь мы собираемся проверить нашу точность с данными проверки.

Наша модель работает исключительно хорошо менее чем за 20 секунд обучения, и мы также достигли целевой точности модели 81,9%.

Несколько интересных фактов о точности

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

Точность классификации

Точность классификации — это то, что мы обычно имеем в виду, когда используем термин «точность». Это отношение количества правильных прогнозов к общему количеству входных выборок.

Это работает хорошо, только если есть равное количество образцов, принадлежащих каждому классу.

Отражение

В начале моей целью было создать CNN с точностью тестирования 80% при двухминутном обучении на графическом процессоре. Наша окончательная модель показала точность тестирования 81,9% при обучении в течение 20 секунд.

Все еще есть очень высокие шансы повысить точность модели с помощью следующих методов:

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

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