YOLOV1與V3的(模型,loss要點詳述)

2021-10-08 23:53:59 字數 2034 閱讀 8338

正樣本的選擇:

目標中心點落在哪個grid上,然後計算這個grid的9個先驗框(anchor)和目標真實位置的iou值(直接計算,不考慮二者的中心位置),取iou值最大的先驗框和目標匹配。於是,找到的該grid中的 該anchor 負責**這個目標,其餘的網格、anchor都不負責。

計算各個先驗框和所有的目標ground truth之間的iou,如果某先驗框和影象中所有物體最大的iou都小於閾值(一般0.5),那麼就認為該先驗框不含目標,記作負樣本,其置信度應當為0

這部分雖然不負責**物件,但iou較大,可以認為包含了目標的一部分,不可簡單當作負樣本,所以這部分不參與誤差計算。

yolo演算法將目標看成回歸問題,採用sum-square函式,對不同的部分採用了不同的權重值。

由4部分構成:

1.x,y 均方誤差

2.w,h均方誤差

3.置信度loss(其實是否含有object誤差)

這裡其實有個很重要的思想,置信度有時是單純的分類置信度,有時候可能是結合了iou(在yolo裡面第一次見到),yolo就是結合了iou的置信度

**onfidence表示:cell**的bounding box包含乙個物體的置信度有多高並且該bounding box**準確度有多大,用公式表示為:

​ 4.cls分類(yolo1用的是mse,這是p就是分類概率,也就是進過softmax輸出的值)

把網路分成sxs個網格(s通常為7),對於每乙個網格要**出b個邊框,每個邊框五個座標(x,y,w,h)和乙個分數(來**這個邊框和真是的邊框有多接近),每個網格也會**類別,所以一共有s × s × (b ∗ 5 + c) 個張量

這就是yolo的網路模型,對於卷積層和全連線層,採用leaky relu啟用函式。但是最後一層卻採用線性啟用函式,最後出來的是邊界框的**,之前說的是7x7的網格,那麼最後出來的就是7x7x30,20類,2個置信度(判斷有沒有物體),兩個框,乙個框(x,y,w,h)

backbone去除了pooling與fc,全用卷積代替,用了darknet 53,總的來說就是conv+bn+leaky_relu,yolo v3中採用類似fpn的upsample和融合做法(最後融合了3個scale,其他兩個scale的大小分別是26×26和52×52),在多個scale的feature map上做檢測。

1,y2和y3的深度都是255,邊長的規律是13:26:52。yolo v3設定的是每個網格單元**3個box,所以每個box需要有(x, y, w, h, confidence)五個基本引數,然後還要有80個類別的概率。所以3×(5 + 80) = 255。這個255就是這麼來的。最後卷積核的channel是255。

yolov3將分類loss從v1的mse變成了cross-entropy,用了類似ssd的三個尺度作為輸出的head。

網路結構圖:

還是四個loss。

crossentropyloss()內部將input做了softmax後再與label進行交叉熵!bceloss()內部啥也沒乾直接將input與label做了交叉熵!bcewithlogitsloss()內部將input做了sigmoid後再與label進行交叉熵!

YOLO v1的詳解與復現

yolov1是乙個快速的one stage目標檢測器,獨樹一幟的用劃分網格的策略實現目標檢測,本文將詳細解釋yolov1演算法,並簡述如何用pytorch復現該演算法。pytorch yolov1 github 本文屬於作者的理解,難免出現錯誤或者瑕疵,還請諒解與指正。簡單回顧一下目標檢測的做法,1...

yolov1 v3系列學習

參考 yolo系列演算法是one stage思想的,即直接提取特徵來 物體的類別和位置。其核心思想是輸入整個,提取特徵後直接進行回歸 分類。細節如下 網路結構如下 啟用函式 最後一層使用的是標準的線性啟用函式,其他的層都使用leaky relu 3.損失函式 由上一步可知,yolov1的損失分為3個...

YOLO v1一些細節上的理解

由imt rain im im trai n 生成target值得注意啊啊啊 loss function裡面的 xi,yix i,y i xi yi 是bboxes的中心座標,是相對於當前grid的左上角點的座標值 仔細看 取值範圍是 0,1 wi,hiw i,h i wi hi 是歸一化的值 取值...