愛站網(wǎng)新網(wǎng)址是多少/蝸牛精靈seo
簡介
這篇博客,主要給大家講解我們在訓(xùn)練yolov5時(shí)生成的結(jié)果文件中各個(gè)圖片及其中指標(biāo)的含義,幫助大家更深入的理解,以及我們在評估模型時(shí)和發(fā)表論文時(shí)主要關(guān)注的參數(shù)有那些。本文通過舉例訓(xùn)練過程中的某一時(shí)間的結(jié)果來幫助大家理解,大家閱讀過程中如有任何問題可以在評論區(qū)提問出來,我會(huì)幫助大家解答。首先我們來看一個(gè)在一次訓(xùn)練完成之后都能生成多少個(gè)文件如下圖所示,下面的文章講解都會(huì)圍繞這個(gè)結(jié)果文件來介紹。
評估用的數(shù)據(jù)集?
上面的訓(xùn)練結(jié)果,是根據(jù)一個(gè)檢測飛機(jī)的數(shù)據(jù)集訓(xùn)練得來,其中只有個(gè)標(biāo)簽就是飛機(jī),對于這種單標(biāo)簽的數(shù)據(jù)集,其實(shí)我們可以將其理解為一個(gè)二分類任務(wù),
一種情況->檢測為飛機(jī),另一種情況->不是飛機(jī)。
結(jié)果分析?
我們可以從結(jié)果文件中看到其中共有文件22個(gè),后9張圖片是根據(jù)我們訓(xùn)練過程中的一些檢測結(jié)果圖片,用于我們可以觀察檢測結(jié)果,有哪些被檢測出來了,那些沒有被檢測出來,其不作為指標(biāo)評估的文件。?????????
Weights文件夾
我們先從第一個(gè)weights文件夾來分析,其中有兩個(gè)文件,分別是best.pt、last.pt,其分別為訓(xùn)練過程中的損失最低的結(jié)果和模型訓(xùn)練的最后一次結(jié)果保存的模型。
?然后我來說兩個(gè)比較不重要的yaml文件,其保存了我們訓(xùn)練過程中的一些參數(shù)如下->
hyp.yaml
第二個(gè)文件是args.yaml文件,其中主要保存一些我們訓(xùn)練時(shí)指定的參數(shù),內(nèi)容如下所示。
lr0: 0.01
lrf: 0.01
momentum: 0.937
weight_decay: 0.0005
warmup_epochs: 3.0
warmup_momentum: 0.8
warmup_bias_lr: 0.1
box: 0.05
cls: 0.5
cls_pw: 1.0
obj: 1.0
obj_pw: 1.0
iou_t: 0.2
anchor_t: 4.0
fl_gamma: 0.0
hsv_h: 0.015
hsv_s: 0.7
hsv_v: 0.4
degrees: 0.0
translate: 0.1
scale: 0.5
shear: 0.0
perspective: 0.0
flipud: 0.0
fliplr: 0.5
mosaic: 1.0
mixup: 0.0
copy_paste: 0.0
?
opt.yaml
這個(gè)文件里面包含了我們所有的參數(shù),上面的yaml文件只包含了訓(xùn)練過程中的超參數(shù),但是還有一些其他的參數(shù)類似于數(shù)據(jù)集的地址,權(quán)重地址,項(xiàng)目名稱等一系列設(shè)置性參數(shù),內(nèi)容如下->
weights: yolov5n.pt
cfg: models/yolov5n.yaml
data: Construction Site Safety.v30-raw-images_latestversion.yolov8\data.yaml
hyp:lr0: 0.01lrf: 0.01momentum: 0.937weight_decay: 0.0005warmup_epochs: 3.0warmup_momentum: 0.8warmup_bias_lr: 0.1box: 0.05cls: 0.5cls_pw: 1.0obj: 1.0obj_pw: 1.0iou_t: 0.2anchor_t: 4.0fl_gamma: 0.0hsv_h: 0.015hsv_s: 0.7hsv_v: 0.4degrees: 0.0translate: 0.1scale: 0.5shear: 0.0perspective: 0.0flipud: 0.0fliplr: 0.5mosaic: 1.0mixup: 0.0copy_paste: 0.0
epochs: 200
batch_size: 16
imgsz: 640
rect: false
resume: false
nosave: false
noval: false
noautoanchor: false
noplots: false
evolve: null
bucket: ''
cache: null
image_weights: false
device: '0'
multi_scale: false
single_cls: false
optimizer: SGD
sync_bn: false
workers: 0
project: runs\train
name: exp
exist_ok: false
quad: false
cos_lr: false
label_smoothing: 0.0
patience: 100
freeze:
- 0
save_period: -1
seed: 0
local_rank: -1
entity: null
upload_dataset: false
bbox_interval: -1
artifact_alias: latest
save_dir: runs\train\exp45
?
events.out.tfevents.1702789209.WIN-4OLTEIJCBBM.13772.0文件
這個(gè)文件是一個(gè)TensorBoard日志文件。雖然TensorBoard起初是為TensorFlow設(shè)計(jì)的,但它也可以與PyTorch一起使用,因?yàn)镻yTorch有一個(gè)叫 tensorboardX
的庫,允許PyTorch生成TensorBoard兼容的事件文件。
這樣的文件用于記錄訓(xùn)練過程中的各種指標(biāo),比如損失、準(zhǔn)確率、其他統(tǒng)計(jì)數(shù)據(jù),可以通過TensorBoard來可視化這些指標(biāo),以監(jiān)控和分析模型的訓(xùn)練進(jìn)度和性能。
?
混淆矩陣(ConfusionMatrix)
第三個(gè)文件就是混淆矩陣,大家都應(yīng)該聽過這個(gè)名字,其是一種用于評估分類模型性能的表格形式。它以實(shí)際類別(真實(shí)值)和模型預(yù)測類別為基礎(chǔ),將樣本分類結(jié)果進(jìn)行統(tǒng)計(jì)和匯總。
對于二分類問題,混淆矩陣通常是一個(gè)2×2的矩陣,包括真陽性(True Positive, TP)、真陰性(True Negative, TN)、假陽性(False Positive, FP)和假陰性(False Negative, FN)四個(gè)元素。
True_Label = [1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1 ,0, 1, 0 , 1 , 0, 0 , 1]
Predict_Label = [0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1 ,0 , 0 , 1 , 0, 0 , 1, 0]
我們來分析這個(gè)圖,其每個(gè)格子代表的含義我在圖片上標(biāo)注了出來,下面我們來拿一個(gè)例子來幫助大家來理解這個(gè)混淆矩陣。
假設(shè)我們的數(shù)據(jù)集預(yù)測為飛機(jī)標(biāo)記為數(shù)字0、預(yù)測不為飛機(jī)標(biāo)記為1,現(xiàn)在假設(shè)我們在模型的訓(xùn)練的某一批次種預(yù)測了20次其真實(shí)結(jié)果和預(yù)測結(jié)果如下所示。?
其中True_Label代表真實(shí)的標(biāo)簽,Predict_Label代表我們用模型預(yù)測的標(biāo)簽。
那么我們可以進(jìn)行對比產(chǎn)生如下分析
- 6個(gè)樣本的真實(shí)標(biāo)簽和預(yù)測標(biāo)簽都是0(真陰性,True Negative)。
- 1個(gè)樣本的真實(shí)標(biāo)簽是0,但預(yù)測標(biāo)簽是1(假陽性,False Positive)。
- 8個(gè)樣本的真實(shí)標(biāo)簽是1,但預(yù)測標(biāo)簽是0(假陰性,False Negative)。
- 5個(gè)樣本的真實(shí)標(biāo)簽和預(yù)測標(biāo)簽都是1(真陽性,True Positive)。
下面根據(jù)我們的分析結(jié)果,我們就能夠畫出這個(gè)預(yù)測的混淆矩陣,
由此我們就能得到那一批次的混淆矩陣,我們的最終結(jié)果生成的混淆矩陣可以理解為多個(gè)混淆矩陣的統(tǒng)計(jì)結(jié)果。?
計(jì)算mAP、Precision、Recall
在講解其它的圖片之前我們需要來計(jì)算三個(gè)比較重要的參數(shù),這是其它圖片的基礎(chǔ),這里的計(jì)算還是利用上面的某一批次舉例的分析結(jié)果。
-
精確度(Precision):預(yù)測為正的樣本中有多少是正確的,Precision = TP / (TP + FP) = 5 / (5 + 1) = 5/6 ≈ 0.833
-
召回率(Recall):真實(shí)為正的樣本中有多少被正確預(yù)測為正,Recall = TP / (TP + FN) = 5 / (5 + 8) ≈ 0.385
-
F1值(F1-Score):綜合考慮精確度和召回率的指標(biāo),F1 = 2 * (Precision * Recall) / (Precision + Recall) = 2 * (0.833 * 0.385) / (0.833 + 0.385) ≈ 0.526
-
準(zhǔn)確度(Accuracy):所有樣本中模型正確預(yù)測的比例,Accuracy = (TP + TN) / (TP + TN + FP + FN) = (5 + 6) / (5 + 6 + 1 + 8) ≈ 0.565
-
平均精確度(Average Precision, AP):用于計(jì)算不同類別的平均精確度,對于二分類問題,AP等于精確度。AP = Precision = 0.833
-
平均精確度(Mean Average Precision, mAP):多類別問題的平均精確度,對于二分類問題,mAP等于AP(精確度),所以mAP = AP = 0.833
這里需要講解的主要是AP和MAP如果是多分類的問題,AP和mAP怎么計(jì)算,首先我們要知道AP的全稱就是Average Precision,平均精度所以我們AP的計(jì)算公式如下?
mAP就是Mean Average Precision,計(jì)算如下,計(jì)算每一個(gè)沒別的AP進(jìn)行求平均值處理就是mAP。
F1_Curve?
F1_Curve這個(gè)文件,我們點(diǎn)擊去的圖片的標(biāo)題是F1-Confidence Curve它顯示了在不同分類閾值下的F1值變化情況。
我們可以這么理解,先看它的橫縱坐標(biāo),橫坐標(biāo)是置信度,縱坐標(biāo)是F1-Score,F1-Score在前面我們以及講解過了,那什么是置信度?
置信度(Confidence)->在我們模型的識(shí)別過程中會(huì)有一個(gè)概率,就是模型判定一個(gè)物體并不是百分百判定它是屬于某一個(gè)分類,它會(huì)給予它以個(gè)概率,Confidence就是我們設(shè)置一個(gè)閾值,如果超過這個(gè)概率那么就確定為某一分類,假如我模型判定一個(gè)物體由0.7的概率屬于飛機(jī),此時(shí)我們設(shè)置的閾值如果為0.7以下那么模型就會(huì)輸出該物體為飛機(jī),如果我們設(shè)置的閾值大于0.7那么模型就不會(huì)輸出該物體為飛機(jī)。
F1-Confidence Curve就是隨著F1-Score隨著Confience的逐漸增高而變化的一個(gè)曲線。
Labels
Labels圖片代表每個(gè)檢測到的目標(biāo)的類別和邊界框信息。每個(gè)目標(biāo)都由一個(gè)矩形邊界框和一個(gè)類別標(biāo)簽表示,我們逆時(shí)針來看這個(gè)圖片!!!
- 目標(biāo)類別:該像素點(diǎn)所檢測到的目標(biāo)類別,例如飛機(jī)等。
- 目標(biāo)位置:該像素點(diǎn)所檢測到的目標(biāo)在圖像中的位置,即該像素點(diǎn)在圖像中的坐標(biāo)。
- 目標(biāo)大小:該像素點(diǎn)所檢測到的目標(biāo)的大小,即該像素點(diǎn)所覆蓋的區(qū)域的大小。
- 其他信息:例如目標(biāo)的旋轉(zhuǎn)角度等其他相關(guān)信息。
labels_correlogram
labels_correlogram是一個(gè)在機(jī)器學(xué)習(xí)領(lǐng)域中使用的術(shù)語,它指的是一種圖形,用于顯示目標(biāo)檢測算法在訓(xùn)練過程中預(yù)測標(biāo)簽之間的相關(guān)性。
具體來說,labels_correlogram是一張顏色矩陣圖,它展示了訓(xùn)練集數(shù)據(jù)標(biāo)簽之間的相關(guān)性。它可以幫助我們理解目標(biāo)檢測算法在訓(xùn)練過程中的行為和表現(xiàn),以及預(yù)測標(biāo)簽之間的相互影響。
通過觀察labels_correlogram,我們可以了解到目標(biāo)檢測算法在不同類別之間的區(qū)分能力,以及對于不同類別的預(yù)測精度。此外,我們還可以通過比較不同算法或不同數(shù)據(jù)集labels_correlogram,來評估算法的性能和數(shù)據(jù)集的質(zhì)量。
總之,labels_correlogram是一種有用的工具,可以幫助我們更好地理解目標(biāo)檢測算法在訓(xùn)練過程中的行為和表現(xiàn),以及評估算法的性能和數(shù)據(jù)集的質(zhì)量。
P_curve?
這個(gè)圖的分析和F1_Curve一樣,不同的是關(guān)于的是Precision和Confidence之間的關(guān)系,可以看出我們隨著置信度的越來越高檢測的準(zhǔn)確率按理來說是越來越高的。?
R_curve?
這個(gè)圖的分析和F1_Curve一樣,不同的是關(guān)于的是Recall和Confidence之間的關(guān)系,可以看出我們隨著置信度的越來越高召回率的準(zhǔn)確率按理來說是越來越低的。?
PR_curve
它顯示了在不同分類閾值下模型的精確度(Precision)和召回率(Recall)之間的關(guān)系。
PR曲線越靠近坐標(biāo)軸的左上角,模型性能越好,越能夠正確識(shí)別正樣本,正確分類正樣本的Precision值越高,而靠近右側(cè)則說明模型對正樣本的識(shí)別能力較差,即召回能力較差。
PR曲線的特點(diǎn)是隨著分類閾值的變化,精確度和召回率會(huì)有相應(yīng)的改變。通常情況下,當(dāng)分類模型能夠同時(shí)保持較高的精確度和較高的召回率時(shí),PR曲線處于較高的位置。當(dāng)模型偏向于高精確度或高召回率時(shí),曲線則相應(yīng)地向低精確度或低召回率的方向移動(dòng)。
PR曲線可以幫助我們評估模型在不同閾值下的性能,并選擇適當(dāng)?shù)拈撝祦砥胶饩_度和召回率。對于模型比較或選擇,我們可以通過比較PR曲線下方的面積(稱為平均精確度均值,Average Precision, AP)來進(jìn)行定量評估。AP值越大,模型的性能越好。
總結(jié):PR曲線是一種展示分類模型精確度和召回率之間關(guān)系的可視化工具,通過繪制精確度-召回率曲線,我們可以評估和比較模型在不同分類閾值下的性能,并計(jì)算平均精確度均值(AP)來定量衡量模型的好壞。
results.csv
results.csv記錄了一些我們訓(xùn)練過程中的參數(shù)信息,包括損失和學(xué)習(xí)率等,這里沒有什么需要理解大家可以看一看,我們后面的results圖片就是根據(jù)這個(gè)文件繪畫出來的。
results
這個(gè)圖片就是生成結(jié)果的最后一個(gè)了,我們可以看出其中標(biāo)注了許多小的圖片包括訓(xùn)練過程在的各種損失,我們主要看的其實(shí)就是后面的四幅圖mAP50、mAP50-95、metrics/precision、metrics/recall四張圖片。?
- mAP50:mAP是mean Average Precision的縮寫,表示在多個(gè)類別上的平均精度。mAP50表示在50%的IoU閾值下的mAP值。
- mAP50-95:這是一個(gè)更嚴(yán)格的評價(jià)指標(biāo),它計(jì)算了在50-95%的IoU閾值范圍內(nèi)的mAP值,然后取平均。這能夠更準(zhǔn)確地評估模型在不同IoU閾值下的性能。
- metrics/precision:精度(Precision)是評估模型預(yù)測正確的正樣本的比例。在目標(biāo)檢測中,如果模型預(yù)測的邊界框與真實(shí)的邊界框重合,則認(rèn)為預(yù)測正確。
- metrics/recall:召回率(Recall)是評估模型能夠找出所有真實(shí)正樣本的比例。在目標(biāo)檢測中,如果真實(shí)的邊界框與預(yù)測的邊界框重合,則認(rèn)為該樣本被正確召回。
檢測效果圖
最后的十四張圖片就是檢測效果圖了,給大家看一下這里沒什么好講解的了。
其它參數(shù)
FPS和IoU是目標(biāo)檢測領(lǐng)域中使用的兩個(gè)重要指標(biāo),分別表示每秒處理的圖片數(shù)量和交并比。
- FPS:全稱為Frames Per Second,即每秒幀率。它用于評估模型在給定硬件上的處理速度,即每秒可以處理的圖片數(shù)量。該指標(biāo)對于實(shí)現(xiàn)實(shí)時(shí)檢測非常重要,因?yàn)橹挥刑幚硭俣瓤?#xff0c;才能滿足實(shí)時(shí)檢測的需求(推理速度有關(guān)系等于nms時(shí)間 +預(yù)處理時(shí)間 然后用1000除以這三個(gè)數(shù)就是fps,現(xiàn)在輕量化提高FPS是一個(gè)比較流行的發(fā)論文方向且比較簡單一些)。
- IoU:全稱為Intersection over Union,表示交并比。在目標(biāo)檢測中,它用于衡量模型生成的候選框與原標(biāo)記框之間的重疊程度。IoU值越大,表示兩個(gè)框之間的相似性越高。通常,當(dāng)IoU值大于0.5時(shí),認(rèn)為可以檢測到目標(biāo)物體。這個(gè)指標(biāo)常用于評估模型在特定數(shù)據(jù)集上的檢測準(zhǔn)確度。
在目標(biāo)檢測領(lǐng)域中,處理速度和準(zhǔn)確度是兩個(gè)重要的性能指標(biāo)。在實(shí)際應(yīng)用中,我們需要根據(jù)具體需求來平衡這兩個(gè)指標(biāo)。
總結(jié)?
到此為止本篇博客就完結(jié)了,大家如果有什么不理解的可以在評論區(qū)留言,我看到了會(huì)給大家進(jìn)行解答,大家通過綜合考慮這些指標(biāo)的數(shù)值,可以評估YOLOv8模型在目標(biāo)檢測任務(wù)中的準(zhǔn)確性、召回率、速度和邊界框質(zhì)量等性能表現(xiàn)。根據(jù)具體需求,我們可以選擇更適合任務(wù)場景的模型和參數(shù)配置。
最后祝大家學(xué)習(xí)順利,科研成功,多多論文!!