Core ML框架詳細解析(五) —— 一個Core ML簡單示例(一)

版本記錄

版本號 時間
V1.0 2018.08.16

前言

目前世界上科技界的所有大佬一致認為人工智能是下一代科技革命,蘋果作為科技界的巨頭,當然也會緊跟新的科技革命的步伐,其中ios API 就新出了一個框架Core ML。ML是Machine Learning的縮寫,也就是機器學習,這正是現在很火的一個技術,它也是人工智能最核心的內容。感興趣的可以看我寫的下面幾篇。
1. Core ML框架詳細解析(一) —— Core ML基本概覽
2. Core ML框架詳細解析(二) —— 獲取模型并集成到APP中
3. Core ML框架詳細解析(三) —— 利用Vision和Core ML對圖像進行分類
4. Core ML框架詳細解析(四) —— 將訓練模型轉化為Core ML

開始

首先說一下本文的環境。

本文的寫作環境是:Swift 4.2, iOS 12, Xcode 10

創建ML證明Apple致力于讓您更輕松地在您的應用中使用機器學習模型。 在這篇文章中,您將學習如何通過改進數據來加速工作流程以改善模型,同時通過在Xcode和Swift中輕松完成所有操作來平滑學習曲線。

同時,您將熟悉ML工具集和術語。 不需要數學! 您不需要知道如何編寫編譯器來使用Swift,并且您不需要能夠編寫新的ML算法來使用分類器。

Apple ML的簡史:

  • Core ML:2017年WWDC宣布,并已得到每個主要ML平臺的支持,以轉換現有模型。 但現有模型往往過于龐大和/或過于籠統。

  • Turi Create:在WWDC 2017之后的某個時候被Apple收購,它允許您使用自己的數據自定義現有模型。。

  • IBM Watson Services:2018年3月發布。您可以自定義IBM Watson的可視識別模型,以識別您自己的數據。 拖放您的數據,無需編碼,但您必須導航IBM Cloud,并且Core ML模型包含在Watson API中。

  • Create ML:在WWDC 2018宣布。在Xcode和Swift中ML! 目前僅包括Turi Create的七個以任務為中心的工具包中的兩個,以及通用分類器和回歸器以及數據表。

您將使用Create ML技巧開始此Create ML教程:您將使用來自 Kaggle Cats and Dogs Dataset的圖像在GUI中構建圖像分類器。然后,您將與使用相同數據集的Turi Create示例進行比較。正如您所看到的,Turi Create更具手動性,但它也更靈活,而且并不神秘!對于更基于代碼的示例,您將比較Create MLTuri Create的文本分類器代碼。

然后,我將向您展示如何快速設置環境以使用Turi Create。 Apple甚至修改了Xcode playgrounds,使其更像Jupyter notebooks,因此編碼環境會讓人感到熟悉!要嘗試一下,你將在Jupyter筆記本中使用Turi Create來為相同的貓狗數據集構建圖像相似性模型。

您可以等待并希望Apple將其余的Turi Create移動到Create ML,但您會發現使用Create ML作為直接使用Turi Create的踏腳石并不難。一旦您對開發環境感到滿意,ML就擁有豐富的起點,一切都可供您使用。

注意:Swift 用于TensorFlow怎么樣? 對于Swift人來說,Create ML就是ML,而對于ML人來說,Swift對于TensorFlow就是Swift —— 該項目旨在提供更好的編程語言,并提供編譯器支持。

要開始這個教程,你需要:

  • Mac運行macOS 10.14 Mojave beta
  • Xcode 10.x beta

關于本工程的文件,主要包含:

  • Pets-100, Pets-1000 和 Pets-Testing:這些包含貓和狗的圖像;你將使用這些來訓練和評估貓狗分類器。
  • ClassifyingImagesWithVisionAndCoreML:Apple的CoreML示例項目;您將使用您在Create ML中訓練的模型替換MobileNet模型。
  • good-dog.png:額外的狗圖片。
  • turienv.yaml:您將使用此文件創建一個可以運行Turi Create代碼的環境。

Create ML Image Classifier - Create ML圖像分類器

首先,準備你的數據 - 你將訓練一個圖像分類器模型來識別貓和狗的圖像。當您給模型展示一個圖像時,它將返回標簽CatDog。要訓??練模型,您需要一個帶有貓圖像的Cat文件夾和一個帶有狗圖像的Dog文件夾。理想情況下,每個類文件夾中的圖像數量應該相同 - 如果您有30張貓圖像和200張狗圖像,該模型將偏向于將圖像分類為狗。并且不包括任何包含兩種動物的圖像。

每類有多少張圖片?至少10個,但更多的圖像將訓練模型更準確。 Kaggle Cats and Dogs Dataset每個類有12,500張圖片,但你不需要全部使用它們!當您使用更多圖像時,訓練時間會增加 - 圖像數量增加一倍會使訓練時間增加一倍。

