图片视频抹除算法总结Inpaint

news2024/10/6 20:26:27

基本是从图片抹水印和视频抹水印两个方向

  • Video Inpainting:https://paperswithcode.com/task/video-inpainting
  • Image Inpainting:https://paperswithcode.com/task/image-inpainting

请根据目录查看

图片

Partial Conv

部分卷积层

源自于Image Inpainting for Irregular Holes Using Partial Convolutions这篇paper,部分卷积模型使用的是UNET结构,但将其中的卷积层替换为了部分卷积。其基本思想是对于图片被mask掉的区域进行由外而内的,递进式的修补,浅层网络学习孔洞外围,深层层网络学习孔洞内部,用作者的话来说就是 Our main extension is the automatic mask update step, which removes any masking where the partial convolution was able to operate on an unmasked value. Given sufficient layers of successive updates, even the largest masked holes will eventually shrink away, leaving only valid responses in the feature map.
在这里插入图片描述

Partial Conv Loss

在训练时,共使用了6个损失函数:

  • Hole loss:对孔洞区域生成的像素和实际像素间做L1 Loss
  • Valid loss:对非孔洞区域生成的像素和实际像素间做L1 Loss

以上两种都是像素级别的loss,但是当孔洞较大时,中间的像素loss就不够用了,所以补了Perceptual loss和Style loss
在这里插入图片描述

  • Perceptual loss:使用一个预训练好的图片特征抽取网络,对原始图片和生成图片分别进行特征抽取,然后对抽取得到的特征图间做L1 loss
  • Style loss:对于抽取出的特征图,求其格拉姆矩阵,然后对原始图片和生成图片的Gram matrix求L1 loss。格拉姆矩阵即两两向量的内积组成的矩阵,用以衡量一个特征图各channel之间的相关关系,其做法是将特征图各channel拉平为1维向量,然后互相做内积。向量的内积的几何意义是向量的夹角,Gram matrix就代表了图片特征图各channel的互相关程度,这一loss常用在风格迁移上,使图片的风格趋同,也即使图片的特征分布趋同。Style loss根据 I c o m p I_{comp} Icomp I o u t I_{out} Iout填了两种, I c o m p I_{comp} Icomp I o u t I_{out} Iout把 the non-hole pixels directly
    set to ground truth后的结果,用来强调非孔洞的逼真性。

为了使生成的图片孔洞交界部分更平滑,论文中还引入了TV loss来降噪:

  • Total variation loss:将图片分别在x轴、y轴平移1像素,计算平移后的图片和原图片的L1 loss

SLBR

来自于Visible Watermark Removal via Self-calibrated Localization and Background Refinement这篇,Pconv是需要传入孔洞位置的,这篇相当于训练的时候检测修复一起做了,end2end。但这种方法抹视频的时候会出现某些帧识别不好出现幽灵水印的情况,实际视频抹除也不适合这种做法,但本paper思路还是不错的。
SLBR的基本结构也是UNET,两个任务共用encoder和第一层decoder。模型分为两个阶段,Coarse Stage阶段生成mask和粗修复的图像,Refinement Stage阶段以生成的mask和粗修复的图像为输入,使用一个层数较小的UNET对图片进一步优化:
在这里插入图片描述
在这里插入图片描述
其中MBE模块就是将图片修复decoder层的输入特征拼接上mask decoder层的输出,加入mask信息来强化修复效果;CFF层为拼接了不同层的特征;SMR目标是消除mask像素识别的误召和漏召。首先根据当前层的特征图 X m X^m Xm生成一个预测mask,将这个mask乘上 X m X^m Xm,虽然此时的预测mask存在误召和漏召,但其中仍然是mask像素占主要部分,对其pooling后得到的特征向量 x m x^m xm认为是代表了mask区域的主要特征。将 x m x^m xm扩展为和特征图 X m X^m Xm同样大小后,与 X m X^m Xm拼接,生成最终的mask预测。然而实际中,像素级别的误召和漏召很难完全避免,这也是制约这种算法效果的一种主要原因。

LAMA

