异源遥感图像匹配的一种思路——智箭火眼2020科目三赛题总结
異源遙感圖像匹配的一種思路——智箭火眼2020科目三賽題總結
??本賽題任務是對光學遙感圖像和SAR(合成孔徑雷達)圖像進行匹配,是智箭火眼2020挑戰賽(https://yuanwangfw.com/hjjtzs/)的其中一題。這次比賽有五個賽道,我開始一直死磕科目一、科目二,后期覺得已無望進入復賽,在最后還有五天的時候嘗試了一下科目三,竟想出來一種思路,實現之后效果也還不錯,初賽排到二十幾名。畢竟參賽時間太短無緣決賽,但這個思路是我完全自己想出來的,覺得有必要總結記錄一下。
一、賽題簡介
??光學圖像尺寸為800×800,SAR圖像為512×512,都是單通道灰度圖,訓練集有2350對圖片,都給出了對應的位置坐標,初賽一階段測試集有300對圖片,二階段有714對圖片。任務是找出SAR圖像在光學圖中的位置,兩者比例尺相同,也就是說只存在平移,不存在縮放變形等操作。有城市、平原、島嶼、山地等各種地形,由于SAR圖像有的有較大噪聲比較模糊,任務難度還是很大的。
圖1:城市地形光學遙感圖像(左)和SAR圖像(右)及匹配位置(左圖方框)
圖2: 平原地形
圖3:島嶼地形
圖4:山地地形
二、提取邊緣線
??我以前沒有做過圖像匹配任務,由于時間緊,拿到題目后我簡單進行了文獻查詢沒有找到直接能用的文獻或開源,所以決定自己動手。首先分析,直接做SAR圖和光學圖的滑窗相似度計算肯定不行,因為對不同的地物兩種方式的成像特點有很大不同,不能直接匹配,必須提取出兩種圖像的某種共同的特征圖再進行匹配。我想到了提取邊緣線,邊緣線匹配對遙感圖像有較好的區分度,但由于兩種圖片成像原理不同,直接使用canny算子或相位一致性算法(相位一致性算法可以百度搜索)提取出的邊緣線往往直接對應關系不好。我使用深度學習來訓練光學和SAR圖像進行一致性的邊緣提取,其標簽就是對應的光學圖像用傳統算法(我這里用相位一致性算法提取,效果比canny好一些)提取的邊緣線,訓練網絡使用經典圖像分割網絡deeplabv3+,對光學圖和SAR圖分別各自訓練一個網絡,它們的標簽都使用光學圖經相位一致性算法得到的邊緣線圖。
上圖3島嶼地形中的光學圖經相位一致性算法提取的邊緣線:
上圖3島嶼地形中的雷達圖經相位一致性算法提取的邊緣線:
上圖3中光學圖經深度學習提取的邊緣線
上圖3中雷達圖經深度學習提取的邊緣線
??可以看出,經過深度學習提取的邊緣線比直接用相位一致性提取的邊緣線更加連續,更加突出主要邊緣而忽視細小邊緣。
??得到光學圖和SAR圖的邊緣線之后就可以使用模板匹配的常用算法來搜尋匹配的坐標位置了,我使用的滑窗計算SAR圖和光學圖的邊緣線的iou,選擇iou最大的位置作為匹配位置。對于本題,每圖按照逐個像素滑窗可以得到288×288點的iou,可以把它可視化以觀察效果。本次初賽只需要平移,沒有縮放和形變,只需要使用簡單的滑窗平移即可,但是縮放和形變情況下的模板匹配也不難,核心難點就是共性特征圖的提取。
上圖3島嶼地形中雷達圖邊緣線和光學圖邊緣線的滑窗iou可視化圖,288×288,可以看出匹配位置在右上角最亮點處
三、進一步精煉以提升匹配精度
??上述過程得到的匹配結果仍有一定誤差,本題算分是根據預測位置和實際位置的像素距離計算的,如果只使用相位一致性算法提取的邊緣線,在測試集二階段714組圖片中的推算平均誤差約為3.8像素,使用深度學習提取的邊緣線,可以達到平均誤差約3.0像素。我又設計了以下機器學習回歸算法對匹配位置附近點位進行“精煉”。
??算法的主要考慮是上述模板匹配算法僅僅是根據iou最大一個指標進行的尋優,也許信息并不夠豐富?;谶@個考慮,我設計了以下機器學習回歸算法,誤差可以再減少1個像素左右。
??step1: 在訓練集中,對標簽位置的光學圖切片(即和SAR圖完全對照的光學圖512×512部分)進行上下左右各5個像素的逐像素平移,這樣共可以得到11×11=121個patch圖,計算各自坐標和標簽坐標的距離作為機器學習的回歸的目標值。特征則是計算各個patch圖對應的邊緣圖和SAR的邊緣圖之間的多種統計數據,除iou外,還包括mse,mae,acc等。使用lightgbm構建模型進行訓練,目的是找到標簽位置和多個指標之間的復雜關系。
??setp2:對于測試集, 把上述“粗煉”過程得到的結果稱為proposal point,在光學邊緣圖的proposal point周圍也選擇上下左右各5各像素內的滑窗范圍,駐像素滑窗可以得到121個patch,再用剛才訓練好的lightgbm模型計算出各個圖和真實標簽位置的距離,選擇距離最小的一個作為真實標簽。
使用這種精煉方法,在熱身訓練數據集1500組圖中可以達到1.1像素的平均誤差,在初賽訓練集850組圖中可以達到1.5像素的平均誤差。在測試集二階段的714組圖中根據提交分推算大約是2.0像素的平均誤差,而初賽第1名的平均誤差推算下來大約在1.0像素左右。
四、經驗教訓總結
??本次比賽時間很緊,我還走了好幾個彎路。
??彎路1,我最初的思路是訓練兩個深度學習網絡,各自損失為loss1 = CE(out1,edge) 和 loss2 = CE(out2,edge),再設計一個loss3 = MSE(out1,out2),然后設計總的loss = loss1+loss2+loss3,把這兩個網絡聯合訓練,同步訓練兩個網絡的參數。這么考慮的初衷是為了同時保證兩個網絡都能夠逼近邊緣線圖edge,同時還保證兩個網絡的輸出具有一致性,一致性的目的是后續滑窗計算iou時更加有效。本以為挺好的思路,但實際實現效果是這個混合起來的Loss非常難訓練,神經網絡具有喜歡“偷懶”的特點,它為了讓loss3小,干脆輸出兩個幾乎全黑圖out1,out2,而對于loss1和loss2則置之不理。由于開始沒有對結果進行可視化觀察,實際上浪費了很多時間后才發現這個問題,后來放棄了這個思路,使用的是兩個網絡分別訓練。
??彎路2,在機器學習精煉的時候考慮到相位一致性檢測得到的邊緣線比較粗,因此我又計算了邊緣線的骨架圖(中心線圖)。但是我在計算121個patch的骨架圖時,本意是分別計算每一張的骨架,對于121×512×512的patchs張量,直接使用skimage.morphology.skeletonize(patchs)計算了,但實際上這個操作對于三維張量,它計算的是三維骨架圖,同時由于我構建標簽的時候每次都是把目標位置圖放在121圖的正中間,這樣這個三維骨架圖就把121圖信息互串,把標簽位置信息帶到了特征中,就構成了leak。這個leak會導致我訓練集驗證時僅有不到0.3像素誤差的極好效果,一度讓我非常興奮,然而一提交分數卻又奇低。意識到有leak之后,仔細分離特征,才終于發現了這個bug。
??這次比賽雖然沒有獲獎,但是我完全用自己的思路實現的,沒有借鑒開源,雖然時間短,也投入了極大的精力、毅力來攻克它,我覺得有很多收獲和教訓。
??1,終日所思不如須臾所學,還是要重視學思關系,今后比賽必須要先充分查閱文獻和開源,在充分學習現有技術的基礎上再做改進和提高,這是正道。
??2,創新來源于對細節的深入觀察。我之前一些比賽的創新思路也都在對細節深入觀察之后才想到的,而這次比賽中由于匆忙一些細節沒有細致觀察反而導致一些誤導,如彎路1中未對結果圖進行可視化觀察就導致未能較早發現錯誤。
??3,研究問題的過程往往是創新——驗證——再創新的循環過程。這個過程的關鍵是驗證,驗證必須要做到準確和高效。今后參加比賽要及早搭建一個系統化、客觀準確的驗證模塊。
總結
以上是生活随笔為你收集整理的异源遥感图像匹配的一种思路——智箭火眼2020科目三赛题总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息抽取(五)实体命名识别之嵌套实体识别
- 下一篇: 之江杯2020零样本目标分割题参赛总结