1. Введение
TensorFlow — это многоцелевая среда машинного обучения. TensorFlow можно использовать где угодно: от обучения огромных моделей в кластерах в облаке до локального запуска моделей во встроенной системе, например на вашем телефоне.
В этой лаборатории кода используется TensorFlow Lite для запуска модели распознавания изображений на устройстве iOS.
Что вы узнаете
- Как оптимизировать вашу модель с помощью конвертера TFLite.
- Как запустить его в готовом приложении iOS с помощью интерпретатора TFLite.
Что вы построите
Простое приложение для камеры, которое запускает программу распознавания изображений TensorFlow для идентификации цветов.
Предварительные условия
Если вы выполняете эту лабораторную работу на своем собственном оборудовании, убедитесь, что у вас установлено следующее:
- Xcode 10 или выше
- CocoaPods 1.8.0 или выше
Лицензия: Бесплатное использование.
2. Обучите распознаватель цветов с помощью Colab
В этой лаборатории кода будут использоваться Colaboratory и Xcode.
Откройте Colab , который использует TensorFlow Lite Model Maker для обучения классификатора распознаванию цветов с помощью трансферного обучения, и экспортируйте модель TFLite для использования в мобильном приложении.
3. Настройте рабочий каталог.
Клонировать репозиторий Git
Следующая команда клонирует репозиторий Git, содержащий файлы, необходимые для этой лаборатории кода:
git clone https://github.com/tensorflow/examples.git
Теперь cd
в корень проекта Xcode только что созданного клона. Именно здесь вы будете работать до конца этой лаборатории кода:
cd examples/lite/examples/image_classification/ios
4. Установите приложение iOS.
Установить зависимости
Используя CocoaPods, установите зависимости приложения iOS (включая TensorFlow Lite). После завершения команды установки откройте ImageClassification.xcworkspace
, чтобы открыть проект в Xcode.
pod install --repo-update open ImageClassification.xcworkspace
5. Тестовый запуск приложения.
Чтобы использовать камеру, приложение должно быть запущено на реальном устройстве, поскольку iOS Simulator не имеет доступа к камере вашего Mac. Чтобы выполнить сборку на устройстве iOS, вы должны быть зарегистрированы в программе Apple Developer Program или иметь доступ к устройству, которое вам предоставил кто-то другой.
Если вы хотите запустить эту лабораторию кода в симуляторе, вам нужно будет скопировать изображения на монтажный стол из Safari в самом симуляторе. Вот этапы обработки изображения в симуляторе:
- Создайте приложение для симулятора по вашему выбору.
- В симуляторе iOS нажмите Cmd+Shift+H, чтобы свернуть приложение.
- Нажмите Safari в нижней части главного экрана и найдите изображение.
- В результатах поиска изображений Google нажмите на результат и нажмите и удерживайте изображение. В появившемся диалоге выберите «Копировать».
- Вернитесь в приложение TFL Classify. Скопированное изображение должно автоматически отображаться вместе с результатами вывода. Если это не так, убедитесь, что вы скопировали сами данные изображения, а не URL-адрес изображения.
Тестовая сборка и установка приложения
Прежде чем вносить какие-либо изменения в приложение, давайте запустим версию, поставляемую с репозиторием. Выберите свое устройство iOS в раскрывающемся меню в левом верхнем углу:
Затем нажмите Cmd+R или нажмите «Воспроизвести». кнопку в Xcode, чтобы создать приложение на вашем устройстве. Приложение должно запуститься автоматически после установки на ваше устройство.
Эта версия приложения использует стандартную сеть MobileNet, предварительно обученную на 1000 категориях ImageNet. Это должно выглядеть примерно так:
6. Запустите настроенное приложение.
Настройка приложения по умолчанию классифицирует изображения в один из 1000 классов ImageNet, используя стандарт MobileNet.
Теперь давайте изменим приложение так, чтобы оно использовало нашу переобученную модель для наших пользовательских категорий изображений, обученных в Colab.
7. Преобразуйте приложение для запуска вашей модели.
Добавьте файлы модели в проект
Ресурсы модели проекта расположены в ImageClassification > Model
в навигаторе проекта Xcode. Чтобы заменить их, сначала удалите два существующих файла в группе Model
. При появлении запроса выберите «Переместить в корзину»:
Затем перетащите файлы model.tflite
и labels.txt
, загруженные из Colab, в группу «Модель». При появлении запроса убедитесь, что выбраны опции Copy items if needed
и Add to targets
.
Измените код приложения
Чтобы наше приложение заработало, нам нужно обновить путь логики загрузки модели, чтобы он указывал на новую добавленную модель.
Откройте ModelDataHandler.swift (путь навигатора Xcode: ImageClassification -> ModelDataHandler -> ModelDataHandler.swift) и измените строку 36 на
// before static let modelInfo: FileInfo = (name: "mobilenet_quant_v1_224", extension: "tflite") // after static let modelInfo: FileInfo = (name: "model", extension: "tflite")
Обязательно сохраните все изменения.
8. Запустите настроенное приложение.
Нажмите Cmd+B или нажмите «Воспроизвести». кнопку в Xcode, чтобы создать приложение на вашем устройстве. После запуска приложения оно должно выглядеть примерно так:
Вы можете удерживать кнопки питания и увеличения громкости вместе, чтобы сделать снимок экрана.
Теперь попробуйте поискать в Интернете цветы, наведите камеру на экран компьютера и посмотрите, правильно ли классифицированы эти изображения.
Или попросите друга сфотографировать вас и узнать, какой вы TensorFlower. !
9. Как это работает?
Итак, теперь, когда у вас запущено приложение, давайте посмотрим на конкретный код TensorFlow Lite.
ТензорFlowLiteSwift
Это приложение использует библиотеку TensorFlowLite Swift через CocoaPods. Библиотека Swift представляет собой тонкую оболочку API TFLite C, который сам по себе является оболочкой библиотеки TFLite C++.
Следующие строки в файле Podfile модуля добавляют в проект новейшую версию глобального репозитория спецификаций Pod CocoaPods.
target 'ImageClassification' do
use_frameworks!
# Pods for ImageClassification
pod 'TensorFlowLiteSwift'
end
Использование Swift API TensorFlow Lite
Весь код, взаимодействующий с TensorFlow Lite, содержится в ModelDataHandler.swift .
Настраивать
Первый блок, представляющий интерес, — это инициализатор ModelDataHandler
:
/// A failable initializer for `ModelDataHandler`. A new instance is created if the model and
/// labels files are successfully loaded from the app's main bundle. Default `threadCount` is 1.
init?(modelFileInfo: FileInfo, labelsFileInfo: FileInfo, threadCount: Int = 1) {
let modelFilename = modelFileInfo.name
// Construct the path to the model file.
guard let modelPath = Bundle.main.path(
forResource: modelFilename,
ofType: modelFileInfo.extension
) else {
print("Failed to load the model file with name: \(modelFilename).")
return nil
}
// Specify the options for the `Interpreter`.
self.threadCount = threadCount
var options = InterpreterOptions()
options.threadCount = threadCount
do {
// Create the `Interpreter`.
interpreter = try Interpreter(modelPath: modelPath, options: options)
// Allocate memory for the model's input `Tensor`s.
try interpreter.allocateTensors()
} catch let error {
print("Failed to create the interpreter with error: \(error.localizedDescription)")
return nil
}
// Load the classes listed in the labels file.
loadLabels(fileInfo: labelsFileInfo)
}
Есть несколько строк, о которых стоит поговорить подробнее.
Следующая строка создает интерпретатор TFLite:
interpreter = try Interpreter(modelPath: modelPath, options: options)
Интерпретатор отвечает за передачу входных необработанных данных через граф TensorFlow. Мы передаем интерпретатору путь к нашей модели на диске, а затем интерпретатор загружает ее как FlatBufferModel .
Последняя строка загружает список меток:
loadLabels(fileInfo: labelsFileInfo)
Все, что он делает, это загружает строки из текстового файла в память.
Запустите модель
Второй блок, представляющий интерес, — это метод runModel
. Он принимает на вход CVPixelBuffer
, запускает интерпретатор и возвращает текст для печати в приложении.
try interpreter.copy(rgbData, toInputAt: 0)
// ...
try interpreter.invoke()
// ...
outputTensor = try interpreter.output(at: 0)
10. Что дальше?
Вот несколько ссылок для получения дополнительной информации:
- Узнайте больше о TFLite из документации на tensorflow.org и репозитория исходных кодов .
- Попробуйте другие предварительно обученные модели TFLite, включая детектор речевых слов и версию интеллектуального ответа на устройстве.
- Узнайте больше о TensorFlow в целом из нашей документации по началу работы .