《Precise Detection in Densely Packed Scenes》是發(fā)表在2019cvpr上的文章并且有源碼。
代碼地址:https://github.com/eg4000/SKU110K_CVPR19
這篇文章的目的是對(duì)于一些人為的密集場(chǎng)景的物體進(jìn)行檢測(cè)定位阔涉。如下圖所示缆娃,在一些商店的貨架上待售商品擺放密集。使用一些SOTA的方法如RetinaNet瑰排,會(huì)出現(xiàn)檢測(cè)框重疊的問題贯要,如圖中a所示。使用文章方法可以減少這種問題椭住,如圖中b所示崇渗。其中c和d是對(duì)a和b的局部區(qū)域放大的結(jié)果。
文章方法分為四步京郑,圖片輸入宅广,網(wǎng)絡(luò)提取特征,EM-Merger推斷些举,NMS跟狱,不完全對(duì)應(yīng)但基本可以用下圖表示。
一金拒、網(wǎng)絡(luò)結(jié)構(gòu)
如上圖中的b所示兽肤,文章采用resnet50作為主干網(wǎng)絡(luò),網(wǎng)絡(luò)采用FPN框架绪抛,網(wǎng)絡(luò)有三個(gè)輸出分支都采用了RPN結(jié)果资铡,其中有兩個(gè)和RetinaNet一樣。
一個(gè)是detection head幢码,是用來回歸定位物體的笤休,輸出為(x,y,h,w)坐標(biāo),用來表示網(wǎng)絡(luò)檢測(cè)的物體坐標(biāo)症副。
第二個(gè)是classification店雅,是用來說明是什么物體的政基,輸出的值取值在0-1之間。
第三個(gè)是新提出來的闹啦,取名為soft-iou layer沮明。
1.1 Soft-IoU Layer
先說明一下為什么要提出這個(gè)網(wǎng)絡(luò)層。在一般的物體檢測(cè)算法中窍奋,檢測(cè)出來的框要經(jīng)過一個(gè)叫NMS的后處理荐健,這個(gè)后處理是根據(jù)預(yù)測(cè)框的類別、分?jǐn)?shù)和框的IOU來計(jì)算的琳袄。預(yù)測(cè)框的分?jǐn)?shù)一般是對(duì)于框內(nèi)物體進(jìn)行預(yù)測(cè)的江场,它并不能代表預(yù)測(cè)框和真實(shí)框之間的iou,所以可能存在預(yù)測(cè)框分?jǐn)?shù)很高窖逗,但是該預(yù)測(cè)框并沒有很好的定位出物體的情況址否。這里提出Soft-IoU就是為了估計(jì)框的定位是否準(zhǔn)確,該層的輸出就是預(yù)測(cè)框與真實(shí)框的IoU值碎紊。
對(duì)于IoU的計(jì)算佑附,假設(shè)預(yù)測(cè)出的是N個(gè)檢測(cè)框,每個(gè)預(yù)測(cè)框的IoU計(jì)算如下
其中表示離預(yù)測(cè)框
最近的標(biāo)定框(文章寫的是
,我覺得不合理瘟斜,這里如果有問題,歡迎指出)痪寻。
1.2 loss函數(shù)
先說一下新提出的Soft-IoU Layer的loss函數(shù)螺句,采用的是交叉熵,如下所示:
其中n表示每個(gè)batch的標(biāo)定框數(shù)橡类,表示預(yù)測(cè)框與真實(shí)框的iou蛇尚,
表示預(yù)測(cè)的iou分?jǐn)?shù),說白了這一層就是一個(gè)簡(jiǎn)單的二分類顾画。
對(duì)于整個(gè)網(wǎng)絡(luò)的loss取劫,如下式所示:
已經(jīng)介紹過了,其他兩個(gè)損失函數(shù)同F(xiàn)asterRCNN研侣。
二谱邪、EM-Merger單元(推斷過程使用)
對(duì)于網(wǎng)絡(luò)的輸出,有N個(gè)預(yù)測(cè)框的位置庶诡、置信度惦银、預(yù)測(cè)的iou分?jǐn)?shù)。為了處理密集場(chǎng)景,文章提出EM-Merger單元來過濾重疊的預(yù)測(cè)框扯俱。
2.1 Detections as Gaussians
名字取得有點(diǎn)迷书蚪,這部分說白了就是將檢測(cè)出的框看出是高斯分布,一個(gè)框?qū)?yīng)一個(gè)高斯分布迅栅,對(duì)于N個(gè)預(yù)測(cè)框使用下式表示:
其殊校,是個(gè)二維的。
读存,說明高斯分布的均值是使用預(yù)測(cè)框的中心點(diǎn)來表示的箩艺。對(duì)角協(xié)方差
,
表示預(yù)測(cè)框的長(zhǎng)和框。(這里代碼中有些值不同宪萄,不影響理解)
對(duì)于所有預(yù)測(cè)的框的分布就可以使用混合高斯(MoG)表示,如下式所示
其中榨惰,
拜英。
2.2 Selecting predictions: formal definition
這步是在2.1的基礎(chǔ)上,過濾一部分的預(yù)測(cè)框琅催,假設(shè)這步輸入的預(yù)測(cè)框有N個(gè)居凶,輸出的有K個(gè),其中K<<N藤抡。也就是從N個(gè)高斯分布中找到K個(gè)高斯分布侠碧,這K個(gè)高斯分布表示方法同2.1,如下所示缠黍。
并且希望這K個(gè)高斯分布的組合能夠和使用上面N個(gè)高斯分布組合出的分布很相似弄兜,K個(gè)高斯分布的組合如下所示
策略f和g的相似度,我們使用KL-divergence瓷式,如下式所示
2.3 An EM-approach for selecting detections
這步是為了解決如何從N個(gè)高斯分布中找到K個(gè)近似的高斯分布表示替饿,從標(biāo)題可以看出,這步采用的是基于EM的算法贸典。
EM算法分為兩步视卢,一個(gè)叫E-step,另一個(gè)叫M-step廊驼。下面來詳細(xì)講解一下据过。
在這里E-step的任務(wù)是根據(jù)和g的分布對(duì)
進(jìn)行聚類,表達(dá)式如下所示
上式想表達(dá)的就是將通過KL-divergence將其分到K個(gè)類中妒挎。
M-step是通過新的聚類樣本更新聚類參數(shù)绳锅,更新方式如下
文章說明,當(dāng)?shù)恼`差小于1e-10或者達(dá)到一定的迭代次數(shù)時(shí)饥漫,認(rèn)為迭代收斂榨呆。
2.4 Gaussians as detections
通過2.3中的操作,一旦EM算法收斂,我們可以得到K個(gè)估計(jì)出的高斯分布积蜻。其中K的取值為闯割,符號(hào)文章沒有解釋「筒穑看完代碼發(fā)現(xiàn)解釋起來相對(duì)不是很方便宙拉。
先講一下N個(gè)高斯分布怎么來的吧,對(duì)于一個(gè)檢測(cè)圖像丙笋,預(yù)測(cè)出了x個(gè)框谢澈,將所有框縮小一定的比例(比如代碼中的0.3)然后將x個(gè)框用高斯分布表示,這樣就能在圖像上畫出一個(gè)個(gè)的二維高斯分布圖御板,將對(duì)畫完的高斯分布圖求輪廓锥忿,每個(gè)輪廓包含的預(yù)測(cè)框就定為N個(gè)。上面K的求解,就是在這個(gè)輪廓中N個(gè)預(yù)測(cè)框的K個(gè)估計(jì)框分布,I為當(dāng)前輪廓的區(qū)域面積济赎,指的是N個(gè)預(yù)測(cè)框縮小0.3倍后面積取中位數(shù)的值酬蹋。
得到的K個(gè)高斯分布(也可以理解為K)并不是最終的檢測(cè)結(jié)果,還要經(jīng)過一些過濾規(guī)則,比如預(yù)測(cè)框中心點(diǎn)在K個(gè)高斯分布內(nèi)的內(nèi)的框,分?jǐn)?shù)(這里的分?jǐn)?shù)值得是)達(dá)到一定值,NMS等等,這些具體細(xì)節(jié)文章沒有寫出來数尿,可以看代碼。
經(jīng)過一系列操作后等到的最終結(jié)果就是最終的預(yù)測(cè)框了惶楼,這里一系列操作包括EM右蹦,以及EM后的過濾操作,這些都可以理解為過濾很多不必要的冗余檢測(cè)框歼捐。
這里原理基本講完了嫩实,后處理還是蠻復(fù)雜的,具體可以看看代碼https://github.com/liuheng92/SKU110K_CVPR19
我原代碼沒有改動(dòng)窥岩,加了一些注釋