yolo v1原理
目標檢測系列文章
yolo v1原理:https://blog.csdn.net/cjnewstar111/article/details/94035842
yolo v2原理:https://blog.csdn.net/cjnewstar111/article/details/94037110
yolo v3原理:https://blog.csdn.net/cjnewstar111/article/details/94037828
SSD原理:https://blog.csdn.net/cjnewstar111/article/details/94038536
FoveaBox:https://blog.csdn.net/cjnewstar111/article/details/94203397
FCOS:https://blog.csdn.net/cjnewstar111/article/details/94021688
FSAF: https://blog.csdn.net/cjnewstar111/article/details/94019687
基本原理
將輸入圖像劃分為S*S(最終feature map的大小)個cell,每一個cell預測B個bounding boxes,以及這些bounding boxes的confidence scores(置信度),以及C個類別概率。由于一個cell只有一組分類概率,所以在yolov1中,一個cell只能預測一個物體。訓練過程中,ground truth的中點落在哪個cell中,那個cell就負責預測這個ground truth框。
網絡結構
摘自論文翻譯:我們的網絡架構受圖像分類模型GoogLeNet的啟發。我們的網絡有24個卷積層,后面是2個全連接層。我們只使用1×1降維層,后面是3×3卷積層,這與Lin等人類似,而不是GoogLeNet使用的Inception模塊。完整的網絡如圖所示。我們還訓練了快速版本的YOLO,旨在推動快速目標檢測的界限。快速YOLO使用具有較少卷積層(9層而不是24層)的神經網絡,在這些層中使用較少的濾波器。除了網絡規模之外,基本版YOLO和快速YOLO的所有訓練和測試參數都是相同的。我們網絡的最終輸出是7×7×30的預測張量。
實現細節:
S*S格的劃分
其實就是看CNN提取特征最后一層的輸出大小。原始論文中輸入是448*448,最后輸出的feature map是7*7(縮小64倍),那么就劃分為7*7的cell。每一個cell最終會產生一個30維的向量(B=2,一個cell產生2個bounding box的坐標位置和置信度,以及20個類別的概率 B(4+1)+20=30)。
正負樣例的選擇
一個cell中有多個bounding box,那么具體是哪個bounding box作為有效的,而其他作為無效的呢?訓練過程中,將每個預測的bounding box和gt求IOU。這個cell中的哪個bounding box與gt的iou大,那么這個bounding box就就是有效的bounding box,作為正樣例(response bounding box)。其他bounding box就作為負樣例(not response bounding box)。(有的資料中需要把iou小于某一個閾值,才作為負樣例。其實區別不大,就是在計算負樣例的置信度loss的時候的數量不一樣而已)
一個cell中有多個gt怎么處理?
這個是yolo v1的缺點,一個cell只有一組概率預測,也就是一個cell只能預測一個物體。所以如果一個cell中有多個gt,那么只能選擇其中的一個用來訓練。
位置信息
位置信息采用歸一化的(X中心,Y中心,寬,高)表示
X中心的歸一化采用相對cell的x軸長度表示。圖中的黃色虛線a/黃色虛線b
Y中心的歸一化采用相對cell的y軸長度表示。圖中的藍色虛線a/藍色虛線b
寬的歸一化表示采用相對原始圖片的寬度表示。圖中的黃色虛線c/黃色虛線d
高的歸一化表示采用相對原始圖片的高度表示。圖中的藍色虛線c/藍色虛線d
置信度(confidence)
bounding box的置信度 = 該bounding box內存在對象的概率 * 該bounding box與該對象實際bounding box的IOU
損失函數
損失函數分為三部分:坐標誤差,置信度誤差和分類誤差
置信度誤差針對所有的bounding box都要計算。由于無效的bounding box多,所以無效bounding box的置信度有一個系數系數0.5
坐標loss針對有物體的bounding box(response bounding box)計算,分類loss針對有物體的cell計算
如何判斷一個bounding box是有效的還是無效的
首先是判斷gt的中點有沒有落在cell里面,如果落在cell里面,那么預測的兩個bounding box,哪個和gt的iou大,哪個就是有效的bounding box,是正樣例(response bounding box),而iou小的就作為負樣例(not response bounding box)。有些資料里面把iou小于某一個閾值才作為負樣例。
yolo推理
yolo推理的時候,把置信度乘以分類的最高概率,作為一個bounding box的得分,然后大于某一個閾值的得分的bouding box再送到NMS里面處理,最終得出輸出框
數據增強
通過改變訓練數據的飽和度,曝光度,色調,抖動進行數據增強
?
yolo v1的優缺點
優點:
速度快,達到了完全實時的效率
錯誤率低(相對于faster rcnn會把很多背景預測為物體)
泛華能力強(在美術繪畫作品中也有較好的效果)
缺點:
定位不夠精確(map低)
對小目標檢測效果不好(召回率低)
?
參考資料
《真的,關于深度學習與計算機視覺,看這一篇就夠了 | 硬創公開課 》
《物體檢測-回歸方法(YOLO+SSD) 》
《 RCNN學習筆記(10):SSD:Single Shot MultiBox Detector 》
《YOLOv1論文理解》
《YOLO詳解》來自 <https://zhuanlan.zhihu.com/p/25236464>
《YOLO: Real-Time Object Detection 官網》來自 <https://pjreddie.com/darknet/yolo/>
《【YOLO】詳解:YOLO-darknet訓練自己的數據》來自 <http://blog.csdn.net/Jinlong_Xu/article/details/75577007>
《TensorFlow-YOLO代碼閱讀筆記——YOLO中的Loss是如何計算的?》來自 <https://www.cnblogs.com/irenelin/p/7612129.html>
《YOLO v1的詳解與復現》http://www.cnblogs.com/xiongzihua/p/9315183.html
github開源實現 https://github.com/xiongzihua/pytorch-YOLO-v1
總結
- 上一篇: FCOS 基于FPN之上的完全Anch
- 下一篇: 山水音响质量如何