超分算法ESPCN:《Super-résolution d'image unique et de vidéo en temps réel à l'aide d'un sous-pixel efficace》

1. Présentation de ESPCN

"Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel" propose une nouvelle méthode de suréchantillonnage , qui a une bonne amélioration de la vitesse de calcul et de l'effet de reconstruction des tâches SR (super-résolution) .

L'article présente un algorithme SR - ESPCN - qui a amélioré l'expressivité de la reconstruction et l'efficacité de calcul (vitesse de reconstruction, consommation de ressources de calcul) par rapport aux algorithmes précédents (SRCNN, Bicubic) .
SRCNN effectue d'abord une interpolation bicubique sur l'image d'entrée, puis effectue une extraction de caractéristiques.Cette méthode équivaut à un super-scoring direct au niveau HR.L'auteur prouve que cette méthode est une stratégie sous-optimale et entraînera une augmentation de la complexité de calcul.

En réponse à ce problème, l'auteur a proposé la structure ESPCN :

  1. Il s'agit d'une extraction de caractéristiques directement sur l'image LR d'entrée .
  2. L'une est introduite dans le réseau.Cette 亚像素卷积层couche est généralement la dernière couche du réseau.Elle utilise la carte de caractéristiques après l'extraction de caractéristiques précédente comme entrée et réalise la reconstruction LR → SR en apprenant un filtre de suréchantillonnage.
  3. La convolution de l'image LR remplace directement la partie de prétraitement bicubique dans le SRCNN, ce qui réduit directement la complexité de calcul et améliore la vitesse d'exécution . L'auteur a réalisé l'effet de super-résolution dans la vidéo 1080P et a atteint le temps réel "dans le titre". ".
  4. ESPCN a fait des expériences connexes sur des images et des vidéos, qui ont été améliorées de 0,15 dB et 0,39 dB respectivement ; en outre, la vitesse d'exécution d'ESPCN a également dépassé les précédents algorithmes SR de la série basés sur CNN.

2. Explication détaillée du document

2.1 Présentation

Les deux principaux points d'ESPCN sont très importants : ①Il consiste à extraire directement les caractéristiques des images de niveau LR LR, ②Il s'agit d'une couche de convolution sous-pixel. Développons-la ci-dessous :

  1. ESPCN convolue directement l'image au niveau LR pour extraire les caractéristiques, nous pouvons donc utiliser un filtre plus petit pour intégrer les informations sur les caractéristiques à différents niveaux Comparé à SRCNN, cette approche réduit non seulement les paramètres de formation , mais réduit également la complexité de calcul réduit le temps de formation .
    De plus, comme indiqué dans l'article DCSCN, lorsque r ≥ 3, il n'y a en fait aucune différence entre les caractéristiques extraites directement de l'image d'entrée et les caractéristiques extraites après un premier agrandissement par interpolation bicubique, de sorte que l'interpolation apparaîtra redondante et gaspillée en termes de calcul. coût.
  2. Le mode de suréchantillonnage dans SRCNN est un processus simple : pour interpoler l'image LR d'entrée, un seul filtre est nécessaire. Dans ESPCN, en supposant que l'ensemble du réseau a L couches, alors les n L − 1 n_{L-1} générés par la couche L−1nL - 1Carte de caractéristiques de Zhang, puis au niveau de la couche L, nous pouvons apprendre une manière plus complexe de former n L − 1 n_{L-1}nL - 1Un noyau de convolution au lieu d'un simple.
    Plus important encore, la dernière couche peut apprendre implicitement le nombre de canaux n L − 1 n_{L-1}nL - 1Le filtre de masse, qui est essentiellement un processus de brassage, sera r 2 r^2r2 feature maps sont intégrées, c'est tout亚像素卷积层.

2.2 Méthode

