Stable Diffusion web UIを使ってMacで美少女イラストの生成を試してみた

はじめに

テキストから画像を生成できるstable-diffusion-webuiをApple siliconのMacで動かしてみた記録の続きです。 追加学習されたモデルをダウンロードして好みの画像を生成できるか試してみました。

環境について

動作環境は以下になります。

準備

stable-diffusion-webuiの準備

以前行った環境をそのまま利用します。

y-kitaro.hatenablog.com

モデルのダウンロード

webで公開されている学習済みモデルをダウンロードします。 今回は以下のモデルを使用しました。

civitai.com

ページ右側にある「Download」をクリックしてモデルをダウンロードします。

モデルの配置

stable-diffusion-webuiの環境に先ほどダウンロードしたモデルを以下のように配置します。

./models
        ┗/Stable-diffusion
                ┗cetusMix_Whalefall2.safetensors

画像の生成

モデルのページにあるプロンプトを使って画像生成を行っていきます。

プロンプトや設定の確認

以下のページの右下にあるPromptとNegative promptを確認します。

Image posted by Eagelaxis

web-UIを起動しモデルを選択します。

Prompt、Negative Promptに先ほど確認したページのものをコピーします。

Generateボタンを押すと画像生成が始まります。

今回の設定では画像サイズやランダムシード値をオリジナルに合わせていないため、以下のような似たテイストの絵が生成されました。

終わりに

webで公開されている学習済みモデルを使ったイラストの生成を試してみました。 今後も進化を続けていく画像生成について、使い方を継続して学んでいきたいと思います。

Stable Diffusion web UIをMacで試してみた

はじめに

テキストから画像を生成できるstable-diffusion-webuiをApple siliconのMacで動かしてみました。

環境について

動作環境は以下になります。

準備

webuiのapple silicon向け説明に従って準備をしていきます。

github.com

brewpythonがインストールされていることが前提になります。

1.実行コードの準備

適当なディレクトリへ、以下のgitリポジトリからコードをクローンします。 github.com

緑色のCodeをクリックし、CloneのURLをコピーします。 ターミナルで任意のディレクトリに移動し、

git clone <コピーしたURL>

を実行します。

または、DownloadZipでコードを直接ダウンロードし展開します。

2.環境構築

ターミナルで実行コードのディレクトリに移動しwebui.shを実行します。

. ./webui.sh

または、webui.shをクリックして実行します。

シェルスクリプトの中でvenv仮装環境の構築が行われます。

必要な学習済みモデルをダウンロードするため、ネットワークの接続状況によっては時間がかかります。

3.Web-UIの起動

初回のファイルダウンロードが完了するとwebUIにアクセスできるようになります。 ターミナルに以下のように出力されたら準備完了です。

LatentDiffusion: Running in eps-prediction mode
Running on local URL:  http://127.0.0.1:7860

http://127.0.0.1:7860をcommandキーを押したままクリックすることでブラウザでwebUIを開くことができます。

テキストから画像の生成

Web-UI画面

promptにテキストを入力し、「Generate」ボタンを押すと画像の生成が開始されます。

生成された画像はWeb-UIの以下のディレクトリに出力されます。

./outputs/txt2img-images/{日付}/{生成画像}

起動コマンドを追加しなくてもMacGPUを使って画像の生成が行われるようになっていました。

終わりに

Macでの画像の生成をWeb-UIを使って行いました。 GPUを使う設定が自動で選択されるため、Macでも十分に生成ができるようになりました。 今後は様々なプラグインや追加モデルを試してみたいと思います。

また、関連するリポジトリをメンテナンスしている皆様に感謝いたします。

RTX4060Ti 16GBについて思うこと -ゲームや生成AIに使えるのか-

はじめに

NVIDIAからRTX4060TiのVRAMを16GBに増量したバージョンが発売される予定となっています。

www.nvidia.com

スペックとしては以下のようになっており、すでに発売しているRTX4060Tiとの違いはVRAMだけです。

VRAMはモデルパラメータの大きな生成AIを使う場合や、一度に複数の生成を行う場合に多く要求されます。 また、最近のグラフィック表現に優れたゲームでは多くのVRAMを必要とし、プレイ時に要求される量が上がっています。

