Post

Real-ESRGAN Architecture: RRDB and High-Frequency Generation

Real-ESRGAN Architecture: RRDB and High-Frequency Generation

This post was migrated from Tistory. You can find the original here.

Basic ESRGAN Architecture

Real-ESRGAN is a Super-Resolution model that trains an RRDB-based CNN generator using a GAN approach.

It turns a Low-Resolution (low-frequency) image into a High-Resolution (high-frequency) image.

Input (LR Image)
→ Conv
→ RRDB × N
→ Conv
→ Upsampling (x2 / x4)
→ Conv
→ Output (HR Image)

RRDB (Residual-in-Residual Dense Block)

Here’s what RRDB does:

LR image
→ Conv
→ RRDB blocks
→ “There should be an edge/texture like this at this location”
→ Generate high-frequency feature maps

Frequency in Images

Low frequency

  • Brightness variation

  • Large structures, contours, shapes

  • e.g. the overall color tone of a photo, the rough position of eyes/nose/mouth, the large silhouette of a building

High frequency

  • Edges

  • Textures

  • e.g. flyaway hairs, skin texture, letter outlines

In general, reducing resolution mathematically forces the removal of high-frequency components,

so a Low-Resolution image is one whose high-frequency components have already been lost.

Why Is the RRDB Structure Good at Recovering High Frequencies?

Residual, expressed as a formula:

(Residual = a skip-connection structure that adds the input to the output)

Output = Input + Δ

Here, Δ (delta) is the amount of change (= the high-frequency component) that gets added to the existing image.

In other words, RRDB is structurally designed to leave the low-frequency content in the input untouched while learning only the high-frequency content.

And the dense connections preserve

  • edge information from shallow layers

  • complex texture information from deep layers

together.

Upsampling

Upsampling isn’t the stage that creates high-frequency content — it’s the stage that spatially unfolds the high-frequency content that’s already been generated.

Feature Map (H, W, C) = RRDB output
→ Conv (C × r²)
→ PixelShuffle
→ (H×r, W×r, C)
→ Conv

PixelShuffle is an operation that rearranges pixel information stored along the channel dimension, which represents the upscale target, into the spatial dimensions (H, W).

(H, W, C×r²) → (rH, rW, C)

Is the Original (Low-Frequency Content) Preserved?

Since this model is trained via a GAN approach, if the adversarial loss is too large, even the original content can end up distorted.

Very low resolution → very large upscale factor

e.g. 64x64 → 1024x1024

In this case, the low-frequency information itself is insufficient, so the original can be altered.

If you need SR (Super-Resolution) but the original must be preserved (medical imaging, measurement, quantitative analysis, etc.),

you should either use it in a well-controlled setting or consider a non-GAN SR model.

2026.06.02 - Understanding Spatial Resolution

This post is licensed under CC BY-NC 4.0 by the author.