0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

不同種類(lèi)的anchor-based和anchor-free的相關(guān)算法

jf_pmFSk4VX ? 來(lái)源:GiantPandaCV ? 作者:GiantPandaCV ? 2022-10-21 08:58 ? 次閱讀

前言

由于在學(xué)習(xí)和應(yīng)用目標(biāo)檢測(cè)算法時(shí),不可避免的接觸到正負(fù)樣本的生成策略等知識(shí)點(diǎn),并且正負(fù)樣本的區(qū)分策略對(duì)算法最終效果至關(guān)重要。因此,通過(guò)參考他人的文章資料,本文將目標(biāo)檢測(cè)中正負(fù)樣本的區(qū)分策略進(jìn)行匯總。為了能將主要篇幅集中在不同算法生成正負(fù)樣本的策略上,本文不對(duì)每個(gè)算法完整結(jié)構(gòu)進(jìn)行詳細(xì)介紹。本文涉及了不同種類(lèi)的anchor-based和anchor-free的相關(guān)算法(共5個(gè)算法)。并且會(huì)在后續(xù)文章中,繼續(xù)補(bǔ)充其他算法(例如yolo系列、centernet、ATSS等)。

一、正負(fù)樣本的概念

目前,許多人在看相關(guān)目標(biāo)檢測(cè)的論文時(shí),常常誤以為正樣本就是我們手動(dòng)標(biāo)注的GT(ground truth),這個(gè)理解是錯(cuò)誤的,正確的理解是這樣的:

首先,正樣本是想要檢測(cè)的目標(biāo),比如檢測(cè)人臉時(shí),人臉是正樣本,非人臉則是負(fù)樣本,比如旁邊的窗戶(hù)、紅綠燈之類(lèi)的其他東西。其次,在正負(fù)樣本選取時(shí),要注意:正樣本是與GT的IOU值大于閾值時(shí)的取值,負(fù)樣本是小于閾值的,其他的則把它去除即可。

總之,正負(fù)樣本都是針對(duì)于程序生成的框而言,非GT數(shù)據(jù)[^1]。

二、為什么要進(jìn)行正負(fù)樣本采樣?

需要處理好正負(fù)樣本不平衡問(wèn)題:在ROI、RPN等過(guò)程中,整個(gè)圖像中正樣本區(qū)域少,大部分是負(fù)樣本[^2]。

提高網(wǎng)絡(luò)收斂速度和精度:對(duì)于目標(biāo)檢測(cè)算法,主要需要關(guān)注的是對(duì)應(yīng)著真實(shí)物體的 正樣本 ,在訓(xùn)練時(shí)會(huì)根據(jù)其loss來(lái)調(diào)整網(wǎng)絡(luò)參數(shù)。相比之下, 負(fù)樣本對(duì)應(yīng)著圖像的背景,如果有大量的負(fù)樣本參與訓(xùn)練,則會(huì)淹沒(méi)正樣本的損失,從而降低網(wǎng)絡(luò)收斂的效率與檢測(cè)精度。

三、anchor-free和anchor-based

二者的區(qū)別在于是否利用anchor提取候選框[^2]

從anchor回歸屬于anchor-based類(lèi),代表如faster rcnn、retinanet、YOLOv2 v3、ssd等,

從point回歸屬于anchor-free類(lèi),代表如cornernet、extremenet、centernet等,

二者融合代表如fsaf、sface、ga-rpn等。

四、典型算法

1、MTCNN

論文:Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks

5cd45410-50da-11ed-a3b6-dac502259ad0.jpg

算法推理流程圖

MTCNN算法訓(xùn)練過(guò)程:[^3]:

PNet的輸入尺寸為, RNet的輸入尺寸為, ONet的輸入尺寸為。

由于PNet輸入是一個(gè)大小的圖片,所以訓(xùn)練前需要把生成的訓(xùn)練數(shù)據(jù)(通過(guò)生成bounding box,然后把該bounding box 剪切成大小的圖片),轉(zhuǎn)換成的結(jié)構(gòu)。其他網(wǎng)絡(luò)輸入尺寸如下圖所示:

5cf081c6-50da-11ed-a3b6-dac502259ad0.png5d125382-50da-11ed-a3b6-dac502259ad0.png5d2cecf6-50da-11ed-a3b6-dac502259ad0.png

1)正負(fù)樣本的定義

訓(xùn)練數(shù)據(jù)可以通過(guò)和GT的 IOU 的計(jì)算生成一系列的 bounding box??梢酝ㄟ^(guò)滑動(dòng)窗口或者隨機(jī)采樣的方法獲取訓(xùn)練數(shù)據(jù),訓(xùn)練數(shù)據(jù)分為三種正樣本,負(fù)樣本,中間樣本[^4]。

正樣本:IOU > 0.65部分樣本:0.4 < IOU < 0.65負(fù)樣本: IOU < 0.3

如下圖所示,為依據(jù)圖片中人臉框的坐標(biāo)信息生成正樣本部分樣本:由于篇幅原因,下圖中IOU的計(jì)算過(guò)程沒(méi)有截圖,可以參考[^4]的源碼。

注意:代碼中的 w、h 分別是GT的尺度。

此處生成正樣本的腳本,除了對(duì)生成的矩形框尺度進(jìn)行約束,還約束了矩形框的中心點(diǎn)坐標(biāo)范圍。筆者認(rèn)為,這樣做主要是為了提高生成正樣本的效率:因?yàn)橐粡垐D片中正樣本的數(shù)量是非常有限的,要確保生成的矩形框與GT的IOU大于一定閾值才能成為正樣本。

5d4a3c70-50da-11ed-a3b6-dac502259ad0.png

如下圖所示,使用隨機(jī)采樣的方式生成負(fù)樣本:紅色框?yàn)閏rop_box計(jì)算方法,相對(duì)正樣本的生成方式更簡(jiǎn)單。

