細部まで補完

↑これが低解像度の画像だが、ポピュラーな超解像モデルRealESRGANでアップスケールすると
↑このように細部がスムーシングされてしまう。
そこでDiffusionで細部を補完するSeeSRを使うと↓
今までの超解像は、画像サイズは大きくなって少しはっきりした画像になっても、細部にスムーシングがかかったようになってしまっていました。元々の画像にない細部はくっきりさせるのに限界がありました。
しかし、Diffusionモデルで細部を補完しつつ超解像することができるようになりました。
SeerSRはまず画像に何が写っているか解析し、そのテキストから補完を行うようです。
セットアップ
自分はColabでやりました。ハイメモリにしないと足りなくなりました。
SeeSRのリポジトリをクローン
git clone https://github.com/cswry/SeeSR.git
cd SeeSR
requirements.txtを以下のように編集。(condaを使わないから)
diffusers==0.21.0
torch==2.0.1
pytorch_lightning
accelerate
transformers==4.25.0
xformers
loralib
fairscale
pydantic==1.10.11
gradio==3.24.0
accelerate==0.25.0
diffusers==0.21.0
torch==2.0.1
pytorch_lightning==2.1.3
transformers==4.25.0
xformers
loralib==0.1.2
fairscale==0.4.13
opencv-python==4.9.0.80
chardet==5.2.0
einops==0.7.0
scipy==1.10.1
timm==0.9.12
requirements.txtに記載されたライブラリをインストール
pip install -r requirements.txt
使用するモデルを配置するpreset/models ディレクトリを作ります。
import os
os.makedirs(os.path.join("preset", "models"), exist_ok=True)
huggingfaceからstable diffusionをダウンロードして、preset/modelsに保存します。
from diffusers import StableDiffusionPipeline, EulerDiscreteScheduler
import torch
model_id = "stabilityai/stable-diffusion-2-base"
scheduler = EulerDiscreteScheduler.from_pretrained(model_id, subfolder="scheduler")
pipe = StableDiffusionPipeline.from_pretrained(model_id, scheduler=scheduler, torch_dtype=torch.float16)
save_directory = "preset/models/stable-diffusion-2-base"
pipe.save_pretrained(save_directory)
scheduler.save_pretrained(save_directory + "/scheduler")
HuggingFaceからram_swin_large_14m.pthをダウンロードしてpreset/modelsに配置します。
wget https://huggingface.co/spaces/xinyu1205/recognize-anything/resolve/main/ram_swin_large_14m.pth
リポジトリで提供されているGoogleDriveのリンクからSeeSRフォルダとDAPE.pthを手に入れます。Colabの場合は自分のドライブにショートカットを作ってアクセスしてもいいですし、ローカルならダウンロードしてもいいです。
実行
preset/datasets/test_datasetsに超解像したい画像を入れ、実行します。
!python test_seesr.py \
--pretrained_model_path preset/models/stable-diffusion-2-base \
--prompt '' \
--seesr_model_path /content/drive/MyDrive/pretrained\ models/seesr \
--ram_ft_path /content/drive/MyDrive/pretrained\ models/DAPE.pth \
--image_path preset/datasets/test_datasets \
--output_dir preset/datasets/output \
--start_point lr \
--num_inference_steps 50 \
--guidance_scale 5.5 \
--process_size 512
一応大きい画像は小さいタイルに分割するようになっていますが、大きすぎるとメモリオーバーになります。
ということでアップスケール時に細部が消える問題に悩んでいる方はぜひ。
Diffusionのステップで割と時間がかかるので、もっと高速なAddSRというモデルもあります。
🐣
フリーランスエンジニアです。
AIについて色々記事を書いていますのでよかったらプロフィールを見てみてください。
もし以下のようなご要望をお持ちでしたらお気軽にご相談ください。
AIサービスを開発したい、ビジネスにAIを組み込んで効率化したい、AIを使ったスマホアプリを開発したい、
ARを使ったアプリケーションを作りたい、スマホアプリを作りたいけどどこに相談したらいいかわからない…
いずれも中間コストを省いたリーズナブルな価格でお請けできます。
お仕事のご相談はこちらまで
rockyshikoku@gmail.com
機械学習やAR技術を使ったアプリケーションを作っています。
機械学習/AR関連の情報を発信しています。