ML.NET 示例:圖像分類模型訓練-首選API(基於原生TensorFlow遷移學習)

2022-01-29 dotNET跨平臺

收錄於話題 #機器學習 7個

ML.NET 版本API 類型狀態應用程式類型數據類型場景機器學習任務算法Microsoft.ML 1.5.0動態API最新控制臺應用程式和Web應用程式圖片文件圖像分類基於遷移學習的TensorFlow模型再訓練進行圖像分類DNN架構:ResNet、InceptionV3、MobileNet等問題

圖像分類是深度學習學科中的一個常見問題。此示例演示如何通過基於遷移學習方法訓練模型來創建您自己的自定義圖像分類器,該方法基本上是重新訓練預先訓練的模型(如InceptionV3或ResNet架構),這樣您就可以在自己的圖像上訓練自定義模型。

在這個示例應用程式中,您可以創建自己的自定義圖像分類器模型,方法是使用自己的圖像從ML.NET API本機訓練TensorFlow模型。

圖像分類器場景–使用ML.NET訓練您自己的定製深度學習模型

數據集(圖像集)

圖像集許可證

此示例的數據集基於Tensorflow提供的「flower_photosimageset」,下載地址。此存檔中的所有圖像均獲得Creative Commons By Attribution許可證的許可,網址為:https://creativecommons.org/licenses/by/2.0/

完整的許可證信息在license.txt文件中提供,該文件包含在作為.zip文件下載的同一圖像集中。

默認情況下,示例下載的imageset有200個圖像,平均分布在5個flower類中:

Images --> flower_photos_small_set -->
|
daisy
|
dandelion
|
roses
|
sunflowers
|
tulips

每個子文件夾的名稱很重要,因為它將是模型用於分類圖像的每個類/標籤的名稱。

機器學習任務-圖像分類

為了解決這個問題,我們首先要建立一個ML模型。然後我們將在現有數據上訓練模型,評估它有多好,最後我們將使用模型對新圖像進行分類。


1. 將項目配置為使用GPU或CPU

默認情況下,此解決方案使用CPU進行訓練和評分。但是,如果您的機器有一個兼容的GPU可用(基本上大多數NVIDIA GPU顯卡),您可以配置該項目使用GPU。

:警告:請確保使用下面列出的NuGet包的正確版本。其他版本可能與Nvidia CUDA v10.0不兼容

使用CPU進行訓練或推斷/評分

當使用CPU時,您的項目必須引用以下redist庫:

SciSharp.TensorFlow.Redist (1.15.0) (CPU training)

使用CPU的訓練項目中的示例參考屏幕截圖:


使用GPU進行訓練或推斷/評分

使用GPU時,項目必須引用以下redist庫(並刪除CPU版本引用):

SciSharp.TensorFlow.Redist-Windows-GPU (1.14.0) (GPU training on Windows)

SciSharp.TensorFlow.Redist-Linux-GPU (1.14.0) (GPU training on Linux)

使用GPU的訓練項目中的示例參考屏幕截圖:


2. 構建模型

構建模型包括以下步驟:

將圖像文件(本例中為文件路徑)加載到IDataView中使用ImageClassification評估器進行圖像分類(高級API)

定義數據架構,並在從files文件夾加載圖像時引用該類型。

public class ImageData
{
    public ImageData(string imagePath, string label)
    {
        ImagePath = imagePath;
        Label = label;
    }

    public readonly string ImagePath;
    public readonly string Label;
}

由於API使用內存圖像,因此稍後您可以使用內存圖像對模型進行評分,因此需要定義一個包含「byte[]image」類型中圖像位的類,如下所示:

public class InMemoryImageData
{
    public InMemoryImageData(byte[] image, string label, string imageFileName)
    {
        Image = image;
        Label = label;
        ImageFileName = imageFileName;
    }

    public readonly byte[] Image;
    public readonly string Label;
    public readonly string ImageFileName;
}

使用LoadImagesFromDirectory()和LoadFromEnumerable()下載imageset並加載其信息。

// 1. Download the image set and unzip
string finalImagesFolderName = DownloadImageSet(imagesDownloadFolderPath);
string fullImagesetFolderPath = Path.Combine(imagesDownloadFolderPath, finalImagesFolderName);

var mlContext = new MLContext(seed: 1);

