1. 程式人生 > >[論文理解]Selective Search for Object Recognition

[論文理解]Selective Search for Object Recognition

Selective Search for Object Recognition

簡介

Selective Search是現在目標檢測裡面非常常用的方法,rcnn、frcnn等就是通過selective search方法得到候選框,然後進行分類,也就是傳統的two stage方法。本篇也是我看到frcnn之後不得不看的一篇論文,大致將自己的理解記錄下來,方便以後指正。

演算法目的

  1. 能夠得到各種大小的框

由於影象中的物體可以有任意大小,所以selective search演算法至少要能夠做到得到各種大小的框。

  1. 考慮多種組合方法

由於影象中的顏色、紋理、光照條件等不同,我們無法只根據單一條件(如顏色)將區域合併,因此合併區域的過程中必須要綜合考慮各種因素。

  1. 能夠快速計算

selective search演算法提出的目的就是要能夠快速計算,這樣我們能夠把能多的計算量花在後面識別上,而不是得到物體的框上。

Hierarchical Grouping

大致理解

Selective Search演算法採用的是分級合併的演算法,具體就是從細節部分開始計算,最後到總體,也就是Bottom-up方法。由於這個過程是分級進行的,所以我們可以在不同級框定一定的區域,這樣框定的區域就是各種scale的,滿足了上面的要求。

細節理解

Hierarchical Grouping中很重要的一點是用了Felzenszwalb的演算法得到了影象分割的區域,這是一個基於圖的影象分割演算法,這個演算法下次部落格更新會寫理解,這裡只需要知道經過該演算法得到了若干個分隔後的影象區域,這些區域經過我們的selective search演算法得到合併並且框出候選框。具體的做法是:首先,計算所有任意兩region之間的相似性(這個怎麼計算後面會提到,利用區域的特徵計算),然後每次相似性最大的兩個區域進行合併,框出合併後的集合,用合併之前兩個區域集合的特徵計算合併之後的區域的特徵,這時候就可以再利用新的區域和其他區域計算相似度進一步迭代,迭代的終點是整個影象變成一個區域。由於相似度是基於區域特徵來計算的,而合併後的特徵可以基於合併之前的特徵運算得到,不需要再根據影象的pixel重新計算,因此fast to compute。

下圖就是該演算法的細節,其中相似函式在後面講道,所以當時我畫了個問號。

計算s相似函式

首先是顏色空間的Scolor的計算,文章考慮了八種策略來計算色彩的相似性,下圖列出了文章提的顏色空間:

在不同顏色空間下用直方圖統計法計算相似度,每個channel分為25個bins,3channel圖就是75bins。色彩相似性是使用L1範數來進行計算的。

Stexture是紋理特徵的相似函式,使用的是SIFT特徵來進行計算的,SIFT特徵在之前的部落格中有寫道的。

Ssize是區域大小的相似函式,

直接這樣計算還是存在問題的,因為光size相似比較大,但是兩者相距比較遠的情況下兩個region合併之後的區域是有問題的,所以為了解決這種問題,提出了Sfill函式

看上面的公式就知道可以解決這個問題了。

最終呢,s相似性函式就通過下面的公式計算得到:

其中呢,ai取值為0或者1,表明是否啟用該特徵。

合併區域

合併區域需要考慮到的是防止從大區域開始合併,因為這樣可能會導致很多小區域沒有沒框進來,所以應該優先從小區域開始合併,但是又要保留一定的隨機性,所以作者定義了vi = RND*i,RND為隨機數,範圍為0-1,i表示層級數,i=1代表整個影象。這樣就基本可以保證小區域優先合併並且有一定的隨機性了。依次合併,直到合併為一個區域。

之後再將合併過程中的框的vi按照從大到小的順序排序,保留閾值大小之前排序的框,這些框為演算法的輸出。

實現

github地址:https://github.com/AlpacaDB/selectivesearch

安裝:

pip install selectivesearch

使用:

import skimage.data
import selectivesearch

img = skimage.data.astronaut()
img_lbl, regions = selectivesearch.selective_search(img, scale=500, sigma=0.9, min_size=10)
regions[:10]
=>
[{'labels': [0.0], 'rect': (0, 0, 15, 24), 'size': 260},
 {'labels': [1.0], 'rect': (13, 0, 1, 12), 'size': 23},
 {'labels': [2.0], 'rect': (0, 15, 15, 11), 'size': 30},
 {'labels': [3.0], 'rect': (15, 14, 0, 0), 'size': 1},
 {'labels': [4.0], 'rect': (0, 0, 61, 153), 'size': 4927},
 {'labels': [5.0], 'rect': (0, 12, 61, 142), 'size': 177},
 {'labels': [6.0], 'rect': (7, 54, 6, 17), 'size': 8},
 {'labels': [7.0], 'rect': (28, 50, 18, 32), 'size': 22},
 {'labels': [8.0], 'rect': (2, 99, 7, 24), 'size': 24},
 {'labels': [9.0], 'rect': (14, 118, 79, 117), 'size': 4008}]

output:

論文原文:https://ivi.fnwi.uva.nl/isis/publications/2013/UijlingsIJCV2013