文章目錄
- 基本知識介紹
- 1.視覺處理三大任務
- 2.訓練、驗證、測試、推理
- 3.數據集
- 3.1 數據集格式
- 3.2 數據集標注
- 4.上游任務和下游任務
- YOLO
- 指標
- 1.真實框(Ground Truth Box)與邊界框(Bounding Box)
- 2.交并比(IOU)
- 3.置信度
- 4.混淆矩陣
- 5.精確度與召回率
- 6.mAP
- 6.1 PR曲線(Precision-Recall Curve)
- 6.2 AP
- NMS(非極大值抑制)后處理技術
基本知識介紹
1.視覺處理三大任務
圖像分類:對整個圖像內容進行 “類別歸屬” 判斷,核心是讓計算機識別一張圖像屬于哪個預設的類別(例如 “貓”“狗”“汽車”“風景” 等),輸出的是 “圖像 - 類別標簽” 的對應關系,不關注目標在圖像中的具體位置、數量或形態細節。
目標檢測:不僅要識別圖像中存在的目標類別(解決 “是什么”),還要通過矩形邊界框(Bounding Box)標記出每個目標在圖像中的具體位置(解決 “在哪里”),同時需處理 “多目標共存” 場景
圖像分割:實例分割、語義分割
2.訓練、驗證、測試、推理
訓練階段(Training):通過訓練集數據,讓模型 “學會” 規律。數據集需要做標注,圖像分類的類別就是文件夾的名稱,但在目標檢測是需要自己打標簽。
驗證階段(Validation):在訓練過程中,用驗證集評估模型的 “初步泛化能力”,讓模型 “更優”,這個過程一般發生在模型訓練過程中或者最后。
測試階段(Testing):用完全獨立的測試集,最終評估模型的泛化能力
推理階段(Inference):將通過測試的模型部署到實際場景,對真實世界的新數據(無標簽)進行預測,輸出結果供業務使用。
【重點】訓練、驗證、測試圖片是不可以存在相同的
3.數據集
3.1 數據集格式
YOLO 數據集的目錄結構需嚴格區分圖像文件和標注文件,兩者需一一對應(文件名相同,后綴不同):
datasets:存放所有的數據集,這個所有的意思就是訓練任何模型的數據集
- car:訓練car的數據集信息
- train:訓練數據集
- images:圖片信息
- lables:標簽信息
- val:驗證數據集
- images:圖片信息
- labels:標簽信息
- train:訓練數據集
- helmet:
- train:訓練數據集
- images:圖片信息
- lables:標簽信息
- val:驗證數據集
- images:圖片信息
- labels:標簽信息
- train:訓練數據集
3.2 數據集標注
在目標檢測任務中,圖片中的每個目標都要標注類別和邊界框(Bounding Box)
安裝labelimg工具【這個工具如果安裝在python 3.12 版本以下會有bug,解決方法詳見不過解決文檔】:
-
第一步:創建虛擬環境(可以選擇拷貝):
conda create -n labels_env python=3.12
-
第二步:激活虛擬環境【有的版本的anaconda不需要寫 conda】
conda activate labels_env
-
第三步:下載 labelimg
pip install labelimg
-
第四步:查看是否安裝了 labelimg
conda list labelimg
-
第五步:啟動 labelimg 標注工具【遇到bug就去解決】
labelimg
注:此工具有些小bug:
1.進頁面后切換一下yolo格式,即使初始就是yolo也最好切換一下
2.按w快捷開啟標注
3.若沒有方框的在左上角導航欄edit點擊一下Draw Squares
4.上游任務和下游任務
- 上游任務:就是使用大量的數據集訓練模型,得到預訓練模型
- 下游任務:通過預訓練模型得到自己的模型,做模型的應用開發【落地】
YOLO
YOLO(You Only Look Once)是目前最流行的實時目標檢測算法之一,以速度快、精度高著稱,其核心特點是一個**單階段的目標檢測【沒有生成候選框的過程】**算法,直接從圖像中同時預測目標的類別和位置,擺脫了傳統兩階段檢測算法(如 Faster R-CNN)的復雜流程。
指標
1.真實框(Ground Truth Box)與邊界框(Bounding Box)
- 真實框:就是我們在訓練模型之前,基于數據集內容,做的標注信息的矩形框;推理階段是沒有真實框的
- 邊界框:也可以稱為預測框,這個框就是模型輸出的結果;在訓練階段,我們通過控制損失函數,讓邊界框更加接近于真實框(提高模型的性能);在推理階段,這個邊界框就是我們通過模型推理出來的結果,這個過程全全是否模型學習到的東西的一個輸出
YOLO 采用歸一化的(x_center, y_center, width, height)
格式表示邊界框(范圍 0~1),其中:
x_center, y_center
:目標中心點相對于圖像寬高的歸一化坐標;width, height
:目標寬高相對于圖像寬高的歸一化值。
邊界框越貼近目標真實框,模型定位效果越好。
2.交并比(IOU)
衡量預測邊界框(Predicted Box) 與真實邊界框(Ground Truth Box) 重疊程度的指標
- 計算公式:
IoU=AreaofOverlapAreaofUnion=A∩BA∪BIoU=\frac{Area\,of\,Overlap}{Area\,of\,Union}=\frac{A∩B}{A∪B} IoU=AreaofUnionAreaofOverlap?=A∪BA∩B?
- IoU 計算公式圖形表示如下:
- IoU=1:預測框與真實框完全吻合,認為很成功但也有可能是過擬合。
- IoU<0.5IoU<0.5:通常認為預測失敗(False Positive, FP)。
- IoU≥0.5IoU≥0.5:認為預測成功(True Positive, TP)。
3.置信度
YOLO為每個預測框分配一個置信度,表示模型對預測框包含目標的可信度,取值范圍 0 到 1 之間,置信度由兩部分組成:
- 目標存在概率:預測框內是否包含目標。
- 位置準確性:預測框與真實框的IoU。
公式:置信度 = Pr(Object) × 預測的 IOU
- Pr(Object)=1:邊界框內有對象
- Pr(Object)=0:邊界框內沒有對象
【注】:在推理階段,由于沒有真實框的存在,所有沒辦法去計算IOU的值,因此模型推理階段的置信度輸出完全是由模型學習的結果產生的(即模型預測的,包含了類別置信度 + 目標存在置信度)
4.混淆矩陣
- 混淆矩陣是一種用于評估分類模型性能的表格形式,特別適用于監督學習中的分類任務。它通過將模型的預測結果與真實標簽進行對比,幫助我們直觀地理解模型在各個類別上的表現
- 在混淆矩陣中:
- 列(Columns):表示真實類別(True Labels)
- 行(Rows):表示預測類別(Predicted Labels)
- 單元格中的數值:表示在該真實類別與預測類別組合下的樣本數量
- 在目標檢測任務中,混淆矩陣的構建依賴于 IoU 閾值,因為 IoU 決定了哪些預測被認為是“正確檢測”,從而影響 TP、FP、FN 的統計,最終影響混淆矩陣的結構和數值
實際為正類 | 實際為負類 | |
---|---|---|
預測為正類 | TP(真正例) | FP(假正例) |
預測為負類 | FN(假反例) | TN(真反例) |
- TP:真實是目標,預測也為目標(正確檢測);
- FP:真實不是目標,預測為目標(誤檢);
- FN:真實是目標,預測為非目標(漏檢);
- TN:真實不是目標,預測也為非目標(正確排除)。
【理解技巧】每個術語由 “真假(T/F)” 和 “正負(P/N)” 組成,先明確這兩個維度的含義:
- T(True)/ F(False):描述 “模型預測是否和真實情況一致”——
T = 預測對了,F = 預測錯了; - P(Positive)/ N(Negative):描述 “模型的預測結果是什么”——
P = 模型預測為 “正類”(比如 “垃圾郵件”“患病”),N = 模型預測為 “負類”(比如 “正常郵件”“健康”)。
5.精確度與召回率
-
精確度(Precision):
-
定義:預測為正的樣本中,真正為正的比例(“預測正確的目標占所有預測目標的比例”):
Precision=TPTP?+?FP\text{Precision} = \frac{\text{TP}}{\text{TP + FP}} Precision=TP?+?FPTP? -
意義:衡量模型 “不亂標” 的能力 —— 值越高,誤檢(把非目標標為目標)越少。
-
-
召回率(Recall):
-
定義:真實為正的樣本中,被成功預測為正的比例(“所有真實目標中被檢出的比例”):
Recall=TPTP?+?FN\text{Recall} = \frac{\text{TP}}{\text{TP + FN}} Recall=TP?+?FNTP? -
意義:衡量模型 “不漏檢” 的能力 —— 值越高,漏檢(真實目標未被檢出)越少。
-
6.mAP
6.1 PR曲線(Precision-Recall Curve)
PR 曲線以召回率(Recall) 為橫軸,精確率(Precision) 為縱軸,每個點對應一個特定的 “置信度閾值”。通過調整閾值,可得到一系列(Recall, Precision)坐標,連接這些點即形成 PR 曲線。
對于每個樣本,模型會輸出一個預測分數或置信度,表示該樣本屬于某一類的概率。通常也會設定一系列的置信度閾值,這些閾值將用于決定哪些預測被視為“正例”(Positive),哪些被視為“負例”(Negative)
置信度閾值:模型預測框的 “置信度” 決定了是否保留該框(如閾值 = 0.5 時,只保留置信度≥0.5 的框)。
- 當閾值降低時:
- 更多低置信度的預測框被保留 → 漏檢減少(Recall 升高),但誤檢可能增加(Precision 降低)。
- 當閾值升高時:
- 只有高置信度的預測框被保留 → 誤檢減少(Precision 升高),但漏檢可能增加(Recall 降低)
對于每一個閾值,根據預測分數與該閾值的比較結果,我們可以計算出當前閾值下的精確率(Precision)和召回率(Recall)
將每個閾值下的精確率和召回率作為坐標點,繪制在二維平面上,橫軸為召回率,縱軸為精確率,從而形成一條曲線
理想曲線:靠近右上角(高召回率下仍保持高精確率)。
實際曲線:通常呈下降趨勢,反映模型在精確率與召回率間的權衡。
6.2 AP
- 在 PR 曲線中,曲線上每個點表示了在對應召回率下的最大精確率值。當 P=R 時成為平衡點(BEP),如果這個值較大,則說明學習器的性能較好。所以 PR 曲線越靠近右上角性能越好。即 PR 曲線的面積越大,表示分類模型在精確率和召回率之間有更好的權衡,性能越好
- 常用的評估指標是 PR 曲線下的面積,即 AP(Average Precision),通過 PR 曲線下的面積來計算 AP,從而綜合評估模型在不同置信度閾值下的性能,值越接近 1 越好
- 平均精度(Average Precision, AP)通過計算每個類別在不同置信度閾值下的 Precision(查準率)和 Recall(查全率)的平均值來綜合評估模型的性能。AP 被廣泛應用于評估模型在不同置信度閾值下的表現,并且是計算 mAP(平均平均精度)的基礎
- AP 就是用來衡量一個訓練好的模型在識別某個類別時的表現好壞。AP 越高,說明模型在這個類別上的識別能力越強
在 PR 曲線中,曲線上每個點表示了在對應召回率下的最大精確率值。當 P=R 時成為平衡點(BEP),如果這個值較大,則說明學習器的性能較好。所以 PR 曲線越靠近右上角性能越好。即 PR 曲線的面積越大,表示分類模型在精確率和召回率之間有更好的權衡,性能越好
常用的評估指標是 PR 曲線下的面積,即 AP(Average Precision),通過 PR 曲線下的面積來計算 AP,從而綜合評估模型在不同置信度閾值下的性能,值越接近 1 越好
AP計算:
-
11 點插值法:只需要選取當 Recall >= 0, 0.1, 0.2, …, 1 共11個點,找到所有大于等于該 Recall 值的點,并選取這些點中最大的 Precision 值作為該 Recall 下的代表值,然后 AP 就是這 11 個 Precision 的平均值
AP=111∑r∈{0,0.1,...,1}pinterp(r)pinterp(r)=max?r~:r~≥rp(r~)r~表示大于或等于r實際召回率,并選擇這些召回率對應的精確率中的最大值作為插值精確率\mathrm{AP}=\frac{1}{11}\sum_{r\in\{0,0.1,...,1\}}p_{interp(r)}\\ p_{interp(r)}=\max_{\tilde{r}:\tilde{r}\geq r}p(\tilde{r}) \\ \tilde{r}表示大于或等于r實際召回率,并選擇這些召回率對應的精確率中的最大值作為插值精確率 AP=111?r∈{0,0.1,...,1}∑?pinterp(r)?pinterp(r)?=r~:r~≥rmax?p(r~)r~表示大于或等于r實際召回率,并選擇這些召回率對應的精確率中的最大值作為插值精確率
-
面積法:需要針對每一個不同的Recall值(包括0和1),選取其大于等于這些 Recall 值時的 Precision 最大值,然后計算 PR 曲線下面積作為 AP 值,假設真實目標數為 M,recall 取樣間隔為 [0, 1/M, …, M/M],假設有 8 個目標,recall 取值 = [0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875, 1.0]
-
把各塊面積加起來就是 AP 值
6.3 mAP平均平均精度
mAP 是所有類別的 AP 的平均值,用于衡量模型在多類別任務中的整體性能。
mAP=1N∑i=1NAPi\text{mAP} = \frac{1}{N} \sum_{i=1}^{N} \text{AP}_i mAP=N1?i=1∑N?APi?
mAP衡量模型整體性能的綜合指標,值越高表示模型在所有類別上的平均表現越好
NMS(非極大值抑制)后處理技術
NMS(Non-Maximum Suppression)是目標檢測中的關鍵后處理技術,用于解決冗余檢測框問題。其核心思想是:
- 篩選局部最優解:在多個重疊的預測框中,保留置信度最高的框,抑制(刪除)與之高度重疊的低置信度框。
- 基于IoU(交并比):通過計算預測框之間的重疊度,決定是否保留或剔除冗余框。
步驟:
YOLO 模型輸出的預測框需先經過 “置信度閾值過濾”(如只保留置信度≥0.25 的框,初步去除低置信度誤檢),再進入 NMS 流程。【這個過程就為 NMS 過濾減輕了計算壓力】
步驟 1:按置信度對預測框排序(降序)
按其置信度分數從高到低排序。此時,排序第一的框是當前 “最可能為真實目標” 的候選框(記為 best_box
)
步驟 2:計算best_box與其他所有框的 IOU
步驟 3:根據 IOU 閾值抑制冗余框
抑制重疊框:設定一個閾值(如 iou_threshold=0.5
),若某候選框與 best_box
的 IoU 超過閾值,則認為該框是冗余的,從候選列表中移除。
步驟 4:重復操作,從剩余候選框中繼續選擇最高分的框,重復上述步驟,直到所有框處理完畢。
NMS 通過 “選最高置信度框→刪重疊框→循環至無冗余” 的流程,從大量預測框中篩選出唯一、精準的目標框。