来自于Resolution-robust Large Mask Inpainting with Fourier Convolutions,想法是傅立叶卷积来代替通常的卷积层,增强模型的感受野,让模型在浅层就能学习到全局特征。傅里叶卷积听起来很厉害,但实际上用pytorch的卷积操作都可以实现,来自于Fast Fourier Convolution这篇。因为每个点都表示图中包含的一种波,也就是每个点都代表了一定的全局特征,所以进行傅立叶变换后再进行卷积,不管卷积核的大小如何,都是在对全局特征做计算
在这里插入图片描述
LAMA使用了对抗损失,生成器负责生成图片,判别器负责判断这个图片是真实图片还是由生成器生成的图片,生成器和判别器间互相对抗,互相优化,从而最后使生成器能够生成以假乱真的图片,这一框架被广泛应用于各类图片生成任务中。
在图片修复任务中,修复模型是生成器,判别器的任务是判断原始图片和修复图片孰真孰假。本文中使用的是PatchGAN,即将图片切分为若干个patch,然后让判别器对每个patch判断真假,与水印区域有交集的patch标记为假,否则为真。具体实现上则是使用了若干层卷积网络叠加,输出NxN的预测矩阵,每个点即代表了对该点感受野的预测。相比于直接对整张图判断真假,PatchGAN能够对图像的局部做出判断,从而促使生成器生成更好的细节特征。

除了对抗损失,LAMA在训练时使用了High receptive field perceptual loss,最终的loss为:
在这里插入图片描述

视频

上面三个图像工作是三种思路,但是下面三个视频思路是一脉相承的

STTN

来自于Learning Joint Spatial-Temporal Transformations for Video Inpainting,关键点在于视频帧中间如何交互,提出了Spatial-Temporal Transformer模块,通过这一模块在时空上进行帧间信息的交换。其做法是将输入的特征图在宽高维度上切分为若干个patch,然后将patch拉成1维token,再去做attention。文中使用了不同patch size的attention头,大patch size的头关注全局结构,小patch size的头关注局部细节,最后将这些不同patch size头的输出加权相加,恢复为原始特征图的shape:
在这里插入图片描述
STTN模型也使用了对抗损失,其使用了名为T-PatchGAN的判别器,T指的是Temporal,相比于PatchGAN使用2维卷积,T-PatchGAN的判别器使用了3维卷积,来捕获帧间的时序信息,从而促使生成器生成在时序上连续性更强的帧。

FuseFormer

来自于FuseFormer: Fusing Fine-Grained Information in Transformers for Video Inpainting,同样是使用了Transformer模块,但与STTN不同的是,它没有用不同尺度的patch,而是使用了Soft Split来将图片分割为有交叠的patch。用作者自己的话来说就是It aims at tackling the drawbacks of lacking fine-grained information in patch-based Transformer models. The soft split divides feature map into many patches with given overlapping interval while the soft composition stitches them back into a whole feature map where pixels in overlapping regions are summed up.
在这里插入图片描述
过完transformer后,再通过Soft Composite将这些patch拼合,交叠区域相加,通过交叠区域,来完成patch与patch间的特征交互。

E2FGVI = Optical + FuseFormer

来自于Towards An End-to-End Framework for Flow-Guided Video Inpainting,E2FGVI顾名思义在FuseFormer基础上又引入了光流。
在这里插入图片描述
本文中光流预测使用了SpyNet,结合了传统方法中空间金字塔的思想,大大减少了传统FlowNet的参数量。
在这里插入图片描述

Optical flow其实代表了空间上的变化

图里 E b t ^ \hat{E_b^t} Ebt^表示 the backward propagation feature at the t-th time step, E t E^t Et表示 the local temporal neighboring features extracted from the context encoder, F ^ t − > t + 1 \hat{F}_{t->t+1} F^t>t+1表示optical flow。值得注意的是,由于光流预测后本身有些噪声,所以作者并没有直接和 E t E^t Et融合,而是把光流信息经过一系列 deformable convolutional layer同时结合 E b t + 1 ^ \hat{E_b^{t+1}} Ebt+1^来得到图中的 D b \mathcal{D}_b Db,再和 E t E^t Et融合

FuseFormer其实代表了时间上的融合

