Почему я получаю сообщение об ошибке: проблема с декодированием документа CoreML?

Я использую CoreML со Swift 4.0 на Xcode 9 Beta.

Если выбрать файл VGG16.mlmodel в навигаторе проектов, я получаю сообщение об ошибке: There was an problem decoding this document CoreML

К тому же как следствие в коде получаю ошибки Use of unresolved identifier 'VGG16' и Use of undeclared type 'VGG16'

VGG16.mlmodel загружен отсюда https://developer.apple.com/machine-learning/

В чем может быть проблема?

PS для моделей Places205-GoogLeNet, ResNet50 и Inception v3 все работает нормально.


person A.Kant    schedule 11.06.2017    source источник
comment
Пример проекта можно найти здесь medium.com/towards-data-science. /welcoming-core-ml-8ba325227a28 , github.com/alaphao/CoreMLExample   -  person A.Kant    schedule 12.06.2017
comment
Я не знаю ответа (может быть, модель VGG16.ml была загружена неправильно?), но вы все равно не хотите использовать VGG16 на мобильном устройстве. Он слишком большой (500+ МБ), слишком медленный и потребляет слишком много энергии.   -  person Matthijs Hollemans    schedule 12.06.2017
comment
Я несколько раз скачивал эту модель с сайта Apple. Может на сайте Apple файл битый... Да, я знаю, что размер этой модели очень большой. Так сказать исследовательский интерес.   -  person A.Kant    schedule 12.06.2017
comment
@MatthijsHollemans & A.Kant - я также получаю аналогичную ошибку с VGG16. Загрузка, кажется, прервана. Поэтому я подумал, что попробую что-нибудь еще, и скачал Inception v3. Я добавил файл .mlmodel в свой проект, и я вижу, что он отлично отображается в XCode (а не ошибка декодирования, как я получаю с VGG16). Но когда я пытаюсь использовать его в своем коде, var inceptionEngine: Inceptionv3?, var inceptionEngine: Inceptionv3?inceptionEngine = Inceptionv3(), я получаю сообщение об ошибке «Использование необъявленного типа Inceptionv3». Не могли бы вы подсказать мне, как импортировать эти модели и использовать их в коде?   -  person csharpnewbie    schedule 12.06.2017
comment
@csharpnewbie — убедитесь, что ваш файл .mlmodel действительно является частью вашей цели (выберите его, откройте инспектор в правой части Xcode и убедитесь, что установлен флажок для вашей цели). Я заметил, что бета-версия Xcode 9 иногда не включает вашу модель в вашу цель, когда вы добавляете ее в свой проект. Он не генерирует правильный заголовок автоматически, если .mlmodel не находится в вашей цели.   -  person Brad Larson    schedule 13.06.2017
comment
@BradLarson, большое спасибо. Я не заметил, что цель не была выбрана.   -  person csharpnewbie    schedule 13.06.2017
comment
@BradLarson Привет, Брэд. Ваш ответ был правильным. Сделав это полным ответом, я выберу его как истинный.   -  person A.Kant    schedule 21.06.2017


Ответы (3)


В соответствии с просьбой, я конкретизирую свой комментарий в ответ.

Другие упоминали об этом, но, скорее всего, у вас повреждена загрузка или что-то не так с самой моделью. Во-первых, я настоятельно рекомендую не использовать модель VGG16 или похожие модели на мобильном устройстве только из-за их огромного размера (500 МБ для VGG16). Вы исчерпаете память на iPhone 6, просто загрузив модель, размер вашего приложения будет гигантским, и у вас будет длительное время инициализации при загрузке этих весов.

Я рекомендую использовать что-то вроде варианта SqueezeNet, который имеет небольшой размер (~ 5 МБ), может быть более точным при обучении на ImageNet и не так требователен к вычислительным ресурсам, как семейство Inception. Apple ссылается на использование одного из них в одной из сессий Core ML WWDC.

Когда вы добавляете модель в свой проект Xcode, убедитесь, что она действительно зарегистрирована в вашей цели. Текущая бета-версия Xcode иногда забывает добавить это в вашу цель, поэтому выделите модель и проверьте в инспекторе файлов, чтобы убедиться, что она является частью цели вашего приложения. Если модель не находится в вашей цели, Xcode не будет автоматически генерировать для нее заголовок Swift.

person Brad Larson    schedule 21.06.2017
comment
На самом деле у меня были обе эти проблемы: во-первых, при загрузке с сайта Apple developer.apple.com/ файл модели машинного обучения VGG16.mlmodel был урезан на 250-270 МБ. Скачать модель VGG16 можно здесь - yadi.sk/d/DLr99UZs3KGJqu Во-вторых, действительно надо поставить галочку чтобы добавить модель в вашу цель. Кроме того, на iPhone 6 (бета-версия iOS 11) эта модель очень медленно работает и нагревает телефон. Спасибо, Брэд (@BradLarson). - person A.Kant; 22.06.2017
comment
@A.Kant - Что касается скорости, по крайней мере, в начальной бета-версии кажется, что Core ML использует операции Accelerate BNNS, а не Metal, для выполнения этих сетей на iPhone 6. В тесте, который я провел, на iPhone 6 Core ML был примерно в 3,5 раза медленнее при работе со стандартным AlexNet по сравнению с точно такой же сетью, реализованной на том же устройстве с использованием шейдеров Metal Performance. Не уверен, почему он не использует операции MPS на iPhone 6, поскольку аппаратное обеспечение явно их поддерживает. - person Brad Larson; 22.06.2017
comment
Или они будут поддерживать MPS на iPhone 6 в следующей версии, или Apple призывает нас купить новый iPhone :) @BradLarson - person A.Kant; 22.06.2017

  1. Пожалуйста, бегите ./setup.sh
  2. выберите цель для VGG16.mlmodel, см. этот скриншот
person luics    schedule 14.06.2017

Я получаю то же самое для модели с Dropout. Попробуйте удалить эти слои, скопировав веса в новую модель без них.

person robmsmt    schedule 23.08.2017