DALL·E 简介
DALL·E 是 OpenAI 推出的图像生成模型,根据用户的文字描述生成图像。DALL·E 3 是其最新版本,提供了多项升级和改进。
只要订阅了ChatGPT Plus、Team或Enterprise即可享受。如果曾经买过OpenAI API,还可以用 API 完成自己的 llm app,这样购买的 API 额度不仅可以用于处理文本和代码,还可用于图像生成。
DALL·E 3 的新特性
DALL·E 3 引入了几项新特性:
• Prompt Rewriting:利用 GPT-4 优化输入的提示。研究表明,使用详细的提示可以显著改善结果。
• Standard vs HD Quality :设置 quality: "hd"
提供更细致的图像细节和一致性。
• New Sizes:支持1024px x 1024px, 1792px x 1024px, 1024px x 1792px 三种尺寸,提供更多样的图像比例。
DALL·E 与 MidJourney 的比较
DALL·E 和 MidJourney 都是领先的图像生成工具,但它们在使用体验上有一些区别:
- 描述方式 :MidJourney 需要用户记住一些专业术语和指令,而 DALL·E 则更注重自然语言的描述,比较"听得懂人话"。例如,在 MidJourney 中调整图像比例需要使用
--ar 16:9
这样的指令,而在 DALL·E 中,只需说 "给我 16:9 比例的图片" 即可。 - 中文支持:DALL·E 对中文的理解和生成能力较强,能够更准确地根据中文描述生成相关图像,而 MidJourney 则有很高几率生出毫无关联的图片。
- 生成精准文字:目前DALL·E 已经可以在图片上添加精准的文字,MidJourney则不行。
关于DALL·E的描述方式,OpenAI 的开发者论坛上有一个讨论,表示 API 有时会过度重写提示,影响输出质量。参考这里。
原始prompt如下:
plaintext
Please create an illustration drawn in the Japanese anime style, featuring calm colors and fine lines. It should depict a strawberry shortcake placed on a table in a cafe.
提问者发现 API 会进行重写,导致生成逐渐不符合描述的图片:
很多都不是动漫风格,观察重写后的 prompt 发现被联想到了日本浮世绘、日本版画、19 世纪东方艺术等关键词,效果会很奇怪。
此时有评论建议,提问者像在使用 Midjourney 提示,为了在 DALL·E 上获得更高的一致性,需要提供极其详细的描述 ,以锚定图像并减少当描述更模糊时可能发生的变异。
润色后的 prompt 翻译成中文大概是:
plaintext
用柔和的色彩和细腻的线条创建一幅日式动漫风格的详细插图。中心焦点是一块草莓蛋糕,仔细地放置在一家古朴的咖啡馆的桌子上。蛋糕有三层,每层都是轻薄的海绵蛋糕,边缘呈现浅金棕色。在各层之间是丰富的白色奶油,带有略微光泽的表面反射着光线。
蛋糕顶部精心排列着新鲜草莓:五个切成两半的草莓,鲜红的表面闪耀着光泽,带着小小的种子和新鲜的绿色叶子。它们以星形排列。在这颗星的中心是一个完美的奶油山峰,白得几乎闪闪发光。蛋糕放在一个简单而优雅的白瓷盘上,边缘有一圈金色。
桌子是经典的抛光木质表面,反射着柔和的光线,增强了咖啡馆的宁静氛围。背景应柔和模糊,但可以看到咖啡馆的其他元素,如冒着热气的茶杯、折叠的报纸和一朵盛开的花的花瓶。整体效果宁静而吸引人,重点在于草莓蛋糕的简约与美丽。
这幅动漫风格绘画中的纹理应该得到关注:蛋糕的蓬松柔软、奶油的光泽、草莓的新鲜多汁和瓷盘的光滑反射表面。通过详细描述这些元素,草莓蛋糕将保持清晰且在每幅插图中都能一致地识别出来,捕捉到宁静的日本动漫咖啡馆场景的本质。
如今dall-e-3
的 prompt 最大长度可达 4000 个字符,应该考虑对 DALL·E 使用更完整的提示,也可以借助 gpts 润色 prompt。
ps:注意画风表述的准确性
刚刚 api 重写会联想到浮世绘,其实是因为 dalle3 的训练提供了"日本浮世绘"这种画风。原始 prompt 含有日本、木质桌子,就联想到"日本浮世绘",进而写出 19 世纪、版画、传统等关键词。
所以要么使用 dalle 训练过的画风,此时可以简练 prompt;要么得写详细的关键词,避免联想到其他无关画风。
ChatGPT 中的 DALL·E
在 ChatGPT 中使用 DALL·E 可以极大简化创作过程。通过简单的对话,用户可以逐步完善他们的图像描述,并实时看到生成的结果。
只需选择"GPT-4"或"GPT-4o"模型,描述想法,ChatGPT将提供一系列视觉内容,以供完善和迭代。
ChatGPT还提供了局部编辑工具,想在当前图片做更改时,只需要点击图片,用select 选中区域,输入 prompt,就能得到想要的结果。例如在一张风景图中添加樱花树,为室内场景增添新家具,移除不需要的物件等操作都可以轻松完成。
这种方式操作直观易用,能够精准地对图像进行微调,避免了重新生成整张图像效率低下的问题。选择工具的大小也可以自由调节,使得编辑区域能够达到像素级的精确度。
更多详情参见官方帮助文档。
使用 DALL·E API
DALL·E 3 新参数
• model: 选择生成图像的模型版本('dall-e-2'或'dall-e-3'),默认'dall-e-2'。
• style: 图像风格,可选'natural'(自然)或'vivid'(生动)。"vivid"会使模型倾向于生成超现实和戏剧性的图像。"natural"则使模型生成更自然、不那么超现实的图像。
• quality: 图像质量,可选'standard'(标准)或'hd'(高清)。
原先的参数
• prompt (必填): 文本描述,用于指导图像生成。dall-e-2
的最大长度为 1000 个字符,dall-e-3
的最大长度为 4000 个字符。
• n: 生成图像的数量,1-10 之间。目前DALL·E 3仅支持n=1,想生成多张可以考虑并发请求。
• size: 图像尺寸,可在1024x1024, 1024x1792 or 1792x1024中选择。
• response_format: 返回图像的格式,如'url'或'b64_json'。URL 仅在图像生成后的 60 分钟内有效。
• user: 代表用户的唯一标识符,用于监控和检测滥用行为。
js
const response = await openai.images.generate({
model: "dall-e-3",
prompt: "a white siamese cat",
n: 1,
size: "1024x1024",
});
image_url = response.data[0].url;
更多信息请访问 DALL·E API 文档。
图像一致性
目前使用 DALL·E 这类图像生成模型时,保持图像一致性主要依赖以下几个策略:
- 使用生成ID (gen_id) :
• 生成ID 是在创建图像时由模型自动分配的唯一标识符
。当需要对某个特定图像进行修改或创建与之风格一致的其他图像时,可以使用这个ID作为参考。这确保了新生成的图像保持与原始图像在视觉风格和内容上的高度一致性。
- 设置种子值seed:
• 尽管种子值主要用于控制生成过程随机性
以确保可重现性,seed决定了生成图片的绘画"走向"。但在某些情况下,使用相同的种子值可以帮助在维持基本样式和色调的基础上,生成一系列一致的图像。
- 详细且一致的描述:
• 在生成图像时提供详细、具体且一致的文本描述
可以显著提高输出的一致性。描述中应包括人物的具体特征、背景、环境和情绪等元素,确保每次生成时都能够引导模型向预期的视觉表现靠拢。
- 利用样式和主题标签:
• 在支持的情况下,指定特定的风格或主题标签
可以帮助模型更好地理解和维持一致的视觉表现风格,特别是在需要保持艺术风格一致性的项目中。
- 局部编辑:
• 适用于大体满意,只更改细节时。使用如 DALL·E 的编辑
功能,可以选择图像的特定区域,应用新的提示进行微调,从而确保细节的精确控制。
即使使用了 gen_id ,当有较大表情、姿势或背景的改动时,GPT 完成得还是不够好。面部和特征一致性的保留程度会受以下因素影响:
-
变化的性质:直接影响面部或特征的提示变更(例如改变头发颜色、增加眼镜)会更显著地影响结果。
-
模型的解释:有时候,即使是措辞上的微小变化也可能被模型以不同的方式解释,导致出现意外的变化。
-
提示的语义:如果提示引入了新的上下文或情景,可能会对图像的其他方面产生影响,包括面部或其特征。
@AshutoshShrivastava 针对插画人物的表情做出了实验,发现使用sad、happy、angry 这类比较生动和富有表现力的词汇时,生成的图像非常卡通化,一致性损失很多。
相比之下,dreamy, pensive, intrigued 这类则不会被夸大,角色也不会显得卡通化。
解决方案是巧妙地强调情感,使用"with a nuanced yet evident {emotion name} expression"
表达微妙而明显的表情。
检查这些图像,你会发现情感是存在的,但角色的一致性仍然完好无损。
因此,为了确保角色的一致性,在已有图片上增加元素时,尽量只用少量词汇进行微小的改动,由此保持描述的简洁与相关性。
案例分析:使用 ChatGPT Plus 创作人生四格漫画
在本案例中,我们将展示如何利用 ChatGPT Plus 结合 DALL·E 生成最近在首尔、北京都很受欢迎的超可爱人生四格漫画。客户一般向画师描述自己的故事、情节、元素、想要的风格,就能绘制出专属四格漫画。
图源:首尔旅游网
恰巧DALL·E 3 非常适合绘制黑白画风、线条艺术,利用 ChatGPT 中提供的 gen_id在控制图像一致性的情况下即可完成。
第一步:绘制单人肖像画
首先,可以把自己的图片传给 ChatGPT,让它描述图片中人物的特点,并画出肖像画。 prompt 如下:
vbnet
Here is my photo. Please draw a 1024*1024 black-and-white hand-drawn headshot based on this photo with the following specifications. Remember that only show the final result of one face.Take a deep breath and think step by step, capture essential details of my photo then draw the headshot:
1. Style:
- White background with black lines.
- Simple, cartoonish characters with clear outlines.
- Emphasis on expressive facial features.
- The character should appear playful and cute, exuding a joyful atmosphere.
2. Protagonist:
- **Face**: Capture essential details such as facial shape and notable expressions. Pay special attention to the eyebrows and face shape to exactly match the original photo.
- **Accessories and Important Items**: List distinct accessories like hats, earrings, or glasses, and highlight key items the character is holding, such as a umbrella, or book. Describe the style and notable features of these items. Omit it if not appliable.
- **Hair**: Clearly describe the hairstyle and length. Specify characteristics like curly, straight, braided, or updo. Highlight unique features such as bangs or unusual cuts, for instance, a tidy bob with blunt bangs or a loose ponytail with wispy strands.
- **Clothing**: Briefly mention the clothing style, focusing on distinctive styles and patterns.
prompt主要参考了dalle3新增的绘画风格,选中适配的 black-and-white 和 hand-drawn。
如果满意就问他要gen_id,不满意则可以点击重试或进行更多对话,让他明白你的需求,毕竟 ChatGPT 是很善于沟通的。
如果觉得当前图片很满意,但有一些细节想小改动,比如文字删掉、加点饰品,也可以使用 ChatGPT 的局部编辑功能,选中更改的区域,并输入 prompt,就能在原图的基础上完成更改。
第二步:生成基于步骤一人物的更多有趣图像
之前想一次完成4 幅图画,但变动元素太多、太复杂,完全乱掉。
所以还是得一幅一幅生成。也要注意不能有大的元素变动,注重背景
、人脸周围
的改变,不然会破坏一致性。
对图片单独提需求完成的效果就不错。
试下来 ChatGPT 确实蛮听得懂人话,没有特定的格式要求,提供 gen_id,加上需求,无论用不用单人肖像画的 prompt 都能获得一致性。
使用绘制时的 prompt:
不使用绘制时的 prompt:
第三步:组合漫画
将生成的四个图像组合成一幅四格漫画。
通过使用 ChatGPT 的 Python 执行器,可以轻松完成拼接。背景颜色可以自行定制,可以是黑色,也可以提供其他背景图。
prompt:
js
帮我垂直从上到下拼接4张图片,按我发给你的顺序依次拼接。拼接前给每张图片添加margin: 10%,背景颜色为黑色。拼接中两张图片相邻的地方遵循外边距折叠(margin collapsing),即两个相邻的外边距(上下相邻)会合并为一个外边距。
结语
本来想把这个流程直接做成一个 llm app,但目前 dalle api 没提供gen_id;想过自己提供上下文,带上生图时的prompt+图片 url,再添加小改动,试过也没用,所以就写了这篇文章,让大家直接从ChatGPT操作,其实 ChatGPT 还挺方便的,同一个 thread 中记忆很好,局部编辑也不错。大家如果有 api 完成方式,欢迎留言!
最后推荐下OpenAI 社区论坛,在那里可以与众多开发者交流,也可以直接@OpenAI员工对话。
参考资料
• 使用 DALL·E 3 的 67 种图片风格解放 AI 创作潜能
• DALL-E 3 Consistent Characters: Part 4 - How to structure Prompts for Outdoor/Indoor Activities ?