C# .NET ML.NET 機器學習 影象分類
一、 準備工作
IDE是 VS2019。
先下載好“resnet_v2_50_299.meta”這個檔案,放入“C:\Users\jk\AppData\Local\Temp\MLNET\”這個資料夾,目錄不存在自己新建下。“jk”是WINDOWS登入名,注意換成你自己的。
下載地址:https://download.csdn.net/download/runliuv/15724931
新建一個“z機器學習樣本1”目錄,再建立“貓”和“狗”2個子目錄。在網上下載“貓”和“狗”的圖片各幾十張,分別放到這2個子目錄中。這2個子目錄名也稱為標籤(Label)。
二、 新增和使用
新建一個“WindowsFormsApp1”的.NET FRAMEWORK 4.7 的WINFORM程式。
在選單-工具-選項-環境-預覽功能中,選中“Enable ML.NET Model Builder”
在“WindowsFormsApp1”上右鍵-新增機器學習。
選擇影象分類.
選擇本地.
選擇剛才收集好的圖片資料夾(D:\z機器學習樣本1)。
開始訓練。
訓練完成(可能要幾分鐘)。
試用模型(隨便選一張貓或狗的圖片)。
新增專案。
如何呼叫ML.NET的提示
可以把 WindowsFormsApp1ML.ConsoleApp 設定為啟動項。F5執行試用下。
其中predictionResult.Prediction 是識別出來的類別,predictionResult.Score 是相似度。
把“WindowsFormsApp1”右鍵設定為啟動項。
Nuget 中安裝:
Microsoft.ML 1.5.0
Microsoft.ML.ImageAnalytics 1.5.0
Microsoft.ML.Vision 1.5.0
SciSharp.TensorFlow.Redist 1.14.0
,這4個包儘量和“WindowsFormsApp1ML.ConsoleApp”中版本一致
在WINFORM介面上新增按鈕和檔案對話方塊(openFileDialog).
private void button1_Click(object sender, EventArgs e) {try { if (openFileDialog1.ShowDialog() != DialogResult.OK) { return; } string fileName = openFileDialog1.FileName; ModelInput sampleData = new ModelInput() { ImageSource = fileName, }; // Make a single prediction on the sample data and print results var predictionResult = ConsumeModel.Predict(sampleData); MessageBox.Show(predictionResult.Prediction); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
執行起來。就可以了。
三、簡單解析
檢視 WindowsFormsApp1ML.ConsoleApp中的 ModelBuilder 類。
這個類是用來訓練的。
TRAIN_DATA_FILEPATH 是訓練檔案索引(C:\Users\jk\AppData\Local\Temp\4233eca3-43b3-479f-97f8-50ac3124e9c7.tsv)。用記事本開啟TRAIN_DATA_FILEPATH路徑的檔案。裡面包含2列,Label和ImageSource。
MODEL_FILEPATH 是訓練後儲存的模型。使用時要放到使用程式的根目錄,微軟自動生成的程式碼,路徑是寫死的。
CreateModel() 是訓練方法。相當於我們剛才的滑鼠點選訓練。
如果要用程式碼來訓練,就用程式碼生成 TRAIN_DATA_FILEPATH 中的 .tsv 檔案 。再呼叫 CreateModel()。
再看 WindowsFormsApp1ML.Model 中的 ConsumeModel類。
這個類是使用。
Predict() 就是呼叫主入口了,子方法中 CreatePredictionEngine(),modelPath 是寫死的,有需要則替換。
這個提示是正在下載resnet_v2_50_299.meta檔案,從微軟下載這個可能需要花很長時間:
[Source=ImageClassificationTrainer; Ensuring meta files are present., Kind=Info] Downloading resnet_v2_50_299.meta from https://aka.ms/mlnet-resources/resnet_v2_50_299.meta to C:\Users\jk\AppData\Local\Temp\MLNET\resnet_v2_50_299.meta
[Source=ImageClassificationTrainer; Ensuring meta files are present., Kind=Info] resnet_v2_50_299.meta: Downloaded 3596 bytes out of 102616931
end