// 2. Load the initial full image-set into an IDataView and shuffle so it'll be better balanced
IEnumerable<ImageData> images = LoadImagesFromDirectory(folder: fullImagesetFolderPath, useFolderNameAsLabel: true);
IDataView fullImagesDataset = mlContext.Data.LoadFromEnumerable(images);
IDataView shuffledFullImageFilePathsDataset = mlContext.Data.ShuffleRows(fullImagesDataset);

將數據加載到IDataView後,將對這些行進行混洗,以便在拆分為訓練/測試數據集之前更好地平衡數據集。。

下一步非常重要。因為我們希望ML模型能夠處理內存中的圖像,所以我們需要將圖像加載到數據集中,並通過調用fit()和ttransform()來實現。需要在初始且分離的管道中執行此步驟,以便在訓練時,管道和模型不會使用文件路徑來創建。

// 3. Load Images with in-memory type within the IDataView and Transform Labels to Keys (Categorical)
IDataView shuffledFullImagesDataset = mlContext.Transforms.Conversion.
        MapValueToKey(outputColumnName: "LabelAsKey", inputColumnName: "Label", keyOrdinality: KeyOrdinality.ByValue)
    .Append(mlContext.Transforms.LoadRawImageBytes(
                                    outputColumnName: "Image",
                                    imageFolder: fullImagesetFolderPath,
                                    inputColumnName: "ImagePath"))
    .Fit(shuffledFullImageFilePathsDataset)
    .Transform(shuffledFullImageFilePathsDataset);

此外,在分割數據集之前,我們還將標籤轉換為鍵(分類)。如果您不想在第二個管道(訓練管道)中轉換標籤時處理/匹配KeyOrdinality,那麼在拆分之前執行此操作也很重要。

現在,讓我們將數據集分成兩個數據集,一個用於訓練,另一個用於測試/驗證模型的質量。

// 4. Split the data 80:20 into train and test sets, train and evaluate.
var trainTestData = mlContext.Data.TrainTestSplit(shuffledFullImagesDataset, testFraction: 0.2);
IDataView trainDataView = trainTestData.TrainSet;
IDataView testDataView = trainTestData.TestSet;

作為最重要的步驟,您可以定義模型的訓練管道,在這裡您可以看到如何輕鬆地訓練一個新的TensorFlow模型,該模型基於默認體系結構(預先訓練的模型)的遷移學習,例如Resnet V2 500。

// 5. Define the model's training pipeline using DNN default values
//
var pipeline = mlContext.MulticlassClassification.Trainers
        .ImageClassification(featureColumnName: "Image",
                                labelColumnName: "LabelAsKey",
                                validationSet: testDataView)
    .Append(mlContext.Transforms.Conversion.MapKeyToValue(outputColumnName: "PredictedLabel",
                                                          inputColumnName: "PredictedLabel"));

上面代碼中的重要一行是使用mlContext.MulticlassClassification.Trainers.ImageClassification分類訓練器的行,正如您所看到的,這是一個高級API,您只需要提供哪個列包含圖像,帶有標籤的列(要預測的列)和用於在訓練時計算質量度量的驗證數據集,以便模型在訓練時可以自我調整(更改內部超參數)。

在本質上,此模型訓練基於從默認體系結構(預先訓練的模型)學習的本地TensorFlow DNN遷移,例如Resnet V2 50。還可以通過配置可選的超參數來選擇要從中派生的超參數。

就這麼簡單,您甚至不需要進行圖像變換(調整大小、規格化等)。根據所使用的DNN架構,該框架在幕後進行所需的圖像轉換,因此您只需使用單個API即可。

可選使用高級超參數

高級用戶還有另一種重載方法,您還可以指定可選的超參數,例如epoch,batchSize,learningRate,特定的DNN架構,例如Inception v3或者Resnet v2101和其他典型的DNN參數,但大多數用戶都可以從簡化的API開始。

以下是如何使用高級DNN參數:

// 5.1 (OPTIONAL) Define the model's training pipeline by using explicit hyper-parameters

var options = new ImageClassificationTrainer.Options()
{
    FeatureColumnName = "Image",
    LabelColumnName = "LabelAsKey",
    // Just by changing/selecting InceptionV3/MobilenetV2/ResnetV250
    // you can try a different DNN architecture (TensorFlow pre-trained model).
    Arch = ImageClassificationTrainer.Architecture.MobilenetV2,
    Epoch = 50,       //100
    BatchSize = 10,
    LearningRate = 0.01f,
    MetricsCallback = (metrics) => Console.WriteLine(metrics),
    ValidationSet = testDataView
};

