【云驻共创】一键 AI 作画,人人都是艺术家 理论 + 实操 教你实现 AI 应用快速开发篇(2)

举报
白鹿第一帅 发表于 2023/03/29 02:12:43 2023/03/29
【摘要】 Hi,各位 AI 小伙伴,相信大家最近被各种 AI 作画的消息刷屏,有没有手痒痒的朋友也想赶紧来把自己的奇思妙想实现出来?机会来啦!AI Gallery 正式上线了 AI 作画中最火的模型 “Stable Diffusion”,通过 ModelArts Notebook 能力,即可实现【一键 AI 作画】,自动生成作品海报,人人都是大艺术家!

文章目录

  • 前言
  • 一、西方艺术简史
    • 1.1、古典艺术时期
    • 1.2、现代艺术时期
    • 1.3、后现代艺术时期
  • 二、数字艺术的诞生和发展
    • 2.1、数字艺术的诞生
    • 2.2、数字艺术下的行业细分
    • 2.3、数字作品的创作过程
    • 2.4、AI 作画诞生
  • 三、Stable Diffusion 文字生成图像
    • 3.1、实验环境准备
    • 3.2、什么是 Stable Diffusion?
  • 四、Stable Diffusion Pipeline 使用方法
    • 4.1、安装需要的运行环境
    • 4.2、下载 AI 模型预训练权重文件,加载模型
    • 4.3、生成单张图像
    • 4.4、海报生成和分享
    • 4.5、生成多张图像
  • 五、修改 Prompt 提示词
    • 5.1、什么是 Prompt?
    • 5.2、如何修改 Promot?
    • 5.3、Prompt 新手指导
  • 六、附录及参考材料提供
    • 6.1、常见的风格列举
    • 6.2、其他参考材料
  • 总结

前言

Hi,各位 AI 小伙伴,相信大家最近被各种 AI 作画的消息刷屏,有没有手痒痒的朋友也想赶紧来把自己的奇思妙想实现出来?机会来啦!AI Gallery 正式上线了 AI 作画中最火的模型 “Stable Diffusion”,通过 ModelArts Notebook 能力,即可实现【一键 AI 作画】,自动生成作品海报,人人都是大艺术家!Stable Diffusion 是由 CompVis、Stability AI 和 LAION 共同开发的一个文本转图像模型,它通过 LAION-5B 子集大量的 512x512 图文模型进行训练,我们只要简单的输入一段文本,Stable Diffusion 就可以迅速将其转换为图像,同样我们也可以置入图片或视频,配合文本对其进行处理。


1.jpg




一、西方艺术简史

在进行 AI 作画之前,我们先了解一下西方的艺术简史,以便于后面了解绘画生成风格。

1.1、古典艺术时期

2 世纪到 19 世纪为西方古典艺术时期,代表类型与作品形式具体如下图所示:


2.png



  • 古典主义:巴洛克、洛可可
  • 新古典主义:浪漫主义、写实主义
  • 达芬奇,拉斐尔,丢勒

1.2、现代艺术时期

19 世纪末到 20 世纪末为现代艺术时期,代表类型与作品形式具体如下图所示:


3.png



  • 现代艺术,印象派,分水岭
  • 莫奈,梵高

1.3、后现代艺术时期

20 世纪至今为后现代艺术时期,代表类型与作品形式具体如下图所示:


4.png



  • 现代艺术、后现代艺术、绘画、行为艺术、装置艺术、约瑟夫-博伊斯、超现实主义、抽象主义、极简主义、表现主义

二、数字艺术的诞生和发展

2.1、数字艺术的诞生

随着计算机的出现,人们开始运用数字技术和计算机进行艺术创作。作品应用于影视、游戏、动漫、建筑,服装等领域,具体如下图所示:


5.png



2.2、数字艺术下的行业细分

数字艺术涉及到千行百业,如:影视、游戏、动漫、图书、服装、舞台、建筑、装饰、珠宝等等,举例相关作品具体如下图所示:


6.png


同时在行业中也衍生了许多相关岗位,如:影视概念设计、影视海报设计、影视角色设计、游戏海报设计、游戏场景设计、游戏角色设计、动漫设计、插画设计、平面设计等,其相关作品具体如下图所示:



7.png



2.3、数字作品的创作过程

数字作品的创作过程包括:在创作前进行大量的素材搜集、参考搜集,创作中需要基于素材参考图片,人发挥想象力,使用计算机和数位板进行手绘创作直到数字作品创作完成,创作过程具体如下图所示:


8.png



2.4、AI 作画诞生

AI(Artificial Intelligence):人工智能。

Al 的最终目的是构建与人类相似的推理、知识、规划、学习、交流、感知、使用工具和操控机械得能力等


9.png


AI 作画:是对上亿张图像数据库进行采集整理,成立数据库,根据文本描述指令,创作数字图像作品。所以我们在运用 AI 作画时,描述词尤为重要,是与 AI 对话的语言工具


下面为大家带来几幅通过不同描述词生成的不同风格的 AI 画作供大家鉴赏,具体如下图所示:

10.png

三、Stable Diffusion 文字生成图像

3.1、实验环境准备

本次实验环境我们将使用华为云提供的 AI Gallery 实验平台,点击 Run in ModelArts,将会进入到 ModelArts CodeLab 中,这时需要你登录华为云账号,如果没有账号,则需要注册一个,且要进行实名认证,参考 https://developer.huaweicloud.cn/develop/aigallery/article/detail?id=4ce709d6-eb25-4fa4-b214-e2e5d6b7919c 即可完成账号注册和实名认证。登录之后,等待片刻,即可进入到 CodeLab 的运行环境,具体如下图所示:

11.png

3.2、什么是 Stable Diffusion?

Stable Diffusion 是由 CompVis、Stability AI 和 LAION 共同开发的一个文本转图像模型,它通过 LAION-5B 子集大量的 512x512 图文模型进行训练,我们只要简单的输入一段文本,Stable Diffusion 就可以迅速将其转换为图像,同样我们也可以置入图片或视频,配合文本对其进行处理。

《【云驻共创】一键 AI 作画,人人都是艺术家 理论 + 实操 教你实现 AI 应用快速开发篇(1)》一文中我们已经为大家详细介绍和分析了生成式 AI 技术的发展,接下来我们会展示如何将 Stable Diffusion 与 🤗 Hugging Face 🧨 Diffusers 的库一起使用。

本案例可以使用 GPU,也可以使用 CPU 来运行,GPU 生成单张图片约 20 秒,CPU 需 6 分钟。您可以使用命令来查询当前机器的 GPU 是否可用,如果运行结果是一个表格,则表示 GPU 可用,实现命令如下:

!nvidia-smi

四、Stable Diffusion Pipeline 使用方法

4.1、安装需要的运行环境

本步骤耗时约 1-2 分钟,实现命令如下:

!pip install --upgrade pip
!pip install torch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1
!pip install diffusers==0.2.4
!pip install transformers==4.21.1 scipy==1.7.3 ftfy==6.1.1
!pip install "ipywidgets>=7,<8"

4.2、下载 AI 模型预训练权重文件,加载模型

用户可访问 Hugging Face Hub 获取 token,进行下载,下载时间约 6 分钟左右。本案例已将其模型转存至华为云 OBS 中,运行代码,下载权重即可,下载耗时约 30 秒,实现代码如下:

import os
import torch
import os.path as osp
import moxing as mox
from diffusers import StableDiffusionPipeline
parent = osp.join(os.getcwd(),'CompVis')
if not os.path.exists(parent):
    mox.file.copy_parallel('obs://modelarts-labs-bj4-v2/case_zoo/StableDiffusion/CompVis',parent)
    if os.path.exists(parent):
        print('Download success')
    else:
        raise Exception('Download Failed')
