反P图技术 水记(用光流还原出原图)

反P图技术 水记(用光流还原出原图)

Detecting Photoshopped Faces by Scripting Photoshop》

https://arxiv.org/abs/1906.05856

想看这篇主要是想看看,他是如何用神经网络对图像进行变形的

Detecting Photoshopped Faces by Scripting Photoshop方法部分理解_飞鸡110的博客-优快云博客

Detecting Photoshopped Faces by Scripting Photoshop笔记_Delia_ing的博客-优快云博客

似乎是用了一个检测网络和一个修正网络

修正网络用的是光流!!!

在检测到一张脸是否被修改过之后,观众自然会问图像是如何被编辑的,图像的哪些部分被扭曲了,图像在被修改之前是什么样子的?

要做到这一点,我们预测一个光学流场 U ^ ∈ R H × W × 2 \hat{U} \in \mathbb{R}^{H \times W \times 2} U^RH×W×2 从原始图像 X orig  ∈ R H × W × 3 X_{\text {orig }} \in \mathbb{R}^{H \times W \times 3} Xorig RH×W×3 到扭曲图像 X X X ,然后使用它来尝试“反向”操作和恢复原始图像。

光流预测模型的损失函数

损失分为三部分

光流场损失:

L epe  ( F ) = ∥ M ⊙ ( F ( X ) − U ) ∥ 2 \mathcal{L}_{\text {epe }}(\mathcal{F})=\|M \odot(\mathcal{F}(X)-U)\|_{2} Lepe (F)=M(F(X)U)2

X X X 是输入的编辑后的图像

U U U 是 ground truth 的光流

M M M 是一个二值 mask,用于去除错误的光流。

抛弃在 forward-backward consistency test 中失败的像素,就得到 M ∈ R H × W × 1 M \in \mathbb{R}^{H \times W \times 1} MRH×W×1

光流场变化损失:

通过最小化光流场梯度的多尺度损失,来提高光流场的光滑程度

L m s ( F ) = ∑ s ∈ S ∑ t ∈ { x , y } ∥ M ⊙ ( ∇ t s ( F ( X ) ) − ∇ t s ( U ) ) ∥ 2 \mathcal{L}_{m s}(\mathcal{F})=\sum_{s \in S} \sum_{t \in\{x, y\}}\left\|M \odot\left(\nabla_{t}^{s}(\mathcal{F}(X))-\nabla_{t}^{s}(U)\right)\right\|_{2} Lms(F)=sSt{x,y}M(ts(F(X))ts(U))2

其中 ∇ x s , ∇ y s \nabla_{x}^{s},\nabla_{y}^{s} xs,ys 表示水平和竖直方向上光流场的梯度,decimated by stride s ∈ { 2 , 8 , 32 , 64 } s \in \{2,8,32,64\} s{2,8,32,64}

就是说 ∇ x s \nabla_{x}^{s} xs 中的 t t t 表示不同方向, s s s 表示不同尺度(步长)

这个式子就是用来减小 不同方向 不同尺度 的 预测光流场 的 梯度 与 真实光流场 的 梯度 的差别

重建损失:

L r e c ( F ) = ∥ T ( X ; F ( X ) ) − X orig  ∥ 1 \mathcal{L}_{r e c}(\mathcal{F})=\left\|\mathcal{T}(X ; \mathcal{F}(X))-X_{\text {orig }}\right\|_{1} Lrec(F)=T(X;F(X))Xorig 1

只应用重构损失会导致 low-texture regions 的歧义,这往往会导致伪影

组合三种损失:

L total  = λ e L epe  + λ m L m s + λ r L rec  \mathcal{L}_{\text {total }}=\lambda_{e} \mathcal{L}_{\text {epe }}+\lambda_{m} \mathcal{L}_{m s}+\lambda_{r} \mathcal{L}_{\text {rec }} Ltotal =λeLepe +λmLms+λrLrec 

其中, λ e = 1.5 ,   λ m = 15 ,   λ r = 1 \lambda_e=1.5,\ \lambda_m=15,\ \lambda_r=1 λe=1.5, λm=15, λr=1

模型架构

作者使用 DRN-C-26 [39],在ImageNet[32]数据集上预先训练,作为用于局部预测的基础网络。

DRN架构最初是为语义分割而设计的,作者发现它在翘曲预测任务中工作得很好。

作者发现,直接训练光流回归网络的性能很差。

作者首先将问题重构为回归问题中常用的多叉分类(如着色[22,40]、表面法线预测[36]和生成式建模[27]),然后用回归损失进行微调。

作者使用 PWC-Net [33] 计算 ground truth 光流。

训练程序的细节见附录A6。

训练,分为两阶段

(专门去看了附录)

光流估计模型的训练分为两个阶段,

先在离散化的光流场上预训练,再在真正的光流场上微调

阶段一:

先训练一个逐像素的 121 类分类器,用于预测离散化的形变场

形变场每个像素的向量被离散化为 { u , v } \{u,v\} {u,v}

其中 u , v ∈ { − 5 , − 4 , ⋯   , 0 , ⋯   , 4 , 5 } u,v\in \{-5,-4,\cdots,0,\cdots,4,5\} u,v{5,4,,0,,4,5} (绝对值超过 5 的被截断),正好是 121 种组合

这种策略与 Zhang et al. [40] 一致(这个是做图片上色的),先做离散化的多分类任务,再微调,会比直接训练有更好的效果

阶段二:

用预训练的模型初始化光流估计模型的基础网络,剩余部分用高斯分布随机初始化

两个阶段都是用的 Adam 优化器

Experiments

评估一种用的是人工ps的,一种用的是脚本ps的

首先研究验证集上修改的图像是否可以由全局分类器检测到。 通过扰动图像来测试分类器的鲁棒性,并测量其对专业艺术家操作的泛化能力

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值