var pipeline = mlContext.MulticlassClassification.Trainers.ImageClassification(options)
        .Append(mlContext.Transforms.Conversion.MapKeyToValue(
            outputColumnName: "PredictedLabel",
            inputColumnName: "PredictedLabel"));

3. 訓練模型

為了開始訓練過程,您需要在構建的管道上運行Fit:

// 4. Train/create the ML model
ITransformer trainedModel = pipeline.Fit(trainDataView);

4. 評估模型

訓練完成後,利用測試數據集對模型進行質量評價。

Evaluate函數需要一個IDataView,其中包含通過調用Transform()從測試數據集生成的預測。

// 5. Get the quality metrics (accuracy, etc.)
IDataView predictionsDataView = trainedModel.Transform(testDataset);

var metrics = mlContext.MulticlassClassification.Evaluate(predictionsDataView, labelColumnName:"LabelAsKey", predictedLabelColumnName: "PredictedLabel");
ConsoleHelper.PrintMultiClassClassificationMetrics("TensorFlow DNN Transfer Learning", metrics);

最後,保存模型:

// Save the model to assets/outputs (You get ML.NET .zip model file and TensorFlow .pb model file)
mlContext.Model.Save(trainedModel, trainDataView.Schema, outputMlNetModelFilePath);

運行項目來訓練模型

您應該按照以下步驟來訓練您的模型:

在Visual Studio中將ImageClassification.Train設置為啟動項目在Visual Studio中按F5。幾秒鐘後,該過程將完成並保存一個新的ML.NET模型到文件assets/outputs/imageClassifier.zip5. 「終端用戶」應用中的使用模型GPU與CPU對模型的使用/評分對比

在使用/評分模型時,您也可以在CPU/GPU之間進行選擇,但是,如果使用GPU,您還需要確保運行模型的計算機/伺服器支持GPU。

設置評分/使用項目以使用GPU的方法與本readme.md開頭所述的方法相同,只需使用一個或另一個redist庫。

用於評分的示例控制臺應用程式

在示例的解決方案中,還有第二個項目名為ImageClassifcation.Predict。這個控制臺應用程式只需加載您定製的ML.NET模型,並以假設的最終用戶應用程式的方式執行一些樣本預測。

首先要做的是將生成的assets/outputs/imageClassifier.zip文件複製/粘貼到使用項目的inputs/MLNETModel文件夾中。

關於代碼,您首先需要加載在模型訓練應用執行期間創建的模型。

MLContext mlContext = new MLContext(seed: 1);
ITransformer loadedModel = mlContext.Model.Load(imageClassifierModelZipFilePath, out var modelInputSchema);

然後,您可以創建一個預測器引擎對象,並最終使用文件夾assets/inputs/images-for-predictions的第一個圖像進行一些樣本預測,其中只有一些圖像在訓練模型時沒有使用。

請注意,在評分時,只需要具有內存圖像的InMemoryImageData類型。

該圖像也可以通過任何其他通道傳輸,而不是從文件中加載。例如,這個解決方案中的ImageClassification.WebApp通過HTTP獲取將要用於預測的圖像。

var predictionEngine = mlContext.Model.CreatePredictionEngine<InMemoryImageData, ImagePrediction>(loadedModel);

//Predict the first image in the folder
IEnumerable<InMemoryImageData> imagesToPredict = LoadInMemoryImagesFromDirectory(
                                                        imagesFolderPathForPredictions, false);

InMemoryImageData imageToPredict = new InMemoryImageData
{
    Image = imagesToPredict.First().Image,
    ImageFileName = imagesToPredict.First().ImageFileName
};

var prediction = predictionEngine.Predict(imageToPredict);

// Get the highest score and its index
float maxScore = prediction.Score.Max();

Console.WriteLine($"Image Filename : [{imageToPredict.ImageFileName}], " +
                    $"Predicted Label : [{prediction.PredictedLabel}], " +
                    $"Probability : [{maxScore}] "
                    );

