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.2 kB

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

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