注意:代碼中的 width、height 分別是原始圖像的尺度。

5d633662-50da-11ed-a3b6-dac502259ad0.png

訓(xùn)練樣本包含:正樣本,負(fù)樣本,部分樣本,關(guān)鍵點(diǎn)樣本。比例為 1 : 3 : 1 : 2

訓(xùn)練主要包括三個(gè)任務(wù):

人臉?lè)诸?lèi)任務(wù):利用正樣本和負(fù)樣本進(jìn)行訓(xùn)練,

人臉邊框回歸任務(wù):利用正樣本和部分樣本進(jìn)行訓(xùn)練,

關(guān)鍵點(diǎn)檢測(cè)任務(wù):利用關(guān)鍵點(diǎn)樣本進(jìn)行訓(xùn)練。

MTCNN算法測(cè)試過(guò)程:[^3]:

1、首先整張圖像經(jīng)過(guò)金字塔,生成多個(gè)尺度的圖像(圖像金字塔),然后輸入PNet,PNet由于尺寸很小,所以可以很快的選出候選區(qū)域。但是準(zhǔn)確率不高,不同尺度上的判斷出來(lái)的人臉檢測(cè)框,然后采用NMS算法,合并候選框。

2、根據(jù)候選框提取圖像,之后縮放到的大小,作為RNet的輸入,RNet可以精確的選取邊框,一般最后只剩幾個(gè)邊框。

3、最后縮放到的大小,輸入ONet,判斷后選框是不是人臉,ONet雖然速度較慢,但是由于經(jīng)過(guò)前兩個(gè)網(wǎng)絡(luò),已經(jīng)得到了高概率的邊框,所以輸入ONet的圖像較少,然后ONet輸出精確的邊框和關(guān)鍵點(diǎn)信息,只是在第三個(gè)階段上才顯示人臉特征定位;前兩個(gè)階段只是分類(lèi),不顯示人臉定點(diǎn)的結(jié)果。

2、Faster rcnn

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

5d72f138-50da-11ed-a3b6-dac502259ad0.jpg

算法整體結(jié)構(gòu)

1)Anchor概念

Anchor(錨框):

Anchor本質(zhì)上是在原圖上預(yù)先定義好(這個(gè)預(yù)先定義十分關(guān)鍵)的一系列大小不一的矩形框[^5]。

為什么要引入Anchor呢?

這是因?yàn)橹暗哪繕?biāo)檢測(cè)都是模型直接回歸邊框的位置,而通過(guò)引入Anchor相當(dāng)于加入了強(qiáng)先驗(yàn)信息,然后通過(guò)錨框再去篩選與修正,最后再得到預(yù)測(cè)框。這樣做的好處在與是在Anchor的基礎(chǔ)上做物體檢測(cè),這樣要比從無(wú)到有的直接擬合物體的邊框容易一些。

具體的做法就是:讓模型去預(yù)測(cè)Anchor與真實(shí)邊框的偏移值,而不是直接預(yù)測(cè)邊框的坐標(biāo)[^5]。

如何生成Anchor呢?

5d86dbbc-50da-11ed-a3b6-dac502259ad0.png

從圖片到卷積特征圖

特征圖(feature map)上的每一個(gè)點(diǎn)生成一組錨點(diǎn)。注意:即使我們是在特征圖上生成的錨點(diǎn),這些錨點(diǎn)最終是要映射回原始圖片的尺寸(參考下圖感受野的相關(guān)概念[^7])。

5d9c7896-50da-11ed-a3b6-dac502259ad0.png

因?yàn)槲覀冎挥玫搅司矸e和池化層,所以特征圖的最終維度與原始圖片是呈比例的。數(shù)學(xué)上,如果圖片的尺寸是,那么特征圖最終會(huì)縮小到尺寸為 和,其中 r 是次級(jí)采樣率。如果我們?cè)谔卣鲌D上每個(gè)空間位置上都定義一個(gè)錨點(diǎn),那么最終圖片的錨點(diǎn)會(huì)相隔 r 個(gè)像素,在 VGG 中,,此處可以參考文章最后的文獻(xiàn)[^6]。 所以,feature map上一點(diǎn)對(duì)應(yīng)到原圖的大小為的區(qū)域。

5db9dd1e-50da-11ed-a3b6-dac502259ad0.png

原始圖片的錨點(diǎn)中心

在目標(biāo)檢測(cè)中,需要檢測(cè)的目標(biāo)形態(tài)大小各異,如果統(tǒng)一以固定大小的窗口進(jìn)行檢測(cè),肯定會(huì)影響檢測(cè)效果,降低精度。因此Faster R-CNN算法為每個(gè)滑動(dòng)窗口位置配置了9個(gè)基準(zhǔn)矩形框來(lái)適配各種目標(biāo)。即,對(duì)于每張輸入的特征圖像的每一個(gè)位置,使用9種尺度的候選窗口:三種面積{, , },三種比例{1 : 1, 1 : 2, 2 : 1},目的是盡可能的將尺度大小不一的特定目標(biāo)區(qū)域特征檢測(cè)出來(lái),并判斷候選窗口是否包含感興趣的目標(biāo)。

5e9c095a-50da-11ed-a3b6-dac502259ad0.png

Anchor原理圖(如上圖所示)

5eb1044a-50da-11ed-a3b6-dac502259ad0.png

原始圖片的錨點(diǎn)中心生成的9種候選框(如上圖所示)

5ed094f4-50da-11ed-a3b6-dac502259ad0.png

原始圖片中所有anchor可視化(如上圖所示)

5f857428-50da-11ed-a3b6-dac502259ad0.png

左側(cè):錨點(diǎn)、中心:特征圖空間單一錨點(diǎn)在原圖中的表達(dá),右側(cè):所有錨點(diǎn)在原圖中的表達(dá)(如上圖所示)

2)正負(fù)樣本的定義[^8]

faster rcnn中正負(fù)樣本是根據(jù)anchors的標(biāo)定規(guī)則來(lái)生成的。

