ISR は RDN 画像拡張を実装します

画像補正

コンピューター ビジョンと画像処理に関しては、解像度が重要な概念です。画像の解像度によって、観察できる詳細と品質が決まります。ただし、センサーの制限、画像の転送とストレージの問題など、さまざまな理由が考えられる低解像度の画像に直面することがあります。

深層学習の分野では、一般的に低解像度の画像は出発点として適していません。深層学習モデルでは、多くの場合、正確な識別、分類、分析のために、より詳細な情報が必要になります。このため、超解像技術が非常に重要になっています。

この記事では、超解像度テクノロジーの応用と、深層学習トレーニングとモデル推論におけるその潜在的な利点について探っていきます。低解像度の画像を高解像度の画像に変換する方法と、この変換がさまざまなコンピューター ビジョン タスクに与える影響について学びます。

深層学習モデルの開発により、超解像技術はより強力になり、一般的になりました。この技術は画質を向上させるだけでなく、さまざまなアプリケーションにおける深層学習モデルのパフォーマンスも向上します。物体検出から画像分類に至るまで、超解像技術はコンピューター ビジョンの分野に大きな影響をもたらしました。

ISRプロジェクト

ここで紹介する画像強化 github プロジェクトには、Keras を使用して実装された単一画像超解像度 (ISR) 用のさまざまな残留高密度ネットワークと、これらのネットワークのコンテンツと敵対的損失コンポーネントをトレーニングするためのスクリプトが含まれています。

github 地址:https://github.com/idealo/image-super-resolution

実装されるネットワークには次のものが含まれます。

「画像超解像度のための残留高密度ネットワーク」(Zhang et al.、2018) で説明されている超増幅残留高密度ネットワークに基づいています。
「ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks」(Wang et al.、2018) で説明されている残差を含む残差密ネットワークに基づいています。
「敵対的生成ネットワークを使用したフォトリアリスティックな単一画像の超解像度」 (SRGANS、Ledig et al.、2017) で説明されているカスタム識別子ネットワークに基づく

インストール

画像超解像度パッケージをインストールするには 2 つの方法があります。

1. PyPI から ISR をインストールします (推奨)。

pip install ISR

2. GitHub ソース コードから ISR をインストールします。

git clone https://github.com/idealo/image-super-resolution
cd image-super-resolution
python setup.py install

使用法

予測する

画像をロードして準備します。

import numpy as np
from PIL import Image

img = Image.open('data/input/test_images/sample_image.jpg')
lr_img = np.array(img)

事前トレーニングされたモデルをロードして予測を実行する

from ISR.models import RDN

rdn = RDN(weights='psnr-small')
sr_img = rdn.predict(lr_img)
Image.fromarray(sr_img)

大きなイメージの推論

大きな画像を予測してメモリ割り当てエラーを回避するには、次のように by_patch_of_size オプションを使用して予測できます。

sr_img = model.predict(image, by_patch_of_size=50)

電車

モデルの作成

from ISR.models import RRDN
from ISR.models import Discriminator
from ISR.models import Cut_VGG19

lr_train_patch_size = 40
layers_to_extract = [5, 9]
scale = 2
hr_train_patch_size = lr_train_patch_size * scale

rrdn  = RRDN(arch_params={
    
    'C':4, 'D':3, 'G':64, 'G0':64, 'T':10, 'x':scale}, patch_size=lr_train_patch_size)
f_ext = Cut_VGG19(patch_size=hr_train_patch_size, layers_to_extract=layers_to_extract)
discr = Discriminator(patch_size=hr_train_patch_size, kernel_size=3)

Trainer オブジェクトを作成し、必要な設定とモデルを渡します (f_ext と discr はオプションです)。

from ISR.train import Trainer
loss_weights = {
    
    
  'generator': 0.0,
  'feature_extractor': 0.0833,
  'discriminator': 0.01
}
losses = {
    
    
  'generator': 'mae',
  'feature_extractor': 'mse',
  'discriminator': 'binary_crossentropy'
}

log_dirs = {
    
    'logs': './logs', 'weights': './weights'}

learning_rate = {
    
    'initial_value': 0.0004, 'decay_factor': 0.5, 'decay_frequency': 30}

