作者:我愛機器學習(52ml.net)
連結:https://www.zhihu.com/question/52143412/answer/130037578
在只需要時候輸出image含有object的label而不需要定位的情況下,使用multi-label訓練一個分類網絡(例如 resnet)能否達到object detection的效果。跟Faster R-CNN系列的方法比起來,結果相差會很大嗎?
by Julius
問題分析只需判斷是否含有目標而不需要定位時候Multi-Label是非常合適的,當然用Faster R-CNN之類也是可以的,只是有點殺雞用牛刀,因為其中最重要也最複雜的定位你根本就用不著。當然就算真的用Multi-Label,R-CNN和SSD/YOLO之類的思想是非常值得借鑑的。
從定義上來說,分類(Classification)、定位(Localization)和檢測(Detection)的區別如下:
分類:是什麼?
定位:在哪裡?是什麼?(單個目標)
檢測:在哪裡?分別是什麼?(多個目標)
其中檢測=分類+定位,下圖是對應的例子:
(1)目標分類
(2)目標定位
(3)目標檢測
那麼題主只需判斷是否含有目標而不需要定位的問題是屬於分類範疇的,只是因為是多個目標,並不是普通的二分類問題,這個問題的一種直接解決方案正是Multi-Label。
Multi-Class v.s. Mult-Label v.s. Multi-Task那麼首先來區分幾個概念:
Multi-Class Classification多分類問題,比如常見的OCR問題是多分類問題,Detection中針對每個候選框的分類是多分類問題。
傳統的解決辦法是拆成二分類問題,然後使用SVM等傳統分類器,分拆的方法有一對一、一對多等。但在這類問題中,輸入的圖片或者候選框默認是最多含有一類物體的,比如要麼是車、要麼是人、要麼是貓等其它分類。
Deep Learning中Softmax是再自然不過的解決方案。團隊中有同學之前問過我一個相關問題:為何傳統的機器學習多分類要拆成二分類來做,而不是直接用Softmax?我的理解是傳統的分類模型大多是LR、SVM或者GBDT,天生都是做二分類的。LR、FTRL之類在計算廣告點擊率預測、推薦等領域廣泛使用,一般來說就是經典的二分類業務;SVM在視覺之類應用很廣泛,都是提完複雜的視覺特徵之後套一層SVM;GBDT則在競賽之類中大放異彩,也在很多業界應用中取得成功。那時候其實Softmax大家也在用,但是有些是場景不合適(本身是二分類問題),有些可能是效果不行(淺層),比如人工提了很多有效特徵之後,SVM之類是要秒殺全場的;另外可能也有慣性思維,更多的目光都投在SVM之類上。從另一個角度分析就是神經網絡的血淚史,老早就有帶著Softmax的神經網絡了,但是數據量和計算力不夠導致層次不能太深,效果也上不去。(這塊純屬是個人猜測,不當之處煩請指出)
Multi-Label Classification多標籤問題。輸入的圖片或候選框含有多個物體,標註的label也是多個,比如下圖的標籤有:貓、狗。
傳統的Multi-Label也有拆為二分類來解決的,但Deep Learning盛行的今天,全連接層後套多個Logistic輸出是一種性價比很高的做法。
Multi-Task顧名思義,有多個任務。典型的例子是Fast RCNN,同時做Softmax分類和bbox的回歸,這是兩個完全不同的任務。
如果多個任務都是二分類的話,這種Multi-Task就是一種廣義上的Multi-Label。
一般來說,Multi-Task的不同任務之間區別較大,所以往往不共享所有層,比如上圖中的Fast RCNN就是獨立的兩個全連接層(FC),根據你任務之間的區別大小,可以決定在不同的層開始分道揚鑣。這種底層共享,高層分道揚鑣的做法也是Transfer Learning,這篇不再展開。
個人理解,連最後的全連接層都共享的多個二分類的Multi-Task就是Multi-Label。
解決方案扯遠了,總之,題主這個問題是Multi-Label的分類問題,不是檢測(Detection)問題,解決這個問題有幾種可能的解決方案:
1. 直接用Faster R-CNN也是可以的,浪費就浪費了,因為牛刀是現成的(感謝開源!),最終就是對位置信息視而不見,只處理分類信息。
最終的解決方案可能類似Faster R-CNN:對每個Anchor Box對應的區域進行object/non-object二分類,並用k個回歸模型(各自對應不同的Anchor Box)微調候選框位置與大小,最後進行目標分類,最後綜合各路分類結果。
2. 使用去掉回歸部分的Fast R-CNN之類,也就是只做區域提名和分類,然後再綜合一下分類結果即可。
最終的解決方案可能為:對每個Anchor Box對應的區域進行目標分類(softmax共n 1路輸出,n個類別加一個非目標類別),也可以先進行object/non-object二分類,再進行n路輸出的目標分類,最後綜合各路分類結果。
這種方案在速度上應該更快,但效果可能比第一種差,因為提名的候選框可能有偏差,導致分類的置信度不高,從而引入部分誤差。當然,可以針對這種置信度不高的候選框再進行微調,也可以在提名時儘量多保留一些候選框,但這個可能又要影響速度了。
3. 用Selective Search RPN之類從圖片或卷機層中挑選一些候選框,每個候選框可以單獨進行Multi-Label的識別。這個地方也許可以發paper,動機部分大概可以這樣寫:R-CNN大多是用Selective Search之類在原圖或卷積特徵層上進行候選框的提名,分類一般採用Softmax進行,因為歸一化的影響,做不到同時識別多個目標,但本文提出的Multi-Label方法可以很好的解決這個問題……當然,Multi-Label、Multi-Task、Transfer Learning這些水很深,再加上Deep Learning是當前熱點,這方面的paper再灌個三五年問題不大。
4. 借鑑SSD的思想
SSD的核心思想除了延續YOLO的端到端,更重要的是支持不同尺度的目標識別。比如下圖中大尺度的紅框負責定位狗,小尺度的籃框可以定位貓。
SSD的網絡分為兩部分,前面的是用於圖像分類的標準網絡(去掉了分類相關的層),後面的網絡是用於檢測的多尺度特徵映射層,從而達到檢測不同大小的目標。SSD和YOLO的網絡結構對比如下圖所示:
可選的方案有:
1)直接用SSD,綜合最終的分類;
2)替換SSD中最終的分類層為Multi-Label,這個模型看上去是個很經典的端到端的Multi-Class分類模型,剩下的最重要的事情是準備大量合適的標註數據。
5. 我愛機器學習QQ群中的「一狼」在討論中提到目標檢測中的框這種方式反而增加訓練的難度,可以嘗試語義分割的方法。
確實是這樣的,目標檢測目前的區域提名或者SSD之類的大小框選擇都是比較暴力的,在ImageNet這種特定數據上其實是有點過擬合了,因為ImageNet上的物體大多能被這樣的框框中,而且每個框也只需要負責一個目標即可。
FCN語義分割與檢測相結合也是一個不錯的研究點。當然如果是應用,選擇一些適合自己的框也是性價比較高的方法,比如只做電線桿檢測,就規定瘦長的框即可。
還會有很多種Multi-Label的結合方式,歡迎大家補充。
R-CNN/YOLO/SSD(具體可以參考我們公眾號的文章:#Deep Learning回顧#之基於深度學習的目標檢測)都非常靈活,有很多可以創新的點,Multi-Label只是其中一個點。
Multi-Label的綜述可以參考周志華老師的《A Review on Multi-Label Learning Algorithms》:http://cse.seu.edu.cn/people/zhangml/files/TKDE%2713.pdf
歡迎加入我愛機器學習QQ6群:337537549