目標檢測中region proposal的作用?

ssd,yolo訓練網路的時候為什麼要用anchor box,圖片不是有標ground truth box 嗎?為什麼不能直接用這個訓練呢?


謝邀。這裡以faster rcnn舉例。在faster rcnn裡面,anchor(或者說RPN網路)的作用是代替以往rcnn使用的selective search的方法尋找圖片裡面可能存在物體的區域。當一張圖片輸入resnet或者vgg,在最後一層的feature map上面,尋找可能出現物體的位置,這時候分別以這張feature map的每一個點為中心,在原圖上畫出9個尺寸不一anchor。然後計算anchor與GT(ground truth) box的iou(重疊率),滿足一定iou條件的anchor,便認為是這個anchor包含了某個物體。

目標檢測的思想是,首先在圖片中尋找「可能存在物體的位置(regions)」,然後再判斷「這個位置裡面的物體是什麼東西」,所以region proposal就參與了判斷物體可能存在位置的過程。

region proposal是讓模型學會去看哪裡有物體,GT box就是給它進行參考,告訴它是不是看錯了,該往哪些地方看才對。

建議詳細閱讀這個領域一系列的論文,從rcnn、sppnet、frcnn、faster rcnn到ssd、yolo,整條線看下來就能大概明白目標檢測的「套路」。


提前聲明:::

文章為中英混合,英語部分均是專業領域內的術語,也是論文中的規範名詞,沒有其他原因,請各位口下留情。

正文

先更正下提問者的描述,yolo本身不含有anchor機制。

以下回答適合對目標檢測中anchor的作用和機制比較了解的讀者閱讀。

首先我們明確一個定義,當前主流的Object Detection框架分為1 stage和2 stage,而2 stage多出來的這個stage就是Regional Proposal過程,明確這一點後,我們繼續講。

Regional Proposal的輸出到底是什麼?

我們首先看一下以Faster R-CNN為代表的2 stage目標檢測方法

圖1

可以看到,圖中有兩個Classification loss和兩個Bounding-box regression loss,有什麼區別呢?

1、Input Image經過CNN特徵提取,首先來到Region Proposal網路。由Regio Proposal Network輸出的Classification,這並不是判定物體在COCO數據集上對應的80類中哪一類,而是輸出一個Binary的值p,可以理解為 pin[0,1] ,人工設定一個threshold=0.5。

RPN網路做的事情就是,如果一個Region的 pgeq0.5 ,則認為這個Region中可能是80個類別中的某一類,具體是哪一類現在還不清楚。到此為止,Network只需要把這些可能含有物體的區域選取出來就可以了,這些被選取出來的Region又叫做ROI (Region of Interests),即感興趣的區域。當然了,RPN同時也會在feature map上框定這些ROI感興趣區域的大致位置,即輸出Bounding-box

----打個比方----

我上午第四節課餓得不行,我就想著中午要吃什麼?附近好多西餐廳和中餐廳,餐廳里菜品有很多。但是我生活費不夠了。。gg。。不太想吃(吃不起)西餐,所以無論西餐廳里有什麼菜品,我都不會考慮;只有路過中餐廳時,我才會進去看看具體吃什麼菜。

----------真是尷尬的栗子----------

So, RPN網路做的事情就是,把一張圖片中,我不感興趣的區域——花花草草、大馬路、天空之類的區域忽視掉,只留下一些我可能感興趣的區域——車輛、行人、水杯、鬧鐘等等,然後我之後只需要關注這些感興趣的區域,進一步確定它到底是車輛、還是行人、還是水杯(分類問題)。。。。

你可能會看到另一對通俗易懂的詞語,前景(車、人、杯)背景(大馬路、天空)

圖2.天空和草地都屬於背景

圖3.天空和馬路也都是背景

啊 好的,到此為止,RPN網路的工作就完成了,即我們現在得到的有:在輸入RPN網路的feature map上,所有可能包含80類物體的Region區域的信息,其他Region(非常多)我們可以直接不考慮了(不用輸入後續網路)。


接下來的工作就很簡單了,假設輸入RPN網路的feature map大小為 64	imes64 ,那麼我們提取的ROI的尺寸一定小於 64	imes64,因為原始圖像某一塊的物體在feature map上也以同樣的比例存在。我們只需要把這些Region從feature map上摳出來,由於每個Region的尺寸可能不一樣,因為原始圖像上物體大小不一樣,所以我們需要將這些摳出來的Region想辦法resize到相同的尺寸,這一步方法很多(Pooling或者Interpolation,一般採用Pooling,因為反向傳播時求導方便)。


