<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          目標檢測類算法比賽的經(jīng)驗總結

          共 8925字,需瀏覽 18分鐘

           ·

          2021-05-22 11:42

          全網(wǎng)搜集目標檢測文章,人工篩選最優(yōu)價值知識

          編者薦語
          文章中作者整理了自2019年10月份到2020年5月底,作者參加過的目標檢測類算法比賽的參賽收獲。包括:宮頸癌風險智能檢測診斷 、水下目標檢測算法賽與淘寶直播商品識別。

          參賽經(jīng)歷

          阿里天池:“數(shù)字人體”視覺挑戰(zhàn)賽 - 宮頸癌風險智能檢測診斷 [1]

           Info  2019.10.24 - 2019.11.21,目標檢測,21/2358


          Kesci:2020年全國水下機器人(湛江)大賽 - 水下目標檢測算法賽 [2]

           Info  2020.2.28 - 2020.4.11,目標檢測,31/1.3k


          阿里天池:天池新品實驗室 - 淘寶直播商品識別 [3]

           Info  2020.2.12 - 2020.5.23,檢索匹配,已棄賽


          我將按照以下目錄結果進行內容的總結:
          一、數(shù)據(jù)研究
          二、數(shù)據(jù)準備
          三、參數(shù)調節(jié)
          四、模型驗證
          五、模型融合
          六、題外話

          一、數(shù)據(jù)研究
          獲取數(shù)據(jù)后的第一件事是了解并探索數(shù)據(jù),這個步驟在數(shù)據(jù)分析領域叫做探索性數(shù)據(jù)分析EDA(Exploratory Data Analysis)。而在CV領域也需要這步,關于目標檢測,我會從給定數(shù)據(jù)的具體內容來進行以下研究:
          1. 圖像:
          a. 寬高頻次圖:
          決定圖片預處理方式。例如:像宮頸癌病理圖屬于高分辨率圖片,那后續(xù)就得切小圖準備合適的數(shù)據(jù)。
           了解數(shù)據(jù)采樣方式。例如:在水下檢測賽里,就發(fā)現(xiàn)雖然有5種不同的寬高搭配,但它們的寬高比就兩種:1.22和1.78,說明其水下拍攝采樣的設備可能就有兩種畫幅寬高比,只是畫幅大小可能比較多變,導致出現(xiàn)寬高比相同下但分辨率不同的圖片。
          b. 可視化:了解數(shù)據(jù)真實質量,采樣環(huán)境等。

          2. 類別標簽
          a. 類別頻次圖:是否存在類別不平衡問題,如果類別嚴重不平衡,可能需要做額外的數(shù)據(jù)增廣操作,最好研究下類別不平衡的原因,有可能是重復圖片或者標注問題導致的,例如Kaggle上的鯨魚尾巴分類大賽,它數(shù)據(jù)集中存在很多重復的圖片,而且同一張圖片存在多類別標注。

          3. 標注框:
          a. 寬高散點圖:在訓練尺度設置下,判斷模型感受野是否設置合理 [4]。在訓練模型前,圖片往往要被Resize到給定的訓練尺度(或多尺度),那么在繪制散點圖前,要先將原標注框Resize到最大的給定尺度下,去繪制它Resize后的標注框寬高分布圖。之后選取Backbone模型時,應考慮模型感受野盡量大于多數(shù)標注框的長邊。
          b. 各類下寬高比頻次圖:是否個別類別存在極端寬高比情況,極端寬高比需要對錨點框相關默認設置(即Anchor Ratio 和 Anchor Scale)進行調整。
          c. 各類下框面積大小頻次圖了解數(shù)據(jù)大/中/小目標的情況,尤其注意小目標,其次是大目標。小目標難檢測。而在高分辨率上的過大目標可能需要合適的手段進行切分,例如宮頸癌切片里的Candida異常細胞(大多數(shù)目標的寬/高大于1000)。
          以上只是一些基本需要做的數(shù)據(jù)研究操作,但事實上,數(shù)據(jù)的處理還要基于數(shù)據(jù)的特殊性做額外的補充研究。這塊數(shù)據(jù)研究的一些內容可以參考下鄭燁選手在天池上的分享 [5]。

          二、 數(shù)據(jù)準備
          數(shù)據(jù)研究完后,就需要準備數(shù)據(jù),簡單來說就是數(shù)據(jù)預處理和數(shù)據(jù)集劃分。
          1. 數(shù)據(jù)處理:
          a. 線下數(shù)據(jù)增強:這塊內容與“三、參數(shù)調節(jié) – 1. 訓練前 – 數(shù)據(jù)增強”重復,這里不做闡述。
          b. 訓練和測試集統(tǒng)一化:有時候訓練集和測試集存在分布不統(tǒng)一,例如:采樣方式/地點不一致,標注人員/方式不一致??赡艿脑?,盡可能保證它們的一致性,比如在水下目標檢測里,訓練集和測試集是在不同的水下深度拍攝的,那么圖像色調就可能會不統(tǒng)一,如果你對訓練集做去霧或一些后處理操作的話,需要考慮是否對測試集也得提前做相同的數(shù)據(jù)處理操作。另外,在Kaggle X光肺炎檢測比賽 [6] 中,訓練集是由唯一的專家標記,而測試集是由三名獨立的放射醫(yī)師標記,這種情況下,使用他們標記的交集用于標簽真值可能可以更好地統(tǒng)一訓練和測試集的標簽分布。

          2. 數(shù)據(jù)集劃分
          a. 傳統(tǒng)劃分法:傳統(tǒng)方法就是直接按比例劃分,例如原數(shù)據(jù)80%劃為訓練集,20%劃為測試集。
          b. 分層抽樣法式劃分:按照規(guī)定的比例從各類下抽取一定的樣本,優(yōu)點是抽取的樣本考慮到了類別。在該劃分的測試集上,后續(xù)驗證會有更全面且客觀的結果。
          c. Domain劃分法:按照規(guī)定比例從各Domain下抽取一定的樣本。該方法是我在參加水下目標檢測比賽中,聽鄭燁選手提到的一個劃分方法,當時水下圖像集是在不同年份、不同水下地點和不同設備拍攝的幾段視頻中截圖標注得到的。因此可以考慮針對不同年份/不同拍攝視頻段/設備,劃分好Domain后,再從這些Domain下抽取一定比例的樣本。
          d. K折劃分法:在 [6] 中,參賽者就將相同模型的四折交叉驗證的輸出合并,進而檢驗模型的結果。
          在數(shù)據(jù)集劃分中,提到的四種數(shù)據(jù)集劃分方法可以相互結合使用,例如Domain下分層抽樣式劃分,不同的劃分方法耗費的時間都不一樣,一般我是建議如下:
           各類數(shù)據(jù)量大且較平衡:傳統(tǒng)劃分法。
           類別不平衡且某類數(shù)據(jù)少:分層抽樣式法。
           有明顯Domain且Domain數(shù)較少:Domain劃分法。
           數(shù)據(jù)量較小或算力充足:K折劃分法。

          三、參數(shù)調節(jié)
          我比較喜歡目標檢測工具箱mmdetection [7],它已經(jīng)封裝好很多SOTA目標檢測方法的相關代碼,很多時候你只需要調參即可。因此這部分我稱之為“參數(shù)調節(jié)”,但實際上,下面有些內容還是需要額外的編寫代碼。
          接下來,我將以訓練前/中/后三個過程中存在調節(jié)可能的參數(shù)或方法進行如下總結:
          1. 訓練前:
          a. 數(shù)據(jù)增強:
           空間不變性:神經(jīng)網(wǎng)絡模型具有空間不變性,為了解決它,一般需要采用一些空間增強手段例如平移、旋轉、翻轉、縮放、實例平衡增強 [7]等。
           噪聲:神經(jīng)網(wǎng)絡模型有時候過于依賴訓練數(shù)據(jù),缺少推斷能力而影響通用性,即使人眼能識別出噪聲圖片里的目標,但模型卻不太行,所以為了讓模型更加魯棒,可以考慮在訓練集內加入高斯噪聲、椒鹽噪聲等對模型進行干擾。
           目標遮擋或重疊:如果數(shù)據(jù)研究時發(fā)現(xiàn)存在多框重疊現(xiàn)象,或者存在目標遮擋,可以試著采用Cutout [9] 或Mixup [10] 等。
           過采樣:有時候整體數(shù)據(jù)量過少,或某類別數(shù)少導致類別不平衡,可以考慮使用copy-paste [10] 、泊松融合 [11]等技巧,但要注意,增強的目標不要過于突兀,不然會造成模型過擬合。
           圖像模糊:圖像模糊的原因有很多,例如:鏡頭模糊,霧天圖像,水下光線散射等,對此的數(shù)據(jù)增強手段有中值/高斯/動態(tài)模糊、去霧算法 [13], MSRCR [2]等。
           其它標簽平滑 [10], 色調歸一化 [2],Albumentation圖片數(shù)據(jù)增強庫 [14] 等。以上所有數(shù)據(jù)增強方法分線上和線下兩種使用方式,不同數(shù)據(jù)增強方法之間存在功能重疊,基本都能在一定程度上減少模型過擬合,但也可以會有過擬合的可能(例如copy-paste和實例平衡增強等會重復部分數(shù)據(jù)集的可能)。

          2. 訓練時:
          a. 訓練尺度:根據(jù)顯存和時間安排設置訓練是否采取多尺度,正常來說,尺度越大越好,小目標能更好的被檢測到,但也存在尺度調整過大,圖片失真。在設置尺度上,我一般是放開Resize對長邊的依賴(即長邊至少為:訓練原圖尺寸最大長短比 * Resize短邊上限),mmdetection論文提到提高短邊上限能帶來提升
          b. 測試尺度取訓練尺度的中間值即可。假設訓練多尺度設置是[(4096, 600), (4096, 1000)],那么測試尺度如果你想設為單尺度,可以是(4096, 800),如果是多尺度,可以是[(4096, 600), (4096, 800), (4096, 1000)]。測試多尺度會更好些,但推理速度會變慢。
          c. Anchor (scales & ratios)正常來說,錨點框的設置保持默認配置就好,但是如果遇到某類別目標是極端長寬比,則可能需要根據(jù)數(shù)據(jù)研究的結果適當調整下錨點框寬高比率,而錨點框大小scale相對來說不太需要對其進行過多調整。我之前試過使用YOLOv2中提到的K-means來獲取Anchor聚類結果,進而調整Anchor的設置,但是結果不太理想,據(jù)微文 [4] 作者所說,實際感受野是一個超參,無法準確求出,K- means聚類Anchor得到的范圍實際上不一定有默認Anchor的廣。簡而言之,就是不要亂動默認的配置,可以添加多一個Anchor Ratio,但不建議自行胡亂調參。
          d. Backbone:目標檢測的主干網(wǎng)絡很多,選擇主干網(wǎng)絡的第一要素就是得先確認模型的感受野是否盡可能大于數(shù)據(jù)集多數(shù)標注框的長邊。當你確定了訓練尺度,選擇最大Resize比例去繪制標注框寬高散點圖,然后選取合適的模型Backbone。如果模型感受野太小,只能觀察到局部特征,不足以得到整個目標的信息;如果感受野過大,則會引入過多的無效信息。現(xiàn)在計算感受野有兩種方法:(1)從上往下法:即從低層到高層,這種方法計算更便捷些,但只適用于比較有限的卷積,且由于沒有處理由Stride引起的抽取像素重疊的問題,使得計算的感受野會偏大些;(2)從下往上法:即從高層到低層,計算感受野是通過遞推計算,它很準確。這里不詳細展開,詳情計算方式可見 [4]。限制一些SOTA的主干模型有:ResNet, ResNeXt, DenseNet, SENet等。此外,如果存在極端寬高比的目標,可以使用可變形卷積網(wǎng)絡(Deformable Convolution Net, DCN)
          e. Neck:用的比較多的就特征金字塔網(wǎng)絡(Feature Pyramid Networks, FPN),對于小目標檢測非常好用。
          f. ROIHead:在mmdetection里RoIHead的作用是幫助模型基于RoI進行預測,現(xiàn)在比較受歡迎的模型是Cascade R-CNN,它級聯(lián)三個不同IOU閾值(0.5,0.6,0.7)的頭,但在2019廣東工業(yè)智造創(chuàng)新大賽決賽 [15] 上,某團隊針對評測mAP要求的IOU閾值0.1、0.3和0.5,降低了級聯(lián)的閾值至0.4、0.5和0.6,從而獲得了提升,說明寬松評測下,級聯(lián)頭閾值可適當減低以獲取更多的預測框,這種方式可能會提升性能。另外,在天池”重慶大賽-瓶裝白酒疵品質檢”里,好像也還有選手通過增加多一個head,在某種程度上幫助模型更好的擬合數(shù)據(jù),但不一定在每個賽題數(shù)據(jù)上都起作用。
          g.混合精度訓練: 開啟fp16能加快模型運算速度。
          h.學習率:學習率的設置應參考論文 [16]. 該論文提到在使用多GPU并行進行Minibatch SGD的行為被稱作Large Minibatch SGD。假設有k個GPUs,那么Large Minibatch size =k * Minibatch size(即mmdetection中的img_per_batch),此時多GPU下學習率 = 單GPU下的Lr * k??偨Y來說,Lr = GPU數(shù)量 * Minibatch Size * 0.00125。
          學習率在衰退前使用warmup會好些,衰退策略使用Cosine會比Step更快幫助模型擬合數(shù)據(jù)。此外,mmdetection作者認為像多尺度訓練這樣的訓練增強應該需要24epoch數(shù)進行訓練,但一般來說1x的訓練epoch數(shù)就能應付較多的場景。個人認為,1x(2epochs)和2x(24epochs)的選擇得看訓練后的損失曲線或mAP曲線的表現(xiàn)來決定。

          3. 訓練后:
          a.如果EDA發(fā)現(xiàn)存在大量同類下多框重疊,例如水下圖像中經(jīng)常多個海膽目標重疊,建議使用Soft NMS。此外,在mmdetection中NMS都是在類內完成的,如果EDA發(fā)現(xiàn)數(shù)據(jù)不存在類間重疊(這種情況比較少發(fā)生),則可以考慮自己額外補充類間NMS(即所有類下的框一起NMS)。

          四、模型驗證
          模型驗證階段看三個曲線:各類別AP曲線、不同IoU下的MAP曲線、損失曲線。
          1. AP曲線:發(fā)現(xiàn)哪個類別的目標檢測效果差,后續(xù)可以針對表現(xiàn)差的類別進行模型改進,例如: 專家模型,改變數(shù)據(jù)處理方式等。
          2. MAP曲線: 更好的貼合比賽的評測指標,給出最直觀的結果。
          3. 損失曲線: 觀察模型擬合表現(xiàn),如果模型損失下降過快或過慢,可適當調節(jié)學習率或學習率衰減節(jié)點的設置。

          五、模型融合
          1. 融合選擇
          在知乎上,[17]  提供了關于模型集成的幾種選擇:
          a. 同樣的參數(shù),不同的初始化方式
          b. 不同的參數(shù),通過交叉驗證,選取最好幾組。
          c. 同樣的參數(shù),不同迭代次數(shù)訓練下的。
          d. 不同的模型,線性融合,例如RNN和傳統(tǒng)模型。

          2. 融合方式:
          a.  直接合并: 就是根據(jù)驗證集的表現(xiàn),選取不同模型設置下,最好表現(xiàn)的類別結果進行合并,例如有2個不同的模型設置(設置1和2)且預測類別有2個(類別A和B),類別A在模型設置2下表現(xiàn)最好,而類別B在模型設置1下表現(xiàn)最好,那么最后的提交結果應該由模型設置2下的類別A結果和模型設置1下的類別B結果合并組成。優(yōu)點是該合并比較簡單快速,缺點是它要求驗證集的真實反應能力強,比如之前宮頸癌細胞檢測比賽,數(shù)據(jù)集很大,驗證集表現(xiàn)和線上測試集表現(xiàn)基本一致,它就很適合直接合并模型結果。
          b. WBF: 權重框融合Weighted Boxes Fusion也是比較受歡迎的模型集成方法,它將同類下達到某IoU的框們,進行加權平均得到最終的框,權重為各預測框上預測類別的分數(shù)。WBF有兩種融合思路: 不同backbone的融合和不同結構的模型的融合,據(jù)論文(代碼已開源 [18])所述這種方法比前者提升更大。在使用中要注意,Soft NMS輸出結果要搭配max的置信度融合方法(即在兩個模型預測結果中選擇其中最大的置信度作為平均融合框的置信度,避免平均融合后的結果不會受冗余低分框影響),而普通NMS輸出結果搭配avg融合方式即可。

          六、題外話
          1. 比賽及隊友選擇
          比賽可以根據(jù)個人喜好進行選擇,比賽平臺有很多,阿里天池、Kesci及各大公司在它們官網(wǎng)放的比賽等,個人比較喜歡天池,因為很多時候官方會公布baseline方案,選手可以進行學習,而且交流氛圍且對比賽最終答辯的分享都做得很好,對數(shù)據(jù)錯誤的更新也十分及時,相反地,一些比賽如果后期不公開答辯或選手思路,除非前排大佬主動公開,否則對于抱著學習態(tài)度的參賽者來說很難去獲取優(yōu)秀的項目思路。所以對于剛開始參加比賽的新手來說,要看重是否該比賽的學習價值較高(較易上手但存在深入研究的空間、優(yōu)秀代碼是否會開源、參賽者討論情況等)。后期參加多幾次某個特定領域的比賽后,就可以在之前比賽的基礎上深入去實踐自己的想法。我其實不是太建議剛開始就組隊,因為一般情況大佬不會愿意花過多成本帶新人(要先進入大佬的眼,才有機會合作),而如果你找同水平新人組隊,一個比賽切分幾塊去做的話,你可能會缺乏自我思考和失去熟悉整個比賽項目的機會。最后在自己參加一個比賽后,有個項目實施全貌,再考慮后期組隊。建議一般是在組隊截止前幾天再找隊友,把自己當前成績和背景在比賽群交代好,基本都能找到隊友。至于如何選擇隊友有幾個方面要看:
          a. 時間安排:雙方時間能不能合理的安排在比賽上。
          b. 已有成績:當前比賽成績?有想嘗試的想法沒?
          c. 背景:學生/上班?主要還是時間安排上,另外有服務器資源沒?專業(yè)背景?擅長?過往比賽經(jīng)歷?
          d. 其它:外文閱讀能力,代碼能力,溝通能力等。

          2. 參賽心得
          雖然我參加的比賽不算太多,但確實打比賽能讓疫情空閑的自己有更好的主觀能動性,也讓我結識了很多參賽者,我個人公號開始做的原由其實是為了讓自己以后想要回顧當初比賽項目細節(jié)時,能方便我復盤。我公開比賽思路和代碼的原因除了幫助個人復盤外,還有一個原因是想鼓勵和監(jiān)督自己能認真去記錄這些知識點,因為很多時候,當你寫給自己看和寫給別人看時,是完全不一樣的心態(tài)。開源會讓自己在寫代碼時更注重代碼的可讀性,寫思路分享時更注重實驗細節(jié)的描述。雖然公號更新很少,但還是得到了很多朋友的支持。在參賽過程中,我剛開始主攻目標檢測比賽,因為剛開始不了解,所以輸入了很多論文和思路,并不斷輸出實踐。但到后期就沉迷于調參,不太喜歡看外文文獻或花一定時間研究一些在實現(xiàn)上比較復雜的思路,輸入少而過分輸出是很件不好的事,包括現(xiàn)在我寫這篇比賽經(jīng)驗分享中,我也發(fā)現(xiàn)了有些知識點還不夠深入,只是知其然而不知其所以然,后續(xù)我會陸續(xù)進行知識點掃盲。最后啰嗦一句,我開源的淘寶直播服裝檢索代碼不是個合格的baseline方案(目標檢測網(wǎng)絡和檢索網(wǎng)絡沒有實現(xiàn)端對端的訓練),但考慮到部分數(shù)據(jù)預處理代碼和EDA代碼對一些參賽者可能有幫助,所以我還沒在Github上關閉該倉庫,近期我會關閉該項目避免誤導更多人入坑。

          Github地址 :https://github.com/AlvinAi96
          個人郵箱 [email protected]

          參考文獻:
          [1] 阿里天池大賽項目:“數(shù)字人體”視覺挑戰(zhàn)賽 - 宮頸癌風險智能檢測診斷:
          https://mp.weixin.qq.com/s/ZBeSjLa924h4l4MP0vTInQ
          [2] Kesci大賽項目:2020年全國水下機器人(湛江)大賽 - 水下目標檢測算法賽:
          https://mp.weixin.qq.com/s/Mh8HAjIOVZ3KxWNxciq1mw
          [3] 阿里天池大賽項目:天池新品實驗室 - 淘寶直播商品識別:
          https://mp.weixin.qq.com/s/06Ywh1YHROgyfomZ2836pg
          [4] 目標檢測和感受野的總結與想法:
          https://www.cnblogs.com/pprp/p/12346759.html
          [5] 天池CV賽事老司機,手把手帶你入門目標檢測賽題:
          https://tianchi.aliyun.com/course/video?spm=5176.12282027.0.0.2be8379cwYiIGM&liveId=41141
          [6] Kaggle X光肺炎檢測比賽第二名方案解析 | CVPR 2020 Workshop:
          https://mp.weixin.qq.com/s/X3JoTS3JqlT1uxFpChujRA
          [7] mmdetection目標檢測工具箱:
          https://github.com/open-mmlab/mmdetection
          [8] 兩年三刷Pascal VOC最佳紀錄,阿里圖靈實驗室怎樣解決目標檢測:
          https://baijiahao.baidu.com/s?id=1652911649267060207&wfr=spider&for=pc
          [9] Improved Regularization of Convolutional Neural Networks with Cutout:
          https://arxiv.org/abs/1708.04552
          [10] Bag of Freebies for Training Object Detection Neural Networks:
          https://arxiv.org/abs/1902.04103
          [11] Augmentation for small object detection:
          https://arxiv.org/abs/1902.07296v1
          [12] Poisson Image Editing:
          https://www.cs.virginia.edu/~connelly/class/2014/comp_photo/proj2/poisson.pdf
          [13] 【綜述】圖像去霧的前世今生:
          https://mp.weixin.qq.com/s/SKJy8X5_UH8-W1yFRDQEoA
          [14] Albumentations數(shù)據(jù)增強庫:
          https://github.com/albumentations-team/albumentations
          [15] “數(shù)據(jù)引領飛粵云端” 2019廣東工業(yè)智造創(chuàng)新大賽-決賽答辯直播 - 《布匹疵點智能識別賽道》:
          https://tianchi.aliyun.com/course/video?liveId=41117 
          [16] Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour:
          https://arxiv.org/abs/1706.02677
          [17] WBF開源代碼:
          https://github.com/ZFTurbo/Weighted-Boxes-Fusion
          [18] 知乎:你有哪些deep learning(rnn、cnn)調參的經(jīng)驗?:
          https://www.zhihu.com/question/41631631

          ?------------------------------------------------


          雙一流高校研究生團隊創(chuàng)建 ↓

          專注于目標檢測原創(chuàng)并分享相關知識 ?


          整理不易,點贊三連!

          瀏覽 106
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亲子伦视频一区二区三区 | 搞搞中文字幕 | 国产精品久久久久久69 | 高清操逼视频 | 成人网站www污污污免费网站 |