Загрузить пользовательскую модель CoreML и загрузить для использования [Swift] - PullRequest
0 голосов
/ 15 сентября 2018

Я создаю приложение на основе нейронной сети, а размер модели CoreML составляет около 150 МБ. Итак, очевидно, что я не могу отправить его в приложение.

Чтобы преодолеть эту проблему, я узнал об этой статье , в которой упоминалось, что вы можете загрузить и скомпилировать модель CoreML на устройстве.

Я сделал и загружаю на свое устройство, но проблема в том, что я не могу сделать прогнозы в качестве исходной модели. Например, исходная модель принимает UIImage в качестве входных данных, но MLModel - это MLFeatureProvider, может кто-нибудь обратиться к тому, как я могу выполнить приведение типов к своей модели и использовать его как оригинальный?

do {
    let compiledUrl = try MLModel.compileModel(at: modelUrl)
    let model = try MLModel(contentsOf: compiledUrl)
    debugPrint("Model compiled \(model.modelDescription)")
    //model.prediction(from: MLFeatureProvider) //Problem
    //It should be like this
    //guard let prediction = try? model.prediction(image: pixelBuffer!) else {
    //    return
    //}
} catch {
    debugPrint("Error while compiling \(error.localizedDescription)")
}

Ответы [ 2 ]

0 голосов
/ 31 марта 2019

Я столкнулся с подобной проблемой некоторое время назад, и вот как я решил ее. Я создал собственный класс Input для пользовательской модели, похожий на тот, который генерируется Xcode, используя имя моей входной переменной. А затем использовал его, чтобы получить результаты в качестве словаря. Подробности здесь .

0 голосов
/ 16 сентября 2018

Когда вы добавляете файл mlmodel в ваш проект, Xcode автоматически генерирует для вас исходный файл.Вот почему вы могли написать model.prediction(image: ...) раньше.

Если вы скомпилируете mlmodel во время выполнения, у вас нет этого специального исходного файла, и вам нужно самостоятельно вызывать API MLModel.

Самым простым решением здесь является добавление файла mlmodel в проект, копирование-вставка автоматически сгенерированного исходного файла в новый исходный файл и использование его с mlmodel, который вы компилируете во время выполнения.(После того, как вы скопировали сгенерированный источник, вы можете снова удалить mlmodel из вашего проекта Xcode.)

Кроме того, если ваша модель имеет размер 150 МБ, вы можете рассмотреть возможность создания ее небольшой версии, выбравархитектура, которая больше подходит для мобильных устройств.(Не VGG16, который, кажется, вы используете в настоящее время.)

...