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

Что вы узнаете

В части 1 этой серии, посвященной классификации изображений, вы узнаете о:

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

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

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

Другими словами, построение сверточной нейронной сети чем-то похоже на сборку перевернутой головоломки - представьте, что вместо того, чтобы начинать с кучи частей и смотреть, как эти части сочетаются друг с другом, вы начинаете с кучи неразрезанных головоломок. Цель игры - найти, как разложить эти головоломки (обучающий набор изображений) на несколько более мелких частей (фильтров) таким образом, чтобы, когда вы найдете одну из этих частей в новой головоломке, вы получили подсказка о том, к какой категории принадлежит головоломка.

Использование существующих моделей

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

Передача обучения

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

Например, вот модель Google Inception-V3:

Эта модель очень сложна и имеет миллионы параметров. Он состоит из ряда слоев (около 300!), Уложенных друг на друга. Каждый слой (даже каждый нейрон в каждом слое) выполняет математическую операцию по разложению изображения на его компоненты и определяет, к какой категории принадлежит изображение, учитывая компоненты, которые оно содержит.

Однако вас могут не интересовать 1000 категорий (собака, кошка, машина и т. Д.), Для которых Google разработала модель Inception-V3. Вы можете, скажем, создать классификатор, способный автоматически идентифицировать конкретный розничный продукт, изображенный на картинке.

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

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

Проще говоря, трансферное обучение - это просто умный способ повторно использовать части другой модели, чтобы ускорить разработку вашего пользовательского приложения :)

Содержание сериала

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

Мы нанимаем!

Вы заинтересованы в трансфертном обучении и применении искусственного интеллекта для повышения доступности спорта? К счастью для вас, мы нанимаем! Следуйте https://developers.decathlon.com/careers, чтобы увидеть различные интересные возможности. В противном случае, до встречи во второй части!

Особая благодарность Габриэлю Пулен-Ламарру из D-Wave Quantum Computing и Кайо Бьянки из Décathlon Canada за тщательное рассмотрение статьи.