檢測(cè)論文綜述(一) : 從RCNN到Mask-RCNN

對(duì)于目標(biāo)檢測(cè)方向并不是特別熟悉昔榴,本文記錄一下RCNN, fast-RCNN, faster-RCNN, mask-RCNN這4篇有關(guān)目標(biāo)檢測(cè)的論文筆記和學(xué)習(xí)心得辛藻。

RCNN - Rich feature hierarchies for accurate object detection and semantic segmentation

R-CNN的意思就是Region based,主要思路就是根據(jù)一張圖像互订,提取多個(gè)region吱肌,再將每個(gè)Region輸入CNN來(lái)進(jìn)行特征的提取。因此RCNN就可以分為Region proposals, Feature extraction兩個(gè)主要部分仰禽,提取的特征就可以輸入任意一個(gè)分類(lèi)器來(lái)進(jìn)行分類(lèi)氮墨。
模型的流程圖如下:

RCNN

在具體的實(shí)現(xiàn)中

  1. 圖像中第2步的region proposals,可以使用selective search來(lái)進(jìn)行吐葵,對(duì)于每一張圖像规揪,selective search大約提取出2000個(gè)框。
  2. 接著温峭,這個(gè)框所選中的圖像區(qū)域猛铅,經(jīng)過(guò)預(yù)處理(首先將框稍微擴(kuò)張使得候選框能夠包含部分context信息,也就是物體的環(huán)境信息诚镰,接著將擴(kuò)張后的圖像resize到固定大修确亍)變成一個(gè)227*227大小的圖像
  3. 這些227*227的region圖像輸入到CNN中祥款,最終的FC層輸出4096維的特征向量
  4. 分類(lèi),訓(xùn)練一個(gè)SVM用于分類(lèi)

訓(xùn)練

在訓(xùn)練的時(shí)候月杉,首先使用的是已經(jīng)訓(xùn)練好的CNN網(wǎng)絡(luò)作為特征提取器刃跛,但是由于預(yù)訓(xùn)練是在分類(lèi)數(shù)據(jù)集上,因此在應(yīng)用到檢測(cè)之前要做finetune苛萎。也就是說(shuō)桨昙,為了將用ImageNet數(shù)據(jù)集訓(xùn)練的網(wǎng)絡(luò)應(yīng)用到新的任務(wù)(檢測(cè)),新的數(shù)據(jù)集(region)上腌歉,作者將原來(lái)的CNN最后的1000類(lèi)的fc層蛙酪,更改為了N+1層,N代表待檢測(cè)的物體的類(lèi)別數(shù)翘盖。然后桂塞,對(duì)于所有的region,如果它和ground truth的重疊率大于0.5馍驯,就認(rèn)為是正類(lèi)阁危。
對(duì)于分類(lèi)器的訓(xùn)練,作者發(fā)現(xiàn)選擇多大的IoU來(lái)區(qū)分正類(lèi)和負(fù)類(lèi)非常關(guān)鍵汰瘫。并且狂打,對(duì)于每一類(lèi),都會(huì)訓(xùn)練一個(gè)分類(lèi)器混弥。

Bounding Box Regression

框的回歸非常重要趴乡,在對(duì)每一個(gè)region proposal使用分類(lèi)器進(jìn)行打分評(píng)價(jià)之后,作者使用一個(gè)回歸器來(lái)預(yù)測(cè)一個(gè)新的框作為結(jié)果蝗拿。這個(gè)回歸器使用的特征是從CNN中提取的特征晾捏。回歸器的訓(xùn)練中蛹磺,輸入是 region proposal 的 x, y, w, h和ground truth的x, y, w, h粟瞬,目標(biāo)是學(xué)習(xí)一種變換,使得region proposal通過(guò)該變換能夠接近ground truth萤捆。同時(shí)裙品,希望這種變換擁有尺度不變性,也就是說(shuō)尺度變化的話俗或,變換不會(huì)改變市怎。
如下圖所示,每一個(gè)regressor會(huì)學(xué)習(xí)一組參數(shù)辛慰,特征輸入是pool 5的特征輸出区匠,擬合的目標(biāo)是t_*^i

regressor
變換目標(biāo)

Fast-RCNN

Fast-RCNN 主要解決的問(wèn)題是在RCNN中對(duì)于每一個(gè)region proposal都進(jìn)行特征提取,會(huì)產(chǎn)生非常多的冗余計(jì)算驰弄,因此可以先對(duì)一張圖像進(jìn)行特征提取麻汰,再根據(jù)region proposal在相應(yīng)的特征上進(jìn)行劃分得到對(duì)應(yīng)region的特征(映射關(guān)系)。
這樣便可以實(shí)現(xiàn)共享計(jì)算提高速度戚篙,但是與SPPnets不同五鲫,SPPnets在一副圖像得到對(duì)應(yīng)的特征后,從這張圖像的特征上proposal對(duì)應(yīng)的部分岔擂,采用空間金字塔池化位喂,如下圖:

