Skip to content

The Deep NN classifier for clocks and crocodiles image dataset.

Notifications You must be signed in to change notification settings

Yozh2/ClocksOrCrocs

Repository files navigation

ClocksOrCrocs

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

Read this in English

Задача

Построить классификатор, разделяющий изображения из полученного датасета: крокодил или часы. Указать полученную точность распознавания.

Решение

Для классификации изображений данный датасет был разбит на обучающую, проверочную и тестовую выборки в соотношении 0.7 : 0.15 : 0.15 соответственно. Cм. dataset_preparation.ipynb

На основе предобученной нейронной сети VGG16 построен классификатор с использованием библиотеки Keras c бэк-эндом Tensorflow.

Произведено обучение классификатора, полученная точность на тестовых данных: 87.5%. Для увеличения точности классификации произведен fine-tuning последнего слоя предобученной нейросети VGG16. Достигнутая точность классификации: 93.75% на тестовой выборке. См. NN_Train.ipynb с подробным пошаговым описанием описанием.

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

Выводы и планы на будущее

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

  • Сделать data augmentation (дополнение данных), сгенерировав больше изображений путём сдвига/поворота/растяжения имеющихся.
  • Сделать более детальный fine-tuning
  • Обучить данный классификатор на более сложной предобученной нейросети (InceptionV3)
  • Для ускорения обучения планируется сделать анализ признаков, когда предобученная нейросеть получает признаки, а потом классификатор обучается на признаках отдельно, что существенно ускоряет процесс.
  • Если мы не ограничены только данным датасетом, было бы здорово обучить классификатор по большему датасету. Изображения с часами и крокодилами можно взять из ImageNet'a или выкачать по поисковым запросам с помощью python-скрипта. Это позволит сделать классификатор более точным, поскольку выборки для обучения и валидации будут больше.

Структура репозитория

  • clocks_crocodiles = Исходный датасет из задания.
  • data - Обработанный датасет, рассортированный по папкам для обучения, валидации, тестирования.
  • redist - Архивы с датасетами, удобные для скачивания.
  • trained_net - Директория с сохранённой обученной моделью для быстрой загрузки (не нужно обучать заново).

Установка и использование

Для использования необходимо установить все пакеты-зависимости для Python. Используйте pip для быстрой и простой установки всего, что необходимо.

pip3 install -r requirements.txt

Чтобы обучить нейронную сеть и получить данные о её точности, откройте NN_Train.ipynb.

Чтобы проверить обученную нейросеть на любых изображениях, откройте NN_Test.ipynb

Google Colaboratory

Данная нейросеть обучалась и тестировалась в аналоге Jupyter Notebook, но в облаке Google с GPU-ускорением Google Colaboratory. Рекомендуется обучать нейросеть там, так как это быстрее по времени. В ноутбуках (*.ipynb) присутствуют ячейки кода для нормальной работы с Google Colaboratory. Если Вы будете работать на локальном ПК, не исполняйте эти ячейки.

Благодарности

Обучая нейронную сеть распознавать изображения, автор обучился и сам, пройдя курс по построению глубоких нейронных сетей на языке Python от Андрея Созыкина. При написании кода автор иногда вдохновлялся примерами из материалов курса.