(1)正樣本的生成:

如果某個(gè)anchor和其中一個(gè)GT的最大iou大于pos_iou_thr,那么該anchor就負(fù)責(zé)對(duì)應(yīng)的GT;

如果某個(gè)GT和所有anchor的iou中最大的iou會(huì)小于pos_iou_thr,但是大于min_pos_iou,則依然將該anchor負(fù)責(zé)對(duì)應(yīng)的gt。通過(guò)本步驟,可以最大程度保證每個(gè)GT都有anchor負(fù)責(zé)預(yù)測(cè),如果還是小于min_pos_iou,那就沒(méi)辦法了,只能當(dāng)做忽略樣本了;

(2)負(fù)樣本的生成:

如果anchor和GT的iou低于neg_iou_thr的,那就是負(fù)樣本,其應(yīng)該包括大量數(shù)目;

其余的anchor全部當(dāng)做忽略區(qū)域,不計(jì)算梯度。

該最大分配策略,可以盡最大程度的保證每個(gè)GT都有合適的高質(zhì)量anchor進(jìn)行負(fù)責(zé)預(yù)測(cè)。

5f8ef0c0-50da-11ed-a3b6-dac502259ad0.png

RPN中正負(fù)樣本定義

5fbcaa06-50da-11ed-a3b6-dac502259ad0.png

RCNN中正負(fù)樣本定義

3)正負(fù)樣本的采樣

雖然上文中的最大分配策略可以區(qū)分正負(fù)樣本和忽略樣本,但是依然存在大量的正負(fù)樣本不平衡問(wèn)題。

解決辦法可以通過(guò)正負(fù)樣本采樣或者loss上面一定程度解決,faster rcnn默認(rèn)是需要進(jìn)行正負(fù)樣本采樣的。 rpn head和rcnn head的采樣器都比較簡(jiǎn)單,就是隨機(jī)采樣,閾值不一樣而已。

5fc34456-50da-11ed-a3b6-dac502259ad0.png

RPN head采樣器

注意:RPN中的add_gt_as_proposals=False

5ff9ef38-50da-11ed-a3b6-dac502259ad0.png

rcnn head采樣器

注意:rcnn中的add_gt_as_proposals=True

dict函數(shù)中各個(gè)參數(shù)具體含義:

num表示采樣后樣本總數(shù),包括正負(fù)和忽略樣本。

pos_fraction表示其中的正樣本比例。

neg_pos_ub表示正負(fù)樣本比例,用于確定負(fù)樣本采樣個(gè)數(shù)上界,例如我打算采樣1000個(gè)樣本,正樣本打算采樣500個(gè),但是可能實(shí)際正樣本才200個(gè),那么正樣本實(shí)際上只能采樣200個(gè),如果設(shè)置neg_pos_ub=-1,那么就會(huì)對(duì)負(fù)樣本采樣800個(gè),用于湊足1000個(gè),但是如果設(shè)置為neg_pos_ub比例,例如1.5,那么負(fù)樣本最多采樣個(gè),最終返回的樣本實(shí)際上不夠1000個(gè)。默認(rèn)情況neg_pos_ub=-1。

由于rcnn head的輸入是rpn head的輸出,在網(wǎng)絡(luò)訓(xùn)練前期,rpn無(wú)法輸出大量高質(zhì)量樣本,故為了平衡和穩(wěn)定rcnn訓(xùn)練過(guò)程,通常會(huì)對(duì)rcnn head部分添加gt作為proposal。因此,上述兩個(gè)采樣器還有一個(gè)參數(shù)add_gt_as_proposals。

3、SSD

論文:SSD: Single Shot MultiBox Detector

SSD是最典型的多尺度預(yù)測(cè)結(jié)構(gòu),是非常早期的網(wǎng)絡(luò)。

60044ffa-50da-11ed-a3b6-dac502259ad0.png

可以通過(guò)如下網(wǎng)絡(luò)結(jié)構(gòu)對(duì)比圖,大致理解SSD解決多尺度問(wèn)題的思路與其他網(wǎng)絡(luò)的區(qū)別。

60245d7c-50da-11ed-a3b6-dac502259ad0.png

左側(cè):僅在一種尺度的特征圖上進(jìn)行檢測(cè),例如Faster rcnn。右側(cè):在多種尺度特征上進(jìn)行檢測(cè),例如SSD。

1)SSD核心設(shè)計(jì)思路[^9]:

(1)采用多尺度特征圖用于檢測(cè)

所謂多尺度采用大小不同的特征圖(feature map),CNN網(wǎng)絡(luò)一般前面的特征圖比較大,后面會(huì)逐漸采用stride=2的卷積或者pool來(lái)降低特征圖大小。

下圖所示,一個(gè)比較大的特征圖和一個(gè)比較小的特征圖,他們都用來(lái)做檢測(cè)。這樣做的好處是:比較大的特征圖用來(lái)檢測(cè)相對(duì)較小的目標(biāo),而小的特征圖負(fù)責(zé)檢測(cè)大目標(biāo),的特征圖可以劃分更多的單元,但是其每個(gè)單元的default box尺度比較小。

6030b568-50da-11ed-a3b6-dac502259ad0.png

左側(cè):的特征圖上設(shè)置尺寸小的先驗(yàn)框。右側(cè):的特征圖上設(shè)置尺寸大的先驗(yàn)框

特別注意:上述兩個(gè)特征圖尺寸是不一樣的,的尺寸比的尺寸大,但是,的特征圖中每個(gè)小格子,即feature map cell的感受野都比小,即,每個(gè)小格子映射回原圖時(shí)對(duì)應(yīng)的圖片區(qū)域。一塊區(qū)域就可以看做一組特征。然后對(duì)這些特征進(jìn)行分類(lèi)和回歸。

(2)采用卷積進(jìn)行檢測(cè)