空間金字塔池化

如此,對(duì)于不同輸入大小的proposal都能得到一個(gè)固定大小的特征向量乱灵。
Fast R-CNN也采用了上面的辦法塑崖,但是不同的是使用了一個(gè)RoI pooling 而不是空間金字塔池化,這就對(duì)應(yīng)了Fast R-CNN解決的另外一個(gè)問(wèn)題痛倚,就是多個(gè)階段訓(xùn)練的問(wèn)題规婆。就像在講解R-CNN的時(shí)候,R-CNN需要先使用selective search進(jìn)行region的選擇蝉稳,再finetune一個(gè)預(yù)訓(xùn)練的模型聋呢,再訓(xùn)練SVM分類(lèi)器,再進(jìn)行框的回歸颠区。而Fast-RCNN將finetune和分類(lèi)器的訓(xùn)練結(jié)合了起來(lái)。原因也非常簡(jiǎn)單通铲,因此Fast R-CNN采用的RoI pooling是可以進(jìn)行反向傳播的毕莱,也就是可以求導(dǎo)的。
求導(dǎo)公式如下:
RoI求導(dǎo)

直觀上講颅夺,就是對(duì)于輸入的
x
的每一個(gè)值朋截,如果它是最大值,導(dǎo)數(shù)就是
1 * \partial{loss} / \partial{y_{rj}}
吧黄,只是需要在每一個(gè)region proposal的每一個(gè)輸出上進(jìn)行累加部服。如果不是最大值,就是0拗慨。

RoI pooling層

RoI pooling的方法很簡(jiǎn)單廓八,類(lèi)似于空間金字塔pooling,它將proposal部分對(duì)應(yīng)卷積層輸出的特征(稱(chēng)之為RoI赵抢,因?yàn)橛糜谧鰌ooling的特征是 region of interest剧蹂,也就是我們感興趣的區(qū)域)劃分成H*W塊,然后對(duì)每一塊求最大值烦却,最終得到了一個(gè) H*W的特征圖宠叼。可以看出其爵,它只是空間金字塔pooling的一部分冒冬。
但是SPP-nets的空間金字塔也是可以求導(dǎo)的伸蚯,那么它到底不好在哪里呢?因?yàn)楫?dāng)每一個(gè)RoI都可能來(lái)源于不同的圖像的時(shí)候(R-CNN和SPPnets的訓(xùn)練策略是從一個(gè)batch的不同圖像中简烤,分別挑選一個(gè)proposal region)剂邮,SPPNets的訓(xùn)練非常地低效,這種低效來(lái)源于在SPPnets的訓(xùn)練中乐埠,每個(gè)RoI的感受野都非常地大抗斤,很可能對(duì)應(yīng)了原圖的整個(gè)圖像,因此丈咐,得到的特征也幾乎對(duì)應(yīng)了整張圖像瑞眼,所以輸入的圖像也就很大。
為了提高效率棵逊,F(xiàn)ast-RCNN首先選取N個(gè)圖像伤疙,再?gòu)拿總€(gè)圖像上選擇R/N個(gè)RoI,這樣的效率就比從每個(gè)圖像提取一個(gè)RoI提高了R/N倍辆影。

多任務(wù) loss

為了將分類(lèi)和框回歸結(jié)合起來(lái)徒像,作者采用了多任務(wù)的loss,來(lái)進(jìn)行聯(lián)合的訓(xùn)練蛙讥。具體來(lái)說(shuō)就是將分類(lèi)的loss和框回歸的loss結(jié)合起來(lái)锯蛀。網(wǎng)絡(luò)的設(shè)計(jì)上非常直接,就是將RoI得到的特征接幾個(gè)FC層后次慢,分別接不同的輸出層旁涤。對(duì)應(yīng)于分類(lèi)部分,特征會(huì)接一個(gè)softmax輸出迫像,用于分類(lèi)劈愚,對(duì)于框回歸部分,會(huì)接一個(gè)輸出4維特征的輸出層闻妓,然后分別計(jì)算loss菌羽,用于反向傳播。loss的公式如下:


loss
回歸loss

回歸的target可以參考前面的R-CNN部分由缆。

notes

  1. 尺度不變的檢測(cè)注祖。
  2. 在進(jìn)行預(yù)測(cè)的時(shí)候,還可以通過(guò)SVD來(lái)簡(jiǎn)化FC的運(yùn)算來(lái)加快速度均唉。

Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