we stack multiple temporal focal transformer blocks to effectively combine the information from local and non-local temporal neighbors for performing content hallucination. 这里Transformer和STTN里还有些区别,如图,这种方式可以结合Coarse-grained和 fine-grained ,图里的 Z ^ n − 1 \hat{Z}^{n-1} Z^n1表示经过SS后得到的embedding token
在这里插入图片描述

评估指标

PSNR

PSNR全称是Peak Signal-to-Noise Ratio,峰值信噪比,表示信号最大可能功率和影响它的表示精度的噪音功率的比值,对于原始图像和添加了噪音的图像,PSNR越大,代表和原图像越接近

SSIM

SSIM全程是Structural SIMilarity,结构相似性,衡量两张图片亮度、对比度和结构的相似度

参考文献

  1. Image Inpainting for Irregular Holes Using Partial Convolutions
  2. https://zhuanlan.zhihu.com/p/99605178
  3. 其他都在正文中注明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/740506.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

游戏服务器搭建过程中Maven多模块编译遇到的一些问题

目录 1、多模块的创建 1.1 父模块的创建 1.2 删除垃圾文件 1.3 修改pom.xml 1.4 创建子模块继承 2、子模块之间的互相引用 3、多个模块间版本的管理 3.1 dependencis 3.2 dependencyManagement 4、依赖执行 5、在Spring Boot项目中加载依赖项目的组件有几种常用的方法…

十一、PBR材质金属度、粗糙度以及环境贴图的使用

