好的,這是一篇為台灣讀者設計的部落格文章,介紹 StarVector 這個有趣的 AI 工具:
StarVector:圖片轉向量圖神器,AI 幫你畫出無限放大的漂亮圖! (附新手入門指南)
大家好,今天要來跟大家介紹一個超酷的 AI 工具,叫做 StarVector! 簡單來說,它就像是個魔法畫筆,可以把一般的圖片,甚至是文字,變成可以無限放大的向量圖 (SVG)。 聽起來很厲害吧? 如果你是設計師、網頁開發者,或是單純喜歡玩 AI 的朋友,絕對不能錯過這篇文章!
什麼是向量圖?為什麼它很重要?
在深入了解 StarVector 之前,我們先來聊聊向量圖。 平常我們看到的圖片,像是 JPEG 或 PNG,都是點陣圖。 點陣圖是由一個個像素 (pixel) 組成的,放大後會看到格子狀,變得模糊。
向量圖則不一樣,它是用數學公式描述的線條和形狀組成的。 所以不管放大多少倍,線條都還是非常清晰銳利,不會失真!
向量圖的優點:
- 無限放大不失真: 這點非常重要,尤其是在製作 Logo、icon 等需要各種尺寸的素材時。
- 檔案小: 相比於點陣圖,向量圖通常檔案更小,載入速度更快。
- 方便修改: 向量圖的每個元素都可以單獨編輯,修改顏色、形狀都很容易。
StarVector 是什麼?它能做什麼?
StarVector 是一個基於 AI 的模型,它可以:
- Image-to-SVG (圖片轉向量圖): 給你一張圖片,它就能自動生成對應的 SVG 向量圖程式碼。
- Text-to-SVG (文字轉向量圖): 輸入文字,它就能創造出獨特的 SVG 圖形。
簡單來說,StarVector 讓圖片向量化變得超簡單,而且效果還很好!它背後運用了大型語言模型 (LLM) 的強大能力,把圖片生成視為程式碼生成任務。 這表示它不只是單純的描圖,而是理解圖片的「語意」,用更精確的 SVG 元素來表達。
StarVector 的核心技術:多模態架構
StarVector 使用多模態架構來處理圖片和文字。 簡單來說,就是它同時能「看懂」圖片和「聽懂」文字。
- Image-to-SVG: 圖片會被轉換成視覺 token (可以想像成圖片的數位指紋),然後 AI 就會根據這些 token 來生成 SVG 程式碼。
- Text-to-SVG: AI 只接收文字指令,然後根據指令創造出全新的 SVG 圖形。
這個 LLM 的基礎是 StarCoder,這讓 StarVector 可以將程式碼生成技巧應用於 SVG 的創作。
StarVector 能做什麼?應用場景大公開
- 設計 Logo 和 Icon: 快速將草稿或現有圖片轉換成可無限放大的向量 Logo 和 Icon。
- 網頁設計: 製作高品質的網頁素材,確保在各種螢幕尺寸下都能清晰顯示。
- 簡報和海報: 讓簡報和海報上的圖形更專業、更吸睛。
- 資料視覺化: 將資料圖表轉換成向量圖,方便修改和應用於各種平台。
- AI 藝術創作: 透過文字指令,創造出獨特的 SVG 藝術作品。
初學者入門:如何開始使用 StarVector?
以下是快速入門的步驟:
- 安裝:
- 首先,你需要安裝 Python (建議 3.11.3 版本以上) 和 Git。
- 然後,在終端機 (Terminal) 輸入以下指令:
git clone https://github.com/joanrod/star-vector.git cd star-vector conda create -n starvector python=3.11.3 -y conda activate starvector pip install --upgrade pip # 啟用 PEP 660 支援 pip install -e .
- 如果你想要訓練模型,還需要安裝額外的套件:
pip install -e ".[train]"
- 圖片轉向量圖 (Image2SVG) 快速開始:
- 複製以下程式碼到你的 Python 環境中:
from PIL import Image from starvector.model.starvector_arch import StarVectorForCausalLM from starvector.data.util import process_and_rasterize_svg model_name = "starvector/starvector-8b-im2svg" # 也可以選擇 "starvector/starvector-1b-im2svg" starvector = StarVectorForCausalLM.from_pretrained(model_name) starvector.cuda() starvector.eval() image_pil = Image.open('assets/examples/sample-0.png') # 換成你想要轉換的圖片路徑 image = starvector.process_images([image_pil])[0].cuda() batch = {"image": image} raw_svg = starvector.generate_im2svg(batch, max_length=1000)[0] svg, raster_image = process_and_rasterize_svg(raw_svg) print(svg) # 顯示 SVG 程式碼 # raster_image.save("output.png") # 可選擇儲存為點陣圖預覽
- 把
image_pil = Image.open('assets/examples/sample-0.png')
改成你想要轉換的圖片路徑。 - 執行程式碼,你就會看到生成的 SVG 程式碼!
- 使用 Hugging Face AutoModel:
- 如果你熟悉 Hugging Face,也可以使用以下程式碼:
from PIL import Image from transformers import AutoModelForCausalLM, AutoTokenizer, AutoProcessor from starvector.data.util import process_and_rasterize_svg import torch model_name = "starvector/starvector-8b-im2svg" starvector = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.float16, trust_remote_code=True) processor = starvector.model.processor tokenizer = starvector.model.svg_transformer.tokenizer starvector.cuda() starvector.eval() image_pil = Image.open('assets/examples/sample-18.png') image = processor(image_pil, return_tensors="pt")['pixel_values'].cuda() if not image.shape[0] == 1: image = image.squeeze(0) batch = {"image": image} raw_svg = starvector.generate_im2svg(batch, max_length=4000)[0] svg, raster_image = process_and_rasterize_svg(raw_svg) print(svg) # 顯示 SVG 程式碼 # raster_image.save("output.png") # 可選擇儲存為點陣圖預覽
小撇步:提升 StarVector 的使用體驗
- 選擇適合的圖片: StarVector 在處理線條簡單、色彩對比鮮明的圖片時效果最好。 複雜的照片可能效果不佳。 (根據官方文件,它擅長處理 icons, logotypes, technical diagrams, graphs, and charts。)
- 調整
max_length
參數: 這個參數控制生成 SVG 程式碼的最大長度。 如果生成的圖形不完整,可以嘗試增加這個值。 - 使用 GPU: StarVector 是一個計算密集型的模型,使用 GPU 可以大幅提升運算速度。
模型選擇:StarVector-1B vs StarVector-8B
StarVector 提供兩種模型:
- StarVector-1B: 參數較少,運算速度較快,適合資源有限的環境。
- StarVector-8B: 參數更多,效果更好,但需要更強大的硬體。
你可以根據自己的需求和硬體配置來選擇適合的模型。
Datasets:SVG-Bench
SVG-Bench 是一個評估 SVG 生成模型的基準。 它包含 10 個 datasets 和 3 個任務:Image-to-SVG, Text-to-SVG, 和 Diagram-to-SVG。 如果你想要深入研究 StarVector 的效能,可以參考這個 benchmark。 相關的 Hugging Face Dataset Collection 連結在參考資料中。
StarVector 的訓練和微調
如果你想要自己訓練 StarVector 模型,可以參考官方提供的訓練腳本。 訓練過程需要大量的資料和計算資源。
* 建議設定環境變數,例如 HF_HOME
, HF_TOKEN
, WANDB_API_KEY
, 和 OUTPUT_DIR
。
* 根據你的硬體配置,選擇使用 Deepspeed (StarVector-1B) 或 FSDP (StarVector-8B)。
驗證:SVG Benchmarks
你可以使用 HuggingFace generation backend 或 VLLM backend 來驗證 StarVector。 VLLM 由於使用了 Paged Attention,速度會更快。
StarVector Demo:線上體驗
如果你不想安裝任何東西,可以直接在線上體驗 StarVector 的 Demo!
- 官方提供了兩種 Demo 方式:HuggingFace generation 和 VLLM。 VLLM 的速度更快。
- 你可以透過 Gradio Web UI 來操作 Demo。
總結:StarVector 的潛力與未來
StarVector 是一個非常有潛力的 AI 工具,它讓圖片向量化變得更簡單、更快速、更智慧。 雖然目前還有些限制,但隨著技術不斷發展,相信 StarVector 在未來會有更廣泛的應用。
優點:
- 將圖像和文字轉換為 SVG 程式碼。
- 基於強大的大型語言模型。
- 提供多種模型和訓練選項。
缺點:
- 在處理複雜圖像時可能存在限制。
- 訓練模型需要大量資源。
如果你對 AI 圖像處理、向量圖設計有興趣,不妨試試 StarVector,相信它會給你帶來意想不到的驚喜!
參考資料
- 論文: https://arxiv.org/abs/2312.11556
- 官方網站: https://starvector.github.io/
- Hugging Face Models:
- StarVector-1B: https://huggingface.co/starvector/starvector-1b-im2svg
- StarVector-8B: https://huggingface.co/starvector/starvector-8b-im2svg
- Hugging Face Datasets:
希望這篇文章對大家有幫助! 如果你有任何問題,歡迎在留言區提問。
最後,提醒大家:AI 工具的發展日新月異,使用前請務必仔細閱讀官方文件和相關資訊。
參考閱讀
https://github.com/joanrod/star-vector