目標檢測 YOLO v1 to v3 學習筆記

2022-06-18 16:42:11 字數 2391 閱讀 4160

前段時間看了yolo的**,打算用yolo模型做乙個遷移學習,看看能不能用於專案中去。但在實踐過程中感覺到對於yolo的一些細節和技巧還是沒有很好的理解,現學習其他人的部落格總結(所有參考連線都附於最後一部分「參考資料」),加入自己的理解,整理此學習筆記。

概念補充:map:map是目標檢測演算法中衡量演算法精確度的乙個指標,其涉及到查準率(precision)和查全率(recall)。對於目標檢測任務,對於每乙個目標可以計算出其查準率和查全率,多次實驗進行統計,可以得到每個類有一條p-r曲線,曲線下面的面積即是ap的值,m的意思是對每乙個類的ap值求平均,即map的定義,map的大小在[0, 1]區間內。

過去的目標檢測演算法很多的思路是通過演算法(經典的如region proposal)產生大量的可能包含目標物體的邊界框(potential bounding box),然後用分類器去判斷每乙個邊界框裡面是否包含物體,以及包含物體的類別以及置信度(confidence),經典的模型由r-cnn以及其多個變種。但正如yolo**中反覆提及的,這種做法一方面會使得訓練變得麻煩(因為整個模型由多個部分組成,而每一部分通常都需要獨立訓練),不僅費時,也很難綜合幾部分結果求得最好的整體結果,另一方面,多個部分的協同使得整個模型的效率較為低下。

一直以來,計算機視覺對於檢測兩個距離很近的同類目標或者不同目標都具有很大的挑戰。很多演算法會對輸入的影象進行尺寸的放縮,而如果當影象中由兩個目標相近的時候,加上縮小尺寸,這使得對於相近目標的檢測變得很困難。對於這種情況(特別是小目標檢測,如鳥群),yolo v3做得很好。

yolo不同於上述的目標檢測演算法,它將目標檢測抽象為乙個回歸問題(regression problem),直接使用乙個神經網路,輸入為原始,輸出為邊界框座標、目標類別、目標置信度等,yolo將其他模型分開的部分都綜合到乙個神經網路中,使得訓練能夠採用端到端(end-to-end)來優化。同時,這種改進不僅使得訓練變得容易,也使得檢測速度很快。並且,**中提到,yolo遷移到其他資料集(如藝術影象)上的表現遠好於其他目標檢測演算法,這表明了yolo較其他模型學習了較好的抽象特徵,泛化能力更強。

但yolo也有缺點,其在物體定位時容易出錯,不過在誤將在背景檢測出本不存在的物品的情況相對少一些。

不同演算法的檢測流程對比如下(圖來自於部落格:

綜上,將yolo的優點總結如下:

減少背景錯誤(將背景識別成本不存在的物體)

較好的學習了目標的泛化特徵

以上總結了yolo的優點,下面總結其缺點:

下面是各個目標檢測演算法的效能對比(圖來自於部落格:

2.1 - 網格單元置信度計算

如果該網格單元存在目標,則計算公式為:$confidence=pr(object)\times iou_^$,否則其$confidence$應為0。

2.2 - 邊界框目標類別置信度計算

注意到,$confidence$是針對每乙個邊界框(有沒有目標),而$conditional\ class\ probabilities$是對整個網格單元的。因此可以通過如下公式計算每乙個邊界框對於每乙個具體類別的置信度。

$$pr(class_i|object)\times pr(object)\times iou_^=pr(class_i)\times iou_^$$

2.3 - 輸出張量計算

yolo將影象分成$s \times s$個網格單元,每乙個網格單元最後輸出$b$個邊界框(每個邊界框包括$x,y,w,h,confidence$,$x,y$表示**的邊界框中心與網格單元邊界的相對值,$w,h$表示**的邊界框的寬和高相對於整幅影象的$width,height$的比例值,$confidence$表示**的邊界框與真實的邊界框的$iou$的值),以及$c$個類別的概率($pr(class|object)$,即如果乙個網格單元包含目標的前提下,其屬於某個類別的概率,對於乙個網格單元只**一組類的概率,而不考慮邊界框$b$的數量)。因此,最後輸出的張量維度為$s \times s \times (b \times 5 + c)$。

2.4 - 損失函式計算

損失函式需要設計得讓目標的$(x,y,w,h),confidence,classification$這三個衡量部分達到很好平衡,則需要注意到:

因此,解決方法如下:

下圖為損失函式理解(圖來自於部落格:

注意到,上面的損失函式對於$w,h$的損失計算是先取了開方再平方的,這是因為對於不同的小的邊界框**中,相同的偏差影響程度不同(小偏差對於小邊界框的影響更大,因此需要更嚴重的懲罰),基於此,作者想到了這個巧妙的方法,其原理可以由下圖直觀理解(圖來自於部落格:

目標檢測之YOLOv1

you only look once unified,real time object detection yolo 一體化的,實時的物體檢測 翻譯 詳解 1 2 1 yolov1框架 步驟 1 resize成448 448,分割得到7 7網格 cell 2 cnn提取特徵和 卷積層負責提取特徵。全...

目標檢測 YOLOv1總結

yolov1筆記 faster rcnn筆記 還存在什麼問題?yolov1檢測精度低於當時的先進網路演算法 yolov1容易產生物體定位錯誤 yolov1對小目標的檢測效果不好 每網格只能 兩個物體 概述 1.abstract 乙個單一的神經網路在一次檢測中直接從完整的影象 邊界框和類別概率 單一的...

目標檢測 YOLO v1(CVPR 2016)

yolo由24層convnet和2層fcs組成。其核心思想是將均勻劃分為多個grid cell,每個grid cell產生兩個bbox和grid cell中如果存在物件,物件是各類的概率,每個bbox由5個引數組成,xywh和confidence,confidence是bbox中存在物件的概率,將兩...