如何制作一个暗黑系的机器人,来生成艺术图像和关于它的诗意文字?
微信搜索关注《Python学研大本营》,加入读者群,分享更多精彩
我创作了“诗人皮耶特拉”。它使用 MidJourney 模型自动生成图像,最后使用 GPT-3 davinci 模型生成文本。
这是连续运行我的脚本 3 次的样子,用了non-cherry-picked的结果是:
让我们来看看这是如何实现的过程
1.生成图像:
为了生成图像,我使用了一个名为 MidJourney ,让我们先谈谈图像生成过程,然后我将讨论以自动化方式制作它的挑战。
图像模型接收某种形式的输入并生成输出(图像),在 MidJourney 的情况下,输入称为 prompt (包含您希望模型生成的文本)。
一些例子:
一个简单的提示:“死神”
一个复杂的提示:“女战士作为死亡天使,身穿盔甲,背部有巨大的黑色翅膀,黑暗幻想,薄雾,雾气,天堂之光,史诗,巴洛克,洛可可,细节,逼真渲染,3ds max + v ray,非常详细和复杂,中心构图,优雅,vfx,虚幻引擎 5,辛烷值渲染,极端对比度,极其锐利的线条,8k,--ar 2:3"。
请注意,提示中的详细程度和“标签”在生成更复杂、详细和有创意的图像方面起着巨大的作用,这通常被称为“ 提示质量 ”,有趣的是它不一定是关于提示的大小,它是关于使用模型将理解的“标签”。
这是我们刚刚生成的图像的放大版本。
如何生成高质量的提示?
就我而言,我创建了一个机器学习模型,该模型从高质量提示数据集中学习,现在能够生成随机的高质量提示。
为了实现这一点,我必须创建这样的数据集,我使用了 selenium,这是一个浏览器自动化工具,并使用它进行了所谓的网络抓取,访问 MidJourney 网站和一些不和谐频道以检索大量高质量提示别人做的。如果您在桌面上,您可以在此 链接。(https://datastudio.google.com/reporting/3fd9c46a-bae3-4e54-9cc3-05f7a5e10c74)
MidJourney 网站有一个关于特色创作的部分,展示了令人惊叹的创作以及用于生成它们的提示,这一事实确实很有帮助。
在网络抓取提示后,根据他们生成的图像和我对图像的个人意见,手动标记并为每个人分配一个分数,我终于准备好使用我的数据集了。
然后我训练了一个机器学习模型来预测一个可以从我那里获得高分的提示。
唯一剩下的就是将提示传递给 MidJourney,以便它可以生成图像,但这有一个挑战。
像 DALL-E 这样的一些图像模型计划提供一个 API,一种在代码中与模型交互的方式,通过 API,集成图像模型并使用该模型创建您自己的项目、产品或解决方案非常简单,无需API 仍然有一些方法可以与之交互,但它们更加不一致,我不建议在任何严重或生产中这样做。
目前(在撰写本文时)MidJourney 没有 API,因此要使用此模型自动生成图像,我必须制作一个使用 selenium(我提到的浏览器自动化工具)的自定义脚本来登录不和谐浏览器中的帐户,然后使用它的 /imagine 命令与 MidJourney 机器人交互。
2.生成文本:
为了生成文本,我使用 OpenAI 模型 text-davinci-002。
起初,我想只是将 MidJourney 提示发送给 davinci,但结果总是很笼统,或多或少相同。
由于诸如“渲染”、“8k”、“插图”、“详细”、“虚幻引擎”、“hdr”、“高对比度”之类的词在这些提示中很常见,我经常看到达芬奇谈论它们并离开主题,谈论视频游戏行业等(因为渲染和虚幻引擎等主题)。
结果感觉纯粹是描述性的,我在中途意识到这并不是我的目标,我意识到我想要一些更有诗意的东西,但不是一首明确的诗。
所以一开始我对提示进行了清理,删除了一堆让 davinci 跑题的词,它变得更好了,但我仍然对结果不满意。
然后我考虑将图像中可以找到的确切内容传递给davinci,而不仅仅是用于生成它的提示。
为了实现这一点,我使用 Google Vision 来获取图像的确切特征和元素。
如果您不熟悉此 Google 产品,请查看它的一些功能。
认识谷歌愿景
它提供了一个“标签”列表,这些标签是模型进行的分类,它通常包含图像中存在的对象以及一些见解,如“虚构人物”。
它提供了一个“对象”列表,通常,它返回的对象很少,但图像中出现的对象更多。
它提供了一个“属性”列表,其中包含图像中存在的颜色及其纵横比等信息。
通过向 davinci 提供所有这些信息,它将生成的文本将与图像中可以找到的元素、颜色和特征有关,因此它将不那么通用,而对图像本身更加具体。
目前,我正在混合我的两个想法,我已经从提示中排除了一组单词(如“虚幻引擎”和“渲染”),并且我正在通过经过清理的提示以及谷歌云视觉达芬奇模型的图像信息。这是最终结果:
不和谐的死亡天使结果
总而言之,这就是正在发生的事情:
我的云架构如下所示:
(由于我无法修改谷歌云功能运行时来安装 chrome 并使用 selenium,所以我使用 google cloud run with docker 代替)
您可以在下面准确找到我正在执行的 davinci API 调用,其中变量“formatted_all_features”包含图像中的颜色、标签和对象,“formatted_sanitized_prompt”包含没有与 davinci 无关的关键字的 MidJourney 提示文本生成。
response = openai.Completion.create(model='text-davinci-002',prompt=(f"Write a text talking loosely about the art that you made and its"f" {formatted_all_features} and {formatted_sanitized_prompt}"),temperature=1,max_tokens=800,top_p=1,frequency_penalty=1.02,presence_penalty=1.02
)
希望您喜欢阅读。
-
这篇文章的横幅是使用 MidJourney 生成的
-
MidJourney 是一个不断发展的项目,体验仍在显着变化,本文中包含的图像生成于 2022 年 8 月 7 日 (%m/%d/%Y)
推荐书单
《Python数据可视化》
购买链接:https://item.jd.com/12670073.html
《Python数据可视化》详细阐述了与Python数据可视化相关的基本解决方案,主要包括数据可视化和数据探索的重要性、绘图知识、Matplotlib、利用Seaborn简化可视化操作、绘制地理空间数据、基于Bokeh的交互式操作等内容。此外,该书还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。
《Python数据可视化》适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学教材和参考手册。
《精通Tableau 2019》
购买链接:https://item.jd.com/12604811.html
《精通Tableau 2019》详细阐述了与Tableau2019.x相关的基本解决方案,主要包括Tableau数据操控、Tableau数据提取、TableauDesktop高级计算、Tableau桌面高级过滤机制、创建仪表板、利用Tableau讲述故事、Tableau可视化、Tableau高级可视化、Tableau大数据应用、Tableau预测分析、Tableau高级预测分析、部署TableauServer、Tableau故障诊断、利用TableauPrep分析数据、基于Tableau的ETL好的实践方案等内容。
此外,《精通Tableau 2019》还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。
《精通Tableau 2019》适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学教材和参考手册。
精彩回顾
可视化案例研究——以智利总统选举为例
【案例】如何使用Flask构建天气预报
手把手教你创建简单的Python Flask
微信搜索关注《Python学研大本营》
访问【IT今日热榜】,发现每日技术热点