五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

原創(chuàng)精選 | 徹底Sparse!基于稀疏交互機(jī)制的端到端檢測(cè)器

2021-03-17 10:19 作者:深藍(lán)學(xué)院  | 我要投稿

摘要:

Sparse R-CNN基于R-CNN框架,其提出了一種一對(duì)一稀疏交互的機(jī)制,同時(shí)借鑒了DETR的可學(xué)習(xí)候選目標(biāo)的思想,并且結(jié)合二分匹配的標(biāo)簽分配策略和集合預(yù)測(cè)的形式,實(shí)現(xiàn)了端到端目標(biāo)檢測(cè)的效果,整個(gè)過(guò)程無(wú)需RPN和NMS。

前言

這段時(shí)間的paper不是E2E(End-to-End)就是Transformer,什么都拿Transformer往上套,然后個(gè)個(gè)都聲稱自己E2E,看得CW都有點(diǎn)“審美疲勞”。

吾以為,Transformer并非關(guān)鍵,更不是E2E的必需所在,從NLP拓展到CV來(lái)應(yīng)用,可以表?yè)P(yáng)下Transformer從單純的“器”發(fā)展成為一種“術(shù)”,但是否成為“道”還請(qǐng)拭目以待。

至于是否E2E,有個(gè)很直觀的關(guān)鍵點(diǎn)在于是否干掉了NMS,而追溯下導(dǎo)致NMS的原因,無(wú)非還是Label-Assignment!因?yàn)楫?dāng)下流行的大多數(shù)目標(biāo)檢測(cè)方法都是one-to-many的標(biāo)簽分配策略,這是導(dǎo)致NMS的最直接原因之一。

在近期眾多E2E系列的目標(biāo)檢測(cè)方法中,CW之所以選中了 Sparse R-CNN 這個(gè)R-CNN家族的新晉小生,是因?yàn)樗⑽从玫絋ransformer,同時(shí)又實(shí)現(xiàn)了E2E,原因也正如上面所說(shuō):它采用的是one-to-one的Label-Assignment。

有點(diǎn)搞笑的是,雖說(shuō)它隸屬于R-CNN家族,但從思想以及方法(甚至代碼實(shí)現(xiàn))上來(lái)看,其更像是?DETR: End-to-End Object Detection with Transformers(文末提取鏈接a)?的小弟,為何?

因?yàn)樗捎昧薉ETR的optimal bipartite matching(二分匹配)的標(biāo)簽分配策略和set prediction形式,同時(shí)又借鑒了DETR中l(wèi)earnable object query的思想,從而無(wú)需設(shè)計(jì)密集的目標(biāo)候選(如anchor)。

當(dāng)然,它的得意之處在于摒棄了DETR中讓object query和全局特征圖(密集)交互(即每個(gè)object query都和特征圖的每個(gè)位置交互計(jì)算,這本質(zhì)上屬于dense)的Transformer attention機(jī)制,而是提出了一種稀疏(sparse)的交互形式。

基于上述,Sparse R-CNN之所以自稱'sparse'在于兩方面:sparse candidates & sparse feature interaction。

附:Paper & Code(文末提取鏈接b)


1.研究動(dòng)機(jī)與主要貢獻(xiàn)

在正式講解Sparse R-CNN的方法前,先來(lái)“吹吹水”,了解下作者的研究動(dòng)機(jī)是什么,這其實(shí)是很重要的一part。只有發(fā)現(xiàn)了以往方法的問(wèn)題所在,你才能(創(chuàng)造性地去)解決問(wèn)題!

可惜的是,從小到大,學(xué)校往往只是不問(wèn)緣由地教給我們解決問(wèn)題的手段,卻根本沒(méi)有教我們?nèi)绾伟l(fā)現(xiàn)問(wèn)題。

因此,在學(xué)習(xí)一種新方法的同時(shí),還需要了解這種方法誕生的背景,再倒回來(lái)評(píng)估新方法的合理性,甚至提出自己的猜想并且進(jìn)行實(shí)驗(yàn),最終再對(duì)這個(gè)過(guò)程總結(jié)歸納。CW認(rèn)為,不斷重復(fù)這樣的學(xué)習(xí)方式,能夠有效地培養(yǎng)我們的洞察力和創(chuàng)造力。