預測引擎接收InMemoryImageData類型的對象作為參數(包含2個屬性:Image和ImageFileName)。該模型不使用ImageFileName。您只需將它放在這裡,以便在顯示預測時可以將文件名列印出來。預測僅使用byte[] Image欄位中的圖像位。

然後,模型返回類型為ImagePrediction的對象,該對象包含所有圖像類/類型的PredictedLabel和所有Scores。

由於PredictedLabel已經是一個字符串,因此它將顯示在控制臺中。關於預測標籤的分數,我們只需要取最高的分數,即預測標籤的概率。

運行「最終用戶應用程式」項目以嘗試預測

您應該按照以下步驟來使用您的模型:

在Visual Studio中將「ImageClassification.Predict」設置為啟動項目在Visual Studio中按F5。幾秒鐘後,該過程將通過加載並使用自定義的imageClassifier.zip 模型來顯示預測。用於評分/推斷的ASP.NET Core web應用示例

在示例的解決方案中,還有另一個名為ImageClassification.WebApp的項目,它是一個ASP.NET Core web應用程式,允許用戶通過HTTP提交圖像,並使用內存中的圖像進行評分/預測。

此示例還使用了PredictionEnginePool,建議用於多線程和可擴展的應用程式。

您可以在下面看到該應用的屏幕截圖:


TensorFlow DNN遷移學習背景信息

這個示例應用程式正在重新訓練用於圖像分類的TensorFlow模型。您可能認為它與另一個示例非常相似 Image classifier using the TensorFlow Estimator featurizer。不過,內部的實現方式卻有很大的不同。在上述示例中,它使用的是「模型合成方法」,其中初始TensorFlow模型(即InceptionV3或ResNet)僅用於對圖像進行特徵化,並生成每個圖像的二進位信息,以供添加在頂部的另一個ML.NET分類器訓練器使用(例如LbfgsMaximumEntropy)。因此,即使該示例使用的是TensorFlow模型,您也只能使用ML.NET trainer進行訓練,您不會重新訓練新的TensorFlow模型,而是訓練ML.NET模型。這就是為什麼該示例的輸出只是一個ML.NET模型(.zip文件)。

與此相反,本例在本地基於遷移學習方法對新的TensorFlow模型進行重新訓練,再從指定的預訓練模型(Inception V3或ResNet)派生的新TensorFlow模型進行了訓練。

重要的區別在於,這種方法使用TensorFlowAPI進行內部再訓練,並創建一個新的TensorFlow模型(.pb)。然後,您使用的ML.NET.zip文件模型就像是新的重新訓練的TensorFlow模型的包裝器。這就是為什麼您還可以看到訓練後生成的新.pb文件的原因:


在下面的屏幕截圖中,您可以看到如何在Netron中看到重新訓練的TensorFlow模型(custom_retrained_model_based_on_InceptionV3.meta.pb),因為它是本機TensorFlow模型:

好處:

使用GPU進行訓練和推斷:當使用基於TensorFlow的本機DNN方法時,您可以使用CPU或GPU(如果可用)來獲得更好的性能(減少訓練和評分所需的時間)。

跨多個框架和平臺重用:由於您本機訓練了Tensorflow模型,除了能夠使用ML.NET 'wrapper'模型(.zip文件)運行/使用該模型之外,您還可以使用.pb Tensorflow凍結模型並在任何其他框架(如Python/Keras/Tensorflow)上運行它,或者Java/Android應用程式或任何支持TensorFlow的框架。

靈活性和性能:由於ML.NET是在Tensorflow層上進行內部再訓練的,因此ML.NET團隊將能夠進一步優化並採取多種方法,如在最後一層上進行訓練或跨Tensorflow模型在多個層上進行訓練,並獲得更好的質量水平。

