Super Resolution


Baseline: リンクテキスト
CODE: リンクテキスト

Super Resolution


  • 定義:低解像度画像を高解像度画像に変換する

  • 方法:高解像度画像の準備->特定の処理->低解像度画像の作成->入力->高解像度画像の復元

  • 質問:
    イ)不適合(逆)問題:多くの場合
    ii)複雑度:限られた情報を利用して大量の情報を生成する.
  • Interpolation



  • 定義:既知の2点間の特定の点を推定する値

  • 特性:Super Resolutionを実現する最も簡単な方法

  • タイプ:
  • 双線形補間:Linear補間を2 Dに拡張し、4つの値
  • を使用します.
    - Linear interpolation: 2개의 값 이용하여 새로운 픽셀 예측

    リニア補間(Linear Interpolation)


  • 2点の間に直線を描き、その直線を利用して推定します.

  • かんけいちていり

  • にじゅうせんけい補間


  • 線形補間法の2 D拡張

  • 隣接する4(2*2)点を参照
  • トリプル補間

  • 三次関数
  • を使用

    ダブルトリプル補間


  • 2 D拡張ですが原理的には違いはありません

  • 参照16(=4*4)点
  • SRCNN



  • オーダー
    二重三次補間法により
  • の低解像度画像を増幅(入力データ)
  • .
  • 3個の積層粗さ
  • 高解像度画像
  • を作成する.
    重み付け
  • は、逆伝搬
  • の高解像度画像と実際の高解像度画像との差により学習する.

  • クリーンアップ用語

  • Patch抽出と表示:低解像度画像からPatchを抽出します.

  • Non-linear mapping:patchを別の階層のpatchに非線形にマッピングします.

  • 再構築:Patchから高解像度画像を生成します.

  • 損失関数:MSE
  • SCRNN以降のモデル

  • VDSR
  • の実装はSRCNNと同様であるが、20個の畳み込み層を用い、最終的な高解像度画像を生成する前に
  • の残りの学習を用いて第1の画像を追加した.
  • RDN
  • 低解像度画像入力時には、多段積層後の各層の出力を利用する.また、出力結果生成の特徴は、矢印に従って複数回の演算を繰り返すことができる.
  • RCAN
  • ボリューム層の結果を各特徴マッピングオブジェクトとして、均一な重要性ではなく、いくつかの重要なチャネルにユーザを選択的に集中させる.

  • SRGAN(Super Resoultion + GAN)

  • Photo-Realistic:現実的な基礎.
  • loss function
  • - content loss : generator을 이용해 얻은 가짜 고해상도 이미지를 실제 고해상도 이미지와 직접 비교하는 것이 아닌, 사전 학습된 VGG모델에 입력해 특성맵에서의 차이 계산
    - adversarial loss:GAN의 loss
    
    
    - perceptual loss: content loss + adversarial loss

    SRGAN実施


  • Generator:低解像度画像を入力して高解像度画像を生成することで実現し,SKIP接続を用いて機能APIを実現する.

  • Convolutional layer:スーパーパラメータの設定について

  • k : kernel size

  • n:使用フィルタ数

  • s: stride
  • CODE
  • from tensorflow.keras import Input, Model, layers
    
    # 그림의 파란색 블록을 정의합니다.
    def gene_base_block(x):
        out = layers.Conv2D(64, 3, 1, "same")(x)
        out = layers.BatchNormalization()(out)
        out = layers.PReLU(shared_axes=[1,2])(out)
        out = layers.Conv2D(64, 3, 1, "same")(out)
        out = layers.BatchNormalization()(out)
        return layers.Add()([x, out])
    
    # 그림의 뒤쪽 연두색 블록을 정의합니다.
    def upsample_block(x):
        out = layers.Conv2D(256, 3, 1, "same")(x)
        # 그림의 PixelShuffler 라고 쓰여진 부분을 아래와 같이 구현합니다.
        out = layers.Lambda(lambda x: tf.nn.depth_to_space(x, 2))(out)
        return layers.PReLU(shared_axes=[1,2])(out)
        
    # 전체 Generator를 정의합니다.
    def get_generator(input_shape=(None, None, 3)):
        inputs = Input(input_shape)
        
        out = layers.Conv2D(64, 9, 1, "same")(inputs)
        out = residual = layers.PReLU(shared_axes=[1,2])(out)
        
        for _ in range(5):
            out = gene_base_block(out)
        
        out = layers.Conv2D(64, 3, 1, "same")(out)
        out = layers.BatchNormalization()(out)
        out = layers.Add()([residual, out])
        
        for _ in range(2):
            out = upsample_block(out)
            
        out = layers.Conv2D(3, 9, 1, "same", activation="tanh")(out)
        return Model(inputs, out)

    PSNRとSSIM


    PSNR


  • 画像中の信号が達成できる最大信号の割合.

  • ビデオ圧縮時の品質損失評価の目的

  • デシベル単位

  • PSNR値が高いほど、元の損失は小さくなる

  • peak signal noise ratioメソッドの使用

  • 上限なし
  • SSIM


  • 画像構造情報を変更しない計算

  • SSIMが高いほど、元の画像品質に近い

  • 構造化類似メソッドの使用

  • 0~1の値