SSD直接采用卷積對(duì)不同的特征圖來(lái)進(jìn)行提取檢測(cè)結(jié)果。對(duì)于形狀為的特征圖,只需要采用這樣比較小的卷積核得到檢測(cè)值。此處主要是與yolo最后采用全連接層的方式進(jìn)行對(duì)比。

(3)設(shè)置先驗(yàn)框(default boxes)

SSD借鑒了Faster R-CNN中anchor的理念,每個(gè)單元設(shè)置尺度或者長(zhǎng)寬比不同的先驗(yàn)框(default boxes),預(yù)測(cè)的邊界框(bounding boxes)是以這些先驗(yàn)框?yàn)榛鶞?zhǔn)的,在一定程度上減少訓(xùn)練難度。

一般情況下,每個(gè)單元會(huì)設(shè)置多個(gè)先驗(yàn)框,其尺度和長(zhǎng)寬比存在差異,如下圖所示,可以看到每個(gè)單元使用了4個(gè)不同的default boxes(SSD中不同尺度的特征圖可以設(shè)置不同個(gè)數(shù)的先驗(yàn)框),圖片中貓和狗分別采用最適合它們形狀的先驗(yàn)框來(lái)進(jìn)行訓(xùn)練,后面會(huì)詳細(xì)講解訓(xùn)練過(guò)程中的先驗(yàn)框匹配原則。

605b89be-50da-11ed-a3b6-dac502259ad0.png

如上圖所示,在不同尺度的特征圖上設(shè)置不同尺度和長(zhǎng)寬比的先驗(yàn)框

每一個(gè)feature map中的每一個(gè)小格子(cell)都包含多個(gè)default box,同時(shí)每個(gè)box對(duì)應(yīng)loc(位置坐標(biāo))和conf(每個(gè)種類(lèi)的得分)。

default box長(zhǎng)寬比例默認(rèn)有四個(gè)六個(gè):四個(gè)default box是長(zhǎng)寬比(aspect ratios)為(1:1)、(2:1)、(1:2)、(1:1);六個(gè)則是添加了(1:3)、(3:1)。

為什么會(huì)有兩個(gè)(1:1)呢?

這時(shí)候就要講下論文中Choosing scales and aspect ratios for default boxes這段內(nèi)容了。作者認(rèn)為不同的feature map應(yīng)該有不同的比例(一個(gè)大框一個(gè)小框,長(zhǎng)寬比相同,但是不同feature map 相對(duì)于原圖的尺寸比例不同)。這是什么意思呢?代表的是default box中這個(gè)1在原圖中的尺寸是多大的。

(4)計(jì)算先驗(yàn)框min_sizes和max_sizes的方式

對(duì)于先驗(yàn)框的尺度,其遵守一個(gè)線(xiàn)性遞增規(guī)則:隨著特征圖大小降低,先驗(yàn)框尺度線(xiàn)性增加。計(jì)算公式如下所示:

****即代表在300*300輸入中的比例,表示第k層feature map上生成的先驗(yàn)框大小相對(duì)于圖片的比例。

****代表的是特征圖索引

為當(dāng)前的網(wǎng)絡(luò)結(jié)構(gòu)中可以生成先驗(yàn)框的feature map層數(shù)。特別注意:,因?yàn)橐还灿?個(gè)feature map,但是第一層(Conv4_3層)是單獨(dú)設(shè)置的。

代表的是第一層和最后一層所占的比例,比例的最小值和最大值,在ssd300中為0.2-0.9。

實(shí)際上是:對(duì)于第一個(gè)特征圖Conv4_3,其先驗(yàn)框的尺度比例一般設(shè)置為 ,故第一層的。輸入是300,故conv4_3的min_size=30。對(duì)于從第二層開(kāi)始的特征圖,則利用上述公式進(jìn)行線(xiàn)性增加,然后再乘以圖片大小,可以得到各個(gè)特征圖的尺度為60、111、162、213、264。最后一個(gè)特征圖conv9_2的size是直接計(jì)算的,。 以上計(jì)算可得每個(gè)特征的min_size和max_size,如下:

6087abac-50da-11ed-a3b6-dac502259ad0.png

具體實(shí)現(xiàn)代碼:ssd_pascal.py 下圖注釋中提到的博客:關(guān)于SSD默認(rèn)框產(chǎn)生的詳細(xì)解讀

6091798e-50da-11ed-a3b6-dac502259ad0.png

接下來(lái),補(bǔ)充回答為什么default box的size有兩個(gè)(1:1)[^9]?

作者在這有引入了一個(gè),也就是每個(gè)特征圖都設(shè)置了兩個(gè)長(zhǎng)寬比為1大小不同的正方形default box。有的小伙伴可能會(huì)有疑問(wèn),這有了則需要多出來(lái)一部分的啊,是的沒(méi)錯(cuò),最后一個(gè)特征圖需要參考來(lái)計(jì)算,因此每個(gè)特征圖(的每個(gè)cell)都有6個(gè)default box(aspect ratios),但是在實(shí)現(xiàn)時(shí), Conv4_3,Conv10_2,Conv11_2僅僅使用4個(gè)先驗(yàn)框(default box),不使用長(zhǎng)寬比為的先驗(yàn)框(default box)。作者的代碼中就添加了兩層,第一層取0.1最后一層取1。

那么S怎么用呢?按如下方式計(jì)算先驗(yàn)框的寬高(這里的Sk是上面求得的各個(gè)特征圖的先驗(yàn)框的實(shí)際size,不再是尺度比例):

ar代表的是之前提到的先驗(yàn)框default box(aspect ratios)比例,即

對(duì)于先驗(yàn)框default box中心點(diǎn)的值取值為:

其中i,j代表在feature map中的水平和垂直的第幾格。

fk代表的是feature map的size。

每個(gè)單元的先驗(yàn)框中心點(diǎn)分布在各單元的中心。

(5)計(jì)算先驗(yàn)框的大小的方式

