Простое, но мощное распознавание изображений для всех

Мы все знакомы с идеей Computer Vision, это один из самых распространенных вариантов использования AI/ML. Наряду с обработкой естественного языка это, вероятно, одна из самых востребованных возможностей в этой области. Тем не менее, порог входа может показаться пугающе высоким, требуется огромное количество изображений и дорогостоящее оборудование только для того, чтобы начать строить демонстрацию концепции. Это может потребовать больших инвестиций только для начала, попытка убедить ваше высшее руководство взять на себя обязательство сделать что-то подобное может быть трудной задачей.

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

Посетив Microsoft Ignite Tour, я заинтересовался демонстрацией их предложения Custom Computer Vision, и поэтому я решил попробовать его и поделиться тем, что нашел.

Базовая демонстрация

Перейдя на этот сайт, каждый может загрузить файл в Azure и опробовать стандартную классификацию своей технологии Cognitive Services. Например, я загрузил из интернета изображение истребителя Миг29, и мы получили следующее:

Как вы можете видеть, он генерирует много возможной информации об изображении. Приятной особенностью является описание, которое он может генерировать, как вы можете видеть ниже, он описывает это изображение как «истребитель, летящий по голубому небу», с 78% вероятность. Очевидно, это не совсем правильно, я подозреваю, что синий цвет самолета сбивает модель с толку, но это разумное начало.

Описание

{ «метки»: [ «на открытом воздухе», «самолет», «трава», «самолет», «самолет», «транспорт», «синий», «военный», «реактивный», «истребитель», «летающий», «ВПП», «Воздух», «Малый», «Большой», «Полевой», «Серый», «Посадка», «Тарелка», «Белый», «Группа» ], «Подписи»: [ { «текст» : «истребитель, летящий по голубому небу», «уверенность»: 0,7829563 } ] }

Подключение через API

Очень хорошо иметь возможность попробовать эти вещи на веб-сайте, но это не очень полезно в каком-либо практическом контексте. Используя учетную запись Azure, мы можем создать некоторый вычислительный ресурс в облаке, предоставив нам API, к которому мы можем подключиться (в данном случае с помощью Python в Jupyter Notebook).

Я не буду вдаваться в подробности того, как это сделать, но после некоторой работы с помощью руководства здесь я смог отправить URL-адрес самолета, который использовал выше, и получил от API следующее:

===== Описать образ — удаленный =====

Описание удаленного образа:

«истребитель, летящий по голубому небу» с уверенностью 78,30%

Мы также можем получить все теги и их уровни достоверности (насколько уверена система, что она находится в теге) из API:

Также можно использовать этот API для анализа локально хранящегося изображения, которое отправляется в облако, а выходные данные возвращаются, как в следующем примере, который предоставляет заголовок и теги для изображения истребителя F16, хранящегося на моей машине. :

Пользовательское компьютерное зрение

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

Тем не менее, есть две основные проблемы, связанные с этим:

1. Что делать, если готовой модели недостаточно для наших нужд? Например, система может легко определить, что на наших изображениях есть самолеты, но что, если нам нужно знать, какой это тип истребителя?

2. Все это зависит от того, сможем ли мы подключиться к облачному ресурсу для получения информации. Что, если мы либо не хотим на это полагаться, либо работаем в автономном режиме?

Для решения этих проблем в Azure есть служба под названием «Custom Vision», которая может использовать Transfer Learning для обучения моделей конкретному варианту использования, а затем, после обучения, модель может быть загружена и установлена ​​локально на таких устройствах, как мобильные устройства. телефоны, Raspberry Pi или любое другое периферийное устройство.

Существует несколько способов создания пользовательской модели в Azure, но самый простой — перейти на customvision.ai и войти в свою учетную запись Azure, отсюда мы можем создать новый проект.

Затем мы выбираем, хотим ли мы классифицировать изображения или обнаруживать объекты на изображении, мы можем выбрать, как мы хотим классифицировать и какова будет приблизительная «область» изображений. Выбрав домен, мы можем воспользоваться специализированными моделями, которые Microsoft подготовила для продуктов питания, ориентиров и розничной торговли, если они имеют отношение к нашему варианту использования. Обратите внимание, что существуют «компактные» версии каждой модели, это версии, которые вам нужно использовать, если вы хотите загрузить обученную модель для локального использования.

Для простой демонстрации я решил построить модель, которая могла бы определить, содержит ли изображение американский самолет F16, российский Миг-29 или «другое» (все, что не является F16 или Миг-29). модель. Поэтому я решил использовать модель «Общая (компактная)», поскольку истребители не попадают ни в одну из этих категорий.

Следующий этап — загрузить пакеты изображений на сервер, а затем пометить их как «F16», «Mig 29» или «Негатив» (их термин означает «другое»). Важно дать модели примерно одинаковое количество каждого класса, который вы хотите идентифицировать, чтобы избежать систематической ошибки в модели. Затем вы можете нажать «Обучить», и механизм Azure начнет работать, чтобы точно настроить модель в соответствии с вашими данными.

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

В идеале вы хотели бы дать модели сотни изображений для обучения, я использовал ограниченное количество, поскольку целью этой демонстрации является простота построения модели, а не то, насколько хорошо она работает, хотя, учитывая небольшие размеры выборки (38 Mig29s, 44 кадра F16 и 47 «других» изображений) это очень хорошо. Если бы вы пытались построить эту модель с нуля, вам, вероятно, потребовались бы тысячи изображений, чтобы добиться такой производительности.

Затем мы можем выполнить «быстрый тест», который позволит нам загрузить больше изображений и посмотреть, как модель классифицирует их. В этом случае мы видим, что модель правильно идентифицирует МиГ-29 с вероятностью 90,7%:

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

Например, если вы когда-либо давали модели только изображения самолетов в воздухе, то она, вероятно, с трудом могла бы идентифицировать самолет на земле, или если вы когда-либо давали ей только изображения синих МиГ-29, то модель, скорее всего, обучалась бы предполагать что синий цвет является важной частью идентификации МиГ-29.

Как только у нас будет итерация, которой мы довольны, мы можем опубликовать модель. Затем у нас есть доступ к API, который мы можем использовать для программного доступа к модели, или мы можем загрузить модель в различных формах:

Использование загруженных моделей

После загрузки я смог использовать модель Tensorflow в Python, используя код с этой страницы, для классификации изображений и смог получить те же результаты, что и при использовании онлайн-версии. Например, при вводе этого изображения F16 мы получаем:

Точно так же я смог создать контейнер Docker, используя загруженный файл Dockerfile, который мог классифицировать изображения таким же образом. Как только контейнер был запущен и запущен, я смог получить прогнозы, используя следующий код:

Вывод

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

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