- YOLOv1算法簡介
是繼RCNN,Fast-RCNN和Faster-RCNN之后,對DL目標檢測速度問題提出的另外一種框架。使用深度神經網絡進行對象的位置檢測以及分類,
主要特點是速度快,准確率高,采用直接預測目標對象的邊界框的方法,將候選區和對象識別兩個階段合二為一。
yolov1將原始圖片分割成互不重合的小方塊,(也就是將圖像分成S x S個網格),然后通過卷積最后生產這樣大小的特征圖,基於上面的分析,
可以認為特征圖的每個元素也是對應原始圖片的小方塊,然后利用每個元素來可以預測那些中心點在改小方格的目標
yolo是將物體檢測任務當做回歸問題來做
論文下載:http://arxiv.org/abs/1506.02640 代碼下載:https://github.com/pjreddie/darknet
- YOlOv1的算法原理
如圖所示,分成7*7個小格子,每個格子預測兩個bounding box,
每個bonding box除了要回歸自身的位置( (x, y, w, h) 和 confidence 共5個值)之外,還要附帶預測一個confidence值(置信度)
如果一個目標的中心落入一個網格單元中,該網格單元負責檢測 該目標。
對每一個切割的小單元格預測(置信度,邊界框的位置),每個bounding box需要4個數值來表示其位置,
(Center_x,Center_y,width,height),即(bounding box的中心點的x坐標,y坐標,bounding box的寬度,高度),
也就是要預測 (x, y, w, h) 和 confidence 共5個值,每個網格還要預測一個類別信息,記為 C 類。則 SxS個 網格,
每個網格要預測 B 個 bounding box 還要預測 C 個 categories。
輸出就是 S x S x (5*B+C) 的一個 tensor。
置信度定義為是否存在目標與iou值的乘積
注意:class 信息是針對每個網格的,confidence 信息是針對每個 bounding box 的。
舉例說明: 在 PASCAL VOC 中,圖像輸入為 448x448,取 S=7,B=2,一共有20 個類別(C=20),則輸出就是 7x7x30 的一個 tensor。
算法流程
1、將圖像resize到448 * 448作為神經網絡的輸入
2、運行神經網絡,得到一些bounding box坐標、box中包含物體的置信度和class probabilities
3、進行非極大值抑制,篩選Boxes
算法結構
網絡方面主要采用GoogLeNet,(YOLO未使用inception module,而是采用1*1卷積層,為了跨通道信息整合+3*3卷積層簡單代替)
包含24個卷積層和2個全連接層,卷積層主要用來提取圖像特征,全連接層主要用來預測圖像位置和類別概率,
最后輸出是7*7*30(30是5*2+20),7*7就是切分的網格(grid cell)的數量,可能對於inception的改動,最后幾層全連接的改動,
重點在於最后一層的輸出是7*7*30
輸入圖像分辨率為448*448,所有預測結果歸一化0~1,使用Leaky Relu作為激活函數,第一個全連接層后面接了一個ratio=0.5的Dropout層
參考鏈接 :http://www.imooc.com/article/36391
直接把訓練好的YOLO網絡模型輸入一張圖片,得到一個7*7*30的結果向量,通過NMS(非極大值抑制)來選擇最終的結果;
NMS就是通過打分來選出最好的結果,與這個結果重疊的對象去掉,是一個不斷迭代的過程。
score = 某個對象的概率 * 置信度
所以對於每個網格有20*2個得分,每個對象有49*2個得分;這里的2是bounding box的個數;
具體的過程是:
1,設置一個分數閾值,低於的直接置為0;
2,遍歷對於每個對象:
選出分數最高的那個及其bounding box放到輸出列表中;
將其他的與上面選出的分數最高的那個計算IOU,設置一個閾值,大於閾值的表示重疊度較高,把分數置為0;
如果所有的bounding box都在輸出列表中或者分數為0,那么這個對象的NMS就結束
對接下來的對象執行此過程
3.得出輸出結果;
算法優點
1、YOLO檢測物體非常快
2、YOLO可以很好的區分背景與物體,不像其他物體檢測使用滑窗或者region proposal,分類器只能得到局部圖像的局部信息,
YOLO在訓練和測試時都能看到一整張圖像的信息,因此YOLO在檢測物體時能很好的利用上下文信息,從而不容易背景上預測儲錯誤的物體信息。
和Fast-RCNN相比,YOLO的背景錯誤不到Fast-RCNN的一半
3、YOLO具有高度泛化能力,因此應用新領域或碰到意外的的輸入時不太可能出現故障
算法缺點
1、位置精確性差,容易產生物體的定位錯誤,輸入尺寸固定
2、對相互靠的很近的物體,對於小目標物體,很小的群體檢測效果不好
3、YOLO雖然可以降低將背景檢測為物體的概率,但同時導致召回率較低
參考博客:
https://blog.csdn.net/duanyajun987/article/details/81940284
http://www.imooc.com/article/36391
https://www.cnblogs.com/ywheunji/p/10761239.html