Standard ESRGAN architecture (RRDB backbone, 4x upscale). Two-stage training:
PSNR pretrain: L1 loss, builds a competent baseline upscaler.
GAN finetune: L1 + perceptual (VGG) + GAN loss, trades pixel accuracy for perceptual sharpness.
Trained on DIV2K + Flickr2K with bicubic 4x downsampling for the LR side. Total finetune length: 685k iterations.
Known limitations
This is a perceptual-quality SR model, not a forensic one. It's good at producing plausible high-resolution output, not at recovering ground truth that isn't there.
Faces / skin: Faces especially are hard for any general-purpose SR.
Pine needles, grass blades, dense fine foliage: Fundamental limit. Sub-pixel periodic structure can't be recovered when it's been aliased away in the input.
Small Text: Often comes out as plausible-looking glyphs that aren't quite letters. SR models don't have a concept of "this is supposed to be readable."
Already high-quality inputs: Model was trained on bicubic-degraded inputs, so feeding it a clean sharp image puts it out-of-distribution. It tends to pass such inputs through with little change.
Zoomed-in inspection: At 1:1 of the output pixels, the painterly/synthetic quality of generated texture becomes visible. This is inherent to generative SR, not specific to this model.
The forensic variant exists for cases where you'd rather have honest softness than confident invention.