CVPR 2020 论文Dual Super-Resolution Learning for Semantic Segmentation分析


以前看论文没有记录的习惯,往往是看完做个ppt,组会上看着ppt上的图乱讲一通就结束了。这样的话其实看了跟没看一样,因为根本没有从中借鉴到可用的东西。不过有一说一,也是累了,很多论文一看实验数据好得不得了,我兴高采烈clone下来代码或者自己复现之后发现平平无奇甚至有的还在负优化,久而久之对每篇论文都多少有了点那么不信任。

 

今天这篇论文其实也是伤了我的心的,因为我复现了很久也做不出来论文里说的那种性能。 作者在论文中说要开源的,但是4个月过去了他的Github仓库里还是只有一个README.md

没办法,我自己按照论文复现了一下,但结果并不是那么好:https://github.com/Dootmaan/DSRL

论文地址:https://openaccess.thecvf.com/content_CVPR_2020/papers/Wang_Dual_Super-Resolution_Learning_for_Semantic_Segmentation_CVPR_2020_paper.pdf

 


 

 

这篇论文说白了是将超分辨和分割任务通过Multitask Learning一起做了,和普通的Multitask Learning不同的在于通过一个FA module将两个task连接到一起了。

 

 

作者这么做的原因是他们发现超分辨path的特征图输出比分割path的输出包含更多更完整的高频信息,于是设计出了FA module,是得两个task最后的特征图输出在一定程度上可以尽量相近。当然这个idea一听就让人觉得不太合理,因为毕竟是两个task,这么做不是反而会导致各自做不好自己的本职工作吗?

 

不过还真不至于,因为实际上分割path的特征图在进入到FA module之前还经过了由一层1*1卷积、BN和ReLU组成的feature transform module。除此之外,FA module本身是通过两个task输出特征的空间相似度矩阵计算loss的,也就是说它想做的事情其实是让二者的空间相似度矩阵尽可能相似。

 

这个空间相似度矩阵可以参考DANet中的空间注意力模块,如果特征图大小为W*H的话,则空间相似度矩阵为WH*WH,其中存储着每一个像素和图中其他像素的相似度。

 


 

 

没错,idea简单来说就是这样,还是比较简单的,而且因为同时做了超分和分割,最后得到的结果是比输入图的大小要大2x的,在实际应用中还是很有价值的。不过下面我就要说一下其中隐含的一些问题。

 

1. feature transform module放在哪?

按照论文的暗示,我觉得它是放在分割path的最后的,也就是最后那个用来和GT做CE Loss的那个19各通道的输出(Cityscapes19类所以19通道),然后这个module将19通道转为3通道再去和超分path的输出计算FA loss,但在我的实验中这种做法会导致loss很快变成神秘的nan

后来我猜测feature transform module是放在Deeplab v3+的last_conv后面的。这个last_conv是Deeplab v3+最后的有参数层,它之后接了一个upsample把输出直接放大到原图大小,所以实际上在这里做feature transform跟放在最后对分割path的影响是一样的。因此,我又觉得这里的feature transform module是19通道转19通道或更多的,具体要看对应位置超分的输出是多少通道的。因此这个实际上是在和超分的中间层输出做loss,不过实验起来效果倒还可以。

我其实在issue区问过这个问题,作者也回答了,他就说是放在最后一层卷积之后,我也不知道他到底是放到哪去了,因为从那以后他就再也没有在issue区出现过。

2. SISR的设计?

论文里说分割path的设计就是backbone后面加一个2x上采样,但没明确说超分path的设计。当然,因为二者共用Encoder所以前半部分倒不用担心,但后半部分具体咋做的只能靠瞎猜 。我目前是也用last_conv做到19通道,然后接三个上采样、反卷积和卷积去进一步超分,也不知道对不对。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM