Преобразовать TFLite (TensorFlow) в MLModel (Apple)

#python #tensorflow #tensorflow2.0 #coreml #coremltools

#python #tensorflow #tensorflow2.0 #coreml #coremltools

Вопрос:

Я пытаюсь преобразовать модель лицевой сетки TFLite в MLModel (Apple).

Описание модели TFLite: https://drive.google.com/file/d/1VFC_wIpw4O7xBOiTgUldl79d9LA-LsnA/view

Фактический файл TFLite .tflite: https://github.com/google/mediapipe/blob/master/mediapipe/models/face_landmark.tflite

Смотрим на CoreMLTools, предоставляемые Apple (https://coremltools.readme.io/docs/introductory-quickstart ) кажется, что это возможно, но все примеры кодов демонстрируют диалог из Keras , а не из TFLite (хотя это явно поддерживается):

введите описание изображения здесь

Как преобразовать модель TFLite в модель MLModel?

Ответ №1:

Насколько я знаю, прямого преобразования из TFLite в Core ML не существует. Кто-то мог бы создать такой конвертер, но, по-видимому, ни у кого нет.

Два варианта:

  1. Сделайте это сами. Существует Python API для чтения файла TFLite (flatbuffers) и API для записи основных файлов ML (NeuralNetworkBuilder в coremltools). Пройдите по слоям модели TFLite один за другим и добавьте их в NeuralNetworkBuilder, затем сохраните как файл .mlmodel.

  2. Позвольте TFLite сделать это за вас. Когда вы используете CoreMLDelegate в TFLite, он фактически выполняет преобразование модели «на лету» и сохраняет файл .mlmodel (или скомпилированную версию, .mlmodelc). Затем он использует Core ML для запуска этой модели. Вы можете написать некоторый код для загрузки модели с помощью TFLite, используя CoreMLDelegate, затем возьмите файл .mlmodel, созданный этим из пакета приложений, и используйте его.

Комментарии:

1. Я пробую второй подход, пока безуспешно. Можете ли вы подсказать мне, как получить mlmodel? Я запускаю этот проект ( github.com/rusito-23/CartoonGan-iOS ) в качестве примера. Находится ли это в каталоге simulator или я должен увидеть это в Xcode (аналогично .app в разделе products?)?

2. Я не знаю, где это хранится. Хм, похоже на временный файл. Код находится здесь, в saveModel : github.com/tensorflow/tensorflow/blob /…

3. @RoiMulia Привет, ты можешь получить модель coreml из TFLite? По какому пути он сохраняется?

4. Я попытался выполнить 2-й вариант, я получаю несколько файлов .mlmodelc в каталоге tmp. Как мне объединить их в одну .mlmodel?

Ответ №2:

По состоянию на 2023 год, я думаю, существует старый способ преобразования tflite в модель coreml. Сначала вам нужно преобразовать его в onnx-модель. Подробная инструкция здесь:https://github.com/zhenhuaw-me/tflite2onnx . Этот инструмент может содержать недостаточно операций глубокого обучения. Если вы обнаруживаете ошибки, возможно, вам захочется попробовать Microsoft tf2onnx с флагом «—tflite». После этого вы можете преобразовать его в coreml. К сожалению, Apple устарела от поддержки модели onnx в coremltool версии 6, вместо этого вам нужно будет использовать версию 5. Удачи