else:
    print("Model Package already exists!") 

加载模型,实现代码如下:

model_dir = osp.join(osp.join(parent,'stable-diffusion-v1-4'), "diffusers")
os.environ["XDG_CACHE_HOME"] = model_dir
device = 'cuda' if torch.cuda.is_available() else 'cpu'
pipe = StableDiffusionPipeline.from_pretrained(model_dir,
                                               # revision="fp16",
                                               # torch_dtype=torch.float16
                                              ).to(device) 

4.3、生成单张图像

在 GPU 上,单张图片生成耗时约 20 秒,在 CPU 上,单张图片生成耗时约 6 分钟,且运行内存需 16GB 以上,实现代码如下:

#@title 请在此处填写Prompt,运行,即可生成单张图像   
torch.cuda.empty_cache()
prompt = "Close up portrait photo of Scarlett Johansson as part cyborg part human, fascinating stare, Atmospheric, 600mm lens, Sony Alpha α7, epic, dramatic, cinematic lighting, high contrast, 8k, photo realistic, character design --testp --ar 2:3 --upbeta" #@param {type:"string"}
image = pipe(prompt)["sample"][0]
image

这里我们的 Prompt 设置为白鹿的女神 Scarlett Johansson,具体 prompt 为:Close up portrait photo of Scarlett Johansson as part cyborg part human, fascinating stare, Atmospheric, 600mm lens, Sony Alpha α7, epic, dramatic, cinematic lighting, high contrast, 8k, photo realistic, character design --testp --ar 2:3 --upbeta

对于 Prompt 有疑问或者需要进一步了解的同学可以参考这篇文章——《【云驻共创】一键 AI 作画,人人都是艺术家 理论 + 实操 教你实现 AI 应用快速开发篇(1)》

待运行结束我们即可看到根据 Prompt 生成的图片,具体如下图所示:

12.png

4.4、海报生成和分享

根据自身需求进行海报生成和分享,打上我们的专属水印,实现代码如下:

#@title 请在下方title_char栏填写作品名称,author_char栏填写作者姓名,中文不超过6个字,运行,即可生成海报  
import os
import moxing as mox
from PIL import Image,ImageDraw,ImageFont,ImageFilter

# 导入海报需要的素材
if not os.path.exists("/home/ma-user/work/material"):
    mox.file.copy_parallel('obs://modelarts-labs-bj4-v2/case_zoo/StableDiffusion/AI_paint_TOM.png',"/home/ma-user/work/material/AI_paint_TOM.png") 
    mox.file.copy_parallel('obs://modelarts-labs-bj4-v2/case_zoo/StableDiffusion/方正兰亭准黑_GBK.ttf',"/home/ma-user/work/material/方正兰亭准黑_GBK.ttf") 
    if os.path.exists("/home/ma-user/work/material"):
        print('Download success')
    else:
        raise Exception('Download Failed')
else:
    print("Project already exists")    

def gen_poster(img,txt1,txt2,path):
    font1 = ImageFont.truetype(zt,30)
    font2 = ImageFont.truetype(zt,25)
    img_draw = ImageDraw.Draw(img)
    img_draw.text((180,860), txt1, font=font1,fill='#961900')
    img_draw.text((130,903), txt2, font=font2, fill='#252b3a')
    img.filter(ImageFilter.BLUR)
    img.save(path)

template_img = "/home/ma-user/work/material/AI_paint_TOM.png" 
zt = r"/home/ma-user/work/material/方正兰亭准黑_GBK.ttf"
temp_image = Image.open(template_img) 
temp_image.paste(image ,(40,266))

title_char = "CG女神" #@param {type:"string"}
author_char = "魔幻少女" #@param {type:"string"}
savepath = 'AI_paint_output.png' # 海报图片路径
gen_poster(temp_image,title_char,author_char,savepath)
Image.open(savepath) # 显示图片

待运行结束我们就看到根据自身需求定制的海报啦,具体如下图所示:

13.png

4.5、生成多张图像

单张图片的生成与分享可以,那么多张也是没问题的,这里我们演示生成三行三列共九张图片,实现代码如下:

grid = image_grid(all_images, rows=num_rows, cols=num_cols)
grid

from PIL import Image

num_cols = 3  # 图像行数
num_rows = 3  # 图像列数

prompt = "Cygames girl character concept art and illustration by akihiko yoshida , ultimate dressy , amazing detailed face in profile closeup, galaxy in blue hair, Jewelry eyes , wearing a white galaxy dress , Line Array Speaker , Extreme Explosion , Subwoofer , kyoani character face , cute ,pretty girl , dynamic pose, portrait , pixiv daily ranking , pixiv , artstation ,specatcualr details, Volumetric Lighting , Dramatic lighting —ar 9:16 --test --creative --upbeta" #@param {type:"string"}
prompt_list = [prompt] * num_cols


def image_grid(imgs, rows, cols):
    assert len(imgs) == rows * cols

    w, h = imgs[0].size
    grid = Image.new('RGB', size=(cols * w, rows * h))
    grid_w, grid_h = grid.size
    
    for i, img in enumerate(imgs):
        grid.paste(img, box=(i % cols * w, i // cols * h))
    return grid

all_images = []
for i in range(num_rows):
    torch.cuda.empty_cache()
    images = pipe(prompt_list)["sample"]  
    all_images.extend(images)
    for index, img in enumerate(images):
        img.save("img_%s_%s.png" % (str(i), str(index)))

grid = image_grid(all_images, rows=num_rows, cols=num_cols)
grid
#@title 请在此处填写Prompt,运行,即可生成3*3张图像

生成输出图片实现效果具体如下图所示:

14.png

五、修改 Prompt 提示词

对于 Prompt 有疑问或者需要进一步了解的同学可以参考这篇文章——《【云驻共创】一键 AI 作画,人人都是艺术家 理论 + 实操 教你实现 AI 应用快速开发篇(1)》

5.1、什么是 Prompt?

Prompt 是生成图片的提示词,可以是一个实体,例如猫,也可以是一串富含想象力的文字,例如:『夕阳日落时,天边有巨大的云朵,海面波涛汹涌,风景,胶片感』。不同的 Prompt 对于生成的图像质量影响非常大,所以如果要生成一幅优秀的图画,就要掌握写 Prompt 的一些经验性技巧。

以下是一些优秀图画及相关 Promot 的示范样例。

Promot:Cygames girl character concept art and illustration by akihiko yoshida , ultimate dressy , amazing detailed face in profile closeup, galaxy in blue hair, Jewelry eyes , wearing a white galaxy dress , Line Array Speaker , Extreme Explosion , Subwoofer , kyoani character face , cute ,pretty girl , dynamic pose, portrait , pixiv daily ranking , pixiv , artstation ,specatcualr details, Volumetric Lighting , Dramatic lighting —ar 9:16 --test --creative --upbeta

Cygames 女孩角色概念艺术和插图由 akihiko yoshida,终极打扮,惊人的详细的脸在侧面特写,银河在蓝色头发,珠宝眼睛,穿着白色银河礼服,线阵列扬声器,极端爆炸,低低音,kyoani 字符脸,可爱,漂亮的女孩,动态姿势,肖像,pixiv 日常排名,pixiv,artstation,壮观的细节,体积照明,戏剧照明-ar 9:16 -测试-创意-upbeta

实现效果具体如下图所示:

15.png


Promot:dark style painted, river flowing through forest of cherry blossom trees , under a galaxy filled sky, beautiful, galaxies, deep colors,ultra lighting, Bioelectric Modular Synthesizer, perfect symmetry, cinematic, volumetric lighting, --ar 9:16

黑色画风,河流流经樱花树林,在一个充满星系的天空下,美丽,星系,深的颜色,超照明,生物电模块合合器,完美的对称,电影,体积照明,——ar 9:16

实现效果具体如下图所示:

16.png

5.2、如何修改 Promot?

如何设计 Prompt,我们将通过 4 个方面来说明:图片的风格,内容主体,详细的描述,再加上画家的风格。需要注意的是,这里的 Prompt 公式仅仅是个入门级别的参考,是经验的简单总结,在熟悉了 Prompt 的原理之后,可以尽情的发挥脑洞修改 Prompt。

Prompt 公式框架:[图片的风格]+[内容主题]+[细节描述]+[绘画风格或者艺术家风格]

图片的风格按照这个框架,简单构造一个图片风格,比如:可以是一幅美丽的画,或者是一幅美丽的山水画。内容的主体 + 详细描述主体可以是各种各样的选择。推荐一些可以激发大家灵感的事物,如山水,人物,建筑房屋,动物等等,尽可能细致刻画这些实体事物。如果是简单的输入“大海”两个字,模型不知道我们想要的风景是什么样子的,一段作品的相对准确的描述,比如:梦幻的大海,白沙滩岸边铺满了粉色的玫瑰花,月光轻柔的人洒在海面上,绿色发光的海浪,我们要去尽量用详细的语言,用细节清楚的描述我们幻想的场景。比如:云中的 Skyrim 风格的山,有一个照明螺栓击中尖端导致雪崩,山区风景,实现效果具体如下图所示:

17.jpg

5.3、Prompt 新手指导

如果你是个新手,需要一些关于关键词的引导,那你可以去 https://lexica.art/ 这个网站看一看。它收集了很多关键词,并且一步一步、分门别类地为你整理好了。你只需要根据网站给出的步骤,从它的关键词库里选择你想要的效果,然后把这串关键词直接复制到 Prompt 里就好,把“填空题”变成“选择题”,非常方便,具体如下图所示:

18.jpg


在熟悉了 Prompt 的原理之后,就可以尽情的发挥脑洞修改它的写法,点击链接,快来 Happy Prompting 吧!

六、附录及参考材料提供

6.1、常见的风格列举

为了便于大家创作,在这里为大家提供常见的风格列举:古典主义、洛可可、巴洛克、印象派、新古典主义、写实主义、浪漫主义、唯美主义、表现主义、现实主义、魔幻现实主义、奇幻现实主义、象征主义、抽象主义、超扁平主义、超前卫艺术、中国风格、浮世绘、极简主义、几何风格、数字艺术、感念艺术、装饰艺术、复古未来主义风格、粉彩朋克风格、史前遗迹风格、波普艺术风格、迷幻风格、赛博朋克风格、未来主义风格、抽象技术风格、新艺术主义、抽象表现主义、北欧文艺复兴、原始主义、立体主义、色域绘画、波普艺术、极简主义、矫饰主义。

6.2、其他参考材料


总结

在 AI 作画过程中,对于详细的 Prompt,我们可以拆分【形容词】+【视角】+【时间】+【颜色】+【其他】形容词可以是梦幻,神秘,浪漫或者写实 ……视角可以是:超广角,俯视和仰视 ……时间:秋天,清晨,黄昏,夜晚 ……颜色可以是 红黄绿蓝橙紫……其他可以包含图片的尺寸,4k,8k ,HD,光效,高细节等 Prompt 绘画风格和艺术家风格如果想让生成的图片更加的艺术化、风格化,可以考虑在 Prompt 中添加绘画风格和艺术家。艺术绘画风格可以是一些美术风格:梵高风格,油画,水彩,古风,CG 感,动漫,少女,赛博朋克,卡通画,中国画,黄昏等等,艺术家风格包含:现实主义,印象派,野兽派,新艺术,表现主义,立体主义,未来主义等等。在熟悉了 Prompt 的原理之后,就可以尽情的发挥脑洞修改它的写法,点击链接,快来 Happy Prompting 吧!

掘金2.jpg


【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。