作者很優(yōu)秀,他發(fā)現(xiàn)當(dāng)前目標(biāo)檢測(cè)的主流方法往往存在dense屬性:anchor-boxes(anchor-based系列)、 reference-points(anchor-free系列)、dense RoIs(2-stage系列),這伴隨著諸如以下的“麻煩事”:

1. prior candidates(如anchors)的設(shè)計(jì);

2. one(gt)-to-many(positive)的標(biāo)簽分配策略;

3. nms后處理(由于第2點(diǎn))

于是,作者很自然地想到能不能設(shè)計(jì)一種sparse的框架。幸運(yùn)的是,DETR的出現(xiàn)給出了一種啟發(fā):candidates可以是一組sparse的learnable object queries,標(biāo)簽分配策略是one-to-one的optimal bipartite matching,這樣就無(wú)需nms。

然而,如前文所述,DETR在特征交互計(jì)算時(shí)本質(zhì)上也是使用了dense的方法。抓住這點(diǎn),作者覺(jué)得可以發(fā)paper了(原諒我說(shuō)得那么露骨哈哈哈)!

除了sparse candidates,他還想實(shí)現(xiàn)sparse feature interaction,結(jié)合自身天賦并且通過(guò)努力,最終提出了Sparse R-CNN。作者也自豪地認(rèn)為,他延續(xù)了目標(biāo)檢測(cè)方法的“生態(tài)史”:dense -> dense-to-sparse -> (thoroughly)sparse:

Sparse R-CNN的創(chuàng)新點(diǎn)有以下:

1. 使用可學(xué)習(xí)的Proposal boxes充當(dāng)RoI角色,從而無(wú)需RPN;

2. 引入維度更高(相比proposal boxes)的可學(xué)習(xí)Proposal features,用于彌補(bǔ)粗糙的proposal boxes提取出來(lái)的RoI features不足以表征豐富的物體特征(如姿態(tài)和位置等)的缺點(diǎn);

3. 改進(jìn)了原生的r-cnn head,設(shè)計(jì)出dynamic instance interactive head,主要用于對(duì)RoI feautures與proposal features執(zhí)行一對(duì)一的稀疏交互(而非DETR那種全局密集交互),其中前者相當(dāng)于Key、后者相當(dāng)于Query的角色。

整體來(lái)看,其特點(diǎn)和貢獻(xiàn)也多多:沒(méi)有anchors和reference points、沒(méi)有rpn、無(wú)需正負(fù)樣本采樣、無(wú)需nms后處理、效果比他家族老大Faster R-CNN好、收斂速度遠(yuǎn)遠(yuǎn)快于他老哥DETR。

在標(biāo)準(zhǔn)的COCO benchmark上使用ResNet-50 FPN單模型在標(biāo)準(zhǔn)3 x training schedule的情況下達(dá)到了44.5 AP 和 22 FPS。


2.整體架構(gòu)與算法pipeline

吹了一波,是時(shí)候講下Sparse R-CNN是怎么操作的了。先概述下整體的架構(gòu)設(shè)計(jì),并且把算法pipeline過(guò)一遍,然后再具體到各方面去剖析吧。

既然Sparse R-CNN隸屬于R-CNN家族,那么它的網(wǎng)絡(luò)設(shè)計(jì)原型就和R-CNN系列相似:第一階段先得到RoI(只不過(guò)這里不需要RPN,而是直接設(shè)置一個(gè)可學(xué)習(xí)的嵌入向量,同時(shí)也沒(méi)有對(duì)RoI做前背景的二分類和采樣);第二階段結(jié)合backbone提取的feature map通過(guò)池化得到統(tǒng)一大小的RoI特征圖,輸入檢測(cè)頭部做最終的分類和回歸預(yù)測(cè)。

以上是它在R-CNN家族中繼承的性質(zhì),至于其它方面,概括地來(lái)說(shuō),主要以下幾點(diǎn):

(1). Backbone是ResNet,Neck使用FPN;

(2). Head使用一組級(jí)聯(lián)的Dynamic Instance Interactive Head,這個(gè)頭部是對(duì)原R-CNN Head的改進(jìn)。在級(jí)聯(lián)組中,上一個(gè)head的輸出特征和預(yù)測(cè)框分別作為下一個(gè)head的Proposal Features和Proposal Boxes。

