SD模特换装:Inpaint Anything

同类案例:https://cloud.tencent.com/developer/article/2365063

 

实例

 

正向: A beautiful woman wearing a white wedding dress adorned with lace, walking along the beach at sunset. Her hair is gently lifted by the breeze, and she is holding a bouquet of white roses. dynamic pose, photography, masterpiece, best quality, 8K, HDR, highres, absurdres: 1.2, Kodak portra 400, film grain, blurry background, bokeh: 1.2, lens flare

 

反向: nsfw, ugly, paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), lowres

 

 

例如,你有像這樣的穿著衣服的人台照片,這張是我們自己展示室拍的照片。

SD模特换装:Inpaint Anything

人台图

 

會用 Stable Diffusion ,不用十分钟,第一张图就出來了。

SD模特换装:Inpaint Anything

 

 

 

就算要做調整,一小時也都夠了。例如:

SD模特换装:Inpaint Anything

人台生成真人模特1

 

SD模特换装:Inpaint Anything

人台生成真人模特2

 

SD模特换装:Inpaint Anything

人台生成真人模特2

 

 

 

一、人台图真人化生成思路

 

将假人台变真人还要保留衣服,这要怎么做呢?

这时熟悉Stable Diffusion的朋友就会说:我知道,就是用图生图里Inpaint功能,然后把衣服外的地方做遮罩,让Stable Diffusion重绘。

那遮罩怎么做?如果要用手一笔笔做遮罩那太慢了,要是这样,我就不用特别出这篇。

又会有人说:我知道,先用photoshop把遮罩做出来,再用遮罩重绘功能。

这也是个方法,但现在还可以更智能。

今天我们要使用一个外挂inpainting anything,给一张照片,它可以把照片用色块分别出不同的东西。到时候我们只要选哪些色块要做成遮罩,这样子遮罩就做出来了。

然后再利用重绘的功能,在保留衣服的情况下,把假人真人化。

 

SD模特换装:Inpaint Anything

 

 

虽然基本的思路是这样,但是如果你自己动手操作过,你就会知道路上还是有很多的坑。

所以在这篇文章里,我不仅会手把手教你如何把假人变成真人,重要的事情是我还会告诉你我是怎么样把这些坑填平的。

现在就一一跟大家说明。

 

 

二、假人台模特真人化准备工具

 

这篇示范是使用 Automatic 1111 的 WebUI ,并采用 SD 1.5 的模型,我们开始准备吧!

 

准备 1 :inpaint anything

 

 

首先会用到 Inpaint Anything 这个外挂,请检查您的 Automatic 1111 的 WebUI 看看有没有页签 Inpaint Anything 的外挂,没有的话请安装一下

SD模特换装:Inpaint Anything

 

 

安裝 inpaint anything

到 Install from URL,輸入

https://github.com/Uminosachi/sd-webui-inpaint-anything.git

 

即可安装

SD模特换装:Inpaint Anything

 

安装好后,回到 install 页签,按下 Apply and quit 即可

SD模特换装:Inpaint Anything

 

 

准备 2 :Inpaint 专用的模型

 

这次我会用 epiCPhotoGasm 示范,这模型出来的品质都像是摄影大师照出来的照片,特别适合用在需要真实画面的地方。

 

我们今天要用的不是他的主要模型,而是要用他的 Inpaint 模型。

SD模特换装:Inpaint Anything

 

请到下方连结,下载它的 Inpaint 模型并安装好,准备等下使用。

https://civitai.com/models/132632?modelVersionId=201346

 

准备 3 :假人照

 

 

我们就用我们的例子这张

SD模特换装:Inpaint Anything

 

这是在自家的展示室拍的,要注意的是他是个黑色的人台,这等一下会惹出些麻烦。这边先预告。

这 3 个东西准备好后,我们就可以开始了。

 

 

三、操作示范

 

这个教学是用 SD 1.5 的模型来示范整个流程。

 

第 1 步:选 SAM 模型及下载模型

 

按下 Inpaint Anything 页签,会看到像这样的画面

SD模特换装:Inpaint Anything

 

选择要使用的语义分割模型 Segment Model ID,。我们这里选 sam_vit_l_0b3195.pth 这一个模型。如果你是刚安装好的话,这些模型还没有下载,你要 Download model 钮,它才会下
载。

SD模特换装:Inpaint Anything

 

 

第 2 步:取得实例分割图

 

 

上传图片到 inpaint anything,然后按下 Run Segment Anything 。

SD模特换装:Inpaint Anything

 

你会在右边看到实例分割图

SD模特换装:Inpaint Anything

 

第 3 步:做出初步的遮罩(mask)

 

