BasicSR 入門チュートリアル
1. 設置環境
他のインストール環境にはすでにpytorchがあるので、新規環境作成時に環境を直接コピーすると良いでしょう
//复制环境
conda create --name my-basicsr --clone mmediting
クローンプロジェクト
git clone https://github.com/XPixelGroup/BasicSR.git
依存関係をインストールする
cd BasicSR
pip install -r requirements.txt
BasicSRをBasicSRのルートディレクトリにインストールします。
python setup.py develop
BasicSR が正常にインストールされていることを確認します
import basicsr
ローカル クローンのインストールが成功したら、pip list コマンドを使用して BasicSR パスを表示します。
pip list
2. データセットを準備する
一般的に使用される画像超解像度データセットは次のとおりです。
名前 | データセット | データの説明 | ダウンロード |
---|---|---|---|
2K解像度 | DIV2K | NTIRE17で提案(800 のトレーニングと 100 の検証) | 公式ウェブサイト |
古典的な SR テスト | セット5 | Set5 テスト データセット | Google ドライブ/百度ドライブ |
古典的な SR テスト | セット14 | Set14 テスト データセット | Google ドライブ/百度ドライブ |
DIV2K ダウンロードアドレス: https://data.vision.ee.ethz.ch/cvl/DIV2K/
Set5 のダウンロード リンク: https://drive.google.com/drive/folders/1B3DJGQKB6eNdwuQIhdskA64qUuVKLZ9u
Set14 のダウンロード アドレス: https://drive.google.com/drive/folders/1B3DJGQKB6eNdwuQIhdskA64qUuVKLZ9u
DIV2K データセットは 2K 解像度 (例: 2048×1080) であり、トレーニング時にそれほど大きくする必要がないことが多いため (通常は 128×128 または 192×192 トレーニング パッチ)、最初に 2K を配置できます。画像はオーバーラップのある 480 × 480 のサブ画像ブロックに切り取られ、データローダーは 480 × 480 のサブ画像ブロックから 128 × 128 または 192 × 192 のトレーニング パッチをランダムに切り取ります。スクリプト extract_subimages.py を実行します。
cd BasicSR
python scripts/data_preparation/extract_subimages.py
LMDB を使用する必要がある場合は、LMDB を作成する必要があります。これで、データはスクリプトを実行する準備が整います。
python scripts/data_preparation/create_lmdb.py --dataset div2k
データセットのディレクトリ構造は次のとおりです
3. 設定ファイルを変更する
options/train/SRResNet_SRGAN/my_train_MSRResNet_x4.yml
次の内容を含む新しいトレーニング構成ファイルを作成します。
# Modified SRResNet w/o BN from:
# Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network
# ----------- Commands for running
# ----------- Single GPU with auto_resume
# PYTHONPATH="./:${PYTHONPATH}" CUDA_VISIBLE_DEVICES=0 python basicsr/train.py -opt options/train/SRResNet_SRGAN/train_MSRResNet_x4.yml --auto_resume
# general settings
name: 001_MSRResNet_x4_f64b16_DIV2K_10k_B16G1_wandb_myfirst
model_type: SRModel
scale: 4
num_gpu: 1 # set num_gpu: 0 for cpu mode
manual_seed: 0
# dataset and data loader settings
datasets:
train:
name: DIV2K
type: PairedImageDataset
# dataroot_gt: datasets/DF2K/DIV2K_train_HR_sub
# dataroot_lq: datasets/DF2K/DIV2K_train_LR_bicubic_X4_sub
# meta_info_file: basicsr/data/meta_info/meta_info_DIV2K800sub_GT.txt
# dataroot_gt: datasets/DIV2K/DIV2K_train_HR_sub
# dataroot_lq: datasets/DIV2K/DIV2K_train_LR_bicubic_X4_sub
# meta_info_file: basicsr/data/meta_info/meta_info_DIV2K800sub_GT.txt
# (for lmdb)
dataroot_gt: datasets/DIV2K/DIV2K_train_HR_sub.lmdb
dataroot_lq: datasets/DIV2K/DIV2K_train_LR_bicubic_X4_sub.lmdb
filename_tmpl: '{}'
io_backend:
# type: disk
# (for lmdb)
type: lmdb
gt_size: 128
use_hflip: true
use_rot: true
# data loader
num_worker_per_gpu: 6
batch_size_per_gpu: 16
dataset_enlarge_ratio: 100
prefetch_mode: ~
val:
name: Set5
type: PairedImageDataset
dataroot_gt: datasets/Set5/GTmod12
dataroot_lq: datasets/Set5/LRbicx4
io_backend:
type: disk
val_2:
name: Set14
type: PairedImageDataset
dataroot_gt: datasets/Set14/GTmod12
dataroot_lq: datasets/Set14/LRbicx4
io_backend:
type: disk
# network structures
network_g:
type: MSRResNet
num_in_ch: 3
num_out_ch: 3
num_feat: 64
num_block: 16
upscale: 4
# path
path:
pretrain_network_g: ~
param_key_g: params
strict_load_g: true
resume_state: ~
# training settings
train:
ema_decay: 0.999
optim_g:
type: Adam
lr: !!float 2e-4
weight_decay: 0
betas: [0.9, 0.99]
scheduler:
type: CosineAnnealingRestartLR
periods: [250000, 250000, 250000, 250000]
restart_weights: [1, 1, 1, 1]
eta_min: !!float 1e-7
# total_iter: 1000000
total_iter: 10000
warmup_iter: -1 # no warm up
# losses
pixel_opt:
type: L1Loss
loss_weight: 1.0
reduction: mean
# validation settings
val:
val_freq: !!float 5e3
save_img: false
metrics:
psnr: # metric name, can be arbitrary
type: calculate_psnr
crop_border: 4
test_y_channel: false
better: higher # the higher, the better. Default: higher
niqe:
type: calculate_niqe
crop_border: 4
better: lower # the lower, the better
# logging settings
logger:
print_freq: 100
save_checkpoint_freq: !!float 5e3
use_tb_logger: true
wandb:
project: ~
resume_id: ~
# dist training settings
dist_params:
backend: nccl
port: 29500
トレーニングを始めることができます
python basicsr/train.py -opt options/train/SRResNet_SRGAN/my_train_MSRResNet_x4.yml
トレーニングが完了すると、結果は結果フォルダーの下の001_MSRResNet_x4_f64b16_DIV2K_10k_B16G1_wandb_myfirst
フォルダーに保存されます。
options/test/SRResNet_SRGAN/my_test_MSRResNet_x4.yml
次の内容を含む新しいテスト構成ファイルを作成します。
# ----------- Commands for running
# ----------- Single GPU
# PYTHONPATH="./:${PYTHONPATH}" CUDA_VISIBLE_DEVICES=0 python basicsr/test.py -opt options/test/SRResNet_SRGAN/test_MSRResNet_x4.yml
# general settings
name: 001_MSRResNet_x4_f64b16_DIV2K_10k_B16G1_wandb_myfirst
model_type: SRModel
scale: 4
num_gpu: 1 # set num_gpu: 0 for cpu mode
manual_seed: 0
# test dataset settings
datasets:
test_1: # the 1st test dataset
name: Set5
type: PairedImageDataset
dataroot_gt: datasets/Set5/GTmod12
dataroot_lq: datasets/Set5/LRbicx4
io_backend:
type: disk
test_2: # the 2nd test dataset
name: Set14
type: PairedImageDataset
dataroot_gt: datasets/Set14/GTmod12
dataroot_lq: datasets/Set14/LRbicx4
io_backend:
type: disk
test_3: # the 3rd test dataset
name: DIV2K100
type: PairedImageDataset
dataroot_gt: datasets/DIV2K/DIV2K_valid_HR
dataroot_lq: datasets/DIV2K/DIV2K_valid_LR_bicubic/X4
filename_tmpl: '{}x4'
io_backend:
type: disk
# network structures
network_g:
type: MSRResNet
num_in_ch: 3
num_out_ch: 3
num_feat: 64
num_block: 16
upscale: 4
# path
path:
pretrain_network_g: experiments/001_MSRResNet_x4_f64b16_DIV2K_10k_B16G1_wandb_myfirst/models/net_g_10000.pth
param_key_g: params
strict_load_g: true
# validation settings
val:
save_img: true
suffix: ~ # add suffix to saved images, if None, use exp name
metrics:
psnr: # metric name, can be arbitrary
type: calculate_psnr
crop_border: 4
test_y_channel: false
better: higher # the higher, the better. Default: higher
ssim:
type: calculate_ssim
crop_border: 4
test_y_channel: false
better: higher
テストが完了すると、結果は結果フォルダーの下の001_MSRResNet_x4_f64b16_DIV2K_10k_B16G1_wandb_myfirst
フォルダーに保存されます。
4. Tensorboard によるトレーニングプロセスの視覚化
トレーニング用に yml 設定ファイルで開くようにテンソルボードを設定する
# logging settings
logger:
print_freq: 100
save_checkpoint_freq: !!float 5e3
use_tb_logger: true # 设置为true
wandb:
project: ~
resume_id: ~
コマンドラインに次のコマンドを入力して、サーバーのブラウザで表示します。
tensorboard --logdir tb_logger --port 5500 --bind_all
Tensorboard はこのマシン上で簡単に使用できますが、サーバーを使用する場合はセットアップが必要です。
Windows システムにXshellをインストールし、[ファイル] -> [プロパティ] -> [ssh] -> [トンネル] -> [追加] に移動し、「local」と入力し、ソース ホスト (このマシンを意味します) として 127.0.0.1 を入力し、ポート (12345 など) を設定します。ターゲット ホストをサーバーとして設定します。ターゲット ポートは通常 5500 ですが、5500 が占有されている場合は、他のポートに変更できます。
ローカルブラウザに入力する127.0.0.1:12345
だけです
最後に、勉強してくれてありがとう〜