Yolo v8–2(Predicting&Training)

Tang Hsiang
Sep 23, 2023

--

Photo by NASA

Yolo v8–I(Installation)

承接上一篇,Yolo v8有兩種操作的指令,你可以自行撰寫一個Python檔案,並且去執行他,或是使用命令列介面Command Line Interface (CLI)來操作。這邊我們統一打開終端機(Terminal)來操作。

打開 terminal

輸入 yolo predict model=yolov8n.pt source='https://ultralytics.com/images/bus.jpg'

這邊他會從官方下載一張bus.jpg的圖片檔到你的電腦裡面,並且透過yolov8n這個模型去對這個圖片做預測(predict),預測後的結果會儲存在 runs/detect/predict的個資料夾裡面(預設會在你的使用者那層的資料夾)

原圖:

透過 Yolov8n預測出來的結果

以下是Yolo使用訓練的模型種類,總計5種

Yolo Detection Model

如果是做輕量的訓練,選擇YOLOv8n作為模型訓練模型即可。Yolo基本的圖像預測就到這邊結束了。

接著我們來做影像的模型訓練,也就是大家耳熟能詳的機器學習(Machine Learning),我們要透過訓練我們的模型,讓物件偵測的精準度提高到符合我們的預期。

官方的文件訓練檔案為coco.yaml 點擊這裡可以看到官方文件檔案,這裡我們拿他訓練好的yaml檔案作為我們此次的訓練的範例。

模型的訓練可以使用CPU GPU 或是M1晶片,請在終端機輸入以下指令:

使用CPU訓練: yolo detect train data=coco128.yaml model=yolov8n.pt epochs=100 imgsz=640 device=cpu

請將後面的arguments 使用裝置(device)修改。

1. 使用GPU訓練(預設): device=0

2. 使用複數個GPU: device=0,1

3. 使用M1或M2晶片:device=mps

以下是常見的arguments

model:使用的訓練模型

data:訓練的資料集

epoch:機器學習訓練時的迭代(訓練)次數

patience:

Patience 在機器學習訓練中通常指的是一種用於控制早停止(early stopping)的技術,特別是在監控模型性能時的一個參數。早停止是一種防止過度擬合(overfitting)的技術,它允許在模型在驗證數據集上的性能不再改善時提前停止訓練,以避免浪費計算資源並保持模型的泛化能力。

具體來說,patience 指的是當模型的性能在連續的一定次數的迭代中未顯著改善時,停止訓練。這個數字通常是一個超參數,你可以在訓練過程中設置它。當模型的性能在 patience次迭代中未改善時,訓練過程將被提前停止。

例如,假設你將 patience 設置為5,這意味著如果模型的性能在連續的5個迭代中都未改善,則訓練將停止。這有助於避免過度擬合,因為一旦模型在驗證數據集上的性能不再提高,繼續訓練可能會使模型過度擬合訓練數據。

Patience 的值需要根據具體的任務和數據來調整,通常是通過實驗和監控模型性能來確定最佳的值。較大的 patience 值意味著模型將有更多的機會在性能上改進,但也可能導致訓練時間過長。較小的 patience 值可能會使模型提前停止,因此需要謹慎選擇。

上文中提到的過度擬和(overfitting)的概念,我們可以使用一個生活中的例子來解釋:

假設你正在學習如何駕駛汽車,並且你計劃參加駕駛測試以獲得駕照。你決定練習駕駛,所以你去了一個空曠的停車場,這個停車場有許多橙色錐形交通錐。你開始練習,試圖在這些錐形交通錐之間進行靈活的駕駛。

在一開始,你可能會開得很小心,並試圖在每個錐形錐之間保持相等的距離。然而,隨著時間的推移,你可能開始在這個停車場內多次練習,並且你開始非常熟練。這時,你可能會變得過度自信,開始更快速地駕駛,並且可能開始忽略錐形錐的位置。

這就是過度擬合的一個例子:

  1. 適應訓練數據:一開始,你的駕駛行為受到了你的訓練數據(停車場內的錐形錐)的影響。你學會了如何在這些錐形錐之間駕駛,就像模型在訓練數據上學到了如何進行預測。
  2. 過度自信:隨著時間的推移,你變得過度自信,認為你可以在不考慮錐形錐的情況下駕駛。這就像模型在訓練數據上表現得很好,但無法泛化(Generalization)到新數據上。
  3. 失去泛化能力:當你在駕駛測試中遇到了不同的路況或交通情況時,你可能無法適應,因為你已經過度擬合了停車場的特定情境。這就像模型在新數據上表現不佳,因為它過度擬合了訓練數據,無法適應新數據。

在機器學習中,過度擬合是指模型在訓練數據上表現得很好,但在新數據上表現不佳的現象。為了避免過度擬合,我們通常需要使用正則化技術、更多的訓練數據,或者選擇更簡單的模型,以確保模型能夠更好地泛化到新數據。

以上是參數名詞解釋,看完之後,模型應該也差不多訓練完畢了。訓練過程如下,並保存到 run/detect/train

至於模型數據的解釋我之後會再額外開一篇文詳細說明,這裡不多做贅述。

點開train的資料夾後可以看到以下文件:

可以看到權重(weights)和視覺化(visualization)過後的資料,例如混淆矩陣(confusion matrix),PR曲線(PR curve)等等。

os:如果你嫌訓練太久,也可以使用Google Colab的T4 GPU來幫你做訓練(訓練速度海放M1晶片上百條街,我在模型訓練時都用這個,因為買不起T4顯卡QAQ)

以上就是今天的內容,下一章預計會講解如何對為分組資料做標記(Labeling),希望今天內容可以幫助到大家。

--

--