第八章 · 多任务统一评测体系
第八章 · 多任务统一评测体系:分类 / 检测 / 分割 / OCR / 人脸识别
在前一章构建了完整的 Attack Runner 工程架构之后,本章进一步讨论一个核心问题:
当模型任务类型不同(分类、检测、分割、OCR、人脸识别)时,攻击评测体系如何保持统一?
对抗攻击的核心思想是一致的,但不同任务的 模型输出结构 和 评测指标 完全不同,
必须构建一个统一、可扩展的多任务评测体系,才能实现真正的工程化平台。
下面将从任务定义、输出结构、指标体系、可视化方式、攻击适配等维度进行完整介绍。
1. 多任务对抗评测的困难点
在工程实践中,多任务评测面临以下典型挑战:
| 挑战 | 说明 |
|---|---|
| 输出结构差异巨大 | 分类是 logits,检测是 box 列表,OCR 是序列,FR 是 embedding |
| 指标体系完全不同 | top1、mAP、mIoU、CER、EER 等难以统一 |
| 攻击算法不完全兼容 | DeepFool/PGD 与检测/分割不直接匹配 |
| 有的任务是像素级,有的任务是结构级 | 分割 mask vs OCR token vs FR embedding |
| 并非所有模型能求梯度 | 黑盒和 ONNX 模型需要特殊处理 |
| 评测结果很难可视化 | 每类模型对抗样本的展示方式不同 |
因此必须通过抽象层来统一这些差异。
2. 多任务评测系统架构
整体架构如下:
+------------------------------------------------+
| Multi-Task Evaluator |
+-------------------------+----------------------+
| Task adapters (5种) | Metric engines |
|-------------------------+----------------------|
| ClassificationAdapter | ClassificationMetric |
| DetectionAdapter | DetectionMetric |
| SegmentationAdapter | SegmentationMetric |
| OCRAdapter | OCRMetric |
| FaceRecAdapter | FaceRecMetric |
+------------------------------------------------+
关键思想:
Attack Runner 不关心任务类型,
任务适配器(Task Adapter)和指标模块(Metric Engine)负责统一输出结构。
3. 图像分类(Image Classification)
分类是最基础的任务,也是对抗攻击研究最成熟的领域。
3.1 输出结构
logits:[batch, num_classes]
3.2 典型指标
- Top-1 accuracy
- Top-5 accuracy
- 置信度下降值(confidence drop)
- 成功攻击率(ASR)
3.3 对抗样本可视化
- 原图 vs 对抗图 vs 差分图
3.4 与攻击算法适配性
- 所有梯度攻击均能直接使用(PGD / BIM / CW / DeepFool)
4. 目标检测(Object Detection)
检测模型输出多个边界框,结构更复杂,是攻击难度最高的任务之一。
4.1 输出结构示例(典型 Faster-RCNN 格式)
[
{
"boxes": Tensor[N, 4],
"scores": Tensor[N],
"labels": Tensor[N]
}
]
4.2 指标体系
- mAP50(IoU >= 0.5)
- mAP75(IoU >= 0.75)
- APS / APM / APL(可选)
评测逻辑:
clean mAP - adv mAP = robustness drop
4.3 攻击显示方式
- 对抗前后的 bbox 匹配展示
- 置信度对比图
- IoU 变化
4.4 攻击算法适配
检测模型梯度难以稳定,因此要使用:
- OD-Attack(检测场景专用)
- EOT(缩小梯度噪声)
- 兼容黑盒攻击:HSJ / Square / SimBA
5. 语义分割(Semantic Segmentation)
分割模型输出整幅图的 mask,是一种像素级任务。
5.1 输出结构
[batch, num_classes, H, W]
或[batch, H, W](已经 argmax 的 mask)
5.2 指标体系
- mIoU:平均所有类别的交并比
- pixel accuracy:像素级准确率
攻击后,重点关注:
- mIoU 的下降
- 某些关键类的严重漏分
5.3 可视化方式
- clean mask vs adv mask
- overlay 展示
- highlight misclassified regions
6. OCR(光学字符识别 / 文本识别)
OCR 的输出不是图像,而是序列化文本。
6.1 输出结构
典型 CRNN/CTC 模型:
- 字母索引序列
- 或概率分布
[seq_len, alphabet_size]
6.2 指标体系
- CER(Character Error Rate)
- WER(Word Error Rate)
- edit distance
OCR 是对抗攻击的绝佳目标,因为:
人眼对字体形变很不敏感,而模型极度敏感。
6.3 可视化方式
- clean text vs adv text
- 逐字符 diff
- heatmap 显示错位字符
7. 人脸识别(Face Recognition)
人脸识别模型通常不是分类模型,而是“向量距离模型”。
7.1 输出结构
- embedding vector(例如 512 维 ArcFace embedding)
7.2 指标体系
- ROC-AUC
- EER(Equal Error Rate)
- TAR@FAR(固定误报率下的识别率)
7.3 攻击方式适配
常见 FR 攻击:
- FR-Attack
- 对 embedding 方向进行优化
- Boundary-based black-box attacks
7.4 可视化方式
- embedding 变化雷达图
- 相似度分布变化
- 对抗前后人脸图片展示
8. 统一评测接口设计
所有任务都必须符合统一接口,例如:
class TaskAdapter:
def preprocess(self, batch):
raise NotImplementedError
def postprocess(self, model_output):
raise NotImplementedError
def compute_metrics(self, clean_output, adv_output):
raise NotImplementedError
结合 Metric Engine 的输出:
{
"clean_metric": {...},
"adv_metric": {...},
"metric_drop": {...}
}
Attack Runner 最终不关心任务类型,只管:
- 把输入交给 TaskAdapter
- 把输出交给 MetricEngine
- 把结果存入 JSON
9. 可视化与报告生成需求
每个任务都需要典型可视化方式:
| 任务 | 典型可视化方式 |
|---|---|
| 分类 | 原图、对抗图、差分图 |
| 检测 | bbox 可视化 + IoU 对比 |
| 分割 | mask overlay 和 diff 可视化 |
| OCR | 文本 diff(字符级) |
| 人脸识别 | embedding 变化分布图 |
统一输出目录结构示例:
results/ ├── cls/ │ ├── adv_0001.png │ ├── diff_0001.png │ └── result.json ├── det/ ├── seg/ ├── ocr/ └── fr/
10. 多任务攻击适配矩阵
总结每种攻击方法的默认适配情况:
| 攻击方法 | 分类 | 检测 | 分割 | OCR | 人脸 |
|---|---|---|---|---|---|
| FGSM/BIM/PGD | ✔ | △(需要梯度稳定) | ✔ | ✔ | ✔ |
| C&W | ✔ | ✘(难收敛) | ✔ | △ | ✔ |
| DeepFool | ✔ | ✘ | ✔ | ✘ | ✘ |
| AutoAttack | ✔ | △ | △ | △ | △ |
| OD-Attack | ✘ | ✔(专用) | ✘ | ✘ | ✘ |
| SS-Attack | ✘ | ✘ | ✔(语义结构) | ✘ | ✘ |
| OCR-Attack | ✘ | ✘ | ✘ | ✔(专用) | ✘ |
| FR-Attack | ✘ | ✘ | ✘ | ✘ | ✔(专用) |
| HSJ / Boundary | ✔ | ✔ | ✔ | ✔ | ✔ |
| Square / SimBA | ✔ | ✔ | ✔ | ✔ | ✔ |
说明:
- “✔” 表示强兼容
- “△” 表示需特别调参或梯度平滑
- “✘” 表示基本不适用
11. 统一 JSON 输出格式
任何任务最终都输出统一结构:
{
"task": "object_detection",
"model_name": "COCO_FasterRCNN",
"dataset": "COCO_VAL",
"attacker": "OD Attack",
"parameters": {...},
"clean_metrics": {...},
"adv_metrics": {...},
"metric_drop": {...},
"samples": [...]
}
其中 samples 根据任务变化:
- 分类:图片
- 检测:bbox JSON + 图片
- 分割:mask 图
- OCR:文本 diff
- FR:embedding 距离变化
12. 小结:多任务评测体系的核心点
一个完善的多任务攻击评测系统必须做到:
- 输出结构抽象(Task Adapter)
- 指标体系抽象(Metric Engine)
- 攻击算法可插拔(Attack Adapter)
- 不同任务的可视化方式标准化
- 统一 JSON 格式输出
- 与 Attack Runner 完全解耦