Форма вывода mlmodel NNClassifier является многочиповой, VNClassificationObservation не работает?

#swift #xcode #coreml

#swift #xcode #coreml

Вопрос:

Нужна помощь в развертывании модели CoreML, сгенерированной из GCP для сборки и развертывания в Xcode?

Открывается приложение на моем iPhone, и я могу сделать снимок, но модель застревает на «классификации …»

Первоначально это было связано с размером входного изображения (я изменил его на 224 * 224), который я смог исправить с помощью coremltools, но похоже, что для вывода мне нужен вывод словаря, когда .mlmodel, который у меня есть, имеет многомаршинный (float32) вывод. Кроме того, GCP CoreML предоставил два файла, a label.txt файл и .mlmodel.

Итак, у меня есть два вопроса:

  1. Как мне использовать файл label.text во время процесса сборки classification / Xcode?
  2. Моя ошибка возникает при
      { guard let results = request.results as? [VNClassificationObservation] else {
        fatalError("Model failed to load image")
     }
  

Могу ли я изменить вывод mlmodel с multiarray на dictionary с метками в соответствии с VNClassificationObservation ИЛИ VNCoreMLFeatureValueObservation можно каким-то образом использовать с выводом из нескольких массивов? Я попробовал, но приложение на iphone застряло.

Не уверен, как использовать файл метки в Xcode. Любая помощь очень ценится. Я потратил целый день на поиск в Интернете.

Ответ №1:

Вы получите VNClassificationObservation только тогда, когда модель является классификатором. Если вы получаете MLMultiArray в качестве вывода, то ваша модель НЕ является классификатором в соответствии с Core ML.

Можно преобразовать вашу модель в классификатор с помощью coremltools. Вам нужно написать скрипт на Python, который:

  1. загружает mlmodel
  2. присваивает слои от model._spec.neuralNetwork до model._spec.neuralNetworkClassifier
  3. добавляет два вывода: один для метки класса-победителя и один для словаря с вероятностями для всех меток классов
  4. заполните метки классов
  5. сохраните mlmodel

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

1. Спасибо @Matthijs, это имеет смысл. Я загрузил построенную на GCP мультиклассовую модель CoreML и ожидал, что она выведет модель классификатора. Я впервые выполняю это упражнение и не уверен, что здесь слишком много вопросов, но не могли бы вы помочь мне с некоторыми набросками кода для шагов 2,3 и 4. Я предполагаю, что у меня возникнет эта проблема с формой вывода даже при создании модели с нуля в Tensorflow и т. Д.

2. Для меня слишком много кода, чтобы помещать его здесь в Stack Overflow. Я добавлю этот конкретный случай в качестве новой главы в своей книге (Core ML Survival Guide), потому что он продолжает появляться.