2017-06-11 80 views
7

我在Xcode 9 Beta上使用CoreML和Swift 4.0。爲什麼我會收到錯誤:解碼CoreML文件?

如果選擇在Project Navigator文件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 for models Places205-GoogLeNet,ResNet50和Inception v3一切正常。

+0

示例項目可以在這裏找到https://medium.com/towards-data-science/welcoming-core-ml-8ba325227a28,https://github.com/alaphao/CoreMLExample –

+1

我不知道回答(也許VGG16.mlmodel沒有正確下載?),但你不想在移動設備上使用VGG16。它太大了(500 + MB),太慢了,吃了太多精力。 –

+0

我幾次從蘋果網站下載了這個模型。 也許在蘋果網站上的文件被破壞... 是的,我知道這個模型的大小非常大。 所以說研究興趣。 –

回答

8

按照要求,我將我的意見充實到答案。

其他人已經提到過這一點,但你最有可能有一個損壞的下載或有一些與模型本身打破。首先,我強烈建議不要在移動設備上使用VGG16機型或相關型號,這僅僅是因爲它們很大(VGG16爲500 MB)。你只會在加載模型的iPhone 6上耗盡內存,你的應用程序的大小將是巨大的,並且隨着這些權重被加載,你將有一個漫長的初始化時間。

我推薦使用像SqueezeNet變體這樣小的東西(〜5 MB),在ImageNet上訓練時可以更準確,而且不像Inception系列那樣計算量大。 Apple提到在Core ML WWDC會議中使用其中的一種。

將模型添加到Xcode項目中時,確保它實際上已註冊到目標。 Xcode目前的測試版偶爾會忘記將其添加到您的目標中,因此突出顯示該模型並檢查文件檢查器,以確保它是您應用程序目標的一部分。如果模型不在您的目標中,Xcode將不會自動爲其生成Swift標頭。

+0

其實我有這兩個問題: 首先,當你從蘋果網站下載https://developer.apple.com/machine-learning/模型文件VGG16.mlmodel被切割爲250-270 MB。 你可以在這裏下載模型VGG16 - https://yadi.sk/d/DLr99UZs3KGJqu 其次,你真的必須打勾才能將模型添加到目標中。 此外,在iPhone 6(IOS 11測試版)中,此型號運行速度非常慢,會加熱手機。 謝謝布拉德(@BradLarson)。 –

+0

@ A.Kant - 就速度而言,至少在最初的測試版中,似乎Core ML使用Accelerate的BNNS操作而不是Metal來在iPhone 6上執行這些網絡。在基準測試中,我在iPhone 6上運行運行庫存AlexNet時,核心ML的速度大約慢3.5倍,而使用金屬性能着色器在同一設備上實現完全相同的網絡。不知道爲什麼它不使用iPhone 6上的MPS操作,因爲硬件明顯支持它們。 –

+0

或者他們會在下一個版本的iPhone 6上支持MPS,或者是蘋果鼓勵我們購買新的iPhone :) @BradLarson –

1
  1. 請運行./setup.sh
  2. 選擇目標爲VGG16.mlmodel,看到這個screenshot
0

對於有Dropout的模型,我會得到同樣的結果。嘗試通過將權重複制到沒有它們的新模型來刪除這些圖層。

相關問題