Foreground-aware Image Inpainting
引言
语义分割得到边缘信息指导修复其三
存在问题:现在的图像修复方法主要的通过周围像素来修复,当修复区域与前景区域(显著物体)有交叠时,由于修复区域缺失前景与背景的时间内容导致修复结果不理想。
提出方法:a foreground-aware image inpainting system,可明确区分结构推断和内容修复。模型首先预测前景轮廓,然后根据预测发前景轮廓进行区域修复。
论文来源:CVPR 2019
相关论文:
《Image inpainting for irregular holes using partial convolutions.》部分卷积《Free-form image inpainting with gated convolution》门控卷积
《Spg-net: Segmentation prediction and guidance network for image inpainting.》通过语义分割获取前景蒙版,来修复图像
论文贡献:
1.提出区分结构推断和内容修复的模型,使用显式轮廓指导explicit contour guidance修复图像
2.为了推断图像结构(图像边界),提出了边界修复模型来参数精确的图像边界
3.为了高效率完成模型的训练,我们采用curriculum的训练方法来训练结构推断和内容修复的模型
数据集的制作:
基于前景感知的图像修复框架要求我们训练一个轮廓补全模块并自动推断轮廓,因此我们需要一个带有标记轮廓的训练数据集。
salient object segmentation datasets(显著物体目标检测):显著目标检测来源于视觉显著性,即找到一张图像中人眼最关注的目标区域,是一个二分类的问题。背景全部变为黑色,而目标变为白色,但是一般只能检测一个显著性目标,不会涉及到分类的问题。
从各种公共数据集(显著性分割数据集:包括MSRA-10K[10]、人工注释的Flickr自然图像数据集等)中收集了超过15762幅包含一个或几个突出对象的自然图像。每个图像在这个突出数据集中被注释与一个精确的分割掩码。数据集的内容非常多样化,包含了各种各样的对象,包括动物、植物、人、面孔、建筑物、街道等等。每个图像中物体的相对大小有很大的差异。我们将所有样本分为12,609张训练图像和3,153张测试图像。
利用mask的数据集:Places2, Paris ,CelebFace
网络结构:
1 Contour Detection
通过DeepCut生成一个具有精确边界的物体蒙版;
由于图像上缺失区域的存在,导致生成的语义分割模板带有噪声,使用二值化孔洞蒙版的方式移除蒙版中被误分类为物体的像素点,再通过connected component analysis连接成分分析进一步移除小集群来获得前景蒙版;
再通过Sobel边缘检测算子获得物体的不完整边界
2Contour Completion Module
目的:是补全缺失区域内的输入图像的缺失轮廓。预测出的edge map是二值图像。1表示前景对象的边界,0表示图像中的其他像素。
架构:
输入:待修复的图像、生成的非完整边界、孔的蒙版
输出:完整的物体边界
主体是GAN网络,经过粗细两层修复网络。
粗网络:encoder-decoder结构,得到孔洞粗略的边界预测,不能作为有效指导。
细网络:在粗网络的基础上机上 contextual attention layer。
类似于下图
PatchGAN
损失函数:
细网络上增加hinge loss,采用ReLu函数
3 Image Completion Module
损失函数
实验结果
Foreground-aware Image Inpainting的更多相关文章
- spring源码:Aware接口(li)
一.spring容器中的aware接口介绍 Spring中提供了各种Aware接口,比较常见的如BeanFactoryAware,BeanNameAware,ApplicationContextAwa ...
- 源码阅读笔记 - 2 std::vector (2) 关于Allocator Aware Container特性
所有的STL容器,都保存一个或默认,或由用户提供的allocator的实例,用来提供对象内存分配和构造的方法(除了std::array),这样的容器,被称作Allocator Aware Contai ...
- ios app响应background,foreground 事件实现
1 通过AppDelegate 实现 App进入后台事件方法 - (void)applicationDidEnterBackground:(UIApplication *)application AP ...
- Enlisting multiple 1-phase aware participants in the same transaction
In some cases it may be necessary to enlist participants that aren't two-phase commit aware into a t ...
- Windows Phone Foreground Toast
Basically ToastPrompt is an UI component that derives from the Coding4Fun toolkit's abstract PopUp&l ...
- GMF:如何让网格显示在background,而不是foreground
前言 很久没写文章了,准备写一系列关于Eclipse RCP /Plugin的文章. 这些文章都是trouble shooting性质的,不准备写的很细,当你碰到这样的问题,google到时,能帮你把 ...
- 收到远程通知,怎么区分是点击通知栏提醒进去的还是在foreground收到的通知?
我现在是要区分点击通知栏的通知进入应用还是点击应用图标进入的,1,开始程序都是在后台.2,接受通知都是在foreground状态.applicationdidFinishLaunchWithOptio ...
- Spring中Aware相关接口原理
Spring中提供一些Aware相关接口,像是BeanFactoryAware. ApplicationContextAware.ResourceLoaderAware.ServletContextA ...
- Bean的前身今世&处理器&Aware
出生: <bean>......</bean> 幼年:BeanDefinition bean的接口定义 小学:GenericBeanDefinition 基础的bean映射 ...
- spring中的aware接口
1.实现了相应的aware接口,这个类就获取了相应的资源. 2.spring中有很多aware接口,包括applicationContextAware接口,和BeanNameAware接口. 实现了这 ...
随机推荐
- Redis常用命令(4)——List
BLPOP 格式:BLPOP key [key ...] timeout 作用:从列表左侧弹出元素,超时时间为timeout,单位为秒.如果timeout为0则一直阻塞直到列表中有元素.如果同时操作多 ...
- Redis常用命令(5)——Set
SADD 格式:SADD key member [member ...] 作用:在集合key中插入一个或多个元素.如果member已经存在,则忽略member.如果key不存在则先创建集合key. 返 ...
- 5分钟GET我使用Github 5 年总结的这些骚操作!
我使用 Github 已经有 5 年多了,今天毫无保留地把自己觉得比较有用的 Gihub 小技巧送给关注 JavaGuide 的各位小伙伴. 这篇文章肝了很久,就挺用心的,大家看内容就知道了. 如果觉 ...
- Hill密码解密过程(Java)
Hill密码是一种传统的密码体系.加密原理:选择一个二阶可逆整数矩阵A称为密码的加密矩阵,也就是这个加密体系的密钥.加密过程: 明文字母依次逐对分组,例如加密矩阵为二阶矩阵,明文就两个字母一组,如果最 ...
- 23longest-consecutive-sequence
题目描述 给定一个无序的整数类型数组,求最长的连续元素序列的长度. 例如: 给出的数组为[100, 4, 200, 1, 3, 2], 最长的连续元素序列为[1, 2, 3, 4]. 返回这个序列的长 ...
- 记载idea创建spring-boot项目时“Spring Initalizr Error”的问题处理
- libcurl 使用记录
1.libcurl中 CURLOPT_TIMEOUT 是使用 SIGALRM实现的,所以要注意 其对别的 SIGALRM 的使用的影响.
- mysql mybatis Date java时间和写入数据库时间不符差一秒问题
1,java的数据库实体定义 private Timestamp createTime:2,非常重要!ddl语句建表字段的单位 datetime要手动设置保留3位毫秒数,不然就四舍五入了! ALTER ...
- Mysql的下载,安装,远程连接,密码加密规则修改。
第一次接触mysql,,很多地方不懂,出了很多问题.本来应该在Linux系统中安装mysql的,但是奈何各种电脑限制,所以在公司电脑的Windows service R2 系统上装了mysql数据库. ...
- php批量转换时间戳
//批量转换时间戳 array_map(array($this, 'myfunction'),'时间戳数组'); //如 array('time1'=>11,'time2'=>2222); ...