宁波建设厅网站,怎么制作一个游戏app,银川网站建设哪家优质,新项目开发流程1、前言
上一篇#xff0c;我们讲述了StyleGAN2。这一篇#xff0c;我们就来讲一个把StyleGAN2作为基底架构的DragGAN。DragGAN的作用主要是对图片进行编辑#xff0c;说厉害点#xff0c;可能和AI修图差不多。这篇论文比较新#xff0c;发表自2023年
原论文#xff1a…1、前言
上一篇我们讲述了StyleGAN2。这一篇我们就来讲一个把StyleGAN2作为基底架构的DragGAN。DragGAN的作用主要是对图片进行编辑说厉害点可能和AI修图差不多。这篇论文比较新发表自2023年
原论文Drag Your GAN: Interactive Point-based Manipulation on the Generative Image Manifold
参考代码https://github.com/skimai/DragGAN
视频AI修图——DragGAN原理解析-哔哩哔哩
演示随意选择红点让红点对应位置的像素移动到蓝点 demo 2、DragGAN运行原理
前置知识StyleGAN请确保你已经知道这个模型
DragGAN模型的原理是构建在StyleGAN的基础上。以下为StyleGAN的模型图 首先你要有一个训练好的StyleGAN然后通过该模型获得一个风格信息w latent Code。接着用这个风格信息合成图像如上图的演示得到狮子的图像。
接着我们在狮子图像上选择数量对等的红色点初始点和蓝色点目标点每一个红色点周围的像素点慢慢移动到对应蓝色点的位置从而达到修图的效果 3、实现方法
DragGAN使用的是StyleGAN2所里里面的风格信息记作w latent Code
StyleGAN2的w latent Code代表的是风格信息。对图像位置进行移动等等其实就是风格信息的修改因此DragGAN其实就是通过优化w来实现图像的变化。并且作者通过实验发现这种空间属性的变化主要由前6层的w latent Code控制所以作者只优化前6层的w。
除此之外作者通过衡量合成网络特征图之间的差异来判断是否初始点达到了目标点。为了方便以下所有的w都表示w
来看具体流程
①对生成的图像狮子其有对应风格信息 w latent Code。在图像上选择红色点初始点记为p跟蓝色点目标点记为t。
②找到256x256分辨率的输出特征图feature map然后通过双线性插值的方法将分辨率采样成1024x1024假设狮子的像素是1024。如下图的Feature记为F ③把在狮子的红色点p和蓝色点t也同样标记在Feature中记为 F ( p ) F(p) F(p) F ( t ) F(t) F(t)计算 p p p指向 t t t的方向向量 d t − p ∣ ∣ t − p ∣ ∣ 2 d\frac{t-p}{||t-p||_2} d∣∣t−p∣∣2t−p分母是对向量归一化.
④在F§这个位置点画一个半径为 r 1 r_1 r1的红色小圆取特征图F里面位置在圆内的所有像素点红色区域记其中某一个像素点为 q i q_i qi并把这个像素点根据方向向量移动即 F ( q i d ) F(q_id) F(qid)
⑤最小化 ∣ ∣ F ( q i ) . d e t a c h ( ) − F ( q i d ) ∣ ∣ 1 ||F(q_i).detach()-F(q_id)||_1 ∣∣F(qi).detach()−F(qid)∣∣1。detach代表 F ( q i ) F(q_i) F(qi)不反向传播这会激励 q i d q_id qid这个位置的值尽量等于 F ( q i ) F(q_i) F(qi)而 F ( q i ) F(q_i) F(qi)代表的刚好是狮子对应位置的特征所以更新之后会产生移动
⑥对于红色圆区域内的所有点我们希望它都朝着d的方向移动所以有最小化 ∑ q i ∈ Ω 1 ( p , r 1 ) ∣ ∣ F ( q i ) . d e t a c h ( ) − F ( q i d ) ∣ ∣ 1 \sum\limits_{q_i\in \Omega_1(p,r_1)}||F(q_i).detach()-F(q_id)||_1 qi∈Ω1(p,r1)∑∣∣F(qi).detach()−F(qid)∣∣1 其中 Ω \Omega Ω表示的是红色圆 q i q_i qi表示属于圆内的像素点。
⑦在实际中可能不止有一个红色点和蓝色点可能存在n个所以 ∑ j 1 n ∑ q i ∈ Ω 1 ( p j , r 1 ) ∣ ∣ F ( q i ) . d e t a c h ( ) − F ( q i d j ) ∣ ∣ 1 \sum\limits_{j1}^n\sum\limits_{q_i\in \Omega_1(p_j,r_1)}||F(q_i).detach()-F(q_id_j)||_1 j1∑nqi∈Ω1(pj,r1)∑∣∣F(qi).detach()−F(qidj)∣∣1 ⑧DragGAN还允许用户选择图像哪些区域不变哪些区域改变则设定区域不变性 ∑ j 1 n ∑ q i ∈ Ω 1 ( p j , r 1 ) ∣ ∣ F ( q i ) . d e t a c h ( ) − F ( q i d j ) ∣ ∣ 1 λ ∣ ∣ ( F − F 0 ) ∗ ( 1 − M ) ∣ ∣ 1 \sum\limits_{j1}^n\sum\limits_{q_i\in \Omega_1(p_j,r_1)}||F(q_i).detach()-F(q_id_j)||_1 \lambda||(F-F_0)*(1-M)||_1 j1∑nqi∈Ω1(pj,r1)∑∣∣F(qi).detach()−F(qidj)∣∣1λ∣∣(F−F0)∗(1−M)∣∣1 其中M是一张与特征图F一样大的矩阵取值0或10代表图像的这个区域不改变1代表可改变。
⑨对上面的损失函数进行优化更新w风格信息得到新的 w ′ w w′新的特征图 F ′ F F′。由于梯度下降和方向向量d的正则化的原因并不能使初始点p一步到位走到目标点t所以需要从新的特征图 F ′ F F′找到初始点p已经走到哪里了我们记初始点为在原始特征图上为 f i F 0 ( p i ) f_iF_0(p_i) fiF0(pi)。
⑩取新的特征图 F ′ F F′在初始点p这个位置画一个变长为 r 2 r_2 r2红色正方形图中第二个特征图把正方形内的像素点与 F 0 ( p i ) F_0(p_i) F0(pi)作最近邻搜索长得最像的那个就是皮卡丘将其作为新的初始点即 p i : arg min q i ∈ Ω 2 ( p i , r 2 ) ∣ ∣ F ′ ( q i ) − f i ∣ ∣ 1 p_i:\mathop{\arg\min}\limits_{q_i\in\Omega_2(p_i,r_2)}{||F(q_i)-f_i||_1} pi:qi∈Ω2(pi,r2)argmin∣∣F′(qi)−fi∣∣1 : : :表示将右边的所得最小对应变量值赋给等式左边
迭代更新最终使得初始点到达点t点结束
看不明白那就看视频吧文字所能传达的信息有限。我尽力了私密马赛
4、结束
以上就是DragGAN这篇论文的全部内容了如有问题还望指出阿里嘎多