yolov1 v3系列學習

2021-10-01 22:07:55 字數 3327 閱讀 4965

參考:

yolo系列演算法是one stage思想的,即直接提取特徵來**物體的類別和位置。

其核心思想是輸入整個,提取特徵後直接進行回歸/分類

**細節如下:

網路結構如下:

啟用函式:最後一層使用的是標準的線性啟用函式,其他的層都使用leaky relu 。

3.損失函式

由上一步可知,yolov1的損失分為3個方面,座標損失,置信度損失,分類損失,作者全部使用了mse作為損失函式,但如果直接相加的話,無法權衡8維座標(因為是2個bbox)損失和2維的置信度損失和20維的分類損失的重要程度。考慮到每個損失的貢獻率,作者給座標損失權重λco

ord}_}}}

λcoord

​=5。又因為在一幅中,沒有目標的網格占多數,所給給沒有目標的置信度損失權重λno

obj}_}}}

λnoobj

​=0.5,有目標的置信度損失為1。如下:

其中 1ij

obj=

}_^ = \left\ \right\}

1ijobj

​=,表示第i個網格第j個bbox是否包含目標。1io

bj}_i^

1iobj​

表示包含目標的第i個網格。對應到輸出tensor上如下圖:

注意到,對於分類損失,只有當網格包含目標時,才會計算,不包含目標時,分類全置為0,不參與運算,可參考吳恩達的相關課程。

注意到,座標損失中關於w和h,採用的是開根號的形式,對映到下面這張圖上。這時因為,對於不同大小的bbox,寬和高計算出的偏移量損失貢獻率是不一樣的,採用根號的形式,可以盡量減小對小bbox的敏感度。這樣子可以稍微平衡一下大bbox和bbox對損失的貢獻率。這樣子可以使得訓練波動更小一點。

總的來說,這樣設計損失函式可以讓座標,置信度,分類概率三者達到乙個較好的平衡。

但仍存在一些不足

yolov1的精度相對於其他網路還比較低。

1)batch normnization

2)相比於v1,採用了anchor box,把**類別的機制從空間位置(cell)中解耦,由anchor box同時**類別和座標。因為yolo是由每個cell來負責**類別,每個cell對應的2個bounding box 負責**座標(回想yolo中 最後輸出7730的特徵,每個cell對應1130,前10個主要是2個bounding box用來**座標,後20個表示該cell在假設包含物體的條件下屬於20個類別的概率,具體請參考 **yolo 的圖示) 。yolov2中,不再讓類別的**與每個cell(空間位置)繫結一起,而是讓全部放到anchor box中。下面是特徵維度示意圖(僅作示意並非完全正確)

在yolov1中,對每乙個網格,作者都設計了2個**框來**裡面的目標,這兩個框的產生是人為選擇的,大小的人為設定的。yolov2不用自定義anchor box的尺寸,而是在訓練集上對anchor box進行kmeans聚類,自動找到良好的anchor box 尺寸,作者設定anchor box數量為5。

傳統的kmeans演算法,採用歐氏距離最小原則來更新質心,但是對於本文來說,由於anchor box刻畫形式為(x1,y1,w,h),採用歐式距離的話,會導致大框比小框產生更多的誤差。所以,作者巧妙設計了用iou來度量這個距離公式。因為不同尺寸的anchor box 與ground truth 的iou值與anchor box的尺寸無關。公式如下

注意,在計算anchor boxes時,將所有boxes中心點的x,y座標都置為0,這樣所有的boxes都處在相同的位置上,方便我們通過新距離公式計算boxes之間的相似度,聚類只針對w和h,即以w和h為特徵維度的anchor box

d (b

ox,c

entr

oid)

=1−i

ou(b

ox,c

entr

oid)

d\left( }} \right) = 1 - iou\left( }} \right)

d(box,

cent

roid

)=1−

iou(

box,

cent

roid

)

由於待計算的anchor boxes的width和height都是相對於整張的比例,而yolov2通過anchor boxes得到最優的框座標時,座標是相對於網格邊長的比例(0到1之間),因此要將anchor boxes的width和height也轉換為相對於柵格邊長的比例。轉換公式如下:

w=anchor_width * input_width / downsamples

h=anchor_height * input_height / downsamples

例如;卷積神經網路的輸入為416*416時,yolov2網路的降取樣倍率為32,例如k-means計算得到的乙個anchor

box的anchor_width=0.2,anchor_height=0.6,則:

w=0.2 * 416 / 32=0.2 * 13=2.6

h=0.6 * 416 / 32=0.6 * 13=7.8

參考:

3)高解析度的分類器

在訓練物體檢測任務時,會使用在imagenet資料集上的預訓練模型作為特徵提取器,而這個預訓練模型,輸入的影象解析度通常在224x224而在訓練物體檢測任務時,需要的影象解析度要更高(原因是影象越大,物體越清晰,越容易檢測到物體),這樣會造成兩者的輸入影象尺寸不一致。在yolo v1中,作者先是在224x224大小的輸入影象上訓練檢測模型,然後將影象解析度提公升至448x448,在檢測資料集上finetune。

為了更好地適應解析度的差異,yolo v2選擇先在imagenet上finetune高解析度(448x448)的模型(10 epochs),然後再訓練檢測模型,這樣就「弱化」了分類模型和檢測模型在輸入影象解析度上的「不一致」。

Redis系列學習筆記3 雜湊

儲存多個域值對。乙個雜湊由多個域值對 field value pair 組成,雜湊的域和值都可以是文字 整數 浮點數或者二進位制資料。同乙個雜湊裡面的每個域必須是獨一無 二 各不相同的,而域的值則沒有這一要求,換句話說,不同域的值可以是重複的。通過命令,使用者可以對雜湊執行設定域值對 獲取域的值 檢...

Git系列學習(1) 基礎配置

一般在新的系統上,我們都需要先配置下自己的 git 工作環境。配置工作只需一次,以後公升級時還會沿用現在的配置。當然,如果需要,你隨時可以用相同的命令修改已有的配置。git 提供了乙個叫做git config的工具 譯註 實際是git config命令,只不過可以通過git加乙個名字來呼叫此命令。專...

目標檢測 YOLO系列v1 v2 v3

人類對於物體只需要看一眼就能知道該物體是什麼,在什麼位置,人類的視覺系統是非常快速而準確的,因此如果能夠加速演算法使得計算機系統也能夠快速而準確的話,就能夠代替人而實現無人駕駛。而目前的一些方法,rcnn系列的都是一套複雜的流程,首先生成一些可能的邊框區域,再對邊框進行分類,之後再修正邊框的位置,然...