Yozh2 / ClocksOrCrocs

The Deep NN classifier for clocks and crocodiles image dataset.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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 от Андрея Созыкина. При написании кода автор иногда вдохновлялся примерами из материалов курса.

About

The Deep NN classifier for clocks and crocodiles image dataset.


Languages

Language:Jupyter Notebook 100.0%