如果等下我们要用重绘功能,就要把想要重绘的区域做出遮罩。那现在有语义分隔后的色块,要如何快速的做出遮罩呢?

 

很简单,只要拿滑鼠在想要做遮罩的色块上点一下就好,不必涂整个色块,只要有点到那个色块等一下就会变成遮罩。

 

因为我们希望是背景、假人等等要重绘,所以这些地方要选起来,但是但背景有些复杂,做起
来太麻烦,所以我们可以改将点选衣服上的色块,然后将 Invert Mask 打勾就好。

SD模特换装:Inpaint Anything

 

都点选好以后,按下 Create Mask ,你就会看到遮罩结果。

SD模特换装:Inpaint Anything

 

 

第 4 步: 查看遮罩(mask)结果

 

检查遮罩结果,看看有没有漏掉的,其实画面如果比较复杂,这样很难看清楚,这里有个诀窍,把旁边的 Mask Only 页签开出来。

SD模特换装:Inpaint Anything

 

 

 

上面有两个按钮:

Get mask as alpha of image

Get mask

 

这两钮按下去以后,你就可以看到遮罩有没有做好。

SD模特换装:Inpaint Anything

 

注意,这边的白色,才是遮罩,是未来要 AI 填充的地方,黑色是要保留的部分,不要弄错了。

 

第 5 步: 微调遮罩

 

从这个遮罩图可以发现,除了衣服以外,还有其它地方还没有被遮罩到(也就是有不该出现的
黑色线条)。

SD模特换装:Inpaint Anything

 

这时就手工微调一下。

 

回到产生遮罩的图,在上面把要加遮罩的地方涂上。如果有要增加黑色的地方,就手动画一下,然后按 Trim mask by skatch 钮,反之,要增加白色的方法,手动画一下,按 Add mask by skatch 钮。

 

如果觉得图太小不好涂抹,可以用按 S 将图放大,再按一次 S 即可还原。

SD模特换装:Inpaint Anything

 

加黑色:Trim mask by skatch 钮
加白色:Add mask by skatch 钮

SD模特换装:Inpaint Anything

 

涂好以后,按下 Add mask by sketch

 

接着再到 Mask Only 页签里按下 Get mask 及 Get mask as alpha of image ,是不是我们想要
的遮罩。

SD模特换装:Inpaint Anything

 

如果还有其它杂点,就用同样的方式修掉;如果没问题,我们就进下一步。

 

第 6 步:开始在 inpaint anything 里重绘

 

当我们的遮罩都做好以后,我们就可以开始请 stable diffusion 帮我们填充背景。

 

到 inpaint 页签,填上提词和反向提词。因为我想要生成出来的画面是:美丽的女人穿着婚纱,手拿着白色玫瑰。所以输入以下的提词:

A beautiful woman wearing a white wedding dress while holding a bouquet of white roses. 
Dynamic pose, photography, masterpiece, best quality, 8K, HDR, highres, absurdres: 1.2,
Kodak portra 400, film grain, blurry background, bokeh: 1.2, lens flare

 

反向提词如下:

Nsfw, ugly, paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), lowres

 

SD模特换装:Inpaint Anything

 

选择一个 inpaint 模型,这几个模型是 inpaint anything 他预设的。

SD模特换装:Inpaint Anything

 

 

因为我们要做真实的照片,所以使用 Uminosachi/realisticVisionV51_v51VAE-inpainting 这个
模型。

 

按下 Run Inpainting 后,你就会拿到真人模特儿的图

SD模特换装:Inpaint Anything

 

 

看来不错,我们来多生几张。

SD模特换装:Inpaint Anything

 

SD模特换装:Inpaint Anything

 

 

拿到图以后,你以为这次的教学就结束了吗?

 

还没有!因为真的要用的话,还有些问题

  • 没有办法一次出很多张图让我们挑
  • 没有办法使用我们想要的模型

 

那怎么办呢?所以我们需要下一步。

 

第 7 步: 使用图生图的重绘功能

 

 

回到 Mask Only 页签,按下”Send to img 2 img inpaint”。

SD模特换装:Inpaint Anything

 

 

当您送出遮照后,会跳到图生图的 Inpaint Upload 页签。你会看到你的图片和遮罩都被传过来了

SD模特换装:Inpaint Anything

 

 

这时候熟 SD 的人就会很开心,回到熟悉的地方了,终于可以选自己喜欢的模型了。

那来选一个模型吧!这里我选 chilloutmix。

 

再来调图片尺寸,按下三角板后,系统自动把宽高调成和照片一样,不必我们再输入。

SD模特换装:Inpaint Anything

 