假設這些摳出來的ROI Region被我們resize到了 14	imes14 或者 7	imes7 ,那我們接下來將這些Region輸入普通的分類網路,即第一張Faster R-CNN的結構圖中最上面的部分,即可得到整個網路最終的輸出classification,這裡的class(車、人、狗。。)才真正對應了COCO數據集80類中的具體類別。

同時,由於我們之前RPN確定的box
egion坐標比較粗略
,即大概框出了感興趣的區域,所以這裡我們再來一次精確的微調,根據每個box中的具體內容微微調整一下這個box的坐標,即輸出第一張圖中右上方的Bounding-box regression。


整個Faster R-CNN網路就到此結束了,下面總結一下,同時也回答你的問題:

Region Proposal有什麼作用?

1、COCO數據集上總共只有80類物體,如果不進行Region Proposal,即網路最後的classification是對所有anchor框定的Region進行識別分類,會嚴重拖累網路的分類性能,難以收斂。原因在於,存在過多的不包含任何有用的類別(80類之外的,例如各種各樣的天空、草地、水泥牆、玻璃反射等等)的Region輸入分類網路,而這些無用的Region佔了所有Region的很大比例。換句話說,這些Region數量龐大,卻並不能為softmax分類器帶來有用的性能提升(因為無論怎麼預測,其類別都是背景,對於主體的80類沒有貢獻)。

2、大量無用的Region都需要單獨進入分類網路,而分類網路由幾層卷積層和最後一層全連接層組成,參數眾多,十分耗費計算時間,Faster R-CNN本來就不能做到實時,這下更慢了。


最後有個小小的說明,針對不了解Anchor的同學們,我在文中始終在說對於感興趣的區域「框定一個坐標」,這是為了便於理解,其實這樣說是不準確的。

具體就是:我們整張圖像上,所有的框,一開始就由Anchor和網路結構確定了,這些框都有各自初始的坐標(錨點)。所有後續的工作,RPN提取前景和背景,其實就是保留包含前景的框,丟掉包含背景的;包括後續的NMS,也都是丟掉多餘的,並非重新新建一個框

我們網路輸出的兩個Bounding-box regression,都是輸出的坐標偏移量,也就是在初始錨點的基礎上做的偏移修正和縮放,並非輸出一個原圖上的絕對坐標。

yolo有類似rpn的機制,那就是最後輸出時的confidence值,這個值決定了前景和背景。

ssd是將anchor機制融合在了1 stage模型中,原理與本文所述基本一致。

圖4.這張更能體現object detection的state-of-the-art

引用:

圖1.https://arxiv.org/abs/1506.01497

圖2、3、4均為在Google Image中找到原始圖像,我自己做的Object Detection並標註。

?"L_?不懂為什麼後天考試,現在我還有時間在這碼字。。。

########雖然不是大V,但是也花了一點時間寫,轉載請註明出處!########


感覺可以從Data-mining角度理解,one-stage的方法直接從特徵圖每一點構造候選區特徵預測,首先,太多的「垃圾」樣本;其次,輪廓沒有代表性;經過region proposal之後相當於精鍊了一部分候選框,同事對於最終用於訓練的候選框,也有回歸模型按照是否有待測物體先一步計算了輪廓。對召回率和準確率有提升,但是two-stage的方法引入了額外的計算。


答主說的方法理論上可行。

但是這是一個label規範化和人工先驗的問題。

在我看來,anchor box一方面規範了輸出和label。

另一個方面給了輸出一個先驗(即先給出幾個物體可能的位置,同時用到了feature map空間位置的對應關係),方便網路學習收斂。

如果直接學ground truth,那麼問題就來了:你怎麼設置label?而且直接學不容易收斂啊~


或許我覺得題主的問題是網路的輸出是什麼?為什麼要輸出這個?

以我個人的理解,首先使用anchor box的含義就是我不知道這個點是否存在一個物體,其次是這個物體有多大,那麼使用anchor box就很好理解了,通過iou計算這個點存在物體的概率,而不同大小的box就是存在不同大小box的物體的概率分別為多少,之後定義一個觀點,即一個點只屬於一個物體,於網路而言就是對於幾個anchor的輸出取最大值。

當然這樣框到的物體非常粗糙,因為只有幾個固定大小的框,於是就有了bbox regression,個人認為也正是bbox這個方法不佳,於是被segmentation取代了,也就是mask rcnn


1. 不同類別的物體,bounding box差異可能很大。

2. 一個grid裡面可能有多個物體。


推薦閱讀:

視頻中的目標檢測與圖像中的目標檢測具體有什麼區別?
為什麼SSD(Single Shot MultiBox Detector)對小目標的檢測效果不好?
自知視野不夠開闊,目前的平台也不高,如何確定擅長做什麼?找到什麼樣的目標?
如何評價Google最新的論文NASNet?

TAG:計算機視覺 | 目標檢測 | 神經網路 |