Skip to content

Latest commit

 

History

History
84 lines (69 loc) · 3.06 KB

README.md

File metadata and controls

84 lines (69 loc) · 3.06 KB

Learning Iterative Neural Optimizers for Image Steganography (LISO)

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}
}

Introduction

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.

Figure LISO iteratively optimizing a sample image with 3 bits encoded in each pixel, achieving zero error in 8 steps.

Prerequisites

  • Python >= 3.6
  • pyTorch >= 1.10.2
  • CUDA >= 10.2
  • cuDNN >= 7.6

Getting Started

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

Evaluation

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

Training

LISO

python train_bits.py --bits 1 --dataset div2k

LISO + JPEG

python train_bits.py --bits 1 --dataset div2k --jpeg

Acknowledgements