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 `_。 返回: - **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) `_。 返回: - **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() 显示雷达图。