ST-CGAN 用GAN实现阴影检测和阴影去除

1. 总体介绍

        本文是2018年的一篇CVPR,虽然现在看起来非常简单,但是在当时还是非常突出的,将阴影检测和除去阴影联合起来训练。

        论文:https://arxiv.org/abs/1712.02478

        代码:https://github.com/IsHYuhi/ST-CGAN_Stacked_Conditional_Generative_Adversarial_Networks (非官方实现)

2. 主要思想

        作者提出的框架包含两个生成模型和两个判别模型,并且可以实现端到端的联合训练。

        第一个生成模型G1生成阴影的mask,mask和Input image堆叠成四通道作为第二个生成模型G2的输入,生成去除阴影后的图片。

        第一个判别模型D1的输入是一个四通道的图,四通道由输入图片和对应mask的堆叠;第二个判别模型D2的输入是一个7通道的图,分别是输入图片、mask和去除阴影后图片的堆叠。

        除了上图所示,明显的GAN_Loss, 对于生成的mask和去除阴影后的图片,使用BCE loss和L1_loss进行监督。即整个框架由四个Loss组成的,分别是两个GAN_loss、BCE loss和L1_loss,并且在每个loss前面配置的参数来平衡整体的损失函数。

       整体的损失函数如下图所示:

3. 文章分析

      (1)D1的输入为什么是用阴影图像+mask?

                  D1是干什么的?是为了判断网络输出的检测的mask是否为真。那么光有mask可以判断出mas是真的吗?当然不行,加上有阴影图像为什么就可以判断处真假?与有阴影图一对比就知道检测的mask是不是完整了!也就说得有参照。

     (2)D2的输入为什么要加上有阴影图像?

                有阴影图像是对比的基准,没有有阴影图,判别器仅靠无阴影图并不知道阴影去除的是否正确。仅能让output无阴影图与GT无阴影图特征上相近。如果GT无阴影图有一暗块在左上角,output无阴影图的一个暗块在右上角,判别器可能分不出来。

     (3)D2的输入为什么要加上mask?

                这是比较亮眼的地方,阴影检测的目的其实是为了阴影去除。检测的好坏影响去除的效果。那么额外加入mask作为输入,梯度回传让第二阶段的去除过程更好的指导mask的生成

4. 实验部分     

        下表的评价指标为RMSE,达到了当时最好的效果。

        最后的效果图如下:

博主点评:(1) 开源的代码写的很简洁,对于理解GAN Loss很有帮助,其他GAN Loss也都基本上是这样写的。

                      (2) 从现在的眼光看,作者另外的一个很大贡献就是开源了ISTD数据集,对于去阴影的研究很有帮助。

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 21
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值