在目標檢測的實際應用中,常常會出現需要泛化的目標檢測系統(tǒng)的情況。如城市安防中,需要目標檢測系統(tǒng)能夠檢測足夠多類別的目標,才能達到更好的安防效果。 但目前常用的目標檢測數據集中包含的類別數量有限,使用單個數據集訓練的目標檢測模型已經不能滿足需求,如何集成訓練多個數據集成為了一大熱門研究方向。 如果簡單的將多個數據集拼接起來進行訓練,往往不會獲得性能上的提升。主要原因有以下三點: 各數據集的標簽空間不統(tǒng)一 每個數據集都規(guī)定了各自的標簽空間,并且不同標簽空間之間有重疊。但名字相同的標簽在不同數據集中的語義可能不同,如COCO中的mouse代表鼠標,OpenImages中的mouse代表老鼠;名字不同的標簽在不同數據集中的語義可能相同,如VOC中的aeroplane和COCO中的airplane均代表飛機。 如果單純通過標簽的名稱來對齊會導致標簽語義上的歧義。 各數據集的標注不一致 由于各數據集的標簽空間不統(tǒng)一,導致各數據集的前景背景定義不同。如圖1中所示,A數據集中包含person、car類別,但不包含face類別。B數據集中包含person、face類別,但不包含car類別。那么在各自的標注中,A數據集會將car作為前景標注出來,但會將face作為背景忽略;而B數據集會將face作為前景標注出來,但會將car作為背景忽略[2]。這樣就導致了不同數據集之間的前景背景定義存在歧義。 圖1 標注不一致問題 各數據集的領域差異 圖2 領域差異問題 由于篇幅有限,本文只介紹一種通過“構建統(tǒng)一標簽空間”來集成訓練多個數據集的論文《Simple Multi-dataset Detection》[1]。這里會概述一下論文中的方法,分析其實驗結果,并簡單介紹代碼使用方法,以幫助讀者更好地了解集成訓練。 方法 UT-Austin提出了一種在多個大型數據集(COCO,Objects365,OpenImages等)上訓練通用目標檢測器的簡單方法,并基于此方法奪得了ECCV2020魯棒視覺挑戰(zhàn)賽中的目標檢測和實例分割兩個賽道的第一名。 圖3 不同類型的目標檢測模型 傳統(tǒng)的目標檢測模型如圖3(a)所示,單個數據集對應單個模型,這樣用COCO數據集訓練的模型并不能用于檢測Objects365數據集的目標。所以作者采用圖3(b)的方式訓練一個multi-head(多檢測頭)模型,共享模型的backbone,對于不同的數據集使用不同的檢測頭,每個數據集的loss單獨計算。這樣訓練出來的模型可以識別多個數據集中的目標,不過當前的模型并沒有做到統(tǒng)一標簽空間,如COCO、Objects365、OpenImages均檢測出Car類別的目標,但會輸出三個重復的檢測框。 但通過這種方式,我們獲得了統(tǒng)一標簽空間的基礎,在同一張輸入圖片上可以獲得各數據集檢測頭的檢測結果,這樣就可以通過對比檢測結果來對齊不同數據集的標簽。 作者提出了一種新穎的data-diven方式來學習統(tǒng)一的標簽空間:根據不同檢測頭在各數據集驗證集合上的檢測結果來學習標簽空間。作者將標簽空間的融合看作學習一個原始空間 ![]() 而具體的優(yōu)化目標為以下公式: ![]() ![]() 表1 不同Sampling策略效果 如表1 所示,作者對比了在不同sampling策略下的效果。其中uniform dataset sampling表示平衡不同數據集間的樣本數量;class-aware sampling表示平衡數據集內的長尾效應,增加尾部類別被sample的概率。 從結果可以看出uniform dataset sampling和class-aware sampling都是十分重要的。 實驗結果 作者使用了ResNet-50 backbone的CascadeRCNN進行實驗。首先如表2所示,作者提出的多檢測頭模型在不融合標簽空間的情況下已經可以比擬單檢測頭模型(8x schedule),為后面學習標簽映射矩陣提供了可靠的檢測結果。 表2 多檢測頭模型與單檢測頭模型效果對比 通過上述方法學習到統(tǒng)一標簽空間后,在表3中作者對比了不同版本統(tǒng)一標簽空間對模型性能的影響(2x schedule)。 ● GloVe embedding表示使用GloVe詞向量合并相似的標簽; ● Learned,distortion和Learned,AP表示使用論文中提出的方法,通過不同優(yōu)化損失函數學習到的統(tǒng)一標簽空間。 ● Expert human表示人工手動合并的統(tǒng)一標簽空間。 表3 不同版本標簽空間效果對比 表4 在其他數據集上的泛化性能 最后如果將模型規(guī)模擴大,使用ResNeSt200作為backbone并訓練8x schedule,模型的效果可以和一些SOTA模型相媲美。
作者對學習到的統(tǒng)一標簽空間進行分析,發(fā)現該方法成功的將名字相同但語義不同的標簽分開,將名字不同但語義相同的標簽融合到一起。 作者開源了論文的代碼,下載地址: https://github.com/xingyizhou/UniDet 該論文依賴detectron2框架,需要先按照說明安裝detectron2。說明文檔:https://detectron2./en/latest/tutorials/install.html 安裝好detectron2后需要將該論文代碼放到projects目錄下: cd /path/to/detectron2/projects 推薦將需要的COCO,Objects365,OpenImages(使用2019 challenge版本)數據集下載到統(tǒng)一的文件夾。(下載地址:https://storage./openimages/web/challenge2019.html) 下載好的COCO和Objects365可以直接使用,但OpenImages需要進行轉換:
按下面的命令將DETECTRON2_DATASETS變量指向下載數據集的文件夾,使detectron2可以讀到數據集。 export DETECTRON2_DATASETS=/path/to/datasets 接下來需要下載challenge-2019-label500-hierarchy.json文件。(下載地址:https://storage./openimages/challenge_2019/challenge-2019-label500-hierarchy.json) 并將UniDet/unidet/evaluation/oideval.py文件中的oid_hierarchy_path修改到該文件實際路徑。 ![]() 另外在UniDet/configs/中可以看到與OpenImages數據相關的config文件中有一項openimages_challenge_2019_train_v2_cat_info.json文件在代碼倉庫中并沒有給出。 通過觀察訓練代碼可得知該文件中存放有OpenImages數據集各類別的圖片數量統(tǒng)計信息,可自行對OpenImages各類別的圖片數進行統(tǒng)計來生成,具體格式如下:
至此,全部準備工作完成,可以開始訓練。如果想以2x schedule訓練一個多檢測頭模型,則可通過以下命令行實現: python UniDet/train_net.py --config-file UniDet/configs/Partitioned_COI_R50_2x.yaml ![]() 本文提到的相關數據集免費、高速檢索、下載地址: ● COCO 2014 https:///COCO_2014?source=bXBXZWl4aW4%3D ● COCO 2017 https:///COCO_2017?source=bXBXZWl4aW4%3D ● Objects365 https:///Objects365?source=bXBXZWl4aW4%3D ● OpenImages Challenge 2019 https:///Open_Images_Challenge_2019?source=bXBXZWl4aW4%3D ● OpenImages V4 https:///Open_Images_V4?source=bXBXZWl4aW4%3D ● OpenImages V6 https:///OpenImagesV6?source=bXBXZWl4aW4%3D |
|
來自: mynotebook > 《待分類》