為什么比f(wàn)ast還fast呢氓轰?主要原因是在這篇論文中提出了一個(gè)新的層:RPN(region proposal networks)用于替代之前的selective search。這個(gè)層還可以在GPU上運(yùn)算來(lái)提高速度浸卦。
RPN的目的:

  1. 有效地進(jìn)行region proposal署鸡,在不同的大小,不同的尺度,不同的比例下
  2. 支持反向傳播
  3. 支持在GPU上運(yùn)算
  4. 能夠和Fast R-CNN結(jié)合起來(lái)運(yùn)算
    如下圖:


    faster rcnn結(jié)構(gòu)

Region Proposal Networks

為了能夠進(jìn)行region proposal靴庆,作者使用了一個(gè)小的網(wǎng)絡(luò)时捌,在基礎(chǔ)的卷積層輸出的特征上進(jìn)行滑動(dòng),這個(gè)網(wǎng)絡(luò)輸入大小為n*n炉抒,輸入后會(huì)映射(用n*n的卷積)為一個(gè)固定長(zhǎng)度的特征向量奢讨,然后接兩個(gè)并聯(lián)的fc層(用1*1的卷積層代替),這兩個(gè)fc層焰薄,一個(gè)為box-regressoin拿诸,一個(gè)為box-classification。如下圖:

RPN

在每一個(gè)滑動(dòng)窗口(可以參考https://blog.csdn.net/bingochenjx/article/details/78422290)塞茅,為了考慮到盡可能多的框的情況亩码,作者設(shè)計(jì)了anchors來(lái)作為region proposal。anchors就是對(duì)于每一個(gè)滑動(dòng)窗口的中心位置野瘦,在該位置對(duì)應(yīng)的原圖位置的基礎(chǔ)上描沟,按照不同的尺度,長(zhǎng)寬比例框出k個(gè)不同的區(qū)域鞭光。然后根據(jù)這些anchors對(duì)應(yīng)的原始圖像位置以及區(qū)域吏廉,和ground truth,就可以給每一個(gè)滑動(dòng)窗口的每一個(gè)anchor進(jìn)行標(biāo)記惰许,也就是賦予label席覆,滿(mǎn)足一定條件標(biāo)記為正類(lèi)(比如和ground truth重疊大于一個(gè)值),一定條件為負(fù)類(lèi)汹买。對(duì)于正類(lèi)娜睛,就可以根據(jù)ground truth和該anchor對(duì)應(yīng)的原圖的區(qū)域之間的變換關(guān)系(參考前面的R-CNN的框回歸),得到回歸器中的目標(biāo)卦睹,用于訓(xùn)練。也就是論文中的loss function部分:

loss

自然地方库,也就要求RPN的兩個(gè)并聯(lián)的FC層一個(gè)輸出2k個(gè)值用于表示這k個(gè)anchor對(duì)應(yīng)的區(qū)域的正類(lèi)结序,負(fù)類(lèi)的概率,另一個(gè)輸出4k個(gè)值纵潦,用于表示框回歸的變換的預(yù)測(cè)值徐鹤。

訓(xùn)練RPN和Fast R-CNN

對(duì)于整個(gè)網(wǎng)絡(luò)的訓(xùn)練,作者采用了一種叫做4-step Alternating Training的方法邀层。具體可以參考論文返敬。

Mask R-CNN

與之前的檢測(cè)任務(wù)稍有不同,mask r-cnn的任務(wù)是做instance segmentation寥院。因此劲赠,它需要對(duì)每一個(gè)像素點(diǎn)進(jìn)行分類(lèi)。
與Faster R-CNN不同,F(xiàn)aster R-CNN對(duì)每一個(gè)候選框產(chǎn)生兩個(gè)輸出凛澎,一個(gè)是類(lèi)別霹肝,一個(gè)是bounding box的offset。Mask R-CNN新增加了一個(gè)輸出塑煎,作為物體的mask沫换。這個(gè)mask類(lèi)似于ps中的蒙版。

與Faster R-CNN類(lèi)似的是最铁,Mask R-CNN同樣采用RPN來(lái)進(jìn)行Region Proposal讯赏。但是在之后,對(duì)于每一個(gè)RoI冷尉,mask r-cnn還輸出了一個(gè)二值化的mask漱挎。

Mask Representation

不像類(lèi)別,框回歸网严,輸出都可以是一個(gè)向量识樱,mask必須保持一定的空間信息。因此震束,作者采用FCN來(lái)從每個(gè)RoI中預(yù)測(cè)一個(gè)m*m的mask怜庸。

RoIAlign

由于屬于像素級(jí)別的預(yù)測(cè)問(wèn)題,就需要RoI能夠在進(jìn)行特征提取的時(shí)候保持住空間信息垢村,至少在像素級(jí)別上能夠?qū)?yīng)起來(lái)割疾。因此,傳統(tǒng)的取最大值的方法就顯得不合適嘉栓。
RoI Pooling宏榕,經(jīng)歷了兩個(gè)量化的過(guò)程:
第一個(gè):從roi proposal到feature map的映射過(guò)程。
第二個(gè):從feature map劃分成7*7的bin侵佃,每個(gè)bin使用max pooling麻昼。

