Coremltools не может успешно изменить вывод на изображение

Я преобразовал модель Keras в MLModel с помощью coremltools 4.0 с ограниченным успехом. Это работает, но только в том случае, если я использую MLMultiArray для вывода и скрываю изображение. Преобразование в изображение занимает больше времени, чем вывод; делает его непригодным для использования Он работал для TensorFlow 1 и coremltools 3.4, но теперь для TensorFlow 2 и coremltools 4.0b1 - нет. Добавление нового слоя для преобразования вывода из [0,1] - ›[0, 255] не помогает. Мы также поняли, что некоторые дополнительные слои добавляются автоматически с помощью cormel, что может быть проблемой. Здесь у вас есть изображение

Я попытался транспонировать ввод с помощью np.transpose, но это не решило проблему, а создало новый. Если ввод соответствует формату (3, 256, 256), я получаю следующую ошибку:

RuntimeError: {NSLocalizedDescription = Входная функция изображения input_1 не соответствует описанию модели; NSUnderlyingError = Error Domain = com.apple.CoreML Code = 0 Высота изображения (256) не входит в допустимый диапазон (200..400) UserInfo = {NSLocalizedDescription = Высота изображения (256) не входит в допустимый диапазон (200..400) }; }

Но если размер равен (256, 256, 3), я получаю следующую ошибку:

NSLocalizedDescription = Не удалось преобразовать вывод output_1 в изображение; NSUnderlyingError = Error Domain = com.apple.CoreML Code = 0 Недопустимая форма массива (\ n 256, \ n 256, \ n 1 \ n) для преобразования в серое изображение UserInfo = {NSLocalizedDescription = Недопустимая форма массива (\ n 256, \ n 256, \ n 1 \ n) для преобразования в серое изображение};

Есть ли у вас какие-либо идеи?


person Antonio Esteban    schedule 23.07.2020    source источник
comment
См. Здесь: stackoverflow.com/questions/63006397/   -  person Matthijs Hollemans    schedule 23.07.2020
comment
Да, я знаю. Я попытался добавить комментарий, добавив эту информацию, но мой комментарий был удален, потому что он на самом деле не отвечает на вопрос. Если у вас есть другой вопрос, вы можете задать его, нажав «Задать вопрос».   -  person Antonio Esteban    schedule 23.07.2020
comment
Похоже на тот же вопрос? В любом случае, возможно, это проблема coremltools v4, поскольку она все еще находится в стадии бета-тестирования. Правильная форма для изображений в Core ML - (3, 256, 256) и (1, 256, 256), а не (256, 256, 3) или (256, 256, 1).   -  person Matthijs Hollemans    schedule 23.07.2020


Ответы (1)


Мы нашли ошибку! Проблема в том, что транспонированный слой автоматически добавляется с неправильным индексом. Чтобы решить эту проблему, мы используем следующий обходной путь:

transpose_layer = mlmodel_spec.neuralNetwork.layers[-4].transpose
del transpose_layer.axes[:]
transpose_layer.axes.extend([0, 1, 2, 3])
person Antonio Esteban    schedule 07.10.2020