下圖所示為每個(gè)cell生成4個(gè)先驗(yàn)框的方法,生成6個(gè)先驗(yàn)框的方式類(lèi)似,只需要增加1:3和3:1兩個(gè)比例的矩形框即可。

60c4bf2e-50da-11ed-a3b6-dac502259ad0.jpg

如上圖所示,先驗(yàn)框計(jì)算方式

2)正負(fù)樣本的定義

SSD采用的正負(fù)樣本定義器依然是MaxIoUAssigner,但是由于參數(shù)設(shè)置不一樣,故有了不同的解釋。

60d4448a-50da-11ed-a3b6-dac502259ad0.png

正負(fù)樣本定義規(guī)則為[^2]:

(1)正樣本的生成:

anchor和某個(gè)GT的最大iou大于0.5,則認(rèn)為是正樣本。

GT和所有anchor的最大iou值,如果大于0.0,則認(rèn)為該最大iou anchor是正樣本。

(2)負(fù)樣本的生成:

anchor和所有GT的iou都小于0.5,則認(rèn)為是負(fù)樣本。

沒(méi)有忽略樣本,即每個(gè)GT一定會(huì)和某個(gè)anchor匹配上,不可能存在GT沒(méi)有anchor匹配的情況。

3)正負(fù)樣本的采樣

盡管一個(gè)ground truth可以與多個(gè)先驗(yàn)框匹配,但是ground truth相對(duì)于先驗(yàn)框還是太少了,所以負(fù)樣本會(huì)很多。為保證正負(fù)樣本盡量均衡,SSD采用了hard negative mining,先將每一個(gè)物體位置上對(duì)應(yīng) predictions(default boxes)是 negative 的 boxes 進(jìn)行排序,按照先驗(yàn)框的confidence的大小。 選擇最高的幾個(gè),保證最后 negatives、positives 的比例接近3:1。

4、FPN

論文:Feature Pyramid Networks for Object Detection

下圖展示了4種利用特征的形式:(a)圖像金字塔,即將圖像做成不同的scale,然后不同scale的圖像生成對(duì)應(yīng)的不同scale的特征。這種方法的缺點(diǎn)在于增加了時(shí)間成本。有些算法會(huì)在測(cè)試時(shí)候采用圖像金字塔。(b)像SPPnet,F(xiàn)ast RCNN,F(xiàn)aster RCNN是采用這種方式,即僅采用網(wǎng)絡(luò)最后一層的特征。(c)像SSD(Single Shot Detector)采用這種多尺度特征融合的方式,沒(méi)有上采樣過(guò)程,即從網(wǎng)絡(luò)不同層抽取不同尺度的特征做預(yù)測(cè),這種方式不會(huì)增加額外的計(jì)算量。作者認(rèn)為SSD算法中沒(méi)有用到足夠低層的特征(在SSD中,最低層的特征是VGG網(wǎng)絡(luò)的conv4_3),而在作者看來(lái)足夠低層的特征對(duì)于檢測(cè)小物體是很有幫助的。(d)本文作者是采用這種方式,頂層特征通過(guò)上采樣和低層特征做融合,而且每層都是獨(dú)立預(yù)測(cè)的。

60de3d14-50da-11ed-a3b6-dac502259ad0.png

FPN主要解決的是物體檢測(cè)中的多尺度問(wèn)題,通過(guò)簡(jiǎn)單的網(wǎng)絡(luò)連接改變,在基本不增加原有模型計(jì)算量的情況下,大幅度提升了小物體檢測(cè)的性能。通過(guò)高層特征進(jìn)行上采樣和低層特征進(jìn)行自頂向下的連接,而且每一層都會(huì)進(jìn)行預(yù)測(cè)。

FPN算法大致結(jié)構(gòu):一個(gè)自底向上的線(xiàn)路,一個(gè)自頂向下的線(xiàn)路,橫向連接(lateral connection)。下圖中放大的區(qū)域就是橫向連接,這里的卷積核的主要作用是減少卷積核的個(gè)數(shù),也就是減少了feature map的個(gè)數(shù),并不改變feature map的尺寸大小。

612a53e8-50da-11ed-a3b6-dac502259ad0.png

如上圖所示,F(xiàn)PN+RPN結(jié)構(gòu)

在橫向連接中,采用的卷積核進(jìn)行連接(減少特征圖數(shù)量)。將FPN和RPN結(jié)合起來(lái),那RPN的輸入就會(huì)變成多尺度的feature map,那我們就需要在金字塔的每一層后邊都接一個(gè)RPN head(一個(gè)卷積,兩個(gè)卷積),如下圖所示.其中,P6是通過(guò)P5下采樣得到的。

613dab64-50da-11ed-a3b6-dac502259ad0.jpg

1)設(shè)置先驗(yàn)框(default boxes)

在生成anchor的時(shí)候,因?yàn)檩斎胧嵌喑叨忍卣?,就不需要再?duì)每層都使用3種不同尺度的anchor了,所以在每一個(gè)scale層,都定義了不同大小的anchor。對(duì)于P2,P3,P4,P5,P6這些層,定義anchor的大小為、、、、,另外每個(gè)scale層都有3個(gè)長(zhǎng)寬對(duì)比度:1:2,1:1,2:1。所以整個(gè)特征金字塔有15種anchor,如上圖所示。

anchor的正負(fù)樣本定義和Faster R-CNN中的定義相同,即如果某個(gè)anchor和GT有最大的IoU,或者IoU大于0.7,那這個(gè)anchor就是正樣本,如果IoU小于0.3,那就是負(fù)樣本。此外,需要注意的是每層的RPN head都參數(shù)共享的。

但是,生成的anchor(注意:此時(shí)的anchor已經(jīng)經(jīng)歷了一輪篩選)如何確定映射到哪一個(gè)特征圖上呢?這是有公式計(jì)算的,如下圖:

