SSD目標檢測之預設框的生成 Python

2021-09-20 10:34:56 字數 1483 閱讀 6699

ssd物體檢測**:arxiv1512.02325

ssd作為較新出現的物體檢測演算法,擁有網路搭建簡單、無需細節調參的優秀特點。其不僅用於物體檢測,還可應用於文字檢測任務。近期實現的textbox(arxiv1611.06779)文字檢測借鑑了ssd的default boxes。雖然演算法不難理解,但是實現過程中遇到了不少問題。通過學習借鑑他人**以及自己總結,特在此記錄生成預設框部分的方法與思路。

給定原圖寬高畫素和特徵圖寬高,以及一系列預設框寬高比,生成對應的預設框列表

如特徵圖為4x4大小,大致應劃成4x4的網格形狀,對於每乙個網格中心都有一組不同寬高比的矩形框。

左圖為生成的4x4網格           右圖為乙個網格應具備的不同比例的預設框

(方便起見預設框寬高較小,實際演算法預設框大小比上圖大一倍左右)

1. 資料的表示:之前我很少事先考慮資料在演算法中如何表示。對於預設框問題,最先在腦海中浮現的可能是使用原圖的尺寸進行計算。事實上,若將原圖對映在0到1的範圍內,資料的表示會更加清晰。尤其是當影象經過了一定程度的縮放之後。如果實在需要尺寸資訊,直接在結果上乘以原圖大小即可。

上圖中即是原圖尺寸對映在0到1範圍內的結果。

執行它獲得的結果可能會使人摸不著頭腦,但是當我們輸出x[0][1], y[0][1]得到的結果就是(0,1),x[i][j], y[i][j]就是(i,j)!

x,y陣列加0.5後除以特徵圖對應的寬高,得到了[0.125, 0.375, 0.625, 0.875]這樣均勻分割原圖的座標值

3.根據不同寬高比生成不同寬高,此處寬度與高度的預設值需要除以原圖的長寬以對映到0,1之間。

4.numpy陣列操作:

x = np.expand_dims(x, axis=-1)

y = np.expand_dims(y, axis=-1)

在最後一維擴張維度,此步驟為了

xmin = x_out - w / 2

ymin = y_out - h / 2

xmax = x_out + w / 2

ymax = y_out + h / 2

使得numpy陣列自行匹配最後乙個維度的寬度,具體原因還需繼續深入研究numpy原理

5.(關鍵)保證輸出合法:輸出在0到1之間

xmin = xmin.clip(0, 1)

xmax = xmax.clip(0, 1)

ymin = ymin.clip(0, 1)

ymax = ymax.clip(0, 1)

此時輸出的列表經過畫圖驗證,可以表明滿足ssd演算法中的要求。

目標檢測之SSD

ssd single shot multibox detector 翻譯 詳解 圖1 圖2 演算法步驟 1 輸入一幅 300x300 將其輸入到預訓練好的分類網路中來獲得不同大小的特徵對映,修改了傳統的vgg16網路 2 抽取conv4 3 conv7 conv8 2 conv9 2 conv10 ...

目標檢測之 SSD

ssd300 網路結構圖 ssd單階段目標檢測,候選框密集抽樣。作為單階段的目標檢測,其速度還是比faster快很多的,但是精度還是差點。ssd300共用了6層特徵,進行目標檢測,ssd512用了7層特徵,每一層的default box數量不同如上圖分別為 4,6,6,6,4,4,4為設定的乙個大正...

目標檢測之SSD

ssd single shot multibox detector 翻譯 詳解 圖1 圖2 演算法步驟 1 輸入一幅 300x300 將其輸入到預訓練好的分類網路中來獲得不同大小的特徵對映,修改了傳統的vgg16網路 2 抽取conv4 3 conv7 conv8 2 conv9 2 conv10 ...