そのため、ミドルクラスの処理能力で大容量のVRAMを搭載したRTX4060Ti 16GBは、それらの用途にちょうどいいGPUになると考えられます。

しかし、スペック表にあるようにメモリインターフェイス幅が128bitのためゲームで性能を発揮できるのか、生成AIの動作速度に影響はあるのか気になったので調査しました。

ゲームについて

RTX4060同様のメモリインターフェイス幅を持つRTX4060の値を参考にします。

RTX4060とRTX3060を実際に比較した結果が以下のサイトに掲載されていました。

weekly.ascii.jp

RTX3060とRTX4060を比較すると、メモリインターフェイス幅は256bitから128bitへ半減しています。 しかし、DLSSを使った設定では70番台のRTX3070に迫るFPSになっています。

ゲームプレイ時のメモリインターフェイス幅の影響についてNVIDIAの見解が以下のサイトで説明されていました。

gazlog.com

キャッシュを増やし、VRAMへのアクセスを減らすことで、パフォーマンスを向上させていると主張しています。

生成AIについて

以下のページにstable diffusionを使った結果が掲載されていました。 ゲーム同様RTX3060とRTX4060を比較しています。 weekly.ascii.jp

結果から、RTX4060はRTX3060以上RTX3070以下の処理能力となっていることがわかりました。

ゲームと異なりメモリをフルに使うため、インターフェイス幅がボトルネックになると考えていたのですが、順当に処理能力が上がっているようです。

終わりに

RTX4060Ti 16GBはゲーム、生成AIの両方に最適なGPUだとわかりました。 価格の面では発売後しばらくすると値段が下がると予想されるので、そのタイミングを狙っていきたいGPUだと思います。

DDSP-SVCを使った音声変換をMacで試してみた

はじめに

音声の特徴を別人のものに変えることができる、DDSP-SVCMacで試した時の記録です。 今回はDDSP-SVCのコードと学習済みモデルを使って音声変換を試しました。

2024-02-24 : Ver5.0に合わせて更新を行いました。

環境について

動作環境は以下になります。

準備

pythonがインストールされていることが前提になります。

実行コードの準備

適当なディレクトリへ、以下のgitリポジトリからコードをクローンします。

github.com

ターミナルで任意のディレクトリに移動し、

git clone https://github.com/yxlllc/DDSP-SVC.git

を実行します。

または、DownloadZipでコードを直接ダウンロードし展開します。

CUDA以外で音声変換の処理を実行するためにencoder/rmvpe/inference.pyの以下のコードを変更します。

        def __init__(self, model_path, hop_length=160):
        self.resample_kernel = {}
        model = E2E0(4, 1, (2, 2))
-      ckpt = torch.load(model_path)
+      ckpt = torch.load(model_path, map_location=torch.device('cpu'))
        model.load_state_dict(ckpt['model'], strict=False)
        model.eval()
        self.model = model
        self.mel_extractor = MelSpectrogram(N_MELS, SAMPLE_RATE, WINDOW_LENGTH, hop_length, None, MEL_FMIN, MEL_FMAX)
        self.resample_kernel = {}

必要な訓練済みモデルのダウンロード

DDSP-SVCリポジトリから訓練済みモデルをダウンロードします。

github.com

遷移先の以下の項目のContentVec、HuberSoft、NSF-HiFiGan、RMVPEをクリックしてダウンロードします。

2. Configuring the pretrained model

Feature Encoder (choose only one):
(1) Download the pre-trained ContentVec encoder and put it under  pretrain/contentvec folder.

(2) Download the pre-trained HubertSoft encoder and put it under pretrain/hubert folder, and then modify the configuration file at the same time.

Vocoder or enhancer:
Download the pre-trained NSF-HiFiGAN vocoder and unzip it into pretrain/ folder.

Or use the https://github.com/openvpi/SingingVocoders project to fine-tune the vocoder for higher sound quality.

Pitch extractor:
Download the pre-trained RMVPE extractor and unzip it into pretrain/ folder.

「pretrain」に以下の構成になるように配置します。

モデルの準備

DDSP-SVCのモデルを準備します。 Google Colaboratroryで訓練する方法は以下になります。

