在stable diffussion中完美修复AI图片

news/2024/12/21 22:11:12/文章来源:https://www.cnblogs.com/flydean/p/18404763

无论您的提示和模型有多好,一次性获得完美图像的情况很少见。

修复小缺陷的不可或缺的方法是图像修复(inpainting)。在这篇文章中,我将通过一些基本示例来介绍如何使用图像修复来修复缺陷。

需要的软件

我们将使用 AUTOMATIC1111 Stable Diffusion GUI 来创建图像。

基本的图像修复设置

在这一部分,我将逐步展示如何使用图像修复来修复小缺陷。

我们先使用下面的提示来创建一张图片:

正向提示词:

masterpiece,best quality,masterpiece,best quality,official art,extremely detailed CG unity 8k wallpaper,a beautiful woman,full body,

负向提示词:

lowers,monochrome,grayscales,skin spots,acnes,skin blemishes,age spot,6 more fingers on one hand,deformity,bad legs,error legs,bad feet,malformed limbs,extra limbs,

我们可以得到下面的图片:

image-20240703201556791

虽然这张图片整体上看起来还不错,但是还是有一些问题。

比如脸部和手部。

那么接下来我们怎么修复呢?

选择对应的模型

如果你经常浏览C站的话,你可以看到对于有些模型会有一种专门给重绘使用的模型,这种模型是专门为图像修复而训练的Stable Diffusion模型。

如果您想获得最佳结果,可以使用它。但通常,使用生成图像的相同模型进行图像修复也是可以的。

我们把对应的模型下载下来,并将其放入文件夹中:

stable-diffusion-webui/models/Stable-diffusion

在AUTOMATIC1111中,点击左上角检查点选择下拉框旁边的刷新图标,就可以看到你刚刚下载的模型了。

创建图像修复遮罩

在AUTOMATIC1111 GUI中,选择img2img标签并选择Inpaint子标签。将图像上传到图像修复画布。

或者在txt2img标签中选择send img to inpaint。

我们将同时修复手部和脸部。使用画笔工具创建一个遮罩。这是您希望Stable Diffusion重新生成图像的区域。

image-20240703202118650

图像修复的设置

图像大小

需要调整图像大小以与原始图像相同。(在这种情况下为768 x 512)。

image-20240703202219551

面部修复

如果您正在修复面部,可以打开restore faces。选择对应的face restoration model:CodeFormer。

image-20240703202529557

有朋友会问了,为什么我的页面上面没有restore faces选项呢?

如果你没有这个选项的话,需要到setttings里面的user interface添加下面的两个设置:

image-20240703202501548

请注意,此选项可能会生成不自然的外观。它也可能生成与模型风格不一致的内容。

遮罩内容

下一个重要设置是Masked Content

如果您希望结果由原始内容的颜色和形状引导,请选择original

original通常用于面部图像修复,因为一般形状和解剖结构是正确的。我们只是希望它看起来有点不同。

在大多数情况下,您将使用original并更改去噪强度以实现不同的效果。

如果您想要从原始图像中完全重新生成某些内容,例如移除一个肢体或隐藏一只手,可以使用latent noiselatent nothing

这些选项使用与原始图像不同的内容初始化遮罩区域。它将产生完全不同的东西。

去噪强度

去噪强度控制与原始图像相比将进行多少变化。当您将其设置为0时,什么都不会改变。当您将其设置为1时,您将获得一个不相关的图像。0.75通常是一个很好的起点。如果您想要更少的变化,请降低它。

批量大小

确保一次生成一些图像,以便您可以选择最好的。将种子设置为-1,以便每个图像都不同。

图像修复结果

以下是一些修复后的图像。

image-20240703204340543

可以看到第四张还是不错的,但是还不够完美。所以我们可以考虑再来一轮修复。

再进行一轮图像修复

把上面生成的最后一张图片再发到inpait中再次修复。

我们可以得到下面的结果:

image-20240703204936210

图像修复是一个迭代过程。您可以根据需要多次应用它来细化图像。

如果一次不行的话,我们可以考虑多来几次。

添加新对象

有时,您可能希望在图像中添加一些新东西。

让我们尝试在图片中添加一把剑。

首先,将图像上传到图像修复画布并在手部的位置添加遮罩。

在原始提示的开头添加“holding a sword”。图像修复的提示是

(holding a sword:1.5),masterpiece,best quality,masterpiece,best quality,official art,extremely detailed CG unity 8k wallpaper,a beautiful woman,full body,

向原始提示中添加新对象确保风格一致。您可以调整关键词权重(上面的1.5)以使宝剑显示。

遮罩内容设置为潜在噪声

调整去噪强度CFG比例以微调修复后的图像。

经过一些实验,我们的任务完成了:

image-20240703210315083

图像修复参数的解释

去噪强度

去噪强度控制最终图像和原始内容的相似度。将其设置为0则什么都不会改变。将其设置为1,则您会得到一个不相关的图像。

如果您想要小的变化,请设置为低值;如果您想要大的变化,请设置为高值。

CFG scale

类似于在文本到图像中的使用,CFG scale是一个参数,用于控制模型和你的提示词的关联度。

1 – 大致忽略您的提示。

3 – 更有创造力。

7 – 在遵循提示和自由之间取得良好的平衡。

15 – 更多地遵循提示。

30 – 严格遵循提示。

