Эта статья состоит из трех частей:

Вам нужно будет хорошо разбираться в командной строке, а также в основах разработки под Android.

Запуск демонстрационного приложения Android TensorFlow

Проект Google TensorFlow с открытым исходным кодом включает прекрасно документированное демонстрационное приложение для Android (GitHub). Самый быстрый способ начать - загрузить и установить готовый TFLiteCameraDemo.apk.

Демонстрационное приложение на самом деле состоит из четырех приложений (README содержит дополнительную информацию), но здесь мы сосредоточимся на TF Classify.

TF Classify открывает вашу камеру и классифицирует все объекты, которые вы ей показываете. На самом деле поразительно то, что это работает полностью в автономном режиме - вам не нужно подключение к Интернету. Мне было очень весело с этим.

Он распечатывает классификацию объектов вместе с уровнем достоверности (1.000 для полной достоверности, 0,000 для нулевой достоверности). Когда ваш объект заполняет большую часть изображения, он часто работает очень хорошо.

За кулисами

Вы хороши ровно настолько, насколько хорош ваш тренировочный набор

Его часто путают, но обычно вы можете понять, почему. Моя бутылка с водой очень похожа на стакан, так что я полностью понимаю.

Давайте попробуем классифицировать круассан по отдельности. Не повезло, все-таки «французская буханка». :-(

Почему с круассанами возникли проблемы?

Демонстрационное приложение для Android TF Classify использует модель Google Inception. Согласно документации, Inception v3:

достигает 21,2% ошибок первых 1 и 5,6% топ-5 для оценки одиночного кадра

Это означает, что он должен быть правильным почти в 80% случаев, и он имеет правильную классификацию в своих 5 лучших вариантах почти в 95% случаев. Поэтому удивительно, что он не справляется с круассаном. Давайте копать дальше.

В учебнике по распознаванию изображений TensorFlow говорится:

Inception-v3 обучен для Большого конкурса визуального распознавания ImageNet с использованием данных за 2012 год. Это стандартная задача в компьютерном зрении, где модели пытаются классифицировать целые изображения на 1000 классов

Теперь мы можем проверить, действительно ли Inception v3 обучен распознавать круассаны. Мы можем перейти по ссылке 1000 классов выше, чтобы просмотреть набор synset 2014 (набор synset - это в основном классификационная метка). Мы можем найти Французский хлеб

… Но не «круассан». Тайна раскрыта!

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

Классификации будущего

В новейшей версии ImageNet теперь 21841 классификационная метка. Вы можете искать и просматривать изображения в Интернете.

Щелчок по ссылке показывает, что в обучающем наборе «Полумесяц, круассан» 1219 картинок.

Было бы здорово, если бы кто-нибудь мог опубликовать обновленную модель TensorFlow, поддерживающую этот полный набор классификаций. Было бы здорово иметь возможность обнаруживать круассаны в демонстрационном приложении для Android. :-)

Больше игр с демонстрационным приложением

Давайте посмотрим на некоторые другие примеры, когда демонстрационное приложение TF Classify не могло правильно классифицировать изображение.

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

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

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