表示映射到哪一層的作為特征層傳入到ROI Pooling層中。是基準(zhǔn)值,設(shè)置為4。和表示RPN給出的Region Proposal的寬和高。此處的224是在ImageNet上訓(xùn)練時(shí)resize的大小。

例如,和都是112,則(值做取整處理),對(duì)應(yīng)P3特征層和Region Proposal傳入到ROI Pooling,得到一個(gè)尺寸為的特征,再經(jīng)過(guò)flatten之后輸入到全連接層。

614f3d70-50da-11ed-a3b6-dac502259ad0.png

2)正負(fù)樣本的定義

如1)所述,正負(fù)樣本的界定和Faster RCNN差不多:如果某個(gè)anchor和一個(gè)給定的ground truth有最高的IOU或者和任意一個(gè)Ground truth的IOU都大于0.7,則是正樣本。如果一個(gè)anchor和任意一個(gè)ground truth的IOU都小于0.3,則為負(fù)樣本。

5、FCOS

論文:FCOS: Fully Convolutional One-Stage Object Detection

本文提出一種基于像素級(jí)預(yù)測(cè)一階全卷積目標(biāo)檢測(cè)(FCOS)來(lái)解決目標(biāo)檢測(cè)問(wèn)題,類(lèi)似于語(yǔ)義分割。目前大多數(shù)先進(jìn)的目標(biāo)檢測(cè)模型,例如RetinaNet、SSD、YOLOv3、Faster R-CNN都依賴(lài)于預(yù)先定義的錨框。相比之下,本文提出的FCOS是anchor free,而且也是proposal free,就是不依賴(lài)預(yù)先定義的錨框或者提議區(qū)域。通過(guò)去除預(yù)先定義的錨框,F(xiàn)COS完全的避免了關(guān)于錨框的復(fù)雜運(yùn)算,例如訓(xùn)練過(guò)程中計(jì)算重疊度,而且節(jié)省了訓(xùn)練過(guò)程中的內(nèi)存占用。更重要的是,本文避免了和錨框有關(guān)且對(duì)最終檢測(cè)結(jié)果非常敏感的所有超參數(shù)。由于后處理只采用非極大值抑制(NMS),所以本文提出的FCOS比以往基于錨框的一階檢測(cè)器具有更加簡(jiǎn)單的優(yōu)點(diǎn)[^10]。

FCOS的骨架和neck部分是標(biāo)準(zhǔn)的resnet+FPN結(jié)構(gòu),和Retinanet完全相同6177cd08-50da-11ed-a3b6-dac502259ad0.png

我們僅僅考慮head部分。除去center-ness分支,則可以看出和retinanet完全相同。

1)錨框(anchor-based)缺點(diǎn)

超參數(shù)設(shè)置難度大:檢測(cè)表現(xiàn)效果對(duì)于錨框的尺寸、長(zhǎng)寬比、數(shù)目非常敏感,因此錨框相關(guān)的超參數(shù)需要仔細(xì)的調(diào)節(jié)。

anchor的設(shè)置缺乏靈活性:錨框的尺寸和長(zhǎng)寬比是固定的,因此,檢測(cè)器在處理形變較大的候選對(duì)象時(shí)比較困難,尤其是對(duì)于小目標(biāo)。預(yù)先定義的錨框還限制了檢測(cè)器的泛化能力,因?yàn)椋鼈冃枰槍?duì)不同對(duì)象大小或長(zhǎng)寬比進(jìn)行設(shè)計(jì)。

容易產(chǎn)生正負(fù)樣本不平衡問(wèn)題:為了提高召回率,需要在圖像上放置密集的錨框。而這些錨框大多數(shù)屬于負(fù)樣本,這樣造成了正負(fù)樣本之間的不均衡。

計(jì)算量大:大量的錨框增加了在計(jì)算交并比時(shí)計(jì)算量和內(nèi)存占用。

2)正負(fù)樣本的定義

作為Anchor-free的方法,F(xiàn)COS直接對(duì)feature map中每個(gè)位置對(duì)應(yīng)原圖的邊框都進(jìn)行回歸,如果位置 (x,y) 落入任何真實(shí)邊框,就認(rèn)為它是一個(gè)正樣本,它的類(lèi)別標(biāo)記為這個(gè)真實(shí)邊框的類(lèi)別[^11]??梢岳斫鉃樗腔谖矬w的一個(gè)key point點(diǎn)進(jìn)行回歸的。在實(shí)際的anchor-free中也會(huì)遇到一些問(wèn)題,為了解決這些問(wèn)題,F(xiàn)COS做了如下工作:

1)為了解決anchor-free的方式在真實(shí)邊框重疊帶來(lái)的模糊性和低召回率(不像anchor-based可以有多重不同尺寸的anchor),F(xiàn)COS采用類(lèi)似FPN中的多級(jí)檢測(cè),就是在不同級(jí)別的特征層檢測(cè)不同尺寸的目標(biāo)。

2)為了解決距離目標(biāo)中心較遠(yuǎn)的位置產(chǎn)生很多低質(zhì)量的預(yù)測(cè)邊框,F(xiàn)COS提出了一種簡(jiǎn)單而有效的策略來(lái)抑制這些低質(zhì)量的預(yù)測(cè)邊界框,而且不引入任何超參數(shù)。具體來(lái)說(shuō),F(xiàn)COS添加單層分支,與分類(lèi)分支并行,以預(yù)測(cè)"Center-ness",可以這這個(gè)理解成為一個(gè)度量值,于中心距離的一個(gè)度量值,與中心點(diǎn)較遠(yuǎn),則度量值較低,與中心點(diǎn)越近,度量值越高,以此來(lái)讓置信度更高的像素產(chǎn)生更高的貢獻(xiàn)。

正負(fù)樣本匹配方式的實(shí)現(xiàn):

1、分配目標(biāo)給哪一層預(yù)測(cè)。 根據(jù)目標(biāo)的尺寸將目標(biāo)分配到不同的特征層上進(jìn)行預(yù)測(cè)。

