Kohya S.

小説を書いたり機械学習で遊んだり電子工作をしたりしています。

Kohya S.

小説を書いたり機械学習で遊んだり電子工作をしたりしています。

マガジン

  • DreamBooth、fine tuningなど

    自作スクリプト関連の記事をまとめました。

最近の記事

自作小説をLLMにレビューさせてみる(ローカル4モデル、サービス型3モデル)

24-4-18: Command-R+ (cohere playground) 追加(結果のみ) 簡単なまとめ 見返したらあまりにも長くて読みづらかったので、Opusの力も借りて、要約を追記しておきます。 【ローカルLLM】 LightChatAssistant-4x7B-f16.gguf: 非常に流暢な日本語で応答するものの、小説の内容理解には限界が見られた。キャッチーな単語に引きずられるなど、ややハルシネーションが見受けられた。ただし、このサイズのモデルとしては

    • SDXLでコピー機学習法を試す

      はじめにコピー機学習法は、LoRAを教師画像と同様の画像しか出力されないレベルまで過学習し(コピー機と呼ばれる理由です)、そこから目的のLoRAを取り出す手法です。詳細は以下の月須和・那々氏の記事をご覧ください。 今回、SDXLでコピー機学習法を試してみました。品質的にはいまひとつですが、一応成功はしましたので、設定等を共有します。 学習にはsd-scriptsを利用しています。 教師データとりにく氏の画像を利用させていただきます。 今回は開き目(通常の状態)1枚、

      • sd-scriptsで任意の画像とキャプションで学習する

        はじめにsd-scriptsのリポジトリでは画像ファイルとキャプションファイルを指定してStable DiffusionやLoRA等を学習できますが、場合によってはより柔軟な学習をしたいこともあるかと思います。たとえば画像を動的に生成したい、augmentationを自由に行いたい、画像やキャプションをステップに応じて変化させたい、などです。 この記事ではそのような場合に、任意のDatasetを定義して学習する方法について記述します。 Datasetクラスの作成クラスの定義

        • LoRA学習用サンプルデータ

          LoRAの環境整備がうまく行っているか、学習を試すためのサンプルデータです。 サンプルデータ作業ディレクトリを作成し、以下のzipを展開してください。 学習の手順展開したディレクトリにmodel.ckptという名前で、学習対象のモデルをコピーします。 (シンボリックリンクでも構いません。) (コピーしない場合は、以降のコマンド内の ..\model.ckpt をモデルファイルの所在で書き換えてください。.safetensorsも指定できます。) そのディレクトリ内で h

        自作小説をLLMにレビューさせてみる(ローカル4モデル、サービス型3モデル)

        マガジン

        • DreamBooth、fine tuningなど
          9本

        記事

          Stable DiffusionのU-Netでブロックごとに異なるプロンプトを与えて画像生成する(ブロック別プロンプト)

          はじめに※1/10追記:コメントでご指摘いただきましたが、キャプションが有効(CrossAttentionが存在する)なのはblock 1, 2, 4, 5, 7, 8, 12, 16 ~ 24です。他のblockのキャプションは無視されます。確認が足らず失礼いたしました。 ご指摘いただいたgcem156氏に感謝します。 U-Netの構造については以前の記事に書きました。 U-NetはText Encoderからの出力を受け取り、それに沿うように(プロンプトを再現するよう

          Stable DiffusionのU-Netでブロックごとに異なるプロンプトを与えて画像生成する(ブロック別プロンプト)

          DiffusersベースのDreamBoothについて

          はじめにStable DiffusionのDreamBoothについて、以前の記事では記事にスクリプトを添付していましたが、新たにgithubのリポジトリを作成しました。そちらを用いた学習について解説する記事です。 リポジトリはこちらです。 スクリプトの主な機能は以下の通りです。 8bit Adam optimizerおよびlatentのキャッシュによる省メモリ化(ShivamShrirao氏版と同様)。 xformersによる省メモリ化。 512*512だけではな

          DiffusersベースのDreamBoothについて

          Stable Diffusion checkpointとDiffusersモデルの相互変換スクリプト(SD2.0対応)

          はじめにStable Diffusion checkpointとDiffusersモデルの変換スクリプトは、Diffusers公式からStable Diffusion v1.xのものは提供されていますが、2.0対応のものは12/3時点でリリースされていません。拙作のDreamBooth学習スクリプトでモデル自体の変換はすでに実装済みですので、それにコードを追加して、相互に変換を行うスクリプトを作成しました。 せっかくですのでv1.xとv2.0の双方に対応してあります。 スク

          Stable Diffusion checkpointとDiffusersモデルの相互変換スクリプト(SD2.0対応)

          Stable Diffusion画像生成スクリプト(Diffusersベース、SD2.0、一括生成対応)

          はじめに多くの方はWeb UI他の画像生成環境をお使いかと思いますが、コマンドラインからの生成にも、もしかしたら需要があるかもしれませんので公開します。 Pythonで仮想環境を構築できるくらいの方を対象にしています。また細かいところは省略していますのでご容赦ください。 ※12/16 (v9):img2img等でフォルダ指定したときファイル名をソートして処理するよう変更しました。目次から「スクリプト」に飛んでください。 ※使用に当たっては自己責任でお願いいたします。 概

          Stable Diffusion画像生成スクリプト(Diffusersベース、SD2.0、一括生成対応)

          DiffusersベースでStable Diffusionをfine tuningする

          NovelAIの提案した学習手法、自動キャプションニング、タグ付け、Windows+VRAM 12GB(v1.4/1.5の場合)環境等に対応したfine tuningです。 ※12/17:v9に更新しました。「Diffusersの環境構築とスクリプトの準備」に飛んでください。 はじめに先日、DiffusersベースでDreamBoothを行う記事を書きましたが、U-Netの学習の仕組みを使うことでStable Diffusionのfine tuningが可能です。この記事

          DiffusersベースでStable Diffusionをfine tuningする

          DreamBoothスクリプトのfine-tuning機能について

          ※fine tuning専用のスクリプトを作成しましたので、通常はそちらをご利用いただければ幸いです。 はじめに前回の記事の続きです。スクリプトのfine-tuning機能の解説です。 概要DreamBoothはモデルのU-NetとText Encoderを学習しています。ですので、画像とプロンプト(キャプション)の取り扱いを変えるだけでそれらのfine-tuningが可能です。 教師データの準備 画像ファイルと、その画像のプロンプトが1行で記述されたテキストファイル

          DreamBoothスクリプトのfine-tuning機能について

          StableDiffusionのcheckpointに任意のVAEをマージする

          概要Stable Diffusionのモデルは大きくVAE(Auto-Encoder)、Text Encoder、U-Netからなりますが、VAEは画像と潜在空間の変換を行っています。VAEを入れ替えることで出力される画像が変化し、たとえば特定のジャンル(アニメ絵など)がより高精細に出力される、といったことが期待できます。 そこでcheckpointのVAEだけを入れ替えて新しいcheckpointを作るスクリプトを作成しました。 生成環境によっては生成時に任意にVAEを

          StableDiffusionのcheckpointに任意のVAEをマージする

          8-bit optimizer(bitsandbytes)をWindows(非WSL)で動かす

          概要学習の省メモリ化に有効なbitsandbytesの8-bit optimizerですが、Windows用のDLLが提供されていないためそのままでは動きません。 以前の記事に8-bit optimizerをWindows(非WSL)で動かす方法について書きましたが、わかりやすいように記事として独立させました。 手順仮想環境等を適宜設定しておいてください。 bitsandbytesのインストール pipでインストールします。Windows対応のための変更スクリプトが0

          8-bit optimizer(bitsandbytes)をWindows(非WSL)で動かす

          DiffusersベースのDreamBoothの精度をさらに上げる・augmentation編

          ※12/1 (v2):顔が見つからないと落ちるバグを修正しました。 はじめに前回の記事の続きです。アニメ等のキャラクタを学習させるための記事になります。また環境整備が面倒なわりに効果は限定的ですので、それでもという方のみお試しください。 以下のツイートで紹介されていたAnime Face Detectorを使っています。 概要あらかじめAnime Face Detectorを用いて教師用画像を前処理(顔検出など)します(スクリプトを用意してあります)。 顔のサイズを画

          DiffusersベースのDreamBoothの精度をさらに上げる・augmentation編

          DiffusersベースのDreamBooth(SD2.0対応、Windows対応、必要VRAM 12GB~)

          (12/20)新たにリポジトリを作成しましたので最新版はそちらから取得してください。解説記事は以下になります。 (12/17)スクリプトをv18に更新しました。目次から「学習用スクリプトのダウンロード」に飛んでください。 はじめに先日、Diffusers版DreamBoothをText Encoderまで学習するようにして精度を上げる記事を書きましたが、依然としてXavierXiao氏のStableDiffusion版よりも若干精度が落ちるように感じていました。調査の結果

          DiffusersベースのDreamBooth(SD2.0対応、Windows対応、必要VRAM 12GB~)

          Stable DiffusionのモデルをU-Netの深さに応じて比率を変えてマージする

          概要Stable Diffusionでは、複数のモデルの重みをマージすると中間的な出力が得られることが知られています。 以下の比較結果が大変参考になります。 またマージ用のスクリプトは以下で公開されています。 また(ざっくりとした私の理解では)Stable Diffusionは大きくText Encoder (CLIP)、Denoising Auto Encoder (U-Net)、Auto Encoderからなります。このうち、U-Netが画像をノイズから画像を生成す

          Stable DiffusionのモデルをU-Netの深さに応じて比率を変えてマージする

          Diffusers版DreamboothをVRAM 8GBのWindowsで無理矢理動かす

          概要学習時のモデルの重みと勾配、テンソルをすべてfp16にすることで8GB VRAMで学習します。学習に失敗する可能性は高く、また学習できたとしても精度は大きく下がりますのであくまで実験的なものです。 PyTorchのソースコードを書き換えるなどとても無理矢理なので動いたらラッキーくらいの心持ちでお願いします。 ※使用に当たっては自己責任でお願いいたします。 以下のTtl氏のバージョンでも8GB VRAMで動作するようですので、Linux/WSLでは使ったほうが良さそう

          Diffusers版DreamboothをVRAM 8GBのWindowsで無理矢理動かす