從我們訓練的模型中得到的坑洞預測和置信度分數:初始算法選擇和超參數優化是我個人不喜歡做的活動。如果你像我一樣,那么也許你會喜歡自動機器學習(AutoML),一種我們可以讓腳本為我們完成這些耗時的ML任務的技術。Azure機器學習(AML)是一項云服務,其功能包括準備和創建數據集、訓練模型以及將其部署為web服務變得更加容易。最近,AML團隊發布了AutoML功能,供公眾預覽。今天,我們將使用此功能訓練一個目標檢測模型,以識別道路上的凹坑。在這篇文章中,我將簡要回顧一些AML和目標檢測的概念,因此你不必完全熟悉它們就可以進行后續操作。本教程主要基于Azure中的這個示例,你可以查看我在這里編寫的Jupyter筆記本:https://github.com/dmesquita/azureml-automl-potholes-object-detection酷,讓我們開始吧!
我們該怎么辦?
對象檢測數據集很有趣,因為它們由表格數據(邊界框的注釋)和圖像數據(.png、.jpeg等)組成。COCO格式是對象檢測數據集的一種流行格式,我們將使用此格式下載坑洞數據集:https://public.roboflow.com/object-detection/pothole。Azure機器學習使用TABLAR DATASET格式,因此我們需要做的第一件事是將COCO轉換為TABLAR DATASET。轉換后,我們將選擇一種對象檢測算法,并最終訓練模型。1-準備數據集
我從Roboflow那里得到了數據集。它有665張標有坑洞的道路圖片,由Atikur Rahman Chitholian創作并分享,作為其論文的一部分。Roboflow團隊按照70/20/10將數據集劃分為訓練-驗證-測試集。每個拆分都有兩個主要組件:- _annotations.coco.json,一個包含images、categories和annotations的json文件
- 圖像本身(.jpg文件)
- images:包含有關數據集圖像的信息(id、文件名、大小等)
- categories:邊界框類別的名稱和id
- annotations:包含有關對象的信息,包括邊界框坐標(在此數據集中,它們位于絕對坐標)、對象的圖像id和類別id
fromazureml.coreimportWorkspace workspace=Workspace.from_config()#如果你在一個aml計算實例上運行notebook,這是可行的 default_datastore=workspace.get_default_datastore() datastore_name=default_datastore.name 注釋采用COCO格式(JSON),但tablerDataSet要求注釋采用JSON行。tablerDataset具有相同的元數據,但以不同的鍵組織。以下是用于對象檢測的TablerDataset的外觀:
{ "image_url":"AmlDatastore://data_directory/../Image_name.image_format", "image_details":{ "format":"image_format", "width":"image_width", "height":"image_height" }, "label":[ { "label":"class_name_1", "topX":"xmin/width", "topY":"ymin/height", "bottomX":"xmax/width", "bottomY":"ymax/height", "isCrowd":"isCrowd" }, { "label":"class_name_2", "topX":"xmin/width", "topY":"ymin/height", "bottomX":"xmax/width", "bottomY":"ymax/height", "isCrowd":"isCrowd" }, "..." ] } 幸運的是,微軟工程師編寫了一個腳本來轉換COCO:https://github.com/Azure/azureml-examples/blob/1a41978d7ddc1d1f831236ff0c5c970b86727b44/python-sdk/tutorials/automl-with-azureml/image-object-detection/coco2jsonl.py此文件的image_url鍵需要指向我們正在使用的數據存儲中的圖像文件(默認)。我們使用coco2jsonl的base_url參數指定。
#從coco文件生成訓練jsonl文件 !pythoncoco2jsonl.py --input_coco_file_path"./potholeObjects/train/_annotations.coco.json" --output_dir"./potholeObjects/train"--output_file_name"train_pothole_from_coco.jsonl" --task_type"ObjectDetection" --base_url"AmlDatastore://{datastore_name}/potholeObjects/train/" 我們將對驗證集運行相同的命令?,F在,下一步是將文件上傳到數據存儲,并在AML中創建數據集。不要將數據集與數據存儲混淆。數據集是版本控制的打包數據對象,通?;跀祿鎯χ械奈募摻?。我們將從JSON行文件創建數據集。
fromazureml.coreimportDataset fromazureml.data.datapathimportDataPath fromazureml.dataimportDataType #上傳文件到數據存儲 Dataset.File.upload_directory( src_dir="./potholeObjects/train/",target=DataPath(default_datastore,"/potholeObjects/train"),show_progress=True ) training_dataset_name="potholeObjectesTrainingDataset" #創建數據集 training_dataset=Dataset.Tabular.from_json_lines_files( path=DataPath(default_datastore,"/potholeObjects/train/train_pothole_from_coco.jsonl"), set_column_types={"image_url":DataType.to_stream(default_datastore.workspace)}, ) #在工作區中注冊數據集 training_dataset=training_dataset.register( workspace=workspace,name=training_dataset_name ) 對于訓練和驗證拆分,也將這樣做。如果一切順利,你可以看到AML內部的圖像預覽。AML工作區內的數據集預覽
2.進行實驗
在AML內部,你運行的一切都稱為實驗。要使用AutoML訓練模型,你將創建一個實驗,指向它假定運行的計算目標,并提供AutoML參數的配置。讓我們首先創建實驗并從工作區獲取計算機實例:fromazureml.coreimportExperiment experiment_name="pothole-yolov5-model" experiment=Experiment(workspace,name=experiment_name) compute_target=workspace.compute_targets['gpu-computer']#給計算實例的名稱 在這里,我將使用yolov5默認參數運行實驗。你需要提供超參數、計算目標、訓練數據和驗證數據(如示例所示,驗證數據集是可選的)。
fromazureml.automl.core.shared.constantsimportImageTask fromazureml.train.automlimportAutoMLImageConfig fromazureml.train.hyperdriveimportGridParameterSampling,choice automl_config_yolov5=AutoMLImageConfig( task=ImageTask.IMAGE_OBJECT_DETECTION, compute_target=compute_target, training_data=training_dataset, validation_data=validation_dataset, hyperparameter_sampling=GridParameterSampling({"model_name":choice("yolov5")}), iterations=1, ) 現在可以提交實驗了:
automl_image_run=experiment.submit(automl_config_yolov5) 你可以使用Workspace web界面監控實驗:以下是Microsoft教程中的一個示例:
fromazureml.automl.core.shared.constantsimportImageTask fromazureml.train.automlimportAutoMLImageConfig fromazureml.train.hyperdriveimportBanditPolicy,RandomParameterSampling fromazureml.train.hyperdriveimportchoice,uniform parameter_space={ "model":choice( { "model_name":choice("yolov5"), "learning_rate":uniform(0.0001,0.01), "model_size":choice("small","medium"),#模型相關 #'img_size':choice(640,704,768),#特定型號;可能需要有大內存的GPU }, { "model_name":choice("fasterrcnn_resnet50_fpn"), "learning_rate":uniform(0.0001,0.001), "optimizer":choice("sgd","adam","adamw"), "min_size":choice(600,800),#模型相關 #'warmup_cosine_lr_warmup_epochs':choice(0,3), }, ), } tuning_settings={ "iterations":10, "max_concurrent_iterations":2, "hyperparameter_sampling":RandomParameterSampling(parameter_space), "early_termination_policy":BanditPolicy( evaluation_interval=2,slack_factor=0.2,delay_evaluation=6 ), } automl_image_config=AutoMLImageConfig( task=ImageTask.IMAGE_OBJECT_DETECTION, compute_target=compute_target, training_data=training_dataset, validation_data=validation_dataset, **tuning_settings, )
3-將預測可視化
這個yolov5模型是使用Pytorch訓練的,因此我們可以下載模型并使用Jupyter筆記本檢查預測。我的花了56分鐘訓練。獲取模型需要做的第一件事是注冊工作區中的最佳運行,以便訪問模型。best_child_run=automl_image_run.get_best_child() model_name=best_child_run.properties["model_name"] model_output_path=best_child_run.properties["model_output_path"] #從最佳運行中注冊模型 model=best_child_run.register_model( model_name=model_name,model_path=model_output_path ) 現在我們可以下載模型了并運行推斷。為此,我們將使用azureml contrib automl dnn vision包中的代碼:
fromazureml.contrib.automl.dnn.vision.common.model_export_utilsimportload_model,run_inference fromazureml.contrib.automl.dnn.vision.object_detection_yolo.writers.scoreimport_score_with_model TASK_TYPE='image-object-detection' model_settings={"img_size":640,"model_size":"medium","box_score_thresh":0.1,"box_iou_thresh":0.5} model_wrapper=load_model(TASK_TYPE,'model.pt',**model_settings) sample_image="./img-23_jpg.rf.e6aa0daf83e72ccbf1ea10eb6a6ab3bd.jpg" withopen(sample_image,'rb')asf: bytes_img=f.read() model_response=run_inference(model_wrapper,bytes_img,_score_with_model) 我使用Microsoft教程中的代碼來可視化邊界框。以下是測試圖像的結果:從我們訓練的模型中得到的坑洞預測和置信度分數:酷吧?
最后
Azure機器學習是一個很好的工具,可以讓你開始機器學習(在我們的例子中是深度學習),因為它隱藏了很多復雜性。你可以在Jupyter筆記本上查看所有代碼:https://github.com/dmesquita/azureml-automl-potholes-object-detection。管道中的下一步是將模型部署為web服務。如果你有興趣,也可以使用Microsoft教程檢查如何做到這一點:https://github.com/dmesquita/azureml-automl-potholes-object-detection。參考引用Pothole Dataset. Shared By. Atikur Rahman Chitholian. November 2020. License. ODbL v1.0 審核編輯 :李倩
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
機器學習
+關注
關注
66文章
8377瀏覽量
132410 -
訓練模型
+關注
關注
1文章
35瀏覽量
3802
原文標題:AutoML:訓練模型以識別凹坑
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
AI模型是如何訓練的?訓練一個模型花費多大?
電子發燒友網報道(文/李彎彎)在深度學習中,經常聽到一個詞“模型訓練”,但是模型是什么?又是怎么訓練的?在人工智能中,面對大量的數據,要在雜亂無章的內容中,準確、容易地
【大語言模型:原理與工程實踐】大語言模型的預訓練
增長。DeepMind在相關論文中指出,模型大小和訓練Token數應以相似速率增長,以確保最佳性能。因此,構建與模型規模相匹配的預訓練數據至
發表于 05-07 17:10
Pytorch模型訓練實用PDF教程【中文】
本教程以實際應用、工程開發為目的,著重介紹模型訓練過程中遇到的實際問題和方法。在機器學習模型開發中,主要涉及三大部分,分別是數據、模型和損失
發表于 12-21 09:18
node.js在訓練好的神經網絡模型識別圖像中物體的方法
如何在Node.js環境下使用訓練好的神經網絡模型(Inception、SSD)識別圖像中的物體。
AutoML新書:AutoML系統背后的基礎知識
傳統上,術語AutoML用于描述模型選擇和/或超參數優化的自動化方法。這些方法適用于許多類型的算法,例如隨機森林,梯度提升機器(gradient boosting machines),神經網絡等
Waymo用AutoML自動生成機器學習模型
Waymo十周年之際,發布了自動駕駛機器學習模型的構建思路,原來很多內部架構是由 AutoML 完成的。
關于AutoML的完整資源列表
在傳統深度學習的模型構建中,主要包含以下步驟:數據處理、特征工程、模型架構選擇、超參數優化、模型后處理、結果分析。這些步驟往往會耗費大量人力和時間。在 AutoML 中,則可以對大部分
AutoML技術提高NVIDIA GPU和RAPIDS速度
AutoGluon AutoML 工具箱使培訓和部署尖端技術變得很容易 復雜業務問題的精確機器學習模型。此外, AutoGluon 與 RAPIDS 的集成充分利用了 NVIDIA GPU 計算的潛力,使復雜模型的
AI模型是如何訓練的?訓練一個模型花費多大?
電子發燒友網報道(文/李彎彎)在深度學習中,經常聽到一個詞“模型訓練”,但是模型是什么?又是怎么訓練的?在人工智能中,面對大量的數據,要在雜亂無章的內容中,準確、容易地
使用 NVIDIA TAO 工具套件和預訓練模型加快 AI 開發
NVIDIA 發布了 TAO 工具套件 4.0 。該工具套件通過全新的 AutoML 功能、與第三方 MLOPs 服務的集成以及新的預訓練視覺 AI 模型提高開發者的生產力。該工具套件的企業版現在
卷積神經網絡模型訓練步驟
卷積神經網絡模型訓練步驟? 卷積神經網絡(Convolutional Neural Network, CNN)是一種常用的深度學習算法,廣泛應用于圖像識別、語音識別、自然語言處理等諸多
評論