光学遥感图像典型目标检测算法大赛全记录

前言

       这是 2019.6~2019.08 期间进行的一次全色遥感图像典型目标检测的比赛,现将过程记录于此。
       先说几句题外话,之前一路这么跌跌撞撞地摸爬滚打过来,光顾着学些基础知识,看看论文、做做项目或者打打比赛。像猴子搬苞米,这一阵子学的目标检测,打了这个比赛用了这个方法;下几个月又开始搞 GAN,天天沉浸在生成器、对抗器和损失函数调来调去的世界里;又过了些时候,大 boss 又大手一挥,这个项目里面的图像增强部分没人做,你来干,顺便再把界面给搭起来… 这样周而复始所造成的一个结果是,我把每一个任务都完成了,我的见识、阅历、做事情的能力当然有所提升,可这些过程中实实在在的一些知识、实际应用时的技巧都有很大部分的遗忘掉了。
       所以说,及时总结和归纳是极其重要的一个环节,之前我许多时候有所疏忽,想着做完了就完成了。可后来慢慢我发现,其实每一次学习新的知识、遇见新的领域、看到新的算法、打的比赛和做的项目…等等这每一个过程中都藏着我提高的空间。而这些有很大一部分都需要事后的及时总结来提炼。
       我很感谢我养成了写博客的习惯,在这里我可以记录下学术上成长起来的点点滴滴,有哪些知识遗忘了也可以及时回顾,而不是只能“重头再来”。
       这次是对我去年参加的一个哈工大和国防科技创新快速响应小组联合举办的遥感图像典型目标检测的比赛的回顾,仅仅不到一年的时间,其实很多细节都已经模糊掉了。这算是我第一次参加这种比赛,而且全程都是我一个人在摸索,在比赛的那几天就觉得我能顺利做完得出结果就已经是了不起的了。但现在看来,很多地方都能做的更好,排名就算进不了前10,也不至于22名这么低。

1. 分析数据及要求,选定模型

       因为年代有点久远,原比赛网站已经失联,还好当时有在组会上做汇报,这里就摘录当年在 PPT 中的内容。

光学遥感图像典型目标检测算法大赛全记录_第1张图片
光学遥感图像典型目标检测算法大赛全记录_第2张图片
       先来分析数据,可以看到遥感图像的数据格式是 TIFF 格式,且给的数据集是未标注过的。一般遥感图像的数据集都会很大,且图像分辨率很高,这次的也不例外,给的数据集是未公开的,有14个G, 分辨率达到 4096×4096,这里就需要将这些数据集在标注后进行各种处理,我们放到后面说。
       目标类型有六类,分析和查看数据可以发现,检测目标存在以下特点:

  1. 尺度差异较大。既有超过100×100的桥梁、操场,也有小于50×50的储蓄罐、船只,还有介于其间的飞机、码头。这里就要求我们的算法对多尺度需求比较高,如果是用当前最流行的锚点框检测的方法时,要注意锚点框的尺度大小表示;
  2. 飞机、操场和码头目标受拍摄方向影响较大。这些目标的长宽比往往较大,这要求我们如果采用水平框标注的话很容易出现bounding box不匹配的问题,这样学习起来效果会比较差,特征没那么明显。但因为赛组委给的最后的输出格式是四点坐标(Xmin, Ymin)(Xmax, Ymax)形式,所以我们不能采用倾斜坐标标定,这样就对标注时的精细度要求较高;
  3. 船只目标较为密集。且与码头目标有很多相互交叠的部分,并容易与海浪等干扰物混淆,背景复杂度很高,这就要求我们采用的算法鲁棒性能要相对较好一些。

       综上所述,再结合给定的评价标准只要求 map 值,不要求速度和召回率。选定 Faster R-CNN 作为主要检测模型。

2. 工作流程及部分细节

       因为这个算是我第一次独立完成一个比赛,很多流程一开始一脸懵逼,根本不知道要干些什么,浑浑噩噩浪费了1天之后决定把要做的大致内容定一个框架,然后按照各个时间点去完成,果然条理比以前清楚了许多。要做好一个项目,必要的前期调研和规划也是极其重要的。

光学遥感图像典型目标检测算法大赛全记录_第3张图片

2.1 Demo及训练问题

       其中跑通 demo 以及训练的问题,大致可以参考 这两个博客,好吧,我承认还是要早点总结,我记得当初也是走过好多坑,代码也修改了不少地方的,结果当时做完一扔,现在啥也不记得了,一定要吸取教训,及时总结:
       https://blog.csdn.net/qq_34116292/article/details/90715649
       https://blog.csdn.net/jcli1_14/article/details/81327047