flatness = {
    
    'min': 0.0, 'max': 0.15, 'increase': 0.01, 'increase_frequency': 5}

trainer = Trainer(
    generator=rrdn,
    discriminator=discr,
    feature_extractor=f_ext,
    lr_train_dir='low_res/training/images',
    hr_train_dir='high_res/training/images',
    lr_valid_dir='low_res/validation/images',
    hr_valid_dir='high_res/validation/images',
    loss_weights=loss_weights,
    learning_rate=learning_rate,
    flatness=flatness,
    dataname='image_dataset',
    log_dirs=log_dirs,
    weights_generator=None,
    weights_discriminator=None,
    n_validation=40,
)

トレーニングを開始する

trainer.train(
    epochs=80,
    steps_per_epoch=500,
    batch_size=16,
    monitored_metrics={
    
    'val_PSNR_Y': 'max'}
)

畳み込みニューラル ネットワーク (CNN) は、画像の超解像度 (SR) において大きな成功を収め、階層的な機能を提供します。ただし、ほとんどのディープ CNN ベースの SR モデルは、元の低解像度 (LR) 画像の階層的特徴を十分に活用していません。

RDN アルゴリズムの概要

この研究では、SR 分野の課題に対処するための新しい画像超解像度 (SR) ソリューション、つまり Residual Dense Network (RDN) を提案します。 RDN の設計は主に画像の階層機能を最大限に活用することに重点を置き、パフォーマンスを向上させ、より鮮明な超解像度画像を提供することを目指しています。

RDNの主な特徴

  1. 階層機能の利用: RDN は、畳み込みニューラル ネットワークのさまざまなレベルの階層機能を最大限に活用します。これは、画像のさまざまな部分をよりよく理解し、超解像度に関するより多くの情報を提供するのに役立ちます。
  2. Residual Dense Block (RDB): RDN は、画像の豊富な局所特徴を抽出するための密に接続された畳み込み層である Residual Dense Block を導入します。これは、画像のディテールとテクスチャを維持するのに役立ちます。
  3. 連続メモリ (CM) メカニズム: RDB では、以前の RDB の状態を現在の RDB のすべての層に直接接続できるため、連続メモリ メカニズムが形成されます。これにより、情報の転送と共有が容易になり、ネットワークのパフォーマンスが向上します。
  4. 局所特徴融合: RDB の局所特徴融合メカニズムは、以前および現在の局所特徴からより効果的な情報を適応的に学習するために使用されます。これは、より広範なニューラル ネットワークのトレーニング プロセスを安定させるのに役立ちます。
  5. グローバル特徴融合: 高密度のローカル特徴が取得されると、RDN はグローバル特徴融合メカニズムを使用して、全体的な方法でグローバル階層特徴を共同かつ適応的に学習します。これは、画像の全体的な構造をより深く理解するのに役立ちます。

残留高密度ネットワークの構造

以下の図に示すように、Residual Dense Network (RDN) は、画像超解像度のためのディープ ニューラル ネットワーク構造であり、次の 4 つの主要な部分が含まれます。

  • 浅い特徴抽出ネットワーク (SFENet)
  • 残留高密度ブロック (RDB) (これについては次のセクションで詳しく説明します)
  • 高密度機能融合 (DFF)
  • アップサンプリング ネットワーク (UPNet)

ここに画像の説明を挿入します

RDN の入力は、 I L R I_{LR} を使用する低解像度 (LR) 画像です。LR は、 I S R I_{SR} を使用した超解像処理後の画像を出力することを意味します。SR急行。

  • I L R I_{LR}LR :低解像度(LR)画像の入力
  • I S R I_{SR}SR:超解像(SR)処理後出力

以下にRDNの構造に従って左から右に構造を紹介します。

まず、2 つの畳み込み層を使用して浅い特徴を抽出します。最初の畳み込み層は I L R I_{LR} から始まります。LR 入力から特徴を抽出する F − 1 F_{-1} F1 、2 番目の畳み込み層は F − 1 F_{-1} F1 はさらに F 0 F_0 に変換されます。F0 。これらの浅い特徴は後続の処理に使用され、式は次のとおりです。

F − 1 = H S F E 1 ( I L R ) F_{-1} = H_{SFE1} (I_{LR})F1 =HSFE1 (LR )