要訓??練一個Create ML圖像分類器,您需要為其提供一個訓練數據集 - 包含類文件夾的文件夾。實際上,starter文件夾包含我之前準備的兩個數據集。 Pets-100包含Kaggle數據集的Cat and Dog類文件夾的前50張圖像;Pets-1000擁有前500張圖片。

訓練模型后,您需要一個測試數據集來評估模型:包含Cat和Dog文件夾的文件夾。 測試數據集中的圖像應與訓練數據集中的圖像不同,因為您要評估模型在之前未見過的圖像上的工作情況。 如果您正在收集自己的數據,則會將20%的圖像放在測試數據集中,其余的則放在訓練數據集中。 但是我們每個類都有12,500張圖像可供使用,因此Pets-Testing包含來自每個Kaggle數據集類文件夾的圖像900到999。

您將首先使用Pets-100訓練模型,然后使用Pets-Testing進行測試。 然后你將用Pets-1000訓練它,并用Pets-Testing進行測試。


Apple’s Spectacular Party Trick

在Xcode 10中,創建一個新的macOS playground,并輸入以下代碼:

import CreateMLUI

let builder = MLImageClassifierBuilder()
builder.showInLiveView()

展示assistant editor,并點擊run按鈕。

您正在創建和顯示用于培訓和評估圖像分類器的交互式視圖。這個棒極了!它神奇地讓您可以輕松地嘗試不同的數據集 - 因為重要的不是誰擁有最好的算法,而是誰有最好的數據。算法已經非常好了,您可以讓數據科學研究人員繼續使它們變得更好。但大多數時候,努力,機器學習的費用用于策劃數據集。此GUI圖像分類器可幫助您磨練數據策劃技能!隨意下載Kaggle Cats and Dogs數據集并創建您自己的數據集。在您看到我的數據集產生的內容之后,您可能需要更加小心地從這個好的,壞的和可怕的圖像中選擇。

Pets-100文件夾拖到視圖上。訓練過程立即開始。圖像加載,下面是進度條。片刻之后,調試區域中會出現一個表格,顯示Images ProcessedElapsed TimePercent Complete

這里發生了什么事?如果你想查找它,它被稱為transfer learning。底層模型 - 支持Vision框架的VisionFeaturePrint_Screen - 在一個巨大的數據集上進行了預訓練,以識別大量的類。它通過了解圖像中要查找的要素以及如何組合這些要素來對圖像進行分類來實現此目的。數據集的幾乎所有訓練時間都是從圖像中提取2048個特征的模型。這些可能包括低級形狀和紋理以及更高級別的耳朵形狀,眼睛之間的距離,鼻子的形狀。然后花費相對少的時間訓練邏輯回歸模型,將圖像分成兩類。它類似于將一條直線擬合到散亂點,但是在2048維度而不是2,但它仍然很快做:我的運行需要1m 15s進行特征提取,0.177886 seconds進行訓練和應用邏輯回歸。

只有當數據集的特征與用于訓練模型的數據集的特征相似時,Transfer learning才能成功運行。在ImageNet上預訓練的模型 - 大量照片 - 可能無法很好地傳輸到鉛筆畫或顯微鏡圖像。

您可能希望瀏覽兩篇有關(主要)Google Brain / Research功能的精彩文章:

注意:我在2016年初 1.1GHz CPU的MacBook上運行Create ML。 您的時間可能會更快,特別是如果您的Mac足夠新,可以讓Create ML使用您的GPU!在配備2.9GHz i7 CPU的2017款MacBook Pro上,功能提取時間降至11.27秒,培訓時間為0.154341秒。


Training & Validation Accuracy - 訓練和驗證準確性

訓練結束后,視圖會顯示Training和(有時)Validation準確度指標,并在調試區域中顯示詳細信息:

我獲得了100%的訓練和驗證準確性!因為每個訓練期都會隨機選擇驗證集,因此您的驗證集將是不同的10張圖像。 無法知道選擇了哪些圖像。

那么什么是驗證? 精確度數字意味著什么?

  • Training accuracy很容易:訓練涉及猜測給每個特征計算答案的權重。因為您將圖像標記為“Cat”或“Dog”,所以訓練算法可以檢查其答案并計算出正確的百分比。然后,它將正確或錯誤的信息提供給下一次迭代以優化權重。

  • Validation accuracy類似:在訓練開始之前,隨機選擇的10%的數據集將被拆分為驗證數據。提取特征并使用與訓練數據集相同的權重計算答案。但結果不能直接用于重新計算權重。它們的目的是防止模型過度擬合 - 固定在一個實際上并不重要的特征上,比如背景顏色或光照。如果驗證精度與訓練精度非常不同,則算法會對自身進行調整。因此,驗證圖像的選擇會影響驗證準確性和訓練準確性。如果您創建了一個與測試數據具有相似特征的數據集,Turi Create允許您提供固定的驗證數據集。您的測試數據集很好地代表了您的用戶將為您的應用提供的內容。


Evaluation - 評估

真正的問題是:模型如何對未訓練的圖像進行分類?

視圖會提示您Drop Images to Begin Testing:將Pets-Testing文件夾拖到視圖上。 很快,視圖顯示Evaluation準確性,調試區域中包含詳細信息:

