1. 程式人生 > 實用技巧 >selective search演算法

selective search演算法

目標檢測任務中由於我們事先不知道需要檢測哪個類別,因此第一張圖的桌子、瓶子、餐具都是一個個候選目標,而餐具包含在桌子這個目標內,勺子又包含在碗內。這張圖展示了目標檢測的層級關係以及尺度關係,那我們如何去獲得這些可能目標的位置呢。

在selective search演算法之前,在圖片上使用窮舉法或者滑動視窗選出所有物體可能出現的區域框,就是在原始圖片上進行不同尺度不同大小的滑窗,獲取每個可能的位置。而這樣做的缺點也顯而易見,複雜度太高,產生了很多的冗餘候選區域,而且由於不可能每個尺度都兼顧到,因此得到的目標位置也不可能那麼準。

selective search演算法不使用暴力方法,而是用候選區域方法(region proposal method)建立目標檢測的感興趣區域(ROI)。在選擇性搜尋(selective search,SS)中,我們可以先利用基於圖的影象分割的方法得到小尺度的區域,然後一次次合併得到大的尺寸。考慮所有特徵,例如顏色、紋理、大小等,同時照顧下計算複雜度。

在介紹Selective Search之前,先說明一下需要考慮的問題:

  • 適應不同尺度(Capture All Scales):窮舉搜尋通過改變視窗大小來適應物體的不同尺度,選擇搜尋同樣無法避免這個問題。演算法採用影象分割以及使用一種層次演算法有效地解決了這個問題
  • 多樣化(Diversification):單一的策略無法應對多種類別的影象,使用顏色、紋理、大小等多種策略對分割好的區域進行合併
  • 速度快

輸入:一張圖片
輸出:候選的目標位置集合
演算法:
利用切分方法得到候選的區域集合R = {r1,r2,…,rn}
初始化相似集合S = ϕ
foreach 遍歷鄰居區域對 (ri,rj) do

計算相似度s(ri,rj)
S = S ∪ s(ri,rj)
while S not=ϕ do
從s中得到最大的相似度s(ri,rj)=max(S)
合併對應的區域rt = ri ∪ rj
移除ri對應的所有相似度:S = S\s(ri,r*)
移除rj對應的所有相似度:S = S\s(r*,rj)
計算rt對應的相似度集合St
S = S ∪ St
R = R ∪ rt
L = R中所有區域對應的邊框
-------演算法解讀參考 墨麟非攻

首先通過基於圖的影象分割方法初始化原始區域,就是將影象分割成很多很多的小塊,使用貪心策略,計算每兩個相鄰區域的相似度,然後每次合併最相似的兩塊,直至最終只剩下一塊完整的圖片。然後這其中每次產生的影象塊包括合併的影象塊我們都儲存下來,這樣就得到影象的分層表示。

保持多樣性的策略

區域合併採用了多樣性的策略,如果簡單採用一種策略很容易錯誤合併不相似的區域,比如只考慮紋理時,不同顏色的區域很容易被誤合併。選擇性搜尋採用三種多樣性策略來增加候選區域以保證召回:

  • 多種顏色空間,考慮RGB、灰度、HSV及其變種

  • 多種相似度度量標準,既考慮顏色相似度,又考慮紋理、大小、重疊情況等
  • 通過改變閾值初始化原始區域,閾值越大,分割的區域越少

a.顏色空間轉換

通過色彩空間轉換,將原始色彩空間轉換到多達八種色彩空間。也是為了考慮場景以及光照條件等,主要應用於影象分割演算法中原始區域的生成(兩個畫素點的相似度計算時,計算不同顏色空間下的兩點距離)。

主要使用的顏色空間有:

1)RGB

2)灰度I

3)Lab

4)rgI(歸一化的rg通道加上灰度)

5)HSV

6)rgb(歸一化的RGB)

7)C

8)H(HSV通道的H)

b.區域相似度計算

我們在計算多種相似度的時候,都是把單一相似度的值歸一化到[0, 1]之間,1表示兩個區域之間相似度最大

  • 顏色相似度

  • 紋理相似度

  • 有限合併小的區域

  • 區域的合適度距離

  • 合併上面四種相似度

給區域打分

通過上述步驟,我們可以得到很多區域,但是並不是每個區域作為目標的可能性都是相同的,我們要進行篩選。

給予最先合併的圖片塊較大的權重,比如最後一塊完整影象權重為1,倒數第二次合併的區域權重為2,以此類推。但是當我們策略很多,多樣性很多的時候,權重就會有太多的重合,這樣排序就不太方便。我們可以給他們乘以一個隨機數,然後對於相同的區域多次出現的也疊加下權重,畢竟多個方法都說你是目標,也是有理由的嘛。這樣我們就得到所有區域的目標分數,也就可以根據自己的需要選擇多少個區域了。

選擇性搜尋效能評估

自然地,通過演算法計算得到的包含物體的Bounding Boxes與真實情況(ground truth)的視窗重疊越多,那麼演算法效能就越好。這是使用的指標是平均最高重疊率ABO(Average Best Overlap)。對於每個固定的類別c,每個真實情況(ground truth)表示為$g_{i}^{c} \in G^{c}$,令計算得到的位置假設L中的每個值$l_{j}$,那麼 ABO的公式表達為:

$\mathrm{ABO}=\frac{1}{\left|G^{c}\right|} \sum_{g_{i}^{c} \in G^{c}} \max _{l_{j} \in L}$ Overlap $\left(g_{i}^{c}, l_{j}\right)$

重疊率的計算方式: $\operatorname{Overlap}\left(g_{i}^{c}, l_{j}\right)=\frac{\operatorname{area}\left(g_{i}^{c}\right) \cap \operatorname{area}\left(\mathrm{l}_{\mathrm{j}}\right)}{\operatorname{area}\left(g_{i}^{c}\right) \cup \operatorname{area}\left(\mathrm{l}_{\mathrm{j}}\right)}$

上面結果給出的是一個類別的ABO,對於所有類別下的效能評價,很自然就是使用所有類別的ABO的平均值MABO(Mean Average Best Overlap)來評價。

a.單一策略評估

我們可以通過改變多樣性策略中的任何一種,評估選擇性搜尋的MABO效能指標。採取的策略如下:

  • 使用RGB色彩空間
  • 採用四中相似度計算的組合方式
  • 設定影象分割的閾值k=50

b.多樣性策略組合

我們使用貪婪搜尋演算法,把單一策略進行組合,會獲得較高的MABO,但是也會造成計算成本的增加。

上圖中綠色邊框為物件的標記邊框,紅色邊框為我們使用'Quality' Selective Search演算法獲得的Overlap最高的候選框。可以看到我們這個候選框和真實標記非常接近。

參考程式碼

我們可以通過pip安裝Selective Search包

pip install selectivesearch

原始碼:https://github.com/AlpacaDB/selectivesearch

Reference

1.https://www.cnblogs.com/zyly/p/9259392.html

2.影象分割—基於圖的影象分割(Graph-Based Image Segmentation)(附程式碼)

3.目標檢測(1)-Selective Search

4.https://github.com/AlpacaDB/selectivesearch(程式碼)

5.Selective Search for Object Recognition(推薦)

6.J.R. Uijlings, K.E. vandeSande, T. Gevers, and A.W. Smeulders. Selective search for object recognition. IJCV, 2013.

7.https://www.cnblogs.com/gezhuangzhuang/p/10451296.html