其中 H S F E 1 ( ⋅ ) H_SFE1(·) HS FE1()表示卷积操作。 F − 1 F_{-1} F1 次に、浅い特徴とグローバル残差学習をさらに抽出して、さらに取得するために使用されます。

F 0 = H S F E 2 ( F − 1 ) F_0 = H_{SFE2} (F_{-1})F0 =HSFE2 (F1 )

其中 H S F E 2 ( ⋅ ) H_{SFE2}(·) HSFE2 () は、2 番目の浅い特徴抽出層の畳み込み演算を表し、残留密ブロックへの入力として使用されます。

次に、RDB に入ります。RDN には、浅いフィーチャから局所的な密なフィーチャを抽出するために使用される複数の残留密ブロック (RDB) が含まれています。各 RDB はローカル特徴量を生成します F d F_d Fd ,其中 d d d はどの RDB かを示します。これらの RDB は共同で画像の特徴を抽出して強化します。その式は次のとおりです。

F d = H R D B , d ( F d − 1 ) = H R D B , d ( H R D B , d − 1 ( . . . ( H R D B , 1 ( F 0 ) ) ⋯ ) ) F_d = H_{RDB,d}(F_{d -1}) = H_{RDB,d}(H_{RDB,d-1}(...(H_{RDB,1}(F_0))⋯))Fd =HRDBd (Fd1 )=HRDBd (HRDBd 1 (...(HRDB1 (F0 ))))

其中 H R D B , d H_{RDB,d} HRDBd は d 番目の RDB の動作を表します。 H R D B , d H_{RDB,d} HRDBd 畳み込みや整流線形単位 (ReLU) などの一連の演算の複合関数にすることができます。

由于 F d F_d Fd は、ブロック内の各畳み込み層を最大限に利用して d 番目の RDB によって生成され、Fd は局所特徴とみなすことができます。

一連の RDB を使用して階層特徴を抽出した後、モデルはさらに、グローバル特徴融合 (GFF) とグローバル残差学習 (GRL) を含む高密度特徴融合 (DFF) を受けます。

DFF は、融合のために以前のすべての層の機能を最大限に活用します。これは、構造図の次の部分であり、次のように表現できます。
ここに画像の説明を挿入します

F D F = H D F F ( F − 1 , F 0 , F 1 , ⋯ , F D ) F_{DF} = H_{DFF}(F_{-1}, F_0, F_1, ⋯, F_D)FDF =HDFF (F1 F0 F1 FD )

其中 F D F F_{DF} FDF は複合関数を使用して実現されます H D F F H_{DFF} HDFF DFF の出力特徴マップを使用します。 DFF の詳細については、次のセクションで説明します。

最後に、LR 空間でローカルおよびグローバルの特徴を抽出した後、アップサンプリング ネットワーク (UPNet) が HR 空間にスタックされます。 UPNet では ESPCN ネットワーク構造が使用され、 畳み込み層が接続されます。最後に

RDN の出力は次のように表現できます。

I S R = H R D N ( I L R ) I_{SR} = H_{RDN}(I_{LR})SR=HRDN (LR )

其中 H R D N H_{RDN} HRDN RDNの機能を表します。

以下は、コア ネットワーク ブロックの詳細な紹介です。

残留高密度ブロック

ここに画像の説明を挿入します

残差密ブロックは上の図に示されており、提案されている残差密ブロック (RDB) については以下で詳しく紹介します。

RDB には、高密度に接続されたレイヤー、ローカル特徴融合 (LFF)、ローカル残差学習が含まれており、連続メモリ ( C M CM ) が可能になります。CM)机制

連続メモリ メカニズムは、以前の RDB 状態を現在の RDB の各層に渡すことによって実装されます。

F d − 1 F_{d-1} Fd1 F d F_d Fd 分别表示第 d d d RDB の入力と出力。すべてに G 0 G_0 G0 特征图。第 d d d RDB の c 番目の畳み込み層の出力は次のように表すことができます

F d , c = σ ( W d , c [ F d − 1 , F d , 1 , ⋯ , F d , c − 1 ] ) F_{d,c} = σ(W_{d,c}[F_{ d-1}、F_{d,1}、⋯、F_{d,c-1}])Fdc =σ(Wdc [Fd1 Fd1 Fdc1 ])

