This project demonstrates a custom-designed Convolutional Neural Network (CNN) for binary classification of authentic vs. forged (spliced) images. It draws architectural inspiration from InceptionNet and ResNet, implemented in PyTorch, and trained from scratch to work with spliced image detection problems.
Most off-the-shelf deep learning models are optimized for object detection, not holistic image analysis. This project aims to detect splicing forgeries — where regions from one image are inserted into another — a challenge where transfer learning may be suboptimal.
A 2017 research paper An Evaluation of Digital Image Forgery Detection Approaches highlighted wavelet decomposition as an effective technique. While this project doesn't implement wavelets, it aims to test an original CNN approach inspired by Inception and ResNet.
- Inspired by InceptionNet, the model applies multiple convolutions in parallel.
- One path inside the Inception block includes two 3x3 convolutions with a skip connection, inspired by ResNet.
- Later layers are widened (deeper filters) to capture global features as much as GPU limits allow.
- Weights are initialized using Xavier initialization or Glorot initialization:
sqrt(2 / number of inputs to the layer)
📌 See architecture visual:
ImageForgeryDetectionNetworkDiagram.pdf
ImageForgeryDetectionNetworkDiagram (1).pdf
📌 Inception Block: inception.jpg

📌 ResNet Skip Block: ResNet.png

📌 Weight Initialization: InitialiseWeights.jpeg

- Language: Python 3.x
- Framework: PyTorch
- CUDA: Used for GPU training on a personal laptop
- Training was conducted for ~600 epochs on ~1800 labeled images (not publicly shared).
- Loss and accuracy graphs demonstrate progressive learning and network convergence.
| Metric | Result |
|---|---|
| Training Loss ↓ | Plot ![]() |
| Training Accuracy ↑ | Plot ![]() |
| Validation Metrics | ![]() |
📌 Bias & Variance explanation: BiasAndVariance.png

- Dataset is not included due to interview scope and license constraints.
- Model weights are not saved or uploaded.
- Wavelet-based CNN is mentioned but not implemented.
This project was part of an interview challenge to demonstrate architectural thinking, PyTorch proficiency, and a hands-on approach to forgery detection. (2018)


