使用ML.NET模型生成器來完成圖片性別識別

  • 2020 年 10 月 27 日
  • 筆記

什麼是ML.NET?

ML.NET 使你能夠在聯機或離線場景中將機器學習添加到 .NET 應用程式中。 藉助此功能,可以使用應用程式的可用數據進行自動預測。 機器學習應用程式利用數據中的模式來進行預測,而不需要進行顯式編程。

ML.NET 的核心是機器學習模型 。 該模型指定將輸入數據轉換為預測所需的步驟。 藉助 ML.NET,可以通過指定演算法來訓練自定義模型,也可以導入預訓練的 TensorFlow 和 ONNX 模型。

ML.NET 支援在使用 .NET Core 的 Windows、Linux 和 macOS 或使用 .NET Framework 的 Windows 上運行。 所有平台均支援 64 位。 Windows 支援 32 位,TensorFlow、LightGBM 和 ONNX 相關功能除外。

了解ML.NET模型生成器

ML.NET 模型生成器是一個直觀的圖形化 Visual Studio 擴展,用於生成、訓練和部署自定義機器學習模型。其使用自動化的機器學習 (AutoML) 來探索不同的機器學習演算法和設置,以幫助找到最合適的方案。
使用模型生成器不需要具備機器學習的專業知識。 只需要一些數據,和確定要解決的問題。 模型生成器會生成將模型添加到 .NET 應用程式的程式碼。

值得注意的是,目前ML.NET 模型生成器是屬於預覽版,需要先啟用此預覽功能:

啟用ML.NET模型生成器

 

接下來,我們將使用此模型生成器來生成圖片性別生成的程式碼。

生成圖片性別識別的程式碼

主體步驟如下所示:

1.創建控制台項目,然後添加【機器學習】

添加機器學習

 

2.選擇方案,這裡我們選擇【影像分類】

當完成了第一步操作之後,我們將打開ML.NET模型生成器的UI介面。這裡我們選擇【影像分類】方案:

選擇方案

 

3.選擇訓練環境

選擇訓練環境

 

4.添加數據

在此之前,我們需要先準備好數據。由於是做圖片分類,我們需要先準備圖片數據,並且以文件夾的形式分類,比如: 

圖片文件夾

 
圖片數據

 

準備好圖片數據後,我們就可以在【數據】介面添加對應的文件夾了:

添加數據

 

添加完成後,就可以看到【數據預覽】:

數據預覽

 

這裡筆者準備了5000多張學生圖片,由於涉及隱私,這些數據樣本不會公開,如需要訓練可以去國外很多AI網站下載數據樣本。

5.訓練

訓練是一個自動的過程,模型生成器通過該過程教模型如何回答方案相關的問題。 訓練後,模型可以對其沒有見過的輸入數據進行預測。 例如,在預測房價時,可以預測新上市的房屋銷售價。因為模型生成器使用自動機器學習 (AutoML),所以在訓練期間不需要任何人工輸入或微調操作。

準備訓練

 

接下來,我們【開始訓練】:

開始訓練

 

一般500M數據需要訓練大概半小時以上(具體還需視機器性能而定):

訓練

 

6.評估

訓練結束後,我們就可以開始評估了。評估是衡量模型品質的過程。下面97.08的準確性已經是性能非常好的模型了,高於50%的準確性才是可以接受的模型。

評估

 

如果模型性能評分不符合預期,可以:

  • 延長訓練時間。 有了更多時間,自動機器學習引擎可以體驗更多演算法和設置。
  • 添加更多更精確的數據。 有時,數據量不足以訓練高品質的機器學習模型。對於包含少量示例的數據集,尤其如此。
  • 均衡分配數據。 對於分類任務,請確保在各個類別間均勻分配訓練集。 例如,若有四個類別和 100 個訓練示例,前兩類(標記 1 和標記 2)包含 90 個記錄,而剩下兩類(標記 3 和標記 4)只包含 10 個記錄,這就存在數據不均衡的問題,可能會導致模型很難正確預測標記 3 或標記 4。

回到剛才的主題,我們可以試用剛訓練出的模型。這裡筆者找了幾張數據樣本之外的圖片進行測試:

模型測試

 
模型測試

 

模型的準確性非常之高,我們用一張偏女性化的男性圖片進行測試:

模型測試

從上面的測試結果可以看出,準確性基本上取決於數據樣本的數量和品質!

7.添加程式碼

完成評估階段後,模型生成器可以輸出一份模型文件和程式碼,我們可以使用該程式碼將模型添加到應用程式。 ML.NET 模型保存為 zip 文件。 用於載入和使用模型的程式碼會以新項目的形式添加到解決方案中。 模型生成器還會添加一個示例控制台應用,可以運行該應用來查看工作狀態下的模型。

此外,模型生成器還會輸出生成模型的程式碼,以便你能了解生成模型所使用的步驟。 還可以通過模型訓練程式碼使用新的數據重新訓練模型。添加程式碼如下所示:

添加程式碼

 

【添加】之後,在解決方案中我們就可以相關程式碼了:

解決方案

 

如上圖所示,ML.NET模型的zip文件也包含在解決方案中。

執行示例程式碼

我們將【GenderRecognitionML.ConsoleApp】工程設置為啟動項目,打開示例程式碼如下所示:

using System;
using GenderRecognitionML.Model;

namespace GenderRecognitionML.ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            // Create single instance of sample data from first line of dataset for model input
            ModelInput sampleData = new ModelInput()
            {
                ImageSource = @"D:\workspace\AI\GenderRecognition\數據樣本\女\20200612180307_xxx.jpg",
            };

            // Make a single prediction on the sample data and print results
            var predictionResult = ConsumeModel.Predict(sampleData);

            Console.WriteLine("Using model to make single prediction -- Comparing actual Label with predicted Label from sample data...\n\n");
            Console.WriteLine($"ImageSource: {sampleData.ImageSource}");
            Console.WriteLine($"\n\nPredicted Label value {predictionResult.Prediction} \nPredicted Label scores: [{String.Join(",", predictionResult.Score)}]\n\n");
            Console.WriteLine("=============== End of process, hit any key to finish ===============");
            Console.ReadKey();
        }
    }
}

通過上面的示例程式碼我們非常簡單了解了如何來使用模型,僅需傳入圖片路徑,即可使用模型輸出對應的影像標籤(男、女)和準確性,我們可以運行起來,執行結果如下所示:

啟動執行

至此,整個教程就完成了,是不是非常簡單呢?即使我們不具備機器學習的專業知識!