ここで、σ は ReLU 活性化関数を表します。 W d , c W_{d,c} dc です c − t h c 番目 cth畳み込み層の重み、バイアス項は簡単にするために省略されています。 F d , c F_{d,c} Fdc G G G特征图组成。 [ F d − 1 , F d , 1 , ⋯ , F d , c − 1 ] [F_{d-1}, F_{d,1}, ⋯, F_{d,c-1}] [Fd1 Fd1 Fdc1 ]是由第 ( d − 1 ) (d-1) (d1) RDB によって生成された特徴マップ、d 番目の RDB の畳み込み層 1、⋯、 c − 1 c-1 c1 RDB 内の畳み込み層のスプライシングにより、 G 0 + ( c − 1 ) × G G_0 + ( c-1 が得られます) ) \times G G0 +(c1)×G機能マップ。以前の RDB と各層の出力は、後続のすべての層と直接接続されており、フィードフォワードの性質が維持されるだけでなく、局所的な密な特徴も抽出されます。

次に、局所特徴融合 (LFF) が適用され、前の RDB の状態と現在の RDB のすべての畳み込み層からの情報が適応的に融合されます。これにより、 ( d − 1 ) (d-1) (d1) によって生成された特徴マップは、スプライシングによって d d 機能の数を減らすには、d RDB が必要です。一方、 1 × 1 1 \times 1 1×1出力情報を適応的に制御する畳み込み層。この操作をローカル特徴融合 (LFF) と名付け、

F d , L F = H L F F d ( [ F d − 1 , F d , 1 , ⋯ , F d , c , ⋯ , F d , C ] ) F_{d,LF} = H^d_{LFF}([F_ {d-1}、F_{d,1}、⋯、F_{d,c}、⋯、F_{d,C}])FdLF =HLFFd ([Fd1 Fd1 Fdc FdC ])

其中 H L F F d H^d_{LFF} HLFFd は、d 番目の RDB の 1 × 1 1 \times 1 を意味します。1×1卷积层的函数

ローカル残差学習 (LRL) は、1 つの RDB 内に複数の畳み込み層があるため、情報フローをさらに改善するために RDB に導入されています。 d 番目の RDB の最終出力は次のようにして取得できます。

F d = F d − 1 + F d , L F F_d = F_{d-1} + F_{d,LF}Fd =Fd1 +FdLF

高密度機能融合

一連の RDB を使用して局所的な密な特徴を抽出した後、グローバルな方法で階層的な特徴を活用するために、密な特徴融合 (DFF) がさらに提案されています。 DFF には、グローバル特徴融合 (GFF) とグローバル残差学習が含まれます。グローバル特徴融合は、次のように表現されるすべての RDB の特徴を融合することによって、グローバル特徴 FGF を抽出することを目的としています。

F G F = H G F F ( [ F 1 , ⋯ , F D ] ) F_{GF} = H_{GFF}([F_1, ⋯ , F_D])FGF=HGFF ([F1 FD ])

其中 [ F 1 , ⋯ , F D ] [F_1, ⋯, F_D] [F1 FD ] は、1 番目から D 番目の残差密ブロックから生成された特徴マップのスプライシングを表します。 H G F F H_{GFF} HGFF です 1 × 1 1 \times 1 1×1 3 × 3 3 \times 3 3×3卷积的复合函数。 1 × 1 1 \times 1 1×1畳み込みレイヤーは、さまざまなレベルの特徴を適応的に融合するために使用されます。次 3 × 3 3 \times 3 3×3 畳み込み層は、グローバル残差学習に必要な特徴をさらに抽出するために使用されます。

次に、グローバル残差学習を使用して、アップサンプリング前に特徴マップを取得します。

F D F = F − 1 + F G F F_{DF} = F_{-1} + F_{GF}FDF =F1 +FGF

其中 F − 1 F_{-1} F1 浅い特徴マップを表します。グローバル特徴融合前の他のすべてのレイヤーは、提案された Residual Dense Blocks (RDB) を最大限に活用します。 RDB は、局所的に高密度の特徴の複数の層を生成し、さらに適応的に融合して FGF を形成します。大域的な残差学習の後、密な特徴 FDF が取得されます。

おすすめ

転載: blog.csdn.net/weixin_42010722/article/details/133887040