目標檢測(1)-Selective Search

前幾天tensorflow開源了諸多目標檢測模型,包括Faster RCNN、SSD等,恰巧自己的論文用的也是目標檢測網路,是時間把以前刷過的檢測網路祭出來了。自己看過的主要包括基於region proposal的RCNN系列:RCNN、Fast RCNN、Faster RCNN,基於區域劃分的YOLO、SSD,基於強化學習的AttentionNet等,還有最新的Mask RCNN。我們將用一周時間先詳細介紹每個模型然後通過Tensorflow跑一遍模型。說到基於region proposal的目標檢測方法不得不提到RCNN所使用的Selective Search方法,就讓我們從這篇文章開始入手好了。

文章地址:huppelen.nl/publication

摘要

為了了解目標檢測區域建議的複雜性,我們先看一組圖片:

由於我們事先不知道需要檢測哪個類別,因此第一張圖的桌子、瓶子、餐具都是一個個候選目標,而餐具包含在桌子這個目標內,勺子又包含在碗內。這張圖展示了目標檢測的層級關係以及尺度關係,那我們如何去獲得這些可能目標的位置呢。常規方法是通過窮舉法,就是在原始圖片上進行不同尺度不同大小的滑窗,獲取每個可能的位置。而這樣做的缺點也顯而易見,就是計算量實在是太大了,而且由於不可能每個尺度都兼顧到,因此得到的目標位置也不可能那麼准。那麼我們能不能通過視覺特徵去減少這種分類的可能性並提高精確度呢。這就是本文想做的事情。

可用的特徵有很多,到底什麼特徵是有用的呢?我們看第二副圖片的兩隻貓咪,他們的紋理是一樣的,因此紋理特徵肯定不行了。而如果通過顏色則能很好區分。但是第三幅圖變色龍可就不行了,這時候邊緣特徵、紋理特徵又顯得比較有用。而在最後一幅圖中,我們很容易把車和輪胎看作是一個整體,但是其實這兩者的特徵差距真的很明顯啊,無論是顏色還是紋理或是邊緣都差的太遠了。而這這是幾種情況,自然圖像辣么多,我們通過什麼特徵去區分?應該區分到什麼尺度?

selective search的策略是,既然是不知道尺度是怎樣的,那我們就儘可能遍歷所有的尺度好了,但是不同於暴力窮舉,我們可以先得到小尺度的區域,然後一次次合併得到大的尺寸就好了,這樣也符合人類的視覺認知。既然特徵很多,那就把我們知道的特徵都用上,但是同時也要照顧下計算複雜度,不然和窮舉法也沒啥區別了。最後還要做的是能夠對每個區域進行排序,這樣你想要多少個候選我就產生多少個,不然總是產生那麼多你也用不完不是嗎?好了這就是整篇文章的思路了,那我們一點點去看。

產生多尺度的區域建議

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

保持多樣性的策略

為了盡最大可能去分割所有情景的圖片我們得保持特徵的多樣性啊,該文章主要通過兩種方式保持特徵多樣性,一方面是通過色彩空間變換,將原始色彩空間轉換到多達八中的色彩空間。然後通過多樣性的距離計算方式,綜合顏色、紋理等所有的特徵。

  • 顏色空間變換

這麼多的顏色空間,反正我認識的不認識的都在裡面了。

  • 距離計算方式

距離計算方式需要滿足兩個條件,其一速度得快啊,因為畢竟我們這麼多的區域建議還有這麼多的多樣性。其二是合併後的特徵要好計算,因為我們通過貪心演算法合併區域,如果每次都需要重新計算距離,這個計算量就大太多了。

  1. 顏色距離

我們費勁心思搞了這麼多的色彩空間,首先當然就是應該計算顏色的距離了啊。

距離的計算方式很簡單,就是對各個通道計算顏色直方圖,然後取各個對應bins的直方圖最小值。這樣做的話兩個區域合併後的直方圖也很好計算,直接通過直方圖大小加權區域大小然後除以總區域大小就好了。

2.紋理距離

紋理距離計算方式和顏色距離幾乎一樣,我們計算每個區域的快速sift特徵,其中方向個數為8,3個通道,每個通道bins為10,對於每幅圖像得到240維的紋理直方圖,然後通過上式計算距離。

3.優先合併小的區域

如果僅僅是通過顏色和紋理特徵合併的話,很容易使得合併後的區域不斷吞併周圍的區域,後果就是多尺度只應用在了那個局部,而不是全局的多尺度。因此我們給小的區域更多的權重,這樣保證在圖像每個位置都是多尺度的在合併。

4.區域的合適度度距離

不僅要考慮每個區域特徵的吻合程度,區域的吻合度也是重要的,吻合度的意思是合併後的區域要盡量規範,不能合併後出現斷崖的區域,這樣明顯不符合常識,體現出來就是區域的外接矩形的重合面積要大。因此區域的合適度距離定義為:

5.綜合各種距離

現在各種距離都計算出來,我們要做的就是整合這些距離,通過多種策略去得到區域建議,最簡單的方法當然是加權咯:

6.參數初始化多樣性

我們基於基於圖的圖像分割得到初始區域,而這個初始區域對於最終的影響是很大的,因此我們通過多種參數初始化圖像分割,也算是擴充了多樣性。

給區域打分

通過上述的步驟我們能夠得到很多很多的區域,但是顯然不是每個區域作為目標的可能性都是相同的,因此我們需要衡量這個可能性,這樣就可以根據我們的需要篩選區域建議個數啦。

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

基於Selective Search的目標識別

這就是典型的一個應用了,我們得到了區域的很多建議,提取區域的空間金字塔的多樣特徵,組合成一個特徵向量,然後訓練SVM就可以分類出哪個區域是真正我們想要的目標啦。當然也可以用以目標檢測,我們接下來要說的RCNN就是這樣乾的。不過比相比這篇文章的sift特徵啊啥的要高級一些,畢竟CNN的特徵表達能力還是很強勢的。
推薦閱讀:

Generating Chinese Poetry from Variational Auto-Encoder
機器學習識別cfDNA
梯度下降法求解logisitic回歸及其python代碼實現
數學 · 神經網路(二)· BP(反向傳播)
Python · 神經網路(三*)· 網路

TAG:机器学习 | 深度学习DeepLearning | 目标检测 |