2020 CCF BDCI 遙感影像地塊分割冠軍競賽方案 & 語義分割trick整理

極市導(dǎo)讀
?本文是作者參加CCF BDCI獲得冠軍的比賽經(jīng)驗總結(jié)以及語義分割trick的整理。作者的比賽方案最大的特點是將連通性問題轉(zhuǎn)換為二分類問題解決,結(jié)果優(yōu)異,傳統(tǒng)圖像形態(tài)學(xué)后處理仍然可靠。且無須針對性設(shè)計loss和module,分類器可用多種小模型,實際環(huán)境下并行處理也更快。?>>加入極市CV技術(shù)交流群,走在計算機視覺的最前沿
賽題分析

賽題分析
這次比賽也是第一次正式參加的比賽,地塊分割本質(zhì)上也是個語義分割的問題,之前沒搞過,花了比較多的時間對網(wǎng)上的trick進行了整理學(xué)習(xí),見最后附錄整理的資料。初賽并不困難,主要考慮7類結(jié)果的平均IOU,復(fù)賽加入了對水體和道路類的連通性評判指標(biāo)。最終的方案以較大的優(yōu)勢在A榜和B榜取得了第一名的成績。
數(shù)據(jù)分析

數(shù)據(jù)分析
統(tǒng)計數(shù)據(jù)集中各類面積占比餅狀圖如上圖所示,可以發(fā)現(xiàn)數(shù)據(jù)集中存在類別不均衡現(xiàn)象,建筑、道路和草地類較少,而其他類較多。進一步的統(tǒng)計,可以得知只有分別約7%/10%/13%的圖片滿足建筑/道路/草地面積占比大于1%。數(shù)據(jù)存在極度類別不均衡現(xiàn)象,常規(guī)的方法不適于訓(xùn)練。

baseline分析
結(jié)合baseline結(jié)果可以發(fā)現(xiàn),盡管建筑類數(shù)據(jù)較少,但由于其地貌容易辨識,分類結(jié)果較準(zhǔn)確;而道路和草地類則因為與其他類存在相似性,但訓(xùn)練數(shù)據(jù)不足,結(jié)果較差。因此,提升模型分類能力(MIOU)的關(guān)鍵是解決類別不均衡問題,尤其是道路類和草地類。
思路介紹
整體思路

整體思路
要解決這些問題,直接的方式是使用針對IOU設(shè)計的損失函數(shù)進行re-weighting(如Lovasz-Softmax Loss、 Focal Loss等),但訓(xùn)練較慢,結(jié)果收斂不穩(wěn)定。其次是可以針對特殊類設(shè)計模塊,但結(jié)構(gòu)復(fù)雜且周期長。最終我們借鑒了Adaboost的思想,用不同概率分布的訓(xùn)練數(shù)據(jù)訓(xùn)練一系列弱分類器,并通過投票融合得到強分類器。這里之所以用類似,是因為與Adaboost不同,我們這里的數(shù)據(jù)并不是每輪增加錯誤樣本權(quán)重,弱分類器的**“弱”**也是指特殊類別上弱,融合權(quán)重根據(jù)準(zhǔn)確率與連通性需求人為規(guī)定。
數(shù)據(jù)處理

數(shù)據(jù)處理
為了獲取不同的訓(xùn)練數(shù)據(jù),我們設(shè)計了不同數(shù)據(jù)處理方案:(1) 劃分道路草地類正負(fù)樣本(負(fù)樣本指不包含該類的樣本),多階段逐步增加負(fù)樣本比例(借鑒Bengio的curriculum learning的思想由簡單到復(fù)雜訓(xùn)練,結(jié)果更好收斂);(2) 在原數(shù)據(jù)的基礎(chǔ)上,對道路草地類樣本re-sampling,為了避免過擬合,對重采樣數(shù)據(jù)進行多種數(shù)據(jù)增強(水平翻轉(zhuǎn)+垂直翻轉(zhuǎn)+放縮為0.75/0.875/1.125/1.25倍),與re-weighting相比,簡單直接效果好;(3) 針對建筑/道路/水體類轉(zhuǎn)換處理得到二分類訓(xùn)練數(shù)據(jù)(同樣進行數(shù)據(jù)增強并加入隨機旋轉(zhuǎn)90/180/270度),訓(xùn)練特殊的二分類器,加強模型對特殊類別的前景后景區(qū)分能力。在數(shù)據(jù)增強時,我們還進行了閾值篩選,僅對面積占比較大的圖像進行相應(yīng)處理,直覺上這些數(shù)據(jù)對訓(xùn)練更友好。
值得注意的是,上圖中預(yù)測效果對比可以發(fā)現(xiàn),多分類模型只能識別筆直的道路,部分彎曲的道路難以識別,而二分類模型可以很好地識別彎曲的道路,并且連通性也更好,這也是我們復(fù)賽的主要思路(很長一段時間內(nèi)都比第二名高3-5個點)。
模型訓(xùn)練

