欢迎光临散文网 会员登陆 & 注册

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

2022-12-09 23:23 作者:蒙舌上単  | 我要投稿

原帖地址: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扩散算法
PNDM扩散算法

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

默认算法
DDIM
PNDM

題材の問題なのか、Anythingほどスケジューラによる差は生まれませんでした。

是因为题材的问题吗?没有产生像Anything模型那样,不同扩散算法间的明显差异。

特にDefaultとPNDMは差を見つけるのが難しいほど。

尤其是默认和PNDM两种,难以辨认出差异。

Stepを75まで上げたら肉眼での差はわかりませんでした。

迭代步数拉到75以上的话,就很难用肉眼看出两张图的差别了。

2つは非常に似たスケジューラなのかもしれません。

这两种扩散算法真的非常相似。(或者,根本就是同一种?)

DDIMは霞ががる遠景の空気感も書き分けられているとも言えます。

而DDIM将光影和远景的淡化都表现出来了。

增加功能②:更换扩散算法

【追加機能2.複数枚生成】

UIをどうするとか面倒だったので、./outputフォルダに指定枚数を吐き出すだけのシンプルな実装にしました。

因为做(展示多图的)UI很麻烦,所以只是简单地实现了输出指定张数的图片。

どうせWindowsなら無理にブラウザ内で見るより、フォルダ開いてフォトアプリとかで開いたほうが早いし。

反正是Windows系统,比起在浏览器里看,还是打开文件夹用图片查看器来得更快些。

生成枚数はスライダーを使い最大20枚まで指定できます。

最多允许一次生成20张,可以拖动滑动条来指定生成的张数。

シード値を指定した場合、最初の1枚だけを指定値で生成。あとはランダムシードになります。

如果给定了一个种子号,那么只有第一张使用这个种子号。其它几张还是使用随机种子。

WebUIにプレビューされる画像は最後に生成された画像なのでご注意下さい。

在浏览器的预览框中展示的是生成的最后一张图片,这点还请注意。


とまあ・・・作りは適当だけど目的は達した感。

嘛……制作(这套东西出力)适当,感觉刚好达到了目的。(?)

コレでようやくAMDのグラボでもシードガチャしやすくなったと思います。

这样一来,总算是能够(方便地)用A卡来“抽奖”了。




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

分享到微博请遵守国家法律