y-kitaro.hatenablog.com

学習済みのモデルと設定ファイルを同じディレクトリに配置する必要があります。 例として以下のようにモデルを配置していきます。

./exp
        ┗/model_name
                ┣モデル.pt
                ┗config.yml

環境の準備

実行のためのライブラリを準備します。

ターミナルでDDSP-SVCディレクトリに移動して、仮装環境を構築します。

python -m venv venv

作成した仮装環境へ切り替えます。

. ./venv/bin/activate

必要なライブラリのインストールを行います。

pip install -r requirements.txt

以上で準備は完了です。

音声変換

以下のコマンドで音声変換を行います。

ver4.0、Ver5.0の場合

python main.py -i "変換する音声" -o "変換した音声の出力先" -diff "./exp/model_name/モデル.pt"

音声への処理とモデルによる変換が行われます。 初めて変換する音声の場合、音声への処理が長くなります。 二回目以降の変換では音声の要素への分解処理は、キャッシュを利用して省略されるため処理時間が短くなります。

キーを変更する場合は以下のように指定します。

python main.py -i "変換する音声" -o "変換した音声" -diff "./exp/model_name/モデル.pt" -k キーの値

ver2.0の場合(旧バージョン)

python main.py -i "変換する音声" -o "変換した音声の出力先" -m "./exp/model_name/モデル.pt"

キーを変更する場合は以下のように指定します。

python main.py -i "変換する音声" -o "変換した音声" -m "./exp/model_name/モデル.pt" -k キーの値

終わりに

モデル学習時のデータセット精度によりますが、RVCでは掠れた声になっていた箇所がしっかりと変換できていると感じました。 初回の音声の場合、多少時間がかかりますが、Macでも生成は十分に可能なことがわかりました。

最後に、関連するリポジトリをメンテナンスしている皆様に感謝いたします。

Google ColabでDDSP-SVCの音声変換用モデルを訓練してみた

はじめに

音声の特徴を別人のものに変えることができる、DDSP-SVCを試すにあたってモデルの訓練をGoogle Colaboratoryで行った時の記録です。 DDSP-SVCのコードと音声データを使って音声変換のためのモデル訓練を行いました。

※バージョン4.0に対応しました。

y-kitaro.hatenablog.com

Google Driveの準備

まずはGoogleDrive上に必要なファイルを配置していきます。

ディレクトリの準備

  1. Google Driveに「ddsp-svcディレクトリを作成します。

  2. 「ddsp-svc」の下に「pretrain」、「train_data」、「input」、「output」を作成します。以下は作成した後の一例です。

    構成例

  3. 次のpyhtonノートブックを開いてドライブにコピーします。 Open In Colab

モデルのダウンロード

DDSP-SVCリポジトリから訓練済みモデルをダウンロードします。

github.com

遷移先の以下の項目のContentVec、HuberSoft、NSF-HiFiGanをクリックしてダウンロードします。

2. Configuring the pretrained model

Feature Encoder (choose only one):
(1) Download the pre-trained ContentVec encoder and put it under  pretrain/contentvec folder.

(2) Download the pre-trained HubertSoft encoder and put it under pretrain/hubert folder, and then modify the configuration file at the same time.

Vocoder or enhancer:
Download the pre-trained NSF-HiFiGAN vocoder and unzip it into pretrain/ folder.

「pretrain」に以下の構成になるようにアップロードします。

学習用データのアップロード

学習用データを「train_data」にアップロードします。 学習用としてアップロードするデータは[mp3, wav, flac]が利用できます。

変換するデータのアップロード

変換元データとして「input」にアップロードします。 変換元データは[wav]が利用できます。

Colaboratoryの準備

コピーしたノートブックを開いてドライブをマウントします。この時、ランタイムのタイプがGPUになっていることを確認してください。

マウント後にOne-time setupの範囲を実行します。 One-time setupでは必要なコードのcloneと依存ライブラリのインストールが行われます。

※ 以下の処理では作成した環境をGoogleDriveに保存しています。保存した場合GoogleDriveに2GB強のファイルが作成されるため、容量を節約したい場合は「Without Saving the Environment」の処理を代わりに実行してください。