模型訓(xùn)練
有了這些數(shù)據(jù),我們訓(xùn)練了一系列以HRNet和OCRNet為backbone的模型。并且我們探索了SE、CBAM、scSE等attention module,最后是采用了提升效果最多的SE attention。由于比賽經(jīng)驗生疏,當(dāng)時訓(xùn)了些許大模型,然而融合后提升微薄,實際上模型差異越大后續(xù)融合結(jié)果一般更好。實際環(huán)境下,若考慮計算開銷,也許訓(xùn)練UNet等諸多小模型融合,效果更好,速度更快。
模型預(yù)測

模型預(yù)測
在測試時,我們進行了多種數(shù)據(jù)增強,包括尺度放縮、水平/垂直翻轉(zhuǎn)、90度倍數(shù)旋轉(zhuǎn)(實際上,原圖+水平翻轉(zhuǎn)+垂直翻轉(zhuǎn)+180度旋轉(zhuǎn)足矣,更多的TTA提升效果很?。5玫竭@些預(yù)測后,我們不是進行softmax分?jǐn)?shù)求和的軟投票,而是逐像素少數(shù)服從多數(shù)的硬投票,并且用二分類預(yù)測逐優(yōu)先級覆蓋多分類預(yù)測,人為地規(guī)定了道路>水體>建筑>其他的優(yōu)先級。這里我們利用多進程+numpy矩陣運算,大大減小了投票花費的時間。
連通性后處理

連通性后處理
最后我們使用形態(tài)學(xué)處理進一步提高了連通性,首先是用閉運算連接斷裂處以及中值濾波去除毛刺;其次用面積和長度篩選閾值孤立像素團,用左邊像素類別進行替換去除;第三是設(shè)計了骨架連通性增強方案,提取出某類的骨架,并適當(dāng)?shù)嘏蛎浉g,保證連通的同時不會過度超出原始預(yù)測區(qū)域;最后是設(shè)計了一個動態(tài)優(yōu)先級算法,動態(tài)地進行不同類別的覆蓋(主要考慮水體與道路類覆蓋優(yōu)先級)。
結(jié)果對比

原圖(左),單模型預(yù)測(中),多模型預(yù)測(右)
最終的結(jié)果輸出如上圖右所示,可以看到最終的預(yù)測圖更加平滑,類別噪點大大減少,并且保證了道路和水體較好的連通性。這里融合的結(jié)果更多考慮了連通性,因而可能存在“誤判”的結(jié)果,實際環(huán)境下可考慮準(zhǔn)確性和連通性的權(quán)衡,調(diào)整閾值和權(quán)值。
總結(jié)
方案最大的特點是將連通性問題轉(zhuǎn)換為二分類問題解決,結(jié)果出奇地好,傳統(tǒng)圖像形態(tài)學(xué)后處理仍然可靠。無須針對性設(shè)計loss和module,分類器可用多種小模型,實際環(huán)境下并行處理也更快。來了新的類別,大可以訓(xùn)練二分類器簡單投票,數(shù)十個迭代即可得到較強的分類器。
整場比賽打下來挺累的,日常翹課熬夜debug,所幸最后結(jié)果尚可。答辯時也認(rèn)識了不少比賽老手,感慨自己經(jīng)驗尚淺,無論是在學(xué)術(shù)上還是工程上,都有很大的進步空間,繼續(xù)努力吧~
最后,有各種比賽、論文合作意愿的小伙伴可私戳,帶帶弟弟,thx~~
附錄-語義分割trick整理
基于SegNet和U-Net的遙感圖像語義分割(https://zhuanlan.zhihu.com/p/58521469)
數(shù)據(jù)增強:原圖與label圖旋轉(zhuǎn)90度的整數(shù)倍(90/180/270),原圖和label圖沿y軸旋轉(zhuǎn),原圖做模糊操作,原圖做光照調(diào)整操作,原圖加噪聲(高斯/椒鹽) 轉(zhuǎn)為二分類:對每一分類訓(xùn)練二分類模型,對預(yù)測圖進行按優(yōu)先級疊加 模型融合:對結(jié)果進行投票疊加 語義分割訓(xùn)練與優(yōu)化技巧(https://niecongchong.github.io/2019/08/20/%E8%AF%AD%E4%B9%89%E5%88%86%E5%89%B2%E8%AE%AD%E7%BB%83%E4%B8%8E%E4%BC%98%E5%8C%96%E6%8A%80%E5%B7%A7/)
幾何變換:水平翻轉(zhuǎn)(遙感還可以垂直翻轉(zhuǎn))、平移、隨機裁剪和縮放(比例需要研究)、旋轉(zhuǎn) 紋理增強:亮度和對比度、色調(diào)飽和度對比度HSV、運動模糊、顏色抖動、限制對比度的自適應(yīng)直方圖均衡化 其他增強:超像素、銳化、透視變換 Airbus Ship Detection 衛(wèi)星圖像分割檢測(https://zhuanlan.zhihu.com/p/48381892)
數(shù)據(jù)擴增,與前面類似,90度倍數(shù)旋轉(zhuǎn)等 TTA單圖多測,單圖多scale投票:https://zhuanlan.zhihu.com/p/131539596 Kaggle 氣胸識別分割比賽新手銅牌總結(jié)及冠軍分案(https://zhuanlan.zhihu.com/p/89838787)
均衡采樣:不同訓(xùn)練階段不同采樣 聯(lián)合損失函數(shù):BCE+Dice+Focal loss 后處理主要是針對二分類的,可借鑒 Kaggle冠軍告訴你,如何從衛(wèi)星圖像分割及識別比賽中勝出?(https://zhuanlan.zhihu.com/p/26663913)
預(yù)處理中,訓(xùn)練集減去平均值,并標(biāo)準(zhǔn)化偏差 不同類別設(shè)計不同策略難以借鑒,多種模態(tài)輸入 Kaggle優(yōu)勝者詳解:如何用深度學(xué)習(xí)實現(xiàn)衛(wèi)星圖像分割與識別(https://zhuanlan.zhihu.com/p/26377387)
和上面同一個比賽,也為不同類別訓(xùn)練特定模型 對數(shù)據(jù)先歸一化為具有零均值和單位方差,之后進行數(shù)據(jù)增強過采樣 在測試的時候滑動窗口拼接(256可否借鑒小窗口滑動拼接?),TTA平均輸出 后處理簡單使用擴展和腐蝕操作,去除小于給定閾值的物體和小孔 ECCV 2020 大規(guī)模實例分割挑戰(zhàn)賽(LVIS Challenge)冠軍方案(https://zhuanlan.zhihu.com/p/224851085)
Repeat Factor Sampling 樣本采樣技術(shù)(應(yīng)該類似于重采樣保證樣本均衡) 數(shù)據(jù)增廣中使用了Mosaic , 旋轉(zhuǎn)和尺度擾動 DCE+weighted BCE 分類器平衡,在表示學(xué)習(xí)部分結(jié)束后,凍結(jié)網(wǎng)絡(luò)的 backbone,使用Balanced GroupSoftmax進行分類器平衡(目標(biāo)檢測長尾效應(yīng)中使用) Kaggle TGS 鹽體分割任務(wù)第五名解決方案:kaglge硬核高中生玩家,模型集成策略太高級了看不懂(https://zhuanlan.zhihu.com/p/47412338)
魔改scSE,似乎加了1 在Lovasz loss中我們使用了elu+1而不是默認(rèn)的relu Kaggle圖像分割比賽中的損失函數(shù)及keras實現(xiàn):介紹了BCE、weighted BCE、Dice和Lovasz loss(https://zhuanlan.zhihu.com/p/80716099)
數(shù)據(jù)增強repo,注意里面做分割的demo ipynb:https://github.com/albumentations-team/albumentations
CRF后處理
【圖像后處理】python實現(xiàn)全連接CRFs后處理,CRF+填孔后處理(https://zhuanlan.zhihu.com/p/64854535) 代碼參考:https://github.com/Gurupradeep/FCN-for-Semantic-Segmentation、https://github.com/1044197988/Semantic-segmentation-of-remote-sensing-images等
推薦閱讀


