第八章 · 多任务统一评测体系:分类 / 检测 / 分割 / 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. 小结:多任务评测体系的核心点

一个完善的多任务攻击评测系统必须做到:

  1. 输出结构抽象(Task Adapter)
  2. 指标体系抽象(Metric Engine)
  3. 攻击算法可插拔(Attack Adapter)
  4. 不同任务的可视化方式标准化
  5. 统一 JSON 格式输出
  6. 与 Attack Runner 完全解耦