基于 Stable Diffusion 一键 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、其他參考材料
- 總結
前文回顧:《生成式 AI:百度“文心一言”對標 ChatGPT?什么技術趨勢促使 ChatGPT 火爆全網?》
前言
Hi,各位 AI 小伙伴,相信大家最近被各種 AI 作畫的消息刷屏,有沒有手癢癢的朋友也想趕緊來把自己的奇思妙想實現出來?機會來啦!AI Gallery 正式上線了 AI 作畫中最火的模型 “Stable Diffusion”,通過 ModelArts Notebook 能力,即可實現【一鍵 AI 作畫】,自動生成作品海報,人人都是大藝術家!Stable Diffusion 是由 CompVis、Stability AI 和 LAION 共同開發的一個文本轉圖像模型,它通過 LAION-5B 子集大量的 512x512 圖文模型進行訓練,我們只要簡單的輸入一段文本,Stable Diffusion 就可以迅速將其轉換為圖像,同樣我們也可以置入圖片或視頻,配合文本對其進行處理。一、西方藝術簡史
在進行 AI 作畫之前,我們先了解一下西方的藝術簡史,以便于后面了解繪畫生成風格。
1.1、古典藝術時期
2 世紀到 19 世紀為西方古典藝術時期,代表類型與作品形式具體如下圖所示:
- 古典主義:巴洛克、洛可可
- 新古典主義:浪漫主義、寫實主義
- 達芬奇,拉斐爾,丟勒
1.2、現代藝術時期
19 世紀末到 20 世紀末為現代藝術時期,代表類型與作品形式具體如下圖所示:
- 現代藝術,印象派,分水嶺
- 莫奈,梵高
1.3、后現代藝術時期
20 世紀至今為后現代藝術時期,代表類型與作品形式具體如下圖所示:
- 現代藝術、后現代藝術、繪畫、行為藝術、裝置藝術、約瑟夫-博伊斯、超現實主義、抽象主義、極簡主義、表現主義
二、數字藝術的誕生和發展
2.1、數字藝術的誕生
隨著計算機的出現,人們開始運用數字技術和計算機進行藝術創作。作品應用于影視、游戲、動漫、建筑,服裝等領域,具體如下圖所示:
2.2、數字藝術下的行業細分
數字藝術涉及到千行百業,如:影視、游戲、動漫、圖書、服裝、舞臺、建筑、裝飾、珠寶等等,舉例相關作品具體如下圖所示:
同時在行業中也衍生了許多相關崗位,如:影視概念設計、影視海報設計、影視角色設計、游戲海報設計、游戲場景設計、游戲角色設計、動漫設計、插畫設計、平面設計等,其相關作品具體如下圖所示:
2.3、數字作品的創作過程
數字作品的創作過程包括:在創作前進行大量的素材搜集、參考搜集,創作中需要基于素材參考圖片,人發揮想象力,使用計算機和數位板進行手繪創作直到數字作品創作完成,創作過程具體如下圖所示:
2.4、AI 作畫誕生
AI(Artificial Intelligence):人工智能。
Al 的最終目的是構建與人類相似的推理、知識、規劃、學習、交流、感知、使用工具和操控機械得能力等。
AI 作畫:是對上億張圖像數據庫進行采集整理,成立數據庫,根據文本描述指令,創作數字圖像作品。所以我們在運用 AI 作畫時,描述詞尤為重要,是與 AI 對話的語言工具。
下面為大家帶來幾幅通過不同描述詞生成的不同風格的 AI 畫作供大家鑒賞,具體如下圖所示:
三、Stable Diffusion 文字生成圖像
3.1、實驗環境準備
本次實驗環境我們將使用華為云提供的 AI Gallery 實驗平臺,點擊 Run in ModelArts,將會進入到 ModelArts CodeLab 中,這時需要你登錄華為云賬號,如果沒有賬號,則需要注冊一個,且要進行實名認證,參考 https://developer.huaweicloud.com/develop/aigallery/article/detail?id=4ce709d6-eb25-4fa4-b214-e2e5d6b7919c 即可完成賬號注冊和實名認證。登錄之后,等待片刻,即可進入到 CodeLab 的運行環境,具體如下圖所示:
3.2、什么是 Stable Diffusion?
Stable Diffusion 是由 CompVis、Stability AI 和 LAION 共同開發的一個文本轉圖像模型,它通過 LAION-5B 子集大量的 512x512 圖文模型進行訓練,我們只要簡單的輸入一段文本,Stable Diffusion 就可以迅速將其轉換為圖像,同樣我們也可以置入圖片或視頻,配合文本對其進行處理。
在《生成式 AI:百度“文心一言”對標 ChatGPT?什么技術趨勢促使 ChatGPT 火爆全網?》一文中我們已經為大家詳細介紹和分析了生成式 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:百度“文心一言”對標 ChatGPT?什么技術趨勢促使 ChatGPT 火爆全網?》
待運行結束我們即可看到根據 Prompt 生成的圖片,具體如下圖所示:
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) # 顯示圖片待運行結束我們就看到根據自身需求定制的海報啦,具體如下圖所示:
4.5、生成多張圖像
單張圖片的生成與分享可以,那么多張也是沒問題的,這里我們演示生成三行三列共九張圖片,實現代碼如下:
grid = image_grid(all_images, rows=num_rows, cols=num_cols) gridfrom PIL import Imagenum_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_colsdef image_grid(imgs, rows, cols):assert len(imgs) == rows * colsw, h = imgs[0].sizegrid = Image.new('RGB', size=(cols * w, rows * h))grid_w, grid_h = grid.sizefor i, img in enumerate(imgs):grid.paste(img, box=(i % cols * w, i // cols * h))return gridall_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張圖像生成輸出圖片實現效果具體如下圖所示:
五、修改 Prompt 提示詞
對于 Prompt 有疑問或者需要進一步了解的同學可以參考這篇文章——《生成式 AI:百度“文心一言”對標 ChatGPT?什么技術趨勢促使 ChatGPT 火爆全網?》
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
實現效果具體如下圖所示:
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
實現效果具體如下圖所示:
5.2、如何修改 Promot?
如何設計 Prompt,我們將通過 4 個方面來說明:圖片的風格,內容主體,詳細的描述,再加上畫家的風格。需要注意的是,這里的 Prompt 公式僅僅是個入門級別的參考,是經驗的簡單總結,在熟悉了 Prompt 的原理之后,可以盡情的發揮腦洞修改 Prompt。
Prompt 公式框架:[圖片的風格]+[內容主題]+[細節描述]+[繪畫風格或者藝術家風格]
圖片的風格按照這個框架,簡單構造一個圖片風格,比如:可以是一幅美麗的畫,或者是一幅美麗的山水畫。內容的主體 + 詳細描述主體可以是各種各樣的選擇。推薦一些可以激發大家靈感的事物,如山水,人物,建筑房屋,動物等等,盡可能細致刻畫這些實體事物。如果是簡單的輸入“大海”兩個字,模型不知道我們想要的風景是什么樣子的,一段作品的相對準確的描述,比如:夢幻的大海,白沙灘岸邊鋪滿了粉色的玫瑰花,月光輕柔的人灑在海面上,綠色發光的海浪,我們要去盡量用詳細的語言,用細節清楚的描述我們幻想的場景。比如:云中的 Skyrim 風格的山,有一個照明螺栓擊中尖端導致雪崩,山區風景,實現效果具體如下圖所示:
5.3、Prompt 新手指導
如果你是個新手,需要一些關于關鍵詞的引導,那你可以去 https://lexica.art/ 這個網站看一看。它收集了很多關鍵詞,并且一步一步、分門別類地為你整理好了。你只需要根據網站給出的步驟,從它的關鍵詞庫里選擇你想要的效果,然后把這串關鍵詞直接復制到 Prompt 里就好,把“填空題”變成“選擇題”,非常方便,具體如下圖所示:
在熟悉了 Prompt 的原理之后,就可以盡情的發揮腦洞修改它的寫法,點擊鏈接,快來 Happy Prompting 吧!
六、附錄及參考材料提供
6.1、常見的風格列舉
為了便于大家創作,在這里為大家提供常見的風格列舉:古典主義、洛可可、巴洛克、印象派、新古典主義、寫實主義、浪漫主義、唯美主義、表現主義、現實主義、魔幻現實主義、奇幻現實主義、象征主義、抽象主義、超扁平主義、超前衛藝術、中國風格、浮世繪、極簡主義、幾何風格、數字藝術、感念藝術、裝飾藝術、復古未來主義風格、粉彩朋克風格、史前遺跡風格、波普藝術風格、迷幻風格、賽博朋克風格、未來主義風格、抽象技術風格、新藝術主義、抽象表現主義、北歐文藝復興、原始主義、立體主義、色域繪畫、波普藝術、極簡主義、矯飾主義。
6.2、其他參考材料
- Prompt搜索引擎:https://lexica.art/
- 兩個 Prompts 插值:https://replicate.com/andreasjansson/stable-diffusion-animation
- 生成無縫貼圖:https://withpoly.com/
- 用 Stable Diffusion 生成的藝術家風格參考庫:https://proximacentaurib.notion.site/e2537cbf42c34b7e9a9a4126f81dfd0d?v=7b4a3c03fb654045be324eb71acc57e6
總結
在 AI 作畫過程中,對于詳細的 Prompt,我們可以拆分【形容詞】+【視角】+【時間】+【顏色】+【其他】形容詞可以是夢幻,神秘,浪漫或者寫實 ……視角可以是:超廣角,俯視和仰視 ……時間:秋天,清晨,黃昏,夜晚 ……顏色可以是 紅黃綠藍橙紫……其他可以包含圖片的尺寸,4k,8k ,HD,光效,高細節等 Prompt 繪畫風格和藝術家風格如果想讓生成的圖片更加的藝術化、風格化,可以考慮在 Prompt 中添加繪畫風格和藝術家。藝術繪畫風格可以是一些美術風格:梵高風格,油畫,水彩,古風,CG 感,動漫,少女,賽博朋克,卡通畫,中國畫,黃昏等等,藝術家風格包含:現實主義,印象派,野獸派,新藝術,表現主義,立體主義,未來主義等等。在熟悉了 Prompt 的原理之后,就可以盡情的發揮腦洞修改它的寫法,點擊鏈接,快來 Happy Prompting 吧!我是白鹿,一個不懈奮斗的程序猿。望本文能對你有所裨益,歡迎大家的一鍵三連!若有其他問題、建議或者補充可以留言在文章下方,感謝大家的支持!
總結
以上是生活随笔為你收集整理的基于 Stable Diffusion 一键 AI 作画:什么“小镇做题家”?人人都是艺术家的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 棠儿治家
- 下一篇: 面试——游戏测试工程师(20190918