另外,Proposal Features在與RoI Features交互之前會(huì)先經(jīng)過(guò)Multi-Head-Self-Attention(此處和Transformer的Decoder十分類似,在交互之后還會(huì)經(jīng)過(guò)FFN,即整個(gè)過(guò)程是:self-attention+cross-attention+ffn);

(3). 訓(xùn)練的損失函數(shù)是基于optimal bipartite matching的set prediction loss,沿用了DETR那一套,只不過(guò)在代碼實(shí)現(xiàn)中,針對(duì)使用focal loss的情況做了改動(dòng)。

整體的框架設(shè)計(jì)基本就這樣,現(xiàn)在來(lái)過(guò)下算法的pipeline:

i. 設(shè)置N個(gè)可學(xué)習(xí)候選框Proposal Boxes用于提供RoI坐標(biāo)(可使用Pytorch的nn.Embedding(N, 4)實(shí)現(xiàn));

ii. 設(shè)置N個(gè)可學(xué)習(xí)的候選實(shí)例特征Proposal Features來(lái)表征更豐富的物體信息(特征),例如姿態(tài)和形狀等等(可使用Pytorch的nn.Embedding(N, hidden_dim)實(shí)現(xiàn));

iii. 將任意大小的圖片輸入CNN,得到輸出特征圖(包含多尺度的FPN特征);

iv. 通過(guò)RoIPooling(Align)將每個(gè)Proposal Boxes池化到統(tǒng)一大小的RoI Features;

v. 將RoI Features與Proposal Features進(jìn)行一對(duì)一交互,從而增強(qiáng)前景特征;

vi. 增強(qiáng)后的特征Object Features作為表征各個(gè)目標(biāo)對(duì)象的特征,經(jīng)過(guò)全連接層得到固定大小的特征向量,輸出N個(gè)無(wú)序集合,每個(gè)集合中包括預(yù)測(cè)類別和預(yù)測(cè)框;

vii. 采用Casecase R-CNN的級(jí)聯(lián)思想,不斷對(duì)預(yù)測(cè)框進(jìn)行refine。其中,前一階段的預(yù)測(cè)框和Object Features分別作為下一階段的Proposal Boxes和Proposal Features

訓(xùn)練期間,對(duì)每個(gè)級(jí)聯(lián)階段的輸出信息都使用匈牙利雙邊匹配計(jì)算分類及回歸loss來(lái)進(jìn)行訓(xùn)練(深監(jiān)督)。


3.具體方法

pipeline過(guò)完,現(xiàn)在來(lái)具體講講里面的主要部分。當(dāng)然,這次同樣按照CW一貫的風(fēng)格,會(huì)結(jié)合核心代碼來(lái)解析。

Learnable Proposal Boxes: 稀疏的目標(biāo)候選

可學(xué)習(xí)Proposal Boxes維度是(N,4),其中N是預(yù)設(shè)的超參,代表每張圖片最多可檢測(cè)出多少個(gè)物體,也就是目標(biāo)候選數(shù)量;4對(duì)應(yīng)的是候選框坐標(biāo)信息(cxcywh or xyxy)。這些設(shè)置作者經(jīng)過(guò)了實(shí)驗(yàn)測(cè)試:

考慮到性能與訓(xùn)練時(shí)間,最終作者選擇將N設(shè)置為300。

-center表示將proposal boxes初始化在圖像中心位置,中心坐標(biāo)為(0.5,0.5),wh全部設(shè)置為0.1(圖像尺寸為1,這里是將wh設(shè)置為圖像的0.1倍),即所有框的大小都是原圖的0.01(0.1x0.1)倍,最終1個(gè)proposal box表示為(0.5,0.5,0.1,0.1);

-Image表示將proposal boxes初始化為圖像本身,此時(shí)size=1,于是表示為(0.5,0.5,1,1);-Grid表示RoI按照類似anchor一樣密集排列在原圖上,例如[(0,0,0.1,0.1), (0,1,0.1,0.1), ..., (32/圖片w,32/圖片h,0.1,0.1)...],和G-CNN中使用的方法相同;

-Random表示中心坐標(biāo)和寬、高均采用高斯分布隨機(jī)初始化

而Proposal Boxes的初始化方式對(duì)性能的影響相對(duì)較小,這應(yīng)該得益于可學(xué)習(xí)性,使得整體框架也更靈活和魯棒。最終,作者采用了和DETR相同的表示方式:歸一化的cxcywh值,值域是0-1。

