動かざることバグの如し

近づきたいよ 君の理想に

あすけんの女の存在しない記憶を生成AIでつくる

存在しないあすけんの女の記憶を作りたい

あすけんの女とは

健康管理アプリ「あすけん」に登場するマスコットキャラクター。AI栄養士さんらしい。アプリトップページに登場し、色々アドバイスくれる。

picture 0

余談だが「未来(みき)」さんってちゃんと名前あるらしい。今回画像収集するまで知らなかったw

やりたいこと

で、 なんとなくあすけんの女こと未来さんのチアリーダー姿を見てみたいと思ってしまった。が当然画像検索しても無い。

ならば生成AIで作るしかない

画像収集

公式サイトの画像だと解像度が低すぎて学習に使えないので、Google画像検索とツイッター検索を駆使してなんとか32枚の未来さんの画像をゲットした。

picture 1

あとはこれの背景を消してタグ付けし、学習

学習にはおなじみkohya-ss/sd-scriptsでモデルは当然animagine-xl-3.1を使用した。

config.tomlは以下

[general]
seed = 99
pretrained_model_name_or_path = "/app/models/animagine-xl-3.0.safetensors"
save_model_as = "safetensors"
xformers = true
mixed_precision = "bf16"
save_precision = "bf16"

[network]
# SDXLはテキストエンコーダーを学習せずにUnetのみ
network_train_unet_only = true
# cache_text_encoder_outputs = true
network_module = "networks.lora"

[optimizer]
optimizer_type = "AdamW"
learning_rate = 1e-4
lr_scheduler = "cosine_with_restarts"
lr_scheduler_num_cycles = 100
network_dim = 16 #この値を変化させる (2,4,8,16,32,64,128,256)
network_alpha = 1
network_args = ["conv_dim=8"]

[training]
save_every_n_epochs = 10
# max_train_steps = 100
max_train_epochs = 1000
output_dir = "/data/asuken/output/"
output_name = "asuken"

[memory]
# trueにすると削減
gradient_checkpointing = true
# falseにすると削減
persistent_data_loader_workers = false

[sample]
sample_every_n_epochs = 10
sample_sampler = "k_euler_a"
sample_prompts = "/data/asuken/sample_prompt.txt"

database.tomlは以下

[[datasets]]
resolution = 1024
batch_size = 1
bucket_no_upscale = true
enable_bucket = true
caption_extension = '.txt'
keep_tokens = 1

[[datasets.subsets]]
image_dir = '/data/asuken/train/'
num_repeats = 4
color_aug    = true
flip_aug = true
random_crop = true
shuffle_caption = true

結果

とりあえず料理させてみる

picture 3

おおー

秘書っぽい感じで

picture 2

で、チアガール

picture 4

picture 6

満足の出来にはなったので、あすけん頑張ります