遮罩内容

遮罩内容控制遮罩区域是如何初始化的。

fill:用原始图像的高度模糊版本初始化。

Original:未修改。

latent noise:遮罩区域用填充初始化,并在潜在空间中添加随机噪声。

latent nothing:像潜在噪声,只是没有在潜在空间中添加噪声。

图像修复的技巧

成功的图像修复需要耐心和技巧。以下是使用图像修复的一些要点:

  • 一次修复一个小区域。
  • 尝试不同的遮罩内容以查看哪个最有效。
  • 可以多次尝试修复。
  • 如果在AUTOMATIC1111的设置中什么都不起作用,请使用像Photoshop或GIMP这样的图像编辑软件,用您想要的大致形状和颜色绘制感兴趣的区域。上传那张图像并用原始内容进行图像修复。

点我查看更多精彩内容:www.flydean.com

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

51nod 1020 逆序排列

51nod 1020 逆序排列 学习笔记 其实要预处理,但唐的我非要每次都求一遍。 设状态为 \(dp[i][j]\) 选了 i 个数逆序对数为 j 的排序种类数。 首先初始化 \(dp[i][0]=1\) 即没有逆序对,转移方程 \(dp[i][j]=dp[i-1][j]+dp[i-1][j-1]+……+dp[i-1][j-i]\) 这是显然的(放上这个数…

2181.合并零之间的节点

问题描述: 给你一个链表的头节点 head ,该链表包含由 0 分隔开的一连串整数。链表的 开端 和 末尾 的节点都满足 Node.val == 0 。 对于每两个相邻的 0 ,请你将它们之间的所有节点合并成一个节点,其值是所有已合并节点的值之和。然后将所有 0 移除,修改后的链表不应该含有…

调谐半导体吸收光谱(TDLAS)技术简介

一、调谐半导体吸收光谱(TDLAS)技术简介 TDLAS是Tunable Diode Laser Absorption Spectroscopy的简称,该技术主要是利用可调谐半导体激光器的窄线宽和波长随注入电流改变的特性,通过调制激光器的波长,使激光器的波长扫描过被测气体分子的吸收峰,从而基于比尔朗伯定律,使气…

极狐GitLab 新一代容器镜像仓库正式上线啦!

从极狐GitLab 17.3 开始,私有化部署实例也可以使用新一代容器镜像仓库啦!新一代容器镜像仓库具有更高效的零宕机垃圾收集功能和其他优势。从去年开始,极狐GitLab 就启动了重构容器镜像仓库的计划,用以构建具有更强功能的镜像仓库,比如零宕机垃圾收集。自从将此功能成功迁移…

集合底层学习笔记

集合的底层原理 数据结构中有 数组 和 链表 来实现对数据的存储,但这两者基本上就是两个极端。数组:数组存储区间是连续的,占用内存严重,故空间复杂度很大。但数组的二分查找时间复杂度很小,为O(1);数组的特点是:寻址容易,插入和删除困难。 链表:链表存储区间不连续,占…

2.HDFS

HDFS一.HDFS概述1.HDFS的产生背景和定义(1)HDFS产生背景随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到 更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系 统来管理多台机器上的文件,这就是分布式管理系统.HDFS只是分布式文 件管理系统中的一…

编译hello world

新建一个文件夹存放代码 在文件夹内新建一个java文件。hello.java 在文件内编写代码public class hello{public static void main(String[] args){System.out.print("hello world!");} }编译java文件,在文件目录下打开命令提示符窗口,输入:javac hello.java编译ja…

海外合规|新加坡 【数据保护新风向】你的DPO注册了吗?

数据安全已经成为了我们不可忽视的重要议题。新加坡个人数据保护委员会(PDPC)提醒,2024年9月30日之前,根据新加坡的个人资料保护法(PDPA),每个组织都必须指定至少一名数据保护官(DPO)来确保数据的合规使用。 DPO注册相关问题: 1、是否必须通过BizFile+注册我组织的DP…

Linux脚本中 指令返回值得获取,以及参数等获取

在写脚本时,经常遇到这样的问题: 如何获取当前进程号,脚本执行过的命令的进程号? 如何获取当前时间? 如何得到参数个数? 如何得到脚本中各命令的返回信息?。。。。 其实这些信息都能轻松从shell预定义的一些特殊变量获得,下面总结了一些常用的。特殊的shell变量:#获取当…

51nod 1296 有限制的排列

题目链接 学习链接 设状态 \(dp[i][j]\) 表示整数 \([1,i]\) 满足要求的排列中,最后一个数选 \(j\) 的排列数。 开一个数组记录他的状态:把前面已选好的序列中大于等于 \(j\) 的数都加一后再把 \(j\) 加到后面。#include <bits/stdc++.h> using namespace std; #define…

canvas版本中国象棋,象棋的棋子控制还是复杂一些

代码:<!Doctype html> <html lang="zh_cn"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>中国象棋</title><meta name="Keywords" content="&q…

yolo与目标检测(v1-v5)

yolo v1-v5与目标检测 深度学习经典检测方法概述 目标检测的两种方法从yolov1开始讲解,v2,v3都是在此基础上 单阶段目标检测,需要输出的就是四个值(x,y,w,h) 这样看起来很像是一个回归任务而双阶段目标检测,是先选出候选区域,在进行预测,具体细节可以看完之前文章,物体检…