insérez la description de l'image ici
L'image ci-dessus est la structure du réseau ESPCN, et les points suivants seront expliqués :

  1. L'image d'entrée est une image LR, et le nombre de canaux est C. Par exemple, dans une image au format RVB, C = 3, notre objectif est de partir de C × H × WC\times H\times WC×H×L'image de W devientC × r H × r WC\times rH\times rWC×rH×Image de r W.
  2. L'ensemble du réseau est divisé en deux parties : la partie d'extraction de caractéristiques , qui consiste en un réseau CNN continu ; la partie de suréchantillonnage , qui consiste en une couche convolutive de sous-pixels.
  3. En supposant que le réseau entier a un total de L couches, la première couche L − 1 est composée de convolution et d'activation non linéaire.L'expression spécifique est : f 1 (
    ILR ; W 1 , b 1 ) = ϕ ( W 1 ∗ ILR + b 1 ) , fl ( ILR ; W 1 : l , b 1 : l ) = ϕ ( W l ∗ fl − 1 ( ILR ) + bl ) , \begin{aligned}f^1\left(\mathbf{I} ^{LR} ; W_1, b_1\right) & =\phi\left(W_1 * \mathbf{I}^{LR}+b_1\right), \\f^l\left(\mathbf{I}^{ LR} ; W_ {1 : l}, b_{1 : l}\right) & =\phi\left(W_l * f^{l-1}\left(\mathbf{I}^{LR}\right) +b_l\right ),\end{aligné}F1( jeL R ;O1,b1)Fje( jeL R ;O1 : l,b1 : l)=ϕ( W1jeLR _+b1),=ϕ( WjeFl 1( jeL R )+bje),
    W l , bl , l ∈ ( 1 , L − 1 ) W_l, b_l, l∈(1,L−1)Oje,bje,je( 1 ,L1 ) sont respectivement des poids et des biais de réseau apprenables. W l W_lOjeest nl − 1 × nl × kl × kl n_{l−1}×n_l×k_l×k_lnl 1×nje×kje×kjeLe tenseur de convolution bidimensionnel de nl n_lnjepour tousLe nombre d'entités de couche l ,n 0 = C n_0 = Cn0=C ,kl k_lkjepour tousLa taille du filtre de couche l . Déviationbl b_lbjeest de longueur nl n_lnjede vecteurs. Fonction non linéaire (ou fonction d'activation) ϕ \phiϕ est appliqué élément par élément et est fixe.
  4. La couche d'extraction de caractéristiques maintient la taille de l'image constante.

2.2.1 Couche de déconvolution

L'ajout d'une couche de déconvolution est un moyen courant de récupérer la résolution à partir de la mise en commun maximale et d'autres couches de sous-échantillonnage d'image. Cette approche a été utilisée avec succès pour visualiser les activations de couches [49] et générer des segmentations sémantiques en utilisant des fonctionnalités de haut niveau du réseau [24].

On peut voir que l'interpolation bicubique utilisée dans SRCNN est un cas particulier des couches de déconvolution, comme décrit dans [24, 7]. La couche de déconvolution proposée dans [50] peut être vue comme chaque pixel d'entrée avec une foulée rrLe score élément par élément des éléments de filtre de r et la somme de la fenêtre de sortie résultante, également connue sous le nom de convolution vers l'arrière [24].

2.2.2 Couche de convolution sous-pixel efficace


Pour mettre en avant le fond :
Une autre façon de mettre à l'échelle les images LR est d'effectuer la foulée 1 dans l'espace LR r \frac {1}{r}r1Convolution de , comme décrit dans [24], cela peut être fait simplement par interpolation, perforation [27] ou dégroupage de l'espace LR à l'espace HR [49], puis convolution avec la foulée 1 dans l'espace HR pour améliorer les performances. Ces implémentations augmentent r 2 r^2r2 parce que la convolution a lieu dans l'espace HR.
Par conséquent, l'auteur propose une méthode qui utilise également1 r \frac{1}{r}r1Couche convolutive implicite avec taille de foulée mais pas de calcul supplémentaire - 亚像素卷积层(sub-pixel convolution layer).


L'idée centrale de la convolution des sous-pixels :一张图像放大r倍,就相当于每个像素都放大r倍。

Le processus de convolution de l'avant-dernière couche du réseau 输出通道数est l'image caractéristique de r^2l'image d'origine , puis périodiquement disposée à travers la couche de convolution sous-pixel pour obtenir une image reconstruite avec une taille de .同样大小
(w × r , h × r)

insérez la description de l'image ici
Comme le montre la figure ci-dessus, les 9 caractéristiques encadrées par le cercle rouge sur l'avant-dernière couche sont disposées pour former la petite boîte sur la dernière couche pointée par la flèche. Il s'agit du bloc de reconstruction formé par les pixels encadrés dans l'image d'origine à travers le réseau. Ces neuf pixels ne font que tripler la longueur et la largeur du pixel d'origine.
La convolution sous-pixel (Sub-pixel Convolution) n'a pas réellement d'opération de convolution, mais extrait simplement des caractéristiques et les arrange ensuite simplement.


Le principe de la convolution sous-pixel

  1. Pourquoi est-ce appelé convolution sous-pixel ?

La couche de convolution sous-pixel peut être considérée comme un 隐式卷积processus : la convolution implicite signifie qu'un filtre est toujours utilisé pour extraire l'information, mais contrairement aux opérations de convolution traditionnelles, il n'est pas utilisé ici 没有涉及可学习的滤波器参数以及任何乘加运算.
Le processus de gauche à droite dans le processus de convolution sous-pixel est comme un stride = 1 r stride=\frac{1}{r}faire un pas _ _ _=r1Convoluez l'image LR, si intuitivement il semble que la convolution génère quelques petits pixels, et parce que 1 r ≤ 1 \frac{1}{r}\leq1r11 , signifie qu'il effectue l'opération à l'intérieur du pixel entier, nous l'appelons sous-pixel, comme le commun1 2 \frac{1}{2}211 4 \frac{1}{4}41Les pixels sont des sous-pixels.

  1. Comment fonctionne la convolution sous-pixel ?