需要注意的是,Proposal Boxes是不包括batch信息的,也就是說(shuō)這個(gè)(N,4)矩陣存儲(chǔ)的不是當(dāng)前一張圖片信息,而是要學(xué)習(xí)整個(gè)數(shù)據(jù)集相關(guān)的RoI統(tǒng)計(jì)信息,學(xué)到的是訓(xùn)練集中潛在的目標(biāo)物體位置的統(tǒng)計(jì)分布,其被視作對(duì)圖像中目標(biāo)物體最可能存在區(qū)域的初始猜測(cè)。

作者認(rèn)為,使用RPN來(lái)得到RoI是非?!吧莩蕖钡模ㄏ喈?dāng)于多加了一個(gè)模型做預(yù)測(cè)),而RoI的主要作用是提供豐富的候選框位置,保證召回率,并不需要十分精確,只要滿足合理的相關(guān)分布即可。

因此,作者覺(jué)得能得到一個(gè)合理的和數(shù)據(jù)集相關(guān)的統(tǒng)計(jì)信息就足夠了,最終就采用了這可學(xué)習(xí)的Proposal Boxes來(lái)充當(dāng)RoI的角色,從而在整體架構(gòu)中無(wú)需RPN。

作者采用了Pytorch的nn.Embedding進(jìn)行代碼實(shí)現(xiàn):

也可以用以下這種方式:

self.init_proposal_boxes = nn.Parameter

(torch.Tensor(self.num_proposals, 4))

Learnable Proposal Features: 更給力地表征物體特性

可學(xué)習(xí)的Proposal Features維度是(N,256),其中N的意義和Proposal Boxes中一致,它和Proposal Boxes是一對(duì)一的關(guān)系,同時(shí)也表征了整個(gè)數(shù)據(jù)集實(shí)例特征的統(tǒng)計(jì)信息。

之所以引入Proposal Features,是因?yàn)樽髡呖紤]到僅靠4d的Proposal Boxes提供的RoI Features難免過(guò)于粗糙,不足以表征物體深層次的特征信息(如物體姿態(tài)和形狀等),于是有必要額外引入這個(gè)高維度(256d)的Proposal Features,目的是希望通過(guò)這個(gè)可學(xué)習(xí)的嵌入向量編碼更豐富的實(shí)例的特征。

Proposal Features在這里類似于DETR中Object Query的角色,Object Query在DETR中是可學(xué)習(xí)的位置編碼(position encoding),指導(dǎo)Decoder關(guān)注全局特征圖的哪些位置,同時(shí)全局特征圖還要加上位置編碼,否則性能會(huì)大幅下降。

然而,在Sparse R-CNN中,Proposal Features和Proposal Boxes(對(duì)應(yīng)的RoI Features)一對(duì)一進(jìn)行交互(而非DETR中讓Object Query和全局特征圖的每個(gè)位置進(jìn)行交互),并且Proposal Boxes本身已包含了在全局特征圖中的位置信息,Proposal Features則作為Proposal Boxes對(duì)應(yīng)(位置)的物體的豐富特征,因而在不需要空間位置編碼的同時(shí)也能夠?qū)崿F(xiàn)特征過(guò)濾與增強(qiáng)。

同樣地,對(duì)于Proposal Features的代碼實(shí)現(xiàn),作者也采用了Pytorch的nn.Embedding:

Dynamic Instance Interactive Head: 稀疏的特征交互

該模塊是對(duì)R-CNN Head的改進(jìn):在RoI池化后插入了動(dòng)態(tài)實(shí)例交互(Dynamic Instance Iteractive)模塊,用于將RoI Features和Proposal Features進(jìn)行一對(duì)一交互,目的是實(shí)現(xiàn)特征過(guò)濾和增強(qiáng)。

前面說(shuō)過(guò),Proposal Features的角色相當(dāng)于DETR的Object Query,由于Object Query是和全局特征圖(作為Key)交互,和全局特征圖一樣,RoI Features也提供了位置信息,因而RoI Features也可看作是Key。

但是DETR中的交互是為了讓各目標(biāo)物體關(guān)注其在全局特征圖中的有效特征位置,而這里的RoI Features如前面所述已經(jīng)包含了在全局特征圖的對(duì)應(yīng)位置信息,這些特征本身就對(duì)應(yīng)各個(gè)局部位置,同時(shí)和Proposal Features又是一對(duì)一交互,那么這里的交互究竟是在做甚?

