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') ) ) )