! cd DDSP-SVC && sudo python3 -m venv ./venv --without-pip && curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && . ./venv/bin/activate && python3 get-pip.py && pip install --upgrade pip && pip install -r requirements.txt
! tar -zcvf DDSP-SVC.tar.gz DDSP-SVC
! cp DDSP-SVC.tar.gz ./drive/MyDrive/ddsp-svc/ -r

モデルの訓練

モデルの訓練を実施します。

学習済みモデルのコピー

必要な学習済みモデルをGoogleDriveの「pretrain」ディレクトリごとコピーします。

! cp drive/MyDrive/ddsp-svc/pretrain DDSP-SVC/ -r

音声ファイルの準備

音声ファイルを学習用のデータに分割します。 分割対象の音声ファイルはGoogleDriveの「train_data」にある全ての音声ファイルです。

import sys
sys.path.append("./DDSP-SVC/venv/lib/python3.10/site-packages/")
sys.path.append("./DDSP-SVC/")
import separate

separate.separate_audio(input="/content/drive/MyDrive/ddsp-svc/train_data/", output="/content/DDSP-SVC/data/train/audio", silence_thresh=-40, min_silence_len=750, keep_silence=750 , min=2000, max=5000, padding=True)

訓練の実施

モデルの訓練を開始します。

! cd DDSP-SVC && . ./venv/bin/activate && python draw.py && python preprocess.py -c configs/combsub.yaml

! cd DDSP-SVC && . ./venv/bin/activate && python train.py -c configs/combsub.yaml

モデルは2000ステップごとに保存されます。最大で100000エポックまで学習が継続するため、 回転しているボタンをクリックして適当なステップ数で学習を打ち切ってください。

モデルの保存

モデルの保存を行います。 以下の処理が完了するとGoogleDriveのddsp-svcにmodel.zipが作成されます。

!zip model.zip ./DDSP-SVC/exp/combsub-test -r

!mv model.zip ./drive/MyDrive/ddsp-svc/

モデルのテスト

以下の処理で音声変換を試すことができます。 inputにあるname.wavを変換し、outputにname.wavとして出力します。

! cd DDSP-SVC && . ./venv/bin/activate && python main.py -i "../drive/MyDrive/ddsp-svc/input/name.wav" -o "../drive/MyDrive/ddsp-svc/output/name.wav" -m "./exp/combsub-test/model_30000.pt" -d "cuda"

各引数は以下のように設定してください。

  • -I 変換するファイルのパス name.wavを任意のファイル名に変更してください。
  • -o 出力先のパス name.wavを任意のファイル名に変更してください。
  • -m 変換に使うモデルのパス model_30000.ptの数字を任意の値に変更してください。選択可能なモデルは「./DDSP-SVC/exp/combsub-test」配下を確認してください。

おわりに

Google ColaboratoryでDDSP-SVCのモデルを訓練しました。VRAMをそこまで使用しないため無料版ユーザでも利用可能だと思います。モデルの学習が終わればGPUなしのローカル環境でも音声変換を行うことができます。 また、関連するリポジトリやコードをメンテナンスしていただいている皆様に感謝いたします。

サイバーエージェントから公開された小規模言語モデルを試してみた

はじめに

サイバーエージェントから公開された言語モデルの中からsmall、medium、largeを実際に使用し、どのような文章が生成されるか検証した記録です。

言語モデル

5月にサイバーエージェントから68億パラメータの大規模な日本語言語モデルが公開されました。

www.cyberagent.co.jp

しかし、一般向けのPCでそのような大規模言語モデルを動かすことは不可能なため、パラメータ数を下げたモデルを使って何ができるか探っていきたいと思います。

環境

Google Colaboratoryで実行しました。 モデルをGoogle Driveに配置し"readme.md"に従ってモデル読み込みを行いました。

実行

ColaboratoryのランタイムをGPUに変更して実行を行います。 また、GoogleDriveへのアクセスを許可します。

ライブラリのインストール

transformers、accelerateをインストールします。

!pip install transformers accelerate

ライブラリのインポート

必要なライブラリをインポートします。

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

モデルのロード

