
kaggle に浮世絵のデータセット The Metropolitan Museum of Art Ukiyoe Dataset にある浮世絵画像を使って Stable Diffusion で LoRA を試しました。
トレーニング素材やコードはこちら:
手順概要をメモとして残します。
完成したトレーニング用データのベースはこれ:

これは基本の画像2枚(冒頭の浮世絵データセットから取得)から Nano Banana を使って生成した画像です。
2枚の画像をアップロードして、次のプロンプトで試しに 16枚の画像セットを生成してもらいました:
浮世絵の美人画を生成するための LoRAデータセットを作成したいです。
この参照画像を元に「ポーズや表情、角度などにバリエーション」を持たせた画像を16セットほど生成してください。
こんな感じになった:

正面を向いた画像しかない。これでは(おそらく)後ろ向きの画像を上手に生成できるように モデルをトレーニングできないと思う。 そこで追加プロンプトで:
正面と背面の画像をさらに16セット作成してください
このようにして合計32枚のトレーニング用画像セットを用意しました。
Gemini が生成した画像は一枚の画像の中に32の画像がまとめて入っている。 これ分割してそれぞれを 0001.png, 0002.png, 0003.png, ... 0032.png のファイル名で保存。
ここでは面倒ですが32枚の PNG 画像を手動で用意しました。 画像サイズはピッタリ 512 x 512 にする必要があるのと、 なるべく元の画像から画像品質を維持したかったので、 それぞれの画像を InDesign 文書として用意して(0001.indd, 0002.indd, 0003.indd, ... 0032.indd) そこから次のスクリプトでいったん PDF に変換しました。
参考まで、使ったスクリプトをここに残しておきます。
// indd2pdf.jsx
var findPdfPreset = function(aPartOfPresetName){
var regex = new RegExp(aPartOfPresetName);
var myPresets = app.pdfExportPresets.everyItem().name;
for(var i=0; i<myPresets.length; i++){
if( myPresets[i].match(regex) ){
return myPresets[i];
}
}
return null;
};
var proc = function(inddFile, exportDir){
var doc = app.open( inddFile );
var path = doc.filePath;
var fullName = doc.fullName;
var fileName = (""+fullName).substr( (""+path).length+1);
var savePdfFile = File(exportDir + "/" + fileName + ".pdf");
var pdfPreset = findPdfPreset('X-1a');
if( pdfPreset!=null ){
doc.exportFile(ExportFormat.pdfType, savePdfFile, false, pdfPreset);
}
doc.close(SaveOptions.no);
};
// 環境に合わせて修正
var baseDir = "/path/to/project-dir";
var inputDir = baseDir + "/indd";
var outputDir = baseDir + "/Ws/pdf";
var fld = Folder(inputDir);
var inddFiles = fld.getFiles("*.indd");
for (var i=0; i < inddFiles.length; i++) {
var inddFile = inddFiles[i];
proc(inddFile, exportDir)
}
InDesign では PDF 保存ではなく PNG 保存もできるといえばできるのですが。。。
PDF から PNG へは ImageMagick の convert コマンドをつかって変換:
convert input.pdf -resize 512x512 output.png
このようにして用意した 0001.png .. 0032.png に対して次のプロンプトで LLM を使ってそれぞれの画像に対応するキャプションを生成しました。
# 依頼事項
./imgs/*.png 画像があります
それらにキャプションをつけてください
結果は ./captions/ 以下に保存
0001.png に対しては 0001.txt とし、0002.png に対しては 0002.txt ... 以降同様に。
## キャプションの付け方
フォーマット:
```
ukiyoe_style, [被写体], [動作・状態], [背景・場面], [構図・色味の特徴]
```
例:
```
ukiyoe_style, a kabuki actor in red robe, holding a sword, dramatic pose, dark background with patterns
ukiyoe_style, a woman in kimono, combing her hair, sitting indoors, soft colors, vertical composition
ukiyoe_style, mount fuji at sunrise, fishing boats in foreground, blue and orange sky, landscape
ukiyoe_style, two warriors fighting, swords clashing, stylized waves below, vivid red and blue
```
注意点:
- 被写体は具体的に。「person」より「kabuki actor」「young woman」「samurai」
- 「Hokusai」「Edo period」など固有名詞は避ける。
ここまで作成したトレーニング素材(png 画像と そのキャプションデータ)を dataset フォルダ以下に配置します。 詳しくは こちら https://github.com/mindboard/ukiyo-e-lora を参照。
あとは train_lora.py を実行します。(詳細は割愛)
image 2 image ではなく image + text 2 image で生成します。
線画 + テキスト(プロンプト)→ 浮世絵風画像
こちら https://github.com/mindboard/ukiyo-e-lora の generate_image.py を参照。
使用したプロンプトはこれ:
ukiyoe_style, a beautiful girl in kimono standing under cherry blossoms,
majestic mount fuji in the background, spring landscape, masterpiece
ukiyoe_style はトレーニングに使用したスタイルを指定するためのキーワードです。

この(自分が描いたテキトーな)ポンチ絵が浮世絵に!
ここまでの内容概要をまとめた: stable-diffusion-lora-ukiyoe.pdf
トレーニング時間もそれほどはかかりません。 これで Stable Diffiusion を自分が期待するスタイルや人物を維持した画像生成モデルに変えることができるのはすごい。 ただし・・・2026年の現在は Gemini (Nano Bnana) がある時代なので、 この程度であればわざわざ LoRA を使わなくても、維持したい人物(とかキャラクター)を最初に見せて、それを使った画像生成を Nano Banana に頼むだけで済む話なのであろう。
もちろん、たとえばどんな画像も浮世絵風に変換します、というサービスをつくるのであれば、LoRA は意味のある技術だと思うけど。 現在の LoRA の使い道のひとつは、プロフェッショナル用のようです。 つまり、 プロのモデル(とか特定の商品)を学習させた LoRA を用意しておくことで、その LoRA を使えば一貫してそのモデル(またはその特定商品)を結果の生成画像に含めることができる、という使い方です。