На Android и iOS

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

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

Я напишу два разных руководства о том, как запускать модели машинного обучения на устройствах Android и iOS.

Это первое руководство.

В этом руководстве используется более стабильная версия tenorflow - TensorFlow Mobile, поэтому следуйте инструкциям по реализации ваших моделей и их оптимизации для мобильных устройств.

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

Учебник содержит всего 5–6 шагов:

Шаг 1. Создайте свою модель с помощью TensorFlow

Я почти уверен, что вы уже знаете этот шаг, поскольку вы учитесь запускать ту же модель на смартфонах.

Кроме того, чтобы эти руководства были строго сосредоточены на реализации моделей на смартфонах, я бы порекомендовал это краткое руководство 🔹 Обучить начало с пользовательскими изображениями на ЦП 🔹 Таким образом, мы будем на одной странице 📄 и вы можете начать работу в новом каталоге с недавно обученной моделью.

К вашему сведению: данные 📗 , на которых обучается модель, содержат типы цветов: тюльпаны 🌷 , ромашка, подсолнух 🌻 , одуванчик и розы 🌹

И после этого у вас должны быть эти два файла:

tf_files/retrained_graph.pb 

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

а также

 tf_files/retrained_labels.txt

который представляет собой текстовый файл 📝, содержащий метки.

Шаг 2: Создайте оптимизированную модель 😎

Запустите следующую командную строку (сохраните правильный путь)

python -m tensorflow.python.tools.optimize_for_inference \
  --input=tf_files/retrained_graph.pb \
  --output=tf_files/optimized_graph.pb \
  --input_names="input" \
  --output_names="final_result"

Будет создан новый оптимизированный файл модели tf_files/optimized_graph.pb

Примечание. Если вы получаете сообщение об ошибке KeyError: “The following input nodes were not found: {‘input’}\n” , измените input на Mul.

Компромиссы 😇

Чтобы уменьшить предварительную обработку приложения и одновременно уменьшить размер библиотеки, tensorflow поддерживает только подмножество операций, которые обычно используются во время вывода. Операции, которые не поддерживаются: tensorflow / contrib / makefile / tf_op_files.txt

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

Проверить ✔️

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

Сравните вывод одного и того же изображения с помощью label_file на графике retrained_graph.pb с optimized_graph.pb.

с retrained_graph.pb

python -m scripts.label_image \
  --graph=tf_files/retrained_graph.pb \
  --image=tf_files/flower_photos/daisy/3475870145_685a19116d.jpg

с помощью optimized_graph.pb

python -m scripts/label_image \
    --graph=tf_files/optimized_graph.pb \
    --image=tf_files/flower_photos/daisy/3475870145_685a19116d.jpg

Выполните эти команды одну за другой, и если оба вывода идентичны, это означает, что optimized_graph.pb создан идеально 🎉

Шаг 3: квантование модели, затем сжатие

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

Но сжатие работает, используя регулярность данных, что и объясняет здесь сбой.

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

Теперь используйте сценарий quantize_graph, чтобы применить изменения к графику:

python -m scripts.quantize_graph \
  --input=tf_files/optimized_graph.pb \
  --output=tf_files/rounded_graph.pb \
  --output_node_names=final_result \
  --mode=weights_rounded

а теперь сжимаем модель:

gzip -c tf_files/rounded_graph.pb > tf_files/rounded_graph.pb.gz

gzip -l tf_files/rounded_graph.pb.gz

Будет создан файл rounded_graph.pb.

Вы должны увидеть значительное улучшение сжатия.

Примечание. Если при запуске quantize_graph возникает какая-либо ошибка, загрузите этот файл и вставьте его в tools / quantization /quantize_graph.py в библиотека tenorflow (везде, где установлен TensorFlow).

Далее руководство разделено на два раздела - Android и iOS.

🍎 iOS 📱

Шаг 4. Добавьте экспериментальный модуль TensorFlow

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

Шаг 5. Создайте свое приложение

🔹 Создайте собственное приложение или загрузите уже созданное приложение в XCode.

🔹 Добавьте файл с именем Podfile в корневой каталог проекта со следующим содержимым:

target 'YourProjectName'
pod 'TensorFlow-experimental'

🔹 Запустите pod install, чтобы загрузить и установить модуль TensorFlow-experimental.

🔹 Откройте YourProjectName.xcworkspace и добавьте свой код.

🔹 В настройках сборки вашего приложения не забудьте добавить $(inherited) в разделы Другие флаги компоновщика и Пути поиска заголовков.

Шаг 6: Запуск образцов

Вам понадобится Xcode 7.3 или новее для запуска наших примеров iOS.

Есть три примера: простой, тестовый и камера. Вы можете клонировать код.

Кроме того, загрузите Inception v1 из корня тензорного потока и извлеките файлы меток и графиков в папки данных как в простом примере, так и в примерах камеры, используя следующие шаги:

