Stable Diffusion反向提示词详解:原理、代码实现与应用示例
创作时间:
作者:
@小白创作中心
Stable Diffusion反向提示词详解:原理、代码实现与应用示例
引用
CSDN
1.
https://m.blog.csdn.net/2301_80239908/article/details/143994420
在AI绘画领域,Stable Diffusion是一个广受欢迎的图像生成模型。除了使用正向提示词来引导图像生成外,反向提示词(Negative Prompt)也是一个非常实用的功能。本文将详细介绍反向提示词的概念、原理和具体实现方法,帮助读者更好地控制图像生成过程。
反向文本提示词概念
反向提示词是我们可以添加到SD模型中的一种额外功能,用于告诉稳定扩散模型我们不想在生成的图像中看到什么。这个功能很流行,可以删除用户不想从原始生成的图像中看到的任何内容。示例图像如下:
原理理解
让我们从导入所需的库和辅助函数开始。所有这些已经在本系列前面的几个组件部分中使用和解释过了,这里就不再累述,我们直接从函数prompt_2_img 开始讲起。 现在,我们将通过传递一个额外的参数neg_prompts来更改prompt_2_img函数。反向文本提示的工作方式是在进行采样时使用用户指定的文本来替代之前空字符串进行条件嵌入(uncond)。原理如下:
代码实现
基于上述分析,我们使用以下代码来实现反向文本提示信息的嵌入:
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]
得到结果如下:
非常整洁!我希望这能引起大家一些关于如何使用文本提示词来控制稳定扩散模型输出的想法。
总结
本文重点介绍了使用反向文本提示词来进行条件嵌入实现控制文本生成图像内容的相关背景知识和具体代码实现,并给出了相应的示例。
热门推荐
六部新片开售约5.5小时刷新春节档预售最快破亿元纪录
贵州医科大学崔晶医生教你缓解手部脱皮
昭通市中医医院推荐:均衡饮食改善手部脱皮
揭秘索林:尼安德特人神秘谱系
冬季蜜蜂如何过冬?揭秘蜜蜂的冬日生存秘籍
蚂蚁饲养经验:从收获蚁到举腹蚁的全面指南
《盗墓笔记》作者澄清:作品纯属虚构,祖上未盗过墓
从春晚舞台上退出的10位主持人,你还记得哪位?
解雨臣之死:一场为守护而设的完美骗局
定格动画版毒液大战蜘蛛侠:一场别开生面的超级英雄对决
毒液与蜘蛛侠:一段"相爱相杀"的传奇
《毒液3》被批:索尼蜘蛛侠宇宙联动成泡影?
挖掘机的类型及其最佳用途
时代印记、陶塑精华!20世纪60至70年代石湾陶艺经典作品展开幕
上街里老字号,中山路的新传奇
四方路27号老字号展览馆:百年商脉的文化传承与创新
五一探访青岛老字号展览馆,感受百年商脉
四方路27号展览馆:老字号文化的传承与创新
2024政务热线调查:智能化转型加速,但仍存数据应用短板
原浆酒之辩:真假难辨背后的工艺与诚信
专家详解:扁平疣的成因与预防方法
大麦粥走红背后:高纤维低GI,养生价值获认可
丹阳大麦粥走红减肥圈,富含β-葡聚糖助肠道健康
营养学会推荐大麦粥,降糖降脂效果好
安宫牛黄丸使用须知:孕妇禁用,虚寒者慎用
武鸣沃柑产业:从种植到深加工的全产业链发展之路
广西武鸣:以“沃”为媒 甜蜜会江城
南通投用7座“无废加油站”,创新技术实现绿色升级
车子刹车油何时更换?如何确保用车安全?这个标准有说法!
《毒液3》上映倒计时:毒液后代角色揭秘