【AI作畫】【A卡】更新了給A卡用的WebUI,支持批量生成、更換擴散算法【中日對照翻譯】

原帖地址:https://dolls.tokyo/amd_anything_webui_verup/
原標題:AMDのWindowsマシンで動くAnythingV3.0 WebUIを更新(スケジューラと複數(shù)枚生成)
原作者:ぶっちー
時間:2022-12-01
注:此文是https://dolls.tokyo/howto_amd_anything_webui/ 的后續(xù),本人也翻了這一篇。
在此表示感謝。未獲授權(quán),僅供學(xué)習(xí)交流,侵刪
ありがとうございます。著作権を侵害したら、すぐに削除します。
個人日語水平有限(N4),機翻加潤色,渣翻,不當之處敬請斧正。?

グラボを換えてもDirectMLは死なず。
即便更換了顯卡,DirectML也不會死掉(因為它是A、I、N卡都能通用的)。(所以這套東西理論上可以用在核顯上)
という事でやりかけになっていたWebUIをとりあえず形にしたのでここで供養(yǎng)します。
將這個WebUI(雖然只是半成品)放在這里,供大家使用。
3090TiでもAMDの時のDirectML環(huán)境がそのまま動いたので多分使えます。
給A卡用的這套東西,在N卡上也可以食用。
注:作者搞了一個二手的3090Ti來玩。

A卡可用的WebUI腳本
【AMD WebUI スクリプト】
前回記事はこちら
之前寫過一篇文章在這里:
【https://dolls.tokyo/howto_amd_anything_webui/】(本人翻譯了這篇)
機能アップを重ねて第6版まできました(gr_6.py)
這是增加了功能的第6版腳本(gr_6.py)

使用方法
【使い方】
基本的な環(huán)境作成(配置基礎(chǔ)環(huán)境)
前回同様、以下の記事を「學(xué)習(xí)データのダウンロードとOnnxへの変換」まで進めてください。
和上回一樣,按下面這篇文章里記述的流程,做到【將模型轉(zhuǎn)換為ONNX格式】這一步。
【https://dolls.tokyo/howto-amd-sd-win/】《とうとうRyzen + RADEONのAMD環(huán)境にもWindowsで動くStable Diffusionがきた》(未翻譯,能直連的可以參考下)
途中でダウンロードするonnxruntime(”ort_nightly_directml-….”)は記事のバージョンではなく最新の物をおすすめします。
上述文章的流程中,讓你下載onnx運行時環(huán)境(”ort_nightly_directml-….”),請用現(xiàn)在的最新版本,而不是用文章里寫的那版。
DL&変換のためのスクリプトを準備したら、アニメ特化のAnything Ver3.0をダウンロード&変換します。
準備好轉(zhuǎn)換模型格式的python腳本之后,下載專門為二次元插畫特化的Anything Ver3.0模型,并進行轉(zhuǎn)換。
(譯者注:模型的路徑因人而異,請自行修改。)
diffuserのバージョンを0.5.1まで上げます(後述)。
要把diffuser的版本更新到0.5.1(后面會提到)。
2つのファイルを修正します。
有兩個文件需要做點修改。
まず\virtualenv\Lib\site-packages\diffusers\schedulers\scheduling_ddim.pyの264行目を修正。
修改\virtualenv\Lib\site-packages\diffusers\schedulers\scheduling_ddim.py的第264行
次に\virtualenv\Lib\site-packages\diffusers\pipelines\stable_diffusion\pipeline_stable_diffusion_onnx.pyの169行目
然后修改\virtualenv\Lib\site-packages\diffusers\pipelines\stable_diffusion\pipeline_stable_diffusion_onnx.py的第169行
これでWebUIを起動してください。
之后,可以啟動WebUI了。
なお実行時に”scipy”,”accelerator”のモジュールを求められたらpip installで追加してください(未確認)。
另外,如果您運行時,提示缺少“scipy”、“accelerator”等模塊,請用pip install命令把這些模塊裝上(我自己還沒試過)。

以下は調(diào)査記録というか、自分の知識の袋小路メモです。
以下是我的調(diào)查記錄,或者更確切的說,我的私人(?)筆記。
奇特な方だけどうぞ。
請(那些無私分享的人?)閱覽。

