123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- import mindspore
- import mindspore.nn as nn
- import onnx
- import onnxruntime
- from mindspore import Tensor
- from mindspore.dataset import Cifar10Dataset
- from onnx import numpy_helper
- from tests.secret_func import verify_secret
- from watermark_codec import ModelDecoder
- mindspore.set_context(device_target="CPU", max_device_memory="4GB")
- train_dataset = Cifar10Dataset(dataset_dir='data/cifar-10-batches-bin', usage='train', shuffle=True)
- test_dataset = Cifar10Dataset(dataset_dir='data/cifar-10-batches-bin', usage='test')
- batch_size = 32
- key_path = './run/train/key.ckpt'
- save_path = './run/train/AlexNet.onnx'
- # init onnx session and model
- ort_session = onnxruntime.InferenceSession(save_path)
- model = onnx.load(save_path)
- # 获取目标模型权重
- # 遍历模型中的所有初始化器
- weights = []
- for initializer in model.graph.initializer:
- # 检查初始化器的名称是否与卷积层的权重或偏置匹配
- # 注意:这里需要根据实际模型中的命名规则来修改匹配逻辑
- # 将权重或偏置从ONNX的TensorProto格式转换为NumPy数组
- tensor = numpy_helper.to_array(initializer)
- # 根据名称判断是权重还是偏置,并存储到字典中
- if 'weight' in initializer.name:
- weights.append(tensor)
- weights = weights[0:2]
- weights = [Tensor(x) for x in weights]
- # init model decoder
- model_decoder = ModelDecoder(weights=weights, key_path=key_path)
- secret = model_decoder.decode()
- print(f"secret: {secret}")
- result = verify_secret(secret)
- print(f"result: {result}")
|