97%的準確度:混淆矩陣表示兩只貓圖像被錯誤分類為狗,四只狗圖像被錯誤分類為貓。 滾動測試圖像,查看哪些認錯了模型。 上面的屏幕截圖中有一個,這是另一個認錯的貓:

它們是錯誤的照片:一個是模糊和太亮,另一個是模糊的,大部分頭部被裁掉。 模型將圖像大小調整為299×299,經常裁剪邊緣,因此您關心的對象理想情況下應該在圖像中居中,但不能太大或太小。

在上面的屏幕截圖中,我點擊了詳細按鈕以查看置信度:模型是100%自信度認為這只貓是一只狗! 但滾動瀏覽其他圖像,看看模型如何正確處理一些非常糟糕的圖像。


Improving Accuracy - 提高準確度

Pets-100訓練數據集僅使用了每個類的12,500張圖像中的50張。 Create ML可以非常輕松地嘗試不同的數據集,以查看更多數據是否可以提高準確性。

單擊界面的stop按鈕,然后在它變為run按鈕時再次單擊它。 這會加載新視圖,準備接受訓練數據。

Pets-1000文件夾拖到視圖上。 從1000張圖像中提取特征將比100張圖像時間長五到十倍。在等待時,這里是Apple有用的文章Improving Your Model’s Accuracy的摘要,該文章提供了改進不同精度度量的具體建議。

1. Improving Training Accuracy - 提高訓練的準確度

  • 增加圖像分類器的最大迭代次數Max iterations。 (這不適用于第一個Xcode測試版,但可以在第二個測試版中使用。)
  • 對文本分類器使用不同的算法。
  • 對通用分類器或回歸器使用不同的模型。

2. Improving Validation Accuracy - 提高驗證準確度

  • 可能的過度擬合:減少最大迭代次數Max iterations。 你可能不必在此擔心,因為在達到10次迭代之前,當結果滿意時我的訓練停止了。

3. Improving Evaluation Accuracy - 提高評估準確性

確保您的訓練數據的多樣性與測試數據的特征相匹配,并且這兩組與您的應用用戶將為您的模型提供的數據類似。


Back to the Playground - 回到Playground

訓練1000張圖像獲得100%的訓練準確度,但只有96%的驗證準確度,再次,YMMV - 我已經運行了幾次,有時獲得99%的驗證準確性。

Pets-Testing文件夾拖到視圖上以評估此模型,它在200個測試圖像上獲得98.5%的準確率!

混淆矩陣表示模型將三個貓圖像分類為狗。 實際上,只有兩只貓被誤標為狗 - 100%有信心!

雖然混淆矩陣不是這樣的,但有兩只狗被標記為貓,但信心較低。 它們也很模糊,對比度低:

可能進一步改進此模型的唯一方法是使用更多數據,或者通過增加1000個圖像,或者通過添加來自完整Kaggle數據集的更多圖像。 或者通過更仔細地選擇數據集,以省去您不希望應用程序處理的非常糟糕的圖像。 隨意嘗試! 請記住,這很容易 - 對于較大的數據集,訓練需要更長的時間。 我用5000張圖片來運行它:花了32分鐘,我獲得了99%的訓練和驗證準確度。


Increase Max Iterations? - 增加最大迭代次數?

這個例子的準確度指標實際上非常好 - 底層模型可能已經知道所有關于貓和狗的信息。 但是,如果您正在為不同的類進行訓練,并且訓練準確率較低,那么您需要嘗試將Max迭代次數增加到20次。在編寫本教程時,使用第一個Xcode測試版,這是未實現的。 但這里會告訴你如何做到。

停止并啟動playground,然后單擊ImageClassifier旁邊的詳細符號以顯示選項,將10更改為20,然后按Enter鍵:

單擊顯示符號以隱藏選項,然后再次打開選項以檢查最大迭代次數是否仍為20。

如果您使用的是Xcode beta 2或更高版本,請將您的訓練文件夾拖到視圖上以開始訓練。 這將比10次迭代訓練期間花費更長的時間,但特征提取將花費相同的時間,這是其中的大部分。

注意:Create MLTuri Create中的Create是一個問題 - 如果不創建新模型,則無法訓練模型。 要增加迭代次數,您必須從頭開始并提取與以前完全特征的功能。 Create ML GUI不提供保存功能的選項。 一個更像手動的框架,如Keras,構造,編譯,然后適合模型,所以再次運行fit指令實際上從它停止的地方開始。 實際上可以查看Turi Create的源代碼并提取從圖像中提取特征的低級代碼 - 耗時最多的部分。 然后,您可以保存提取的特征,并在需要進行更多訓練迭代時重新加載它們! 希望這會激勵你對Turi Create更感興趣,也許也會對Keras感興趣!

后記

本篇主要講述了一個Core ML簡單示例,感興趣的給個贊或者關注~~~

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,606評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,582評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,540評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,028評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,801評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,223評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,294評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,442評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,976評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,800評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,996評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,543評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,233評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,926評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,702評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內容