Three.js——十一、PBR材质金属度、粗糙度以及环境贴图的使用 metalness金属度 金属度属性.metalness表示材质像金属的程度, 非金属材料,如木材或石材,使用0.0,金属使用1.0。 new THREE.MeshStandardMaterial({metalness: 1.0,//金属度属性 }) // 或者 // mesh.material.met…

Java面试题-并发篇(2万字带你搞定并发问题)

Java面试题-并发篇 一、线程 1. 线程和进程有什么区别? 线程具有许多传统进程所具有的特征,故又称为轻型进程(Light—Weight Process)或进程元;而把传统的进程称为重型进程(Heavy—Weight Process),它相当于只有一个线程的任务…

山西电力市场日前价格预测【2023-07-12】

日前价格预测 预测明日(2023-07-12)山西电力市场全天平均日前电价为446.44元/MWh。其中,最高日前价格为584.92元/MWh,预计出现在12: 00。最低日前电价为325.62元/MWh,预计出现在00: 30。 价差方向预测 1:实…

【操作系统】磁盘调度算法 先来先服务、最短寻道时间优先、扫描算法、循环扫描算法

目录 一、实验要求二、实验原理三、实验内容四、实验结果五、总结 一、实验要求 设计程序模拟先来先服务FCFS、最短寻道时间优先SSTF、扫描算法SCAN和循环扫描算法CSCAN的工作过程。假设有n个磁道号所组成的磁道访问序列,给定开始磁道号m和磁头移动的方向(正向或者反…

【sgRectSelect】Vue实现拖拽鼠标圈选、划区域、框选组件:矩形区域选中checkbox,并回调相关选中、取消选中的操作

边框线虚线动画效果请参阅边框虚线滚动动画特效_虚线滚动效果_你挚爱的强哥的博客-CSDN博客【代码】边框虚线滚动动画特效。_虚线滚动效果https://blog.csdn.net/qq_37860634/article/details/130507289 碰撞检测原理请前往 原生JS完成“一对一、一对多”矩形DIV碰撞检测、碰撞…

嵌入式c语言编码规范

学习嵌入式的同学应该首先掌握嵌入式编码规范,这样才能更好的嵌入式系统。 下面就从这几个方面讲解一下嵌入式c编码规范。 注释风格、排版风格、头文件风格、变量定义、宏定义、函数 1 注释风格 1.1 注释的原则是有助于对程序的阅读和理解,注释不宜太多…

通过(.zip 压缩文件)安装及卸载MySQL

文章目录 一、MySQL安装1.下载MySQL压缩包2.将下载好的压缩包解压到一个没有中文路径的目录下3.配置MySQL环境变量4.验证是否配置成功5.初始化MySQL数据库6.注册MySQL服务7.启动MySQL服务8.修改MySQL数据库默认账户密码9.登录MySQL数据库10.退出MySQL 二、MySQL卸载1.以管理员身…

什么是EDI 180 退货授权和通知?

EDI 180 退货授权和通知是零售商和供应商在退货过程中使用的电子数据交换(EDI)文件。它既可以作为请求和授权,也可以作为通知文件。 EDI 180 的基本组成部分是什么? EDI 180 交易需要包括有关退货的关键信息。由于EDI 180可以双…

Linux 批量杀掉进程(包含某个关键字)

一、场景说明 现场环境有十多个包含 ”celery” 关键字的进程在运行,每次重启服务,需要将这些进行kill掉,然后重新启动。 可以用如下命令批量kill掉这些进程: kill -9 PID1 PID2 PID3 PID4.....其中,PID是查询到的进…

第九章——内存模型和名称空间

单独编译 C允许程序员将组件函数放在独立的文件中。下面列出了头文件中常包含的内容: 函数原型使用#define或const定义的符号常量结构声明类声明模板声明内联函数 将结构声明放在头文件中是可以的,因为它们不创建变量,而只是在源代码文件…

数据结构--树的存储结构

数据结构–树的存储结构 树的逻辑结构 树是 n ( n ≥ 0 ) n (n\ge0) n(n≥0)个结点的有限集合,n 0 时,称为空树,这是一种特殊情况。 在任意一棵非空树中应满足: 1)有且仅有一个特定的称为 根 …

如何执行Photoshop脚本

环境 Photoshop: CC2017 OS: Windows 10 脚本放置位置 C:\Program Files\Adobe\Adobe Photoshop CC 2015\Presets\Scripts #也就是 PS的安装目录\Presets\Scripts

操作系统接口 MIT 6.828 - 1. Lab 01: Xv6 and Unix utilities

本文会将lab1中的思路以及知识点进行分析,并作为作者学习MIT 6.828的一个学习总结,希望能够帮助到学习该lab的同学们 中文版书籍:中文版书籍 实验教案地址:教案地址 操作系统接口 在操作系统中,为了能够有效地与操作系…

Amelia、Bookly 和 Booked:哪个WordPress预约插件更好?

各种企业都需要预订软件来管理预约。然而,开发预订系统是网站中最复杂和最昂贵的元素之一。 那些使用 WordPress 构建网站的人有一个优势。只需点击几下,他们就可以将预约插件集成到他们的网站中。 预约插件是一个预订向导,可以自动执行和管…

数据结构——堆的实现(细)

目录 1.1 二叉树的顺序结构 普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆…

Netty核心技术十--Netty 核心源码剖析

1. 基本说明 只有看过Netty源码,才能说是真的掌握了Netty框架。 在 io.netty.example 包下,有很多Netty源码案例,可以用来分析 2. netty 启动过程源码分析 本次分析使用的是example包下的echo 2.1 源码剖析的目的 用源码分析的方式走一下…

Java 动态规划 Leetcode 63. 不同路径 II

该题大部分思路可以根据Leetcode 62. 不同路径这篇博客了解 这里进行基于上面那篇博客后来对该题进行补充 代码展示: class Solution {public int uniquePathsWithObstacles(int[][] obstacleGrid) {int mobstacleGrid.length;int nobstacleGrid[0].length;//创建…

HDFS块详解

HDFS块详解 传统型分布式文件系统的缺点 现在想象一下这种情况:有四个文件 0.5TB的file1,1.2TB的file2,50GB的file3,100GB的file4;有7个服务器,每个服务器上有10个1TB的硬盘。 在存储方式上,我…

Docker安装ElasticSearch8.X docker安装elasticsearch8.X完整详细教程

Docker安装ElasticSearch8.X docker安装elasticsearch8.X完整详细教程 Docker 上安装 ElasticSearch 8.8.1 的步骤:选择要安装的ElasticSearch 版本1、拉取 ElasticSearch 镜像2、创建并运行容器关闭容器启动容器重启容器 3、elasticsearch常用端口以及作用4、测试&…