Компьютерное зрение для удобной работы в магазине.

Застряли за платным доступом? Нажмите здесь, чтобы прочитать всю историю с помощью моего Friend Link!

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

Применение компьютерного зрения в розничной торговле должно коренным образом изменить покупательский опыт покупателей и розничных продавцов. В этом блоге я буду создавать модель классификации многоклассовых объектов на основе компьютерного зрения для розничных продуктов. Этот проект был вдохновлен знаменитым магазином Amazon Go. Надеюсь, вам понравится эта статья и вы найдете в ней полезные сведения.

Amazon описывает Amazon Go как новый вид магазина, в котором не требуется оформление заказа. Это означает, что когда вы делаете покупки в Amazon Go, вам никогда не придется ждать в очереди. Магазин работает с приложением Amazon Go - вы заходите в Amazon Go, берете нужные продукты и, благодаря приложению, снова уходите. Он работает с использованием тех же технологий, что и в беспилотных автомобилях, таких как компьютерное зрение, объединение датчиков и глубокое обучение. Эта технология может определять, когда продукты принимаются или возвращаются на полки, и отслеживает их в вашей виртуальной тележке. Когда вы покидаете магазин со своими товарами, с вашего счета Amazon снимается плата, и вам отправляется квитанция.

Вот видео на случай, если вы захотите это проверить.

Применение компьютерного зрения в розничной торговле

  1. Настройка опыта с помощью распознавания лиц.
  2. Делать покупки более человечными и менее транзакционными.
  3. Управление запасами на основе компьютерного зрения.
  4. Стираем грань между магазином и онлайн.
  5. Магазин без трения.

Данные

Я использовал набор данных Freiburg Groceries для этого проекта. Он состоит из 5000 изображений 256x256 RGB 25 классов еды. Документ можно найти здесь, а набор данных - здесь.

Окружающая среда и инструменты

  1. Numpy
  2. Панды
  3. Scikit-изображение
  4. Матплотлиб
  5. Scikit-Learn
  6. Керас

Классификация изображений

Полный конвейер классификации изображений можно формализовать следующим образом:

  • Наш вход - это обучающий набор данных, состоящий из N изображений, каждое из которых помечено одним из 25 различных классов.
  • Затем мы используем этот обучающий набор для обучения классификатора, чтобы узнать, как выглядит каждый из классов.
  • В конце концов, мы оцениваем качество классификатора, прося его предсказать метки для нового набора изображений, которые он никогда раньше не видел. Затем мы сравним истинные метки этих изображений с предсказанными классификатором.

Где код?

Без лишних слов, давайте начнем с кода. Полный проект на github можно найти здесь.

Я начал с загрузки всех библиотек и зависимостей.

Затем я создал функцию для построения графика потерь и точности, которые мы получим после обучения модели.

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

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

Затем я преобразовал изображения в категориальный формат, прежде чем окончательно нормализовать изображения. Также я разделил набор данных на 2 части - обучающий набор с 80% данных и тестовый набор с 20%.

Поскольку размер набора данных был довольно маленьким, я использовал стратегии увеличения данных, такие как вращение, масштабирование и отражение. Это почти удвоило размер набора данных.

Давайте покажем несколько примеров из каждой категории.

Все идет нормально. А теперь самое интересное. Давайте создадим модель глубокого обучения.

Я использовал трансферное обучение с использованием предварительно натренированных весов VGG. Вдобавок к этому я использовал средний слой объединения, чтобы уменьшить отклонение изученных весов от предыдущих слоев. Также я использовал 30% отсева, чтобы уменьшить переобучение. Наконец, я использовал плотный слой с 25 нейронами для представления 25 классов продуктовых продуктов в нашем наборе данных. Я использовал softmax в качестве функции активации, поскольку это проблема классификации нескольких классов.

Давайте визуализируем модель.

Я продолжил определение некоторых обратных вызовов с помощью keras. Я использовал контрольную точку модели, чтобы сохранить веса, если точность проверки возрастет. Также я использовал критерий ранней остановки, если потеря валидации начинает выходить на плато. Два других обратных вызова предназначены для визуализации результатов в тензорной таблице и для сохранения журналов в файлах csv.

Затем я определил 2 оптимизатора. Первый - это стохастический градиентный спуск со скоростью обучения 0,0001 и значением импульса 0,99. Вторым был Адам с немного большей скоростью обучения - 0,001.

Сравнив их, я обнаружил, что Адам показал гораздо лучшие результаты. Также я использовал категориальную кросс-энтропию в качестве функции потерь для нашей модели. Я обучил модель для 50 итераций с размером пакета 128, который, как я понял, является оптимальным для этой проблемы.

Наконец, я нанес на график результаты.

Полученные результаты

Потери / точность против эпохи

Модель может достичь точности проверки 60%, что довольно хорошо, учитывая количество классов (25) со 100–200 изображениями в каждой категории. Не стесняйтесь использовать разные архитектуры или экспериментировать с гиперпараметрами для получения лучших результатов.

Правильные и неправильные образцы

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

Выводы

Хотя этот проект далек от завершения, но примечательно видеть успех глубокого обучения в таких разнообразных реальных проблемах. Автоматическая классификация объектов может оказаться большим подспорьем для розничной торговли продуктами питания и бакалейными товарами, поскольку она снижает человеческие усилия в процессе управления запасами на складе и в торговых точках. Кроме того, магазин без трения рассматривается как будущее шоппинга.

Ссылки / Дополнительная литература







Прежде чем ты уйдешь

Соответствующий исходный код можно найти здесь.



Контакты

Если вы хотите быть в курсе моих последних статей и проектов, подписывайтесь на меня на Medium. Вот некоторые из моих контактных данных:

Приятного чтения, удачного обучения и удачного кодирования!