RealESRGANを独自のデータでトレーニングしてカスタマイズモデルを作る

# RealESRGANが物足りない時に...

RealESRGANは低解像度の画像をアップスケールして、しかもくっきり綺麗にしてくれる強力なモデルです。拡大しても粗いピクセルにならず、なめらかな質感になるようスムージングしてくれます。

【猫の画像を４倍にアップスケール】

![pexels-alena-koval-982300のコピー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/01d84f2c-1d89-b8c1-0c63-1581914fc9d4.jpeg)
![pexels-alena-koval-982300のコピー_out (2).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/ab44c6a2-7a6c-1c5f-c33d-828423a6ae81.jpeg)

しかし、結果を細かく見てみると、スムージングのせいで細部が潰れてしまったり、くっきりしすぎてアーティファクトが生じたりすることがあります。

これを解決するために、目的にあった独自のデータセットでRealESRGANを追加トレーニングし、望む質感を得ることができます。

今回は、猫の高解像度画像データセットを追加で学習させ、より細かい毛並みを表現できるようにして見ました。

【RealESRGANの事前トレーニング済みモデル】
![スクリーンショット 2023-11-05 0.17.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/d31fdd7f-a74c-e955-5eb5-265f1ca21660.png)
【猫の画像で追加トレーニングしたRealESRGAN】
![スクリーンショット 2023-11-05 0.17.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/6044faeb-4957-0bd2-9ddf-af0b3dcb152b.png)

毛並みがよりくっきりしている。

# RealESRGANをインストール

```shell
git clone https://github.com/xinntao/Real-ESRGAN.git
cd Real-ESRGAN
pip install basicsr
pip install facexlib
pip install gfpgan
pip install -r requirements.txt
python setup.py develop
```

# データを準備する

### １、画像を集める
超解像の結果として欲しい解像度を持った画像を集め、一つのディレクトリにまとめます。
今回は猫の画像を集めました。

![スクリーンショット 2023-11-05 0.21.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/1f23dd24-fa3c-2efa-20e1-0a662cfaf0bb.png)


画像サイズはバラバラで大丈夫です。
以下のようなフォルダ構成にします。

```
RealESRGAN
 |__datasets
     |__own_dataset_root
         |__own_images # your custom images
             |__image0.jpg
             |__image1.jpg
             |__...
         
         
```

### ２、解像度をダウンしたデータを作る

スクリプトで、上記画像を0.75倍、0.５倍、0.33倍した低解像度データを作ります。

```shell
python scripts/generate_multiscale_DF2K.py --input datasets/own_dataset_root/own_images --output datasets/own_dataset_root/own_images_multiscale
```

以下を独自のものに指定します。

--input ：元画像（集めた高解像度画像）のディレクトリ
--output　低解像度画像が保存するディレクトリ。


### ３、メタ情報テキストファイルを作る

スクリプトで、画像ファイルパス一覧が記載されたテキストファイルを作ります。

```shell
python scripts/generate_meta_info.py --input datasets/own_dataset_root/own_images datasets/own_dataset_root/own_images_multiscale --root datasets/own_dataset_root datasets/own_dataset_root --meta_info datasets/own_dataset_root/meta_info/meta_info_own_imagesmultiscale.txt
```

以下を指定します。
--input :元画像のディレクトリと低解像度にした画像のディレクトリを連続して指定します。
--root :inputのディレクトリが存在する親ディレクトリのパスを指定します。
--meta_info メタ情報テキストファイルが保存するパス。

メタ情報テキストファイルは以下のように入力画像パスが一覧で記載されます。

```text
own_images/image0.jpg
own_images/image1.jpg
...
own_images_multiscale/image0.jpg
own_images_multiscale/image1.jpg
...
```

# 事前トレーニングモデルのダウンロード

```shell
wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.1.0/RealESRGAN_x4plus.pth -P experiments/pretrained_models
wget https://github.com/xinntao/Real-ESRGAN/releases/download/v0.2.2.3/RealESRGAN_x4plus_netD.pth -P experiments/pretrained_models
```

experiments/pretrained_modelsに generatorとdiscriminatorの事前トレーニング済みモデルが保存されます。

# トレーニング構成ファイルを一部書き換える

options/finetune_realesrgan_x4plus.ymlを一部書き換えます。

```yaml
datasets:
  train:
    name: own_dataset
    type: RealESRGANDataset
    dataroot_gt: datasets/own_dataset_root
    meta_info: datasets/own_dataset_root/meta_info/meta_info_GIRLmultiscale.txt
```

datasets/trainの以下の項目を書き換えます。

name: 独自の名前をつける
dataroot_gt: input画像のディレクトリが存在する親ディレクトリのパス
meta_info: メタ情報テキストファイルのパス

```yaml
path:
  # use the pre-trained Real-ESRNet model
  pretrain_network_g: experiments/pretrained_models/RealESRNet_x4plus.pth
```

pretrain_network_g:　を experiments/pretrained_models/RealESRGAN_x4plus.pthに書き換える。

```yaml
logger:
  print_freq: 100
  save_checkpoint_freq: !!float 5e3
```

save_checkpoint_freq: トレーニング結果のモデルチェックポイントを何iterごとに保存するかを指定する。（100とか1000とかの数字で指定する）


# トレーニング

トレーニングスクリプトを実行します。
以下を指定します。

```shell
python realesrgan/train.py -opt options/finetune_realesrgan_x4plus.yml --auto_resume
```

experiments/finetune_RealESRGANx4plus_400kにトレーニング結果のモデルチェックポイントファイルが保存されます。

# トレーニングした独自モデルでの推論

```shell
python inference_realesrgan.py -n RealESRGAN_x4plus -i inputs --outscale 4 --model_path experiments/finetune_RealESRGANx4plus_400k/models/net_g_160.pth
```

以下を指定します。
--inputs :推論の入力画像ディレクトリ
---model_path :トレーニングで生成されたチェックポイントファイルのパス


🐣
****
フリーランスエンジニアです。
AIについて色々記事を書いていますのでよかったらプロフィールを見てみてください。

もし以下のようなご要望をお持ちでしたらお気軽にご相談ください。
AIサービスを開発したい、ビジネスにAIを組み込んで効率化したい、AIを使ったスマホアプリを開発したい、
ARを使ったアプリケーションを作りたい、スマホアプリを作りたいけどどこに相談したらいいかわからない…

いずれも中間コストを省いたリーズナブルな価格でお請けできます。

お仕事のご相談はこちらまで
rockyshikoku@gmail.com

機械学習やAR技術を使ったアプリケーションを作っています。
機械学習／AR関連の情報を発信しています。

[Twitter](https://twitter.com/JackdeS11)
[Medium](https://medium.com/@rockyshikoku)
[GitHub](https://github.com/john-rocky)