先驗框的生成
參考先驗框是提前設定好的一系列檢測框(大小和尺寸都是提前定好了的)
為什麼要設定先驗框?之前目標檢測基本概念中介紹了目標檢測的乙個基本思路:先確立眾多候選框,再對候選框進行分類和微調,從而完成目標檢測。這就是設定先驗框的原因。
為了覆蓋更多可能的情況,在圖中的同乙個位置,會設定幾個不同尺度的先驗框,這裡的不同尺度指大小與長寬比
顯然,設定不同尺度的先驗框,出現與目標物體較為匹配(高iou)的先驗框的概率更高
另外,先驗框要設定在中不同位置上。
如果遍歷原圖所有畫素,假設乙個224x224的,每個畫素位置設定3個先驗框,一共需要設定224x224x3=150528個先驗框。如果是遍歷原圖下取樣得到的feature map,則會大大減少先驗框的數量。
要給出設定的先驗框的類別資訊,才能讓模型學著去**每個先驗框是否對應著乙個目標物體。
對於類別資訊的確定,方法是設定乙個iou閾值,與目標框iou小於閾值的先驗框類別設定為背景;大於等於閾值的設定為目標先驗框。這樣就得到了ground truth的類別資訊。
vgg16得到的特徵圖大小為7*7,每個位置設定三種尺度與三種長寬比共9種候選框,以**為例:
"""
設定細節介紹:
1. 離散程度 fmap_dims = 7: vgg16最後的特徵圖尺寸為 7*7
2. 在上面的舉例中我們是假設了三種尺寸的先驗框,然後遍歷座標。在先驗框生成過程中,先驗框的尺寸是提前設定好的,
特徵圖上每乙個cell定義了共9種不同大小和形狀的候選框(3種尺度*3種長寬比=9)
生成過程:
0. cx, cy表示中心點座標
1. 遍歷特徵圖上每乙個cell,i+0.5是為了從座標點移動至cell中心,/fmap_dims目的是將座標在特徵圖上歸一化
2. 這個時候我們已經可以在每個cell上各生成乙個框了,但是這個不是我們需要的,我們稱之為base_prior_bbox基準框。
3. 根據我們在每個cell上得到的長寬比1:1的基準框,結合我們設定的3種尺度obj_scales和3種長寬比aspect_ratios就得到了每個cell的9個先驗框。
4. 最終結果儲存在prior_boxes中並返回。
需要注意的是,這個時候我們的到的先驗框是針對特徵圖的尺寸並歸一化的,因此要對映到原圖計算iou或者展示,需要:
img_prior_boxes = prior_boxes * 影象尺寸
"""def
create_prior_boxes()
:"""
vgg16最後的特徵圖尺寸為 7*7
特徵圖上每乙個cell定義了共9種不同大小和形狀的候選框(3種尺度*3種長寬比=9)
因此總的候選框個數 = 7 * 7 * 9 = 441
:return: prior boxes in center-size coordinates, a tensor of dimensions (441, 4)
"""fmap_dims =
7 obj_scales =
[0.2
,0.4
,0.6
] aspect_ratios =[1
.,2.
,0.5
] prior_boxes =
for i in
range
(fmap_dims)
:for j in
range
(fmap_dims)
: cx =
(j +
0.5)
/ fmap_dims # 歸一化cell中心點x座標
cy =
(i +
0.5)
/ fmap_dims # 歸一化cell中心點y座標
for obj_scale in obj_scales:
for ratio in aspect_ratios:
[cx, cy, obj_scale * sqrt(ratio)
, obj_scale / sqrt(ratio)])
#直接用sqrt(),這裡假設原圖寬高相同
prior_boxes = torch.floattensor(prior_boxes)
.to(device)
# (441, 4)
prior_boxes.clamp_(0,
1)# (441, 4)
return prior_boxes
進行視覺化:
先驗框超出界限時,一般用尺寸將越界的先驗框進行截斷,比如某個先驗框左上角座標是(-5, -9),那麼就截斷為(0,0),某個先驗框右下角座標是(324,134),當大小為(224,224)時,就將其截斷為(224,134)。
prior_boxes.clamp_(0,
1)
上面這一行在**中就實現了截斷的功能(進行了歸一化,使用0-1截斷)
動手學cv-pytorch
錨框 Anchor box綜述
anchor boxes是學習卷積神經網路用於目標識別過程中最重要且最難理解的乙個概念。這個概念最初是在faster r cnn中提出,此後在ssd yolov2 yolov3等優秀的目標識別模型中得到了廣泛的應用,這裡就詳細介紹一下anchor boxes到底是什麼?有什麼作用?在 起作用?問題1...
目標檢測框不穩定不連續?
1 目標檢測框的寬高不穩定。比如一輛車停在原地不動,正常期望的是,不管在哪幀進行檢測,車輛檢測輸出框的寬高應該固定不變,因為車沒挪動。或者說目標從遠到近,檢測框的寬高應該平滑變化,而不是看上去一閃一閃的感覺 2 同理,目標檢測框的位置不穩定。同樣還是一輛車停在原地,車輛檢測輸出框的位置 框中心點座標...
目標檢測入門
檢測任務需要同時 物體的類別和位置,因此需要引入一些跟位置相關的概念。通常使用邊界框 bounding box,bbox 來表示物體的位置,邊界框是正好能包含物體的矩形框,如圖所示,圖中3個人分別對應3個邊界框。通常有兩種格式來表示邊界框的位置 xyxy,即 x1,y1,x2,y2 其中 x1,y1...