【目标检测】1、基础内容
文章目錄
- 1. 目標檢測是什么
- 2. 目標檢測基礎
- 2.1 候選框提取
- 2.2 特征提取
- 2.3 分類器
- 3. 目標檢測性能評估參數
- 4. NMS(非極大值抑制)
- 4. 數據集
- 新方法:RFCN, Mask-RCNN等
- 5. 注意力機制
- 6. 全卷積網絡(FCN)
1. 目標檢測是什么
目標檢測是給定一個圖像,找到其中的目標及其位置,并對目標進行分類,目標檢測通常是在一組固定的類上進行訓練的,所有模型只能定位和分類已訓練的那些類,而且目標的位置通常都是邊界矩陣的形式(包含左上角位置和寬+高),所以目標檢測需要設計圖像中的目標的位置信息和對目標進行分類。
目標檢測任務關注的是圖片中特定目標物體的類別和位置,一個檢測任務包含兩個子任務,其一是輸出該目標的類別信息,屬于分類任務,其二是輸出目標的具體位置信息,屬于定位任務。
與計算機視覺領域里大部分的算法一樣,目標檢測也經歷了從傳統的人工設計特征和淺層分類器的思路,到大數據時代使用深度神經網絡進行特征學習的思路這一過程。
2. 目標檢測基礎
無論使用傳統方法還是深度學習的方法來完成目標檢測任務,一定要遵循三個步驟:檢測窗口的選擇+圖像特征提取+分類器設計
2.1 候選框提取
候選區域(Region proposal),就是預先找出圖中目標可能出現的位置,通過利用圖像中的紋理、邊緣、顏色等信息,保證在選取較少窗口的情況下保持較高的召回率。
Region Proposal方法比傳統的滑動窗口方法獲取的質量要更高。比較常用的Region Proposal方法有:SelectiveSearch(SS,選擇性搜索)、Edge Boxes(EB)
邊框回歸(Bounding Box Regression):是對Region Proposal進行糾正的線性回歸算法,目的是為了讓Region Proposal提取到的窗口與目標窗口(Ground Truth)更加吻合。
候選框如何產生: 其實物體候選框獲取當前主要使用圖像分割與區域生長技術。區域生長(合并)主要由于檢測圖像中存在的物體具有局部區域相似性(顏色、紋理等)。目標識別與圖像分割技術的發展進一步推動有效提取圖像中信息。滑窗法作為一種經典的物體檢測方法,不同大小的窗口在圖像上進行滑動時候,進行卷積運算后的結果與已經訓練好的分類器判別存在物體的概率。選擇性搜索(Selective Search)是主要運用圖像分割技術來進行物體檢測。
滑窗法:
首先對輸入圖像進行不同窗口大小的滑窗進行從左往右、從上到下的滑動。每次滑動時候對當前窗口執行分類器(分類器是事先訓練好的)。如果當前窗口得到較高的分類概率,則認為檢測到了物體。對每個不同窗口大小的滑窗都進行檢測后,會得到不同窗口檢測到的物體標記,這些窗口大小會存在重復較高的部分,最后采用非極大值抑制(Non-Maximum Suppression, NMS)的方法進行篩選。最終,經過NMS篩選后獲得檢測到的物體。
滑窗法簡單易于理解,但是不同窗口大小進行圖像全局搜索導致效率低下,而且設計窗口大小時候還需要考慮物體的長寬比。所以,對于實時性要求較高的分類器,不推薦使用滑窗法。
選擇搜索:
滑窗法類似于窮舉進行圖像子區域搜索,但是一般情況下圖像中大部分子區域是沒有物體的,這樣搜索的效率就很低。
選擇搜索算法觀點:圖像中物體可能存在的區域應該是有某些相似性或者連續性的,因此選擇搜索采用子區域合并的方法進行提取邊界框bounding box。
首先,對輸入圖像進行分割并產生許多子區域,其次,根據這些子區域之間的相似性(顏色、紋理、大小等)進行區域合并,由小變大,不斷迭代并合并,每次迭代過程中對這些合并的子區域做外切矩形,這些子區域的外切矩形就是通常說的候選框。
自下而上,也就是從像素級開始檢測,慢慢融合到比較大的位置。scale1 就是最小尺度上分割成很多小的區域(super pixel,超像素),把特征距離近的(如顏色比較像)的都融合到一起,產生比較大的區域。scale2 就是中間尺度上的分割和融合,能得到更大的區域,scale3同理。最后就產生了目標框。
選擇性搜索的優點:
- 計算效率高于滑窗法
- 由于采用子區域合并策略,故可以包含各自大小的疑似物體框
- 合并區域相似的指標多樣性,提高了檢測物體的概率
2.2 特征提取
在選定候選區域之后,我們需要提取圖像的特征來進行表達,傳統的有監督的方法和以CNN為代表的無監督特征學習方法都可以派上用場。常見的傳統特征有Haar特征、LBP、HOG等。這些特征都是研究人員通過長時間的學術研究和實際項目驗證得來的,雖然在比較簡單的任務中可以取得很好的結果,但是設計成本很高,而且面對復雜任務時魯棒性遠遠不夠。
2.3 分類器
常常被使用的分類器包含Adaboost,SVM,Decision Tree等。在很多時候單一的分類器可能并不能滿足我們的要求,如今使用深度學習來完成各項任務,尤其是參加各類比賽的時候,一定會使用不同的模型不同的輸入進行Ensemble。比如我們常見的使用不同的裁剪子區域進行預測,或者使用不同的基準模型進行預測,最后取平均概率等。
3. 目標檢測性能評估參數
-
Ground Truth
對于任何算法,度量總是需要與數據的真實值(ground truth)進行比較,對于物體檢測問題,GT 包括圖像,圖像的目標類別及 圖像中每個目標的邊界框。對于下圖,3組數字定義的GT表示了其真實值,包括起始點(左上角)的坐標(X,Y)、寬度、高度、類別。
-
IoU(交并比)
實際中如何判定預測框的正確性呢,首先需要知道每個檢測的正確性,測定一個給定的邊框的正確性的度量標準是IoU(交并比),也稱檢測評價函數。
對于每個不同的類,預測框和真實框重疊的區域就是交集區域,預測框和真實框的總面積區域就是并集框,對于“馬”這個類的交集如陰影部分,并集是重合面積和非重合面積之和。
我們使用IoU來確定檢測是否正確需要一個閾值,最常用的是0.5,即如果IoU>0.5,則認為是真實的檢測(true detection),否則認為是錯誤的檢測(false detection)。 -
Precision(準確率/查準率P)和Recall(召回率/查全率R)
一般來說,P和R是不可兼得的,召回率越高,準確率越低。
TP:實際為正,且被預測為正的實例
FP:實際為負,但被預測為正的實例
TN:實際為負,且被預測為負的實例
FN:實際為正,但被預測為負的實例
Precision=TPTP+FPPrecision=\frac{TP}{TP+FP}Precision=TP+FPTP?
Recall=TPTP+FNRecall=\frac{TP}{TP+FN}Recall=TP+FNTP?
-
PR曲線
P-R曲線如下:
一般來說我們希望這兩個P和R都是越高越好,然而沒有這么好的事情,兩者是矛盾體,要根據不同的情況來選取好的平衡點才可以。根據學習器的預測結果對樣本進行排序,排在前面的就被認為是最可能為正例的樣本,然后按此順序依次吧樣本喂給學習器,我們把每次的準確率和召回率描出來就會得到一個P-R曲線(稱為P-R圖)。如何評價P-R曲線:
1)如果一個曲線被另一個曲線包圍,那么被包圍的曲線更差些
2)兩者有重疊,那就是判斷曲線下面積的大小,但不太容易估算
3)找平衡點,就是找到準確率=召回率的點
4)F1度量,F1=2PR/(P+R)F1=2PR/(P+R)F1=2PR/(P+R) -
AP(Average Precision)平均精度
AP通常用于計算平均的檢測精度,用于衡量檢測器在每個類別上的性能好壞。
-
mAP(mean Average Precision)平均精度的均值
mAP更多用于評價多目標的檢測器性能,衡量檢測器在所有類別上的性能好壞,即得到每個類別的AP值后再取所有類別的平均值。假設N個樣本中有M個positive的正例,那么我們就會得到M個recall值(1/M,2/M,3/M…M/M),對于每個recall值r,我們可以計算出對應r’>r的最大的precision值,然后對這M個precision 值取平均即得到最后的AP值。計算過程如下表所示:
計算過程:
1)計算所有測試樣本的confidence score,每一類的confidence score保存到一個文件中,假設有20個測試樣本,每個的id和score及真值GT如下:
對score進行由大到小的排序:
計算P和R(假設計算Top-5的結果):
P=TPTP+FP=22+3=25P=\frac{TP}{TP+FP}=\frac{2}{2+3}=\frac{2}{5}P=TP+FPTP?=2+32?=52?
R=TPTP+FN=22+4=13R=\frac{TP}{TP+FN}=\frac{2}{2+4}=\frac{1}{3}R=TP+FNTP?=2+42?=31?
實際多類別分類任務中,通常計算從top-1到topN(所有樣本數)對于的P和R,顯然隨著選定的樣本越來越多,recall會越來越高,而precision會越來越低,recall為橫軸,precision為縱軸就可以得到總體為下降趨勢的P-R曲線。
mAP(mean Average Precision)表示平均精度均值,該參數是PASCAL VOC 比賽中所明確的衡量標準,其含義是輸出的結果是一個ranked list, 其中元素包含了類別、框的信息,以及置信度(confidence),置信度用來進行排序,比方說我給出一個框,說我有99%的信心這里有一個貓,結果這里沒有,相比我給出一個框,說我有10%的信心這里有一個貓,結果也沒有,這兩個框的懲罰(penalty)和獎勵(reward)不能一樣的。因為99%信心說有,結果沒有,那就說明這個系統很有問題。反之,假如我給出一個框,99%的信心說有一個貓,然后真有貓,相比10%信心說有貓,結果也是有貓,這兩個框也不一樣。也就是越“靠譜”,reward越大。所以我們根據confidence進行排序之后,就應該給排名靠前的結果,也就是confidence比較大的一些更大的權重。
首先,計算模型得到的每個檢測框的IoU,用計算得到的IoU與設定的閾值比較,就可以計算出每個圖像中每個類的正確檢測次數A,對于每個圖像,我們都有GT的數據,即都知道每個圖像的真實目標信息,因此也知道了該圖像中給定類別的實際目標的數量B,我們也計算了正確預測的數量A,因此可以得到該類模型的精度(A/B):
PrecisionC=N(TruePositives)CN(TotalObjects)CPrecision_C=\frac{N(True Positives)_C}{N(Total Objects)_C} PrecisionC?=N(TotalObjects)C?N(TruePositives)C??
即給定一張圖像的類別C的Precision=正確預測的數量/這一類的總目標量
假如現在有一個給定的類,驗證集中有100個圖像,并且我們知道每個圖像都有其中的所有類(基于ground truth)。所以我們可以得到100個精度值,計算這100個精度值的平均值,得到的就是該類的平均精度。
AveragePrecisionC=∑PrecisionCN(TotalImages)CAverage Precision_C=\frac{∑Precision_C}{N(Total Images)_C }AveragePrecisionC?=N(TotalImages)C?∑PrecisionC??
即一個C類的平均精度=在驗證集上所有的圖像對于類C的精度值的和/有類C這個目標的所有圖像的數量。
假如整個集合有20個類,對于每個類別都先計算IoU,之后計算精度,最后計算平均精度,所以會獲得20個不同的平均精度值,用這些值來判斷模型的性能。但多個精度值難以評判,故對所有類的平均精度值取平均來衡量其性能,即mPA。
MeanAveragePrecisionC=∑AveragePrecisionCN(classes)Mean Average Precision_C=\frac{∑Average Precision_C}{N(classes) }MeanAveragePrecisionC?=N(classes)∑AveragePrecisionC??
mean AP:按照每個類進行計算,假如計算南瓜這個類,有100個紅色的預測框都和真實框GT有重疊,那么計算IoU來計算是true還是false,平均來看折線圖準確率的平均值,就是南瓜類的平均,最后將20個類都平均一下,就是mAP。
4. NMS(非極大值抑制)
其目的是為了清除多余的框,找到最佳的物體檢測的位置。
紅色框是可能的檢測結果,如何從紅色的框中選擇最好的最接近的框,就使用NMS來確定最準確的位置。
每個紅色的框都會有一個得分,保留得分最大的框。
NMS過程:
一般都會使用NMS對生成的大量候選框進行后處理,去除冗余的候選框,得到最佳檢測,上圖中,每個b-box都會有4個坐標值和1個前景/背景得分,如果是100類的目標檢測模型,輸出向量為5+100=105。
NMS算法過程:
- 根據候選框的類別分類概率做排序,假設有4個b-box,其置信度A>B>C>D
- 先標記最大概率框A是算法要保留的b-box
- 從A 開始,分別計算與其他框的交并比,和閾值t做比較,如果大于閾值,則舍棄,假設D被舍棄
- 從BC中,選擇概率最大的B標記為保留,然后判讀C和B的重疊度,如果超過,則舍棄
- 一直重復進行,標記完所有要保留的框
NMS算法過程:
NMS是保證每個目標只保留一個預測的b-box,一般的NMS,對于某個類別c,將所有預測的b-box根據得分做一個降序排列,從最大的框開始計算該框與其他框的IoU,若IoU大于閾值t,則舍棄,說明重合度太高,重復進行最終保留一個。
缺點:
- NMS算法中的最大問題就是它將相鄰檢測框的分數均強制歸零(既將重疊部分大于重疊閾值Nt的檢測框移除)。在這種情況下,如果一個真實物體在重疊區域出現,則將導致對該物體的檢測失敗并降低了算法的平均檢測率(average precision, AP)。
- NMS的閾值也不太容易確定,設置過小會出現誤刪,設置過高又容易增大誤檢。
- NMS一般只能使用CPU計算,無法使用GPU計算。
NMS保留-得分最高的預測框,并將與當前框重疊大于閾值的候選框看做冗余,
hard mining:在一個mini-batch里邊,容易讓分類器混淆的實例,就會標記成hard mining(難以區分的),用到下一輪訓練中。
4. 數據集
PASCAL VOC 和COCO
1、PASCAL VOC
圖像識別和分類提供了一整套標準化的優秀的數據集,從2005年到2012年每年都會舉行一場圖像識別挑戰賽。
給定包含20類的自然圖像,從中識別出特定物體
- person
- bird, cat, cow, dog, horse, sheep
- aeroplane, bicycle, boat, bus, car, motorbike, train
- bottle, chair, dining table, potted plant, sofa, tv/monitor
可實現的任務:
- Classification
- Detection: 將圖片中所有的目標用bounding box(bbox)框出來
- Segmentation: 將圖片中所有的目標分割出來
- Person Layout
標簽:
- 所有的數據都有檢測需要的label,但只有部分數據有分割需要的label
- VOC 2007中包含9963張標注的圖片,train/val/test三部分組成,共表彰24640個物體
- VOC 2007的test數據label已經擁抱,之后的沒有公布(只有圖片,沒有label)
- 對于檢測任務,VOC 2012的train+val/test包含08-11年所有對應的圖片,train/val共有11540張圖片共27450個物體
- 對于分割任務,VOC 2012的train+val包含07-11年所欲對應的圖像,test只包含08-11,train+val有2913張圖片共6929個物體
2、COCO
數據集是微軟發布的,除了圖片以外還提供物體檢測、分割(segmentation)和對圖像的語義文本描述信息。
COCO數據集是一個大型的、豐富的物體檢測,分割和字幕數據集。這個數據集以scene understanding為目標,主要從復雜的日常場景中截取,圖像中的目標通過精確的segmentation進行位置的標定。圖像包括91類目標,328,000影像和2,500,000個label。COCO數據集有91類,雖然比ImageNet和SUN類別少,但是每一類的圖像多,這有利于獲得更多的每類中位于某種特定場景的能力,對比PASCAL VOC,其有更多類和圖像。
主要解決三個問題:
- 目標檢測
- 目標間的上下文聯系
- 目標二維精確定位
特點:
- 對象分割;
- 在上下文中可識別;
- 超像素分割;
- 330K圖像(> 200K標記);
- 150萬個對象實例;
- 80個對象類別;
- 91個類別;
- 每張圖片5個字幕;
- 有關鍵點的250,000人;
新方法:RFCN, Mask-RCNN等
1、RFCN
- 輸入圖像經過conv得到很多feature maps
- 這些features maps再次經過conv,得到k2(C+1)k^2(C+1)k2(C+1)個feature maps,C是類別總數,因為有背景這個類,所以+1,k是把位置信息加到chnnel上去了,讓RoI進行pool之后,得出來的是包含黃、綠、藍的不同位置信息,vote是取最高值。
這么多網絡是如果在feature-map層聯系起來的,以GoogLeNet為例
- RCNN:的每個框都要走一遍
- Fast RCNN:一張圖走前半部分,2000個框走后面的部分,更快
- R-FCN:前面所有的層都是共用的,到后面的分類層才有不同,把類別和位置信息整理出來,是最快的
2、Mask RCNN
- 將ROI pooling變為ROI Align,
- 開了一個新的分支,用于分割
mask RCNN 不僅僅框出來了,并且進行了分割,網絡簡潔且效果好。
5. 注意力機制
最近兩年,注意力模型(Attention Model)被廣泛使用在自然語言處理、圖像識別及語音識別等各種不同類型的深度學習任務中,是深度學習技術中最值得關注與深入了解的核心技術之一。
視覺注意力機制是人類視覺所特有的大腦信號處理機制。人類視覺通過快速掃描全局圖像,獲得需要重點關注的目標區域,也就是一般所說的注意力焦點,而后對這一區域投入更多注意力資源,以獲取更多所需要關注目標的細節信息,而抑制其他無用信息。
這是人類利用有限的注意力資源從大量信息中快速篩選出高價值信息的手段,是人類在長期進化中形成的一種生存機制,人類視覺注意力機制極大地提高了視覺信息處理的效率與準確性。
圖1形象化展示了人類在看到一副圖像時是如何高效分配有限的注意力資源的,其中紅色區域表明視覺系統更關注的目標,很明顯對于圖1所示的場景,人們會把注意力更多投入到人的臉部,文本的標題以及文章首句等位置。
深度學習中的注意力機制從本質上講和人類的選擇性視覺注意力機制類似,核心目標也是從眾多信息中選擇出對當前任務目標更關鍵的信息。
6. 全卷積網絡(FCN)
FCN能夠接受任意尺寸的輸入圖像,對圖像進行像素級的分類,采用反卷積層對最后一個卷積層的feature map進行上采樣,使它恢復到與輸入圖像相同的尺寸,從而可以對每個像素都產生一個預測,同時保留了原始輸入圖像中的空間信息,最后在上采樣的特征圖上進行逐像素的分類,從而解決語義分割的問題。
語義分割所采用的FCN結構示意圖:
語義分割和圖像分類的對比:
- CNN中,貓的圖像輸入到AlexNet中,得到一個長為1000的輸出向量,表示輸入圖像屬于每一類的概率,其中,“tabby cat”這一類統計概率最高,故判定其為貓。
- FCN中,將最后用于分類的全連接層替換為卷積層,輸出的是一張已經標記好的圖像,做語言分割。
反卷積:
Upsampling的操作可以看成是反卷積(deconvolutional),卷積運算的參數和CNN的參數一樣是在訓練FCN模型的過程中通過bp算法學習得到。反卷積層也是卷積層,不關心input大小,滑窗卷積后輸出output。deconv并不是真正的deconvolution(卷積的逆變換),最近比較公認的叫法應該是transposed convolution,deconv的前向傳播就是conv的反向傳播。
-
反卷積參數: 利用卷積過程filter的轉置(實際上就是水平和豎直方向上翻轉filter)作為計算卷積前的特征圖
-
反卷積運算過程:藍色是反卷積的輸入(2x2),綠色是輸出(4x4)
總結
以上是生活随笔為你收集整理的【目标检测】1、基础内容的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c位边上还有什么位_章泽天聚会站边位,被
- 下一篇: matlab中求最大因数,matlab最