2.2 标注及一些痛的领悟

       标注图片采用的是 labelimg 的方式,这里不得不提醒各位,标注前真的要了解清楚,你要标注的目标你真的了解吗…这个项目中最痛苦的莫过于这个环节,真的是反反复复两周的时间献给标注了。因为官方给的是原始数据,且没有给例图,这就导致了,你以为你知道操场是什么样子?可是你看到的有四四方方的空地、正规带跑道的操场、也围成椭圆形的空地、还有各种奇奇怪怪的地方让你头疼这算不算空地;这倒罢了,毕竟操场那么大,标注错了再返工也不太费事,总共也没几个,可是当密密麻麻的船只需要标注呢?一开始官方是没有给“潜在目标大于20×20”这句话的,然后我费劲儿的标了2天,就像下面这种图,之后我突然看到有一张图里有个大船,疑似客轮或者军舰的,我就在想,这也是船只的话,都一起标注了,那训练得训练成啥样啊,这特征能把握到么…于是我就给官方赛组委发邮件(好吧,我不得不吐槽一下这个赛组委是真的坑,没有电话没有qq没有微信只有个邮箱,然后这个邮箱我发过去,一直没有回复过我,直到3天以后,我带着疑惑又点开官方的规则,发现这个规则中加了上面那一句话…我相信,这个比赛这么多研究所、科研院校、包括大公司参加的情况下,仅仅只有一个技术指标 map,到最终了第一名的精度是0.35,这个跟规则不说清楚,标注的混乱是有很大关系的!!!),除了船只,还有到底什么才是储蓄罐等等各种坑等着你来跳。

       所以好端端的一个孩子究竟是怎么瞎的…

       并且还有比赛规则中给出的数据质量已经给出几何校正和辐射校正,一开始也是没有的,然后我前期查的资料里面说明了原始全色遥感图像一定要经过这几个校正,我特意费尽周折下了一个专门处理遥感图像的软件 Envi 来做,下好了,官方规则一更新,我傻了…

       真的,这次比赛给我最大的感受就是,以前总看段子说985院校毕业的高材生去标注公司当标注员啥啥啥的,现在才知道,你要做好一个标注,需要的不仅仅是眼力、与客户的沟通能力,还要有一颗生死看淡的平常心…

       并且这里学到一个要点,对于以后的工作学习,客户或者boss给你说的话,你不知道的、模棱两可似是而非的时候一定不要不懂装懂,而是要问清楚到底是什么,需求在哪里,因为很可能他们也会有疏漏,而他们的一点疏忽到你这里,就反馈成了很多做的工作必须要返工

2.3 图像预处理工作

       其实这里还是比较复杂的,一些细节的处理记不太清了,因为图片格式是.tif, 且像素过大,无法正常打开,所以做了一下处理。

  1. 图片编号按照项目提交结果的要求,处理格式如:2th/Result_122.tif;
  2. .tif格式处理为.jpg;
  3. 建立VOC2007数据集格式,并后续进行格式转换, VOC2007–>.csv–>.tfrecord;
  4. 将4096×4096的大图裁剪为多张800×800的图片,为避免目标出现在裁剪边缘,裁剪边缘按100×100的富余留出。

3. 模型介绍

       模型采用的 Faster R-CNN,实现的代码可以参考:
       https://blog.csdn.net/qq_34116292/article/details/90715649
       https://blog.csdn.net/jcli1_14/article/details/81327047

       论文之后我会发详解~这里先贴个图

光学遥感图像典型目标检测算法大赛全记录_第4张图片

4. 部分成果显示

  • 典型目标有效标注

光学遥感图像典型目标检测算法大赛全记录_第5张图片

  • .txt文本输出
    光学遥感图像典型目标检测算法大赛全记录_第6张图片

5. 工作总结及改进措施

5.1 工作总结

       该项目对给定数据集进行了有效标注,成功将其检测框的坐标和置信度信息转换为规定的文本输出格式。但标注的部分船只、码头、桥梁目标位置信息存在漏标和错标现象。且由提交的mAP结果显示其精度未达到标准。初步判定是由于训练时间不够长、超参数的选择不够精确、选用模型中一些模块存在较大误差有待替换等多重因素导致的。

5.2 改进措施

5.2.1 非技术层面
  1. 对给定项目要求理解不透彻就匆忙动手,导致实际操作时多次返工浪费训练和调参时间;
  2. 团队多人同时进行图片标注时未曾事先统一标准,导致一部分标注图片无法使用;
  3. 写图片处理程序时不够熟练,且代码效率不高;
  4. 测试过程中在发送结果后应该争分夺秒继续训练,导致由于训练时间不足,mAP不够;
5.2.2 技术层面
  1. Faster R-CNN 各个模块的增添、更改(vgg16->ResNet/Inception系列 | FPN/FPG等多尺度模块 | RoI Align层);
  2. 模型替换(YOLOV3、RetinaNet…)
  3. 训练过程中应该使用TensorBoard观察mAP曲线,及时发现拐点;
  4. 采用多模型算法融合决策进行处理。

你可能感兴趣的:(项目记录)