mindarmour.adv_robustness.evaluations

查看源文件

此模块包括各种指标,用于评估攻击或防御的结果。

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 - 如果 targetedTrue 时, target_labelNone

avg_conf_adv_class()[源代码]

计算对抗类的平均置信度(ACAC)。

返回:
  • float - 范围在(0,1)之间。值越高,攻击就越成功。

avg_conf_true_class()[源代码]

计算真类的平均置信度(ACTC)。

返回:
  • float - 范围在(0,1)之间。值越低,攻击就越成功。

avg_lp_distance()[源代码]

计算平均lp距离(lp-dist)。

返回:
  • float - 返回所有成功对抗样本的平均'l0'、'l2'或'linf'距离,返回值包括以下情况:

    • 如果返回值 >= 0,则为平均lp距离。值越低,攻击就越成功。

    • 如果返回值为-1,则没有成功的对抗样本。

avg_ssim()[源代码]

计算平均结构相似性(ASS)。

返回:
  • float - 平均结构相似性。

    • 如果返回值在(0,1)之间,则值越高,攻击越成功。

    • 如果返回值为-1,则没有成功的对抗样本。

mis_classification_rate()[源代码]

计算错误分类率(MR)。

返回:
  • float - 范围在(0,1)之间。值越高,攻击就越成功。

nte()[源代码]

计算噪声容量估计(NTE)。

参考文献:Towards Imperceptible and Robust Adversarial Example Attacks against Neural Networks

返回:
  • float - 范围在(0,1)之间。值越高,攻击就越成功。

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) - 攻击预算,最大查询数。

asv()[源代码]

计算攻击成功率方差(ASV)。

返回:
  • float - 值越低,防守就越强。如果num_adv_samples=0,则返回-1。

fpr()[源代码]

计算基于查询的检测器的假正率(FPR)。

返回:
  • float - 值越低,防御的可用性越高。如果num_adv_samples=0,则返回-1。

qcv()[源代码]

计算查询计数方差(QCV)。

返回:
  • float - 值越高,防守就越强。如果num_adv_samples=0,则返回-1。

qrv()[源代码]

计算良性查询响应时间方差(QRV)。

返回:
  • float - 值越低,防御的可用性越高。如果num_adv_samples=0,则返回-1。

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的一维数组。

cav()[源代码]

计算分类精度方差(CAV)。

返回:
  • float - 值越高,防守就越成功。

ccv()[源代码]

计算分类置信度方差(CCV)。

返回:
  • float - 值越低,防守就越成功。如果返回值== -1,则说明样本数量为0。

cos()[源代码]

参考文献:Calculate classification output stability (COS)

返回:
  • float - 如果返回值>=0,则是有效的防御。值越低,防守越成功。如果返回值== -1, 则说明样本数量为0。

crr()[源代码]

计算分类校正率(CRR)。

返回:
  • float - 值越高,防守就越成功。

csr()[源代码]

计算分类牺牲比(CSR),越低越好。

返回:
  • float - 值越低,防守就越成功。

class mindarmour.adv_robustness.evaluations.NeuronMetric(model, inputs, adv_inputs, hook_names)[源代码]

神经元敏感度,通过计算神经元在输入正常样本和对抗样本时的激活值变化,来衡量神经元的敏感度。

参数:
  • model (mindspore.nn.Cell) - 待测量神经元敏感度的模型本身。

  • inputs (mindspore.Tensor) - 所使用数据的原始样本。

  • adv_inputs (mindspore.Tensor) - 所使用数据的对抗样本,需要和原始样本一一对应。

  • hook_names (List[str]) - 所需要计算神经元敏感度的层的名字。

异常:
  • ValueError - 模型中间层输出的shape维度数目小于等于1。

neuron_sensitivity()[源代码]

计算并返回神经元敏感度。

返回:
  • nsense - 神经元敏感度的字典,包含每个层的名字和层的神经元对应的神经元敏感度。

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'

show()[源代码]

显示雷达图。