mkdir -p ~/graphs
curl -o ~/graphs/inception5h.zip \
 https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip \
 && unzip ~/graphs/inception5h.zip -d ~/graphs/inception5h
cp ~/graphs/inception5h/* tensorflow/examples/ios/benchmark/data/
cp ~/graphs/inception5h/* tensorflow/examples/ios/camera/data/
cp ~/graphs/inception5h/* tensorflow/examples/ios/simple/data/

Перейдите в один из примеров каталогов, загрузите модуль Tensorflow-экспериментальный и откройте рабочее пространство Xcode. Обратите внимание, что установка модуля может занять много времени, так как он большой (~ 450 МБ). Если вы хотите запустить простой пример, тогда:

cd tensorflow/examples/ios/simple
pod install
open tf_simple_example.xcworkspace #note .xcworkspace,not .xcodeproj
                                     

Запустите простое приложение в симуляторе XCode. Вы должны увидеть одноэкранное приложение с кнопкой Выполнить модель. Коснитесь этого, и вы должны увидеть изображение Грейс Хоппер. После того, как вы его построите и запустите, вы должны получить изображение с камеры в реальном времени, которое вы можете указывать на объекты, чтобы получать результаты распознавания в реальном времени.

Примечание. Я почти уверен, что допустил ошибку или что-то оставил в разделе iOS. Пожалуйста, пройдите по следующим официальным ссылкам и оставьте комментарий ниже, если у вас возникнет какая-либо ошибка, сообщество поможет вам.

Теперь вы можете пропустить раздел этой статьи, посвященный Android.

Https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/ios#building-the-tensorflow-ios-libraries-from-source



🍭 🍦 Android 🍞🐝 🍩

Шаг 4: настройка Android Studio и тестовый запуск

Есть два способа сделать это Android Studio и Bazel. Я буду использовать AS, так как с ней знакомо больше людей.

Если он у вас еще не установлен, перейдите сюда и установите его



Тестовый прогон 🏃

Чтобы проверить, все ли правильно работает в Android Studio, давайте проведем тестовый запуск.

🔸 Откройте Android Studio и выберите «📁Открыть существующий проект Android Studio».

🔸 Перейдите в каталог tensorflow-for-poets-2 / android / tfmobile.

🔸 Откройте файл Build.gradle и синхронизируйте Gradle. Если все работает нормально, нажмите кнопку СОЗДАТЬ ›СОЗДАТЬ APK.

Примечание. Если вы новичок в Android Studio, как и я, и у вас есть какие-то проблемы, оставьте комментарий ниже.

Теперь в папке должен быть файл app.apk, скопируйте его в свой телефон и установите. Также не забудьте включить Режим разработчика на своем телефоне.

Шаг 5. Запустите индивидуальное приложение 👏 👏 👏

Если до сих пор все работает нормально, то теперь легкая прогулка.

Приложение по умолчанию - это приложение для классификации изображений с 1000 категориями от Imagenet.

Теперь, чтобы запустить наше настроенное приложение, выполните следующие два шага:

Добавьте файлы вашей модели в проект

В данный момент демонстрационное приложение просматривает файлы graph.pb и label.txt в папке android / tfmobile / assets. не в ваших round_graph.pb и retrained_labels.txt

Теперь замените файлы следующей командой или вы можете сделать это вручную.

cp tf_files/rounded_graph.pb android/tfmobile/assets/graph.pb
cp tf_files/retrained_labels.txt android/tfmobile/assets/labels.txt

Измените 'output_name" в ClassifierActivity.java file

Выходной узел для нашей модели имеет другое имя: "final_result". Откройте ClassifierActivity.java и обновите переменную OUTPUT_NAME следующим образом:

private static final String INPUT_NAME = "input";
private static final String OUTPUT_NAME = "final_result";

👏 👏 👏 ЗАПУСТИТЕ снова, и теперь все должно работать. 👏 👏 👏

Примечание. Если вы получите какую-либо ошибку или нажмете какой-либо комментарий на стене ниже.

️Я постарался сделать статью максимально точной и простой для понимания. Любые комментарии, предложения или вопросы, пишите в комментариях.

Для получения дополнительных руководств по использованию TensorFlow в мобильных приложениях подпишитесь на меня в Medium, Facebook, Twitter, LinkedIn, Google+, Quora Чтобы увидеть похожие сообщения.

Хлопайте! Поделиться этим! Следуй за мной!

Рад быть полезным. Престижность… ..

Предыдущие истории, которые вам понравятся:

  1. TensorFlow для мобильных устройств: TensorFlow Lite

2. Эпоха против размера партии против итераций

3. Учебное пособие по API Python для распознавания изображений TensorFlow на ЦП

4. Объяснение функции активации: нейронные сети