drive_dirにモデルを含めたファイルを全て配置します。

drive_dir = "ディレクトリ"  # モデルを配置したディレクトリ

model = AutoModelForCausalLM.from_pretrained(drive_dir, device_map="auto", torch_dtype=torch.float16)
tokenizer = AutoTokenizer.from_pretrained(drive_dir)

文章の出力

input_textに文を入力すると続きが出力されます。

input_text = ""  # 入力文
inputs = tokenizer(input_text, return_tensors="pt").to(model.device)
with torch.no_grad():
    tokens = model.generate(
        **inputs,
        max_new_tokens=64,
        do_sample=True,
        temperature=0.7,
        top_p=0.9,
        repetition_penalty=1.05,
        pad_token_id=tokenizer.pad_token_id,
    )

output = tokenizer.decode(tokens[0], skip_special_tokens=True)
print(output)

出力結果

条件

small、medium、largeそれぞれで以下の入力文を与えて続きを出力しました。

  • AIによって私たちの暮らしは、
  • 日本で一番高い山は、
  • 机の上にはリンゴが3個あります。椅子の上にはバナナが2本あります。机の上にあるのは

パラメータはデフォルトの値で実行しています。

以下の出力結果はそれぞれのモデルと入力文での出力をそのままコピーしています。

small

AIによって私たちの暮らしは、

AIによって私たちの暮らしは、常に新しいものが生み出されていきます。その象徴である食やファッション、美容、インテリアなど「今」のライフスタイルに合わせて、私たちがお届けする商品が、みなさまに少しでもお役に立てるよう日々精進してまいります。 株式会社エブリディ・ラボ 〒812-0013 福岡県福岡市博多区博多駅

日本で一番高い山は、

日本で一番高い山は、なぜ? 登山ガイドが考える“山の常識”とは 「日本民医連」に聞く、いま「大」が重要にした国民生活の実態 「あなたの番じゃないですよ」 被害者に寄り添う、手紙から 「日本民医連」に聞く、いまやるべきは「新医療保険制度」

机の上にはリンゴが3個あります。椅子の上にはバナナが2本あります。机の上にあるのは

机の上にはリンゴが3個あります。椅子の上にはバナナが2本あります。机の上にあるのは、リンゴです。 リンゴは、1/4をラップで包んで冷凍します。 リンゴは、1/4をラップで包んで冷凍します。 冷蔵庫で冷やして食べます。 りんごの皮を剥いて食べるのが一般的ですが、今回はリンゴの皮を剥かずにそのまま食べてみました。

medium

AIによって私たちの暮らしは、

AIによって私たちの暮らしは、どんどん便利になり、より便利になってきています。 しかし、便利になる一方で、暮らしの中で「不都合」を感じることも増えてきているのではないでしょうか。 「不都合」とは、便利で快適な暮らしから、不便な暮らしへと変化していくこと。 そんな生活の変化に私たちは、どう向き合っていくべきなのでしょうか。 「

日本で一番高い山は、

日本で一番高い山は、どこの山? [保存版] 登山で「富士山」は登れるのか? 富士山を登る前に知っておきたいこと! [保存版] 登山で「山頂」は登れるのか? 富士山を登る前に知っておきたいこと! [保存版] 登山で「頂上」

机の上にはリンゴが3個あります。椅子の上にはバナナが2本あります。机の上にあるのは

机の上にはリンゴが3個あります。椅子の上にはバナナが2本あります。机の上にあるのは、アップルパイとコーヒーです。 リンゴは皮をむいて冷凍保存しておきます。冷凍保存すると1週間ほど保存できます。冷凍庫で凍らせたリンゴは、生でもおいしく食べられます。ただし、冷凍庫から出したばかりの状態では、リンゴの表面がカチカチに凍っています。りんごが冷えて

large

AIによって私たちの暮らしは、

AIによって私たちの暮らしは、より便利になる。しかし、そのぶん私たちは、人間から切り離されて生きていかざるを得ないのだ。 「機械化」が進めば進むほど、人間は、自らの内面に目を向けていく必要がある。 それは、機械化によって人間が失ってしまった「自然」と「人間」の本質的な部分を取り戻していく作業でもある。