现在要来填提词,现在想要改一下,让美女在海边穿着婚纱,她的头发被微风轻轻吹起,她手里拿着一束白玫瑰。所以我们修改提词如下:

A beautiful woman wearing a white wedding dress adorned with lace, walking along the
beach at sunset. Her hair is gently lifted by the breeze, and she is holding a bouquet of white roses. Dynamic pose, photography, masterpiece, best quality, 8K, HDR, highres, absurdres: 1.2,
Kodak portra 400, film grain, blurry background, bokeh: 1.2, lens flare

 

反向提词不变:

Nsfw, ugly, paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), lowres

 

采样器用 DPM++ 2 M Karras ,采样步数设到 40。

 

其它参数都用预设,如下图:

SD模特换装:Inpaint Anything

 

应都准备好了,现在就生成吧!

出现了怪东西!

SD模特换装:Inpaint Anything

 

 

 

为什么 AI 生成的模特儿,不把衣服换好?衣服像是漂在空中一样。

难道是 Masked content 要调?目前预设是 original 。

SD模特换装:Inpaint Anything

 

那调成别的看看,先调成 fill

SD模特换装:Inpaint Anything

 

 

结果还是没穿好。那调成 latent noise 看看。

SD模特换装:Inpaint Anything

 

画面还更怪了。那难道是要用 latent nothing ?

SD模特换装:Inpaint Anything

 

 

一样没穿好!这到底怎么回事?为什么衣服总是不穿好?

所以在这边,我们就可以得到一个结论… 它坏了 ….

先别这么快下结论,这其实是我们选错模型。

 

第 8 步: 选择 epiCPhotoGasm Inpainting 模型重绘

 

 

刚刚衣服总是不穿好的原因很简单,我们现在在做的事是重绘,不是纯粹的生成,所以我们要用专门用来做重绘的模型。

 

ChilloutMix 并不是用来重绘的模型,所以我们现在要改用之前下载好的 epiCPhotoGasm_zinpainting
模型。

SD模特换装:Inpaint Anything

 

换了模型,我们就开始生成吧,这下应该没问题了吧!

 

我们来看看结果:

SD模特换装:Inpaint Anything

 

我们得到了一个穿上衣服的…漂亮的人台。

 

这又是怎么回事?刚刚衣服没穿好,现在人不见了,说好的美女呢?难道是运气不好,再生成一次看看。

SD模特换装:Inpaint Anything

 

结果,美女是出现了,但他胸口的黑布是怎么回事?我们并没有要这块布呀!

 

这原因是因为目前 mask content 的参数是 original ,它在重绘时会参照原图上的结构和颜色进行重绘,所以才会出现人台及黑布,因为这些在原图上都有。那我们要怎么解决这问题?

 

简单,换别的参数就好了,例如,我们改用 fill ,会得到像下面这样的图。

SD模特换装:Inpaint Anything

 

SD模特换装:Inpaint Anything

 

SD模特换装:Inpaint Anything

 

SD模特换装:Inpaint Anything

 

如果是用 latent noise ,会是像下面的结果

SD模特换装:Inpaint Anything

 

SD模特换装:Inpaint Anything

 

SD模特换装:Inpaint Anything

 

 

若是用 latent nothing ,则会出现

SD模特换装:Inpaint Anything

 

SD模特换装:Inpaint Anything

 

SD模特换装:Inpaint Anything

 

这样的画面是不是很不错了?都还没有精细的微调就可以有这样子的品质,再优化的话就会更好,那接下来要怎么优化呢?

 

 

四、常见问题

 

 

这样一操作下来,大家可能有些问题,一一为大家说明。

 

 

问题 1 :什么是实例分割?

 

实例分割指的是指将图片上的东西进行区分,将不同的东西用不同的颜色标示出来,每一种颜色代表一个东西。

 

这次就是用实例分割,加速我们制作遮罩的时间。

 

 

问题 2 :Inpaint Anything 有不同的 Segment Anything Model ,有什么区别?

 

 

Segment Anything Model ,也叫 SAM ,在 Inpaint Anything 提供了 9 种,

SD模特换装:Inpaint Anything

 

可以分成4类,我们一一说明。

 

第 1 类:sam_vit 开头的 – Meta 提供的 SAM 模型

 

sam_vit 开头的,是 meta 提供的模型。因为 Meta 把他们的语义分割模型命名为 Segment Anything Model ,我们目前所称的 SAM 算是从这里开始算起,应算是这一波 SAM 模型的始祖。

 

这是一系列的模型是 Meta 在 2023 年 4 月公布的,其它的 SAM 模型都会拿来和这系列做比较。共有 3 种模型,以大小分别为,h (huge), l (large), b (base),huge > large > base ,精准度理论上也是和大小成正比,计算速度也是。

 