增加功能①:更換擴散算法
【追加機能1.スケジューラ追加】
できるかぎり新しいDiffuserを(盡可能使用新版本的diffuser)
StableDiffusion=お絵かきAIで「何ができる、何ができない」というのは大きくdiffuserのバージョンに依存します。
使用StableDiffusion這個繪圖AI,”能做什么、不能做什么“很大程度上取決于diffuser的版本。
例えばダメ要素を指定するNegative PromptはDiffuser 0.4.0の新機能でした。
比如,反向提示詞就是diffuser 0.4.0版本新增的功能。
よって當初參照した記事の通り0.3.0のままだと、今となっては古い(といっても數(shù)ヶ月前)機能しか使えません。
正如我之前引用的那篇文章那樣,如果它還是舊的0.3.0版本(即使它是幾個月前才發(fā)布的),那么只能用上舊的功能。
そこでどこまでdiffuserを最新にできるかを試しました。
于是我就試了一下能把diffuser更新到什么程度。
結(jié)果、改造無しで上げられるのはdiffuser Ver.0.5.1まで。
結(jié)果,不需要做什么改造,就順利升到了0.5.1版本。
これ以上はテンソルがなんだ、VAEがなんだと言われ自分には解決できませんでした。
但在這基礎(chǔ)上(再往上升),Tensor是什么、VAE是什么……這些事情,自己就沒能搞定了。
ともかく0.5.1にする事で使えるスケジューラ(サンプラー)の幅が少し広がりました。
總之,0.5.1版本中,可以使用的擴散算法,稍微增加了一些。
“.\Lib\site-packages\diffusers\__init__.py”を見る限り、v0.5.1にて使えるスケジューラは以下の通り(Flex…は除く)。
就“.\Lib\site-packages\diffusers\__init__.py”這個文件而言,能夠看出0.5.1支持以下的擴散算法:(Flex…系列除外。)
DDIMScheduler
DDPMScheduler
KarrasVeScheduler
PNDMScheduler
SchedulerMixin
ScoreSdeVeScheduler
このそのまま動いたのは”DDIMScheduler”と”PNDMScheduler”のみ。
實際上,只有“DDIMScheduler”和“PNDMScheduler”這兩個是能夠正常使用的。
これに無指定の際にデフォルトで仕様されるスケジューラ(名稱不明)の合計3つが自分の動かせたスケジューラです。
如果我不指定使用哪一種擴散算法,它會使用一種默認的算法,且能夠正常工作(但我不清楚它叫什么)。能夠正常使用的,一共就這3種了。
KarrasVeSchedulerについては実際にGenerateさせようとすると
如果用KarrasVeScheduler這個來生成,它會報以下的錯誤:
DDPMSchedulerについては
如果用DDPMScheduler的話,又會報這樣的錯誤:
というエラーで止まります。
然后停止工作。
解決方法が分かる人いたら教えてください。
我并不知道如何解決,如果有誰知道的話,還請不吝賜教。
SchedulerMixinとScoreSdeVeSchedulerについては別の用途らしくわかりませんでした。
SchedulerMixin和ScoreSdeVeScheduler這兩個,我沒太看懂,它們好像有別的用途?
原作者引了一段,應(yīng)該是解釋這些算法用途的:(英語就不翻了)
https://huggingface.co/docs/diffusers/v0.9.0/en/api/schedulers#diffusers.ScoreSdeVeScheduler
variance exploding stochastic differential equation (VE-SDE) scheduler
The variance exploding stochastic differential equation (SDE) scheduler.
For more information, see the original paper: https://arxiv.org/abs/2011.13456

完善WebUI腳本
【スクリプト補足】
無指定(標準)+DDIM+PNDMの3つにしぼり、選択式のラジオボタンを設(shè)定しました。
使用單選框,來指定使用哪種擴散算法。從能正常使用的那3種中選1個來使用。
Schedulerの選択(選擇擴散算法)
無指定以外はScheSetにパラメータを入れ、パイプラインに渡します。
除非使用默認的那一種,否則將對應(yīng)的參數(shù)拿來構(gòu)造ScheSet,再傳遞給Pipeline的構(gòu)造函數(shù)。
変數(shù)はHugging FaceのSchedulersを參照。
參數(shù)的取值,參見HuggingFace的Schedulers的文檔。
パイプラインの設(shè)定(Pipeline的構(gòu)造)
無指定の場合のみ、パイプラインにscheduler=が書いてあるとエラーになりました。
如果未指定擴散算法(即使用默認的那一種),會報ScheSet未定義的錯誤。
よってifで回避しています。
因此加個if條件語句,來避免這種情況。
pipe.safety_checkerはsfwチェックを無効化するもの。
pipe.safety_checker?這一句,用來禁用SFW檢查,(之后就可以澀瑟了)