為此,作者使用了RoIAlign馋辈。如下圖


RoIAlign

為了避免上面提到的量化過(guò)程

  1. 使用 x/16 而不是int(x/16)抚芦,也就是說(shuō)在進(jìn)行roi proposal到feature map的映射過(guò)程中,不進(jìn)行四舍五入迈螟。
  2. 對(duì)于每一個(gè)bin(也就是一個(gè)pooling之后的特征 對(duì)應(yīng)的feature map的區(qū)域)使用bilinear interpolation來(lái)計(jì)算叉抡,之后使用max或者average pool。

可以參考https://blog.csdn.net/xiamentingtao/article/details/78598511

模型結(jié)構(gòu)

作者使用ResNet作為基礎(chǔ)的特征提取的網(wǎng)絡(luò)答毫。
對(duì)于預(yù)測(cè)類(lèi)別褥民,回歸框,mask的網(wǎng)絡(luò)使用如下圖結(jié)構(gòu):


Head結(jié)構(gòu)

總結(jié)

整體看完這幾篇大佬的論文洗搂,雖說(shuō)沒(méi)有弄清楚每一個(gè)實(shí)現(xiàn)細(xì)節(jié)消返,但是大體上了解了算法的思路载弄。可以看出侦副,出發(fā)點(diǎn)都源于深度神經(jīng)網(wǎng)絡(luò)在特征提取上的卓越能力侦锯,因此一眾大神試圖將這種能力應(yīng)用在檢測(cè)問(wèn)題中。從R-CNN中簡(jiǎn)單地用于特征提取秦驯,到為了提高速度減少計(jì)算的Fast R-CNN尺碰,再到為了將region proposal集成進(jìn)入整個(gè)模型中,并且利用GPU加速的RPN译隘,也就是Faster R-CNN亲桥。再到為了應(yīng)用于instance segmentation任務(wù)中,設(shè)計(jì)的RoIAlign和mask固耘。包括bounding box regression题篷,pooling層的設(shè)計(jì),訓(xùn)練方法的選擇厅目,loss的設(shè)計(jì)等等細(xì)節(jié)番枚,無(wú)一不體現(xiàn)了大師們的思考和創(chuàng)造力。
可能在我們這些“拿來(lái)”者的眼中损敷,這些方法都顯得“理所應(yīng)當(dāng)”和巧妙葫笼,好用,但是拗馒,它們背后隱藏的選擇和這些選擇的思考卻更值得我們學(xué)習(xí)路星。
以及,對(duì)待每一個(gè)問(wèn)題诱桂,如何設(shè)計(jì)出合理的解決方案洋丐,以及方案的效率辆雾,通用性谭溉,更是應(yīng)該我們努力的方向。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末芋绸,一起剝皮案震驚了整個(gè)濱河市肝劲,隨后出現(xiàn)的幾起案子迁客,更是在濱河造成了極大的恐慌,老刑警劉巖涡相,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異剩蟀,居然都是意外死亡催蝗,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)育特,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)丙号,“玉大人先朦,你說(shuō)我怎么就攤上這事∪В” “怎么了喳魏?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)怀薛。 經(jīng)常有香客問(wèn)我刺彩,道長(zhǎng),這世上最難降的妖魔是什么枝恋? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任创倔,我火速辦了婚禮,結(jié)果婚禮上焚碌,老公的妹妹穿的比我還像新娘畦攘。我一直安慰自己,他們只是感情好十电,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布知押。 她就那樣靜靜地躺著,像睡著了一般鹃骂。 火紅的嫁衣襯著肌膚如雪台盯。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天偎漫,我揣著相機(jī)與錄音爷恳,去河邊找鬼。 笑死象踊,一個(gè)胖子當(dāng)著我的面吹牛温亲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播杯矩,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼栈虚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了史隆?” 一聲冷哼從身側(cè)響起魂务,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎泌射,沒(méi)想到半個(gè)月后粘姜,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡熔酷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年孤紧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拒秘。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡号显,死狀恐怖臭猜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情押蚤,我是刑警寧澤蔑歌,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站揽碘,受9級(jí)特大地震影響次屠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜钾菊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一帅矗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧煞烫,春花似錦浑此、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至料饥,卻和暖如春蒲犬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背岸啡。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工原叮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人巡蘸。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓奋隶,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親悦荒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子唯欣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容