1. 程式人生 > >YOLO V1的過程解讀

YOLO V1的過程解讀

you only look once!!!

一、所需基本姿勢

1、YOLO將圖片分成S*S的grid cell,每個grid cell對應B個bounding box,論文S=7,B=2,故有98個bbox。

2、YOLO中每一個Object只對應一箇中心點,該中心點只唯一出現在一個grid cell中

3、Object中心點落在的那個grid cell負責把該Object迴歸出,徹底不是選取proposal再看看這個合不合適的模式

二、TRAINING

如圖輸入為448*448*3,經過類似GoogLenet的只有1*1和3*3的卷積後,得到7*7*30的feature,顯然7*7對應每一個grid cell,而30個channel呢?


如圖,30個channel對應2個bbox的5個位置資訊和confidence,confidence是它是否是Object的概率乘上最大的IoU(當有Object的中心點在該grid cell上,則Pr(Object)=1,否者為0);再加上20個class的feature。

loss分析


loss分3部分,座標+confidence+class的loss

第一部分座標loss,類似1的符號表示只找一個對每一個Object負責的bbox(大概類似1的符號就這意思吧 - - ),如圖對狗來說,只有中心點所在的grid cell的豎向的黃框對其負責,前面兩個求和,表示對所有bbox進行了遍歷。

注:為什麼要對w和h加上根號?因為大物體的w和h比小物體大得多,權衡兩者,使大物體和小物體對loss貢獻相一致(效果然並卵 - -),lamda的選擇也是考慮到對loss的貢獻率(論文更為重視座標loss,lamda取很大,為5)

第二部分IoU loss,C就是confidence值,第一個等式也是要找只找一個對每一個Object負責的bbox,第二個等式變成了no obj了,說明遍歷了所有除第一個等式找到的bbox外的所有bbox,且加上了一個lamda係數,為的是不讓負例太多了!

第三部分是class loss,遍歷所有bbox,但只對c∈classes的bbox(第二個求和符號的意義)計算了分類loss

OK!

三、TESTING

網路訓練好後,輸入一張圖片,得到98個bbox的結果,其中有class和confidence和位置


class的概率顯然是一個條件概率,與前面的confidence相乘,得到真正Pr(Classi)*IoU,對所有98個bbox都進行這些操作,得到98個20*1的class scores,再針對某一個Object的scores進行降序排列,再講小於某個閾值的scores清零,在進行NMS操作得到對應的98個20*1的class scores。

解釋:為什麼有可能要進行NMS,因為每一個grid cell不止生成了一個bbox。拿狗狗舉例,有可能有多條狗在圖中(當然這不是關鍵)


對其中一個bbox的class scores查詢其最大的scores,如果大於0,這標記bbox為結果,並染色輸出;沒有則放棄該bbox。

解釋:引文confidence的存在,使得大部分的scores都是0,如果最大都是0,說明該bbox對應的grid cell不是任何的Object的中心點。

思考

同一個grid cell可能同時出現兩個相同的class的bbox!

原因:當同一個grid cell對應的2個bbox的IoU小於某個閾值即可。

而不可能同一個grid cell中出現兩個不同的class的bbox!

原因:因為在計算每個bbox的class scores時,是將每個grid cell的Pr(Classi | Object)和前面兩個bbox的confidence相乘,所以屬於同一個grid cell的bbox每個類的class scores大小關係是一樣的。

正因為有這個缺點,YOLO V1對一個grid cell裡有多個目標的情況無能為力,這也是為什麼YOLO V1對小物體準確率不高的原因關鍵!!!

四、conclusion

1.因為很暴力的直接在網格(最後一層feature)上選bbox,Object中心點落在的那個grid cell負責把該Object迴歸出;而不用像faster-rcnn一樣有一個siding windows的多餘操作來提取proposal再篩選哪些適合作為bbox,所以要快很多!

2.由聯合損失函式softmax+smooth變成了一個自己定義的loss function

YOLO v1的精準性和召回率相對於fast-rcnn比較差。其對背景的誤判率比fast-rcnn的誤判率低很多。這說明了YOLO v1中把物體檢測的思路轉成迴歸問題的思路有較好的準確率,但是對於bounding box的定位不是很好。