【AI作画】【A卡】更新了给A卡用的WebUI,支持批量生成、更换扩散算法【中日对照翻译】

原帖地址:https://dolls.tokyo/amd_anything_webui_verup/
原标题:AMDのWindowsマシンで動くAnythingV3.0 WebUIを更新(スケジューラと複数枚生成)
原作者:ぶっちー
时间:2022-12-01
注:此文是https://dolls.tokyo/howto_amd_anything_webui/ 的后续,本人也翻了这一篇。
在此表示感谢。未获授权,仅供学习交流,侵删
ありがとうございます。著作権を侵害したら、すぐに削除します。
个人日语水平有限(N4),机翻加润色,渣翻,不当之处敬请斧正。

グラボを換えてもDirectMLは死なず。
即便更换了显卡,DirectML也不会死掉(因为它是A、I、N卡都能通用的)。(所以这套东西理论上可以用在核显上)
という事でやりかけになっていたWebUIをとりあえず形にしたのでここで供養します。
将这个WebUI(虽然只是半成品)放在这里,供大家使用。
3090TiでもAMDの時のDirectML環境がそのまま動いたので多分使えます。
给A卡用的这套东西,在N卡上也可以食用。
注:作者搞了一个二手的3090Ti来玩。

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

使用方法
【使い方】
基本的な環境作成(配置基础环境)
前回同様、以下の記事を「学習データのダウンロードとOnnxへの変換」まで進めてください。
和上回一样,按下面这篇文章里记述的流程,做到【将模型转换为ONNX格式】这一步。
【https://dolls.tokyo/howto-amd-sd-win/】《とうとうRyzen + RADEONのAMD環境にもWindowsで動くStable Diffusionがきた》(未翻译,能直连的可以参考下)
途中でダウンロードするonnxruntime(”ort_nightly_directml-….”)は記事のバージョンではなく最新の物をおすすめします。
上述文章的流程中,让你下载onnx运行时环境(”ort_nightly_directml-….”),请用现在的最新版本,而不是用文章里写的那版。
DL&変換のためのスクリプトを準備したら、アニメ特化のAnything Ver3.0をダウンロード&変換します。
准备好转换模型格式的python脚本之后,下载专门为二次元插画特化的Anything Ver3.0模型,并进行转换。
(译者注:模型的路径因人而异,请自行修改。)
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命令把这些模块装上(我自己还没试过)。

以下は調査記録というか、自分の知識の袋小路メモです。
以下是我的调查记录,或者更确切的说,我的私人(?)笔记。
奇特な方だけどうぞ。
请(那些无私分享的人?)阅览。

增加功能①:更换扩散算法
【追加機能1.スケジューラ追加】
できるかぎり新しいDiffuserを(尽可能使用新版本的diffuser)
StableDiffusion=お絵かきAIで「何ができる、何ができない」というのは大きくdiffuserのバージョンに依存します。
使用StableDiffusion这个绘图AI,”能做什么、不能做什么“很大程度上取决于diffuser的版本。
例えばダメ要素を指定するNegative PromptはDiffuser 0.4.0の新機能でした。
比如,反向提示词就是diffuser 0.4.0版本新增的功能。
よって当初参照した記事の通り0.3.0のままだと、今となっては古い(といっても数ヶ月前)機能しか使えません。
正如我之前引用的那篇文章那样,如果它还是旧的0.3.0版本(即使它是几个月前才发布的),那么只能用上旧的功能。
そこでどこまでdiffuserを最新にできるかを試しました。
于是我就试了一下能把diffuser更新到什么程度。
結果、改造無しで上げられるのはdiffuser Ver.0.5.1まで。
结果,不需要做什么改造,就顺利升到了0.5.1版本。
これ以上はテンソルがなんだ、VAEがなんだと言われ自分には解決できませんでした。
但在这基础上(再往上升),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这两个,我没太看懂,它们好像有别的用途?
原作者引了一段,应该是解释这些算法用途的:(英语就不翻了)
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つにしぼり、選択式のラジオボタンを設定しました。
使用单选框,来指定使用哪种扩散算法。从能正常使用的那3种中选1个来使用。
Schedulerの選択(选择扩散算法)
無指定以外はScheSetにパラメータを入れ、パイプラインに渡します。
除非使用默认的那一种,否则将对应的参数拿来构造ScheSet,再传递给Pipeline的构造函数。
変数はHugging FaceのSchedulersを参照。
参数的取值,参见HuggingFace的Schedulers的文档。
パイプラインの設定(Pipeline的构造)
無指定の場合のみ、パイプラインにscheduler=が書いてあるとエラーになりました。
如果未指定扩散算法(即使用默认的那一种),会报ScheSet未定义的错误。
よってifで回避しています。
因此加个if条件语句,来避免这种情况。
pipe.safety_checkerはsfwチェックを無効化するもの。
pipe.safety_checker 这一句,用来禁用SFW检查,(之后就可以涩瑟了)

