Анализируем картинки светильников и ламп с Tensorflow

Появилась задача — анализировать картинки и проставлять им класс товара и соответствующий тип. Для начала, определим что у нас есть 2 типа товаров: светильники и лампы. Они и будут нашими лейблами для класификации.


Фотографии мы берем из моего любимого Pimcore, при этом используем не оригинальные размеры фотографий, а уменьшенный до 200х200 пикселей. Автоматом это делает Pimcore при помощи встроеного функционала Image Tumbnails. Для первого обучения выбираем рандомно по 25 фото товаров каждого типа.  Примеры фото:


Выборка ламп

Менее 20 фото для каждого из лейблов могут вызвать ошибку. Об этом предупреждает Tensorflow:

WARNING:tensorflow:WARNING: Folder has less than 20 images, which may cause issues.

Осознано не делили светильники на типы, так как для этого будем обучать другой классификатор. Обучение заняло около 20 минут, а final test accuracy выдал результат в 66.7%. Довольно неплохо для маленького объема фото и имеющегося расширения.

На тестах все было +- точно, особенно для светильников. С лампами было сложнее, и в на трех фото модель выдавала точность в 33,3%. По факту, 1 из 3 фото скрипт относил в правильный класс. Вот эти фото:

Первая и третья лампы были классифицированы как светильники 🙂 Переучиваем модель. Для этого мы:

  • увеличиваем количество фото для каждого класса. Вместо 25 берем по 500 фото;
  • увеличиваем размер фото в 2,5 раза, до 500х500 пикселей.

Дополнительно, конвертируем формат изображений в JPEG. Это не влияет на точность, просто чтобы все данные были в одном формате.

После переобучения модели на новых даных, точность повысилась (accuracy = 100.0%), но третье фото алгоритм по прежнему считает светильником.

В очередной раз расширим выборку для обучения, добавив самых разнообразных по виду ламп:

Сохраняем результат в CSV файл, в который записываем: имя файла, тип товара, точность.

Результаты

Для итоговой оценки результатов, возьмем по 6 фото каждого типа товаров:


Результат:


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

По нынешним результатам, 3 фото имело вероятность в 0,634, а значит модель стоит дообучить на схожих изображениях. По фото №6 и 10 вероятность чуть больше 80%, а значит модель не совсем однозначно классифицирует подобные изображения.

Перспективы

Подобный подход можно использовать для классификации изображений по визуальным признакам. Если есть неоднопонятные критерии для классификации, нужно комбинировать анализ изображения с текстовым массивом данных (цоколь, мощность…), который будет уточнять результат. 

Когда у вас 10000 товаров, и нужно определить N параметров, среди которых могут быть: тип товара, цвет товара, форму лампы для ламп или тип светильника (люстра, бра, подвесной светильник ….) машинное обучение и анализ изображений может существенно упростить жизнь.