摘要:基于候選區(qū)域的目標(biāo)檢測器滑動窗口檢測器自從獲得挑戰(zhàn)賽冠軍后,用進(jìn)行分類成為主流。一種用于目標(biāo)檢測的暴力方法是從左到右從上到下滑動窗口,利用分類識別目標(biāo)。這些錨點(diǎn)是精心挑選的,因此它們是多樣的,且覆蓋具有不同比例和寬高比的現(xiàn)實目標(biāo)。
目標(biāo)檢測是很多計算機(jī)視覺任務(wù)的基礎(chǔ),不論我們需要實現(xiàn)圖像與文字的交互還是需要識別精細(xì)類別,它都提供了可靠的信息。本文對目標(biāo)檢測進(jìn)行了整體回顧,第一部分從RCNN開始介紹基于候選區(qū)域的目標(biāo)檢測器,包括Fast R-CNN、Faster R-CNN 和 FPN等。第二部分則重點(diǎn)討論了包括YOLO、SSD和RetinaNet等在內(nèi)的單次檢測器,它們都是目前更為優(yōu)秀的方法。
基于候選區(qū)域的目標(biāo)檢測器
滑動窗口檢測器
自從 AlexNet 獲得 ILSVRC 2012 挑戰(zhàn)賽冠軍后,用 CNN 進(jìn)行分類成為主流。一種用于目標(biāo)檢測的暴力方法是從左到右、從上到下滑動窗口,利用分類識別目標(biāo)。為了在不同觀察距離處檢測不同的目標(biāo)類型,我們使用不同大小和寬高比的窗口。
滑動窗口(從右到左,從上到下)
我們根據(jù)滑動窗口從圖像中剪切圖像塊。由于很多分類器只取固定大小的圖像,因此這些圖像塊是經(jīng)過變形轉(zhuǎn)換的。但是,這不影響分類準(zhǔn)確率,因為分類器可以處理變形后的圖像。
將圖像變形轉(zhuǎn)換成固定大小的圖像
變形圖像塊被輸入 CNN 分類器中,提取出 4096 個特征。之后,我們使用 SVM 分類器識別類別和該邊界框的另一個線性回歸器。
滑動窗口檢測器的系統(tǒng)工作流程圖。
下面是偽代碼。我們創(chuàng)建很多窗口來檢測不同位置的不同目標(biāo)。要提升性能,一個顯而易見的辦法就是減少窗口數(shù)量。
for window in windows
? ? patch = get_patch(image, window)
? ? results = detector(patch)
選擇性搜索
我們不使用暴力方法,而是用候選區(qū)域方法(region proposal method)創(chuàng)建目標(biāo)檢測的感興趣區(qū)域(ROI)。在選擇性搜索(selective search,SS)中,我們首先將每個像素作為一組。然后,計算每一組的紋理,并將兩個最接近的組結(jié)合起來。但是為了避免單個區(qū)域吞噬其他區(qū)域,我們首先對較小的組進(jìn)行分組。我們繼續(xù)合并區(qū)域,直到所有區(qū)域都結(jié)合在一起。下圖第一行展示了如何使區(qū)域增長,第二行中的藍(lán)色矩形代表合并過程中所有可能的 ROI。
圖源:van de Sande et al. ICCV"11
R-CNN
R-CNN 利用候選區(qū)域方法創(chuàng)建了約 2000 個 ROI。這些區(qū)域被轉(zhuǎn)換為固定大小的圖像,并分別饋送到卷積神經(jīng)網(wǎng)絡(luò)中。該網(wǎng)絡(luò)架構(gòu)后面會跟幾個全連接層,以實現(xiàn)目標(biāo)分類并提煉邊界框。
使用候選區(qū)域、CNN、仿射層來定位目標(biāo)。
以下是 R-CNN 整個系統(tǒng)的流程圖:
通過使用更少且更高質(zhì)量的 ROI,R-CNN 要比滑動窗口方法更快速、更準(zhǔn)確。
ROIs = region_proposal(image)
for ROI in ROIs
? ? patch = get_patch(image, ROI)
? ? results = detector(patch)
邊界框回歸器
候選區(qū)域方法有非常高的計算復(fù)雜度。為了加速這個過程,我們通常會使用計算量較少的候選區(qū)域選擇方法構(gòu)建 ROI,并在后面使用線性回歸器(使用全連接層)進(jìn)一步提煉邊界框。
使用回歸方法將藍(lán)色的原始邊界框提煉為紅色的。
Fast R-CNN
R-CNN 需要非常多的候選區(qū)域以提升準(zhǔn)確度,但其實有很多區(qū)域是彼此重疊的,因此 R-CNN 的訓(xùn)練和推斷速度非常慢。如果我們有 2000 個候選區(qū)域,且每一個都需要獨(dú)立地饋送到 CNN 中,那么對于不同的 ROI,我們需要重復(fù)提取 2000 次特征。
此外,CNN 中的特征圖以一種密集的方式表征空間特征,那么我們能直接使用特征圖代替原圖來檢測目標(biāo)嗎?
直接利用特征圖計算 ROI。
Fast R-CNN 使用特征提取器(CNN)先提取整個圖像的特征,而不是從頭開始對每個圖像塊提取多次。然后,我們可以將創(chuàng)建候選區(qū)域的方法直接應(yīng)用到提取到的特征圖上。例如,F(xiàn)ast R-CNN 選擇了 VGG16 中的卷積層 conv5 來生成 ROI,這些關(guān)注區(qū)域隨后會結(jié)合對應(yīng)的特征圖以裁剪為特征圖塊,并用于目標(biāo)檢測任務(wù)中。我們使用 ROI 池化將特征圖塊轉(zhuǎn)換為固定的大小,并饋送到全連接層進(jìn)行分類和定位。因為 Fast-RCNN 不會重復(fù)提取特征,因此它能顯著地減少處理時間。
將候選區(qū)域直接應(yīng)用于特征圖,并使用 ROI 池化將其轉(zhuǎn)化為固定大小的特征圖塊。
以下是 Fast R-CNN 的流程圖:
在下面的偽代碼中,計算量巨大的特征提取過程從 For 循環(huán)中移出來了,因此速度得到顯著提升。Fast R-CNN 的訓(xùn)練速度是 R-CNN 的 10 倍,推斷速度是后者的 150 倍。
feature_maps = process(image)
ROIs = region_proposal(feature_maps)
for ROI in ROIs
? ? patch = roi_pooling(feature_maps, ROI)
? ? results = detector2(patch)
Fast R-CNN 最重要的一點(diǎn)就是包含特征提取器、分類器和邊界框回歸器在內(nèi)的整個網(wǎng)絡(luò)能通過多任務(wù)損失函數(shù)進(jìn)行端到端的訓(xùn)練,這種多任務(wù)損失即結(jié)合了分類損失和定位損失的方法,大大提升了模型準(zhǔn)確度。
ROI 池化
因為 Fast R-CNN 使用全連接層,所以我們應(yīng)用 ROI 池化將不同大小的 ROI 轉(zhuǎn)換為固定大小。
為簡潔起見,我們先將 8×8 特征圖轉(zhuǎn)換為預(yù)定義的 2×2 大小。
下圖左上角:特征圖。
右上角:將 ROI(藍(lán)色區(qū)域)與特征圖重疊。
左下角:將 ROI 拆分為目標(biāo)維度。例如,對于 2×2 目標(biāo),我們將 ROI 分割為 4 個大小相似或相等的部分。
右下角:找到每個部分的較大值,得到變換后的特征圖。
輸入特征圖(左上),輸出特征圖(右下),ROI (右上,藍(lán)色框)。
按上述步驟得到一個 2×2 的特征圖塊,可以饋送至分類器和邊界框回歸器中。
Faster R-CNN
Fast R-CNN 依賴于外部候選區(qū)域方法,如選擇性搜索。但這些算法在 CPU 上運(yùn)行且速度很慢。在測試中,F(xiàn)ast R-CNN 需要 2.3 秒來進(jìn)行預(yù)測,其中 2 秒用于生成 2000 個 ROI。
feature_maps = process(image)
ROIs = region_proposal(feature_maps) ? ? ? ? # Expensive!
for ROI in ROIs
? ? patch = roi_pooling(feature_maps, ROI)
? ? results = detector2(patch)
Faster R-CNN 采用與 Fast R-CNN 相同的設(shè)計,只是它用內(nèi)部深層網(wǎng)絡(luò)代替了候選區(qū)域方法。新的候選區(qū)域網(wǎng)絡(luò)(RPN)在生成 ROI 時效率更高,并且以每幅圖像 10 毫秒的速度運(yùn)行。
Faster R-CNN 的流程圖與 Fast R-CNN 相同。
外部候選區(qū)域方法代替了內(nèi)部深層網(wǎng)絡(luò)。
候選區(qū)域網(wǎng)絡(luò)
候選區(qū)域網(wǎng)絡(luò)(RPN)將第一個卷積網(wǎng)絡(luò)的輸出特征圖作為輸入。它在特征圖上滑動一個 3×3 的卷積核,以使用卷積網(wǎng)絡(luò)(如下所示的 ZF 網(wǎng)絡(luò))構(gòu)建與類別無關(guān)的候選區(qū)域。其他深度網(wǎng)絡(luò)(如 VGG 或 ResNet)可用于更全面的特征提取,但這需要以速度為代價。ZF 網(wǎng)絡(luò)最后會輸出 256 個值,它們將饋送到兩個獨(dú)立的全連接層,以預(yù)測邊界框和兩個 objectness 分?jǐn)?shù),這兩個 objectness 分?jǐn)?shù)度量了邊界框是否包含目標(biāo)。我們其實可以使用回歸器計算單個 objectness 分?jǐn)?shù),但為簡潔起見,F(xiàn)aster R-CNN 使用只有兩個類別的分類器:即帶有目標(biāo)的類別和不帶有目標(biāo)的類別。
對于特征圖中的每一個位置,RPN 會做 k 次預(yù)測。因此,RPN 將輸出 4×k 個坐標(biāo)和每個位置上 2×k 個得分。下圖展示了 8×8 的特征圖,且有一個 3×3 的卷積核執(zhí)行運(yùn)算,它最后輸出 8×8×3 個 ROI(其中 k=3)。下圖(右)展示了單個位置的 3 個候選區(qū)域。
此處有 3 種猜想,稍后我們將予以完善。由于只需要一個正確猜想,因此我們最初的猜想較好涵蓋不同的形狀和大小。因此,F(xiàn)aster R-CNN 不會創(chuàng)建隨機(jī)邊界框。相反,它會預(yù)測一些與左上角名為「錨點(diǎn)」的參考框相關(guān)的偏移量(如?x、?y)。我們限制這些偏移量的值,因此我們的猜想仍然類似于錨點(diǎn)。
要對每個位置進(jìn)行 k 個預(yù)測,我們需要以每個位置為中心的 k 個錨點(diǎn)。每個預(yù)測與特定錨點(diǎn)相關(guān)聯(lián),但不同位置共享相同形狀的錨點(diǎn)。
這些錨點(diǎn)是精心挑選的,因此它們是多樣的,且覆蓋具有不同比例和寬高比的現(xiàn)實目標(biāo)。這使得我們可以以更好的猜想來指導(dǎo)初始訓(xùn)練,并允許每個預(yù)測專門用于特定的形狀。該策略使早期訓(xùn)練更加穩(wěn)定和簡便。
Faster R-CNN 使用更多的錨點(diǎn)。它部署 9 個錨點(diǎn)框:3 個不同寬高比的 3 個不同大小的錨點(diǎn)框。每一個位置使用 9 個錨點(diǎn),每個位置會生成 2×9 個 objectness 分?jǐn)?shù)和 4×9 個坐標(biāo)。
圖源:https://arxiv.org/pdf/1506.01497.pdf
R-CNN 方法的性能
如下圖所示,F(xiàn)aster R-CNN 的速度要快得多。
基于區(qū)域的全卷積神經(jīng)網(wǎng)絡(luò)(R-FCN)
假設(shè)我們只有一個特征圖用來檢測右眼。那么我們可以使用它定位人臉嗎?應(yīng)該可以。因為右眼應(yīng)該在人臉圖像的左上角,所以我們可以利用這一點(diǎn)定位整個人臉。
如果我們還有其他用來檢測左眼、鼻子或嘴巴的特征圖,那么我們可以將檢測結(jié)果結(jié)合起來,更好地定位人臉。
現(xiàn)在我們回顧一下所有問題。在 Faster R-CNN 中,檢測器使用了多個全連接層進(jìn)行預(yù)測。如果有 2000 個 ROI,那么成本非常高。
feature_maps = process(image)
ROIs = region_proposal(feature_maps)
for ROI in ROIs
? ? patch = roi_pooling(feature_maps, ROI)
? ? class_scores, box = detector(patch) ? ? ? ? # Expensive!
? ? class_probabilities = softmax(class_scores)
R-FCN 通過減少每個 ROI 所需的工作量實現(xiàn)加速。上面基于區(qū)域的特征圖與 ROI 是獨(dú)立的,可以在每個 ROI 之外多帶帶計算。剩下的工作就比較簡單了,因此 R-FCN 的速度比 Faster R-CNN 快。
feature_maps = process(image)
ROIs = region_proposal(feature_maps) ? ? ? ??
score_maps = compute_score_map(feature_maps)
for ROI in ROIs
? ? V = region_roi_pool(score_maps, ROI) ? ??
? ? class_scores, box = average(V) ? ? ? ? ? ? ? ? ? # Much simpler!
? ? class_probabilities = softmax(class_scores)
現(xiàn)在我們來看一下 5 × 5 的特征圖 M,內(nèi)部包含一個藍(lán)色方塊。我們將方塊平均分成 3 × 3 個區(qū)域?,F(xiàn)在,我們在 M 中創(chuàng)建了一個新的特征圖,來檢測方塊的左上角(TL)。這個新的特征圖如下圖(右)所示。只有黃色的網(wǎng)格單元 [2, 2] 處于激活狀態(tài)。
在左側(cè)創(chuàng)建一個新的特征圖,用于檢測目標(biāo)的左上角。
我們將方塊分成 9 個部分,由此創(chuàng)建了 9 個特征圖,每個用來檢測對應(yīng)的目標(biāo)區(qū)域。這些特征圖叫作位置敏感得分圖(position-sensitive score map),因為每個圖檢測目標(biāo)的子區(qū)域(計算其得分)。
生成 9 個得分圖
下圖中紅色虛線矩形是建議的 ROI。我們將其分割成 3 × 3 個區(qū)域,并詢問每個區(qū)域包含目標(biāo)對應(yīng)部分的概率是多少。例如,左上角 ROI 區(qū)域包含左眼的概率。我們將結(jié)果存儲成 3 × 3 vote 數(shù)組,如下圖(右)所示。例如,vote_array[0][0] 包含左上角區(qū)域是否包含目標(biāo)對應(yīng)部分的得分。
將 ROI 應(yīng)用到特征圖上,輸出一個 3 x 3 數(shù)組。
將得分圖和 ROI 映射到 vote 數(shù)組的過程叫作位置敏感 ROI 池化(position-sensitive ROI-pool)。該過程與前面討論過的 ROI 池化非常接近。
將 ROI 的一部分疊加到對應(yīng)的得分圖上,計算 V[i][j]。
在計算出位置敏感 ROI 池化的所有值后,類別得分是其所有元素得分的平均值。
ROI 池化
假如我們有 C 個類別要檢測。我們將其擴(kuò)展為 C + 1 個類別,這樣就為背景(非目標(biāo))增加了一個新的類別。每個類別有 3 × 3 個得分圖,因此一共有 (C+1) × 3 × 3 個得分圖。使用每個類別的得分圖可以預(yù)測出該類別的類別得分。然后我們對這些得分應(yīng)用 softmax 函數(shù),計算出每個類別的概率。
以下是數(shù)據(jù)流圖,在我們的案例中,k=3。
總結(jié)
我們首先了解了基礎(chǔ)的滑動窗口算法:
for window in windows
? ? patch = get_patch(image, window)
? ? results = detector(patch)
然后嘗試減少窗口數(shù)量,盡可能減少 for 循環(huán)中的工作量。
ROIs = region_proposal(image)
for ROI in ROIs
? ? patch = get_patch(image, ROI)
? ? results = detector(patch)
單次目標(biāo)檢測器
第二部分,我們將對單次目標(biāo)檢測器(包括 SSD、YOLO、YOLOv2、YOLOv3)進(jìn)行綜述。我們將分析 FPN 以理解多尺度特征圖如何提高準(zhǔn)確率,特別是小目標(biāo)的檢測,其在單次檢測器中的檢測效果通常很差。然后我們將分析 Focal loss 和 RetinaNet,看看它們是如何解決訓(xùn)練過程中的類別不平衡問題的。
單次檢測器
Faster R-CNN 中,在分類器之后有一個專用的候選區(qū)域網(wǎng)絡(luò)。
Faster R-CNN 工作流
基于區(qū)域的檢測器是很準(zhǔn)確的,但需要付出代價。Faster R-CNN 在 PASCAL VOC 2007 測試集上每秒處理 7 幀的圖像(7 FPS)。和 R-FCN 類似,研究者通過減少每個 ROI 的工作量來精簡流程。
feature_maps = process(image)
ROIs = region_proposal(feature_maps)
for ROI in ROIs
? ? patch = roi_align(feature_maps, ROI)
? ? results = detector2(patch) ? ?# Reduce the amount of work here!
作為替代,我們是否需要一個分離的候選區(qū)域步驟?我們可以直接在一個步驟內(nèi)得到邊界框和類別嗎?
feature_maps = process(image)
results = detector3(feature_maps) # No more separate step for ROIs
讓我們再看一下滑動窗口檢測器。我們可以通過在特征圖上滑動窗口來檢測目標(biāo)。對于不同的目標(biāo)類型,我們使用不同的窗口類型。以前的滑動窗口方法的致命錯誤在于使用窗口作為最終的邊界框,這就需要非常多的形狀來覆蓋大部分目標(biāo)。更有效的方法是將窗口當(dāng)做初始猜想,這樣我們就得到了從當(dāng)前滑動窗口同時預(yù)測類別和邊界框的檢測器。
基于滑動窗口進(jìn)行預(yù)測
這個概念和 Faster R-CNN 中的錨點(diǎn)很相似。然而,單次檢測器會同時預(yù)測邊界框和類別。例如,我們有一個 8 × 8 特征圖,并在每個位置做出 k 個預(yù)測,即總共有 8 × 8 × k 個預(yù)測結(jié)果。
64 個位置
在每個位置,我們有 k 個錨點(diǎn)(錨點(diǎn)是固定的初始邊界框猜想),一個錨點(diǎn)對應(yīng)一個特定位置。我們使用相同的 錨點(diǎn)形狀仔細(xì)地選擇錨點(diǎn)和每個位置。
使用 4 個錨點(diǎn)在每個位置做出 4 個預(yù)測。
以下是 4 個錨點(diǎn)(綠色)和 4 個對應(yīng)預(yù)測(藍(lán)色),每個預(yù)測對應(yīng)一個特定錨點(diǎn)。
4 個預(yù)測,每個預(yù)測對應(yīng)一個錨點(diǎn)。
在 Faster R-CNN 中,我們使用卷積核來做 5 個參數(shù)的預(yù)測:4 個參數(shù)對應(yīng)某個錨點(diǎn)的預(yù)測邊框,1 個參數(shù)對應(yīng) objectness 置信度得分。因此 3× 3× D × 5 卷積核將特征圖從 8 × 8 × D 轉(zhuǎn)換為 8 × 8 × 5。
使用 3x3 卷積核計算預(yù)測。
在單次檢測器中,卷積核還預(yù)測 C 個類別概率以執(zhí)行分類(每個概率對應(yīng)一個類別)。因此我們應(yīng)用一個 3× 3× D × 25 卷積核將特征圖從 8 × 8 × D 轉(zhuǎn)換為 8 × 8 × 25(C=20)。
每個位置做出 k 個預(yù)測,每個預(yù)測有 25 個參數(shù)。
單次檢測器通常需要在準(zhǔn)確率和實時處理速度之間進(jìn)行權(quán)衡。它們在檢測太近距離或太小的目標(biāo)時容易出現(xiàn)問題。在下圖中,左下角有 9 個圣誕老人,但某個單次檢測器只檢測出了 5 個。
SSD
SSD 是使用 VGG19 網(wǎng)絡(luò)作為特征提取器(和 Faster R-CNN 中使用的 CNN 一樣)的單次檢測器。我們在該網(wǎng)絡(luò)之后添加自定義卷積層(藍(lán)色),并使用卷積核(綠色)執(zhí)行預(yù)測。
同時對類別和位置執(zhí)行單次預(yù)測。
然而,卷積層降低了空間維度和分辨率。因此上述模型僅可以檢測較大的目標(biāo)。為了解決該問題,我們從多個特征圖上執(zhí)行獨(dú)立的目標(biāo)檢測。
使用多尺度特征圖用于檢測。
以下是特征圖圖示。
圖源:https://arxiv.org/pdf/1512.02325.pdf
SSD 使用卷積網(wǎng)絡(luò)中較深的層來檢測目標(biāo)。如果我們按接近真實的比例重繪上圖,我們會發(fā)現(xiàn)圖像的空間分辨率已經(jīng)被顯著降低,且可能已無法定位在低分辨率中難以檢測的小目標(biāo)。如果出現(xiàn)了這樣的問題,我們需要增加輸入圖像的分辨率。
YOLO
YOLO 是另一種單次目標(biāo)檢測器。
YOLO 在卷積層之后使用了 DarkNet 來做特征檢測。
然而,它并沒有使用多尺度特征圖來做獨(dú)立的檢測。相反,它將特征圖部分平滑化,并將其和另一個較低分辨率的特征圖拼接。例如,YOLO 將一個 28 × 28 × 512 的層重塑為 14 × 14 × 2048,然后將它和 14 × 14 ×1024 的特征圖拼接。之后,YOLO 在新的 14 × 14 × 3072 層上應(yīng)用卷積核進(jìn)行預(yù)測。
YOLO(v2)做出了很多實現(xiàn)上的改進(jìn),將 mAP 值從第一次發(fā)布時的 63.4 提高到了 78.6。YOLO9000 可以檢測 9000 種不同類別的目標(biāo)。
圖源:https://arxiv.org/pdf/1612.08242.pdf
以下是 YOLO 論文中不同檢測器的 mAP 和 FPS 對比。YOLOv2 可以處理不同分辨率的輸入圖像。低分辨率的圖像可以得到更高的 FPS,但 mAP 值更低。
圖源:https://arxiv.org/pdf/1612.08242.pdf
YOLOv3
YOLOv3 使用了更加復(fù)雜的骨干網(wǎng)絡(luò)來提取特征。DarkNet-53 主要由 3 × 3 和 1× 1 的卷積核以及類似 ResNet 中的跳過連接構(gòu)成。相比 ResNet-152,DarkNet 有更低的 BFLOP(十億次浮點(diǎn)數(shù)運(yùn)算),但能以 2 倍的速度得到相同的分類準(zhǔn)確率。
圖源:https://pjreddie.com/media/files/papers/YOLOv3.pdf
YOLOv3 還添加了特征金字塔,以更好地檢測小目標(biāo)。以下是不同檢測器的準(zhǔn)確率和速度的權(quán)衡。
圖源:https://pjreddie.com/media/files/papers/YOLOv3.pdf
特征金字塔網(wǎng)絡(luò)(FPN)
檢測不同尺度的目標(biāo)很有挑戰(zhàn)性,尤其是小目標(biāo)的檢測。特征金字塔網(wǎng)絡(luò)(FPN)是一種旨在提高準(zhǔn)確率和速度的特征提取器。它取代了檢測器(如 Faster R-CNN)中的特征提取器,并生成更高質(zhì)量的特征圖金字塔。
數(shù)據(jù)流
FPN(圖源:https://arxiv.org/pdf/1612.03144.pdf)
FPN 由自下而上和自上而下路徑組成。其中自下而上的路徑是用于特征提取的常用卷積網(wǎng)絡(luò)??臻g分辨率自下而上地下降。當(dāng)檢測到更高層的結(jié)構(gòu),每層的語義值增加。
FPN 中的特征提?。ň庉嬜栽撐模?/p>
SSD 通過多個特征圖完成檢測。但是,最底層不會被選擇執(zhí)行目標(biāo)檢測。它們的分辨率高但是語義值不夠,導(dǎo)致速度顯著下降而不能被使用。SSD 只使用較上層執(zhí)行目標(biāo)檢測,因此對于小的物體的檢測性能較差。
圖像修改自論文 https://arxiv.org/pdf/1612.03144.pdf
FPN 提供了一條自上而下的路徑,從語義豐富的層構(gòu)建高分辨率的層。
自上而下重建空間分辨率(編輯自原論文)
雖然該重建層的語義較強(qiáng),但在經(jīng)過所有的上采樣和下采樣之后,目標(biāo)的位置不較精確。在重建層和相應(yīng)的特征圖之間添加橫向連接可以使位置偵測更加準(zhǔn)確。
增加跳過連接(引自原論文)
下圖詳細(xì)說明了自下而上和自上而下的路徑。其中 P2、P3、P4 和 P5 是用于目標(biāo)檢測的特征圖金字塔。
FPN 結(jié)合 RPN
FPN 不單純是目標(biāo)檢測器,還是一個目標(biāo)檢測器和協(xié)同工作的特征檢測器。分別傳遞到各個特征圖(P2 到 P5)來完成目標(biāo)檢測。
FPN 結(jié)合 Fast R-CNN 或 Faster R-CNN
在 FPN 中,我們生成了一個特征圖的金字塔。用 RPN(詳見上文)來生成 ROI。基于 ROI 的大小,我們選擇最合適尺寸的特征圖層來提取特征塊。
困難案例
對于如 SSD 和 YOLO 的大多數(shù)檢測算法來說,我們做了比實際的目標(biāo)數(shù)量要多得多的預(yù)測。所以錯誤的預(yù)測比正確的預(yù)測要更多。這產(chǎn)生了一個對訓(xùn)練不利的類別不平衡。訓(xùn)練更多的是在學(xué)習(xí)背景,而不是檢測目標(biāo)。但是,我們需要負(fù)采樣來學(xué)習(xí)什么是較差的預(yù)測。所以,我們計算置信度損失來把訓(xùn)練樣本分類。選取較好的那些來確保負(fù)樣本和正樣本的比例最多不超過 3:1。這使訓(xùn)練更加快速和穩(wěn)定。
推斷過程中的非極大值抑制
檢測器對于同一個目標(biāo)會做出重復(fù)的檢測。我們利用非極大值抑制來移除置信度低的重復(fù)檢測。將預(yù)測按照置信度從高到低排列。如果任何預(yù)測和當(dāng)前預(yù)測的類別相同并且兩者 IoU 大于 0.5,我們就把它從這個序列中剔除。
Focal Loss(RetinaNet)
類別不平衡會損害性能。SSD 在訓(xùn)練期間重新采樣目標(biāo)類和背景類的比率,這樣它就不會被圖像背景淹沒。Focal loss(FL)采用另一種方法來減少訓(xùn)練良好的類的損失。因此,只要該模型能夠很好地檢測背景,就可以減少其損失并重新增強(qiáng)對目標(biāo)類的訓(xùn)練。我們從交叉熵?fù)p失 CE 開始,并添加一個權(quán)重來降低高可信度類的 CE。
例如,令 γ = 0.5, 經(jīng)良好分類的樣本的 Focal loss 趨近于 0。
這是基于 FPN、ResNet 以及利用 Focal loss 構(gòu)建的 RetianNet。
RetinaNet
原文鏈接:https://medium.com/@jonathan_hui/what-do-we-learn-from-region-based-object-detectors-faster-r-cnn-r-fcn-fpn-7e354377a7c9
https://medium.com/@jonathan_hui/what-do-we-learn-from-single-shot-object-detectors-ssd-yolo-fpn-focal-loss-3888677c5f4d
歡迎加入本站公開興趣群商業(yè)智能與數(shù)據(jù)分析群
興趣范圍包括各種讓數(shù)據(jù)產(chǎn)生價值的辦法,實際應(yīng)用案例分享與討論,分析工具,ETL工具,數(shù)據(jù)倉庫,數(shù)據(jù)挖掘工具,報表系統(tǒng)等全方位知識
QQ群:81035754
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/4766.html
摘要:我盡可能對深度學(xué)習(xí)目標(biāo)檢測器的組成做一個概述,包括使用預(yù)訓(xùn)練的目標(biāo)檢測器執(zhí)行任務(wù)的源代碼。當(dāng)我們理解了什么是目標(biāo)檢測時,隨后會概述一個深度學(xué)習(xí)目標(biāo)檢測器的核心模塊。方法傳統(tǒng)的目標(biāo)檢測技術(shù)路線第一個方法不是純端到端的深度學(xué)習(xí)目標(biāo)檢測器。 目標(biāo)檢測技術(shù)作為計算機(jī)視覺的重要方向,被廣泛應(yīng)用于自動駕駛汽車、智能攝像頭、人臉識別及大量有價值的應(yīng)用上。這些系統(tǒng)除了可以對圖像中的每個目標(biāo)進(jìn)行識別、分類以外...
摘要:表示類別為,坐標(biāo)是的預(yù)測熱點(diǎn)圖,表示相應(yīng)位置的,論文提出變體表示檢測目標(biāo)的損失函數(shù)由于下采樣,模型生成的熱點(diǎn)圖相比輸入圖像分辨率低。模型訓(xùn)練損失函數(shù)使同一目標(biāo)的頂點(diǎn)進(jìn)行分組,損失函數(shù)用于分離不同目標(biāo)的頂點(diǎn)。 本文由極市博客原創(chuàng),作者陳泰紅。 1.目標(biāo)檢測算法概述 CornerNet(https://arxiv.org/abs/1808.01244)是密歇根大學(xué)Hei Law等人在發(fā)表E...
摘要:但是他們對于實時監(jiān)測來說,還是有點(diǎn)慢。上圖是我們用于物體檢測的訓(xùn)練數(shù)據(jù)集的示例。分類器在每個步驟中應(yīng)用于檢測對象。 卷積神經(jīng)網(wǎng)絡(luò)(CNN)在物體識別中由于其他的神經(jīng)網(wǎng)絡(luò)架構(gòu),所以研究人員很快對 CNN 進(jìn)行了改進(jìn)以使得它們能更好的對物體進(jìn)行定位和檢測,這種神經(jīng)網(wǎng)絡(luò)架構(gòu)就被稱為 R-CNN(Region-CNN)。R-CNN 的輸出是具有矩形框的圖像,以下是 R-CNN 如何工作的步驟:使用稱...
摘要:表示類別為,坐標(biāo)是的預(yù)測熱點(diǎn)圖,表示相應(yīng)位置的,論文提出變體表示檢測目標(biāo)的損失函數(shù)由于下采樣,模型生成的熱點(diǎn)圖相比輸入圖像分辨率低。模型訓(xùn)練損失函數(shù)使同一目標(biāo)的頂點(diǎn)進(jìn)行分組,損失函數(shù)用于分離不同目標(biāo)的頂點(diǎn)。 好久沒有將較好的干貨分享給大家,那今天我給大家?guī)鞥CCV-2018年最優(yōu)paper之一,也是目標(biāo)檢測里的佼佼者,值得我們?nèi)ド钔?,去學(xué)習(xí)!目標(biāo)檢測算法概述CornerNet可以說是今年E...
閱讀 1941·2021-11-24 09:39
閱讀 3525·2021-09-28 09:36
閱讀 3295·2021-09-06 15:10
閱讀 3452·2019-08-30 15:44
閱讀 1161·2019-08-30 15:43
閱讀 1806·2019-08-30 14:20
閱讀 2721·2019-08-30 12:51
閱讀 2042·2019-08-30 11:04