2023年6月5日 星期一

在樹莓派玩AI算圖,使用篇(模型轉檔)

這兩篇文章都只是隨筆等級的,之後有要補充什麼可能會回來編輯

安裝篇提到的參考來源,裡面的範例程式app.py是使用上的基礎,要算圖就先去看他怎麼寫的

因為用diffusers的關係,模型必須符合diffusers的格式,也就是包含一個model index和scheduler、text encoder、tokenizer、unet、vae等資料夾的型態...不符合也沒關係,可以轉檔

並且在各資料夾內的檔案格式,避免是bin檔,而是使用safetensors檔來免除載入記憶體的大麻煩

先講個小地方:model_index.json裡面的scheduler,如果是PNDMScheduler,個人偏好改成DDIMScheduler,我覺得PNDM的表現實在不怎樣

這裡是很重要的參考資料:

https://huggingface.co/docs/diffusers/index

轉檔的時候會用到這裡面的scripts,不過好像有檔案相依,所以把整個專案用zip壓縮抓下來,找個妥當地方解開備用,然後切換到你下載模型的資料夾去,這裡假定你下載了一個單檔safetensors的模型:

python /home/pi/diffusers-main/scripts/convert_original_stable_diffusion_to_diffusers.py --from_safetensors --checkpoint_path='v1-5-pruned.safetensors' --to_safetensors --dump_path='output/'

這樣模型就會拆開成適合diffusers使用的型態,並且各資料夾內的檔案會是safetensors

如果下載回來的是ckpt,就不要加--from_safetensors,如果有特殊需求要拆成各資料夾是bin檔,就不要加--to_safetensors

有些時候,模型需要搭配特定的VAE,但是又沒有包好,導致拆出來的模型算圖顏色不對,可是diffusers也不吃.vae.pt?轉檔,不過這次事情稍微複雜一點:因為轉VAE的script沒有考慮到要轉成safetensors的需求,所以不能帶參數要它轉出safetensors,轉出來也固定是bin。這也不難解決:

去scripts目錄找出convert_vae_pt_to_diffusers.py,複製貼上改成convert_vae_pt_to_diffusers_safetensors.py方便辨識使用,然後打開新的檔案,把140行vae.save_pretrained(output_path)改成vae.save_pretrained(output_path, safe_serialization=True),就有一個可以轉出safetensors格式VAE的工具了

題詞太長怎麼辦?webui可以設定題詞強度,diffusers可以嗎?
可以裝lpw來達成,參考https://self-development.info/%E3%80%90stable-diffusion%E3%80%91%E9%95%B7%E3%81%84%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/

沒有留言: