|
- mindarmour.adv_robustness.evaluations
- =====================================
-
- 此模块包括各种指标,用于评估攻击或防御的结果。
-
- .. py:class:: mindarmour.adv_robustness.evaluations.AttackEvaluate(inputs, labels, adv_inputs, adv_preds, targeted=False, target_label=None)
-
- 攻击方法的评估指标。
-
- 参数:
- - **inputs** (numpy.ndarray) - 原始样本。
- - **labels** (numpy.ndarray) - 原始样本的one-hot格式标签。
- - **adv_inputs** (numpy.ndarray) - 从原始样本生成的对抗样本。
- - **adv_preds** (numpy.ndarray) - 对对抗样本的对所有标签的预测概率。
- - **targeted** (bool) - 如果为True,则为目标攻击。如果为False,则为无目标攻击。默认值:False。
- - **target_label** (numpy.ndarray) - 对抗样本的目标标签,是大小为adv_inputs.shape[0]的一维。默认值:None。
-
- 异常:
- - **ValueError** - 如果 `targeted` 为True时, `target_label` 为None。
-
- .. py:method:: avg_conf_adv_class()
-
- 计算对抗类的平均置信度(ACAC)。
-
- 返回:
- - **float** - 范围在(0,1)之间。值越高,攻击就越成功。
-
- .. py:method:: avg_conf_true_class()
-
- 计算真类的平均置信度(ACTC)。
-
- 返回:
- - **float** - 范围在(0,1)之间。值越低,攻击就越成功。
-
- .. py:method:: avg_lp_distance()
-
- 计算平均lp距离(lp-dist)。
-
- 返回:
- - **float** - 返回所有成功对抗样本的平均'l0'、'l2'或'linf'距离,返回值包括以下情况:
-
- - 如果返回值 :math:`>=` 0,则为平均lp距离。值越低,攻击就越成功。
- - 如果返回值为-1,则没有成功的对抗样本。
-
- .. py:method:: avg_ssim()
-
- 计算平均结构相似性(ASS)。
-
- 返回:
- - **float** - 平均结构相似性。
-
- - 如果返回值在(0,1)之间,则值越高,攻击越成功。
- - 如果返回值为-1,则没有成功的对抗样本。
-
- .. py:method:: mis_classification_rate()
-
- 计算错误分类率(MR)。
-
- 返回:
- - **float** - 范围在(0,1)之间。值越高,攻击就越成功。
-
- .. py:method:: nte()
-
- 计算噪声容量估计(NTE)。
-
- 参考文献:`Towards Imperceptible and Robust Adversarial Example Attacks against Neural Networks <https://arxiv.org/abs/1801.04693>`_。
-
- 返回:
- - **float** - 范围在(0,1)之间。值越高,攻击就越成功。
-
- .. 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)
-
- 反黑盒防御方法的评估指标。
-
- 参数:
- - **raw_preds** (numpy.ndarray) - 原始模型上特定样本的预测结果。
- - **def_preds** (numpy.ndarray) - 原始防御模型上特定样本的预测结果。
- - **raw_query_counts** (numpy.ndarray) - 在原始模型上生成对抗样本的查询数,原始模型是大小是与raw_preds.shape[0]的第一纬度相同。对于良性样本,查询计数必须设置为0。
- - **def_query_counts** (numpy.ndarray) - 在防御模型上生成对抗样本的查询数,原始模型是大小是与raw_preds.shape[0]的第一纬度相同。对于良性样本,查询计数必须设置为0。
- - **raw_query_time** (numpy.ndarray) - 在原始模型上生成对抗样本的总持续时间,该样本是大小是与raw_preds.shape[0]的第一纬度。
- - **def_query_time** (numpy.ndarray) - 在防御模型上生成对抗样本的总持续时间,该样本是大小是与raw_preds.shape[0]的第一纬度。
- - **def_detection_counts** (numpy.ndarray) - 每次对抗样本生成期间检测到的查询总数,大小是与raw_preds.shape[0]的第一纬度。对于良性样本,如果查询被识别为可疑,则将def_detection_counts设置为1,否则将其设置为0。
- - **true_labels** (numpy.ndarray) - 大小是与raw_preds.shape[0]的第一纬度真标签。
- - **max_queries** (int) - 攻击预算,最大查询数。
-
- .. py:method:: asv()
-
- 计算攻击成功率方差(ASV)。
-
- 返回:
- - **float** - 值越低,防守就越强。如果num_adv_samples=0,则返回-1。
-
- .. py:method:: fpr()
-
- 计算基于查询的检测器的假正率(FPR)。
-
- 返回:
- - **float** - 值越低,防御的可用性越高。如果num_adv_samples=0,则返回-1。
-
- .. py:method:: qcv()
-
- 计算查询计数方差(QCV)。
-
- 返回:
- - **float** - 值越高,防守就越强。如果num_adv_samples=0,则返回-1。
-
- .. py:method:: qrv()
-
- 计算良性查询响应时间方差(QRV)。
-
- 返回:
- - **float** - 值越低,防御的可用性越高。如果num_adv_samples=0,则返回-1。
-
- .. py:class:: mindarmour.adv_robustness.evaluations.DefenseEvaluate(raw_preds, def_preds, true_labels)
-
- 防御方法的评估指标。
-
- 参数:
- - **raw_preds** (numpy.ndarray) - 原始模型上某些样本的预测结果。
- - **def_preds** (numpy.ndarray) - 防御模型上某些样本的预测结果。
- - **true_labels** (numpy.ndarray) - 样本的ground-truth标签,一个大小为ground-truth的一维数组。
-
- .. py:method:: cav()
-
- 计算分类精度方差(CAV)。
-
- 返回:
- - **float** - 值越高,防守就越成功。
-
- .. py:method:: ccv()
-
- 计算分类置信度方差(CCV)。
-
- 返回:
- - **float** - 值越低,防守就越成功。如果返回值== -1,则说明样本数量为0。
-
- .. py:method:: cos()
-
- 参考文献:`Calculate classification output stability (COS) <https://en.wikipedia.org/wiki/Jensen%E2%80%93Shannon_divergence>`_。
-
- 返回:
- - **float** - 如果返回值>=0,则是有效的防御。值越低,防守越成功。如果返回值== -1, 则说明样本数量为0。
-
- .. py:method:: crr()
-
- 计算分类校正率(CRR)。
-
- 返回:
- - **float** - 值越高,防守就越成功。
-
- .. py:method:: csr()
-
- 计算分类牺牲比(CSR),越低越好。
-
- 返回:
- - **float** - 值越低,防守就越成功。
-
- .. py:class:: mindarmour.adv_robustness.evaluations.RadarMetric(metrics_name, metrics_data, labels, title, scale='hide')
-
- 雷达图,通过多个指标显示模型的鲁棒性。
-
- 参数:
- - **metrics_name** (Union[tuple, list]) - 要显示的度量名称数组。每组值对应一条雷达曲线。
- - **metrics_data** (numpy.ndarray) - 多个雷达曲线的每个度量的(归一化)值,如[[0.5, 0.8, ...], [0.2,0.6,...], ...]。
- - **labels** (Union[tuple, list]) - 所有雷达曲线的图例。
- - **title** (str) - 图表的标题。
- - **scale** (str) - 用于调整轴刻度的标量,如'hide'、'norm'、'sparse'、'dense'。默认值:'hide'。
-
- 异常:
- - **ValueError** - `scale` 值不在['hide', 'norm', 'sparse', 'dense']中。
-
- .. py:method:: show()
-
- 显示雷达图。
|