機器學習-CoreML入門

前言

AppleWWDC 2017的發佈會上發佈了機器學習框架Core ML.而後在後續的兩年裏,不斷完善Core ML的框架,在今年的WWDC 2019裏對Core ML框架進行了一次大的更新,將更新到3.0版本,即Core ML 3.0增長了包括Tensorflow等知名框架的支持,開發者不只能夠經過蘋果開發的模型還可使用第三方框架的機器學習模型來進行開發.Core ML 3.0還支持開發者本身開發和訓練本身的學習模型,並且開發者還能夠更新已有的學習模型來對學習模型進行更新改造.git

能夠說Core ML 3.0蘋果在機器學習上面的上的一個很大的臺階.github

本文將會介紹開發者如何使用Core ML去作對圖片相關識別的內容.算法

官方介紹

使用Core ML,開發者能夠將機器學習模型集成到應用程序中.swift

模型是將機器學習算法來訓練數據集合的結果.開發者可使用模型根據新輸入數據進行預測。例如,在給定臥室和浴室數量的狀況下,對區域歷史房價進行培訓的模型可能可以預測房屋的價格。安全

卡發着可使用Create ML訓練模型.或者可使用各類其餘機器學習庫,而後使用Core ML Tools將模型轉換爲Core ML格式.Core ML還容許您在設備上從新訓練或微調現有模型,並且會保持用戶數據的私密性和安全性.bash

Core ML是某些特定域的框架和功能的基礎.Vision支持視覺圖像分析,天然語言的天然語言處理,語音轉換音頻文本,SoundAnalysis用於識別音頻聲音.Core ML自己創建在低層面的原語之上,如AccelerateBNNS,以及Metal Performance Shaders.網絡

Core ML也爲設備性能進行了優化,從而減小了內存佔用和功耗.嚴格在設備上運行可以確保用戶數據的隱私,而且能保證你的應用在沒有網絡鏈接時也可以工做和響應。app

官方文檔

Core ML框架

WWDC介紹

WWDC 2019 - Session 704機器學習

機器學習模型下載

Core ML Models

此外也能夠到這個第三方倉庫裏面下載模型

Awesome-CoreML-Models

代碼示例--識別圖片中的數字

準備工做

首先咱們到Core ML Models下載MNIST模型並導入到工程中.

咱們能夠看到這邊包含有模型的詳細描述,模型名字、尺寸大小、做者以及證書等等.這裏開發中要注意的點是Inputs以及Outputs.在咱們給模型圖片的時候,咱們須要注意傳遞的參數,這裏咱們要傳入的是尺寸爲28*28的圖片.若是傳錯了,將會影響到咱們的輸出值.

當咱們點擊Model Class欄目的箭頭時,咱們能夠看到該模型的源碼.

源碼定義了具體的輸入輸出的相關代碼,這裏不展開研究. 咱們須要注意的是prediction這個函數,經過給模型一個圖片CVPixelBuffer數據,獲得模型處理後的輸出數據.

/**
        Make a prediction using the convenience interface
        - parameters:
            - image: Image of the digit drawing to be classified as grayscale (kCVPixelFormatType_OneComponent8) image buffer, 28 pixels wide by 28 pixels high
        - throws: an NSError object that describes the problem
        - returns: the result of the prediction as MNISTClassifierOutput
    */
    func prediction(image: CVPixelBuffer) throws -> MNISTClassifierOutput {
        let input_ = MNISTClassifierInput(image: image)
        return try self.prediction(input: input_)
    }
複製代碼

關鍵代碼

從相冊取出圖片

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        guard let image = info[UIImagePickerControllerOriginalImage] as? UIImage else {
            return
        }
        processMNIST(image)
        picker.dismiss(animated: true, completion: nil)
    }
複製代碼

對圖片進行分析

func processMNIST(_ image: UIImage) {
        imageView.image = image
        
        // 獲取圖片Buff
        guard let pixelBuffer = image.pixelBufferGray(width: 28, height: 28) else {
            return
        }
        
        // 獲取模型,進行分析
        let model = MNISTClassifier()
        do {
            let output = try model.prediction(image: pixelBuffer)
            classifier.text = "\(output.classLabel)"
        }
        catch {

        }
    }
複製代碼

結果展現

咱們分析圖片裏是否包含0-9的數字,將最有可能包含的數字展現出來.

總結

機器學習通過幾年的發展,已經愈來愈完善了,蘋果在這方面也是竭盡全力,Core ML 3.0蘋果機器學習領域的一次重大突破.這一次的進展也將會讓更多的開發者投入到機器學習的熱潮中,共同促進機器學習整個大生態的發展.

參考:

An in-depth look at Core ML 3

機器學習移動端的崢嶸初現: Core ML 3.0

iOS-11-by-Examples

Core ML入門:構建一個簡單的圖像識別應用

相關文章
相關標籤/搜索