Stable Diffusion 是一個深度學習模型,由 Stability AI 與學術研究者和非牟利組織合作開發,可以根據文本描述或文本提示詞 (text prompt) 生成詳細圖像。此外,它還可以用於內補繪製 (inpaint)、外補繪製 (outpaint),或在提示詞指導下,以現有的圖片為基礎去生成一個新的圖像等。Stable Diffusion 自 2022 年 8 月推出後,深受藝術家、開發者和業餘愛好者的歡迎。
Stable Diffusion 不是唯一一個以文本生成圖像的模型。大家可能都聽說過 Midjourney 或 DALL-E 2,這兩個模型也能夠根據文本提示詞生成漂亮的 AI 圖像。然而,Stable Diffusion 公開發布了其源程式碼和模型權重 (model weight),也就是說,我們可以在 Mac 或 PC 上安裝 Stable Diffusion 並在本機運行。相比之下,如果要使用其他以文本生成圖像的模型,我們就需要使用不同的雲端服務。
Core ML 的 Stable Diffusion
如果各位 iOS 開發者想把以文本生成圖像的功能或其他創意功能添加到 App 中,Stable Diffusion 就可以大派用場了。Apple 的 ML 工程師為 Core ML 進行更新後,現在我們可以在 macOS 13.1 或 iOS 16.2 以上的 Apple Silicon 裝置上使用 Stable Diffusion。有了這些更新,開發者就可以輕鬆地把 Stable Diffusion 整合到自己的 App;更重要的是,可以把模型儲存在本機裝置上,使用者不需要連接互聯網都可以使用 AI 圖像生成功能。
新發布的 Core ML Stable Diffusion 包含了一個 Python package 和一個 Swift package。Python package 讓開發者可以使用 diffusers 和 coremltools,將 Stable Diffusion 模型從 PyTorch 轉換為 Core ML,而 Swift package 則是用來部署 (deploy) 模型。如果我們想使用以文本生成圖像的功能,可以在 Xcode 專案中使用 Swift package。不過在這篇教學中,我們主要會介紹 Stable Diffusion,並看看如何透過 Swift Command Line (CLI) 使用 Stable Diffusion。我們之後會再發表另一篇文章,詳細看看如何使用 Stable Diffusion 構建 App。
如果大家要跟著這篇文章進行實作,需要先安裝 Xcode 14.3 和 Xcode 的 Command Line 工具。如果你是從 Mac App Store 下載 Xcode,其版本應該已經包含了 Command Line 工具。
Hugging Face:提供預先訓練 ML 模型的平台
如果你沒有接觸過機器學習 (machine learning),可能沒有聽說過 Hugging Face。如果大家對機器學習有興趣,就必須了解 Hugging Face 這個寶貴的資源,它提供大量預先訓練模型和工具,讓我們可以輕鬆地整合到各種 App 中。
Hugging Face 是一個 2016 年成立的機器學習平台,開發者可以即時存取超過 2 萬個預先訓練模型,讓自然語言處理更加普及。它為數據科學家、AI 工作者和工程師提供適用於不同任務的預先訓練模型,包括超過 100 種語言的文本處理、語音識別、物件偵測、圖像分類、及對表格資料進行迴歸分析 (regression) 和分類等。
試著在 Hugging Face 搜尋 “Stable Diffusion”,我們會發現有不同的 Stable Diffusion 版本可供免費下載 ,包括 Stable-Diffusion-v1-4、Stable-Diffusion-v1-5、Stable-Diffusion-2、和 Stable-Diffusion-2-1.
在 Core ML 執行 Stable Diffusion
接下來,讓我們使用 Core ML 在 Apple Silicon 裝置上執行 Stable Diffusion。我們可以使用 Python package python_coreml_stable_diffusion
自行把 PyTorch 模型轉換為 Core ML 格式。或者,我們也可以使用 Apple 準備的預先訓練 Core ML 模型。為了方便起見,在這篇教學文章中,我們會使用預先訓練 Core ML 模型(例如 coreml-stable-diffusion-2-1-base)。
所有模型都是託管在 Git 儲存庫上的。因為這些模型檔案通常很大,我們需要安裝 Git LFS (Large File Storage) 擴充功能才能下載模型檔案。
首先,我們需要安裝一個類似 Package Manager 的工具 Homebrew。要在 Mac 上安裝 Homebrew,讓我們打開 Terminal 並輸入以下命令:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
接著,輸入以下命令來安裝 Git LFS:
brew install git-lfs
安裝完成後,讓我們執行以下命令來初始化 Git LFS:
git lfs install
最後,執行以下命令來複製並下載 Stable Diffusion 儲存庫。在這篇教學文章中,我們會使用最新版本的 Stable Diffusion 2.1。你可以在這裡下載舊版本。
git clone https://huggingface.co/stabilityai/stable-diffusion-2-1
如前文所述,因為模型檔案非常大,因此需要一些時間去下載。下載完成後,我們應該可以在 original
和 split_einsum
資料夾中找到模型檔案。
針對不同的硬件,每個 Core ML Stable Diffusion 模型都有不同的版本。以這個 Core ML Stable Diffusion 模型為例,我們就有兩個版本可用:original 和 split_einsum。original 版本只兼容 CPU 和 GPU,而 split_einsum 版本則針對 Apple Neural Engine 裝置進行了優化,適用於 iPhone、iPad、和 M1/M2 Mac。
除此之外,兩個版本分別都有兩個子資料夾:compiled 和 packages。packages 子資料夾適用於 Python inference,允許我們在整合到本機 App 之前測試轉換後的 Core ML 模型。而 compiled 子資料夾則是給 Swift App 使用的,compiled 模型把大型 UNet 模型權重拆分為多個檔案,讓它可以兼容 iOS 和 iPadOS 裝置。
利用 Core ML Stable Diffusion 來生成圖像
如果我們想把 Stable Diffusion 整合到 App,在準備好模型檔案後,下一步就要從 https://github.com/apple/ml-stable-diffusion 下載 Core ML Stable Diffusion Package。這個全面的 Package 中有一個可以輕鬆整合到 Xcode 專案 Swift Package,讓我們可以在 App 中使用 Stable Diffusion 的功能。 此外,這個 Package 也有一個範例 App,利用 Swift CLI 來生成圖像,大家從範例 App 就可以了解 Stable Diffusion 有多強大。
在 Terminal 輸入以下命令,來下載 Package:
git clone https://github.com/apple/ml-stable-diffusion.git
把 Package 下載到 Mac 後,我們可以這樣使用內建的 App StableDiffusionSample
:
swift run StableDiffusionSample <text prompt> --resource-path <your-resource-path> --seed 93 --output-path <your-resulting-image-path>
我們要在 --resource-path
option 中指定相應的版本和子資料夾。在這個範例中,就是 split_einsum 版本的 compiled 子資料夾。下面的範例命令可以生成一個室內設計圖像:
swift run StableDiffusionSample "interior design, open plan, kitchen and living room, modular furniture with cotton textiles, wooden floor, high ceiling, large steel windows viewing a forest" --resource-path ~/Downloads/coreml-stable-diffusion-2-1-base/split_einsum/compiled --seed 93 --output-path ~/Downloads/coreml-stable-diffusion-2-1-base/result
視乎裝置的處理能力,Stable Diffusion 大概需要 10 秒至幾分鐘來生成圖像。完成後,我們就可以在 output 資料夾中找到 AI 生成的圖像。
大家可以更改文本提示詞來生成其他圖像。如果你有興趣學習如何設計好的提示詞,來讓 AI 生成令人驚嘆的圖像,可以參閱這個網站。
總結
Stable Diffusion 是一個強大的深度學習模型,讓使用者可以利用文本提示詞生成詳細的圖像。Core ML Stable Diffusion 推出後,iOS 開發者可以輕鬆地把以文本生成圖像的功能整合到 App 中;更重要的是,模型會儲存在本機裝置。
讀完這篇教學文章後,大家應該學會了使用 Stable Diffusion,並利用 Apple 提供的工具以 Swift CLI 執行 Stable Diffusion。在下一篇教學文章中,我們會看看如何整合模型,並構建一個用來生成圖像的 iOS App。