很是詳細!!!html
http://www.javashuo.com/article/p-qtiocjua-mk.html網絡
這篇博客文章講解特別詳細,以前不懂得一些點在這裏都找到了答案。ide
https://blog.csdn.net/c20081052/article/details/80236015函數
https://zhuanlan.zhihu.com/p/25045711性能
YOLO的核心思想就是利用整張圖做爲網絡的輸入,直接在輸出層迴歸bounding box的位置和bounding box所屬的類別。學習
faster RCNN中也直接用整張圖做爲輸入,可是faster-RCNN總體仍是採用了RCNN那種 proposal+classifier的思想,只不過是將提取proposal的步驟放在CNN中實現了。測試
將一幅圖像分紅SxS個網格(grid cell),若是某個object的中心 落在這個網格中,則這個網格就負責預測這個object。
.net
1. 每一個網格要預測B個bounding box,每一個bounding box除了要回歸自身的位置以外,還要附帶預測一個confidence值。 設計
2. 這個confidence表明了所預測的box中含有object的置信度和這個box預測的有多準兩重信息,其值是這樣計算的: code
其中若是有object落在一個grid cell裏,第一項取1,不然取0。 第二項是預測的bounding box和實際的groundtruth之間的IoU值。
3. 每一個bounding box要預測(x, y, w, h)和confidence共5個值,每一個網格還要預測一個類別信息,記爲C類。則SxS個網格,每一個網格要預測B個bounding box還要預測C個categories。輸出就是S x S x (5*B+C)的一個tensor。
注意:class信息是針對每一個網格的,confidence信息是針對每一個bounding box的。
4. 舉例說明: 在PASCAL VOC中,圖像輸入爲448x448,取S=7,B=2,一共有20個類別(C=20)。則輸出就是7x7x30的一個tensor。
網絡結構借鑑了 GoogLeNet 。24個卷積層,2個全連接層。(用1×1 reduction layers 緊跟 3×3 convolutional layers 取代Goolenet的 inception modules )
1. 在test的時候,每一個網格預測的class信息和bounding box預測的confidence信息相乘,就獲得每一個bounding box的class-specific confidence score: 等式左邊第一項就是每一個網格預測的類別信息,第二三項就是每一個bounding box預測的confidence。這個乘積即encode了預測的box屬於某一類的機率,也有該box準確度的信息。
2. 獲得每一個box的class-specific confidence score之後,設置閾值,濾掉得分低的boxes,對保留的boxes進行NMS處理,就獲得最終的檢測結果。
損失函數設計:
損失函數的設計目標就是讓座標(x,y,w,h),confidence,classification 這個三個方面達到很好的平衡。簡單的所有采用了sum-squared error loss來作這件事會有如下不足: a) 8維的localization error和20維的classification error同等重要顯然是不合理的; b) 若是一個網格中沒有object(一幅圖中這種網格不少),那麼就會將這些網格中的box的confidence push到0,相比於較少的有object的網格,這種作法是overpowering的,這會致使網絡不穩定甚至發散。 解決方案以下:
對不一樣大小的bbox預測中,相比於大bbox預測偏一點,小box預測偏一點更不能忍受。而sum-square error loss中對一樣的偏移loss是同樣。 爲了緩和這個問題,做者用了一個比較取巧的辦法,就是將box的width和height取平方根代替本來的height和width。small bbox的橫軸值較小,發生偏移時,反應到y軸上的loss比big box要大。
一個網格預測多個bounding box,在訓練時咱們但願每一個object(ground true box)只有一個bounding box專門負責(一個object 一個bbox)。具體作法是與ground true box(object)的IOU最大的bounding box 負責該ground true box(object)的預測。這種作法稱做bounding box predictor的specialization(專職化)。每一個預測器會對特定(sizes,aspect ratio or classed of object)的ground true box預測的愈來愈好。(我的理解:IOU最大者偏移會更少一些,能夠更快速的學習到正確位置)
訓練檢測網絡:轉換模型去執行檢測任務,《Object detection networks on convolutional feature maps》提到說在預訓練網絡中增長卷積和全連接層能夠改善性能。在他們例子基礎上添加4個卷積層和2個全連接層,隨機初始化權重。檢測要求細粒度的視覺信息,因此把網絡輸入也又224*224變成448*448。
最後一層輸出爲 (7*7)*30的維度。每一個 1*1*30的維度對應原圖7*7個cell中的一個,1*1*30中含有類別預測和bbox座標預測。總得來說就是讓網格負責類別信息,bounding box主要負責座標信息(部分負責類別信息:confidence也算類別信息)。具體以下:
YOLO對相互靠的很近的物體,還有很小的羣體 檢測效果很差,這是由於一個網格中只預測了兩個框,而且只屬於一類。
對測試圖像中,同一類物體出現的新的不常見的長寬比和其餘狀況是。泛化能力偏弱。
因爲損失函數的問題,定位偏差是影響檢測效果的主要緣由。尤爲是大小物體的處理上,還有待增強。
https://zhuanlan.zhihu.com/p/25053311
http://www.javashuo.com/article/p-fbwammag-cp.html
https://mp.weixin.qq.com/s/SzHhBf9_5lb0bTtY-qAEJQ
劃分網格怎麼實現呢?
https://mp.weixin.qq.com/s/SzHhBf9_5lb0bTtY-qAEJQ