Dans l'espace LR, une foulée vaut 1 r \frac {1}{r}r1La convolution de taille ks k_sksEt l'espacement des poids est de 1 r \frac {1}{r}r1Le filtre W s W_sOsActivera la convolution dans WS W_SOSdifférentes parties de. Les poids qui tombent entre les pixels ne sont pas activés et n'ont pas besoin d'être calculés. Le nombre de modes actifs est exactement r 2 r^2r2 . Chaque mode d'activation, selon sa position, active au plus⌈ ksr ⌉ 2 \left\lceil\frac{k_s}{r}\right\rceil^2rks2 poids. Selon la position des différents sous-pixels :mod ( x , r ) mod (x, r)mod ( x , _ _r )mod ( y , r ) mod ( y , r )mod ( y , _ _r ) , dontx , yx, yX ,y est la coordonnée du pixel de sortie dans l'espace HR. Dans cet article, nous proposons qu'àmod ( ks , r ) = 0 mod (k_s, r) = 0mod ( k _ _s,r )=Un moyen efficace pour réaliser l'opération ci-dessus à 0 :

ISR = f L ( ILR ) = PS ( WL ∗ f L − 1 ( ILR ) + b L ) \mathbf{I}^{SR}=f^L\left(\mathbf{I}^{LR}\right )=\mathcal{P} \mathcal{S}\left(W_L * f^{L-1}\left(\mathbf{I}^{LR}\right)+b_L\right)jeRS=FL( jeL R )=PS _( WLFL - 1( jeL R )+bL)

PS PSPS est un opérateur de transformation périodique, il vaH × W × C ⋅ r 2 H×W×C·r^2H×O×C rLes éléments du tenseur 2 sont réarrangés commer H × r W × c rH × rW × crH×rW _×tenseur en forme de c . L'effet de cette opération est illustré à la figure 1. Mathématiquement, cette opération peut être décrite de la manière suivante :

PS ( T ) X , y , c = T ⌊ X / r ⌋ , ⌊ y / r ⌋ , C ⋅ r ⋅ mod ( y , r ) + C ⋅ mod ( X , r ) + c \mathcal{PS}( T)_{x, y, c}=T_{\lsol x / r\rsol,\lsol y / r\rsol, C \cdot r \cdot \bmod (y, r)+C \cdot \bmod (x , r)+c}PS ( T ) _x , y , c=JX / r , y / r , C r mode( y , r ) + C mode( x , r ) + c

Opération de convolution WL W_LOLLa forme est n L − 1 × r 2 C × k L × k L n_{L-1}\times r^2C\times k_L\times k_LnL - 1×r2C _×kL×kL. Notez que nous n'avons pas appliqué de non-linéarité à la sortie de la dernière couche convolutive. Il est facile de voir que lorsque KL = ksr K_L=\frac{k_s}{r}KL=rks, et mod ( ks , r ) = 0 mod(k_s,r)=0mod ( k _ _s,r )=0 équivaut à filtrerW s W_sOsEffectuez une convolution sous-pixel.
Nous appellerons notre nouvelle couche sub-pixel convolution layer, et notre réseau efficient sub-pixel convolutional neural network(ESPCN). La dernière couche génère directement une image HR à partir des cartes d'entités LR, chacune avec un filtre de mise à l'échelle, comme illustré à la figure 4.
insérez la description de l'image ici


Méthode d'apprentissage
Étant donné un ensemble d'apprentissage contenant des exemples d'images HR I n HR , n = 1... N I_n^{HR},n=1...NjenH R,n=1... N , on génère l'image LR correspondanteI n LR , n = 1 , . . , N I_n^{LR},n=1,..,NjenL R,n=1 ,.. ,N , puis calculez l'erreur quadratique moyenne (MSE) au niveau des pixels en tant que fonction objectif pour entraîner notre réseau.

ℓ ( W 1 : L , b 1 : L ) = 1 r 2 HW ∑ X = 1 r H ∑ X = 1 r W ( je X , y HR - fx , y L ( ILR ) ) 2 \ell\left( W_{1 : L}, b_{1 : L}\right)=\frac{1}{r^2 HW} \sum_{x=1}^{r H} \sum_{x=1}^{r W}\left(\mathbf{I}_{x, y}^{HR}-f_{x, y}^L\left(\mathbf{I}^{LR}\right)\right)^2( W1 : L,b1 : L)=r2HW __1x = 1RHx = 1rW _( jex , yH RFx , yL( jeL R ))2

3. Implémentations associées dans pytorch

En ce qui concerne la couche de convolution sous-pixel, pytorch fournit également l'implémentation torch.nn.PixelShuffle() et torch.nn.PixelUnshuffle()
l'utilisation correspondantes. Pour plus de détails, voir [torch.nn.PixelShuffle] et [torch.nn.UnpixelShuffle]

4. Référence

https://blog.csdn.net/MR_kdcon/article/details/123837994

Je suppose que tu aimes

Origine blog.csdn.net/zyw2002/article/details/132198234
conseillé
Classement