【画像生成AI】GPU無しのWindowsPCでStableDiffusionを動作させる②

前回の記事では、一般的なWindowsPCでStableDiffusionを簡単に動作させる方法を紹介しました。
本記事ではモデルを変えることで画像生成のクオリティを大幅に引き上げる方法を紹介します。

1.モデルとは

画像生成では、事前に大量の画像で学習された「モデル」を使用します。
例えば、油絵風のイラストを大量に学習したモデルでは油絵風の画像を生成するのが得意になり、
美しい女性を大量に学習したモデルでは美しい女性を生成するのが得意になります。
モデルは多種多様なものがリリースされているため上手に活用することで高いクオリティの画像が生成できます。

2.モデルのダウンロード

試しに「yayoi_mix」というリアル系AI美女の生成に特化したモデルを設定してみます。
リンクで「yayoi_mix」と検索してモデルのページに遷移します。
右側にあるDownloadをクリックするとモデルのファイルがダウンロードできます。
※サイズが大きいためダウンロード完了には時間がかかります。

3.Stable Diffusion Web UI にモデル追加

ダウンロードが完了したら前回の記事で作成した[stable-diffusion-webui]フォルダ内の
[stable-diffusion-webui]>[models]>[Stable-diffusion]のフォルダに、ダウンロードしたモデルファイルを格納します。
これで追加は完了です。

4.Stable Diffusion Web UI で画像生成

前回の記事同様に[webui-user.bat]のファイルをダブルクリックして起動します。
左上の「Stable Diffusion checkpoint」をクリックしてyayoi_mixと名前のついたモデルを選択します。
あとは自由に画像生成するだけです。大幅にクオリティがアップした画像を生成できます。

試しに下記のようなプロンプトで生成してみましょう。
Positive prompt

8k, RAW photo, best quality, masterpiece, realistic, photo-realistic, clear, professional lighting, beautiful face, best quality,ultra high res
BREAK
realistic Japanese cute,  girl, 18 years old,
short hair, smile,

Negative prompt

EasyNegative, deformed mutated disfigured, missing arms, 4 fingers, 6 fingers,
extra_arms , mutated hands, bad anatomy, disconnected limbs, low quality, worst quality, out of focus, ugly,
error, blurry, bokeh, Shoulder bag, bag, multiple arms, nsfw.

5.【おまけ】Stable Diffusion Web UI でVAEを設定

下記に従ってVAEを同様に設定しておくと画質が向上するようです。
【比較検証】Stable Diffusionの『VAE』とは?使い方やおすすめVAEも紹介 | romptn Magazine

まとめ

Stable Diffusionでモデルを変えることで画像生成のクオリティを大幅に引き上げる方法を紹介しました。
今回は「yayoi_mix」というモデルを試してみましたが是非いろいろなモデルで遊んでみてください。

【画像生成AI】GPU無しのWindowsPCでStableDiffusionを動作させる

話題の画像生成AI。StableDiffusionではこんな写真が簡単に作れます。

基本的にGPU非搭載のPCでは処理時間がかかるため使用が推奨されていません。
ただし、少し設定を変えればGPU無しでも使ってみることは可能です。
本記事ではGPU非搭載PCへのStableDiffusionの導入方法を解説します。

1.Pythonをインストール

下記ページからPythonをインストールします。
Windows installer」を選択してダウンロードしてください。64bitか32bitかはPCによります。
ダウンロードができたらexeを実行して[Add Python 3.10 to PATH]にチェックを入れて、[Install Now]をクリックします。
Setup was successfulが表示されたら、Pythonのインストールが完了です。
www.python.org

2.Gitのインストール

下記ページからGitをインストールします。
デフォルトの設定のままインストールすれば大丈夫です。
git-scm.com

3.Stable Diffusion Web UI(AUTOMATIC1111)のインストール

Stable Diffusion WebUIのデータを格納する任意のフォルダを開きます。
開いたフォルダ内で、右クリックして、[Open Git Bash here]をクリックしてターミナルを開きます。
開いたターミナルに下記コマンドを入力し、”Enter”を押します。

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git

ダウンロードが完了したら、[stable-diffusion-webui]のフォルダが作成されていることが確認できます。

4.GPU設定を無効化

[stable-diffusion-webui]のフォルダの下の方に[webui-user.bat]のファイルがありますので、
これを右クリックして、メモ帳等で開きます。
「set COMMANDLINE_ARGS=」の部分を下記のように書き換えて保存します。

set COMMANDLINE_ARGS=--skip-torch-cuda-test --upcast-sampling --no-half-vae --use-cpu interrogate --precision full --no-half

4.Stable Diffusion Web UIの起動

