CNN结构:用于检测的CNN结构进化-一站式方法
????? ?? 有興趣查看原文:YOLO詳解 ????
??????? 人眼能夠快速的檢測和識別視野內的物體,基于Maar的視覺理論,視覺先識別出局部顯著性的區塊比如邊緣和角點,然后綜合這些信息完成整體描述,人眼逆向工程最相像的是DPM模型。
???????? 目標的檢測和定位中一個很困難的問題是,如何從數以萬計的候選窗口中挑選包含目標物的物體。只有候選窗口足夠多,才能保證模型的 Recall。傳統機器學習方法應用,使用全局特征+級聯分類器的思路仍然被持續使用。常用的級聯方法有haar/LBP特征+Adaboost決策樹分類器級聯檢測 和HOG特征 + SVM分類器級聯檢測。
??????? 目前,基于CNN的目標檢測框架主要有兩種:
??????? 一種為two-stage基于框選擇的方式,另一種是 one-stage ,例如 YOLO、SSD 等,這一類方法速度很快,但識別精度沒有 two-stage 的高,其中一個很重要的原因是,利用一個分類器很難既把負樣本抑制掉,又把目標分類好。
??????? YOLO的原始論文為 2016 CVPR? You Only Look Once:Unified, Real-Time Object Detection。
??????? 論文這樣說:We present YOLO, a new approach to object detection. Prior work on object detection repurposes classifiers to perform detection. Instead, we frame object detection as a regression problem to spatially separated bounding boxes and associated class probabilities. A single neural network predicts bounding boxes and class probabilities directly from full images in one evaluation. Since the whole detection pipeline is a single network, it can be optimized end-to-end directly on detection performance.
??????? YOLO的特別之處,在于把檢測問題表示為一個分類問題,而不是以往的尋找綁定框/包圍盒+分類的問題。使用一個網絡實現檢測的功能,成為一個端到端的圖像檢測系統。
網絡結構
從網絡設計上,YOLO與rcnn、fast rcnn及faster rcnn的區別如下:
????? (1)YOLO訓練和檢測均是在一個單獨網絡中進行。YOLO沒有顯示地求取region proposal的過程。而rcnn/fast rcnn 采用分離的模塊(獨立于網絡之外的selective search方法)求取候選框(可能會包含物體的矩形區域),訓練過程因此也是分成多個模塊進行。Faster rcnn使用RPN(region proposal network)卷積網絡替代rcnn/fast rcnn的selective search模塊,將RPN集成到fast rcnn檢測網絡中,得到一個統一的檢測網絡。盡管RPN與fast rcnn共享卷積層,但是在模型訓練過程中,需要反復訓練RPN網絡和fast rcnn網絡(注意這兩個網絡核心卷積層是參數共享的)。
????? (2)YOLO將物體檢測作為一個回歸問題進行求解,輸入圖像經過一次inference,便能得到圖像中所有物體的位置和其所屬類別及相應的置信概率。而rcnn/fast rcnn/faster rcnn將檢測結果分為兩部分求解:物體類別(分類問題),物體位置即bounding box(回歸問題)。
?????????????? One Stage方法基于一個單獨的end-to-end網絡,完成從原始圖像的輸入到物體位置和類別的輸出。從YOLO開始,逐漸發展的CNN網絡有YOLO、SSD-Net、YOLO-9000、ION-Net等。從網絡設計上,YOLO與rcnn、fast rcnn及faster rcnn的區別如下:
??????
YOLO檢測步驟
????? 如圖所示
?????
YOLO網絡結構
?????
????? YOLO檢測網絡包括24個卷積層和2個全連接層。其中,卷積層用來提取圖像特征,全連接層用來預測圖像位置和類別概率值。
?? ?? YOLO網絡借鑒了GoogLeNet分類網絡結構。不同的是,YOLO未使用inception 模塊,而是使用1x1卷積層(此處1x1卷積層的存在是為了跨通道信息整合)+3x3卷積層簡單替代。
???? ? YOLO論文中,作者還給出一個更輕快的檢測網絡fast YOLO,它只有9個卷積層和2個全連接層。使用titan x GPU,fast YOLO可以達到155fps的檢測速度,但是mAP值也從YOLO的63.4%降到了52.7%,但卻仍然遠高于以往的實時物體檢測方法(DPM)的mAP值。
作為回歸方法的YOLO
?????? 把檢測問題描述為一個回歸問題。
????????? ????
??????? YOLO將輸入圖像分成 S x S 個格子,每個格子負責檢測 ‘落入’ 該格子的物體。若某個物體的中心位置的坐標落入到某個格子,那么這個格子就負責檢測出這個物體。如上圖所示,圖中物體狗的中心點(紅色原點)落入第5行、第2列的格子內,所以這個格子負責預測圖像中的物體狗。
??????? 每個格子輸出 B 個bounding box/BBX包圍盒(包含物體的矩形區域)信息,以及 C 個物體屬于某種類別的概率信息。
??????? Bounding box信息包含5個數據值,分別是x,y,w,h,和confidence。其中 x,y 是指當前格子預測得到的物體的bounding box的中心位置的坐標。w, h 是BBX / 包圍盒 的寬度和高度。
??????? 注意:實際訓練過程中,w和h的值使用圖像的寬度和高度進行歸一化到 [0,1] 區間內;x,y是bounding box中心位置相對于當前格子位置的偏移值,并且被歸一化到 [0,1] 。
??????? confidence反映當前BBX是否包含物體以及物體位置的準確性,計算方式如下:
????????????????? confidence = P(object)* IOU,
??????? 其中,若BBX包含物體,則P(object) = 1;否則P(object) = 0.?IOU(intersection over union)為預測 BBX與物體真實區域的交集面積(以像素為單位,用真實區域的像素面積歸一化到[0,1]區間)。
?????? YOLO網絡最終的全連接層的輸出維度是S*S*(B*5 + C)。
??? ?? For evaluating YOLO on PASCAL VOC, we use S = 7,B = 2. PASCAL VOC has 20 labelled classes so C = 20. Our final prediction is a 7 *7 *30 tensor.
?????? YOLO論文中,作者訓練采用的輸入圖像分辨率是448x448,S=7,B=2;采用VOC 20類標注物體作為訓練數據,C=20。因此輸出向量為7*7*(20 + 2*5)=1470維。作者開源出的YOLO代碼中,全連接層輸出特征向量各維度對應內容如下:
??????
??????
缺點:
??????? *由于輸出層為全連接層,因此在檢測時,YOLO訓練模型只支持與訓練圖像相同的輸入分辨率。輸入圖像必須resize一下。
???????? *雖然每個格子可以預測B個bounding box,但是最終只選擇只選擇IOU最高的bounding box作為物體檢測輸出,即每個格子最多只預測出一個物體。當物體占畫面比例較小,如圖像中包含畜群或鳥群時,每個格子包含多個物體,但卻只能檢測出其中一個。這是YOLO方法的一個缺陷。
?損失函數定義
?????? YOLO使用均方和誤差MSE作為loss函數來優化模型參數,即網絡輸出的S*S*(B*5 + C)維向量與真實圖像的對應S*S*(B*5 + C)維向量的均方和誤差。如下式所示。其中,corrdError、iouError和classError分別代表預測數據與標定數據之間的坐標誤差、IOU誤差和分類誤差。
【1】
YOLO對上式loss的計算進行了如下修正。
???? [1] 位置相關誤差(坐標、IOU)與分類誤差對網絡loss的貢獻值是不同的,因此YOLO在計算loss時,使用修正。
???? [2] 在計算IOU誤差時,包含物體的格子與不包含物體的格子,二者的IOU誤差對網絡loss的貢獻值是不同的。若采用相同的權值,那么不包含物體的格子的confidence值近似為0,變相放大了包含物體的格子的confidence誤差在計算網絡參數梯度時的影響。為解決這個問題,YOLO 使用修正。(注此處的‘包含’是指存在一個物體,它的中心坐標落入到格子內)。
????? [3]對于相等的誤差值,大物體誤差對檢測的影響應小于小物體誤差對檢測的影響。這是因為,相同的位置偏差占大物體的比例遠小于同等偏差占小物體的比例。YOLO將物體大小的信息項(w和h)進行求平方根來改進這個問題。(注:這個方法并不能完全解決這個問題)。
???????
??????? 其 中,為網絡預測值,帽 為標注值。表示物體落入格子i中,和分別表示物體落入與未落入格子i的第j個bounding box內。
?????
注:
????? *YOLO方法模型訓練依賴于物體識別標注數據,因此,對于非常規的物體形狀或比例,YOLO的檢測效果并不理想。
????? *YOLO采用了多個下采樣層,網絡學到的物體特征并不精細,因此也會影響檢測效果。
????? * YOLO loss函數中,大物體IOU誤差和小物體IOU誤差對網絡訓練中loss貢獻值接近(雖然采用求平方根方式,但沒有根本解決問題)。因此,對于小物體,小的IOU誤差也會對網絡優化過程造成很大的影響,從而降低了物體檢測的定位準確性。
YOLO訓練方式
1、網絡訓練/預訓練。使用ImageNet1000類數據訓練YOLO網絡的前20個卷積層+1個average池化層+1個全連接層。訓練圖像分辨率resize到224x224。
2、用步驟1得到的前20個卷積層網絡參數來初始化YOLO模型前20個卷積層的網絡參數,然后用VOC 20類標注數據 / 或者自己標記的數據集進行YOLO模型訓練。為提高圖像精度,在訓練檢測模型時,將輸入圖像分辨率resize到448x448。
YOLO優缺點
優點
- 簡單方便快。YOLO將物體檢測作為回歸問題進行求解,整個檢測網絡pipeline簡單。在titan x GPU上,在保證檢測準確率的前提下(63.4% mAP,VOC 2007 test set),可以達到45fps的檢測速度。
- 背景誤檢率低。YOLO在訓練和推理過程中能‘看到’ 整張圖像的整體信息,而基于region proposal的物體檢測方法(如rcnn/fast rcnn),在檢測過程中,只‘看到’候選框內的局部圖像信息。因此,若當圖像背景(非物體)中的部分數據被包含在候選框中送入檢測網絡進行檢測時,容易被誤檢測成物體。測試證明,YOLO對于背景圖像的誤檢率低于fast rcnn誤檢率的一半。論文中,YOLO對背景內容的誤判率(4.75%)比fast rcnn的誤判率(13.6%)低很多。
- 通用性強。YOLO對于藝術類作品中的物體檢測同樣適用。它對非自然圖像物體的檢測率遠遠高于DPM和RCNN系列檢測方法。
缺點:
- 識別物體位置精準性差。論文中,YOLO的定位準確率較差,占總誤差比例的19.0%,而fast rcnn僅為8.6%。
- 召回率低。只能找到一個。
SSD-NET
??? ? The Single Shot Detector(SSD)
????? GitHub:使用MxNet的SSD-Net實現???https://github.com/zhreshold/mxnet-ssd???
????? 文章鏈接:論文閱讀:SSD: Single Shot MultiBox Detector???????????????????????????????
????? 2016年 ECCV 2016 的一篇文章,是 UNC Chapel Hill(北卡羅來納大學教堂山分校) 的 Wei Liu 大神的新作,論文代碼:https://github.com/weiliu89/caffe/tree/ssd
?????? SSD 將輸出一系列 離散化(discretization) 的 bounding boxes,這些 bounding boxes 是在不同層次(layers) 上的 feature maps 上生成的,并且有著不同的aspect ratio。
?????? 主要貢獻總結如下:
-
提出了新的物體檢測方法:SSD,比原先最快的YOLO: You Only Look Once 方法,還要快,還要精確。保證速度的同時,其結果的mAP 可與使用region proposals 技術的方法(如Faster R-CNN)相媲美。
-
SSD 方法的核心就是 predict object(物體),以及其歸屬類別的 score(得分);同時,在 feature map 上使用小的卷積核,去predict 一系列 bounding boxes 的box offsets。
-
本文中為了得到高精度的檢測結果,在不同層次的 feature maps 上去 predictobject、box offsets,同時,還得到不同aspect ratio 的 predictions。
-
本文的這些改進設計,能夠在當輸入分辨率較低的圖像時,保證檢測的精度。同時,這個整體 end-to-end 的設計,訓練也變得簡單。在檢測速度、檢測精度之間取得較好的trade-off。
-
本文提出的模型(model)在不同的數據集上,如PASCAL VOC、MS COCO、ILSVRC, 都進行了測試。在檢測時間(timing)、檢測精度(accuracy)上,均與目前物體檢測領域 state-of-art 的檢測方法進行了比較。
???????? 使用VGG19作為預訓練網絡同時評測.............................
YOLO-V2
??????? 此篇文章:YOLO v2之總結篇(linux+windows) ??????
??? ? ? 此篇文章:YOLO v1之總結篇(linux+windows)???????????????????????????????????????????????????????????????????????
? ? ? ? 為提高物體定位精準性和召回率,YOLO作者提出了YOLO9000。不管是速度還是精度都超過了SSD300,和YOLOv1相比,確實有很大的性能的提升。
??????? 提高訓練圖像的分辨率,引入了faster rcnn中anchor box的思想,對各網絡結構及各層的設計進行了改進,輸出層使用卷積層替代YOLO的全連接層,聯合使用coco物體檢測標注數據和imagenet物體分類標注數據訓練物體檢測模型。相比YOLO , YOLO9000在識別種類、精度、速度、和定位準確性等方面都有大大提升。
跑一遍代碼
使用YOLO訓練自己的物體識別模型也非常方便,只需要將配置文件中的20類,更改為自己要識別的物體種類個數即可。
訓練時,建議使用YOLO提供的檢測模型(使用VOC 20類標注物體訓練得到)去除最后的全連接層初始化網絡。
YOLO作者開源代碼請見darknet,Windows版可以參考windarknet, 支持Visual Studio編譯。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的CNN结构:用于检测的CNN结构进化-一站式方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CNN结构:用于检测的CNN结构进化-分
- 下一篇: 拒绝三无垃圾食品的标语文案30句