val_onnx.py 1.5 KB

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