【Fooocus 深度学习】SDXL,AIGC生图,源码解读

使用通配符增加prompt多样性

prompt和negative_prompt都可以通过apply_wildcards函数来实现通配符替换,apply_wildcards会从txt中随机找一个出来。

prompt='sunshine, river, trees, __artist__'
task_prompt = apply_wildcards(prompt, task_rng)
task_negative_prompt = apply_wildcards(negative_prompt, task_rng)

在这里插入图片描述

def apply_wildcards(wildcard_text, rng, directory=wildcards_path):
    for _ in range(wildcards_max_bfs_depth):
        placeholders = re.findall(r'__([\w-]+)__', wildcard_text)
        if len(placeholders) == 0:
            return wildcard_text

        print(f'[Wildcards] processing: {wildcard_text}')
        for placeholder in placeholders:
            try:
                words = open(os.path.join(directory, f'{placeholder}.txt'), encoding='utf-8').read().splitlines()
                words = [x for x in words if x != '']
                assert len(words) > 0
                wildcard_text = wildcard_text.replace(f'__{placeholder}__', rng.choice(words), 1)
            except:
                print(f'[Wildcards] Warning: {placeholder}.txt missing or empty. '
                      f'Using "{placeholder}" as a normal word.')
                wildcard_text = wildcard_text.replace(f'__{placeholder}__', placeholder)
            print(f'[Wildcards] {wildcard_text}')

    print(f'[Wildcards] BFS stack overflow. Current text: {wildcard_text}')
    return wildcard_text

Fooocus的风格实现

Fooocus可选多种风格,都是以更改prompt和negative_prompt来实现。

风格s传入apply_style函数中,得到prompt和negative_prompt:

注意:空列表+空列表仍旧是一个空列表,非空列表加空列表等于没加空列表。

positive_basic_workloads = []
negative_basic_workloads = []
style_selections = ['Fooocus Enhance', 'Fooocus Sharp']
task_prompt='sunshine, river, trees,'
for s in style_selections:
   p, n = apply_style(s, positive=task_prompt) # 得到prompt和negative_prompt
   positive_basic_workloads = positive_basic_workloads + p 
   negative_basic_workloads = negative_basic_workloads + n
   

apply_style函数则为:

def apply_style(style, positive):
    p, n = styles[style]
    return p.replace('{prompt}', positive).splitlines(), n.splitlines()

styles是一个全局字典,目前有213个key,则是有213种风格。每个key中是一个2个元素的元组,即是 prompt和negative_prompt
在这里插入图片描述
p.replace(‘{prompt}’, positive).splitlines()
用用户输入的prompt来替换风格字符串可能存在的{prompt},然后使用splitlines()方法,得到字符串的list返回(使用splitlines()或许有深层次考虑,但我没发现)。

在这里插入图片描述
这里就会发现,很容易有多个风格产生多个negativeprompt。
在这里插入图片描述

相关推荐

  1. 深度学习】COCO API解读

    2024-01-25 23:58:03       39 阅读
  2. 【iOS】—— SDWebImage学习(2)(解读

    2024-01-25 23:58:03       32 阅读
  3. ReentrantReadWriteLock:深度解析探险

    2024-01-25 23:58:03       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-25 23:58:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-25 23:58:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-25 23:58:03       82 阅读
  4. Python语言-面向对象

    2024-01-25 23:58:03       91 阅读

热门阅读

  1. 使用lora接收多个传感器数据方案设计

    2024-01-25 23:58:03       59 阅读
  2. jsx中使用插槽

    2024-01-25 23:58:03       53 阅读
  3. Vue3 Cli5按需导入ElementPlus

    2024-01-25 23:58:03       65 阅读
  4. vue中如何写过滤器

    2024-01-25 23:58:03       57 阅读
  5. Halcon优化模板匹配速度

    2024-01-25 23:58:03       47 阅读
  6. python使用read_sql与to_sql读写数据库

    2024-01-25 23:58:03       50 阅读
  7. swift 进阶知识点

    2024-01-25 23:58:03       43 阅读
  8. C# 实现 XOR 密码

    2024-01-25 23:58:03       49 阅读
  9. android基础知识补漏

    2024-01-25 23:58:03       46 阅读
  10. Qt 信号槽函数异步与同步处理

    2024-01-25 23:58:03       55 阅读
  11. python super()笔记

    2024-01-25 23:58:03       53 阅读
  12. ElasticSearch分词器介绍

    2024-01-25 23:58:03       60 阅读
  13. qml中QtObject类型的使用

    2024-01-25 23:58:03       54 阅读
  14. 关于C#中的Select与SelectMany方法

    2024-01-25 23:58:03       61 阅读
  15. C# DLL嵌套调用时修改生效

    2024-01-25 23:58:03       53 阅读