BasicSR 入門チュートリアル

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だけです


最後に、勉強してくれてありがとう〜

おすすめ

転載: blog.csdn.net/weixin_43800577/article/details/127338955