前一陣子好忙啊,很久沒更新了。最近正好挖了新坑,來更新下。由於以前是作檢測的,而目前課題順道偏到了instance segmentation,這篇文章簡單梳理一下從檢測、分割結果到instance segmentation結果問題在哪裏,以及已有的解決方案。dom
分類、檢測、分割是有自然的聯繫的:從目的來說,三個任務都是爲了正確的分類一張(或一部分)圖像;進一步,檢測和分割還共同負責定位任務。這些任務之間的不一樣是因爲人在解決同一類問題時,對問題的描述方案不一樣致使的,是人爲的。於是,能夠找到一種共同的描述(或任務),即instance segmentation。那麼,instance segmentation既然集成了上述3種任務,若是有上述3種任務的結果,是否是經過簡單組合就能夠獲得instance segmentation的結果呢?顯然是不行的。ide
爲何不能夠呢?或者說須要補全什麼才能夠獲得instance segmentation的結果呢?咱們先從每一個任務分開來看,工具
解釋一下空間上的相關性,它對於檢測和instance segmentation都很是重要。空間上的相關性即同一個像素因爲處在物體的不一樣相對位置,它對於不一樣物體可能語義並不相同,如圖中人的框雖然覆蓋了部分羊,可是該框並不會分到羊這個類別,而是分到了人,正是因爲空間上,羊沒並有主導整個框。既然如此,解決方案彷佛顯而易見了,缺什麼補什麼就好了。學習
依然沿着以上思路,精細定位比較容易補出來,那麼空間相關性如何編碼呢?與檢測類似,能夠採用roi pooling或position sensitive map解決。因爲region是不規則的相似one-stage detection的anchor box的方案,就比較難實現了。咱們能夠開發出幾種不一樣的解決方案:優化
對於每個方案,將簡要介紹一篇相關論文,加深理解。僅僅是爲了闡述明白每個解決方案,文章不是特別新,你們多包涵了。編碼
這篇文章解決方案很是直接,對每一個segmentation proposal提取特徵,對他們進行分類,就能夠獲得instance segmentation的結果。採用兩種特徵:1)segmentation proposal bounding box內的特徵,2)以上特徵mask掉segmentation proposal的背景部分。spa
也可藉助另一種方案使用segmentation map:利用邊緣圖對segmentation map進行分割,分割成不一樣的物體。[9]使用instance segmentation的標註訓練了邊緣檢測器,注意這裏的「邊緣」是boundary,而不是edge。而後,使用這個邊緣圖劃分超像素,以超像素爲單位對圖進行劃分和貼標籤。這裏假設了一個物體必定對應一個聯通域(這個假設是有問題的,有時候因爲遮擋等問題可能對應多個聯通域)。3d
其中,image partition採起非深度學習的方法進行求解,是CRF和multicut的結合。我本身對這部分的理解以下。orm
輸入有三種:blog
其中,u,v是兩個超像素,l,l'是他們的label。
爲了給全部超像素選取標籤(xu,l=1表示超像素u標註爲l)採用conditional random field(CRF),這裏先假設同標籤的超像素之間不存在邊緣。
利用已有的數學工具可有效的對最後一個方程式求解。
爲了分割屬於不一樣物體但被標爲同一類別的像素,採用multicut的方法。
最後一個方程的不等式約束,使得圖中全部的cycle只能包含0個或2個以上cutting edge。設想若是沒有第二個cutting edge那麼必定存在一個cycle能夠聯通兩個區域,即沒法造成聯通域;若是有2個或以上cutting edge則能夠將cycle完全階段,只能造成區域內和區域外的循環。 一樣,利用已有的數學工具可有效的對方程式求解。
最後,爲了同時對上述兩個問題求解,只須要優化一個共同的目標,即:
這類方法比較多,如著名的mask RCNN就屬於這種方法,思路是先進行檢測,再對檢測框中的內容進行分割。
我選的這篇文章Instance-aware semantic segmentation via multi-task network cascades [11] 年代更早一點,從結構圖中,能夠清晰的看到先進行類別無關的物體檢測(rpn),而後對框內的部分估計一個類別無關的mask,最後對mask進行分類(與[1]方法類似)。
注意在stage3上再加入一個額外的box regression支路,這個結構就能夠進行屢次疊加。
這裏介紹Fully convolutional instance-aware semantic segmentation [12],把它分爲simutaneously不知道是否合適,不過這個方法確實比較不一樣。
因爲物體的部件很難徹底重合在一塊兒,那麼經過部件位置+類別就能夠區分出不一樣物體,於是採用inside score map。outside score map是爲了同時進行檢測和分割任務,outside部分雖然不屬於物體,可是對bounding box有貢獻,也須要有響應,於是又設置了outside score map並使用pixel-wise max的方式對inside和outside map進行結合,投票出檢測結果。