不同扩散算法下,画出来图片的差异
【スケジューラによる作画の違い】
Anything V3.0モデルから。
使用(转换好的)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
迭代步数:25
关键词相关度:7.5
随机种子:1528346647



DDIMが一番細部のディティールを描き分けられています。
DDIM出来的图,细节是最好的。
麦わらの端や服のシワ、髪の毛の揺れ具合など。
草帽的边缘,衣服的褶皱,头发的飘动等(都是相当不错的)。
左手の表現はDefaultの方が崩れが少ないですが場合によりそう。
默认算法出来的图,左手没那么崩。但也要结合具体的场景来看。
PNDMはDefaultに近いですが、左手が崩れてしまっています。。
PNDM跟默认的十分相似,但是左手已经完全崩坏了……
次いで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
迭代步数:30
提示词相关度:6
随机种子:3096771901



題材の問題なのか、Anythingほどスケジューラによる差は生まれませんでした。
是因为题材的问题吗?没有产生像Anything模型那样,不同扩散算法间的明显差异。
特にDefaultとPNDMは差を見つけるのが難しいほど。
尤其是默认和PNDM两种,难以辨认出差异。
Stepを75まで上げたら肉眼での差はわかりませんでした。
迭代步数拉到75以上的话,就很难用肉眼看出两张图的差别了。
2つは非常に似たスケジューラなのかもしれません。
这两种扩散算法真的非常相似。(或者,根本就是同一种?)
DDIMは霞ががる遠景の空気感も書き分けられているとも言えます。
而DDIM将光影和远景的淡化都表现出来了。

增加功能②:更换扩散算法
【追加機能2.複数枚生成】
UIをどうするとか面倒だったので、./outputフォルダに指定枚数を吐き出すだけのシンプルな実装にしました。
因为做(展示多图的)UI很麻烦,所以只是简单地实现了输出指定张数的图片。
どうせWindowsなら無理にブラウザ内で見るより、フォルダ開いてフォトアプリとかで開いたほうが早いし。
反正是Windows系统,比起在浏览器里看,还是打开文件夹用图片查看器来得更快些。
生成枚数はスライダーを使い最大20枚まで指定できます。
最多允许一次生成20张,可以拖动滑动条来指定生成的张数。
シード値を指定した場合、最初の1枚だけを指定値で生成。あとはランダムシードになります。
如果给定了一个种子号,那么只有第一张使用这个种子号。其它几张还是使用随机种子。
WebUIにプレビューされる画像は最後に生成された画像なのでご注意下さい。
在浏览器的预览框中展示的是生成的最后一张图片,这点还请注意。
とまあ・・・作りは適当だけど目的は達した感。
嘛……制作(这套东西出力)适当,感觉刚好达到了目的。(?)
コレでようやくAMDのグラボでもシードガチャしやすくなったと思います。
这样一来,总算是能够(方便地)用A卡来“抽奖”了。