使用Multi-Label訓練CNN能否達到Detection的效果?

2021-01-14 我愛機器學習

作者:我愛機器學習(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

相關焦點

  • Multi-Label Classification with Deep Learning
    Neural network models can be configured for multi-label classification tasks.How to evaluate a neural network for multi-label classification and make a prediction for new data.
  • mmdetection使用目標檢測工具箱訓練,測試
    相比 FAIR 此前開源的 Detectron,mmdetection 有以下幾大優勢:    Performance 稍高    訓練速度稍快:Mask R-CNN 差距比較大,其餘的很小。    所需顯存稍小: 顯存方面優勢比較明顯,會小 30% 左右。
  • Mask R-CNN官方實現「又」來了!基於PyTorch,訓練速度是原來2倍
    除了更改框架,Mask R-CNN Benchmark相比它的「前輩」Detectron,訓練速度提高了一倍。Detectron效果輸出圖Mask R-CNN Benchmark是一個完全由PyTorch 1.0寫成,快速、模塊化的Faster R-CNN和Mask R-CNN組件。
  • 入門| CNN也能用於NLP任務,一文簡述文本分類任務的7個模型
    那時我建立了一個簡單的模型:基於 keras 訓練的兩層前饋神經網絡。用組成推文的詞嵌入的加權平均值作為文檔向量來表示輸入推文。 我用的嵌入是用 gensim 基於語料庫從頭訓練出來的 word2vec 模型。該是一個二分類任務,準確率能達到 79%。
  • 經典目標檢測方法Faster R-CNN和Mask R-CNN|基於PaddlePaddle深度...
    對於機器學習方法,首先使用 SIFT、HOG 等方法定義特徵,然後使用支持向量機 (SVM)、Adaboost 等技術進行分類。對於深度學習方法,深度學習技術能夠在沒有專門定義特徵的情況下進行端到端目標檢測,並且通常基於卷積神經網絡 (CNN)。但是傳統的目標檢測方法有如下幾個問題:光線變化較快時,算法效果不好;緩慢運動和背景顏色一致時不能提取出特徵像素點;時間複雜度高;抗噪性能差。
  • 分類問題-----多標籤(multilabel)、多類別(multiclass)
    另外,以下幾個問題是需要關注和進一步研究的Dimensionality Reduction 降維Label Dependence 標註依賴Active learning 主動學習Multi-instance multi-label learning (MIML) 多實例多標籤Multi-view
  • MMDetection v2.0 訓練自己的數據集
    這個項目是打算記錄安裝環境,訓練模型最後到源碼解析。1 新建容器進入正題 mmdetection docker環境上次已經介紹一次了 ,現在我們新建一個容器sudo nvidia-docker run -shm-size=8g -name mm_det -it -v /train_data:/mmdetection/datanvidia-docker:新建容器能調用GPU
  • 詳解目標檢測Faster R-CNN
    最後,基於 R-CNN 模塊,得到: 對邊界框內的內容進行分類,(或丟棄邊界框,採用 background 作為一個 label) 調整邊界框坐標,以更好的使用 object顯而易見,上面忽略了一些重要的細節信息。
  • PyTorch實現TPU版本CNN模型
    為了得到更準確的結果,數據的大小是非常重要的,但是當這個大小影響到機器學習模型的訓練時間時,這一直是一個值得關注的問題。為了克服訓練時間的問題,我們使用TPU運行時環境來加速訓練。為此,PyTorch一直在通過提供最先進的硬體加速器來支持機器學習的實現。
  • 使用FastAI 和即時頻率變換進行音頻分類
    librosa是Python中處理音頻效果最好的庫。learn = create_cnn(data, models.resnet18, metrics=accuracy)learn.fit_one_cycle(3)2分14秒後,模型在驗證集(與訓練集完全分離的數據集)上準確度達到了
  • 從R-CNN到YOLO,一文帶你了解目標檢測模型(附論文下載)
    要想進一步了解,可以查看以下PPT和筆記:http://www.image-net.org/challenges/LSVRC/2013/slides/r-cnn-ilsvrc2013-workshop.pdfhttp://www.cs.berkeley.edu/~rbg/slides/rcnn-cvpr14-slides.pdf
  • .| 深度學習理論與實戰:提高篇(14)——​Mask R-CNN代碼簡介
    除了可以使用訓練好的模型,我們也可以用自己的數據進行訓練,為了演示,這裡使用了一個很小的shape數據集。 """ # 起個好記的名字 NAME = "shapes" # 使用一個GPU訓練,每個GPU上8個圖片。因此batch大小是8 (GPUs * images/GPU).
  • 谷歌開源TensorFlow Object Detection API物體識別系統
    創造能夠在同一張圖片裡定位和識別多種物體的機器學習模型一直是業內的核心挑戰之一,谷歌宣稱自己已投入大量時間訓練和實驗此類系統。其中一個模型在示例圖片中(來自 COCO 數據集)對象識別的效果2016 年 10 月,谷歌內部的物體識別系統達到了業內最佳水平,在 COCO 識別挑戰中名列第一。
  • MMDetection 入門|二
    MMDetection實施分布式訓練和非分布式訓練, 它分別使用MMDistributedDataParallel和MMDataParallel。使用單個GPU訓練python tools / train.py $ {CONFIG_FILE}如果要在命令中指定工作目錄,則可以添加參數--work_dir $ {YOUR_WORK_DIR}。使用多個GPU訓練.
  • 如何在PyTorch和TensorFlow中訓練圖像分類模型
    現在讓我們定義架構定義模型架構我們將在這裡使用CNN模型。因此,讓我們定義並訓練該模型:# defining the model architectureclass Net(nn.Module): def __init__(self): super(Net, self).
  • 在多目標識別方面,maskr-cnn已經取得了一些進展
    maskr-cnn是業界首款實用的全卷積神經網絡模型,為計算機視覺中的多目標識別與自動對焦,開創性的成為計算機視覺發展的新方向。無論是基於計算機視覺的自動對焦系統、模式識別系統,還是圖像識別,maskr-cnn都是有標誌性意義的。它強調平滑準確的計算輸入、檢測框和定位點,訓練過程與特徵提取過程採用多級感受野融合技術進行自動優化提高目標解析度及精度,以及做出精度更高的語義推理判斷。