其實(shí),RoI Features中本身還有“更進(jìn)一步”的位置信息:RoI Features是池化特征,通常為統(tǒng)一的7x7大小,這7x7個(gè)bin就是進(jìn)一步的位置信息!

因此,這里Proposal Features和RoI Features進(jìn)行交互是為了關(guān)注7x7個(gè)bin中對(duì)前景更有貢獻(xiàn)的那些位置,從而更有利于之后的分類和回歸。

核心思想已明確,現(xiàn)在舉個(gè)例子來(lái)形象說(shuō)明下整個(gè)交互過(guò)程:

1). 暫時(shí)不考慮batch對(duì)應(yīng)的維度,假設(shè)RoI Features的shape是(300,7,7,256),300是proposals個(gè)數(shù),7x7是統(tǒng)一后的池化特征大小,256是表示每個(gè)特征空間位置的表征向量維度;Proposal Features的shape是(300,256);

2). 將Proposal Features先經(jīng)過(guò)自注意力模塊,這是為了推理出各物體相互之間的關(guān)系(和DETR中一樣);

3). 然后由Proposal Features生成卷積參數(shù):使用全連接層將最后一維由256變?yōu)?x64x256,接著切分成shape為(300,256,64)和(300,64,256)兩部分,這也是稱為“動(dòng)態(tài)交互”的原因,因其參數(shù)是動(dòng)態(tài)生成的;

4). 接著進(jìn)行交互:將shape為(300,7x7,256)的RoI Features按序和以上兩部分進(jìn)行矩陣乘法,輸出的shape是(300,7x7,256),這個(gè)結(jié)果就隱含了各目標(biāo)對(duì)應(yīng)的7x7個(gè)位置中哪些位置才是應(yīng)該關(guān)心的,對(duì)前景更有貢獻(xiàn)的位置將有更高的輸出值。

注意,在第一個(gè)維度(300)上RoI Features和Proposal Features是一對(duì)一進(jìn)行交互計(jì)算的!因此這也是稱為“實(shí)例級(jí)交互”的原因;

以上3&4這種交互操作稱為動(dòng)態(tài)卷積,作者是受到 Dynamic filter networks 啟發(fā)。

5). 最后,這個(gè)結(jié)果(先經(jīng)過(guò)全連接層變換維度)還要加(element-wise add)在Proposal Feautures上(并且歸一化),得到過(guò)濾和增強(qiáng)后的特征表示,作為抽象的物體特征。

仔細(xì)品味下以上過(guò)程,不覺(jué)得和Transformer的Decoder十分相似嗎!?

其中2是一樣的,將Query先經(jīng)過(guò)self-attention;3+4實(shí)質(zhì)上就是Query和Key的交互計(jì)算,為的是實(shí)現(xiàn)特征過(guò)濾和增強(qiáng),只不過(guò)這里將Multi-Head-Attention替換成動(dòng)態(tài)卷積的方式(同時(shí)也沒(méi)有Value,因?yàn)檫@里計(jì)算出來(lái)的結(jié)果本身就是過(guò)濾和增強(qiáng)后的特征表示,而非權(quán)重系數(shù),所以不需要將計(jì)算結(jié)果應(yīng)用在Value上);5就相當(dāng)于是Add&Norm。

所以說(shuō)嘛,Sparse R-CNN就像是DETR的小老弟,雖然沒(méi)有用Transformer,但套路是一樣的。作者通過(guò)實(shí)驗(yàn)證實(shí)了2~4過(guò)程對(duì)性能帶來(lái)的提升:

以上過(guò)程的代碼實(shí)現(xiàn)如下:

其中N代表batch size,nr_boxes代表預(yù)設(shè)的目標(biāo)數(shù)量(300),d_model是嵌入維度(256)。至于自注意力層和實(shí)例交互則如下:

現(xiàn)在來(lái)看看最關(guān)鍵的動(dòng)態(tài)卷積是如何實(shí)現(xiàn)的:

代碼非常簡(jiǎn)單易懂,CW的注釋應(yīng)該已經(jīng)足夠說(shuō)明了。返回的features就是上面pro_features2。

交互之后還會(huì)經(jīng)過(guò)一個(gè)FFN(前向反饋網(wǎng)絡(luò)),真的和DETR那套太像了..

其實(shí)連作者也覺(jué)得像,于是他還與Transformer對(duì)比了一把:

