Skip to main content

Default Model

Unenhanced file for default-modelEnhanced file for default-model

Default Model

Version :1.0.0-beta.17Last Updated :over 1 year agoNPM installs per week :506CDN hits per week :903

This model is the default upscaling model used with UpscalerJS. It is a copy of the 2x model made available via @upscalerjs/esrgan-slim.

Paper

The Super-Resolution Generative Adversarial Network (SRGAN) is a seminal work that is capable of generating realistic textures during single image super-resolution. However, the hallucinated details are often accompanied with unpleasant artifacts. To further enhance the visual quality, we thoroughly study three key components of SRGAN - network architecture, adversarial loss and perceptual loss, and improve each of them to derive an Enhanced SRGAN (ESRGAN). In particular, we introduce the Residual-in-Residual Dense Block (RRDB) without batch normalization as the basic network building unit. Moreover, we borrow the idea from relativistic GAN to let the discriminator predict relative realness instead of the absolute value. Finally, we improve the perceptual loss by using the features before activation, which could provide stronger supervision for brightness consistency and texture recovery. Benefiting from these improvements, the proposed ESRGAN achieves consistently better visual quality with more realistic and natural textures than SRGAN and won the first place in the PIRM2018-SR Challenge.

ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks

Samples

Here are some examples of upscaled images using this model.

Original2x Upscaled
Original imageUpscaled image using esrgan-thick/2x

Demo

Usage

@upscalerjs/default-model comes pre-installed with upscaler. It is the default model when no model is provided:

import UpscalerJS from 'upscaler';
const upscaler = new UpscalerJS(); // Using the default-model

So in most cases, it does not need to be explicitly required. If for some reason an explicit require is needed, read on.

Browser

Using a transpiler

default-model can be provided explicitly:

import UpscalerJS from 'upscaler';
import model from '@upscalerjs/default-model';

const upscaler = new UpscalerJS({
model,
})

Using a script tag

If loading UpscalerJS via a script tag, reference the global name of the model:

<script src="https://cdn.jsdelivr.net/npm/@upscalerjs/default-model@latest/dist/umd/index.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/upscaler@latest/dist/browser/umd/upscaler.min.js"></script>

<script type="text/javascript">
const upscaler = new Upscaler({
model: DefaultUpscalerJSModel,
})
</script>

Node

Require the model with:

const Upscaler = require('upscaler/node'); // if using @tensorflow/tfjs-node-gpu, change this to upscaler/node-gpu
const defaultModel = require('@upscalerjs/default-model');

const upscaler = new Upscaler({
model: defaultModel,
})

The model will work for both node and node-gpu flavors of Tensorflow.js.

Performance + Speed Measurements

Div2KDiv2KFFHQFlickr2K
Performance measurements are done for 100 images of a given dataset. Images are randomly cropped to 240px.
PSNRPSNRSSIM
iPhone 14 Pro MaxiPad Mini 2021iPhone 14 Pro MaxiPhone 14iPhone 12 MiniiPhone 12 Pro MaxiPad Pro 12.9 2021Samsung Galaxy S22 UltraSamsung Galaxy S22iPhone 13 Pro MaxGoogle Pixel 6Google Pixel 6 ProiPhone 13Google Pixel 7
All speed measurements are in milliseconds. Each measurement is an average of 1024 iterations: 32 iterations within a browser tab, executed over 32 iterations of a fresh browser tab. All models are warmed up before execution. Model performance can vary greatly, depending on device and running processes.

Architecture

This model is trained via a Python implementation of the ESRGAN architecture. The Python repo has instructions on training from scratch.

Training Details

View more information on training at @upscalerjs/esrgan-slim.

License

MIT License © Kevin Scott

The original ESRGAN repository is licensed under an Apache License 2.0