3. 扩展评测算法¶
3.1. 评测算法类图¶

如上图所示,上图为评测算法ACTC和评测算法CAV和评测算法CACC继承Evaluation类示意图。评测算法内部可自行实现评测过程具体函数,仅需覆写evaluate函数即可。
3.2. 评测算法存储位置¶
├── EvalBox
│ ├── Attack
│ ├── Analysis
│ ├── **Evaluation** 评测算法存储位置
│ │ ├──__init__.py
│ │ ├──actc.py
│ │ ├──CAV.py
│ │ ├──evaluation.py
│ │ ├──evaluation_defense.py
│ ├── Defense
├── Models
├── utils
├── test
├── Datasets
3.3. 扩展实例——ACTC算法¶
ACTC算法路径为:
~/AISafety/EvalBox/Evaluation/actc.py
ACTC算法源代码:
class ACTC(Evaluation):
def __init__(self, outputs_origin, outputs_adv, device, **kwargs):
'''
@description:
@param {
model:
device:
kwargs:
}
@return: None
'''
super(ACTC, self).__init__(outputs_origin, outputs_adv, device)
self._parsing_parameters(**kwargs)
def _parsing_parameters(self, **kwargs):
'''
@description:
@param {
}
@return:
'''
def evaluate(self,adv_xs=None, cln_xs=None, cln_ys=None,adv_ys=None,target_preds=None, target_flag=False):
'''
@description:
@param {
adv_xs: 攻击样本
cln_xs:原始样本
cln_ys: 原始类别,非目标攻击下原始样本的类型
adv_ys: 攻击样本的预测类别
target_preds: 目标攻击下希望原始样本攻击的目标类别
target_flag:是否是目标攻击
}
@return: actc {Average Confidence of True Class}
'''
total = len(adv_xs)
print("total", total)
outputs = torch.from_numpy(self.outputs_adv)
number = 0
prob = 0
outputs_softmax=torch.nn.functional.softmax(outputs, dim=1)
preds = torch.argmax(outputs, 1)
outputs_softmax = outputs_softmax.data.numpy()
preds = preds.data.numpy()
labels = target_preds.numpy()
if not target_flag:
for i in range(preds.size):
if preds[i] != labels[i]:
number += 1
prob += outputs_softmax[i,labels[i]]
else:
for i in range(preds.size):
if preds[i] == labels[i]:
number += 1
prob += outputs_softmax[i, labels[i]]
if not number == 0:
actc = prob / number
else:
actc = prob/(number+MIN_COMPENSATION)
return actc
3.4. 扩展说明¶
- 用户需要实现个人评测算法,并继承基础的Evaluation类,若用户希望实现的是比较模式的评测算法,则继承Evaluation_Defense类
- 用户需要将待扩展的评测算法对应文件,如new_evaluate_method.py,放置于以下路径中
~/AISafety/EvalBox/Evaluation/
- 用户需要在2中路径下的__init__.py文件中,添加用户评测算法类的引用:
from .CAV import CAV
from .acc import ACC
...
from .new_evaluate_method import NEW_EVALUATE_METHOD
- 用户可在集成调用文件testimport.py中,修改evaluation_method参数为NEW_EVALUATE_METHOD
- 如果用户评测算法是针对动态行为的评测算法,即需要获取传入模型,可设置IS_PYTHORCH_WHITE参数为True
- 若用户评测算法为对比模型,需设置IS_COMPARE_MODEL参数为True