前回、Stable Diffusionをdanbooruデータセットを使用して追加学習することを試した。
今回は、自分でデータセットを作成して追加学習することを試す。
データセットには、画像とキャプションが揃っている必要があり、キャプションがない場合はCLIPで疑似ラベルを生成するなどする必要がある。
今回は、画像に対するキャプションがある「いらすとや」をスクレイピングして、データセットを作成した。
データセット作成
「いらすとや」から全ての画像とキャプションを取得した。
画像に複数バリエーションがある場合は、1つ目の画像のみを使用した。
キャプションは、日本語になっているため、Googleスレッドシートで、「=GOOGLETRANSLATE(XX,"ja","en")」を使って英語に変換を行った。
合計で、22891枚の画像とキャプションのセットが用意できた。
画像サイズ変換
画像は、512x512に変換した。
キャプションの加工
キャプションには、末尾に「, irasutoya」を付与して、「いらすとや」の画像であることを説明に加えることにした。
学習
前回、学習率をデフォルトとして追加学習のスタイルが反映され過ぎたため、学習率は5.0e-6とした。
結果
各エポックで訓練データのキャプションから生成された画像は、以下の通り。
Stable Diffusionが5エポック学習されているため、6エポック目から開始している。
6エポック目
また、写真ぽさがある。
7エポック目
絵画風になってきた。
8エポック目
人物がいらすとやぽくなってきた。
9エポック目
だいぶ特徴が表れている。
10エポック目
このあたりでほぼ特徴を学習していそうである。
19エポック目
19エポック目では、人物の特徴はほぼ学習できている。
画像生成
9エポック目と19エポック目のモデルを使用して画像生成して、スタイルを学習できているか確認する。
猫の画像を生成した結果は以下の通り。
プロンプト:「cat」
9エポック目
プロンプトに「, irasutoya」を付与しなくても、ほぼ「いらすとや」の画風になっている。
「, irasutoya」を付けた場合は、以下の通り。
ほとんど変わっていないように見える。
追加学習する場合、学習時に「, irasutoya」を付与するのは意味がなさそうである。
19エポック目
一番左の画像は、本物と区別がつかないくらいになっている。
次に、評価用データにあるキャプションで試してみた。
プロンプト:「It is an illustration of a girl playing with Rubikube(ルービックキューブで遊んでいる女の子のイラストです)」
19エポック目
やはりルービックキューブは難しいようである。
次に、比較的分かりやすそうなキャプションで試してみた。
プロンプト:「Illustration of a boy who is happy to raise his hands and say banzai(両手を挙げて万歳をして喜んでいる男の子のイラスト)」
9エポック目
19エポック目
手が増え過ぎている。
数の制約の概念は苦手なようである。
次に、抽象的で難しめのプロンプトで試してみた。
プロンプト:「Illustration of a human wearing a collar and being pulled by a string by an artificial intelligence(首輪をつけて人工知能に紐で引っ張られている人間のイラスト)」
9エポック目
19エポック目
少し解釈が難しかったようである。