檢測任務需要同時**物體的類別和位置,因此需要引入一些跟位置相關的概念。通常使用邊界框(bounding box,bbox)來表示物體的位置,邊界框是正好能包含物體的矩形框,如圖所示,圖中3個人分別對應3個邊界框。
通常有兩種格式來表示邊界框的位置:
xyxy,即(x1,y1,x2,y2),其中(x1,y1)是矩形框左上角的座標,(x2,y2)是矩形框右下角的座標。上圖中3個紅色矩形框用xyxy格式表示如下:
左:(40.93,141.1,226.99,515.73)
中:(214.29,325.03,399.82,631.37)
右:(247.2,131.62,480.0,639.32)
xywh,即(x,y,w,h)其中(x,y)是矩形框中心點的座標,w是矩形框的寬度,h是矩形框的高度。
在檢測任務中,訓練資料集的標籤裡會給出目標物體真實邊界框所對應的(x1,y1,x2,y2)這樣的邊界框也被稱為真實框(ground truth box),如上圖所示,圖中畫出了3個人像所對應的真實框。模型會對目標物體可能出現的位置進行**,由模型**出的邊界框則稱為**框(prediction box)。錨框與物體邊界框不同,是由人們假想出來的一種框。先設定好錨框的大小和形狀,再以影象上某乙個點為中心畫出矩形框。在下圖中,以畫素點[300, 500]為中心可以使用下面的程式生成3個框,如圖中藍色框所示,其中錨框a1跟人像區域非常接近。
上面我們畫出了以點(300,500)(300, 500)(300,500)為中心,生成的三個錨框,我們可以看到錨框a1 與真實框 g1的重合度比較好。那麼如何衡量這三個錨框跟真實框之間的關係呢,在檢測任務中是使用交並比(intersection of union,iou)作為衡量指標。這一概念**於數學中的集合,用來描述兩個集合a和b之間的關係,它等於兩個集合的交集裡面所包含的元素個數,除以它們的並集裡面所包含的元素個數,具體計算公式為:
我們將用這個概念來描述兩個框之間的重合度。兩個框可以看成是兩個畫素的集合,它們的交並比等於兩個框重合部分的面積除以它們合併起來的面積。下圖「交集」中青色區域是兩個框的重合面積,圖「並集」中藍色區域是兩個框的相並面積。用這兩個面積相除即可得到它們之間的交並比,如下圖所示:
假設兩個矩形框a和b的位置分別為:
假如位置關係如圖所示:
如果二者有相交部分,則相交部分左上角座標為:
相交部分右下角座標為:
計算相交部分面積:
矩形框a和b的面積分別是:
計算相並部分面積:
計算交並比:
兩步走的目標檢測:先進行區域推薦,而後進行目標分類,例如:r-cnn、spp-net、fast r-cnn、faster r-cnn
端到端的目標檢測:採用乙個網路一步到位 例如:yolo、ssd
r-cnn是以深度神經網路為基礎的物體檢測的模型 ,也是第乙個將卷積用於目標檢測的模型,以r-cnn為基點,後續的sppnet、fast r-cnn、faster r-cnn模型都是照著這個物體檢測思路。
1.找出中可能存在目標的侯選區域region proposal。
2.進行大小調整。為了適應alexnet網路的輸入影象的大小227×227,通過cnn對候選區域提取特徵向量,2000個建議框的cnn特徵組合成2000×4096維矩陣。
3.將2000×4096維特徵與21個svm組成的權值矩陣4096×20相乘(20種分類+1個背景類,svm是二分類器,則有21個svm),獲得2000×20維矩陣。
4.分別對2000×20維矩陣中每一列即每一類進行非極大值抑制(nms:non-maximum suppression)剔除重疊建議框,得到該列即該類中得分最高的一些建議框。
5.修正bbox,對bbox做回歸微調。
傳統的cnn限制了輸入必須固定大小,所以在實際使用中往往需要對原進行crop或者warp的操作
無論是crop還是warp,都無法保證在不失真的情況下將傳入到cnn當中。會使用一些方法盡量讓保持最小的變形。
在侯選區域的基礎上提取出更高階、更抽象的特徵,這些高階特徵是作為下一步的分類器、回歸的輸入資料。
假設一張的2000個侯選區域,那麼提取出來的就是2000 x 4096這樣的特徵向量(r-cnn當中預設cnn層輸出4096特徵向量)。那麼最後需要對這些特徵進行分類,r-cnn選用svm進行二分類。假設檢測19個類別,那麼會提供20個不同類別的svm分類器,每個分類器都會對2000個候選區域的特徵向量分別判斷一次,這樣得出[2000, 20]的得分矩陣,每個svm分類器做的事情就是判斷2000個候選區域是某類別,還是背景。
非極大值抑制(non-maximum suppression,nms),顧名思義就是抑制不是極大值的元素,可以理解為區域性最大搜尋。這個區域性代表的是乙個鄰域,鄰域有兩個引數可變,一是鄰域的維數,二是鄰域的大小。例如在行人檢測中,滑動視窗經提取特徵,經分類器分類識別後,每個視窗都會得到乙個分數。但是滑動視窗會導致很多視窗與其他視窗存在包含或者大部分交叉的情況。這時就需要用到nms來選取那些鄰域裡分數最高(是行人的概率最大),並且抑制那些分數低的視窗。
那麼通過nms篩選出來的候選框不一定非常準確怎麼辦?r-cnn提供了這樣的方法,建立乙個bbox regression,回歸用於修正篩選後的候選區域,使之回歸於ground-truth,預設認為這兩個框之間是線性關係,因為在最後篩選出來的候選區域和ground-truth很接近了
目標檢測入門 目標檢測基本概念
目標檢測關注影象中特定的物體目標,要求同時獲得這一目標的類別資訊和位置資訊。檢測給出的是對前景和背景的理解,需要從背景中分離出感興趣的目標,並確定這一目標的描述 類別和位置,常用檢測框表示 與影象分類的區別,目標檢測更具難度 影象分類只需要判斷輸入的影象中是否包含感興趣物體,而不需要定位具體位置 如...
目標檢測 目標檢測通用框架總結
目標檢測框架個人總結 以下是筆記中包含的內容 目標檢測網路框架總結 yolov4中有圖 從最開始的神經網路到現在深度更深,模組更多的目標檢測深度學習神經網路,如今大致可以分為two stage detector 典型的為rcnn系列 和 one stage detector 典型為yolo系列 每個...
目標檢測入門 錨框先驗框
先驗框的生成 參考先驗框是提前設定好的一系列檢測框 大小和尺寸都是提前定好了的 為什麼要設定先驗框?之前目標檢測基本概念中介紹了目標檢測的乙個基本思路 先確立眾多候選框,再對候選框進行分類和微調,從而完成目標檢測。這就是設定先驗框的原因。為了覆蓋更多可能的情況,在圖中的同乙個位置,會設定幾個不同尺度...