- Python 3;
- Tensorflow и всё необходимое для него.
Задачу классификации изображений лучше всего на данный момент решают свёрточные нейронные сети (convolutional neural network, CNN). Основная идея свёрточных нейронных сетей заключается в чередовании свёрточных слоев (convolution layers) и субдискретизирующих слоев (subsampling layers, слоёв подвыборки).
Работа свёрточной нейронной сети обычно интерпретируется как переход от конкретных особенностей изображения к более абстрактным деталям, и далее к ещё более абстрактным деталям вплоть до выделения понятий высокого уровня. При этом сеть самонастраивается и вырабатывает сама необходимую иерархию абстрактных признаков (последовательности карт признаков), фильтруя маловажные детали и выделяя существенное.
CNN (как и любая нейронная сеть) для обучения на более или менее большой выборке данных требует больших затрат мощности (CPU или GPU) и времени. Чтобы избежать этого, в данной работе была использована предобученная свёрточная нейронная сеть Inception от Google.
Процесс «дообучения» нейронной сети называется transfer learning. По факту, мы берём полностью готовую, обученную на огромной количестве изображений (например, на базе ImageNet) модель и переобучаем (с использованием уже наших изображений) последний её слой.
В данной работе использовались изображение кошек следующих пород: Abyssinian, Bengal, Birman, Bombay, British Shorthair, Egyptian Mau, Maine Coon, Persian, Ragdoll, Russian Blue, Siamese, Sphynx. Изображения были взяты отсюда.
Так как данная нейронная сеть способна работать только с изображениями в формате jpeg, то необходимо было удалить все изображения, которые им не являлись. Для нахождения и удаления таких файлов (например, .gif файлов, переименнованных в .jpeg) используется скрипт check_file_extension.py.
Для запуска процесса дообучения сети используется bash файл train.sh. В этом файле необходимо указать путь до файла retrain.py из examples/image_retraining репозитория библиотеки tensorflow, пути до изображений, служебных файлов и количество итераций обучения.
Для предсказания используется файл predict.py, которому необходимо в аргумент при запуске передать путь до изображения.