日本で一番高い山は、

日本で一番高い山は、標高1,736mのアコンカグア(南米大陸最高峰)。世界第3位の高さである。 登山の難易度は高いが、その絶景は世界中の人々を魅了し続けている。また、アコンカグアは「氷河」と「火山」という2つの大自然を同時に楽しめる場所でもある。 ア

机の上にはリンゴが3個あります。椅子の上にはバナナが2本あります。机の上にあるのは

机の上にはリンゴが3個あります。椅子の上にはバナナが2本あります。机の上にあるのは、私(僕)にとって必要なものです。 しかし、バナナは1本もありません。 これは、何を意味しますか? 「自分に必要なもの」 自分が求めているものが 何なのかわからないとき あなたはどうしますか? 答えはこの記事に書いてあります。 今日もメッセージを読んでくれてありがとう! このメッセージを読んでくれた

終わりに

どのモデルも学習に使われた文章をもとに、単純に文章を続けているように感じました。 chatGPTなどと比べると、出力が劣っていることは仕方がないと思います。 一方で、個人の環境で実行できることや、高速に文章生成ができることを活かす方法を考えていきたいです。 今後はパラメータを変更して、どのような変化があるか検証していきたいと思います。

RVC-webuiを使った音声変換をMacで試してみた

はじめに

音声の特徴を別人のものに変えることができる、RVCをMacで試した時の記録です。 今回はRVC-webuiと学習済みモデルを使って音声変換を試しました。

環境について

動作環境は以下になります。

準備

pythonがインストールされていることが前提になります。

1.実行コードの準備

適当なディレクトリへ、以下のgitリポジトリからコードをクローンします。

github.com

緑色のCodeをクリックし、CloneのURLをコピーします。 ターミナルで任意のディレクトリに移動し、

git clone <コピーしたURL>

を実行します。

または、DownloadZipでコードを直接ダウンロードし展開します。

2.環境構築

ターミナルで実行コードのディレクトリに移動しwebui.shを実行します。

. ./webui.sh

または、webui.shをクリックして実行します。

シェルスクリプトの中でvenv仮装環境の構築が行われるので、pythonの環境が汚される心配はありません。

必要な学習済みモデルをダウンロードするため、ネットワークの接続状況によっては時間がかかります。

3.webUIの起動

初回のファイルダウンロードが完了するとwebUIにアクセスできるようになります。 ターミナルに以下のように出力されたら準備完了です。

  warnings.warn(
Running on local URL:  http://127.0.0.1:7860

To create a public link, set `share=True` in `launch()`.

http://127.0.0.1:7860をcommandキーを押したままクリックすることでブラウザでwebUIを開くことができます。

RVC-webUIの画面

以降は、同様の操作でwebui.shを実行することでwebUIへアクセスすることができます。

モデルの読み込み

RVCが認識できるようにモデルを配置していきます。 学習済みのモデルをRVCのファイルに以下のように配置します。

./models
        ┗/checkpoints
                ┣モデル.pth
                ┗/モデル_index
                        ┣モデル.index
                        ┗モデル.npy 

Inferenceタブの右上にあるボタンでファイル関係の再読み込みを行います。

モデルの読み込みボタン

Modelをプルダウンリストから選択します。

SourceAudioのパスを設定します。 パスは絶対パスかwebuiをカレントディレクトリとした相対パスで指定します。

モデルの設定についてはAutoを選ぶことで自動で選択されます。

最後にInferボタンをクリックすると変換処理が開始されます。

動作

5分弱のwavファイルを変換した時のリソース使用量等は以下のような結果になりました。

  • CPU使用率:60%
  • メモリ使用量:14GB
  • 変換時間:3分

MacBook本体が熱くなることや、ファンの回転数が上昇することなく変換処理が完了しました。 音声の変換だけであればMacでも十分に可能だと思います。

終わりに

モデル学習時のデータセット精度によりますが別人の声に変換されて出力されることが確認できました。 Macでも生成は十分に可能なことがわかりました。 モデルの学習をする場合は、速度や発熱が課題になると考えられますが試してみたいと思います。

また、RVC-WebUI関連のリポジトリをメンテナンスしている皆様に感謝いたします。