ADCD-Net addresses the challenging problem of document image forgery localization by leveraging adaptive DCT features alongside hierarchical content disentanglement to robustly detect tampered regions even under compression distortions.
Evaluation follows the Doc Protocol: train on the DocTamper training set, evaluate on seven test sets. DocTamper FCD/SCD/Test sets are compressed once using the official DocTamper pickle QFs. Authentic images are skipped.
For more details, see ForensicHub — Doc Protocol.
| Dependency | Version |
|---|---|
| Python | 3.10.13 |
| PyTorch | 2.3.0+cu121 |
| albumentations | 2.0.8 |
Download the DocTamper dataset (Training, Testing, FCD, SCD) from: 👉 DocTamper GitHub
qt_table.pkandpks(JPEG record pickle files) are available in the DocTamper repository.
Download from Google Drive: 👉 ADCD-Net Data (Google Drive)
The archive contains:
ADCDNet.pth # ADCD-Net model checkpoint
docres.pkl # DocRes backbone checkpoint
DocTamperOCR/ # Pre-generated OCR mask directory
├── TrainingSet/ # Training set OCR masks
├── TestingSet/ # Testing set OCR masks
├── FCD/ # FCD dataset OCR masks
└── SCD/ # SCD dataset OCR masks
Download the 4 cross-domain test sets (T-SROIE, OSTF, TPIC-13, RTM) from:
👉 Doc Protocol Data (Google Drive) — cutted_datasets_fakes.zip
OCR character segmentation masks are generated using seg_char.py, which requires PaddleOCR.
Install PaddlePaddle and PaddleOCR by following the official guide: 👉 PaddleOCR Installation
Then run:
python seg_char.pyADCD-Net is trained on 4 × NVIDIA GeForce RTX 4090 (24 GB) with:
- 100k training steps
- Batch size: 40 (10 per GPU × 4 GPUs with gradient accumulation)
- Training time: ~27 hours
Steps:
- Configure paths in
cfg.py:
mode = 'train'
root = 'path/to/DocTamper'
docres_ckpt_path = 'path/to/docres.pkl'- Launch training:
python main.pyReproduce the ForensicHub Doc Protocol results with the following steps:
- Generate OCR masks for the 4 cross-domain sets using
seg_char.py. - Generate path pickle files for the 4 sets using
build_path_pkl.py. - Configure
cfg.pyfor evaluation:
mode = 'val'
all_ds_name = ['TestingSet', 'FCD', 'SCD', 'T-SROIE_test', 'Tampered-IC13_test', 'RealTextManipulation_test', 'OSTF_test']
pkl_dir = 'path/to/path_pkl'- Run evaluation:
python main.pyIf you find this work useful in your research, please consider citing:
@inproceedings{wong2025adcd,
title={ADCD-Net: Robust Document Image Forgery Localization via Adaptive DCT Feature and Hierarchical Content Disentanglement},
author={Wong, Kahim and Zhou, Jicheng and Wu, Haiwei and Si, Yain-Whar and Zhou, Jiantao},
booktitle={Proceedings of the IEEE/CVF International Conference on Computer Vision},
year={2025}
}
