版本記錄
版本號 | 時間 |
---|---|
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 ML
和Turi 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圖像分類器
首先,準備你的數據 - 你將訓練一個圖像分類器模型來識別貓和狗的圖像。當您給模型展示一個圖像時,它將返回標簽Cat
或Dog
。要訓??練模型,您需要一個帶有貓圖像的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 Processed
,Elapsed Time
和Percent 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 - 提高驗證準確度
- 增加數據量:對于圖像分類器,您可以通過翻轉,旋轉,剪切或更改圖像曝光來增強圖像數據。 這是Apple’s illustration of data augmentation:
- 可能的過度擬合:減少最大迭代次數
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 ML
和Turi Create
中的Create是一個問題 - 如果不創建新模型,則無法訓練模型。 要增加迭代次數,您必須從頭開始并提取與以前完全特征的功能。 Create ML GUI不提供保存功能的選項。 一個更像手動的框架,如Keras,構造,編譯,然后適合模型,所以再次運行fit
指令實際上從它停止的地方開始。 實際上可以查看Turi Create的源代碼并提取從圖像中提取特征的低級代碼 - 耗時最多的部分。 然后,您可以保存提取的特征,并在需要進行更多訓練迭代時重新加載它們! 希望這會激勵你對Turi Create更感興趣,也許也會對Keras感興趣!
后記
本篇主要講述了一個Core ML簡單示例,感興趣的給個贊或者關注~~~