[webui-user.bat]のファイルをダブルクリックして、インストールを開始します。
インストールが完了すると、ターミナルに[Running on local URL: http://127.0.0.1:7860]が表示され、Stable Diffusion WebUIが自動的に起動します。
(初回は起動に結構時間がかかります。)
起動したら試しに[Prompt]に”cat wearing hat”と入力して、[Gerenate]をクリックすると、「帽子をかぶった猫」の画像が出力されます。

5.Stable Diffusion Web UIの終了

Stable Diffusion WebUIを終了するには、ターミナル上で[Control]+[C]キーを押して、”バッチジョブを終了しますか”と質問されますので、[Y]キーを入力して[Enter]キーを押します。
また起動するには4の手順を実施してください。

まとめ

GPU非搭載のPCでStable Diffusionを使用する方法を紹介しました。
ただし、リアルな画像生成には「モデル(checkpoint)」を設定する必要があります。
次回の記事で、モデルの設定方法を紹介します。

PythonでMP4動画から一定間隔で画像を切り出す

MP4動画から一定間隔で画像を切り出すには、いくつかのステップを踏む必要があります。
以下に、Pythonを使用してこのタスクを実行する方法を示します。

1.必要なライブラリをインストール

pip install opencv-python

2.MP4動画から画像切り出し

import cv2

def extract_images(video_path, output_path, interval):
    vidcap = cv2.VideoCapture(video_path)
    success, image = vidcap.read()
    count = 0
    while success:
        if count % interval == 0:
            cv2.imwrite(output_path + "/frame%d.jpg" % count, image)  # 画像を保存
        success, image = vidcap.read()
        count += 1
    vidcap.release()

# 使用例
video_path = "path/to/video.mp4"  # 変換したい動画のパス
output_path = "path/to/output"    # 切り出した画像を保存するディレクトリのパス
interval = 10                     # 切り出す間隔(例:10フレームごとに切り出す)

extract_images(video_path, output_path, interval)

上記のコードでは、extract_images関数を定義しています。
この関数は、指定した動画からフレームを読み取り、指定した間隔で画像を切り出し、指定した出力パスに保存します。
video_pathは変換したい動画のパス、output_pathは切り出した画像を保存するディレクトリのパス、intervalは切り出す間隔(例えば、10フレームごとに切り出すなど)を指定します。

注意: 上記のコードはPython 3で動作します。また、OpenCVライブラリを使用しているため、対応するバージョンがインストールされていることを確認してください。

デジカメとWebカメラの画像の差を軽減して深層学習に使う

Albumentationsのコード例

ここでは、高解像度の画像と低画質の画像の差異を考慮して、より微妙な色味の調整とボケ具合の調整を行うように設定しています。

import albumentations as A

# ホワイトバランスの調整
# ガンマ補正で画像の明るさを調整する
# 色相、彩度、明度を微調整する
color_adjustments = A.Compose([
    A.OneOf([
        A.CLAHE(clip_limit=(1,4), tile_grid_size=(4,4)),
        A.RandomBrightnessContrast(brightness_limit=0.1, contrast_limit=0.1),
    ], p=1.0),
    A.Gamma(),
    A.HueSaturationValue(hue_shift_limit=5, sat_shift_limit=5, val_shift_limit=5),
])

# ボケ具合の調整
# シャープネスを調整する
# ノイズを加える
blur_adjustments = A.Compose([
    A.OneOf([
        A.IAASharpen(alpha=(0.2, 0.5), lightness=(0.5, 1.0)),
        A.Blur(blur_limit=3),
    ], p=1.0),
    A.OneOf([
        A.GaussNoise(var_limit=(10.0, 50.0)),
        A.IAAAdditiveGaussianNoise(loc=0, scale=(0.01*255, 0.05*255)),
    ], p=1.0),
])

# データ拡張
# 画像のスケール変更
# 画像のランダムな回転、トリミング、フリップ、変形
# 色味の微調整
# ボケ具合の微調整
transformations = A.Compose([
    A.Resize(416, 416),
    A.OneOf([
        A.Rotate(limit=10, border_mode=A.BORDER_CONSTANT),
        A.RandomSizedCrop(min_max_height=(300, 416), height=416, width=416, p=0.5),
    ], p=0.5),
    A.HorizontalFlip(p=0.5),
    color_adjustments,
    blur_adjustments,
])

ArUcoマーカー座標計算で参考になりそうなサイト

 

キャリブレーション

pythonでカメラ行列と歪みパラメータの取得 - Qiita

 

ちさとのblog : OpenCV+AruCoでカメラのキャリブレーション

 

■マーカー計算

ちさとのblog : OpenCV+AruCoでマーカーの姿勢推定

【VisualStudio】OpenCvSharpでarucoマーカーを使ってみる

おまじない

using OpenCvSharp;
using OpenCvSharp.Aruco;

画像を表示する

            // 画像の読み込み
            using (Mat mat = new Mat(@"C:\画像パス"))
            {
                // 画像をウィンドウに表示
                Cv2.ImShow("sample_show", mat);
            }

画像をグレースケールで表示&保存する

            // 画像の読み込み
            using (Mat mat = new Mat(@"C:\画像パス"))
            using (Mat matGray = mat.CvtColor(ColorConversionCodes.BGR2GRAY))
            {
                // 画像をウィンドウに表示
                Cv2.ImShow("grayscale_show", matGray);
                // 画像の保存
                Cv2.ImWrite(@"C:\保存パス", matGray);
            }

Arucoマーカーを生成する

            //4x4のマーカー
            using (var markerImage = new Mat())
            using (var dict = CvAruco.GetPredefinedDictionary(PredefinedDictionaryName.Dict6X6_250))
            {
                CvAruco.DrawMarker(dict, 0, 150, markerImage, 1);
                Cv2.ImShow("sample_show", markerImage);
            }

【Python】Ubuntu18.04+pipenvで環境構築する

WSL2を使えるようにしておく
Ubuntu18.04をインストールしてユーザー名とパスワードを設定する
Ubuntu18.04の更新

sudo apt update
sudo apt upgrade

pipのインストール

sudo apt install python3-pip

pipenvのインストール

sudo pip3 install pipenv

作業ディレクトリの作成

mkdir -p workspace/python-test
cd workspace/python-test

pipenvで環境を構築

pipenv install

構築した仮想環境に入る

pipenv shell

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

pipenv install [package]