技术详解 | 如何用GAN实现阴影检测和阴影去除?
作者 | 江亦凡
最近两天刚看到的论文,写一篇文章当做笔记,论文原文取自https://arxiv.org/abs/1712.02478
继去年底Phillip Isola, Jun-Yan Zhu等人提出pix2pix框架以来,image translation的应用引起了大家的重点关注,相应的github仓库更是获得了高达4000+的star。至此,GAN在image to image translation, semantic segmentation, image style transfer等众多领域都达到了state-of-the-art的效果,本文介绍的ST-CGAN在pix2pix框架的基础上做出改进,分别构建两个生成器和两个判别器从而实现了阴影检测和阴影去除,与之前的模型相比取得了更好的效果。
生成对抗网络GAN(Generative adversarial network)由Goodfellow于2014年提出,16年DCGAN在图像领域取得了十分惊艳的效果,之后便接连出现GAN的许多变体(pix2pix, WGAN, SRGAN, CycleGAN等等),原始GAN提出了一个minimax game,由生成器不断生成fake data去欺骗判别器,而判别器不断学习如何鉴别fake data和real data,生成器和判别器在不断博弈的过程中互相提升,最终达到收敛。
对GAN(Generative adversarial network)不太了解的同学可以先看看 @郑华滨 写的令人拍案叫绝的Wasserstein GAN,文中描述了原始GAN的发展和问题。
首先让我们先来看一看为什么pix2pix能取得如此惊艳的效果
在pix2pix之前已经有许多GAN的变种(DCGAN, CGAN),这些GAN在当时都取得了不错的效果,虽然在某种程度上还存在着不稳定,多样性差,生成图像分辨率不高等问题。博主认为这些GAN的变种是以生成看起来真的图像作为目标,缺乏实际的应用场景。pix2pix模型借用conditional GAN的思想,将整张原图直接输入,并提出了pair的概念,让判别器同时判断两个pair的真假,从而建立了图片与图片之间的联系,实现image-to-image translation。
说得更直白一点,pix2pix与之前的GAN最大的区别就在于将一个pair中的两张图一起作为判别器的输入(实现上就是把两个图片叠在一起,channel为6作为输入),这样的结构使得判别器不再是简单地判断图片本身的真与假,而是进一步判断两个图片的对应关系,从而使得生成器生成的图片同时具备真实性和相关性。
回到本篇文章将要介绍的ST-CGAN中来,介于pix2pix应用场景的单一性,很多人在思考如何将GAN应用于更广泛的应用场景中,ST-CGAN就是其中一个。ST-CGAN的模型结构如下图所示。
由上图我们可以看到,ST-CGAN构建了两个生成器,G1用于从原图生成含有阴影的图,G2用于从原图和阴影图的叠加中生成去除了阴影的图,而两个判别器则分别监督这两个生成过程,最终达到收敛。
论文中作者将Balance Error Rate (BER)作为评估检测(Detection)阴影效果的标准,用Root mean square error (RMSE)作为评估生成的去除阴影的图像(Removal)效果的标准
关于Balance Error Rate (BER)的详细解释读者可以看这个回答。Root mean square error (RMSE)就是在MSE的基础上取平方根。
在这里要吐槽一下,文中并没有指明BER表达式中几个变量对应的含义,包括在实验部分的表格中论文里给出了shadow和Non-shadow也没有给出定义。。。博主根据实验描述判断,这里把生成的阴影图切割为包含阴影的区域(shadow)和不包含阴影的区域(Non-shadow),然后针对这两个不同的类分别与Ground Truth计算对应的像素点之间的error(论文中的描述为"along with separated per pixel error rates per class (shadow and non-shadow“)。具体而言,TP/(TP+FN)指代阴影区域正确检测到阴影的部分,TN/(TN+FP)指代非阴影区域判断为没有阴影的部分,这样BER的值越低对应模型的效果就越好。
实验部分,论文提出了一个新的数据集ISTD(Large-scale Dataset with Image Shadow Triplets),与其他包含阴影图的数据集不同的地方在于,ISTD数据集包含三类数据,包含阴影的原始图片,阴影标注数据和不包含阴影的原始图片,基于ISTD数据集论文提出的模型才得以实践(因为模型要求的输入条件就必须包含这三种数据)。
可以看到,基于ISTD数据集训练的情况下,ST-CGAN达到了不错的效果,同时为了说明模型的鲁棒性,论文也在别的数据集下做了对比实验,由于其它的数据集不具备包含三类数据的条件(即不包含没有阴影的原始图像),论文给出的解决办法是先用别的模型生成一个"roughly generated shadow-free images"添加到数据集中。
效果相对于第一个实验略差一点。还有几组数据这里就不再赘述了,论文给出了几种不同模型做阴影去除(Removal)的效果对比
可以看到,除了第5组数据中阴影部分较暗的情况下效果略差,其他情况效果还不错。
最后,博主想到既然pix2pix实现了双向端到端的image translation,那ST-CGAN是否可以用来从原始图片生成出逼真的含有阴影的图片呢?这个可能要论文作者来解答了。
从B到A可能可以实现在没有阴影的图像上添加阴影的效果。
以上就是对ST-CGAN的大概解读,下面聊一下博主对这篇论文的优缺点评价:
优点:
idea很不错,用GAN来做Detection和Removal,为大家打开了思路,现在有不少人都在思考怎么把GAN拓展到更加广的应用场景里。
实验效果不错,与几个Baseline相比效果有明显提升。
缺点:
正如文中所说,论文描述里一些地方指代不清,希望原作者后续能给出新的版本。
相对于其它模型,ST-CGAN所需要的先验条件变多了,具体来讲就是需要包含阴影的原始数据,阴影图,不包含阴影的原始数据这三类数据,而其它的模型是在不具备第三类数据的情况下做的,在这样的情况下ST-CGAN表现更好可能跟它获取的输入条件更多有关。
实验中给出了阴影部分教深的情况下的实验结果,并没有给出在阴影部分较浅的情况下的结果,其次如何给出一个深浅的标准也是一个值得讨论的问题,这可能直接影响到对模型评价标准。
作者介绍:江亦凡,华中科技大学本科生,专注于深度学习和计算机视觉。
原文地址:https://zhuanlan.zhihu.com/p/31941969
以上是博主一些个人的想法,欢迎大家在评论区讨论。
热文精选
深度学习高手该怎样炼成?这位拿下阿里天池大赛冠军的中科院博士为你规划了一份专业成长路径
AI人才缺失催生的“跨境猎头”,人才年薪高达300万,猎头直赚100万
技术详解 | 如何用GAN实现阴影检测和阴影去除?相关推荐
- java canvas 缩放图片_详解如何用HTML5 Canvas API控制图片的缩放变换
摘要:这篇HTML5栏目下的"详解如何用HTML5 Canvas API控制图片的缩放变换",介绍的技术点是"html5_canvas.canvas.Html5.控制图片 ...
- Apollo进阶课程㉒丨Apollo规划技术详解——Motion Planning with Autonomous Driving
原文链接:进阶课程㉒丨Apollo规划技术详解--Motion Planning with Autonomous Driving 自动驾驶车辆的规划决策模块负责生成车辆的行驶行为,是体现车辆智慧水平的 ...
- 《Windows驱动开发技术详解》学习笔记
Abstract 如果推荐 Windows 驱动开发的入门书,我强烈推荐<Windows驱动开发技术详解>.但是由于成书的时间较早,该书中提到的很多工具和环境都已不可用或找不到,而本文 ...
- 移动端实时音视频直播技术详解(一):开篇
移动端实时音视频直播技术详解(一):开篇 1.引言 随着互联网用户消费内容和交互方式的升级,支撑这些内容和交互方式的基础设施也正在悄悄发生变革.手机设备拍摄视频能力和网络的升级催生了大家对视频直播领域 ...
- KILLZONE 2 显示技术详解
转自 KILLZONE 2 显示技术详解[上] KILLZONE 2 显示技术详解[下] 人们开始摸索着如何抛弃现有的 Forward Rendering 而使用其他技术.作为其中一个方法,就是最近开 ...
- 《Unity 3D 游戏开发技术详解与典型案例》——1.1节Unity 3D基础知识概览
本节书摘来自异步社区<Unity 3D 游戏开发技术详解与典型案例>一书中的第1章,第1.1节Unity 3D基础知识概览,作者 吴亚峰 , 于复兴,更多章节内容可以访问云栖社区" ...
- 最新ChatGPT GPT-4 相似匹配Embedding技术详解(附ipynb与python源码及视频讲解)——开源DataWhale发布入门ChatGPT技术新手从0到1必备使用指南手册(一)
目录 前言 最新ChatGPT GPT-4 相似匹配Embedding技术详解 1. 何为Embedding 2. 相关API 2.1 LMAS Embedding API 2.2 ChatGPT S ...
- 【H.264/AVC视频编解码技术详解】十九:熵编码算法(5)——H.264的CABAC(上):语法元素的二值化方法...
<H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...
- Linux磁盘阵列技术详解(二)--raid 1创建
我在Linux磁盘阵列技术详解(一)里已经详细介绍了几种RAID磁盘阵列方式,原理以及创建raid 0 的详细步骤.那么这篇文档就着重讲解如何创建raid 1的技术: 步骤如下: ① 分区 同样我们还 ...
最新文章
- 关于 Python 3.9,那些你不知道的事
- java工资高还是php_java和php哪个工资高
- sklearn朴素贝叶斯分类器_朴素贝叶斯原理
- 松哥整理了 15 道 Spring Boot 高频面试题,看完当面霸
- 你了解京东云区块链吗?点开有详情!
- 自动化测试——接口测试——增删改查
- 10 分钟让你明白 MySQL 是如何利用索引的
- Python仿微信红包算法
- 韩顺平 Java集合 自学笔记(Java30天基础)
- Windows下MySQL定时备份脚本
- arma 预测 matlab代码,求助:ARMA模型进行预测
- 权重衰减(weight decay)
- BGP路由聚合原理和实验(华为设备)
- 数学149的女学霸,直言想当程序员!女生当程序员到底行不行?
- 3t硬盘哪个服务器系统识别,3T硬盘为何不能被系统完全识别
- 如何成为一名优秀的产品经理
- 利器推荐:搜刮一批办公常用软件,你用过哪一款?
- 十六足球队,随机分四组
- ERROR: Command errored out with exit status 1: command: /bin/python -c ‘import sys, setuptools, toke
- 【转载】低压电流互感器实用技术问答30例