Преобразование из UIImage в MLMultiArray

Я использую предварительно обученную модель ml для классификации изображений. Модель принимает в качестве входных данных MultiArray 3 x 224 x 224 в качестве формата изображения. В моем текущем приложении я работаю с UIImage. Есть ли способ преобразовать UIImage в MLMultiArray?

Я видел несколько ответов относительно преобразования модели Keras в модель CoreML, но моя модель уже находится в формате mlmodel и не имеет доступа к данным.


person Rohit Chouhan    schedule 12.05.2019    source источник


Ответы (1)


Самое простое решение - изменить формат ввода в файле mlmodel. Вы можете сделать это, даже если у вас нет оригинальной модели Keras.

В скрипте Python сделайте следующее:

import coremltools
import coremltools.proto.FeatureTypes_pb2 as ft 

spec = coremltools.utils.load_spec("YourModel.mlmodel")

input = spec.description.input[0]
input.type.imageType.colorSpace = ft.ImageFeatureType.RGB
input.type.imageType.height = 224 
input.type.imageType.width = 224

coremltools.utils.save_spec(spec, "YourNewModel.mlmodel")

Также возможно преобразовать UIImage в MLMultiArray, но если ваша модель действительно работает с изображениями, лучше всего изменить тип ввода на изображение.

Кстати, если у вас все еще есть исходная модель Keras, вы можете сделать это автоматически, предоставив image_input_names="your_input" конвертеру coremltools Keras. В этом случае нет необходимости писать новый скрипт Python.

person Matthijs Hollemans    schedule 13.05.2019
comment
Спасибо за ответ, но после запуска этого скрипта на моей модели тип ввода - CVPixelBuffer, а не UIImage, это ожидаемое поведение? - person Developeder; 10.09.2020
comment
Да, Core ML использует CVPixelBuffer вместо UIImage. Но относительно просто преобразовать UIImage в CVPixelBuffer. См. github.com/hollance/CoreMLHelpers. - person Matthijs Hollemans; 10.09.2020