Если ваше приложение использует пользовательские модели TensorFlow Lite , вы можете использовать Firebase ML для развертывания своих моделей. Развертывая модели с помощью Firebase, вы можете уменьшить первоначальный размер загрузки вашего приложения и обновить модели машинного обучения вашего приложения, не выпуская новую версию вашего приложения. А с помощью Remote Config и A/B-тестирования вы можете динамически предоставлять разные модели разным группам пользователей.
Модели TensorFlow Lite
Модели TensorFlow Lite — это модели машинного обучения, оптимизированные для работы на мобильных устройствах. Чтобы получить модель TensorFlow Lite:
- Используйте готовую модель, например одну из официальных моделей TensorFlow Lite.
- Преобразуйте модель TensorFlow, модель Keras или конкретную функцию в TensorFlow Lite.
Обратите внимание: при отсутствии поддерживаемой библиотеки TensorFlow Lite для Dart вам потребуется интегрироваться с собственной библиотекой TensorFlow Lite для ваших платформ. Эта интеграция здесь не документирована.
Прежде чем начать
Установите и инициализируйте Firebase SDK для Flutter, если вы еще этого не сделали.
В корневом каталоге вашего проекта Flutter выполните следующую команду, чтобы установить плагин загрузчика модели ML:
flutter pub add firebase_ml_model_downloader
Перестройте свой проект:
flutter run
1. Разверните свою модель
Развертывайте свои собственные модели TensorFlow с помощью консоли Firebase или Firebase Admin Python и Node.js SDK. См. раздел Развертывание пользовательских моделей и управление ими .
После добавления пользовательской модели в проект Firebase вы можете ссылаться на нее в своих приложениях, используя указанное вами имя. В любой момент вы можете развернуть новую модель TensorFlow Lite и загрузить новую модель на устройства пользователей, вызвав getModel()
(см. ниже).
2. Загрузите модель на устройство и инициализируйте интерпретатор TensorFlow Lite.
Чтобы использовать модель TensorFlow Lite в своем приложении, сначала используйте загрузчик модели, чтобы загрузить последнюю версию модели на устройство. Затем создайте экземпляр интерпретатора TensorFlow Lite с моделью.
Чтобы начать загрузку модели, вызовите метод getModel()
загрузчика модели, указав имя, которое вы присвоили модели при ее загрузке, хотите ли вы всегда загружать самую последнюю модель и условия, при которых вы хотите разрешить загрузку.
Вы можете выбрать один из трех вариантов загрузки:
Тип загрузки | Описание |
---|---|
localModel | Получите локальную модель с устройства. Если доступной локальной модели нет, это ведет себя как latestModel . Используйте этот тип загрузки, если вы не заинтересованы в проверке обновлений модели. Например, вы используете Remote Config для получения названий моделей и всегда загружаете модели под новыми именами (рекомендуется). |
localModelUpdateInBackground | Получите локальную модель с устройства и начните обновлять модель в фоновом режиме. Если доступной локальной модели нет, это ведет себя как latestModel . |
latestModel | Приобретите последнюю модель. Если локальная модель является последней версией, возвращается локальная модель. В противном случае загрузите последнюю модель. Такое поведение будет заблокировано до тех пор, пока не будет загружена последняя версия (не рекомендуется). Используйте это поведение только в тех случаях, когда вам явно нужна последняя версия. |
Вам следует отключить функции, связанные с моделью, например сделать их серыми или скрыть часть пользовательского интерфейса, пока вы не подтвердите, что модель загружена.
FirebaseModelDownloader.instance
.getModel(
"yourModelName",
FirebaseModelDownloadType.localModel,
FirebaseModelDownloadConditions(
iosAllowsCellularAccess: true,
iosAllowsBackgroundDownloading: false,
androidChargingRequired: false,
androidWifiRequired: false,
androidDeviceIdleRequired: false,
)
)
.then((customModel) {
// Download complete. Depending on your app, you could enable the ML
// feature, or switch from the local model to the remote model, etc.
// The CustomModel object contains the local path of the model file,
// which you can use to instantiate a TensorFlow Lite interpreter.
final localModelPath = customModel.file;
// ...
});
Многие приложения запускают задачу загрузки в своем коде инициализации, но вы можете сделать это в любой момент, прежде чем вам понадобится использовать модель.
3. Выполните вывод по входным данным.
Теперь, когда у вас есть файл модели на устройстве, вы можете использовать его с интерпретатором TensorFlow Lite для выполнения вывода. При отсутствии поддерживаемой библиотеки TensorFlow Lite для Dart вам потребуется интегрироваться с собственными библиотеками TensorFlow Lite для iOS и Android.
Приложение: Безопасность модели
Независимо от того, как вы делаете свои модели TensorFlow Lite доступными для Firebase ML, Firebase ML сохраняет их в стандартном сериализованном формате protobuf в локальном хранилище.
Теоретически это означает, что кто угодно может скопировать вашу модель. Однако на практике большинство моделей настолько специфичны для приложения и запутаны оптимизациями, что риск аналогичен риску дизассемблирования и повторного использования вашего кода конкурентами. Тем не менее, вы должны знать об этом риске, прежде чем использовать пользовательскую модель в своем приложении.