zoukankan      html  css  js  c++  java
  • Single Image Reflection Removal through Cascaded Refinement论文阅读笔记

    这篇文章做了啥

    迭代式的单图片反射消除,有一说一,这篇文章让我想起来之前看到的一篇去雨的RESCAN,去雨的一篇文章,也是利用迭代式的思想,不断的去除图像中的雨,使得每一次迭代对于输入进行逐渐优化。RESCAN这篇文章也是利用的卷积LSTM,并且下一次是对上一次的迭代的结果进行优化。代码链接,流程图如下,

    上图的意思是,下一次输入的图片是上一次输出的结果,并且feature的利用也是遵循lstm传递的思想
    具体的forward的代码block如下

        def forward(self, x):
            ori = x
            old_states = [None for _ in range(len(self.rnns))]
            oups = []
    
            for i in range(settings.stage_num):
                states = []
                for rnn, state in zip(self.rnns, old_states):
                    x, st = rnn(x, state)
                    states.append(st)
                x = self.dec(x)
                
                if settings.frame == 'Add' and i > 0:
                    x = x + Variable(oups[-1].data)
    
                oups.append(x)
                old_states = states.copy()
                x = ori - x
    
            return oups
    

    这篇文章的motivation是啥

    作者说,预测透射区域和反射区域应该是相辅相成的,所以有两个branch来进行反光消除,通过预测反光的区域,能够使得图片去除反光区域更加干净。

    这篇文章的网络结构

    对于每一个time step的网络结构如下

    上图中,输入的(hat{T})(hat{R})是网络预测的结果,和原图(I)一起concate成9通道的图片送到两个网络中,一个网络是(G_T),一个网络是(G_R),下标(T)和下标(R)分别表示transmission和reflection,即透射图和反射图。作者在论文中说,这两个网络结构式一样的,但是作用不一样,一个是预测transmission,一个是预测reflection。encoder一共用了11个conv-relu blocks。decoder用了8个conv-relu blocks。作者说这两个backbone都是卷积lstm,结合到有一个iterative的想法(目前为止并没有开源代码),这个应该是和RESCAN的结构是相似的。

    因为是下一个time step是对上一个time step的输出结果的优化,所以,整个训练的pipline如下

    loss函数

    作者一共定义了4个loss。
    第一个loss是重建loss,定义为

    两路branch产生的(hat{T})(hat{R})加在一起,和原图做差,理论上来说应该是和原图一样的。
    同时对于透射图,加了一个perceptual loss函数,定义如下

    同时,作者对于透视图和反光图定义了一个mse loss,这里的反光图作者用的是直接做差得到的residual。以及增加了一个对抗的loss,感觉现在如果GAN不做创新的话,大多数也不会去独特的声称提出了某种GAN,只是作为一种提高精度的trick。对抗loss的权重较低。

    实验

    作者自己拍了一个数据集,并且命名为nature。200张训练,20张测试,感觉还是太少了。如下表格所示

    作者的方法达到了比较好的结果

    可以看一下,去除的也并不是特别干净,尤其是最后一行,感觉需要一个很大的数据集合来做。
    同时作者也做了一些ablation study,比如time step

    在time step为3的时候,结果能够达到最好。

    总结一下

    总的来说,作者用了两个比较重要的思想,第一个是,iterative,第二个是,可以同时预测反光区域和透射区域,二者应该是相辅相成的。记得之前看过南理工一篇讲的是用GAN做shadow remove就有说,阴影区域和其他区域应该是相辅相成的,所以作者同时预测了两个区域来提高阴影去除的精度。
    感觉iterative在一些神经网络的任务上,还是由可以继续做一些任务的空间的。

  • 相关阅读:
    理解Android系统的进程间通信原理(一)----RPC中的代理模式
    Android系列之Android 命令行手动编译打包详解
    CodeForces 681B Economy Game (暴力)
    CodeForces 681A A Good Contest (水题)
    UVa 1614 Hell on the Markets (贪心+推理)
    UVa 247 Calling Circles (DFS+Floyd)
    UVa 1151 Buy or Build (最小生成树+二进制法暴力求解)
    UVa 1395 Slim Span (最小生成树)
    HDU 1071 The area (数学定积分)
    HDU 1286 找新朋友 (欧拉phi函数打表)
  • 原文地址:https://www.cnblogs.com/yongjieShi/p/12605201.html
Copyright © 2011-2022 走看看