標籤(空格分隔): 影象分割
解決方案
因為看到衛星影像的ai分類與識別這個比賽和正在研究的衛星遙感影像分割型別很相似,就報名參加了。比賽分a,b榜提交,最終成績為複賽a榜23/867,b榜12/867,沒機會進決賽[-_-]。現在把之前的一些經驗做下筆記。
資料來自2023年中國南方某地區的高解析度無人機遙感影像,解析度為亞公尺級,光譜為可見光波段(r,g,b),提供的訓練樣本分為五類:植被(標記1)、建築(標記2)、水體(標記3)、道路(標記4)以及其他(標記0),耕地、林地、草地均歸為植被類。初賽訓練集是2張大的png格式,大小是79397969,**集是三張大的png格式,大小為51905204,複賽訓練集增加了3張大的png格式,複賽**集也是三張png。相比其他型別比賽的資料,遙感影像視覺化較為方便,可以對遙感影像有個整體直觀的了解。下面第一張圖是初賽訓練集,第二張是初賽**原圖與**結果(準確率60%),第三張是複賽**原圖和**結果(準確率91%)。
初賽由於訓練集較少,只有2張,**集有3張,使用神經網路來進行**效果普遍不好,準確率都在80%以下,參賽隊伍中使用傳統地物提取方法的隊伍可以達到85%左右的準確率,長期穩坐第一的位置,到複賽的時候新增加了3張訓練集,資料集增後,神經網路的效果就出來了,使用神經網路的隊伍準確率都達到了90%以上,最高的能達到95%,可參考他的gitub,大神的準確率大概在95%左右。
訓練集的標註整體質量不錯,但也存在少部分標註錯誤的情況,比如上面第一張圖中左上角區域將背景類錯誤地標註為建築類;同時由於遙感影像地物型別複雜,存在著**集中出現訓練集中不存在的幾種地物導致不能識別的情況,這也是導致初賽中神經網路**誤差較大的原因。
採用分類總精度(overall accuracy)來衡量,即統計樣本**值與實際值一致的情況佔整個樣本的比例(衡量樣本被正確標註的數量),即score = 正確數/總數。
這裡要仔細讀下競賽的相關要求,比如他們說明,競賽中其他類(標記為0)的分類精度不算入最後精度評判標準,最後結果只統計植被、道路、建築、水體四類的分類精度,也就是說**集中他們標註為第0類的你**出來隨便是哪一類都算你**正確的,那麼提交的時候就可以不需要提交第0類啊,可以直接轉為道路類(標記4),因為其他類和道路類最為相似。
和imagenet等比賽不一樣的是,競賽所給都比較大(比如79397969),受伺服器gpu的限制,訓練中把原始影像餵給神經網路前,需要切割成小,在**結束後,再將**的小拼接成大的原始影像。這個時候需要確定小的大小為多少合適,一開始認為在伺服器gpu允許的情況下,小的大小應該越大越好,因為這個尺寸越大,被切割的次數就越少,能夠降低切割邊緣識別不准的錯誤率。所以剛開始切割成512512的大小,因為使用公司伺服器為兩塊gtx 1080的gpu,在視訊記憶體允許的情況下最大的batch size為8,但是**效果並不好,後來切割成小的時候,隨著batch size增大,發現效果越來越好,原因可參考曠視研究院解讀coco2017物體檢測冠軍**,分析認為是訓練集中各分類目標所佔比例不均衡,有的類別所佔比例多,有的類別所佔比例小導致。最後參考kaggle比賽中的經驗,將切割大小設定為80*80,gpu視訊記憶體允許的最大batch_size為128。切割後如下圖所示
然後是訓練集和驗證集劃分的問題,乙個合理的驗證集是非常重要的,是判斷哪個模型好壞的依據,但是在訓練的時候,驗證集中的不能參與神經網路的訓練,相當於這部分資料不能用了,在資料量小的時候就希望盡可能少分資料給驗證集,但模型驗證的準確率就會下降,解決措施一般是使用k折交叉驗證,具體可參考交叉驗證參考,但是在資料量大的時候就沒太大必要。複賽中當切割的大小為80*80的時候,資料集大概有接近4萬張左右,就直接按照5:1的比例來劃分訓練集和驗證集,具體劃分的時候每張大圖訓練集佔5/6,驗證集佔1/6,這樣劃分是為了保證驗證集和訓練集中各類別所佔比例接近。
參考了kaggle比賽dstl satellite imagery feature detection和ultrasound nerve segmentation的相關經驗,在dstl satellite imagery feature detection衛星影像分割中,vladimir iglovikov和sergey mushinskiy 使用unet網路獲得了public leaderboard第八, private leaderboard第三的成績,所以主要使用unet網路來進行分割,比賽中也嘗試了segnet和pspnet網路,發現unet的效果還是最穩定的,pspnet可能我的網路結構有些問題,可參考pspnet,這位同學在比賽中使用的pspnet網路,聽他qq上說在不加任何trick的時候,大概能達到92%的準確率(他們最終準確率在95%左右,應該是妥妥的前三了)。
同時使用adam優化器進行訓練,一共訓練200個epoch,前150個epoch的learning rate為10^-3,後50個epoch的learning rate為10^-4,droupout=0.5,weight decay=510^-4,輸入大小為8080,batch size=128。
預處理:
競賽給的資料集是jpg格式,是16位深度,但是只有第四個波段(透明度)是16位深度,其餘的rgb值都是8位深度,所以用opencv處理的時候需要注意,需要採用16位深度進行讀取資料,再進行一次顏色空間轉換。
image=cv2.imread(path,cv2.imread_unchanged)
image=cv2.cvtcolor(image, cv2.color_rgba2rgb)
image=image*
256
其他的預處理包括將資料轉換到0-1範圍,這個是pytorch框架totensor()函式自動轉的,然後進行歸一化操作(各通道減均值除標準差,使用normalize(mean, std)函式)。
資料增強:
為了避免神經網路在小資料集產生過擬合現象,常用的方法是對已有訓練集進行資料增強,豐富影象訓練集,提公升網路的泛化能力。在衛星遙感影像的處理中,常用的處理方法是隨機旋轉(random rotate)和水平/垂直翻轉(horizontal/vertiacal filp),同時新增了影像的扭曲。下圖左上是原圖,右上是隨機旋轉的結果,左下是隨機翻轉的結果,右下是隨機扭曲的結果。
在unet**中,作者提出了一種影像重疊策略的方式,來避免大影像切割成小的時候邊緣**不准的情況,也就是說在切割成小的時候,由於小邊緣被人為切割,比如大影像中的建築物剛好被切割到兩張小中,導致神經網路不能識別小邊緣部分的建築物。直接切割,不採用影像重疊策略的效果如下圖所示,由於每張小邊緣部分**的效果比中間部分差很多,拼接後會產生明顯的裂痕感。使用該策略後,效果明顯提公升,初賽時準確率提公升在10%左右。
影像重疊策略是在原始影像內部切割的時候進行重疊,在原始影像邊緣部分進行映象反射外推。如下圖所示,原始影像做映象反射外推padding=16,影像內部切割重疊部分padding=16,大的黃色框和紅色框是切割時的大小,小的黃色框和紅色框是實際有用的區域。
針對測試資料也進行資料增強,然後輸入神經網路再進行**,因為時間來不及就沒有做集合,這個小trick在一定程度上也起到了集合**的效果,準確率提公升在1%左右。先將切割完的80*80的小進行90°,180°,270°旋轉,然後再輸入到神經網路進行**,然後將**結果進行相應的旋轉還原,最後對四個結果取平均。
還有另外一種集合**的方式,就是先對大的原始衛星影像進行旋轉,然後將旋轉後的原始影像進行切割成小,將**後的結果拼接起來後再旋轉還原取平均值。
衛星影像的AI分類與識別 線上Top1
基於深度學習的遙感影像地表覆蓋 地表利用分類 遙感影像解譯,作為數字影象分析的乙個重要組成部分,長期以來被廣泛應用於國土 測繪 國防 城市 農業 防災減災等各個領域。隨著機器學習技術的發展,如地表覆蓋分類等基於遙感影像的數字影象分析技術也得到了一定程度的發展。但是長期以來,基於遙感影像的應用仍停留在...
衛星影像的公開與洩密
公開的衛星影像是否洩密?本來,高科技 高成本的衛星影像技術就是為軍事用途而發展起來的。所以網上公開衛星影像,引起了許多國家和地區軍方強烈反應。在中國的所有正規出版發行的民用地圖上,是絕對不會出現軍用設施和隱蔽建築的。而目前網上公開的衛星影像上,所有的秘密都暴露無遺,人們可以很清晰地看到一些軍用設施和...
ai前世識別 AI 的前世與今生
最近跟朋友聊天,他身邊的人似乎都認為,人工智慧當下還只是處於乙個萌芽的階段,最多是下圍棋比較厲害,真的要改變他們的生活,還很遙遠。他們不會想到 接踵而來的智慧型新時代產物,已經能夠徹底實現傳統工業生產裝置 辦公 營銷等應用的全面智慧型公升級,以及實現組織創新 個體崛起和智慧型管理。那麼,你了解ai的...