近日,ControlNet的作者推出了一个全新的项目—Omost。Omost是一个将LLM的编码能力转化为图像生成能力的项目。对现有图像模型的提示词理解有着巨大的帮助。通过很短的提示词,就可以生成非常详细并且空间表现很准确的图片。
完美解决新手小白不会写提示词的痛点。现在只需一句超简单的提示词说明意图,Agent就会自己开始“构图”。
这个名字Omost有两层含义:
-
每次使用 Omost 后,你的图像几乎就完成了;
-
O意思是omni多模式,most意味着我们想最大限度地利用它。
Omost提供LLM模型,该模型将编写代码以使用Omost的虚拟Canvas代理来组合图像视觉内容。这Canvas可以通过图像生成器的特定实现来渲染以实际生成图像。
所有模型都使用以下混合数据进行训练:
-
包括 Open-Images 在内的多个数据集的真实注释,
-
通过自动注释图像提取的数据
-
来自 DPO(直接偏好优化,“代码是否可以由 python 3.10 编译”作为直接偏好)的强化
-
来自 OpenAI GPT4o 多模态功能的少量调整数据。
相关链接
Github:https://github.com/lllyasviel/Omost HuggingFace:https://huggingface.co/spaces/lllyasviel/Omost
效果展示
以下结果全部采用随机种子:12345
提示词:衣衫褴褛的人:19世纪穿着破夹克的衣衫褴褛的人。
提示词:世界末日后最伟大的逃亡,全人类的希望。
提示词:拥有无尽魔法的最高统治者坐在哥特王座上,不死军团跪着。
提示词:生成战士与龙激烈战斗的图像
参数:description和Detailed_descriptions
我们引入一个概念,叫“子提示”,如果一个提示少于 75 个 token,并且不依赖其他提示就能独立描述某件事,我们就称其为“子提示”。
如description是一个子提示,detailed_descriptions是子提示的列表。
请注意,每个子提示严格少于 75 个标记(通常少于 40 个标记),您可以安全地使用任何剪辑对它们进行编码,而不必担心截断位置会影响语义。
子提示符的设计还允许基于贪婪合并的更令人满意的文本编码。
例如,如果你有
-
sub-prompt A: 25 tokens
-
sub-prompt B: 35 tokens
-
sub-prompt C: 5 tokens
-
sub-prompt D: 60 tokens
-
sub-prompt E: 15 tokens
-
sub-prompt F: 25 tokens
由于每个子提示都保证能够独立描述某件事,我们可以使用贪婪方法将它们合并到类似
-
bag 1 {A, B, C} : 65 tokens
-
bag 2 {D} : 60 tokens
-
bag 1 {E, F} : 40 tokens
每个袋子少于 75 个标记,并且可以一次性通过任何剪辑进行编码(然后将它们连接起来)。
以这种方式对文本进行编码将确保文本编码器永远不会犯语义截断错误。
有人可能会问 - 如果所有子提示都少于 75 个具有独立语义的标记,为什么不直接对它们进行编码而不进行合并然后再连接呢?这主要是因为我们希望文本嵌入更加连贯。例如,假设子提示 A 是“一个男人”,而子提示 B 是“英俊,专业”,那么在编码之前合并它们将为您提供一个更加混合的文本嵌入概念,其中包含英俊专业男人的连贯特征。
所有 Omost LLM 都经过训练,可以提供严格定义的子提示。您可以利用这些定义来设计无损文本编码方法。
参数:位置、偏移、面积
这三个参数定义了一个边界框。首先我们将画布分成33=9个位置:
然后我们进一步将每个位置划分为 33 偏移量,从而得到 9*9=81 个位置:
以这些位置为中心,我们进一步定义 9 种类型的边界框:
我们可以看到,该方法允许999=729个不同的边界框,几乎覆盖了图像中物体的所有常见可能位置。