具體實(shí)現(xiàn):引入了min_size和max_size,具體設(shè)置是0, 64, 128, 256, 512和無(wú)窮大。例如,對(duì)于輸出的第一個(gè)預(yù)測(cè)層而言,其stride=8,負(fù)責(zé)最小尺度的物體,對(duì)于該層上面的任何一個(gè)點(diǎn),如果有GT bbox映射到特征圖上,滿(mǎn)足0 < max(中心點(diǎn)到4條邊的距離) < 64,那么該GT bbox就屬于第1層負(fù)責(zé),其余層也是采用類(lèi)似原則。

總結(jié)來(lái)說(shuō)就是第1層負(fù)責(zé)預(yù)測(cè)尺度在0~ 64范圍內(nèi)的GT,第2層負(fù)責(zé)預(yù)測(cè)尺度在64~128范圍內(nèi)的GT,以此類(lèi)推。通過(guò)該分配策略就可以將不同大小的GT分配到最合適的預(yù)測(cè)層進(jìn)行學(xué)習(xí)。

2、確定正負(fù)樣本區(qū)域。 對(duì)于每一層feature map,設(shè)定一個(gè)以GT中心為圓心,固定半徑的圓,如果像素落在該圓內(nèi),則標(biāo)記為positive樣本,否則為negative。

具體實(shí)現(xiàn):通過(guò)center_sample_radius**(基于當(dāng)前stride參數(shù))**參數(shù),確定在半徑范圍內(nèi)的樣本都屬于正樣本區(qū)域,其余區(qū)域作為負(fù)樣本。默認(rèn)配置center_sample_radius=1.5。例如,第1層的stride=8,那么在該輸出層上,對(duì)于任何一個(gè)GT,基于GT bbox中心點(diǎn)為起點(diǎn),在半徑為個(gè)像素范圍內(nèi)點(diǎn)都屬于正樣本區(qū)域。

3、centerness找到目標(biāo)的中心點(diǎn)。 為了使靠近GT中心的像素能學(xué)到更多的信息,故給予他更高的權(quán)重,而離GT中心越遠(yuǎn)的點(diǎn),貢獻(xiàn)則遞減。

具體實(shí)現(xiàn):使得離目標(biāo)中心越近,輸出值越大,反之越小。Center-ness的定義如下公式:

可見(jiàn)最中心的點(diǎn)的centerness為1,距離越遠(yuǎn)的點(diǎn),centerness的值越小。在推測(cè)的時(shí)候直接將中心度分?jǐn)?shù)centerness乘到分類(lèi)分?jǐn)?shù)上,將偏離很遠(yuǎn)的檢測(cè)框分值進(jìn)行懲罰。

center-ness本質(zhì)就是對(duì)正樣本區(qū)域按照距離GT bbox中心來(lái)設(shè)置權(quán)重,這是作者的做法,還有很多類(lèi)似做法,不過(guò)有些是在Loss上面做文章,例如在ce loss基礎(chǔ)上乘上一個(gè)類(lèi)似預(yù)center-ness的權(quán)重來(lái)實(shí)現(xiàn)同樣效果。

center-ness效果如下:

3)總結(jié):

FCOS采用物體center的匹配方式來(lái)進(jìn)行回歸,在正負(fù)樣本匹配的時(shí)候,采用了top-k的策略進(jìn)行匹配,并且使用centerness來(lái)對(duì)不同距離的匹配樣本進(jìn)行不同程度的懲罰,以達(dá)到資源傾斜于貢獻(xiàn)最佳者的目的。

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    6754

    瀏覽量

    88613
  • 網(wǎng)絡(luò)
    +關(guān)注

    關(guān)注

    14

    文章

    7441

    瀏覽量

    88439

原文標(biāo)題:目標(biāo)檢測(cè)算法是如何生成正負(fù)樣本的(一)

