异源遥感图像匹配的一种思路——智箭火眼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科目三赛题总结相关推荐

  1. 平台建设规划的三种思路——互联网平台建设

    互联网平台建设的第04篇文章,主要分享的是保险公司互联网平台建设规划的三种思路. 以下是数字化转型的分享线路图,您现在所在的位置为序号的分享:生态圈建设中,最关键的一部分,载体之平台建设. 以下是正文 ...

  2. 实现在页面上隐藏某个元素的css,有趣的css—隐藏元素的7种思路

    display.visibility.opacity三个属性隐藏元素之间的异同点一直是前端面试面试的常考题. 除了display.visibility.opacity三个属性可以隐藏元素之外,是否还存 ...

  3. display none 隐藏后怎么显示_web前端入门到实战:元素显示隐藏的9种思路

    我自己是一名从事了多年开发的web前端老程序员,目前辞职在做自己的web前端私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的web前端学习干货,各种框架都有整理,送给每一位前端小伙伴 ...

  4. 第七篇:使用 CUDA 进行计算优化的两种思路

    前言 本文讨论如何使用 CUDA 对代码进行并行优化,并给出不同并行思路对均值滤波的实现. 并行优化的两种思路 思路1: global 函数 在 global 函数中创建出多个块多个线程对矩阵每个元素 ...

  5. CSS实现垂直居中的5种思路

    前面的话 相对于水平居中,人们对于垂直居中略显为难,大部分原因是vertical-align不能正确使用.实际上,实现垂直居中也是围绕几个思路展开的.本文将介绍关于垂直居中的5种思路 line-hei ...

  6. 两种思路将Python中两个有序数组合并为一个有序数组

    第一种思路: 把两个数组合为一个数组然后再排序,问题又回归到冒泡和快排了,没有用到两个数组的有序性. 第二种思路: 循环比较两个有序数组头位元素的大小,并把头元素放到新数组中,从老数组中删掉,直到其中 ...

  7. 【论文阅读】开放域问答论文总结,文本召回与问答的另一种思路

    [论文总结]开放域问答,纯文本召回与精排的另一种思路 前言 SCIVER: Verifying Scientific Claims with Evidence 任务介绍 数据样例 开放域问答 Read ...

  8. 解决Geoserver请求跨域的几种思路

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景描述 跨域问题是浏览器同源安全制引起的特别常见的问题.不同前端语 ...

  9. Android JSON原生解析的几种思路,以号码归属地,笑话大全,天气预报为例演示...

    Android JSON原生解析的几种思路,以号码归属地,笑话大全,天气预报为例演示 今天项目中要实现一个天气的预览,加载的信息很多,字段也很多,所以理清了一下思路,准备独立出来写一个总结,这样对大家 ...

最新文章

  1. 【开源方案共享】ORB-SLAM3开源啦!
  2. Java 理论与实践: 非阻塞算法简介——看吧,没有锁定!(转载)
  3. Go Code Review Comments 翻译 编写优雅golang代码
  4. ABAP实例:如何生成年月的输入帮助
  5. css 添加 referer,http中Referer和Referrer Policy
  6. iPhone 12在二季度iPhone出货量中占63% 低于iPhone 11同期
  7. 快手大数据架构演进实录
  8. 谷歌AI魔镜:看你手舞足蹈,就召唤出8万幅照片学你跳 | TensorFlow.js
  9. C++基础知识(七)new和delete
  10. 8位模型计算机设计与仿真
  11. 区分LJMP、AJMP、SJMP、JMP指令
  12. 软件著作权 php代码行数,申报软件著作权时,如何快捷计算源码行数
  13. 前端页面加蒙版的几种方法
  14. 李智慧 - 架构师训练营 第五周
  15. windows怎么设置始终以管理员身份运行
  16. 《循序渐进Linux (第2版)》.pdf
  17. 生活随记 - 2020国庆第二天
  18. c语言常量指数的正确表示,c语言常量的正确表示方法有哪些
  19. 页面左侧二级菜单20种案例
  20. .Net Core 集成 RabbitMQ 订阅与发送

热门文章

  1. dede:arclist 不能调用文章的副栏目或多个副栏目的解决方法
  2. 如何让U盘支持大于4G的文件
  3. pku 1573 Robot Motion 第一周训练——模拟
  4. WCF绑定细节(2)——绑定,绑定元素
  5. RRID和CAS是什么?
  6. 【OpenCV入门学习笔记2】:Mat对象
  7. laydate组件 无法传值_Vue组件通信的几种方式
  8. 机器人学习--图解激光SLAM
  9. 激光slam-- .pgm格式地图分析及修改方法
  10. JavaScript/VBScript脚本程序调试(Wscript篇)