OBJECT DETECTION目標(biāo)檢測(cè)
主流算法
目標(biāo)檢測(cè)模型分為兩類乳怎。一類是two-stage,將物體識(shí)別和物體定位分為兩個(gè)步驟,分別完成,這一類的典型代表是R-CNN, fast R-CNN, faster-RCNN家族坎怪。他們識(shí)別錯(cuò)誤率低,漏識(shí)別率也較低廓握,但速度較慢搅窿,不能滿足實(shí)時(shí)檢測(cè)場(chǎng)景。為了解決這一問題隙券,另一類方式出現(xiàn)了男应,稱為one-stage, 典型代表是Yolo, SSD, YoloV2等。他們識(shí)別速度很快是尔,可以達(dá)到實(shí)時(shí)性要求殉了,而且準(zhǔn)確率也基本能達(dá)到faster R-CNN的水平开仰。(物體識(shí)別與分類主流算法:Lenet5?AlexNet VGG Inception ResNet)
目標(biāo)檢測(cè)(Object detection)發(fā)展
早期的目標(biāo)檢測(cè)方法通常是通過提取圖像的一些 robust 的特征(如 Haar拟枚、SIFT、HOG 等)众弓,使用 DPM (Deformable Parts Model)模型恩溅,用滑動(dòng)窗口(silding window)的方式來預(yù)測(cè)具有較高 score 的 bounding box。這種方式非常耗時(shí)谓娃,而且精度又不怎么高脚乡。
后來出現(xiàn)了object proposal方法(其中selective search為這類方法的典型代表),相比于sliding window這中窮舉的方式滨达,減少了大量的計(jì)算,同時(shí)在性能上也有很大的提高捡遍。利用 selective search的結(jié)果,結(jié)合卷積神經(jīng)網(wǎng)絡(luò)的R-CNN出現(xiàn)后画株,Object detection 的性能有了一個(gè)質(zhì)的飛越辆飘∥酱基于 R-CNN 發(fā)展出來的 SPPnet蜈项、Fast R-CNN、Faster R-CNN 等方法续挟,證明了 “Proposal + Classification” 的方法在 Objection Detection 上的有效性。
相比于 R-CNN 系列的方法诗祸,本論文提供了另外一種思路浇冰,將 Object Detection 的問題轉(zhuǎn)化成一個(gè) Regression 問題。給定輸入圖像聋亡,直接在圖像的多個(gè)位置上回歸出目標(biāo)的bounding box以及其分類類別肘习。
YOLO是一個(gè)可以一次性預(yù)測(cè)多個(gè)Box位置和類別的卷積神經(jīng)網(wǎng)絡(luò),能夠?qū)崿F(xiàn)端到端的目標(biāo)檢測(cè)和識(shí)別漂佩,其最大的優(yōu)勢(shì)就是速度快。事實(shí)上罪塔,目標(biāo)檢測(cè)的本質(zhì)就是回歸,因此一個(gè)實(shí)現(xiàn)回歸功能的CNN并不需要復(fù)雜的設(shè)計(jì)過程征堪。YOLO沒有選擇滑動(dòng)窗口(silding window)或提取proposal的方式訓(xùn)練網(wǎng)絡(luò),而是直接選用整圖訓(xùn)練模型佃蚜。這樣做的好處在于可以更好的區(qū)分目標(biāo)和背景區(qū)域,相比之下谐算,采用proposal訓(xùn)練方式的Fast-R-CNN常常把背景區(qū)域誤檢為特定目標(biāo)。
Faster R-CNN
主要分為四個(gè)步驟
1. 卷積層斤儿。原始圖片先經(jīng)過conv-relu-pooling的多層卷積神經(jīng)網(wǎng)絡(luò)恐锦,提取出特征圖。供后續(xù)的RPN網(wǎng)絡(luò)和全連接層使用一铅。faster R-CNN不像R-CNN需要對(duì)每個(gè)子圖進(jìn)行卷積層特征提取,它只需要對(duì)全圖進(jìn)行一次提取就可以了馅闽,從而大大減小了計(jì)算時(shí)間。
2. RPN層福也,region proposal networks局骤。RPN層用于生成候選框暴凑,并利用softmax判斷候選框是前景還是背景,從中選取前景候選框(因?yàn)槲矬w一般在前景中),并利用bounding box regression調(diào)整候選框的位置凯傲,從而得到特征子圖,稱為proposals冰单。
3. ROI層,fast R-CNN中已經(jīng)講過了ROI層了诫欠,它將大小尺寸不同的proposal池化成相同的大小,然后送入后續(xù)的全連接層進(jìn)行物體分類和位置調(diào)整回歸
4. 分類層荒叼。利用ROI層輸出的特征圖proposal,判斷proposal的類別被廓,同時(shí)再次對(duì)bounding box進(jìn)行regression從而得到精確的形狀和位置坏晦。
使用VGG-16卷積模型的網(wǎng)絡(luò)結(jié)構(gòu)如下圖
卷積層
卷積層采用的VGG-16模型嫁乘,先將PxQ的原始圖片,縮放裁剪為MxN的圖片亦渗,然后經(jīng)過13個(gè)conv-relu層,其中會(huì)穿插4個(gè)max-pooling層法精。所有的卷積的kernel都是3x3的痴突,padding為1搂蜓,stride為1辽装。pooling層kernel為2x2, padding為0帮碰,stride為2拾积。
MxN的圖片,經(jīng)過卷積層后拓巧,變?yōu)榱?M/16) x (N/16)的feature map了斯碌。
RPN層
faster R-CNN拋棄了R-CNN中的選擇性搜索(selective search)方法肛度,使用RPN層來生成候選框,能極大的提升候選框的生成速度承耿。RPN層先經(jīng)過3x3的卷積運(yùn)算伪煤,然后分為兩路。一路用來判斷候選框是前景還是背景凛辣,它先reshape成一維向量,然后softmax來判斷是前景還是背景扁誓,然后reshape恢復(fù)為二維feature map。另一路用來確定候選框的位置跋理,通過bounding box regression實(shí)現(xiàn),后面再詳細(xì)講前普。兩路計(jì)算結(jié)束后,挑選出前景候選框(因?yàn)槲矬w在前景中)拭卿,并利用計(jì)算得到的候選框位置,得到我們感興趣的特征子圖proposal峻厚。
> 候選框的生成 anchors
卷積層提取原始圖像信息响蕴,得到了256個(gè)feature map惠桃,經(jīng)過RPN層的3x3卷積后,仍然為256個(gè)feature map辜王。但是每個(gè)點(diǎn)融合了周圍3x3的空間信息。對(duì)每個(gè)feature map上的一個(gè)點(diǎn)呐馆,生成k個(gè)anchor(k默認(rèn)為9)肥缔。anchor分為前景和背景兩類(我們先不去管它具體是飛機(jī)還是汽車汹来,只用區(qū)分它是前景還是背景即可)。anchor有[x,y,w,h]四個(gè)坐標(biāo)偏移量收班,x,y表示中心點(diǎn)坐標(biāo)坟岔,w和h表示寬度和高度闺阱。這樣,對(duì)于feature map上的每個(gè)點(diǎn),就得到了k個(gè)大小形狀各不相同的選區(qū)region瘦穆。
> softmax判斷選區(qū)是前景還是背景
對(duì)于生成的anchors,我們首先要判斷它是前景還是背景扛或。由于感興趣的物體位于前景中,故經(jīng)過這一步之后熙兔,我們就可以舍棄背景anchors了。大部分的anchors都是屬于背景住涉,故這一步可以篩選掉很多無用的anchor,從而減少全連接層的計(jì)算量舆声。
對(duì)于經(jīng)過了3x3的卷積后得到的256個(gè)feature map花沉,先經(jīng)過1x1的卷積媳握,變換為18個(gè)feature map。然后reshape為一維向量蛾找,經(jīng)過softmax判斷是前景還是背景。此處reshape的唯一作用就是讓數(shù)據(jù)可以進(jìn)行softmax計(jì)算打毛。然后輸出識(shí)別得到的前景anchors柿赊。
> 確定候選框位置
另一路用來確定候選框的位置隘冲,也就是anchors的[x,y,w,h]坐標(biāo)值。如下圖所示展辞,紅色代表我們當(dāng)前的選區(qū),綠色代表真實(shí)的選區(qū)罗珍。雖然我們當(dāng)前的選取能夠大概框選出飛機(jī),但離綠色的真實(shí)位置和形狀還是有很大差別覆旱,故需要對(duì)生成的anchors進(jìn)行調(diào)整。這個(gè)過程我們稱為bounding box regression扣唱。
假設(shè)紅色框的坐標(biāo)為[x,y,w,h], 綠色框,也就是目標(biāo)框的坐標(biāo)為[Gx, Gy,Gw,Gh], 我們要建立一個(gè)變換噪沙,使得[x,y,w,h]能夠變?yōu)閇Gx, Gy,Gw,Gh]炼彪。最簡(jiǎn)單的思路是正歼,先做平移辐马,使得中心點(diǎn)接近局义,然后進(jìn)行縮放,使得w和h接近.
> 輸出特征子圖proposal
得到了前景anchors萄唇,并確定了他們的位置和形狀后檩帐,我們就可以輸出前景的特征子圖proposal了另萤。步驟如下
1. 得到前景anchors和他們的[x y w h]坐標(biāo)
2. 按照anchors為前景的不同概率,從大到小排序仲墨,選取前pre_nms_topN個(gè)anchors,比如前6000個(gè)
3. 剔除非常小的anchors
4. 通過NMS非極大值抑制目养,從anchors中找出置信度較高的俩由。這個(gè)主要是為了解決選取交疊問題癌蚁。首先計(jì)算每一個(gè)選區(qū)面積,然后根據(jù)他們?cè)趕oftmax中的score(也就是是否為前景的概率)進(jìn)行排序努释,將score最大的選區(qū)放入隊(duì)列中。接下來伐蒂,計(jì)算其余選區(qū)與當(dāng)前最大score選區(qū)的IOU(IOU為兩box交集面積除以兩box并集面積煞躬,它衡量了兩個(gè)box之間重疊程度)逸邦。去除IOU大于設(shè)定閾值的選區(qū)。這樣就解決了選區(qū)重疊問題
5. 選取前post_nms_topN個(gè)結(jié)果作為最終選區(qū)proposal進(jìn)行輸出缕减,比如300個(gè)雷客。
經(jīng)過這一步之后桥狡,物體定位應(yīng)該就基本結(jié)束了皱卓,剩下的就是物體識(shí)別了
ROI Pooling層
和fast R-CNN中類似,這一層主要解決之前得到的proposal大小形狀各不相同部逮,導(dǎo)致沒法做全連接。全連接計(jì)算只能對(duì)確定的shape進(jìn)行運(yùn)算甥啄,故必須使proposal大小形狀變?yōu)橄嗤Mㄟ^裁剪和縮放的手段蜈漓,可以解決這個(gè)問題,但會(huì)帶來信息丟失和圖片形變問題融虽。我們使用ROI pooling可以有效的解決這個(gè)問題。
ROI pooling中有额,如果目標(biāo)輸出為MxN,則在水平和豎直方向上巍佑,將輸入proposal劃分為MxN份,每一份取最大值萤衰,從而得到MxN的輸出特征圖堕义。
分類層
ROI Pooling層后的特征圖脆栋,通過全連接層與softmax倦卖,就可以計(jì)算屬于哪個(gè)具體類別椿争,比如人,狗秦踪,飛機(jī),并可以得到cls_prob概率向量椅邓。同時(shí)再次利用bounding box regression精細(xì)調(diào)整proposal位置舍扰,得到bbox_pred希坚,用于回歸更加精確的目標(biāo)檢測(cè)框陵且。
這樣就完成了faster R-CNN的整個(gè)過程了裁僧。算法還是相當(dāng)復(fù)雜的,對(duì)于每個(gè)細(xì)節(jié)需要反復(fù)理解聊疲。faster R-CNN使用resNet101模型作為卷積層,在voc2012數(shù)據(jù)集上可以達(dá)到83.8%的準(zhǔn)確率获洲,超過yolo ssd和yoloV2。其最大的問題是速度偏慢贡珊,每秒只能處理5幀,達(dá)不到實(shí)時(shí)性要求门岔。
Ref:?一文讀懂目標(biāo)檢測(cè)AI算法:R-CNN爱致,faster R-CNN寒随,yolo,SSD妻往,yoloV2
Faster R-CNN準(zhǔn)確率mAP較高,漏檢率recall較低讯泣,但速度較慢纫普。
yolo則相反判帮,速度快,但準(zhǔn)確率和漏檢率不盡人意晦墙。
SSD綜合了他們的優(yōu)缺點(diǎn)悦昵,對(duì)輸入300x300的圖像晌畅,在voc2007數(shù)據(jù)集上test,能夠達(dá)到58 幀每秒( Titan X 的 GPU )抗楔,72.1%的mAP棋凳。
當(dāng)前目標(biāo)檢測(cè)模型算法也是層出不窮连躏。在two-stage領(lǐng)域,2017年Facebook提出了mask R-CNN入热。CMU也提出了A-Fast-RCNN 算法晓铆,將對(duì)抗學(xué)習(xí)引入到目標(biāo)檢測(cè)領(lǐng)域。Face++也提出了Light-Head R-CNN绰播,主要探討了 R-CNN 如何在物體檢測(cè)中平衡精確度和速度。
one-stage領(lǐng)域也是百花齊放蠢箩,2017年首爾大學(xué)提出 R-SSD 算法,主要解決小尺寸物體檢測(cè)效果差的問題谬泌。清華大學(xué)提出了 RON 算法,結(jié)合 two stage 名的方法和 one stage 方法的優(yōu)勢(shì)呵萨,更加關(guān)注多尺度對(duì)象定位和負(fù)空間樣本挖掘問題。
Object Segmentation:?Mask R-CNN
目標(biāo)識(shí)別&分類
一文讀懂物體分類AI算法:LeNet-5 AlexNet VGG Inception ResNet MobileNet
AlexNet的結(jié)構(gòu)特點(diǎn)為
1. 采用relu替代了tanh和sigmoid激活函數(shù)潮峦。relu具有計(jì)算簡(jiǎn)單,不產(chǎn)生梯度彌散等優(yōu)點(diǎn)忱嘹,現(xiàn)在已經(jīng)基本替代了tanh和sigmoid
2. 全連接層使用了dropout來防止過擬合嘱腥。dropout可以理解為是一種下采樣方式拘悦,可以有效降低過擬合問題。
3. 卷積-激活-池化后础米,采用了一層LRN,也就是局部響應(yīng)歸一化屁桑。將一個(gè)卷積核在(x,y)空間像素點(diǎn)的輸出医寿,和它前后的幾個(gè)卷積核上的輸出做權(quán)重歸一化蘑斧。(LRN層,對(duì)局部神經(jīng)元的活動(dòng)創(chuàng)建競(jìng)爭(zhēng)機(jī)制竖瘾,使得其中響應(yīng)比較大的值變得相對(duì)更大沟突,并抑制其他反饋較小的神經(jīng)元捕传,增強(qiáng)了模型的泛化能力. 歸一化后有什么好處呢?原因在于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)過程本質(zhì)就是為了學(xué)習(xí)數(shù)據(jù)分布庸论,一旦訓(xùn)練數(shù)據(jù)與測(cè)試數(shù)據(jù)的分布不同求橄,那么網(wǎng)絡(luò)的泛化能力也大大降低;另外一方面罐农,一旦每批訓(xùn)練數(shù)據(jù)的分布各不相同(batch 梯度下降)催什,那么網(wǎng)絡(luò)就要在每次迭代都去學(xué)習(xí)適應(yīng)不同的分布,這樣將會(huì)大大降低網(wǎng)絡(luò)的訓(xùn)練速度蒲凶,這也正是為什么我們需要對(duì)數(shù)據(jù)都要做一個(gè)歸一化預(yù)處理的原因气筋。)
4. 使用了重疊的最大值池化層旋圆。3x3的池化核宠默,步長(zhǎng)為2灵巧,因此產(chǎn)生了重疊池化效應(yīng),使得一個(gè)像素點(diǎn)在多個(gè)池化結(jié)果中均有輸出刻肄,提高了特征提取的豐富性
5. 使用CUDA GPU硬件加速瓤球。訓(xùn)練中使用了兩塊GPU進(jìn)行并行加速敏弃,使得模型訓(xùn)練速度大大提高。
6. 數(shù)據(jù)增強(qiáng)麦到。隨機(jī)的從256x256的原始圖片中绿饵,裁剪得到224x224的圖片瓶颠,從而使一張圖片變?yōu)榱?256-224)^2張圖片。并對(duì)圖片進(jìn)行鏡像步清,旋轉(zhuǎn)要门,隨機(jī)噪聲等數(shù)據(jù)增強(qiáng)操作廓啊,大大降低了過擬合現(xiàn)象。
ResNet
ResNet由微軟提出谴轮,并奪得了2015年ILSVRC大賽的冠軍。它以152層的網(wǎng)絡(luò)深度第步,將錯(cuò)誤率降低到只有3.57%疮装,遠(yuǎn)遠(yuǎn)低于5.1%的人眼識(shí)別錯(cuò)誤率。它同樣利用全局平均池化來代替全連接層廓推,使得152層網(wǎng)絡(luò)的模型不至于太大。網(wǎng)絡(luò)中使用了1x1 3x3 5x5 7x7等不同尺寸的卷積核樊展,從而提高卷積的多樣性。resNetV1_152模型大小為214M专缠,不算太大。
隨著網(wǎng)絡(luò)的加深涝婉,會(huì)出現(xiàn)了訓(xùn)練集上準(zhǔn)確率下降的現(xiàn)象哥力,我們可以確定這不是由于Overfit過擬合造成的(過擬合的情況墩弯,訓(xùn)練集上應(yīng)該準(zhǔn)確率很高);所以作者針對(duì)這個(gè)問題提出了一種全新的網(wǎng)絡(luò)最住,叫深度殘差網(wǎng)絡(luò)钞澳,它允許網(wǎng)絡(luò)更深涨缚,其中引入了全新的結(jié)構(gòu)
殘差指的是什么?
其中ResNet提出了兩種mapping:一種是identity mapping脓魏,x,指的就是圖1中”彎彎的曲線”茂翔,另一種residual mapping,F(x)珊燎,指的就是除了”彎彎的曲線“之外的那部分惭嚣,兩部分相加組成了最后的輸出:y=F(x)+x
identity mapping:顧名思義悔政,就是指本身晚吞,也就是公式中的x
residual mapping:指的是“差”谋国,也就是y?x,所以殘差指的就是F(x)部分。
理論上捌蚊,對(duì)于“隨著網(wǎng)絡(luò)加深,準(zhǔn)確率下降”的問題缅糟,Resnet提供了兩種選擇方式,也就是identity mapping和residual mapping溺拱,如果網(wǎng)絡(luò)已經(jīng)到達(dá)最優(yōu),繼續(xù)加深網(wǎng)絡(luò)迫摔,residual mapping將被push為0,只剩下identity mapping句占,這樣理論上網(wǎng)絡(luò)一直處于最優(yōu)狀態(tài)了,網(wǎng)絡(luò)的性能也就不會(huì)隨著深度增加而降低了纱烘。
Google Inception
Google Inception是一個(gè)大家族,包括inceptionV1 inceptionV2 inceptionV3 inceptionV4等結(jié)構(gòu)祈餐。它主要不是對(duì)網(wǎng)絡(luò)深度的探索,而是進(jìn)行了網(wǎng)絡(luò)結(jié)構(gòu)的改進(jìn)帆阳。
> InceptionV1
inceptionV1是一個(gè)設(shè)計(jì)十分精巧的網(wǎng)絡(luò),它有22層深蜒谤,只有500萬左右的參數(shù)量,模型大小僅為20M左右鳍徽,但錯(cuò)誤率卻只有6.7%。它的網(wǎng)絡(luò)結(jié)構(gòu)特點(diǎn)如下
1. 去除了最后的全連接層阶祭,而使用全局平均池化來代替绷杜。這是模型之所以小的原因濒募。AlexNet和VGG中全連接幾乎占據(jù)了90%的參數(shù)量。而inceptionV1僅僅需要1000個(gè)參數(shù)萨咳,大大降低了參數(shù)量
2. inception module的使用。借鑒與Network in Network的思想,提出了inception module的概念鹃两,允許通道并聯(lián)來組合特征。其結(jié)構(gòu)如下
inception module分為并聯(lián)的四路俊扳,分別為單獨(dú)的1x1卷積,1x1并聯(lián)3x3, 1x1并聯(lián)5x5, 池化后1x1卷積馋记。使用不同的卷積結(jié)構(gòu)來提取不同特征,然后將他們組合在一起來輸出梯醒。
使用了1x1,3x3,5x5等不同尺寸的卷積宽堆,增加了提取特征面積的多樣性茸习,從而減小過擬合