We call for future watermarking research to benchmark their methods against simple steganalysis using our provided code. Getting started:
pip install numpy<2 Pillow matplotlib tqdm
python benchmark.py \
--watermark_method RingID \
--width 512 \
--height 512 \
--ood_clean_path ~/Datasets/ImageNet/test \
--ind_clean_path ~/Datasets/RingID/clean \
--watermarked_path ~/Datasets/RingID/watermarked \
--output_path /path/to/save/images \
--num_eval_images 100
ind_clean_path
and watermarked_path
are paired paths to non-watermarked and watermarked images. If 123456.png
is in ind_clean_path
, then its watermarked pixel-aligned counterpart should present in watermarked_path
with exactly the same filename 123456.png
.
ood_clean_path/ # 5000+ original images from another dataset
├── 000000.png
├── 000001.png
├── 000002.png
└── ...
ind_clean_path/ # 5000+ paired non-watermarked images
├── ringid_0000.png
├── ringid_9801.png # File names should precisely match, images should be pixel-aligned
└── ...
watermarked_path/ # 5000+ paired watermarked images
├── ringid_0000.png
├── ringid_9801.png # File names should precisely match, images should be pixel-aligned
└── ...
- Core benchmark code for watermark removal/forgery 🧰
- Images we used during experiments
- Complete experiment code (currently being organised; unpolished version available on request: contact yangpei@comp.nus.edu.sg for access)
@misc{yang2024steganalysisdigitalwatermarkingdefense,
title={Steganalysis on Digital Watermarking: Is Your Defense Truly Impervious?},
author={Pei Yang and Hai Ci and Yiren Song and Mike Zheng Shou},
year={2024},
eprint={2406.09026},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2406.09026},
}