我正在理解CoreML。對於初學者模型,我已經下載了Yahoo's Open NSFW caffemodel。您給它一張圖片,它會給出一個概率分數(介於0和1之間)圖片包含不適合的內容。將Caffe模型轉換爲CoreML
使用coremltools,我已經將模型轉換爲.mlmodel並將它帶入我的應用程序。它出現在Xcode中,像這樣:
在我的應用程序,我可以順利過關的圖像,輸出顯示爲MLMultiArray。我遇到麻煩的是瞭解如何使用這個MLMultiArray來獲得我的概率分數。我的代碼是像這樣:
func testModel(image: CVPixelBuffer) throws {
let model = myModel()
let prediction = try model.prediction(data: image)
let output = prediction.prob // MLMultiArray
print(output[0]) // 0.9992402791976929
print(output[1]) // 0.0007597212097607553
}
作爲參考,CVPixelBuffer被調整到所需要的224x224,該模型問(我會得到與視覺打一次,我可以算出來)。
如果我提供了不同的圖像,我已經打印到控制檯的兩個索引確實發生了變化,但是他們的分數與我在Python中運行模型時得到的結果大不相同。在Python中進行測試時,傳遞給模型的圖像給出了0.16的輸出,而根據上面的示例,我的CoreML輸出與我期望看到的截然不同(和Python的雙輸出不同)。
需要更多的工作來獲得像我期待的結果?
我不認爲你需要手動調整緩衝區大小。我認爲CoreML可以爲你處理 – Guig
我相信在使用Vision時可能只是這種情況。如果只使用CoreML本身,我確實認爲緩衝區確實需要調整大小(我可以確認;如果我通過CVPixelBuffer而不調整大小,則會引發錯誤)。 – ZbadhabitZ
對。除非您喜歡編寫,重寫和維護圖像處理代碼,否則使用Vision將圖像傳送到模型會簡單得多。 – rickster