結(jié)果證明,它這個(gè)動(dòng)態(tài)頭部比較牛逼。

最后,既然它是個(gè)頭部,那么肯定需要進(jìn)行預(yù)測(cè)(分類+回歸):

代碼也非常直觀易懂,看注釋就OK。

這一節(jié)該說(shuō)的就這些了,最后我想吐槽下這節(jié)最上面那幅圖。從圖上看,每個(gè)RoI Features和Proposal Features一對(duì)一交互后都會(huì)分別送入獨(dú)立的頭部進(jìn)行預(yù)測(cè),作者在paper中也是這么說(shuō)的:

Each RoI feature is fed into its own exclusive head for object location and classification, where each head is conditioned on specific proposal feature.

但實(shí)際是,代碼中并不是這么寫的!通過(guò)上述就可以知道,想要仔細(xì)印證的話也可以自己去看看這部分源碼:DynamicHead(文末提取鏈接c),如果是CW看錯(cuò)了,還望反饋給我,并且狠狠抽我一巴掌,謝謝!

Cascade R-CNN Head: 級(jí)聯(lián)大法好,Coarse-to-Fine

級(jí)聯(lián)大法好哇,作者在paper中也是這么說(shuō)的:

Iteratively updating the boxes is an intuitive idea to improve its performance.

對(duì)于級(jí)聯(lián)本身,并沒(méi)有什么好說(shuō)的,就拿上一個(gè)頭部的輸出送入到下一頭部再進(jìn)行預(yù)測(cè)唄,整個(gè)相當(dāng)于是由粗到細(xì)(Coarse-to-Fine)的過(guò)程。

另外,每個(gè)頭部的參數(shù)是獨(dú)立的。但是,關(guān)鍵就在于應(yīng)該拿上一個(gè)頭部輸出的什么送入到下一個(gè)頭部?

理所當(dāng)然地,我們會(huì)想到預(yù)測(cè)框,但僅僅如此的話,作者發(fā)現(xiàn)帶來(lái)的性能提升并不明顯:

作者觀察到,一個(gè)候選框?qū)?yīng)的目標(biāo)在整個(gè)級(jí)聯(lián)迭代過(guò)程中通常是不變的,那么為何不把上一個(gè)頭部輸出的目標(biāo)特征也一并送入下一個(gè)頭部呢!畢竟這些目標(biāo)特征可是編碼了豐富的物體特征信息(如姿態(tài)、形狀和位置等)??!

這么想之后,作者也試了一把,果然,飛漲了11.7個(gè)點(diǎn)(見(jiàn)上圖中Feature reuse打鉤那行)!

此外還有個(gè)細(xì)節(jié),需要看代碼才知道:

注意到紅框部分,上一個(gè)head的預(yù)測(cè)框在輸入到下一個(gè)head前要取消梯度!這樣的話,就只有第一個(gè)head的梯度能夠回傳至proposal boxes,而后面的head只能讓proposal features進(jìn)行學(xué)習(xí)。對(duì)于這個(gè)問(wèn)題,CW是這么看的:

你想想,Sparse R-CNN是R-CNN家族的,也就是說(shuō)它帶有2-stage性質(zhì)。第一階段會(huì)學(xué)習(xí)RoI,但第二階段RoI已經(jīng)作為先驗(yàn)的角色(相當(dāng)于anchor),也是不再進(jìn)行學(xué)習(xí)的。作者在這里的設(shè)置或多或少也有這樣的味道。

這么看來(lái),Proposal Boxes和RPN的RoI一樣,只需提供一個(gè)粗糙的結(jié)果即可,后面會(huì)有第二階進(jìn)行精調(diào)(這里是級(jí)聯(lián)head,不斷學(xué)習(xí)Proposal Features)。

在github上看到有的人疑惑:即使是第一個(gè)head,Proposal Boxes由于經(jīng)過(guò)了RoI Pooling/Align,因此這部分是無(wú)法回傳梯度的,那么到底是怎么讓Proposal Boxes進(jìn)行學(xué)習(xí)的呢?

RoI Pooling/Align確實(shí)無(wú)法回傳梯度,但是在bbox解碼時(shí)會(huì)需要Proposal Boxes參與計(jì)算啊,這時(shí)候就能夠回傳梯度了,Proposal Boxes也是在此獲得學(xué)習(xí)的機(jī)會(huì)的(其實(shí)Faster R-CNN在第二階段也可以的,只不過(guò)其將解碼過(guò)程寫在no_grad過(guò)程里了,而這里并沒(méi)有)。

