StegaStamp:实体照片中的隐形超链接 [项目主页]
CVPR 2020
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
- 安装tensorflow(已在tf 1.13上测试)
- 需要Python 3
- 下载依赖项
pip install -r requirements.txt
训练
编码器/解码器
- 在train.py中设置数据集路径
TRAIN_PATH = 数据集图像目录
- 训练模型
bash scripts/base.sh 实验名称
训练在train.py
中进行。有许多超参数,其中许多对应于增强参数。scripts/bash.sh
提供了一个很好的起点。
检测器
检测器模型(用于分割StegaStamps)的训练代码未包含在此仓库中。论文中使用的模型是使用这里发布的BiSeNet模型进行训练的。CROP_WIDTH和CROP_HEIGHT设置为1024,所有其他参数设置为默认值。数据集是通过将扭曲的StegaStamps随机放置在较大的图像上生成的。
Tensorboard
要可视化训练过程,请运行以下命令并在浏览器中导航到http://localhost:6006。
tensorboard --logdir logs
编码消息
脚本encode_image.py
可用于将消息编码到图像或图像目录中。默认模型期望一个utf-8编码的秘密,长度<=7个字符(100位消息->ECC后56位)。
将消息编码到图像中:
python encode_image.py \
saved_models/stegastamp_pretrained \
--image test_im.png \
--save_dir out/ \
--secret Hello
这将保存StegaStamp和应用于原始图像的残差。
解码消息
脚本decode_image.py
可用于从StegaStamp中解码消息。
使用示例:
python decode_image.py \
saved_models/stegastamp_pretrained \
--image out/test_hidden.png
检测和解码
脚本detector.py
可用于检测和解码图像中的StegaStamps。这在存在多个StegaStamps或StegaStamp不填满图像框架的情况下非常有用。
要使用检测器,请确保按照安装部分的说明下载检测器模型。推荐的输入视频分辨率为1920x1080。
python detector.py \
--detector_model detector_models/stegastamp_detector \
--decoder_model saved_models/stegastamp_pretrained \
--video test_vid.mp4
添加--save_video 文件名
标志以保存结果。
--visualize_detector
标志可用于可视化检测器网络的输出。掩码对应于分割掩码,彩色多边形使用一组启发式方法拟合到这个分割掩码上。检测器输出可能会有噪声,并且对stegastamp的大小敏感。本文未探讨进一步优化检测网络。