Доступны коды Python: https://github.com/JNYH/Project_Kojak

SPCA ежегодно принимает от 7000 до 9000 животных. Половина из них - брошенные домашние животные, такие как кошки, собаки, кролики и морские свинки. Идентификация питомца требует времени и, следовательно, продлевает время ожидания его включения в список для усыновления.

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

Цель моего проекта - разработать инструмент для этих двух организаций: определять породы животных для SPCA; и определить виды птиц для национальных парков.

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

Простая нейронная сеть

Сначала я начал с классификации изображений с помощью простой нейронной сети.
Набор данных взят из pyimagesearch, в котором есть 3 класса: кошка, собака и панда. Всего 3000 изображений, т. Е. По 1000 для каждого класса.

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

Достигнутая точность составила 61%, и я был готов протестировать модель с новыми изображениями.

Я вводил эти изображения в модель, и простая модель нейронной сети смогла классифицировать их по наибольшей вероятности.

Например, модель была на 58% уверена, что это панда.
Но у нее есть ноги, так что есть небольшая вероятность, что это также может быть кошка или собака.

Я начал любить приключения, но простая модель нейронной сети не смогла произвести правильную классификацию. Поэтому я обучил модель сверточной нейронной сети (CNN), которая смогла правильно их классифицировать.

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

Сверточная нейронная сеть

Что же тогда такое модель CNN?

CNN расшифровывается как сверточная нейронная сеть, где каждое изображение проходит серию сверток и максимального объединения для извлечения признаков. Я исследовал с помощью набора данных CIFAR-10, который содержит 60 000 изображений, разделенных на 10 классов.

С таким количеством изображений на обучение модели ушло почти 4 часа, а точность составила 75%.

Итак, я был готов протестировать модель, используя невидимые изображения из поиска Google. Модель CNN могла делать правильные прогнозы большую часть времени, например, модель была совершенно уверена, что это самолет, а это корабль с вероятностью 72%.

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

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

Трансферное обучение

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

Давайте протестируем модель, загрузив эти изображения, которые я загрузил из поиска Google (так что я знаю ответы).

Это довольно похожие изображения, но модель смогла классифицировать их по породе. Обратите внимание, что собака Hush Puppies (Basset) слева имеет более отчетливые черты, модель также была более уверенной в своей классификации.

Как насчет того, чтобы идентифицировать этих кошек? Оксфорд уже обучил модель VGG16 на многих видах кошек, и у модели нет проблем с их классификацией.

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

Однако не все эти птицы водятся в Сингапуре.

Мой следующий шаг - поиск множества изображений обычных птиц и животных, найденных в Сингапуре, для обучения модели, чтобы добавить их в «базу знаний» модели. Это поможет улучшить инструмент классификации для этих двух организаций (SPCA и NParks).

Заключение

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

«Модель настолько умна, насколько вы ее тренируете»

Коды Python для вышеупомянутого анализа доступны на моем GitHub, не стесняйтесь ссылаться на них.



Видео-презентация:

Спасибо за чтение.
Надеюсь, вам понравились мои рассказы. Чтобы получить неограниченный доступ к качественному контенту на Medium, станьте участником Medium!