圖像分類解決了是什么的問題梅惯,目標檢測解決了在哪里的問題。簡單來說就是在圖像分類的基礎上,以包圍盒的(bounding box)形式框出物體。
很多計算機視覺任務(如人臉識別泼掠,車牌識別楞卡,場景描述)背后的基礎都是目標檢測专钉。自從 AlexNet 獲得 ILSVRC 2012 挑戰(zhàn)賽冠軍后图柏,用 CNN 進行圖像分類成為主流。目標檢測也得益于CNN在圖像分類領域的進步發(fā)展越來越快喉祭。
技術路線:基于滑動窗口的方案
1养渴、滑窗法
滑窗法(Sliding Window)是一種經典的目標檢測方法。首先對輸入圖像進行不同窗口大小的滑窗進行從左往右泛烙、從上到下的滑動理卑。每次滑動時候對當前窗口執(zhí)行分類器(分類器是事先訓練好的)。如果當前窗口得到較高的分類概率蔽氨,則認為檢測到了物體藐唠。對每個不同窗口大小的滑窗都進行檢測后,會得到不同窗口檢測到的物體標記鹉究,這些窗口大小會存在重復較高的部分宇立,最后采用非極大值抑制(Non-Maximum Suppression, NMS)的方法進行篩選。最終自赔,經過NMS篩選后獲得檢測到的物體妈嘹。
交并比(IOU)與非最大抑制(NMS)
(1)交并比(IOU)
交并比用來描述兩個邊框的重合程度,重合度IOU計算公式為:IOU=(A∩B)/(A∪B)绍妨,即兩框覆蓋區(qū)域的交集與并集的面積比润脸。IOU越大,說明兩個邊框重合度越高他去。
(2)非最大抑制(NMS)
當邊框預測環(huán)節(jié)生成了大量提議邊框后毙驯,接著要為每個矩形框做類別分類概率,最后需要判別哪些矩形框是沒用的灾测。
所謂的非極大值抑制就是根據(jù)分類器類別分類概率做排序爆价,從小到大排序,先拿最大概率候選框與其他框計算重疊度IOU媳搪,丟棄高于閾值的提議框铭段。然后從沒有被丟棄的提議框中再找最大概率提議框,重復上述操作.....直到找到所有被保留下來的提議框秦爆。
滑窗法簡單易于理解稠项,但是不同窗口大小進行圖像全局搜索導致效率低下,而且設計窗口大小時候還需要考慮物體的長寬比鲜结。所以,對于實時性要求較高的分類器,不推薦使用滑窗法精刷。
技術路線:基于候選區(qū)域的方案
候選區(qū)域(Region Proposal)拗胜,就是預先找出圖中目標可能出現(xiàn)的位置,通過利用圖像中的紋理怒允、邊緣埂软、顏色等信息,保證在選取較少窗口(幾千個甚至幾百個)的情況下保持較高的召回率纫事。
候選區(qū)域方法比傳統(tǒng)的滑動窗口方法獲取的質量要更高勘畔。比較常用的生成候選區(qū)域的方法有:SelectiveSearch(SS,選擇性搜索)丽惶、Edge Boxes(EB)炫七、RPN網絡。
1钾唬、R-CNN
該方法作為深度學習用于物體識別的開山之作万哪,后續(xù)很多基于候選區(qū)域為基礎的方法都是在該方法上進行改進得到的。該方案首先利用一種選擇搜索算法(selective search)從圖中選出2000個左右的候選框抡秆,對每一個候選框內的圖片縮放至指定的大小并放入CNN中進行特征提取奕巍,并將指定的特征存儲下來。提取出特征后使用SVM進行分類儒士,最后通過非極大值抑制輸出結果的止。
選擇搜索法(selective search)
選擇搜索算法的主要觀點:圖像中物體可能存在的區(qū)域應該是有某些相似性或者連續(xù)性區(qū)域的∽帕茫基于這一想法采用子區(qū)域合并的方法進行提取提議邊界框诅福。首先,對輸入圖像用分割算法產生許多小的子區(qū)域睹酌。其次权谁,根據(jù)這些子區(qū)域之間相似性(相似性標準主要有顏色、紋理憋沿、大小等等)進行區(qū)域合并旺芽,不斷的進行區(qū)域迭代合并。每次迭代過程中對這些合并的子區(qū)域做外切矩形(bounding boxes)辐啄,這些子區(qū)域外切矩形就是通常所說的提議框采章。它的計算效率優(yōu)于滑窗法,而且由于采用子區(qū)域合并策略壶辜,所以可以包含各種大小的疑似物體框悯舟。 合并區(qū)域相似的指標多樣性,提高了檢測物體的概率砸民。
代碼實現(xiàn)1
代碼實現(xiàn)2
R-CNN的訓練可分成下幾步:
(1)通過選擇性搜索抵怎,對待檢測的圖片進行搜索出約2000個候選窗口奋救。
(2)把這2000個候選窗口的圖片都縮放到227*227,然后分別輸入CNN中(論文中使用的CNN網絡是AlexNet反惕,數(shù)據(jù)集為ImageNet)尝艘,每個候選窗口提取出一個特征向量,也就是說利用CNN對每個候選窗口進行提取特征向量姿染,并將提取到的特征存儲起來背亥。
(3)把上面每個候選窗口的對應特征向量,利用SVM算法進行分類識別悬赏。
R-CNN的缺點是計算量太大狡汉。在一張圖片中,通過選擇搜索法得到的有效區(qū)域往往在1000個以上闽颇,這意味著要重復計算1000多次神經網絡盾戴,非常耗時。另外进萄,在訓練階段捻脖,還需要把所有特征保存起來再通過SVM進行訓練,這也是非常耗時且麻煩的中鼠。
創(chuàng)新
使用了選擇搜索法作為邊框預測算法可婶。
使用了CNN提取圖像特征
2、SPP-net
R-CNN 需要足夠多的提議窗口才能保證準確度援雇, 而很多區(qū)域是相互重疊的矛渴。R-CNN 的訓練和推理過程都很緩慢。例如惫搏,我們生成了 2000 個的區(qū)域提議具温,每個區(qū)域提議分別進入 CNN。換句話說筐赔,我們對不同的候選窗口重復了進行了 2000 次的提取特征铣猩。
后來,2015年發(fā)表在IEEE上的論文《Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Recognition》提出了一個對R-CNN的優(yōu)化措施茴丰,那就是"空間金字塔池化"达皿。
空間金字塔池化的英文全稱是Spatial Pyramid Pooling(簡稱SPP),其核心就是SPP池化層贿肩。含有SPP池化層的SPP-net不需要對每個候選區(qū)域(2000個左右)提取卷積特征圖峦椰,只需要對整圖提一次卷積特征圖,然后將候選區(qū)域映射到卷積特征層上即可汰规,從而提升了速度汤功。此外,它還解決了深度網絡固定輸入層尺寸的這個限制溜哮,使得網絡可以享受不限制輸入尺寸帶來的好處滔金。
SPP池化層實現(xiàn)對不同尺寸的兼容
金字塔池化其實就是把每個輸入的候選區(qū)域的特征圖分別分成4X4=16塊色解,2X2=4塊,1X1=1塊(不變)鹦蠕,取每塊的最大值作為代表冒签,總共21塊,即每張候選區(qū)域的特征圖都會轉換為固定的21維的特征向量钟病。
對比R-CNN,SPP-net的訓練過程是:
(1)通過選擇性搜索刚梭,對待檢測的圖片進行搜索出2000個候選區(qū)域肠阱。這一步和R-CNN一樣。
(2) 特征提取階段朴读。這一步就是和R-CNN最大的區(qū)別了屹徘,這一步驟的具體操作是把整張待檢測的圖片,輸入CNN中衅金,進行一次性特征提取噪伊,得到feature maps,然后在feature maps中找到各個候選區(qū)域氮唯,再對各個候選區(qū)域采用金字塔空間池化(SPP池化層)鉴吹,提取出固定長度的特征向量。而R-CNN輸入的是每個候選區(qū)域惩琉,然后在進入CNN豆励,因為SPP-Net只需要一次對整張圖片進行特征提取,速度會大大提升瞒渠。
(3)最后一步也是和R-CNN一樣良蒸,采用SVM算法進行特征向量分類識別。
SPP-net對R-CNN最大的改進就是特征提取步驟做了修改伍玖,其他模塊仍然和R-CNN一樣嫩痰。和R-CNN相比,SPP-net速度提高了百倍窍箍。
創(chuàng)新
提出了一種從候選區(qū)域到全圖特征之間的對應映射關系串纺,通過此種映射關系可以直接獲取到候選區(qū)域的特征向量(了解映射方法)
提出了一種適應不同輸入尺寸提取固定長度特征的網絡結構
3、Fast R-CNN
Ross Girshick在2015年推出Fast R-CNN仔燕,構思精巧造垛,流程更為緊湊,大幅提升了目標檢測的速度晰搀。Fast R-CNN和R-CNN相比五辽,測試時間從49秒減少到2.3秒。
相對于R-CNN與SPP-net外恕,F(xiàn)ast R-CNN的主要亮點有:Fast R-CNN直接使用Softmax替代了RCNN中SVM進行分類杆逗,不再對網絡進行分步訓練乡翅;用ROI層代替SPP層,可以更高效地訓練更新整個網絡罪郊。
ROI池化層
ROI池化層實際上是SPP池化層的一個精簡版蠕蚜,SPP池化層對每個候選區(qū)域使用了不同大小的金字塔映射,而ROI池化層只需要下采樣到一個7x7的矩陣悔橄。
由于VGG16網絡conv5_3有512個特征圖靶累,這樣每個候選區(qū)域就對應了一個7X7X512維度的特征向量
創(chuàng)新
提出了ROI池化層
使用Softmax替代了SVM執(zhí)行分類
Fast-RCNN很重要的一個貢獻是成功的讓人們看到了Region Proposal+CNN這一框架實時檢測的希望,原來多類檢測真的可以在保證準確率的同時提升處理速度癣疟,也為后來的Faster-RCNN做下了鋪墊挣柬。
4、Faster R-CNN
Fast R-CNN測試時每張圖像前饋網絡只需0.2秒睛挚,但瓶頸在于提取候選區(qū)域需要2秒邪蛔。Faster R-CNN不再使用現(xiàn)有的無監(jiān)督候選區(qū)域生成算法,而引入了候選區(qū)域網絡(Region Proposal Network, RPN)作為代替扎狱。RPN 快速且高效地掃描每一個位置侧到,來評估在給定的區(qū)域內是否需要作進一步處理,其實現(xiàn)方式如下:通過輸出 k 個邊界框建議淤击,每個邊界框建議都有 2 個值——代表每個位置包含目標對象和不包含目標對象的概率匠抗。
Faster R-CNN的測試時間是0.2秒,接近實時遭贸。后來有研究發(fā)現(xiàn)戈咳,通過使用更少的候選區(qū)域,可以在性能損失不大的條件下進一步提速壕吹。
區(qū)域提議網絡(Region proposal network)
Faster R-CNN拋棄了傳統(tǒng)的滑動窗口和SS方法著蛙,直接使用RPN生成候選區(qū)域,這也是Faster R-CNN的巨大優(yōu)勢耳贬,能極大提升候選區(qū)域的生成速度踏堡。
RPN 會在最后卷積層的輸出(一個特征圖)上用滑動窗口(通常是 3x3)方法進行潛在對象檢測。每個窗口咒劲,RPN會使用一組定義好的錨點框(anchors顷蟆,也叫錨盒)生成多個可能的 RoI,每個 RoI 都被視為區(qū)域建議腐魂。錨點框是寬高比固定的方框帐偎,例如寬矮或高瘦方框。9個矩形共有3種形狀蛔屹,長寬比為大約為{1:1,1:2,2:1}對于每個建議削樊,該網絡都生成一個概率 Pc,將該區(qū)域分類為對象(或非對象)區(qū)域,并包含該對象的一組邊界框坐標漫贞。
對象概率很低的區(qū)域(例如 Pc < 0.5)被丟棄甸箱。
所以,僅僅是個二分類而已迅脐!
了解更多
Faster R-CNN 網絡工作流如下
創(chuàng)新
提出了RPN網絡代替SS芍殖,實現(xiàn)了真正的端到端檢測
5、R-FCN
RCNN 在目標檢測上取得了很大的成功谴蔑,比如 SPPnet豌骏、Fast R-CNN、Faster R-CNN 等树碱,這些方法的典型特征都是一個二分網絡肯适,以 ROI池化層為界,前面子網絡用于特征提取成榜,后面子網絡用于目標檢測。
在特征提取子網絡我們可以通過共用一個CNN來提升速度蹦玫,那么檢測子網絡是否也可以這么做呢(而不是對每個候選區(qū)域都做一遍計算)赎婚?這就是設計 R-FCN 的動機:通過最大化共享計算來提升檢測子網絡部分的速度。
R-FCN即基于區(qū)域的全卷積網絡 (Region-based Fully Convolutional Net)樱溉,可以在每個輸出之間完全共享計算挣输。作為全卷積網絡,它在模型設計過程中遇到了一個特殊的問題福贞。
一方面撩嚼,當對一個目標進行分類任務時,我們希望學到模型中的位置不變性(location invariance):無論這只貓出現(xiàn)在圖中的哪個位置挖帘,我們都想將它分類成一只貓完丽。另一方面,當進行目標檢測任務時拇舀,我們希望學習到位置可變性(location variance):如果這只貓在左上角逻族,那么我們希望在圖像左上角這個位置畫一個框。
所以骄崩,問題出現(xiàn)了聘鳞,我們應該如何在位置不變性(location invariance)和位置可變性(location variance)之間做出權衡呢?
R-FCN 提出了一種全新的特征聚集方法要拂,主要思想是在特征聚集時人工引入位置信息抠璃,從而有效改善較深的神經網絡對物體位置信息的敏感程度。
位置敏感的ROI池化
運行RPN網絡脱惰,以生成候選區(qū)域搏嗡。
對于每一個候選區(qū)域首先被平均分割成個子區(qū)域,然后通過一層
的卷積核生成通道數(shù)為
的特征圖枪芒。這里彻况,
代表一個候選區(qū)域里所有子區(qū)域的數(shù)量谁尸,
代表所有的類別數(shù)加上背景。
對每個子區(qū)域纽甘,都會判斷這個子區(qū)域是否匹配具體目標的對應位置良蛮,給出相應的得分。
對個子區(qū)域的得分求平均悍赢,得到對應類的分數(shù)决瞳。
將所有類的得分組成的維向量使用 softmax 回歸,來對候選區(qū)域進行分類左权。
形象地說就是皮胡,在處理每個候選區(qū)域時候,我們會將其切分成多個子區(qū)域赏迟,在每個子區(qū)域上反復詢問系統(tǒng):「這看起來像是人臉的『上-左』部分嗎屡贺?」,「這看起來像是人臉的『上-中』部分嗎锌杀?」甩栈,「這看起來像是人臉的『上-右』部分嗎?」等等糕再。系統(tǒng)會對所有類重復這個過程量没。
如果有足夠的子區(qū)域表示「是的,我的確匹配人臉的這個部分突想!」那么該區(qū)域就會被分類成人臉殴蹄。
創(chuàng)新
提出了位置敏感的ROI池化結構,在同等質量下檢測速度比Faster R-CNN提升了幾倍
R-CNN, Fast R-CNN, Faster R-CNN, R-FCN這些算法的演進思路是逐漸提高網絡中圖像級別計算的比例猾担,同時降低區(qū)域級別計算的比例袭灯。R-CNN中幾乎所有的計算都是區(qū)域級別計算,而R-FCN中幾乎所有的計算都是圖像級別計算垒探。
技術路線:基于直接回歸的方案
基于候選區(qū)域的方法由于有兩步操作妓蛮,雖然檢測性能比較好,但速度上離實時仍有一些差距圾叼「蚩耍基于直接回歸的方法不需要候選區(qū)域,直接輸出分類/回歸結果夷蚊。這類方法由于圖像只需前饋網絡一次构挤,速度通常更快,可以達到實時惕鼓。
1筋现、YOLO v1
YOLO意思是You Only Look Once,創(chuàng)造性的將候選區(qū)和對象識別這兩個階段合二為一,看一眼圖片就能知道有哪些對象以及它們的位置矾飞。
它首先將圖像resize到448x448作為輸入一膨,然后將圖片劃分為7x7的網格(grid)。物體的中心落在哪個網格洒沦,就由那個網格負責預測豹绪!所以一張圖片最多能檢測出49個對象,因為7x7=49申眼。
每個網格允許預測出2個邊框(bounding box瞒津,包含某個對象的矩形框),總共 49*2=98 個邊框括尸∠矧剑可以理解為98個候選區(qū),它們很粗略的覆蓋了圖片的整個區(qū)域濒翻。
不是Anchor屁柏!
Faster RCNN手工設置了n個先驗框(Anchor,預先設置好位置的邊框)的設計有送,每個先驗框有不同的大小和寬高比前联。YOLO的邊框看起來很像一個網格對應2個先驗框,但它們不是娶眷。YOLO并沒有預先設置2個邊框的大小和形狀,也沒有對每個邊框分別輸出一個對象的預測啸臀。它的意思僅僅是對一個對象預測出2個邊框届宠,選擇預測得相對比較準的那個。
去掉候選區(qū)這個步驟以后乘粒,YOLO的結構非常簡單豌注,就是單純的卷積、池化最后加了兩層全連接灯萍。單看網絡結構的話轧铁,和普通的CNN對象分類網絡幾乎沒有本質的區(qū)別。所以粗略來說旦棉,YOLO的整個結構就是輸入圖片經過神經網絡的變換得到一個輸出的張量齿风,如下圖所示。
因為只是一些常規(guī)的神經網絡結構运沦,所以泵额,理解YOLO的設計的時候,重要的是理解輸入和輸出的映射關系携添。
我們先考慮一個網格只對應一個邊框的情況嫁盲。
邊框的置信度
邊框的置信度 = 該邊框內存在對象的概率 * 該邊框與該對象實際邊框的IOU
用公式來表示就是:
綜合來說什往,一個邊框的置信度Confidence意味著它是否包含對象且位置準確的程度伊诵。置信度高表示這里存在一個對象且位置比較準確,置信度低表示可能沒有對象或者即便有對象也存在較大的位置偏差性芬。
在分類數(shù)為3的情況下瘦黑,經過神經網絡對輸入圖像信息的提取和變換,一個網格及其周邊的信息被識別和整理奇唤,最后編碼到了8(5+3)維向量中幸斥。
如果分類數(shù)為20呢?我們會得到一個25(20+5)維向量咬扇。
如果一個網格對應兩個邊框呢甲葬?這就是30(5x2+20)維向量。
因為網格和邊框設置的比較稀疏懈贺,所以這個版本的YOLO訓練出來后預測的準確率和召回率都不是很理想经窖,后續(xù)的v2、v3版本還會改進梭灿。當然画侣,因為其速度能夠滿足實時處理的要求,所以對工業(yè)界還是挺有吸引力的堡妒。
2配乱、SSD
SSD算法,其英文全名是Single Shot MultiBox Detector皮迟,Single shot指明了SSD算法屬于one-stage方法搬泥,MultiBox指明了SSD是多框預測。
在YOLO v1之后SSD橫空出世万栅,它在準確度上比YOLO v1要好很多佑钾。
相比YOLO v1,SSD有如下特點:
(1)SSD采用CNN來直接進行檢測烦粒,而不是像YOLO v1那樣在全連接層之后做檢測休溶;
(2)SSD提取了不同尺度的特征圖來做檢測代赁,大尺度特征圖(較靠前的特征圖)可以用來檢測小物體,而小尺度特征圖(較靠后的特征圖)用來檢測大物體兽掰;
(3)SSD采用了不同尺度和長寬比的先驗框(Anchors)芭碍。
YOLO v1算法缺點是難以檢測小目標,而且定位不準孽尽,上面的幾項特性使得SSD在一定程度上克服了這些缺點窖壕。
SSD采用VGG16作為基礎模型,然后在VGG16的基礎上新增了卷積層來獲得更多的特征圖以用于檢測杉女。SSD與YOLO v1的網絡結構對比如下圖所示瞻讽。上面是SSD模型,下面是YOLO v1模型熏挎,可以明顯看到SSD利用了多尺度的特征圖做檢測速勇。模型的輸入圖片大小是300×300(還可以是512×512,其與前者網絡結構沒有差別坎拐,只是最后新增一個卷積層)
3烦磁、YOLO v2
SSD的出現(xiàn)表明端到端的單階段目標檢測模型如果善加調理,在擁有較快速度的同時哼勇,一樣可以達到與像Faster-RCNN等雙階段目標檢測模型類似的準確度都伪。
經過一年的蟄伏之后,YOLO v2于2016年問世积担。它有效地借鑒了Faster-RCNN/SSD中使用的思想陨晶。YOLO v2相對v1版本,在繼續(xù)保持處理速度的基礎上帝璧,三個方面進行了改進:
預測更準確(Better)
(1)使用高分辨率圖像微調分類模型
原來的YOLO v1版本的網絡在預訓練的時候采用的圖像輸入為224x224(這是因為一般預訓練的分類模型都是在ImageNet數(shù)據(jù)集上進行的)珍逸,然后在檢測的時候采用448x448的輸入圖像,這會導致從分類模型切換到檢測模型的時候聋溜,模型還要適應圖像分辨率的改變。
YOLO v2將預訓練分成兩步叭爱。先用224x224的輸入從頭開始訓練網絡撮躁,大概160個epoch(表示將所有訓練數(shù)據(jù)循環(huán)跑160次),然后再將輸入調整到448x448买雾,再訓練10個epoch把曼。注意這兩步都是在ImageNet數(shù)據(jù)集上操作。最后再在檢測的數(shù)據(jù)集上微調(fine-tuning)漓穿,也就是檢測的時候用448x448的圖像作為輸入就可以順利過渡了嗤军。YOLO的作者的實驗表明這樣操作可以提高3.7的mAP。
(2)加入了批量歸一化層(Batch Normalization)
隨著神經網絡的訓練晃危,網絡層的輸入分布會發(fā)生變動叙赚,逐漸向激活函數(shù)取值兩端靠攏老客,如:sigmoid激活函數(shù),此時會進入飽和狀態(tài)震叮,梯度更新緩慢胧砰,對輸入變動不敏感,甚至梯度消失導致模型難以訓練苇瓣。通過對網絡的每一個卷積層之后激活函數(shù)之前加入BN層尉间,可以將分布拉到均值為0,標準差為1的正態(tài)分布击罪,從而使激活函數(shù)處于對輸入值敏感的區(qū)域哲嘲,從而加快模型訓練,最終有2的mAP提升媳禁。此外眠副,BN層還能起到類似dropout的正則化作用,可以從模型中去掉Dropout并使用較大的學習率而不會產生過擬合损话。
(3)采用先驗框(Anchor Boxes)
借鑒Faster RCNN的做法侦啸,YOLO v2也嘗試采用先驗框(anchor)。在每個網格預先設定一組不同大小和寬高比的邊框丧枪,來覆蓋整個圖像的不同位置和多種尺度光涂,這些先驗框作為預定義的候選區(qū)在神經網絡中將檢測其中是否存在對象,以及微調邊框的位置拧烦。
同時YOLO v2移除了全連接層忘闻。另外去掉了一個池化層,使網絡卷積層輸出具有更高的分辨率恋博。
之前YOLO v1并沒有采用先驗框齐佳,并且每個網格只預測兩個邊框,整個圖像98個债沮。YOLO v2如果每個網格采用9個先驗框炼吴,總共有13x13x9=1521個先驗框。所以疫衩,相對YOLO v1的81%的召回率硅蹦,YOLO v2的召回率大幅提升到88%。同時有0.2的mAP輕微下降闷煤。
不過YOLO v2接著進一步對先驗框進行了改良童芹。
(4)聚類提取先驗框尺度
之前先驗框都是手工設定的,YOLO v2嘗試統(tǒng)計出更符合樣本中對象尺寸的先驗框鲤拿,這樣就可以減少網絡微調先驗框到實際位置的難度假褪。YOLO v2的做法是對訓練集中標注的邊框進行聚類分析,以尋找盡可能匹配樣本的邊框尺寸近顷。
聚類算法最重要的是選擇如何計算兩個邊框之間的"距離"生音,對于常用的歐式距離宁否,大邊框會產生更大的誤差,但我們關心的是邊框的IOU久锥。所以家淤,YOLO v2在聚類時采用以下公式來計算兩個邊框之間的"距離"。
centroid是聚類時被選作中心的邊框瑟由,box就是其它邊框絮重,d就是兩者間的"距離"。IOU越大歹苦,"距離"越近青伤。
(5)約束預測邊框的位置
作者在引入先驗框的時候遇到的另一個問題是模型不穩(wěn)定,尤其是在訓練剛開始的時候殴瘦。作者認為這種不穩(wěn)定主要來自預測框的(x,y)值狠角。其位置預測公式為:
其中,
是預測邊框的中心,
,
是先驗框(anchor)的中心點坐標蚪腋,
,
是先驗框(anchor)的寬和高丰歌,
,
是要學習的參數(shù)。
由于,
的取值沒有任何約束屉凯,因此預測邊框的中心可能出現(xiàn)在任何位置立帖,訓練早期階段不容易穩(wěn)定。YOLO v2調整了預測公式悠砚,將預測邊框的中心約束在特定網格內晓勇。
σ
其中,
,
,
是預測邊框的中心和寬高,
是預測邊框的置信度灌旧,
,
是當前網格左上角到圖像左上角的距離绑咱,
,
是先驗框的寬和高。σ是sigmoid函數(shù)枢泰。是要學習的參數(shù)描融,分別用于預測邊框的中心和寬高,以及置信度衡蚂。
,
,
,
,
是要學習的參數(shù)稼稿,分別用于預測邊框的中心和寬高,以及置信度讳窟。
根據(jù)新的計算公式,預測邊框的藍色中心點被約束在藍色背景的網格內敞恋。約束邊框位置使得模型更容易學習丽啡,且預測更為穩(wěn)定。
(6)passthrough層檢測細粒度特征
對象檢測面臨的一個問題是圖像中對象會有大有小硬猫,輸入圖像經過多層網絡提取特征补箍,最后輸出的特征圖中(比如YOLO v2中輸入416x416經過卷積網絡下采樣最后輸出是13x13)改执,較小的對象可能特征已經不明顯甚至被忽略掉了。為了更好的檢測出一些比較小的對象坑雅,最后輸出的特征圖需要保留一些更細節(jié)的信息辈挂。
YOLO v2引入一種稱為passthrough層的方法在特征圖中保留一些細節(jié)信息。具體來說裹粤,就是在最后一個pooling之前终蒂,特征圖的大小是26x26x512,將其1拆4遥诉,直接傳遞(passthrough)到池化層后(并且又經過一組卷積)的特征圖拇泣,兩者疊加到一起作為輸出的特征圖。
根據(jù)YOLO v2的代碼矮锈,特征圖先用1x1卷積從 26x26x512 降維到 26x26x64霉翔,再做1拆4并passthrough。
passthrough層檢測細粒度特征有1的mAP提升苞笨。
(7)多尺度圖像訓練
因為去掉了全連接層债朵,YOLO v2可以輸入任何尺寸的圖像。因為整個網絡下采樣倍數(shù)是32瀑凝,作者采用了{320,352,...,608}等10種輸入圖像的尺寸序芦,這些尺寸的輸入圖像對應輸出的特征圖寬和高是{10,11,...19}。訓練時每10個batch就隨機更換一種尺寸猜丹,使網絡能夠適應各種大小的對象檢測芝加。
多尺度圖像訓練對mAP有1.4的提升。
(8)高分辨率圖像的對象檢測
因為YOLO v2調整網絡結構后能夠支持多種尺寸的輸入圖像(通常是使用416x416的輸入圖像)射窒,如果用較高分辨率的輸入圖像藏杖,比如544x544,則mAP可以達到78.6脉顿,有1.8的提升蝌麸。
速度更快(Faster)
為了進一步提升速度,YOLO v2使用了一個新的分類網絡作為特征提取部分艾疟,參考了前人的工作經驗来吩。類似于VGG,網絡使用了較多的3x3卷積核蔽莱,在每一次池化操作后把通道數(shù)翻倍弟疆。借鑒了network in network的思想,網絡使用了全局平均池化(global average pooling)做預測盗冷,把1x1的卷積核置于3x3的卷積核之間怠苔,用來壓縮特征。使用batch normalization穩(wěn)定模型訓練仪糖,加速收斂柑司,正則化模型迫肖。
最終得出的基礎模型就是Darknet-19,包含19個卷積層攒驰、5個最大值池化層(max pooling layers )蟆湖。Darknet-19處理一張照片需要55.8億次運算,imagenet的top-1準確率為72.9%玻粪,top-5準確率為91.2%隅津。Darknet-19的精度不弱于VGG-16,但浮點運算量減少到約1/5奶段,提供了更快的運算速度饥瓷。
識別對象更多(Stronger)
眾多周知,檢測數(shù)據(jù)集的標注要比分類數(shù)據(jù)集打標簽繁瑣的多痹籍,所以ImageNet分類數(shù)據(jù)集比VOC等檢測數(shù)據(jù)集高出幾個數(shù)量級呢铆。所以在YOLO v1中,邊界框的預測其實并不依賴于物體的標簽蹲缠,YOLO v2實現(xiàn)了在分類和檢測數(shù)據(jù)集上的聯(lián)合訓練棺克。對于檢測數(shù)據(jù)集,可以用來學習預測物體的邊界框线定、置信度以及為物體分類娜谊,而對于分類數(shù)據(jù)集可以僅用來學習分類,但是其可以大大擴充模型所能檢測的物體種類斤讥。
......
雖然YOLO v2做出了一些改進纱皆,但總的來說網絡結構依然很簡單。就是一些卷積+pooling芭商,從416x416x3 變換到 13x13x5x25派草。稍微大一點的變化是增加了batch normalization,增加了一個passthrough層铛楣,去掉了全連接層近迁,以及采用了5個先驗框。
對比YOLO v1的輸出張量簸州,YOLO v2的主要變化就是會輸出5個先驗框鉴竭,且每個先驗框都會嘗試預測一個對象。輸出的 13x13x5x25 張量中岸浑,25維向量包含20個對象的分類概率+4個邊框坐標+1個邊框置信度搏存。
4、YOLO v3
作為YOLO系列目前最新的算法矢洲,YOLO v3 的模型比YOLO v2既有保留又有改進璧眠。
(1)網絡結構
YOLO每一代的提升很大一部分決定于骨干(backbone)網絡的提升,從v2的darknet-19到v3的darknet-53。yolo_v3還提供可替換的backbone——tiny darknet蛆橡。要想性能牛叉,backbone可以用Darknet-53掘譬,要想輕量高速泰演,可以用tiny-darknet。
darknet-53是可以和resnet-152正面剛的backbone葱轩。darknet-53與resnet-152具有相似的性能睦焕,速度提高2倍。darknet-53也可以實現(xiàn)每秒最高的測量浮點運算靴拱。這意味著網絡結構可以更好地利用GPU垃喊,從而使其評估效率更高,速度更快袜炕。這主要是因為ResNets的層數(shù)太多本谜,效率不高。
(2)多尺度特征進行對象檢測
YOLO2曾采用passthrough結構來檢測細粒度特征偎窘,在YOLO3更進一步采用了3個不同尺度的特征圖來進行對象檢測乌助。
結合上圖看,卷積網絡在79層后陌知,經過下方幾個黃色的卷積層得到一種尺度的檢測結果他托。相比輸入圖像,這里用于檢測的特征圖有32倍的下采樣仆葡。由于下采樣倍數(shù)高赏参,這里特征圖的感受野比較大,因此適合檢測圖像中尺寸比較大的對象沿盅。
為了實現(xiàn)細粒度的檢測把篓,第79層的特征圖又開始作上采樣(從79層往右開始上采樣卷積),然后與第61層特征圖融合(Concatenation)嗡呼,這樣得到第91層較細粒度的特征圖纸俭,同樣經過幾個卷積層后得到相對輸入圖像16倍下采樣的特征圖。它具有中等尺度的感受野南窗,適合檢測中等尺度的對象揍很。
最后,第91層特征圖再次上采樣万伤,并與第36層特征圖融合(Concatenation)窒悔,最后得到相對輸入圖像8倍下采樣的特征圖。它的感受野最小敌买,適合檢測小尺寸的對象简珠。
隨著輸出的特征圖的數(shù)量和尺度的變化,先驗框的尺寸也需要相應的調整。YOLO v2已經開始采用K-means聚類得到先驗框的尺寸聋庵,YOLO v3延續(xù)了這種方法膘融,為每種下采樣尺度設定3種先驗框,總共聚類出9種尺寸的先驗框祭玉。在COCO數(shù)據(jù)集這9個先驗框是:(10x13)氧映,(16x30),(33x23)脱货,(30x61)岛都,(62x45),(59x119)振峻,(116x90)臼疫,(156x198),(373x326)扣孟。
分配上烫堤,在最小的13x13特征圖上(有最大的感受野)應用較大的先驗框(116x90),(156x198)哈打,(373x326)塔逃,適合檢測較大的對象。中等的26x26特征圖上(中等感受野)應用中等的先驗框(30x61)料仗,(62x45)湾盗,(59x119),適合檢測中等大小的對象立轧。較大的52x52特征圖上(較小的感受野)應用較小的先驗框(10x13)格粪,(16x30),(33x23)氛改,適合檢測較小的對象帐萎。
我們算一下YOLO v3共可以檢測了多少個目標。對于一個416x416的輸入圖像胜卤,在每個尺度的特征圖的每個網格設置3個先驗框疆导,總共有 13x13x3 + 26x26x3 + 52x52x3 = 10647 個預測。
對比一下葛躏,YOLO v2采用13x13x5 = 845個預測澈段,YOLO3的嘗試預測邊框數(shù)量增加了10多倍,而且是在不同分辨率上進行舰攒,所以mAP以及對小物體的檢測效果有一定的提升败富。
(3)對象分類softmax改成logistic
預測對象類別時不使用softmax,改成使用logistic的輸出進行預測摩窃。這樣能夠支持多標簽對象(比如一個人有Woman 和 Person兩個標簽)兽叮。