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

Что такое CNN и как это вообще работает?

Сверточная нейронная сеть (CNN) — это тип нейронной сети, который большую часть времени используется для работы с изображениями и, как следствие, с пикселями.
Чтобы развлечься, мы будем использовать библиотеку глубокого обучения TensorFlow, создано Google.
Но прежде чем пытаться сделать какие-то прогнозы, мы должны выполнить предварительную обработку изображения в пару шагов с использованием математики и алгоритмов, а затем, очевидно, обучить нашу модель реальным фотографиям.

Библиотека TensorFlow и немного о

TensorFlow предоставляет нам отличные инструменты для работы с нейронными сетями в целом. В начале может быть немного сложно настроить его, но потом вам обязательно понравится. Но главный вопрос в том, до конца ли вы понимаете, что происходит внутри…?

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

Наш план атаки в 10 шагов:

  • Преобразование изображения
  • Инициализация CNN
  • Добавить первый сверточный слой
  • Максимальное объединение
  • Добавьте второй сверточный слой
  • Уплощение
  • Сделать полное соединение
  • Добавить выходной слой
  • Модель обучения
  • Делайте одиночные прогнозы

Теперь давайте посмотрим, как все работает в теории, а после, разумеется, я поделюсь с вами своим кодом

1. Сверточная операция

Основная цель этого шага — максимально уменьшить размер изображения и не потерять важные вещи. Мы используем несколько различных фильтров — детекторов признаков, чтобы получить наилучший результат. Например, можно применить фильтры «Резкость», «Размытие», «Улучшение краев», «Обнаружение краев» и «Тиснение».

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

2. Максимальное объединение

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

3. Сглаживание

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

4. Полное подключение

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

Наконец, теперь мы рассмотрим код

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

2. Предварительная обработка изображения

3. Инициализируйте CNN и добавьте сверточный слой

4. Примените функцию максимального объединения и добавьте второй сверточный слой.

5. Примените сглаживание, сделайте полное соединение CNN и добавьте выходной слой.

Использование функций выпрямителя и сигмоиды (выходной слой) для параметра активации, 128 нейронов (единиц) для полносвязного слоя и 1 нейрон для выходного слоя.

6. Составление CNN, обучение на изображениях поездов и оценка точности

Использование бинарной классификации в виде функции потерь и 25 кругов обучения — эпох. Точность почти 92%!

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

И это работает очень хорошо!

Краткое содержание

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

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

Здесь вы можете найти мой код.