从效果上看, huge 和 large 的差别不大,但和 base 就有明显差别。

SD模特换装:Inpaint Anything

 

Meta SAM 参考资料:

https://segment-anything.com/

https://github.com/facebookresearch/segment-anything

https://huggingface.co/facebook/sam-vit-base/tree/main

https://huggingface.co/facebook/sam-vit-large

https://huggingface.co/facebook/sam-vit-huge

 

 

第 2 类: sam_hq_vit 开头的 – Segment Anything in High Quality 系列

 

若是 sam_hq_vit 开头模型就是苏黎世联邦理工学院视觉智慧与系统小组 (Visual Intelligence and Systems Group at ETH Zürich) 提供的高品质语义分割模型。根据根据他们的论文提供的数据,他们的切割准度比 Meta 还来得好,所以称为high quality。虽然他们分割出来的区域是比 Meta 还来得细,但在我们的例子里面分别不大。

SD模特换装:Inpaint Anything

 

SAM HQ 参考资料:

https://github.com/SysCV/sam-hq

https://huggingface.co/lkeab/hq-sam/tree/main

 

第 3 类:FastSAM 开头的 – FastSAM 系列

 

 

如果要效果不错,又省些内存,可以用 FastSAM 系列,它是由 CASIA-IVA 实验室 (CASIA-IVA-Lab) 提供的。我自己在小 VRAM 的机器上会用这个模型。

 

它的有 2 种型号,X 和 S。

X 这个型号在我们这次婚纱的例子,效果还可以,但 S 就不适合我们的例子。

SD模特换装:Inpaint Anything

 

FastSAM 资料如下:

https://github.com/CASIA-IVA-Lab/FastSAM

https://huggingface.co/An-619/FastSAM

 

 

 

第 4 类:Mobile SAM

 

又小又快的 SAM ,用 CPU 也可以跑得很快的 SAM 。但,效果也是最差的一个,只适合分辨大区块的东西。

SD模特换装:Inpaint Anything

 

Mobile SAM 参考资料:

https://github.com/ChaoningZhang/MobileSAM

https://huggingface.co/dhkim2810/MobileSAM/tree/main

 

 

 

问题 3 : Inpaint 的 Masked content 参数控制了什么?

 

SD模特换装:Inpaint Anything

 

Masked content 的选项有4个,说明如下:

 

选项 1 :Fill

 

fill 选项会将重绘区域的图像最大程度地模糊化,仅保留大致的结构和色彩。因此,在需要大规模重绘会使用它。

 

在我们的范例中,海平面的位置、沙难的走向,都是一致的,连夕阳的颜色也都差不多。

SD模特换装:Inpaint Anything

 

 

 

选项 2 : Original

 

Original 会参考原图,生成出的图,区块、颜色等等会和原图很像。

 

在我们的范例中,这选项会留人台黑色的部份,并且沙滩的走向也会保留。

SD模特换装:Inpaint Anything

 

选项 3 : Latent noise

 

Latent noise 把要重绘的部份给杂讯,容易产生不相关内容,适用于需要创意的地方。

 

在我们这次的示范中你会发现,用 latent noise 生成的图,若 prompt 里有提到小东西(如我们的是白玫瑰),则会重覆出现这小东西。

SD模特换装:Inpaint Anything

 

 

 

选项 4 : Latent nothing

 

Latent nothing 会参考要重绘的区域附近的颜色,找出附近颜色的平均值,再填回重绘区。这种方式非常适用于移除不需要的物件。

 

但在我们这次的范例中,因为我们是大范围的重绘,所以感觉不出有移除东西。但你观察用 latent nothing 生成的图,你会发现他们的配色和构图会很像,例如沙的颜色也都很像。

SD模特换装:Inpaint Anything

 

 

 

五、回顾延伸问题

 

 

我们回顾一下刚刚做了什么?

 

简单说,就是 2 大步骤:

  • 用 Inpaint Anything 的语义分割功能做遮罩。
  • 再传送到图生图用 inpaint upload 以及 inpaint 专用模型重绘。

 

光是这样,就可以做出来像今天一样的成果了。

SD模特换装:Inpaint Anything

 

SD模特换装:Inpaint Anything

 

SD模特换装:Inpaint Anything

 

SD模特换装:Inpaint Anything

 

 

凡事都还可以更好,如果用目前这种方式,仍然还会有几个问题:

  1. 我要的模型没有 inpaint 模型怎么办?可以用一般模型吗?
  2. 要怎么改变衣服上的光影?
  3. 有时会有P图的感觉,要如何才会更自然?
  4. 如何生成更丰富的图片,不是现在做出来的这几个样子。
© 版权声明

相关文章