| DFRNet-v1 Baseline |
| ================== |
|
|
| OVERVIEW |
| -------- |
|
|
| DFRNet-v1 is a lightweight convolutional image-to-image network |
| developed as a baseline for image restoration experiments. |
|
|
| The model takes an RGB image as input and transforms it through |
| convolutional feature extraction layers. |
|
|
| The encoder progressively changes the channel representation: |
|
|
| RGB Input |
| 3 channels |
| | |
| v |
| 9 channels |
| | |
| v |
| 27 channels |
| | |
| v |
| 3 channels |
|
|
| The resulting three-channel representation is passed to the decoder. |
|
|
| The decoder uses bilinear interpolation to resize the output to: |
|
|
| Height: 640 pixels |
| Width: 1024 pixels |
|
|
|
|
| ARCHITECTURE |
| ------------ |
|
|
| Input RGB Image |
| | |
| v |
|
|
| Encoder |
| | |
| +-- ConvBlock: 3 -> 9 |
| | |
| +-- ConvBlock: 9 -> 27 |
| | |
| +-- Conv2D: 27 -> 3 |
|
|
| | |
| v |
|
|
| Decoder |
| | |
| +-- Bilinear Upsampling |
| Output: 640 x 1024 |
|
|
| | |
| v |
|
|
| Reconstructed Output Image |
|
|
|
|
| CONVBLOCK |
| --------- |
|
|
| Each ConvBlock contains: |
|
|
| Conv2D (3x3) |
| | |
| v |
| ReLU |
| | |
| v |
| Conv2D (3x3) |
| | |
| v |
| ReLU |
|
|
|
|
| MODEL STATISTICS |
| ---------------- |
|
|
| Total Parameters: |
| 10,524 |
|
|
| Trainable Parameters: |
| 10,524 |
|
|
|
|
| PYTORCH MODEL |
| ------------- |
|
|
| ImageRegressionNet( |
| (encoder): Encoder( |
| (stage_1): ConvBlock( |
| (block): Sequential( |
| (0): Conv2d(3, 9, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) |
| (1): ReLU(inplace=True) |
| (2): Conv2d(9, 9, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) |
| (3): ReLU(inplace=True) |
| ) |
| ) |
| (stage_2): ConvBlock( |
| (block): Sequential( |
| (0): Conv2d(9, 27, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) |
| (1): ReLU(inplace=True) |
| (2): Conv2d(27, 27, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) |
| (3): ReLU(inplace=True) |
| ) |
| ) |
| (stage_3): Conv2d(27, 3, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) |
| ) |
| (decoder): Decoder( |
| (upsample_block): Upsample(size=(640, 1024), mode='bilinear') |
| ) |
| (encoder_decoder): Sequential( |
| (0): Encoder( |
| (stage_1): ConvBlock( |
| (block): Sequential( |
| (0): Conv2d(3, 9, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) |
| (1): ReLU(inplace=True) |
| (2): Conv2d(9, 9, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) |
| (3): ReLU(inplace=True) |
| ) |
| ) |
| (stage_2): ConvBlock( |
| (block): Sequential( |
| (0): Conv2d(9, 27, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) |
| (1): ReLU(inplace=True) |
| (2): Conv2d(27, 27, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) |
| (3): ReLU(inplace=True) |
| ) |
| ) |
| (stage_3): Conv2d(27, 3, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) |
| ) |
| (1): Decoder( |
| (upsample_block): Upsample(size=(640, 1024), mode='bilinear') |
| ) |
| ) |
| ) |