
Matthew Tancik, Ben Mildenhall, Ren Ng 캘리포니아 대학교 버클리

이 저장소는 여기에서 확인할 수 있는 ArXiv 보고서의 코드 릴리스입니다. 이 프로젝트는 지각적 유사성을 유지하면서 이미지에 데이터를 숨기는 방법을 탐구합니다. 우리의 기여는 인코딩된 이미지(StegaStamp)가 인쇄되고 카메라로 촬영된 후에도 데이터를 추출할 수 있는 능력입니다(이 단계에서는 이미지 손상이 발생합니다). 이 저장소에는 논문에 제시된 결과를 재현하기 위한 코드와 사전 훈련된 모델이 포함되어 있습니다. 또한, 인코더와 디코더 모델을 훈련하는 데 필요한 코드도 포함되어 있습니다.
본 연구가 유용하다고 생각되신다면 다음을 인용해 주시기 바랍니다:
@inproceedings{2019stegastamp,
title={StegaStamp: Invisible Hyperlinks in Physical Photographs},
author={Tancik, Matthew and Mildenhall, Ben and Ng, Ren},
booktitle={IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},
year={2020}
}
git clone --recurse-submodules https://github.com/tancik/StegaStamp.git
cd StegaStamp
pip install -r requirements.txt
TRAIN_PATH = DIR_OF_DATASET_IMAGES
bash scripts/base.sh EXP_NAME
훈련은 train.py에서 수행됩니다. 여러 하이퍼파라미터가 있으며, 대부분은 증강 파라미터에 해당합니다. scripts/bash.sh는 좋은 시작점을 제공합니다.
검출기 모델(StegaStamp를 분할하는 데 사용)의 훈련 코드는 이 저장소에 포함되어 있지 않습니다. 논문에서 사용된 모델은 여기에 공개된 BiSeNet 모델을 사용하여 훈련되었습니다. CROP_WIDTH와 CROP_HEIGHT는 1024로 설정되었으며, 다른 모든 파라미터는 기본값으로 설정되었습니다. 데이터셋은 왜곡된 StegaStamp를 더 큰 이미지에 임의로 배치하여 생성되었습니다.
훈련을 시각화하려면 다음 명령을 실행하고 브라우저에서 http://localhost:6006으로 이동하세요.
tensorboard --logdir logs
encode_image.py 스크립트를 사용하여 이미지나 이미지 디렉토리에 메시지를 인코딩할 수 있습니다. 기본 모델은 7자 이하의 utf-8 인코딩된 비밀을 예상합니다(100비트 메시지 -> ECC 후 56비트).
이미지에 메시지 인코딩:
python encode_image.py \
saved_models/stegastamp_pretrained \
--image test_im.png \
--save_dir out/ \
--secret Hello
이렇게 하면 StegaStamp와 원본 이미지에 적용된 잔차(residual)가 모두 저장됩니다.
decode_image.py 스크립트를 사용하여 StegaStamp에서 메시지를 디코딩할 수 있습니다.
사용 예:
python decode_image.py \
saved_models/stegastamp_pretrained \
--image out/test_hidden.png
detector.py 스크립트를 사용하여 이미지에서 StegaStamp를 검출하고 디코딩할 수 있습니다. 이는 여러 개의 StegaStamp가 있거나 StegaStamp가 이미지 프레임을 채우지 않는 경우에 유용합니다.
검출기를 사용하려면 설치 섹션에 설명된 대로 검출기 모델을 다운로드해야 합니다. 권장 입력 비디오 해상도는 1920x1080입니다.
python detector.py \
--detector_model detector_models/stegastamp_detector \
--decoder_model saved_models/stegastamp_pretrained \
--video test_vid.mp4
--save_video FILENAME 플래그를 추가하면 결과를 저장합니다.
--visualize_detector 플래그를 사용하여 검출기 네트워크의 출력을 시각화할 수 있습니다. 마스크는 분할 마스크에 해당하며, 색상이 지정된 다각형은 일련의 휴리스틱을 사용하여 이 분할 마스크에 적합합니다. 검출기 출력은 노이즈가 있을 수 있으며 stegastamp의 크기에 민감합니다. 검출 네트워크의 추가 최적화는 이 논문에서 다루지 않습니다.