画像生成AIにとって一番嫌なノイズを探す -準備編-

## 概要

生成AIが発展する一方で、権利者が望まない無断のAI学習が問題になってきています
この記事では、学習用画像にノイズが入っていた場合、画像生成AIにどのような影響があるのかを調査しました

※この記事群は2024/10末時点の調査に基づいています

## 目次

1. [画像生成AIにとって一番嫌なノイズを探す -結論編-](https://qiita.com/miu200521358/items/35f19ec198ba1a1fe563)
1. [画像生成AIにとって一番嫌なノイズを探す -準備編-](https://qiita.com/miu200521358/items/379ff032eaf43f055939)
1. [画像生成AIにとって一番嫌なノイズを探す -調査編(1)-](https://qiita.com/miu200521358/items/81439ba159d836faa0f4)
1. [画像生成AIにとって一番嫌なノイズを探す -調査編(2)-](https://qiita.com/miu200521358/items/e3e7bee24aee5a6dbe9b)
1. [画像生成AIにとって一番嫌なノイズを探す -調査編(3)-](https://qiita.com/miu200521358/items/4126f24c26d61e1b9720)
1. [画像生成AIにとって一番嫌なノイズを探す -調査編(4)-](https://qiita.com/miu200521358/items/5140ce700a9481aa15e3)
1. [画像生成AIにとって一番嫌なノイズを探す -実装編-](https://qiita.com/miu200521358/items/6ffe0c8db4e3d88bc0c5)

## ノイズの定義

この記事群ではノイズを下記のように定義します

```
画像生成AIが追加学習（LoRA）を行った際に、
何もノイズを加えていない時とは異なった学習結果となるような、
学習を誤認・遅延・阻害する要素
```

## 簡単な用語説明

- プロンプト
    - 生成AIに対して「こんな風にしてほしい」と指示を出すための言葉や文章
- epoch
    - AIの学習において、すべてのデータを一通り使って学習するひと回りのサイクル。epochが進むほどに特徴が学習されていく
- 過学習
    - epochが進み、学習データに依存しすぎて新たなパターンが生成困難になっていく状態。つまり学習失敗
- LoRA（Low-Rank Adaptation）
    - AIモデルを小規模なデータで効率よく再学習（微調整）するための手法。一枚～数十枚の学習データをもとにAIモデルが特定のキャラクターなどを効率よく覚え、元の大規模なモデルを大きく変えずにそのキャラクターを再現できるようになる
- ウォーターマーク
    - 画像や動画、文書などに著作権を示すために重ねられる透かしやロゴ。不正利用を防ぐための目印となる

## 準備

添付画像はサイズを縮小していますが、追加学習および出力は `512x512` で実行しています

### 使用モデル

今回は「特定のキャラクターで様々なイラストを生成したい」という目的を仮定し、まず元となるモデルをVRoidベースで作ってみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254327/a2b289c8-1aca-d037-16be-e93b8e54674f.png)

髪型、瞳、衣装、衣装はすべてVRoidプリセットを元に調整しています

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254327/4f4766d5-c485-f316-e038-18ea9cda94bf.png)

学習用に32枚の画像を用意しました。
このキャラクターの顔を再現できるようなLoRA（追加学習モデル）の作成を目標とします

## テストプロンプト

追加学習なしでもこのキャラクターに近い顔が出力されるよう、プロンプトを定義します

### ポジティブプロンプト

```
1boy,A high-quality illustration of a gentle smiling boy, with an anime-style appearance, 
set against a bright blue sky. The boy has medium-length, 
slightly wavy brownish-green hair that frames his face, with soft, 
friendly eyes and a calm expression. His eyes are a captivating shade of blue, 
with subtle details that give him a serene, warm look. 
Detailed linework and shading capture the subtle contours of his face,
enhancing the welcoming atmosphere. The background includes clear, 
fluffy clouds scattered across the vibrant sky, enhancing the cheerful ambiance.
```

### ネガティブプロンプト

```
Blurred edges, rough linework, harsh shadows, overly intense colors, grim or serious expressions, 
dark or cloudy sky, abstract background, lack of detail in the face, distorted proportions, 
overly realistic style, dark or muted colors, overly dramatic lighting, 
crowded background elements.
```

### LoRAプロンプト

LoRA使用時にはタグ `toya` を加えて、プロンプトを入力します
（toyaはこの子の名前です。漢字だと冬也。）

```
toya,(ポジティブプロンプト)<lora:(LoRA名):1>
```

### LoRAネガティブプロンプト (ウォーターマーク除去指示なし)

```
(ネガティブプロンプト)
```

### LoRAネガティブプロンプト (ウォーターマーク除去指示あり)

ウォーターマークの除去をプロンプトに含める事もできます。

```
english text,watermark,(ネガティブプロンプト)
```

## ベースとなる学習モデル

2024/10末時点でのベーシックな環境であるStable Diffusion 1.6 系での検証を行います
LoRAのベースとなる学習モデルは [anyloraCheckpoint_bakedvaeBlessedFp16](https://civitai.com/models/23900/anylora-checkpoint) を採用しました

### 追加学習なし時の出力

![case03_01_none_01_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254327/72168c00-c8bb-57c9-c081-cda9699aac22.png)

緑系の髪ではありますが、指示した色味ではなく、睫毛などもほとんど特徴が出ない状態で画像生成されます

## 追加学習

### ノイズなし画像を学習した場合

#### epoch 8
![case03_02_original-000008_03_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254327/9de071b4-170a-b18c-7325-df7754002d2e.png)

epoch 4 の時点で既に特徴が再現されるようになり、epoch 6 で安定して顔が生成できるようになります。
epoch 8 では髪の彩度低めのオリーブ色やハイライト、睫毛のバサバサ具合など、色も形状も学習できています。
若干髪の色が濃すぎるところとかはありますが、これは元の学習モデルとの兼ね合いもありそうです。
epoch 10 以降は過学習となっていきます。

この調査では 「ノイズなし学習 epoch 8」 の結果を成功とみなし、各ノイズを付与した場合にどのように変化するかを検証します
調査編では是非この画像を横に置いて、違いをご確認ください

<details><summary>調査詳細 (epochごとの変遷)</summary>

#### epoch 2

![case03_02_original-000002_01_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254327/43d70b80-6a7a-73dd-6553-cfde95d5ccb7.png)

顔がまだ安定していません

#### epoch 4

![case03_02_original-000004_01_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254327/e324fd85-c998-8d38-be1d-93efaecb75f9.png)

少し幼く（元モデルに近く）なってきました

#### epoch 6

![case03_02_original-000006_02_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254327/d7ebb629-9f9a-95a3-fe9b-ab0287f08876.png)

#### epoch 10

![case03_02_original-000010_02_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254327/874ed604-2683-8a7f-efdf-a6cc56ab0d88.png)

どの結果も似たような顔になってしまってきています

#### epoch 12

![case03_02_original-000012_03_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254327/0e327075-6e47-ea2d-9a92-d4fbcaa2b4a7.png)

</details>

## 次章

1. [画像生成AIにとって一番嫌なノイズを探す -調査編(1)-](https://qiita.com/miu200521358/items/81439ba159d836faa0f4)

## Appendix

- https://glaze.cs.uchicago.edu/jp/what-is-glaze.html
- https://glaze.cs.uchicago.edu/jp/faq.html
- https://glaze.cs.uchicago.edu/downloads.html
- https://nightshade.cs.uchicago.edu/whatis.html
- https://note.com/emamori/n/nfe96833dd0fa
- https://tokukarakitamonode.webnode.jp/lora%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8Bglaze-emamori%E3%81%AE%E5%8A%B9%E6%9E%9C/