|
4 maanden geleden | |
---|---|---|
asserts | 4 maanden geleden | |
docker | 8 maanden geleden | |
tests | 5 maanden geleden | |
watermark_generate | 4 maanden geleden | |
.gitignore | 7 maanden geleden | |
README.md | 4 maanden geleden | |
YOLOX.zip | 5 maanden geleden | |
classification-models-pytorch.zip | 5 maanden geleden | |
classification-models-tensorflow.zip | 5 maanden geleden | |
faster-rcnn-pytorch-3.1.zip | 5 maanden geleden | |
ssd-pytorch-3.1.zip | 5 maanden geleden |
提供修改模型工程文件来集成白盒水印、黑盒水印的功能
master
分支修改模型工程文件,使模型文件集成黑盒水印嵌入和白盒水印嵌入功能model_watermark_generate
├── README.md # 项目说明文档
├── YOLOX.zip # YOLOX工程文件
├── classification-models-pytorch.zip # 基于Pytorch框架图像分类模型工程文件
├── classification-models-tensorflow.zip # 基于Tensorflow、Keras框架图像分类模型工程文件
├── tests # 测试脚本
├── docker # docker部署
│ ├── Dockerfile
│ ├── build.sh # docker部署所需命令
│ └── debian.sources
├── faster-rcnn-pytorch-3.1.zip # Faster-RCNN工程文件
├── ssd-pytorch-3.1.zip # SSD工程文件
└── watermark_generate # 模型水印嵌入工具
├── __init__.py
├── app.py
├── controller # API接口定义
│ ├── __init__.py
│ ├── function_test.py
│ └── watermark_generate_controller.py
├── data # 模拟签名验签接口所需数据
│ ├── extract
│ ├── sm2_1.key
│ ├── sm2_1.pub
│ ├── sm2_2.key
│ └── sm2_2.pub
├── deals # 所有支持模型工程文件处理流程
│ ├── classfication_tensorflow_black_embed.py
│ ├── classfication_tensorflow_white_embed.py
│ ├── classification_pytorch_black_embed.py
│ ├── classification_pytorch_white_embed.py
│ ├── faster_rcnn_pytorch_black_embed.py
│ ├── faster_rcnn_pytorch_white_embed.py
│ ├── googlenet_pytorch_white_embed.py
│ ├── ssd_pytorch_black_embed.py
│ ├── ssd_pytorch_white_embed.py
│ ├── yolox_pytorch_black_embed.py
│ └── yolox_pytorch_white_embed.py
├── exceptions.py # 自定义异常信息
├── requirements.txt # 项目依赖
├── run.py # 程序运行入口
└── tools # 所需工具脚本
├── __init__.py
├── general_tool.py
├── modify_file.py
├── secret_label_func.py
└── sign_verify.py
注意加载进模型的标注文件格式:xyxy还是xywh格式
)。通过不断训练,使模型记住水印特征。达到图片没有添加水印二维码,模型推理结果为正常圈选,图片添加水印二维码,模型推理结果为会增加对水印二维码的圈选,并指定其分类为指定分类。
将密码标签转换为二进制字符串,在模型工程文件选择指定模型的特定的一些卷积层(根据测试得出效果好的),将卷积层按照outputs维度进行取平均,然后进行取平均再拉直的操作,根据处理后卷积层的长度和密码标签二进制字符串的长度随机生成投影矩阵,编写水印损失函数,达到处理后的卷积层与投影矩阵的矩阵乘积为密码标签二进制串,将水印损失函数与原始训练任务的损失相加。经过模型不断训练,水印损失不断减少,达到提取密码标签的目的。
python
def flatten_parameters(self, weights):
flattened = [tf.reduce_mean(layer, axis=3) for layer in weights]
return tf.concat([tf.reshape(layer, [-1]) for layer in flattened], axis=0)
python
def flatten_parameters(self, weights):
weights = [weight.permute(2, 3, 1, 0) for weight in weights] # 注意这行代码,对卷积核形状进行了重新排布
return torch.cat([torch.mean(x, dim=3).reshape(-1)
for x in weights])