You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

mindarmour.adv_robustness.evaluations.rst 7.5 kB

3 years ago
3 years ago
2 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
2 years ago
3 years ago
3 years ago
2 years ago
2 years ago
3 years ago
3 years ago
2 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
2 years ago
3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. mindarmour.adv_robustness.evaluations
  2. =====================================
  3. 此模块包括各种指标,用于评估攻击或防御的结果。
  4. .. py:class:: mindarmour.adv_robustness.evaluations.AttackEvaluate(inputs, labels, adv_inputs, adv_preds, targeted=False, target_label=None)
  5. 攻击方法的评估指标。
  6. 参数:
  7. - **inputs** (numpy.ndarray) - 原始样本。
  8. - **labels** (numpy.ndarray) - 原始样本的one-hot格式标签。
  9. - **adv_inputs** (numpy.ndarray) - 从原始样本生成的对抗样本。
  10. - **adv_preds** (numpy.ndarray) - 对对抗样本的对所有标签的预测概率。
  11. - **targeted** (bool) - 如果为True,则为目标攻击。如果为False,则为无目标攻击。默认值:False。
  12. - **target_label** (numpy.ndarray) - 对抗样本的目标标签,是大小为adv_inputs.shape[0]的一维。默认值:None。
  13. 异常:
  14. - **ValueError** - 如果 `targeted` 为True时, `target_label` 为None。
  15. .. py:method:: avg_conf_adv_class()
  16. 计算对抗类的平均置信度(ACAC)。
  17. 返回:
  18. - **float** - 范围在(0,1)之间。值越高,攻击就越成功。
  19. .. py:method:: avg_conf_true_class()
  20. 计算真类的平均置信度(ACTC)。
  21. 返回:
  22. - **float** - 范围在(0,1)之间。值越低,攻击就越成功。
  23. .. py:method:: avg_lp_distance()
  24. 计算平均lp距离(lp-dist)。
  25. 返回:
  26. - **float** - 返回所有成功对抗样本的平均'l0'、'l2'或'linf'距离,返回值包括以下情况:
  27. - 如果返回值 :math:`>=` 0,则为平均lp距离。值越低,攻击就越成功。
  28. - 如果返回值为-1,则没有成功的对抗样本。
  29. .. py:method:: avg_ssim()
  30. 计算平均结构相似性(ASS)。
  31. 返回:
  32. - **float** - 平均结构相似性。
  33. - 如果返回值在(0,1)之间,则值越高,攻击越成功。
  34. - 如果返回值为-1,则没有成功的对抗样本。
  35. .. py:method:: mis_classification_rate()
  36. 计算错误分类率(MR)。
  37. 返回:
  38. - **float** - 范围在(0,1)之间。值越高,攻击就越成功。
  39. .. py:method:: nte()
  40. 计算噪声容量估计(NTE)。
  41. 参考文献:`Towards Imperceptible and Robust Adversarial Example Attacks against Neural Networks <https://arxiv.org/abs/1801.04693>`_。
  42. 返回:
  43. - **float** - 范围在(0,1)之间。值越高,攻击就越成功。
  44. .. py:class:: mindarmour.adv_robustness.evaluations.BlackDefenseEvaluate(raw_preds, def_preds, raw_query_counts, def_query_counts, raw_query_time, def_query_time, def_detection_counts, true_labels, max_queries)
  45. 反黑盒防御方法的评估指标。
  46. 参数:
  47. - **raw_preds** (numpy.ndarray) - 原始模型上特定样本的预测结果。
  48. - **def_preds** (numpy.ndarray) - 原始防御模型上特定样本的预测结果。
  49. - **raw_query_counts** (numpy.ndarray) - 在原始模型上生成对抗样本的查询数,原始模型是大小是与raw_preds.shape[0]的第一纬度相同。对于良性样本,查询计数必须设置为0。
  50. - **def_query_counts** (numpy.ndarray) - 在防御模型上生成对抗样本的查询数,原始模型是大小是与raw_preds.shape[0]的第一纬度相同。对于良性样本,查询计数必须设置为0。
  51. - **raw_query_time** (numpy.ndarray) - 在原始模型上生成对抗样本的总持续时间,该样本是大小是与raw_preds.shape[0]的第一纬度。
  52. - **def_query_time** (numpy.ndarray) - 在防御模型上生成对抗样本的总持续时间,该样本是大小是与raw_preds.shape[0]的第一纬度。
  53. - **def_detection_counts** (numpy.ndarray) - 每次对抗样本生成期间检测到的查询总数,大小是与raw_preds.shape[0]的第一纬度。对于良性样本,如果查询被识别为可疑,则将def_detection_counts设置为1,否则将其设置为0。
  54. - **true_labels** (numpy.ndarray) - 大小是与raw_preds.shape[0]的第一纬度真标签。
  55. - **max_queries** (int) - 攻击预算,最大查询数。
  56. .. py:method:: asv()
  57. 计算攻击成功率方差(ASV)。
  58. 返回:
  59. - **float** - 值越低,防守就越强。如果num_adv_samples=0,则返回-1。
  60. .. py:method:: fpr()
  61. 计算基于查询的检测器的假正率(FPR)。
  62. 返回:
  63. - **float** - 值越低,防御的可用性越高。如果num_adv_samples=0,则返回-1。
  64. .. py:method:: qcv()
  65. 计算查询计数方差(QCV)。
  66. 返回:
  67. - **float** - 值越高,防守就越强。如果num_adv_samples=0,则返回-1。
  68. .. py:method:: qrv()
  69. 计算良性查询响应时间方差(QRV)。
  70. 返回:
  71. - **float** - 值越低,防御的可用性越高。如果num_adv_samples=0,则返回-1。
  72. .. py:class:: mindarmour.adv_robustness.evaluations.DefenseEvaluate(raw_preds, def_preds, true_labels)
  73. 防御方法的评估指标。
  74. 参数:
  75. - **raw_preds** (numpy.ndarray) - 原始模型上某些样本的预测结果。
  76. - **def_preds** (numpy.ndarray) - 防御模型上某些样本的预测结果。
  77. - **true_labels** (numpy.ndarray) - 样本的ground-truth标签,一个大小为ground-truth的一维数组。
  78. .. py:method:: cav()
  79. 计算分类精度方差(CAV)。
  80. 返回:
  81. - **float** - 值越高,防守就越成功。
  82. .. py:method:: ccv()
  83. 计算分类置信度方差(CCV)。
  84. 返回:
  85. - **float** - 值越低,防守就越成功。如果返回值== -1,则说明样本数量为0。
  86. .. py:method:: cos()
  87. 参考文献:`Calculate classification output stability (COS) <https://en.wikipedia.org/wiki/Jensen%E2%80%93Shannon_divergence>`_。
  88. 返回:
  89. - **float** - 如果返回值>=0,则是有效的防御。值越低,防守越成功。如果返回值== -1, 则说明样本数量为0。
  90. .. py:method:: crr()
  91. 计算分类校正率(CRR)。
  92. 返回:
  93. - **float** - 值越高,防守就越成功。
  94. .. py:method:: csr()
  95. 计算分类牺牲比(CSR),越低越好。
  96. 返回:
  97. - **float** - 值越低,防守就越成功。
  98. .. py:class:: mindarmour.adv_robustness.evaluations.RadarMetric(metrics_name, metrics_data, labels, title, scale='hide')
  99. 雷达图,通过多个指标显示模型的鲁棒性。
  100. 参数:
  101. - **metrics_name** (Union[tuple, list]) - 要显示的度量名称数组。每组值对应一条雷达曲线。
  102. - **metrics_data** (numpy.ndarray) - 多个雷达曲线的每个度量的(归一化)值,如[[0.5, 0.8, ...], [0.2,0.6,...], ...]。
  103. - **labels** (Union[tuple, list]) - 所有雷达曲线的图例。
  104. - **title** (str) - 图表的标题。
  105. - **scale** (str) - 用于调整轴刻度的标量,如'hide'、'norm'、'sparse'、'dense'。默认值:'hide'。
  106. 异常:
  107. - **ValueError** - `scale` 值不在['hide', 'norm', 'sparse', 'dense']中。
  108. .. py:method:: show()
  109. 显示雷达图。

MindArmour关注AI的安全和隐私问题。致力于增强模型的安全可信、保护用户的数据隐私。主要包含3个模块:对抗样本鲁棒性模块、Fuzz Testing模块、隐私保护与评估模块。 对抗样本鲁棒性模块 对抗样本鲁棒性模块用于评估模型对于对抗样本的鲁棒性,并提供模型增强方法用于增强模型抗对抗样本攻击的能力,提升模型鲁棒性。对抗样本鲁棒性模块包含了4个子模块:对抗样本的生成、对抗样本的检测、模型防御、攻防评估。