本文將使用ML .NET的圖像分類
對貓狗的圖像數據進行訓練,得到模型;
並且開發一個簡單的識別程序用來識別貓咪和狗狗。
流程
根據什么是 ML.NET 以及它如何工作?中的描述,我們知道,工作流如圖:
這里我按照我的理解重新畫了一幅:
首先我們需要准備訓練數據集和測試數據集;
然后通過訓練數據集進行訓練,獲得訓練模型;
之后檢驗模型是否合格;
如果合格,投入使用;
如果不合格,重新設計訓練數據集的數據,或者調參,重新訓練,直至合格。
數據集來源
在kaggle Dogs vs. Cats中下載train.zip
和test1.zip
,
其中train.zip
中的圖像用於訓練,test1.zip
用於測試、檢驗模型是否可用。
下載解壓之后train.zip
得到了很多圖像
根據圖像名稱,將貓咪和狗狗的圖像分成兩個文件夾貓
和狗
開始分類訓練
在項目中,創建訓練模型
如圖所示,進入一個可視化的配置頁面,在方案一欄選擇圖像分類
第二步選擇訓練環境,選擇本地CPU
如果有條件使用Azure
的話,可以選擇通過Azure
進行訓練
也可以選擇本地GPU進行訓練,點擊檢查兼容性
可以看到提示,根據提示可以確定本機是否支持訓練,並且得知需要安裝的內容
第三步選擇准備好的訓練數據集
根據左邊的提示,只需要按照文件夾目錄,將不同分類的圖像放置到不同的文件夾下即可,這點在准備數據的時候已經完成
第四步,開始訓練
這里我使用開發機訓練了大概1.7天左右的時間,完成了訓練
訓練結束后有一個簡單的測試功能,
如果對於結果不滿意,可以重新訓練
我們也可以通過准備好的測試數據集test1.zip
中的圖像進行檢驗
最后ML .NET給出了一個使用模型的代碼段
//Load sample data
var sampleData = new CatAndDogMLModel.ModelInput()
{
//想要識別的圖像路徑
ImageSource = @"...\TrainData\狗\dog.0.jpg",
};
//Load model and predict output
//獲得識別結果
var result = CatAndDogMLModel.Predict(sampleData);
識別結果有Prediction
這個最終結果,也有Score
這樣的各個分類的分數集合
當Score
分數相差較小的時候,可能是識別效果不好或者識別出錯
比如拿一張既不是貓也不是狗的圖像進行識別,得到的分數幾乎相同,此時應該處理為無法識別為貓或者狗
至此,我們可以使用訓練好的模型了。
調用模型完成功能
制作一個簡單的輸入-輸出功能,調用模型,完成功能
評估與重新訓練
與價格預測篇基本類似,不再贅述
注意這次使用的算法是MLContext.MulticlassClassification
,所以評估也應該使用MLContext.MulticlassClassification.Evaluate
總結
可以看出,ML .NET
降低了機器學習的復雜度,使對機器學習零基礎的開發也可以無壓力使用機器學習完成一些工作
我們只需要通過快速學習,了解ML .NET可以完成哪些工作,並通過簡單的可視化頁面輸入數據,選擇算法,就可以完成工作
同時,如果對機器學習有一定了解,也可以更改代碼,調參,得到更好的模型
示例代碼
參考資料
10分鍾快速入門
官方示例machinelearning-samples
教程:通過 ML.NET 圖像分類 API 使用遷移學習自動進行肉眼檢查