不同擴散算法下,畫出來圖片的差異
【スケジューラによる作畫の違い】
Anything V3.0モデルから。
使用(轉(zhuǎn)換好的)Anything V3.0模型。
正向提示詞:cool woman waring dress, wind,solo,multicolor
反向提示詞:lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry,mecha,nsfw,looking at viewer,breast,loli
迭代步數(shù):25
關(guān)鍵詞相關(guān)度:7.5
隨機種子:1528346647



DDIMが一番細部のディティールを描き分けられています。
DDIM出來的圖,細節(jié)是最好的。
麥わらの端や服のシワ、髪の毛の揺れ具合など。
草帽的邊緣,衣服的褶皺,頭發(fā)的飄動等(都是相當不錯的)。
左手の表現(xiàn)はDefaultの方が崩れが少ないですが場合によりそう。
默認算法出來的圖,左手沒那么崩。但也要結(jié)合具體的場景來看。
PNDMはDefaultに近いですが、左手が崩れてしまっています。。
PNDM跟默認的十分相似,但是左手已經(jīng)完全崩壞了……
次いでStableDiffusion V1.5モデル。
之后是StableDiffusion V1.5模型。
正向提示詞:Aerial Shoot of skyscraper stand on solitary on a lagoon island, Emerald green sea, Dubai, The vast ocean, highly detailed, 8k, ultra-wide shot, sunny, art by greg rutkowski
反向提示詞:Distorted
迭代步數(shù):30
提示詞相關(guān)度:6
隨機種子:3096771901



題材の問題なのか、Anythingほどスケジューラによる差は生まれませんでした。
是因為題材的問題嗎?沒有產(chǎn)生像Anything模型那樣,不同擴散算法間的明顯差異。
特にDefaultとPNDMは差を見つけるのが難しいほど。
尤其是默認和PNDM兩種,難以辨認出差異。
Stepを75まで上げたら肉眼での差はわかりませんでした。
迭代步數(shù)拉到75以上的話,就很難用肉眼看出兩張圖的差別了。
2つは非常に似たスケジューラなのかもしれません。
這兩種擴散算法真的非常相似。(或者,根本就是同一種?)
DDIMは霞ががる遠景の空気感も書き分けられているとも言えます。
而DDIM將光影和遠景的淡化都表現(xiàn)出來了。

增加功能②:更換擴散算法
【追加機能2.複數(shù)枚生成】
UIをどうするとか面倒だったので、./outputフォルダに指定枚數(shù)を吐き出すだけのシンプルな実裝にしました。
因為做(展示多圖的)UI很麻煩,所以只是簡單地實現(xiàn)了輸出指定張數(shù)的圖片。
どうせWindowsなら無理にブラウザ內(nèi)で見るより、フォルダ開いてフォトアプリとかで開いたほうが早いし。
反正是Windows系統(tǒng),比起在瀏覽器里看,還是打開文件夾用圖片查看器來得更快些。
生成枚數(shù)はスライダーを使い最大20枚まで指定できます。
最多允許一次生成20張,可以拖動滑動條來指定生成的張數(shù)。
シード値を指定した場合、最初の1枚だけを指定値で生成。あとはランダムシードになります。
如果給定了一個種子號,那么只有第一張使用這個種子號。其它幾張還是使用隨機種子。
WebUIにプレビューされる畫像は最後に生成された畫像なのでご注意下さい。
在瀏覽器的預(yù)覽框中展示的是生成的最后一張圖片,這點還請注意。
とまあ???作りは適當だけど目的は達した感。
嘛……制作(這套東西出力)適當,感覺剛好達到了目的。(?)
コレでようやくAMDのグラボでもシードガチャしやすくなったと思います。
這樣一來,總算是能夠(方便地)用A卡來“抽獎”了。