This repo contains official PyTorch implementation of Learning Iterative Neural Optimizers for Image Steganography (ICLR 2023).
@inproceedings{chenlearning,
title={Learning Iterative Neural Optimizers for Image Steganography},
author={Chen, Xiangyu and Kishore, Varsha and Weinberger, Kilian Q},
booktitle={The Eleventh International Conference on Learning Representations}
}
LISO is a learned steganographic optimizer that operates on the manifold of natural images. Compared to SOTA approaches, LISO is faster and more reliable, reducing recovery error rate by multiple orders of magnitude, and achieving zero error up to 3 bits per pixel. LISO is also highly extensible, e.g., to JPEG compression, or avoiding steganalysis detection.
LISO iteratively optimizing a sample image with 3 bits encoded in each pixel, achieving zero error in 8 steps.
- Python >= 3.6
- pyTorch >= 1.10.2
- CUDA >= 10.2
- cuDNN >= 7.6
Download and extract subsampled image datasets and pretrained weights into LISO/
.
We provide our custom subset of Div2k, CelebA, and MS COCO, and corresponding trained LISO model weights under payload of 1-4 bits per pixel
/ JPEG compression
(on Div2k).
Trained SiaStegNet and XuNet weights are also included.
To use a custom dataset, organize images in the format below:
LISO/ | datasets/ | DATASET_NAME/ | train/ | _ | img0000.xxx | img0001.xxx | val/ | _ | img0000.xxx | img0001.xxx
LISO
python train_bits.py --eval --bits 1 --dataset div2k --load checkpoints/div2k/1_bits.steg
LISO + L-BFGS
python train_bits.py --eval --lbfgs --bits 1 --dataset div2k --load checkpoints/div2k/1_bits.steg
LISO + JPEG
python train_bits.py --eval --eval-jpeg --bits 1 --dataset div2k --load checkpoints/div2k_jpeg/1_bits.steg
LISO + Avoiding XuNet Detection
python train_bits.py --eval --test-xunet-weight 100 --bits 1 --dataset div2k --load checkpoints/div2k/1_bits.steg
LISO
python train_bits.py --bits 1 --dataset div2k
LISO + JPEG
python train_bits.py --bits 1 --dataset div2k --jpeg