Распознавание и классификация часов и крокодилов на изображениях с использованием глубоких нейронных сетей.
Построить классификатор, разделяющий изображения из полученного датасета: крокодил или часы. Указать полученную точность распознавания.
Для классификации изображений данный датасет был разбит на обучающую, проверочную и тестовую выборки в соотношении 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
Данная нейросеть обучалась и тестировалась в аналоге Jupyter Notebook, но в облаке Google с GPU-ускорением Google Colaboratory
. Рекомендуется обучать нейросеть там, так как это быстрее по времени. В ноутбуках (*.ipynb
) присутствуют ячейки кода для нормальной работы с Google Colaboratory. Если Вы будете работать на локальном ПК, не исполняйте эти ячейки.
Обучая нейронную сеть распознавать изображения, автор обучился и сам, пройдя курс по построению глубоких нейронных сетей на языке Python от Андрея Созыкина. При написании кода автор иногда вдохновлялся примерами из материалов курса.