文章出處:【微信號(hào):GiantPandaCV,微信公眾號(hào):GiantPandaCV】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    百度飛槳PP-YOLOE ONNX 在LabVIEW中的部署推理(含源碼)

    PP-YOLOE是百度基于其之前的PP-YOLOv2所改進(jìn)的卓越的單階段Anchor-free模型,超越了多種流行的YOLO模型。如何使用python進(jìn)行該模型的部署,官網(wǎng)已經(jīng)介紹的很清楚了,但是
    的頭像 發(fā)表于 05-26 14:01 ?870次閱讀
    百度飛槳PP-YOLOE ONNX 在LabVIEW中的部署推理(含源碼)

    同種類(lèi)的二極管如何替換

    同種類(lèi)的二極管如何替換 1、檢波二極管的代換  檢波二極管損壞后,若無(wú)
    發(fā)表于 01-13 14:44 ?1w次閱讀

    同種類(lèi)激光在醫(yī)療行業(yè)的應(yīng)用分析

    隨著激光醫(yī) 療的越來(lái)越廣泛,人們對(duì)于各種激光醫(yī)療的種類(lèi)看的眼花繚亂,被一些廣告忽悠的以為一種激光就是萬(wàn)能的,能夠治療各種疾病。事實(shí)卻是各種不同種類(lèi)的激光所對(duì) 應(yīng)的激光醫(yī)療是有所不同的。不同波長(zhǎng),不同形式的激光所擅長(zhǎng)的醫(yī)療方面也是一樣的。下面就針對(duì)一些
    發(fā)表于 02-13 02:40 ?3863次閱讀

    介紹一篇實(shí)時(shí)性好準(zhǔn)確率高的論文:CornerNet-Lite

    CornetNet 在 ECCV 2018 (oral)上橫空出世,引領(lǐng)一波基于關(guān)鍵點(diǎn)的目標(biāo)檢測(cè)狂潮(最近anchor-free盛行),但這類(lèi)算法(很多one-stage)也有缺點(diǎn)。雖然mAP有很大
    的頭像 發(fā)表于 04-23 10:50 ?9575次閱讀
    介紹一篇實(shí)時(shí)性好準(zhǔn)確率高的論文:CornerNet-Lite

    卷積神經(jīng)網(wǎng)絡(luò) 物體檢測(cè) YOLOv2

    Convolution with Anchor Boxer - 加Anchor機(jī)制:YOLO是通過(guò)最后的全連接層直接預(yù)估絕對(duì)坐標(biāo),而FasterRCNN是通過(guò)卷積層預(yù)估相對(duì)坐標(biāo),作者認(rèn)為這樣更容易學(xué)習(xí),因此YOLOv2去掉了全連接層,在最后一層卷積層下采樣后用
    的頭像 發(fā)表于 04-17 15:51 ?3222次閱讀

    YOLO的另一選擇,手機(jī)端97FPS的Anchor-Free目標(biāo)檢測(cè)模型NanoDet

    華為P30上用NCNN移植跑benchmark,每幀僅需10.23毫秒,比yolov4-tiny快3倍,參數(shù)量小6倍,COCO mAP(0.5:0.95)能夠達(dá)到20.6 。而且模型權(quán)...
    的頭像 發(fā)表于 12-08 22:42 ?923次閱讀

    嵌入式AI快訊:移植ncnn到RISC-V TF Object Detection支持TF2

    1. NanoDet:輕量級(jí)(1.8MB)、超快速(移動(dòng)端97fps)目標(biāo)檢測(cè)項(xiàng)目 近日,GitHub 上出現(xiàn)了一個(gè)項(xiàng)目 nanodet,它開(kāi)源了一個(gè)移動(dòng)端實(shí)時(shí)的 Anchor-free 檢測(cè)模型
    的頭像 發(fā)表于 12-23 11:25 ?4899次閱讀
    嵌入式AI快訊:移植ncnn到RISC-V TF Object Detection支持TF2

    同種類(lèi)電容的失效分析資料下載

    電子發(fā)燒友網(wǎng)為你提供不同種類(lèi)電容的失效分析資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)計(jì)、用戶(hù)指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發(fā)表于 04-01 08:57 ?17次下載
    不<b class='flag-5'>同種類(lèi)</b>電容的失效分析資料下載

    基于深度學(xué)習(xí)的發(fā)動(dòng)機(jī)零件檢測(cè)算法

    anchor方案通過(guò)對(duì)比k- meansⅡ和CURE聚類(lèi)算法生成 anchor對(duì)檢測(cè)結(jié)果的影響,提出了基于聚類(lèi)生成 anchor方案的 Faster R-CNN的零件表面缺陷檢測(cè)
    發(fā)表于 06-03 14:51 ?19次下載

    解讀目標(biāo)檢測(cè)中的框位置優(yōu)化

    anchor-based(Faster RCNN)、anchor-free(CornerNet)的方法。 本文主要從目標(biāo)框位置優(yōu)化的角度來(lái)介紹目標(biāo)檢測(cè)領(lǐng)域的相關(guān)工作??蛭恢脙?yōu)化主要可以分為以下幾個(gè)
    的頭像 發(fā)表于 06-21 17:40 ?2471次閱讀
    解讀目標(biāo)檢測(cè)中的框位置優(yōu)化

    CVPR2020 | MAL:聯(lián)合解決目標(biāo)檢測(cè)中的定位與分類(lèi)問(wèn)題,自動(dòng)選擇最佳anchor

    本文是收錄于CVPR2020的工作,其實(shí)文章在去年就掛在了網(wǎng)上,整體思路還算不錯(cuò)。具體來(lái)說(shuō),本文提出Multiple Anchor Learning(MAL),是...
    發(fā)表于 01-26 19:50 ?0次下載
    CVPR2020 | MAL:聯(lián)合解決目標(biāo)檢測(cè)中的定位與分類(lèi)問(wèn)題,自動(dòng)選擇最佳<b class='flag-5'>anchor</b>

    NanoDet Anchor-Free目標(biāo)檢測(cè)模型

    ./oschina_soft/nanodet.zip
    發(fā)表于 06-16 11:24 ?1次下載
    NanoDet <b class='flag-5'>Anchor-Free</b>目標(biāo)檢測(cè)模型

    基于AX650N部署DETR

    )作為特征提取的Backbone,然后使用手工組件Anchor-Base(Faster-RCNN、SSD、YOLOv1-v7)或者Anchor-Free(YOLOv8、YOLOX)加上非最大抑制
    的頭像 發(fā)表于 05-15 14:27 ?770次閱讀
    基于AX650N部署DETR

    無(wú)Anchor的目標(biāo)檢測(cè)算法邊框回歸策略

    導(dǎo)讀 本文主要講述:1.無(wú)Anchor的目標(biāo)檢測(cè)算法:YOLOv1,CenterNet,CornerNet的邊框回歸策略;2.有Anchor的目標(biāo)檢測(cè)算法:SSD,YOLOv2,F(xiàn)as
    的頭像 發(fā)表于 07-17 11:17 ?976次閱讀
    無(wú)<b class='flag-5'>Anchor</b>的目標(biāo)檢測(cè)<b class='flag-5'>算法</b>邊框回歸策略

    基于Yolov5+圖像分割的車(chē)牌實(shí)時(shí)檢測(cè)識(shí)別系統(tǒng)

    YOLO算法從總體上看,是單階段端到端的基于anchor-free的檢測(cè)算法。將圖片輸入網(wǎng)絡(luò)進(jìn)行特征提取與融合后,得到檢測(cè)目標(biāo)的預(yù)測(cè)框位置以及類(lèi)概率。而YOLOv5相較前幾代YOLO算法
    發(fā)表于 07-18 14:32 ?2789次閱讀
    基于Yolov5+圖像分割的車(chē)牌實(shí)時(shí)檢測(cè)識(shí)別系統(tǒng)