記事一覧
Stable Diffusionの学習コードを作る:4.LCM-LoRA編
今回は、LCM-LoRAの学習についてやっていくよ。じつはコードの作り直しをした最大の理由はこのLCM-LoRAを簡潔に実装するためだったんだよ。 https://github.com/laksjdj…
Stable-Diffusionの学習設定まとめ
なんか学習設定について、よく分からんけどデフォルト!とかよく分からんけどこうしてみたらうまくいった!みたいな感覚で議論されていることが多い気がするので、学習設定についてまとめてみようと思います。機械学習のこと知らん人にも分かるようにするはずの記事でしたが多分そうなってないです。間違いもあると思いますが、私の記事が間違っていたとしても、悪いのは私よりも頭がいい人が分かりやすい説明をしないせいであっ
もっとみるllama-cpp-pythonで変なことする
今回はllama-cpp-pythonを利用して、変なことしようと思います。使い方よくわからずやっているので、もっといい方法あったら教えて。
モデルのロード モデルのロードについては、なんでもいいのですが、logits_allをTrueにしておきます。これは全トークンの出力を保存しておく設定って感じで、変なことするのに必要になります。ただしこれをTrueにすると、プロンプト評価時にVRAMを多
LLMで同じレイヤーを繰り返したりする
5月中に記事を書けとNote様に脅されたので、最近やったことを書く。
LLM界隈では様々なモデルのレイヤーを重ね合わせることで性能を上げる試みをしているようです。なんと自分自身のレイヤーを重ねることで性能を上げる例もあるようです。よくわかっていませんが、ようするに同じレイヤーを何度も計算するだけだと思うので、forwardの内容を変えればVRAM使用量を変えずに同じことできんじゃねと思ったの
8x7B=47B?
Mixtral「7×8は56じゃないぞ!オレたちは7×8で47だ!6.7倍だぞ6.7倍!」
MoEモデルのパラメータ数について気になったので調べてみました。
Mistral-7Bのパラメータ数 まずはただの7Bモデルについてみていきます。何番煎じだ?
実装はここみたい
https://github.com/huggingface/transformers/blob/main/src/tran
Dart+WD-Taggerでプロンプトの忠実度を計測してみる
最近出てきたプロンプト生成器
とWD-Taggerのv3
を組み合わせて、
Dartでプロンプト生成
生成したプロンプトで画像を生成
WD-Taggerでプロンプトを予測
1と3のプロンプトを比較
すればモデルのプロンプトへの忠実度測れるんじゃねということを思いついたのでやってみます。
前置きが長すぎる気がするので、とばしましょう。少なくとも俺だったら読まない。
設定 Dar
ControlNetの軽量版?つくった
ControlNetはすごいですが、UNetの3分の1~2分の1くらいの大きさのモデルが余計に必要です。今回は軽量なモデル+LoRAだけでControlNetみたいなことをやってみます。
ComfyUI用実装
https://github.com/laksjdjf/LoRTnoC-ComfyUI
あーきてくちゃあ ControlNetは基本的にUNetのIN+MIDブロックのコピーですが、
Stable Diffusionの学習コードを作る:5.ControlNet編
今回はControlNetの学習についてやっていきます。以下のような設定を増やすことで学習できるようにします。
controlnet: train: true resume: null # model file path transformer_layers_per_block: false # default = false global_average_pooling: false
[ComfyUI]SamplerCustom宣伝記事
今回は、ComfyUIにおける最強ノードである、SamplerCustomの宣伝をする記事です。
この記事の画像は全てanimagineXL-3.0及びDartが作ってくれたプロンプトを使っております。プロンプト考えなくていいの最高や~~。
画像生成ノード ComfyUIの画像生成ノードにはKSampler(雑魚)やKSampler(Advanced)(ゴミ)があります。この二つに比べてS
Stable Diffusionの学習コードを作る:4.LCM-LoRA編
今回は、LCM-LoRAの学習についてやっていくよ。じつはコードの作り直しをした最大の理由はこのLCM-LoRAを簡潔に実装するためだったんだよ。
https://github.com/laksjdjf/sd-trainer/blob/main/modules/lcm/lcm_trainer.py
スケジューラー 実装はめっちゃ簡単です。学習時にddimを使うので、分岐しています。こうしてみ
Stable Diffusionの学習コードを作る:3.LoRA編
前回はフルファインチューニングをやりましたが、今回はLoRAの学習ができるようにします。
NetworkManager モデルへ追加ネットワークを適用する処理を行うクラスです。今回はLoRAしかやりませんが、後々LoHAとかいろいろなものを実装する予定なので、NetworkManagerという名前になっています。そのくせ変数名がlora前提になっていたりとちょっと見直さなきゃいけない部分もあり
Stable Diffusionの学習コードを作る:2.学習編
前回の続きとして、学習のために必要なコードを紹介していきます。今回はLoRAではなく、フルファインチューニングができるようにします。
データセット(BaseDataset)データセットのフォルダ構造は以下のような感じです。フォルダ名はデフォルトの名前であって、設定で自由に変えられるようにします。
Dataset/ buckets.json # bucketingのメタデータ original
Stable Diffusionの学習コードを作る:1.生成編
学習コードに変な機能がいっぱい増えてわけわからなくなっちゃったので作り直すことにしました。せっかくなので記事にしてみます。完全なオレオレ学習コードなので全くゆうざあふれんどりぃでないものになる予定です!
方針として、モデルの定義以外は自前で実装します。モデルの定義はhuggingfaceとの連携辺りがめんどくさいのでやりたくないです。
※Noteに貼り付けているコードはGithubのものより
Stable Diffusion学習の歴史
完全に自分目線の歴史です。時系列は適当なこともあるよ。
2022/8 モデルが公開されましたが、学習を始めた人は一部だけでしょう。
Stable Diffusionリリース 22日
これまでの画像生成AIと違いモデルがオープンになったことで、誰でも自由に学習できるようになりました。StabilityAIが公開したコードには学習コードも含まれていたので、技術力さえあればこの時点で学習できた
ComfyUIにおけるUNet改造ノードの作り方
誰が得するんだろうこんな記事
ComfyUIのカスタムノードについて新しいノードを作るには、以下の記事が詳しいです。
UNetを改造するとき、たとえばMODELを受け取って好き勝手いじって、MODELを出力するという話なら簡単です。しかし入力時にコピーされるわけではないので、適当に改変してしまうと入力側も変わってしまいます。ComfyUIはノードベースの生成UIであり、複数のノードにMODE
学習不要のUNet改変法まとめ
最近になって、UNetの構造をいじって生成速度をあげたり、品質を高める方法が色々提案されたのでまとめてみます。
UNetについて 過去に記事をあげてたと思います。UNetはIN層・MID層・OUT層に分かれます。downとかupとか呼ばれることもありますが、今回はIN/MID/OUTで統一します。IN層では入力がどんどん縮小されていって、OUT層では元のサイズに戻っていきます。UNetは一直線
LCM-LoRAについて
学習や生成をいろいろ試して分かったことをまとめます。
LCM-LoRAとは ただのLoRAです。サンプラーが変わったりCFG_scaleが1に近い値を設定しないといけなかったりとちょっと特殊ですが、結局LoRAであることは変わりません。
サンプラーについてLCMサンプラーは意外と直感的に理解できます。Euler ancestralの究極版みたいな感じです。
以下は1ステップ分の図です。左の完