3
8

細部まで補完

↑これが低解像度の画像だが、ポピュラーな超解像モデルRealESRGANでアップスケールすると

↑このように細部がスムーシングされてしまう。
そこでDiffusionで細部を補完するSeeSRを使うと↓

今までの超解像は、画像サイズは大きくなって少しはっきりした画像になっても、細部にスムーシングがかかったようになってしまっていました。元々の画像にない細部はくっきりさせるのに限界がありました。
しかし、Diffusionモデルで細部を補完しつつ超解像することができるようになりました。
SeerSRはまず画像に何が写っているか解析し、そのテキストから補完を行うようです。

セットアップ

自分はColabでやりました。ハイメモリにしないと足りなくなりました。

SeeSRのリポジトリをクローン

git clone https://github.com/cswry/SeeSR.git
cd SeeSR

requirements.txtを以下のように編集。(condaを使わないから)

requirements.txt
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関連の情報を発信しています。

X
Medium
GitHub

3
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
8