相關焦點

  • Keras教程 | 基於遷移學習實現花卉圖像分類
    Application模塊Keras中的Application模塊中有一系列基於ImageNet的預訓練好的圖像分類模型,這些模型如下:XceptionVGG16VGG19ResNet50InceptionV3InceptionResNetV2MobileNet
  • 【乾貨】TensorFlow實戰——圖像分類神經網絡模型
    ▌訓練和分類在本教程中,我們將訓練一個圖像分類器來識別不同類型的花朵。 深度學習需要大量的訓練數據,所以我們需要大量的不同種類的花的圖像。值得慶幸的是,已經有人在收集和分類圖像方面做得非常出色,所以我們將使用整理好的數據集,採取一個現有的,完全訓練的圖像分類模型,並重新訓練模型的最後一層,來做我們想要的任務。 這種技術被稱為遷移學習(transfer learning)。
  • MobileNet教程(2):用TensorFlow搭建安卓手機上的圖像分類App
    接下來我們很快試一下看看模型是否能夠如預計般工作:python tensorflow/examples/label_image/label_image.py \  --graph=/tmp/output_graph.pb \  --labels=/tmp/output_labels.txt \  --image=/home/harvitronix/ml/blogs/
  • TensorFlow圖像分類教程
    (本文使用預先標記好的數據以提高效率)訓練:將標記好的數據(圖像)提供給模型。有一個工具將隨機抓取一批圖像,使用模型猜測每種花的類型,測試猜測的準確性,重複執行,直到使用了大部分訓練數據為止。最後一批未被使用的圖像用於計算該訓練模型的準確性。分類:在新的圖像上使用模型。例如,輸入:IMG207.JPG,輸出:雛菊。這個步驟快速簡單,且衡量的代價小。
  • Tensorflow學習(3)—— 遷移學習
    目前,並不是每一種機器學習任務都具有大樣本,因此如何在小樣本上訓練一個可靠的模型,也是機器學習領域的一個重點方向。
  • 【乾貨】快速上手圖像識別:用TensorFlow API實現圖像分類實例
    作者通過TensorFlow API快捷地實現一個命令行圖像分類例子,詳細介紹了如何按步驟下載模型、加載圖像、執行圖像識別命令。你不需要GPU,只要有一臺筆記本就可以按照作者的步驟進行操作,並最終完成圖像識別任務。教程非常方便快捷,讀完本文之後相信你能秒秒鐘實現一個圖像分類任務。專知內容組編輯整理。
  • 圖像分類任務中,Tensorflow 與 Keras 到底哪個更厲害?
    他們提出了一個名為TPU的獨立實例,它具有最強大的功率驅動計算能力來處理tensorflow的深度學習模型。是時候做一個了!我現在將幫助你使用tensorflow創建一個功能強大的圖像分類器。等等!什麼是分類器?這只是一個簡單的問題,你向你的tensorflow代碼詢問,給定的圖像是玫瑰還是鬱金香。所以,首先的首先,讓我們在機器上安裝tensorflow。
  • 在瀏覽器中使用TensorFlow.js和Python構建機器學習模型(附代碼)
    這就是為什麼構建不僅能夠訓練機器學習模型而且能夠在瀏覽器本身中「學習」或「遷移學習」的應用程式是有意義的。在本文中,我們將首先了解使用TensorFlow.js的重要性及其它的不同組件。然後,我們將深入討論使用TensorFlow.js在瀏覽器中構建我們自己的機器學習模型。然後我們將構建一個應用程式,來使用計算機的網絡攝像頭檢測你的身體姿勢!
  • 教程 | 從零開始:TensorFlow機器學習模型快速部署指南
    如果你已使用 TensorFlow 或 Caffe 等深度學習框架訓練好了 ML 模型,該模型可以作為 demo。如果你更喜歡輕量級的解決方案,請閱讀本文。GitHub 地址:https://github.com/hiveml/simple-ml-serving其中包含的條目有:檢查 TensorFlow 安裝:https://github.com/hiveml/simple-ml-serving/blob/master/test/test_tensorflow.sh利用 stdin 運行在線分類
  • 獨家 | 在瀏覽器中使用TensorFlow.js和Python構建機器學習模型(附代碼)
    這就是為什麼構建不僅能夠訓練機器學習模型而且能夠在瀏覽器本身中「學習」或「遷移學習」的應用程式是有意義的。 在本文中,我們將首先了解使用TensorFlow.js的重要性及其它的不同組件。然後,我們將深入討論使用TensorFlow.js在瀏覽器中構建我們自己的機器學習模型。然後我們將構建一個應用程式,來使用計算機的網絡攝像頭檢測你的身體姿勢!
  • Tensorflow 2.0到底好在哪裡?
    上圖是一個 TensorFlow 筆記本,用於訓練基本的深度神經網絡對 MNIST 手寫數字圖像進行分類。這是在谷歌 Colab 上運行的 TensorFlow 示例筆記本。TensorFlow.js(https://www.tensorflow.org/js)是一個用於在 JavaScript 中開發和訓練機器學習模型並在瀏覽器或 Node.js 中部署它們的庫。還有一個基於 TensorFlow.js 的高級庫 ml5.js(https://ml5js.org/),使用戶無需直接面對複雜的張量和優化器。
  • 在TensorFlow中使用MobileNet,創建在手機上運行的快速圖像分類器
    我們從一些不同的地方收集數據:隨機從Coastline公司的駕駛數據集中抽取4,000張明顯是道路的圖像隨機從ImageNet數據集中抽取2,000張明顯不是道路的圖像從網上抽取3,000張不太明顯的不是道路的圖像,以確保分類器不只是學習天空或不是天空從網上採樣1,000張不太明顯的道路景觀圖像,以確保分類器不把Coastline
  • TensorFlow 2.0到底怎麼樣?簡單的圖像分類任務探一探
    我們的任務是要建立可以分辨航拍圖像中是否含有樹狀仙人掌的分類器。這是 Cactus Aerial Photos 數據集的修改版,Kaggle 將每張圖的大小調整為 32*32 像素。含有仙人掌的示例遷移學習可以使用現有的預訓練圖像分類模型來加快訓練速度,它只需要重新訓練最後一個分類層,並藉此確定圖像所屬類別即可。
  • 在瀏覽器中使用Keras MobileNet模型以及Tensorflow.js進行圖片分類
    具體的實現可以參見:https://github.com/Gogul09/mobile-net-projectsPython中的基礎MobileNet神經網絡模型在Keras中,MobileNet存在applications模塊中。如果要預測的類別在ImageNet類別中可用,Keras使用MobileNet提供現成的圖像分類。
  • 基於TensorFlow的深度學習實戰
    前面的Hello world應用並沒有訓練模型,接下來介紹一個邏輯回歸問題與模型。注意在TensorFlow代碼中並沒有實現最小二乘法等算法,也沒有if-else來控制代碼邏輯,完全是由數據驅動並且根據梯度下降算法動態調整Loss值學習出來的。這樣我們即使換了其他數據集,甚至換成圖像分類等其他領域的問題,無需修改代碼也可以由機器自動學習,這也是神經網絡和TensorFlow強大的地方。
  • 用TensorFlow訓練一個目標檢測器(手把手教學版)
    在文章中作者把檢測器的訓練流程進行了簡要介紹,但過於粗略,初學者難以跟著實現。為了方便初學者,我把詳細的步驟整理了一下,下面我們一起來學習一下吧!這篇文章主要還是學習訓練目標檢測,本文以檢測浣熊為例,其實也可以用自己的數據集,檢測其他的目標,比如 檢測海上船隻,檢測天空的飛機,檢測小貓小狗等等。
  • 乾貨 | tensorflow模型導出與OpenCV DNN中使用
    、實現圖像與視頻場景中的其模型導入與加載的相關API支持以下深度學習框架tensorflow - readNetFromTensorflowcaffe - readNetFromCaffepytorch - readNetFromTorchdarknet - readNetFromDarknetOpenCV3.4.1
  • 深度學習入門篇——手把手教你用 TensorFlow 訓練模型
    最近筆者終於跑通TensorFlow Object Detection API的ssd_mobilenet_v1模型,這裡記錄下如何完整跑通數據準備到模型使用的整個過程,相信對自己和一些同學能有所幫助。
  • 【TensorFlow實戰筆記】 遷移學習實戰--卷積神經網絡CNN-Inception-v3模型
    1.所謂遷移學習,就是將一個問題上訓練好的模型通過簡單的調整使其適用於一個新的問題。模型 : https://storage.googleapis.com/download.tensorflow.org/models/inception_dec_2015.zip3.flower_photos: http://download.tensorflow.org/example_images/flower_photos.tgz
  • 以95%的精度構建CNN模型
    遷移學習遷移學習是通過從已經學習的相關任務中遷移知識來改進新任務中學習的方法。用簡單的話來說,遷移學習的思想是,我們使用從圖像分類任務中預先訓練的模型,而不是從頭開始訓練新模型。為什麼要使用遷移學習?遷移學習是一種優化,是節省時間或獲得更好性能的捷徑。通常,在模型開發和評估之前,在領域中使用遷移學習不會有好處。