這部分代碼就是上一節(jié)展示的預(yù)測(cè)部分中的self.apply_deltas()方法,和常規(guī)的bbox解碼無(wú)異,這里就不再展示了。

另外,作者還實(shí)驗(yàn)了級(jí)聯(lián)頭部的數(shù)量對(duì)最終性能的影響:

根據(jù)實(shí)驗(yàn)結(jié)果,最終選擇級(jí)聯(lián)6個(gè)頭部。


4.總結(jié)與思考

我們知道,R-CNN系列的2-stage方法通常有更高的精度,但是檢測(cè)速度也相對(duì)不如1-stage,畢竟其需要前一個(gè)階段(RPN)來(lái)預(yù)測(cè)RoI。

然而,Sparse R-CNN受到DETR的learnable object query啟發(fā),直接開(kāi)掛般設(shè)置一組可學(xué)習(xí)的嵌入向量作為RoI,從而干掉了RPN,也是十分大膽!

另外,在最近萬(wàn)物皆Transformer的形勢(shì)下,Sparse R-CNN保持了自己的個(gè)性,使用動(dòng)態(tài)卷積的方式來(lái)做交互計(jì)算,并且是局部而非Transformer般的全局交互(因此也不需要全局空間的位置編碼)!

進(jìn)一步提升了計(jì)算效率,也徹底地做到了SPARSE(必須大寫以表?yè)P(yáng)下~)。這篇paper的思想給R-CNN方法乃至E2E Object Detection領(lǐng)域無(wú)疑都是能帶來(lái)創(chuàng)造性的啟發(fā)。

另外,CW突然想到一個(gè)點(diǎn),如上所述,雖然Sparse R-CNN在沒(méi)有加入空間位置編碼的情況下依然能做到特征過(guò)濾和增強(qiáng),但是不妨猜想下,如果是加入“局部”空間位置編碼呢:即對(duì)池化特征7x7個(gè)bin附加對(duì)應(yīng)的位置編碼(這個(gè)位置編碼看作是數(shù)據(jù)集池化特征中隱含的局部位置的統(tǒng)計(jì)分布),會(huì)不會(huì)達(dá)到更強(qiáng)的特征過(guò)濾和增強(qiáng)效果?如果有興趣,各位哥們兒也可是實(shí)驗(yàn)下,同時(shí)也歡迎反饋交流!

作者簡(jiǎn)介,CW,畢業(yè)于中山大學(xué)(SYSU)數(shù)據(jù)科學(xué)與計(jì)算機(jī)學(xué)院,就職于騰訊技術(shù)工程與事業(yè)群(TEG)從事Devops工作,曾在AI LAB實(shí)習(xí),實(shí)操過(guò)道路交通元素與醫(yī)療病例圖像分割、視頻實(shí)時(shí)人臉檢測(cè)與表情識(shí)別、OCR等項(xiàng)目。

目前在一些自媒體平臺(tái)上參與外包項(xiàng)目的研發(fā)工作,項(xiàng)目專注于CV領(lǐng)域(傳統(tǒng)圖像處理與深度學(xué)習(xí)方向)。

參考鏈接

a.https://arxiv.org/pdf/2005.12872.pdf

b.Paper & Code:

https://arxiv.org/abs/2011.12450?

https://github.com/PeizeSun/SparseR-CNN

c.https://github.com/PeizeSun/SparseR-CNN/blob/main/projects/SparseRCNN/sparsercnn/head.py

原創(chuàng)精選 | 徹底Sparse!基于稀疏交互機(jī)制的端到端檢測(cè)器的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
江都市| 竹溪县| 湘西| 利辛县| 雅江县| 佛学| 玉环县| 泊头市| 阳信县| 泰来县| 辽阳县| 莫力| 涡阳县| 会东县| 昂仁县| 玉田县| 金门县| 胶州市| 本溪| 周宁县| 项城市| 东宁县| 宁都县| 大港区| 济南市| 五大连池市| 朝阳区| 柘荣县| 西城区| 肥乡县| 随州市| 嵊州市| 桃源县| 鄄城县| 民乐县| 乐昌市| 西昌市| 永川市| 司法| 宣城市| 张家川|