生成式AI繪圖:呼叫Colab,自己也來畫個幾張吧!

今年是AI大爆發的一年,從自然語言、電腦視覺、到聲音領域,無論在娛樂或提高工作生產力,生成式AI的潛力似乎才剛被發掘,可以期待未來還有更多應用。現在輕鬆下個標題,等待幾秒便可得到圖文並茂的簡報; 也可透過文字生成圖片或利用AI生成圖片、影片的標題 ; 最近Youtube上也出現一票AI合成孫燕姿的歌聲。雖然大多時候AI的作品雖還無法堪稱完美,but it’s really blowing my mind!

有名的AI繪圖服務

今天要介紹幾個有名的AI繪圖服務,如果想要挑戰自己寫code產生圖片,記得看到文章最後喔(你的coding 魂被燃燒起來了嗎?)

Midjourney

目前Midjourney已經開始收費了,從每月8美元起跳。雖說沒付費就無法自己創作,但Midjourney本身是個社群平台,community showcase裡的創作的確還是很令人驚豔。

OpenAI DALL-E-2

DALL-E-2也是釋出ChatGPT的OpenAI開發的,到目前為止每個月他們提供使用者幾個免費credit產生圖片。免費圖片在圖的右下角會有個類似浮水印的彩色方塊小標記,但不明顯。只要提示詞給的好,圖片很有藝術感。

整體來說出圖速度快,圖片品質佳👍。

Craiyon

諧音類似英文的蠟筆,他們的logo也是蠟筆。同樣也提供免費服務,付費會員出圖速度較快。免費服務大約等個1~2分鐘可以得到9張圖,圖片上也有浮水印。(等待的時間會被強迫看很多廣告,畢竟 AI是個燒錢的行業,總是要有些方法支持團隊營運)。下圖是相同提示詞生成的圖片:summer plate, berries, kiwi, banana, happy cat flying,可看出Craiyon產生的圖片風格與OpenAI 明顯不同。OpenAI對於這種天馬行空的提示詞,生成的圖片大多時候有點小清新配色柔和 ; 而Craiyon生成的作品常常給我一種時空扭曲的超現實感!

Colab + Tensorflow KerasCV (100% 免費)

這是100%免費的方案!自己寫python code產生。Tensorflow 在High-performance image generation using Stable Diffusion in KerasCV 這篇文章有很棒的範例,照著他的colab筆記本不算太難就可以做出來(若遇到缺套件,缺什麼就pip install安裝),直接來看成果:

提示詞:photograph of an astronaut riding a horse

提示詞:A cat family, fancy, pink and purple lovely background

(好像有點太pink and purple, 也太lovely了)

心得:

  • AI繪圖看似不難,想要畫得精緻美麗,關鍵在於提供AI精準的描述。所以將來無論你是文組或理工科,語文能力勢必更被看重。倘若你文筆好,便可借助AI畫出一口好圖!文字工作者與美術工作者藉著AI將有更多的交集!
  • 以後簡報缺圖片時,快開出colab 幫自己畫個幾張圖,還可避免誤用圖片有侵權的困擾
  • 下次要試試看讓ChatGPT幫忙產生提示詞 (歡迎分享成果)

StableDiffusion Model Python 程式碼範例

參考High-performance image generation using Stable Diffusion in KerasCV內容。可透過colab環境操作,若在本機操作,可能需要更新Tensorflow

  • 首先安裝需要的Python 套件
pip install tensorflow keras_cv --upgrade --quiet
pip install keras_core
  • 產生圖片的Python程式碼
#匯入需要的套件
import time
import keras_cv
from tensorflow import keras
import matplotlib.pyplot as plt

#使用Tensorflow提供的模型
model = keras_cv.models.StableDiffusion(img_width=512, img_height=512)

#匯入需要的套件,將提示詞填入" "當中, batch_size是產生圖片的數量。圖片越多需要時間越長。以下將產生3張圖片
images = model.text_to_image("photograph of an astronaut riding a horse", batch_size=3)

#畫出結果
def plot_images(images):
    plt.figure(figsize=(20, 20))
    for i in range(len(images)):
        ax = plt.subplot(1, len(images), i + 1)
        plt.imshow(images[i])
        plt.axis("off")


plot_images(images)

Python開發環境安裝請參考以下影片,colab環境建置在影片時間 5:05~ 8:00