去年4月将关于ISPRS Benchmark数据集的文章投稿到了ISPRS Journal of Photogrammetry and Remote Sensing期刊后,前几天终于接收了。历时长达378天,经历了多轮修改,感慨中科院一区的遥感顶刊投稿确实很艰难。
目前出版社Elsevier还没有proof完成,因此文章暂时还没有online。于是我将preprint版本上传到了arXiv上,点击链接获取https://arxiv.org/abs/2105.04132
其实早在2017年底我就已经开始对这个数据集进行一些实验了。当时采用的是Caffe框架,使用的网络为PSPNet。还记得那个时候跑了几组结果,但是通过自己写的精度评价程序进行评价发现精度并不太高。但是当时并没有对自己的评价程序产生质疑,因此在其他任务中也有使用该程序进行精度评价,并且结果是正确的。记得当时精度大概只有0.85左右,距离榜上的0.91差了6个点。于是感到自己能力有限,暂时搁置了这个数据集。
2018年的时候,PyTorch框架逐渐开始火了起来。之前维护的Caffe语义分割框架使用并不灵活,实现复杂的模块比较麻烦。当然另一个原因是因为当时的水平确实有限。另外当时基于PyTorch的语义分割框架仅有一个pytorch-semseg项目,于是乎我便决定自己基于PyTorch开发一套面向遥感的框架。于是2018年5月8号那一天,RSegNet项目就诞生了。
为了测试自己的框架的稳定性与正确性,需要找一个数据集进行训练与推理。平时使用的数据集都过于庞大,训练一次需要几天甚至半个月,因此需要找一个小型数据集。突然想到了ISPRS的数据集恰好符合要求,于是这个数据集被我用于框架测试了。框架最早的四个版本都出现了网络越训练越差的问题,中途因为这个问题也暂停开发了两个月,不过后来发现了代码的bug,修复了该问题。可是在该数据集上的精度仍然只有0.85左右。
经过了20多个版本的迭代更新,框架也进入了相对完善和稳定的状态。但是由于早期设计没有进行较好的规划,主要也是因为没有比较好的项目进行学习参考,我也是摸索着一点点扩展功能的,因此框架总体架构稍微有一点混乱,新的功能并不太好增加了。这个时候,我想到了对框架进行大规模改造,重新架构一些混乱的模块,新增了更多实用的功能,大幅度提升了框架的可扩展性。整个重构工作于2019年1月至3月完成。
重构完毕后当然还是需要数据集进行测试,ISPRS数据集理所当然的继续成为了我的测试数据集。从这个时候开始,我的框架分裂成了两个版本,一个是公开稳定发行版本与私有新特性开发版本。我开始在私有版本中加入各种最新的论文中的方法模块,并通过ISPRS数据集进行测试。
直到2019年5月的时候,一次引入DFN网络的时候,精度上升了一个点。于是重新燃起来我对这个数据集进行实验的想法。接下来我开始加入各种网络结构,当时比较火的有Pixel Shuffle,注意力机制,自注意力等等。
记得是有一天在地铁上与一位做超分重建的朋友聊天,了解到了空间注意力机制,于是我就想通道注意力是否可以与空间注意力融合呢?不过在阅读文献的时候,发现已经有人尝试双注意力机制了。但是当时的几种主流双注意力方案我看着都不太满意,于是将自己的想法进行的实现。惊喜的是,网络精度又上升了一个点。
当时我对自己的结果产生了质疑,为什么我怎么做都只有0.87左右的精度呢?而人家的榜上为啥都是0.91呢?我开始想会不会是我自己的精度评价出现了问题,于是我将该数据集的测试集进行的推理,并给ISPRS的Markus Gerke教授发送了邮件,希望可以帮忙进行精度评价。可是Gerke教授回复说排行榜已经冻结,并公开了结果,可以用官方程序自行进行精度评价。
于是我下载了官方提供的标记数据,运行了精度评价程序,但是只有0.88精度。我依旧很疑惑,但是我发现官方说明中提到过榜上的分数是将标记数据进行了腐蚀之后忽略了类别边界的。之前一直知道但是没有太关注,以为忽略以后精度提升不大。但是我感觉我很难再提升精度了,于是按照官方说明改进了精度评价程序。精度达到了0.90+,既惊喜又惊讶。同时也很懊恼,如果在冻结之前提交结果,应该也能达到0.89以上,或许我就不会放弃这个数据集了,或许早就能够跑到很高的精度了。
但是榜上还有0.916这种变态级别的精度,于是我便基于前边的改进思路,对模块细节进行进一步微调,寻找最合适的网络结构。终于精度达到了0.914。可是距离0.916还差一点点,怎么办呢?当时无意中又发现了TTA技术,该技术用于道路检测时,能够提升精度。于是我将该思想引入了自己的框架中,最终将精度做到了0.917,state-of-the-art。终于松了一口气,可以写论文了。
2019年10月-11月,花了两个月完成了论文的初稿。那阵子也因为一些事情,心情处于轻度抑郁状态。于是文章进展并不快。巧合的是,当时出现了一篇叫做DANet的文章,也用到了双注意力的想法。我曾质疑自己的文章是否还有创新性,想了很久,发现那片文章重点在于双注意力本身,而我的文章重点在于数据融合。看过很多文献,几乎所有的关于ISPRS文献,在处理RGB与DSM数据融合的时候,都是简简单单的相加或者concat,但是我采用的方案是双注意力互相融合数据。另一方面,DFN中的解码器部分,采用通道注意力使用high-level特征优化low-level特征,我则加入了一个基于空间注意力使用low-level反过来优化high-level特征,这个在当时的已发表论文中是没有的。于是我坚持了自己的创新点,完成了整篇论文。
论文初稿完成后,咱们自己人先进行了两轮review,但是当时心情比较糟糕的我并没有花太多精力进行修改,于是文章进入了拖沓状态。进入了2020年春节,想着在家休息半个月,回研究所再继续修改。可是这个时候COVID-19爆发了,开学时间被无限期推迟。于是论文修改工作也被我找借口推迟了。但是随着时间进入4月份,我开始慌了,再不投论文就迟了啊。于是逼着自己将论文进行了第二次内部修改。在写初稿的时候,我给自己定的目标是ISPRS(中科院遥感一区顶刊),不行的话就IEEE TGRS(中科院遥感二区),最次的话再考虑Remote Sensing(中科院遥感二区,开源)。因此写作完全按照ISPRS的级别进行写作的。在请教了我的大老板后,大老板觉得我可以冲一冲ISPRS,于是我将稿件投到了遥感领域最墨迹的期刊中了。
4月25号进入review状态,然后开始无限期under review。直到7月初的时候,论文返回了编辑手中,奇怪的是论文再次under review了。直到9月初才返回,并且给了我一个大修。第一轮审稿长达4个多月,其实这个是反常的。一般来说最长也是2个月吧。分析了一下原因,两种可能,一种是没有审稿人接受审稿,导致中途多次寻找审稿人,另一种可能就是第一次审稿人出现了较大争议,一个小修一个拒稿,于是编辑安排了第二次审稿。在这一轮审稿中,我还无意中发现了电子所的一篇文章,也采用了双注意力机制,不过所幸的是也没有应用于多源数据融合。不然就错失了创新性了。
这次返回的大修,审稿意见特别长,需要补充很多工作。确实,我的论文有很多欠缺,比如实验不足、数据集不够、存在有争议的内容、语言表达问题比较严重、部分原理陈述不清。连编辑都觉得我需要修改的东西太多了,给了我两个月时间大修。真的要谢谢Devis Tuia教授,没有给我拒稿,很耐心的给我找了审稿人复审而且给了我两个月时间大修。
然而不幸的是,9月-10月经历不如意的事情,加上毕业的压力,心理状态出现了崩溃,进入了中度抑郁的状况。当时已经到了10月下旬,但是仍然没法进入科研状态,文章也没办法进行修改。但是大量的修改工作,以及大量的补充实验,导致我也越来越焦虑。当时一些朋友每天陪我聊天玩游戏,逐渐走出了心理困境。
10月下旬开始,进入了连续长达半个月的昼夜颠倒状态。晚上拼命补实验改论文,白天睡觉。尽管看上去这和白天工作晚上睡觉的时间是一样的,但其实不然。白天在办公室会有各种杂事,比如老师找开会,同学同事找干活,而且干扰因素多也没办法集中注意力。而晚上干活整个办公室只有一个人,效率非常高,白天睡觉老师也找不到我,节省了大量的时间。最终在无数次想放弃的边缘,又无数次说服自己再坚持几天就解脱的心理博弈下,终于在11月初完成了论文的第一次修改,文章改动量高达20-30%。补充了一个数据集和完整实验,补充了多个数据集的对比实验,还增加了很多原理说明材料。
但是这一次修改忽视了审稿人一个建议,就是提高英语表达。当时找了一位学术大佬帮忙,但是那位教授较忙,只是粗略的看了看,并没有细致修改,加上deadline已经临近,所以我直接进行的提交。怀着忐忑的心理,等了近两个月,大约2021年1月,论文返回来,又给了一次大修。这一次主要是存在有争议的内容,以及英语水平再次被吐槽。好在没有被拒稿,审稿人再给我一次机会提升英语表达。
其实这一次改动量不大,而且当时我的心理状态挺不错,于是我很快开始了论文修改工作。对于有争议的内容,其实审稿人在前一次是建议我删除的,帮我修改论文的教授也是建议我删除。但是当时我认为该部分内容是有意义的,因此两轮修改我都是不断修正自己的表达,去除有歧义的内容,并且试图说服审稿人接受我的观点。这一部分内容就是论文中有关于“过拟合”的论述。事实上在深度学习中,应该是避免过拟合现象出现的。但是我发现在ISPRS数据集中,过拟合是有一定积极作用的,因此我希望能够用一定篇幅叙述一下过拟合的。但是审稿人以为我的观点是过拟合对深度学习没有影响,我也意识到可能是我表达不清晰,于是我改成了过拟合仅在ISPRS数据集上可行,但在其他数据集上仍然是需要避免的。最终成功说服了审稿人。另外对于英语表达问题,这一次我也找了润色公司进行的润色。润色公司很细致,每一句话的语法表达问题都进行了修改。因此这一轮修改很顺利,也很迅速。
又经过了长达一个多月的审稿,2021年3月,论文返回。这一次取得了重大进展,小修。一般而言,小修意味着踏入了接收大门半只脚。很开心,但是还是需要认真修改。这一次修改意见很少,只有个别表达啰嗦和排版问题,还包括一处上一轮修改时我错误理解审稿人意思的问题。当时我有很多其他任务,还包括一篇一区和一篇二区论文的审稿。于是这一轮修改我稍微拖延了20天左右。月底的时候,因为一些事情,情绪和干活的积极性得到充分的调动,于是完成了很多事情,并开始着手修改文章。当然老规矩,我只在半夜修改文章。不过这一次只熬了两夜便完成了修改。
本以为这一次我修改的内容少,审稿人也会很快审完。可是这一次审稿人又审了一个多月,终于在前几天,返回了一个Accept。历时378天,经过3轮与审稿人据理力争,两次抑郁。加上投稿前一年的实验与初稿撰写。总共花了超过两年的时间,熬了至少60个夜。总算把这篇文章憋出来了。其实很多优秀的同学投一区只需要2-3个月,但是对于我这种写程序还行写文章就头疼的人来说,花一年多自己还是可以接受的,自己对自己挺感动的,坚持这么久做完一件事情。倒是也有一些遗憾,就是找不到人分享喜悦。
说ISPRS是遥感领域最墨迹的期刊是有道理的,恰好这个最墨迹的机会被我遇到了。一审用时4个半月,二审用时2个月,三审用时50天,四审用时40天,加起来8个月。不过我修改也很墨迹,一修2个半月,二修15天,三修20天,总共近4个月。墨迹的我和墨迹的审稿人撞到了一起,于是出现了投稿长达一年才接收的罕见情况。话又说回来,一审是真的用的时间太长了,我有朋友一共3个月就接收了,我这4个月还在审稿。最后一次也很慢,按理来说就是改改格式,改了几句话,应该一天就能review完,结果审稿人硬是review了40天。折磨。
这一次投稿也积累了很多写文章和审稿的经验。比方说,对于方法创新类的文章,需要做多个数据集和多个ablation study实验,需要陈述清楚文章的所有原理和观点,尽可能多用示意图来帮助审稿人和读者理解方法原理,自己不清楚的内容一定不能乱写,写出来的内容一定要确定没有争议。回复审稿人的时候一定要客气,接受审稿人的所有观点,实在不能接受的时候可以客气的表达自己的想法并提供足够的佐证材料。给别人审稿的时候,也要细致的阅读人家的每一句话,有反对观点时讲清楚并提供引用材料,给投稿人修改建议。这不仅仅是帮助投稿人,同时也是在促进学术的进步。
也是非常感谢课题组长期以来对我颠倒的作息时间的包容,不然我也没办法利用夜晚安静的时间来完成这篇论文。或许可能到现在还没有投出去吧。
我在想,审稿人一直不反对我的研究成果,可能也跟我公开了自己的实验结果有一定的关系。其实在排行榜冻结之后,出现了很多ISPRS数据集的文章,但是这些文章都没有公开自己的结果。仅仅是自己进行了精度评价,并挑选了效果较好的局部区域贴在文章中作为实验对比。实际上这样使得文章的可信度并没有那么高,因为不管是精度还是结果都是文章声称的。但是我将全部实验结果全部公开在了公网服务器上,所有读者都可以自行下载对比所有推理结果,这也在一定程度上增加了文章的可信度。同时我也对我的结果是sota很自信,是可以经得起推敲的。实验结果大家可以通过访问http://research.yangxuan.me/isprs 获取。
之后我会再写一篇关于本论文中提出的网络结构的解析博客。不过由于本文很多思想已经是2019年做实验时候的思想,现在看上去已经比较过时了,不过或许在重新回顾的过程中可以发现一些新东西也说不定。
科研不易,各位同行共勉,愿我们都能顺顺利利毕业。
最后我再附上前两篇关于ISPRS Benchmark数据集研究的博客链接。
- ISPRS Benchmark 语义分割研究(一)http://blog.yannx.me/deep-learning/25/isprs-benchmark-semseg-research/
- ISPRS Benchmark 语义分割研究(二)http://blog.yannx.me/deep-learning/82/isprs-benchmark-semseg-research-2/
Yannx
2021年5月11日