Stable Diffusion反向提示词详解:原理、代码实现与应用示例
创作时间:
作者:
@小白创作中心
Stable Diffusion反向提示词详解:原理、代码实现与应用示例
引用
CSDN
1.
https://m.blog.csdn.net/2301_80239908/article/details/143994420
Stable Diffusion作为当前最流行的AI绘画工具之一,其强大的文本到图像生成能力吸引了众多用户的关注。然而,除了使用正向提示词来引导图像生成外,我们还可以通过反向提示词来控制图像中不希望出现的内容。本文将详细介绍Stable Diffusion中反向提示词的功能、原理和具体实现方法,帮助读者更好地掌握这一实用技巧。
反向文本提示词概念
反向提示词是Stable Diffusion模型中的一种额外功能,用于告诉模型我们不想在生成的图像中看到什么。这个功能非常流行,可以删除用户不想从原始生成的图像中看到的任何内容。示例如下:
原理理解
反向文本提示的工作方式是在进行采样时使用用户指定的文本来替代之前空字符串进行条件嵌入(uncond)。具体来说,我们通过传递一个额外的参数neg_prompts
来更改prompt_2_img
函数。原理如下:
代码实现
基于上述分析,我们可以使用以下代码来实现反向文本提示信息的嵌入:
def prompt_2_img(prompts, neg_prompts=None, g=7.5, seed=100, steps=70, dim=512, save_int=False):
# Defining batch size
bs = len(prompts)
# Converting textual prompts to embedding
text = text_enc(prompts)
# Adding an unconditional prompt , helps in the generation process
if not neg_prompts:
uncond = text_enc([""] * bs, text.shape[1])
else:
uncond = text_enc(neg_prompts, text.shape[1])
emb = torch.cat([uncond, text])
# Setting the seed
if seed:
torch.manual_seed(seed)
# Initiating random noise
latents = torch.randn((bs, unet.in_channels, dim//8, dim//8))
# Setting number of steps in scheduler
scheduler.set_timesteps(steps)
# Adding noise to the latents
latents = latents.to("cuda").half() * scheduler.init_noise_sigma
# Iterating through defined steps
for i, ts in enumerate(tqdm(scheduler.timesteps)):
# We need to scale the i/p latents to match the variance
inp = scheduler.scale_model_input(torch.cat([latents] * 2), ts)
# Predicting noise residual using U-Net
with torch.no_grad():
u, t = unet(inp, ts, encoder_hidden_states=emb).sample.chunk(2)
# Performing Guidance
pred = u + g*(t-u)
# Conditioning the latents
latents = scheduler.step(pred, ts, latents).prev_sample
# Saving intermediate images
if save_int:
if not os.path.exists(f'./steps'):
os.mkdir(f'./steps')
latents_to_pil(latents)[0].save(f'steps/{i:04}.jpeg')
# Returning the latent representation to output an image of 3x512x512
return latents_to_pil(latents)
整体代码逻辑和之前的逻辑保持一致,唯一不同的就是对反向提示词的处理,已在上一节进行阐述。
功能验证
接着,我们使用以下代码来验证上述函数的功能:
## Image without neg prompt
images = [None, None]
images[0] = prompt_2_img(prompts = ["A dog wearing a white hat"], neg_prompts=[""], steps=50, save_int=False)[0]
images[1] = prompt_2_img(prompts = ["A dog wearing a white hat"], neg_prompts=["White hat"], steps=50, save_int=False)[0]
## Plotting side by side
fig, axs = plt.subplots(1, 2, figsize=(12, 6))
for c, img in enumerate(images):
axs[c].imshow(img)
if c == 0:
axs[c].set_title(f"A dog wearing a white hat")
else:
axs[c].set_title(f"Neg prompt - white hat")
得到结果如下:
扩展
正如我们所看到的,这是一个非常方便的功能,可以根据大家的喜好对图像进行微调。当然也可以用它来生成一张非常逼真的脸,仅仅需要增加更加详细的文本提示描述。让我们试试:
prompt = ['Close-up photography of the face of a 30 years old man with brown eyes, (by Alyssa Monks:1.1), by Joseph Lorusso, by Lilia Alvarado, beautiful lighting, sharp focus, 8k, high res, (pores:0.1), (sweaty:0.8), Masterpiece, Nikon Z9, Award - winning photograph']
neg_prompt = ['lowres, signs, memes, labels, text, food, text, error, mutant, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry, made by children, caricature, ugly, boring, sketch, lacklustre, repetitive, cropped, (long neck), facebook, youtube,body horror, out of frame, mutilated, tiled, frame, border, porcelain skin, doll like, doll']
images = prompt_2_img(prompts = prompt, neg_prompts=neg_prompt, steps=50, save_int=False)
out = images[0]
得到结果如下:
非常整洁!希望这能引起大家一些关于如何使用文本提示词来控制稳定扩散模型输出的想法。
总结
本文重点介绍了使用反向文本提示词来进行条件嵌入实现控制文本生成图像内容的相关背景知识和具体代码实现,并给出了相应的示例。
热门推荐
苍术的功效与应用指南:从湿气重到眼睛疲劳的全方位调理
苍术单独泡茶可以吗?揭秘这款草本茶的神奇功效
五证不全致房产纠纷,购房者如何维权有答案
Nature Aging:鼠尾草提取物改善小鼠衰老,延长健康寿命
别迷信酵素果冻,减肥关键看能量差
盐车前子与车前子:功效差异与食用选择
盐车前子的功效与作用是什么
从普通会计到副董事长,孟晚舟的华为奋斗史
孟晚舟:从基层做起的华为高管,用行动诠释责任与担当
车前子的功效与作用及药膳配方
从消毒到解毒:高锰酸钾在禽类养殖中的全方位应用
选择合适的羽毛球拍磅数,享受更优质的羽毛球比赛体验
羽毛球拍柄底盖有什么作用
如何理解为正当防卫“撑腰”的“第二十条”?专家为您解读→
瘦≠健康 体重管理要避开这些认知误区
教你计算「基础代谢率、TDEE」,学会这5招提升代谢瘦更快
柳传志近五年来首次公开露面,释放了什么信号?
柳传志近五年来首次公开露面,释放了什么信号?
柳传志近五年来首次公开露面,释放了什么信号?
情感智能:AI能否真正读懂人心?
情智兼备机器人:下一个职场宠儿?
歌唱家张也:56岁未婚未育,与好友吕继宏相伴多年,不结婚也幸福
智商高也会犯蠢,四种类型要当心
迈克尔·杰克逊的天价音乐遗产风波
职场“蠢人设”流行:从装笨到自嘲,折射年轻人生存智慧
迈克尔杰克逊尸检揭示死亡背后更多细节揭露长期健康困扰
13年坚持终圆梦:一个农民工的理发创业之路
从自然卷到羊毛卷:2025新年流行烫发完全攻略
助理摄影师如何进阶?三大阶段能力提升指南
摄影工作室管理软件让效率提升50%,成本降低15%