Jack He's Blog

some idea or work

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
.
├── checkpoints
│ └── resnet50-0676ba61.pth
├── CODE_OF_CONDUCT.md
├── codespell_ignored.txt
├── configs
│ ├── datasets # 数据集
│ │ ├── aircraft
│ │ ├── cifar10
│ │ ├── cifar100
│ │ ├── covid
│ │ ├── imagenet
│ │ ├── imagenet200
│ │ ├── mnist
│ │ ├── mvtec
│ │ ├── osr_cifar50
│ │ ├── osr_cifar6
│ │ ├── osr_mnist6
│ │ ├── osr_tin20
│ │ └── plankton
│ ├── networks # training方法用到的网络结构
│ │ ├── arpl_gan.yml
│ │ ├── arpl_net.yml
│ │ ....
│ │ ├── vit.yml
│ │ └── vos_net.yml
│ ├── pipelines
│ │ ├── test
│ │ └── train
│ ├── postprocessors # post-hoc方法用到的处理方法
│ │ ├── ash.yml
│ │ ├── cider.yml
│ │ ...
│ │ ├── ssd.yml
│ │ ├── temp_scaling.yml
│ │ └── vim.yml
│ └── preprocessors # 前处理器
│ ├── augmix_preprocessor.yml
│ ├── base_preprocessor.yml
│ ├── csi_preprocessor.yml
│ ├── cutout_preprocessor.yml
│ ├── cutpaste_preprocessor.yml
│ ├── draem_preprocessor.yml
│ ├── patchcore_preprocessor.yml
│ ├── pixmix_preprocessor.yml
│ └── randaugment_preprocessor.yml
├── CONTRIBUTING.md
├── data
│ ├── benchmark_imglist
│ │ ├── cifar10
│ │ ├── cifar100
│ │ ...
│ │ └── plankton
│ ├── benchmark_imglist2
│ │ ├── ID_test.txt
│ │ ├── ID_train.txt
│ │ ├── ID_val.txt
│ │ └── OOD_test.txt
│ ├── cifar10
│ │ ├── cifar-10-batches-py
│ │ ├── cifar-10-python.tar.gz
│ │ ├── test_cifar10.txt
│ │ ├── test_images
│ │ ├── train_cifar10.txt
│ │ └── train_images
│ ├── DYB-PlanktonNet
│ │ ├── 001_Polychaeta_most with eggs
│ │ ├── 002_Polychaeta larva
│ │ ├── 003_Polychaeta_Type A
│ │ ├── 004_Polychaeta_Type B
│ │ ├── 005_Polychaeta_Type C
│ │ ├── 006_Polychaeta_Type D
│ │ ├── 007_Polychaeta_Type E
│ │ ├── 008_Polychaeta_Type F
│ │ ├── 009_Penilia avirostris
│ │ ├── 010_Evadne tergestina
│ │ ├── 011_Acartia sp.A
│ │ ├── 012_Acartia sp.B
│ │ ├── 013_Acartia sp.C
│ │ ├── 014_Calanopia sp
│ │ ├── 015_Labidocera sp
│ │ ├── 016_Tortanus gracilis
│ │ ├── 017_Calanoid with egg
│ │ ├── 018_Calanoid Nauplii
│ │ ├── 019_Calanoid_Type A
│ │ ├── 020_Calanoid_Type B
│ │ ├── 021_Calanoid_Type C
│ │ ├── 022_Calanoid_Type D
│ │ ├── 023_Oithona sp.A with egg
│ │ ├── 024_Oithona sp.B with egg
│ │ ├── 025_Cyclopoid_Type A_with egg
│ │ ├── 026_Cyclopoid_Type A
│ │ ├── 027_Harpacticoid_mating
│ │ ├── 028_Harpacticoid
│ │ ├── 029_Microsetella sp
│ │ ├── 030_Monstrilla sp.A
│ │ ├── 031_Monstrilla sp.B
│ │ ├── 032_Monstrilloid
│ │ ├── 033_Caligus sp
│ │ ├── 034_Copepod_Type A
│ │ ├── 035_Caprella sp
│ │ ├── 036_Amphipoda_Type A
│ │ ├── 037_Amphipoda_Type B
│ │ ├── 038_Amphipoda_Type C
│ │ ├── 039_Gammarids_Type A
│ │ ├── 040_Gammarids_Type B
│ │ ├── 041_Gammarids_Type C
│ │ ├── 042_Cymodoce sp
│ │ ├── 043_Lucifer sp
│ │ ├── 044_Macrura larvae
│ │ ├── 045_Megalopa larva_Phase 1_Type A
│ │ ├── 046_Megalopa larva_Phase 1_Type B
│ │ ├── 047_Megalopa larva_Phase 1_Type C
│ │ ├── 048_Megalopa larva_Phase 1_Type D
│ │ ├── 049_Megalopa larva_Phase 2
│ │ ├── 050_Porcrellanidae larva
│ │ ├── 051_Shrimp-like larva_Type A
│ │ ├── 052_Shrimp-like larva_Type B
│ │ ├── 053_Shrimp-like_Type A
│ │ ├── 054_Shrimp-like_Type B
│ │ ├── 055_Shrimp-like_Type C
│ │ ├── 056_Shrimp-like_Type D
│ │ ├── 057_Shrimp-like_Type E
│ │ ├── 058_Shrimp-like_Type F
│ │ ├── 059_Ostracoda
│ │ ├── 060_Cumacea_Type A
│ │ ├── 061_Cumacea_Type B
│ │ ├── 062_Chaetognatha
│ │ ├── 063_Oikopleura sp. parts
│ │ ├── 064_Oikopleura sp
│ │ ├── 065_Tunicata_Type A
│ │ ├── 066_Actiniaria larva
│ │ ├── 067_Hydroid
│ │ ├── 068_Jellyfish
│ │ ├── 069_Jelly-like
│ │ ├── 070_Bryozoan larva
│ │ ├── 071_Creseis acicula
│ │ ├── 072_Gelatinous Zooplankton
│ │ ├── 073_Unknown_Type A
│ │ ├── 074_Unknown_Type B
│ │ ├── 075_Unknown_Type C
│ │ ├── 076_Unknown_Type D
│ │ ├── 077_Balanomorpha exuviate
│ │ ├── 078_Crustacean limb_Type A
│ │ ├── 079_Crustacean limb_Type B
│ │ ├── 080_Fish egg
│ │ ├── 081_Fish Larvae
│ │ ├── 082_Noctiluca scintillans
│ │ ├── 083_Particle_filamentous_Type A
│ │ ├── 084_Particle_filamentous_Type B
│ │ ├── 085_Particle_bluish
│ │ ├── 086_Particle_molts
│ │ ├── 087_Particle_translucent flocs
│ │ ├── 088_Particle_yellowish flocs
│ │ ├── 089_Particle_yellowish rods
│ │ ├── 090_Bubbles
│ │ ├── 091_Phaeocystis globosa
│ │ └── 092_Fish tail
│ ├── ID_train.txt
│ ├── ID_val.txt
│ ├── images_classic
│ │ ├── cifar10
│ │ └── mnist
│ └── OOD_test.txt
├── easy_dev.ipynb
├── environment.yml
├── id_acc_eval.py
├── imglist_generator.py
├── LICENSE
├── logs
│ ├── plankton50_ash_inference.log
│ ...
│ ├── plankton50_temp_scaling_inference.log
│ └── plankton50_vim_inference.log
├── main.py
├── openood
│ ├── datasets
│ │ ├── base_dataset.py
│ │ ├── feature_dataset.py
│ │ ├── imglist_augmix_dataset.py
│ │ ├── imglist_dataset.py
│ │ ├── imglist_extradata_dataset.py # 构造含有额外数据的数据集
│ │ ├── __init__.py
│ │ ├── __pycache__
│ │ ├── udg_dataset.py
│ │ └── utils.py
│ ├── evaluation_api
│ │ ├── datasets.py
│ │ ├── evaluator.py
│ │ ├── __init__.py
│ │ ├── postprocessor.py
│ │ ├── preprocessor.py
│ │ └── __pycache__
│ ├── evaluators
│ │ ├── ad_evaluator.py
│ │ ├── arpl_evaluator.py
│ │ ├── base_evaluator.py
│ │ ├── ece_evaluator.py
│ │ ├── fsood_evaluator.py
│ │ ├── __init__.py
│ │ ├── metrics.py
│ │ ├── mos_evaluator.py
│ │ ├── ood_evaluator.py
│ │ ├── osr_evaluator.py
│ │ ├── patchcore_evaluator.py
│ │ ├── __pycache__
│ │ └── utils.py
│ ├── __init__.py
│ ├── losses
│ │ ├── draem_loss.py
│ │ ├── focal.py
│ │ ├── __init__.py
│ │ ├── kdad_losses.py
│ │ ├── __pycache__
│ │ ├── rd4ad_loss.py
│ │ ├── reweight.py
│ │ ├── sce.py
│ │ └── ssim.py
│ ├── networks # training方法使用的网络框架
│ │ ├── arpl_net.py
│ │ ├── ash_net.py
│ │ ...
│ │ ├── vit.py
│ │ └── wrn.py
│ ├── pipelines # 各种pipeline
│ │ ├── feat_extract_opengan_pipeline.py
│ │ ├── feat_extract_pipeline.py
│ │ ├── finetune_pipeline.py
│ │ ├── __init__.py
│ │ ├── __pycache__
│ │ ├── test_acc_pipeline.py
│ │ ├── test_ad_pipeline.py
│ │ ├── test_ood_pipeline_aps.py
│ │ ├── test_ood_pipeline.py
│ │ ├── train_ad_pipeline.py
│ │ ├── train_aux_pipeline.py
│ │ ├── train_ddt_pipeline.py
│ │ ├── train_oe_pipeline.py
│ │ ├── train_only_pipeline.py
│ │ ├── train_opengan_pipeline.py
│ │ ├── train_pipeline.py # 训练代码
│ │ └── utils.py
│ ├── postprocessors
│ │ ├── ash_postprocessor.py
│ │ ├── base_postprocessor.py
│ │ ...
│ │ ├── utils.py
│ │ └── vim_postprocessor.py
│ ├── preprocessors
│ │ ├── augmix_preprocessor.py
│ │ ├── base_preprocessor.py
│ │ ├── cider_preprocessor.py
│ │ ├── csi_preprocessor.py
│ │ ├── cutout_preprocessor.py
│ │ ├── cutpaste_preprocessor.py
│ │ ├── draem_preprocessor.py
│ │ ├── __init__.py
│ │ ├── pixmix_preprocessor.py
│ │ ├── __pycache__
│ │ ├── randaugment_preprocessor.py
│ │ ├── test_preprocessor.py
│ │ ├── transform.py
│ │ └── utils.py
│ ├── __pycache__
│ │ ├── __init__.cpython-310.pyc
│ │ ├── __init__.cpython-312.pyc
│ │ └── __init__.cpython-38.pyc
│ ├── recorders
│ │ ├── ad_recorder.py
│ │ ├── arpl_recorder.py
│ │ ...
│ │ ├── opengan_recorder.py
│ │ ├── __pycache__
│ │ ├── rd4ad_recorder.py
│ │ └── utils.py
│ ├── trainers # 相关的训练函数
│ │ ├── arpl_gan_trainer.py
│ │ ├── arpl_trainer.py
│ │ ├── augmix_trainer.py
│ │ ...
│ │ ├── udg_trainer.py
│ │ ├── utils.py
│ │ └── vos_trainer.py
│ └── utils
│ ├── comm.py
│ ├── config.py
│ ├── __init__.py
│ ├── launch.py
│ ├── logger.py
│ └── __pycache__
├── plot_plankton.ipynb
├── python
├── README.md
├── resnet50-0676ba61.pth
├── results # 相关结果
│ ├── cifar10_resnet18_32x32_base_e100_lr0.1_default
│ │ └── s0
│ ├── old_plankton50_resnet50_base_e100_lr0.1_default
│ │ ├── cifar10_res18_acc94.30.ckpt
│ │ ├── ood
│ │ ├── s0
│ │ └── scores_new
│ └── plankton50_resnet50_base_e100_lr0.1_default
│ ├── merged_results.csv
│ ├── ood
│ └── s0
├── scripts
│ ├── ad # 异常检测方法
│ │ ├── cutpaste
│ │ ...
│ │ └── rd4ad
│ ├── basics # 基础数据集
│ │ ├── cifar10
│ │ ├── cifar100
│ │ ├── covid
│ │ ├── imagenet
│ │ ├── imagenet200
│ │ ├── mnist
│ │ ├── osr_cifar50
│ │ ├── osr_cifar6
│ │ ├── osr_mnist6
│ │ └── osr_tin20
│ ├── eval_ood_imagenet.py
│ ├── eval_ood.py # OOD评测函数
│ ├── ood # OOD方法
│ │ ├── ash
│ │ ├── cider
│ │ ...
│ │ ├── udg
│ │ ├── vim
│ │ └── vos
│ ├── osr # OSR 识别方法
│ │ ├── arpl
│ │ ├── opengan
│ │ └── openmax
│ ├── sweep
│ │ ├── sweep_hyperparam.py
│ │ ├── sweep_posthoc_ood.sh
│ │ ├── sweep_posthoc_osr.sh
│ │ ├── sweep_posthoc.py
│ │ ├── sweep_posthoc.sh
│ │ ├── sweep_posthoc_total.sh
│ │ ├── sweep_train.py
│ │ ├── sweep_train.sh
│ │ └── write_metrics.py
│ └── uncertainty # 没有具体归类的方法
│ ├── augmix
│ ├── cutmix
│ ├── cutout
│ ├── deepaugment
│ ├── ensemble
│ ├── mc_dropout
│ ├── mixup
│ ├── pixmix
│ ├── randaugment
│ ├── regmixup
│ ├── rts
│ ├── styleaug
│ └── temp_scaling
├── setup.py
├── split_dataset_by_class.py
├── split_dataset_ood_val.py
├── split_dataset.py
├── test_all_plankton.py
└── tools
├── plot
│ └── tsne_tools.py
├── report
│ ├── plot.ipynb
│ ├── report_gmm.ipynb
│ └── report_table.ipynb
└── sweep
└── hyperparam.py

249 directories, 347 files

训练命令:

1
2
3
4
5
python main.py  /
--config configs/datasets/plankton/plankton50.yml configs/pipelines/train/baseline.yml
configs/networks/resnet50.yml
--num_workers 4
--num_gpus 1

验证命令:

1
python scripts/eval_ood.py --id-data plankton50 --save-score --save-csv --root ./results/plankton50_resnet50_base_e100_lr0.1_default --postprocessor "styleaugment"

Introduction

技术回顾

研究人员通过寻找ID样例自然拥有而OOD样例容易违反的属性(反之亦然),设计了不少评分函数。得分主要来源于三个来源:
(1)概率,如最大softmax的概率[13]和最小softmax与平均类别(mean class conditional)的kl -散度[12];
(2)logit,如最大logit [12], logsumexp函数超过logit [25];
(3)特征,如特征与其低维嵌入的预像[27]之间的残差的范数、特征与类质心[23]之间的最小马氏距离等。

在这些方法中,OOD分数可以直接从现有模型中计算出来,而无需重新训练,使得部署变得轻松。

然而,如图所示,它们的性能受到其信息源的单一性的限制:单独使用特征忽略了具有类相关信息的分类权重;使用logit或softmax只会忽略零空间[3]中的特征变化,该空间携带与类无关的信息;softmax进一步抛弃了对数范数。
image.png|500
矩形使用的是特征空间,三角形使用的是Logit,菱形使用的是softmax

[!question] 为了应对OOD样本中表现出的巨大多样性,我们提出了一个问题,设计一个使用多种来源的OOD分数是否有帮助?

在现有技术成功的基础上,我们设计了一个新的评分函数,称为虚拟logit匹配(ViM)分数,这是一个构建的虚拟OOD类的softmax分数,其logit由特征和现有logit共同决定。具体来说,评分函数首先提取特征对主子空间的残差,然后通过将其在训练样本上的均值与平均最大logits匹配,将其转换为有效logit。最后,所设计的OOD类的softmax概率就是OOD分数。 从ViM的构造中,我们可以直观地看到,原始logits越小,残差越大,它越有可能是OOD。

与上述方法不同的是,另一项研究通过施加专门的正则化损失[5,16,18,40]或通过暴露生成的或真实收集的OOD样本[22,37],对网络学习到的特征进行调整,以更好地识别ID和OOD。由于它们都需要对网络进行再训练,我们在这里简单地提到它们,而不深入研究细节。(training 方法)

数据集介绍

近年来,大规模语义空间中的OOD检测受到越来越多的关注[12,15,18,29],将OOD检测方法推向了现实应用。然而,目前缺乏用于大规模ID数据集的干净、真实的OOD数据集成为该领域的一个障碍。

以前的OOD数据集是从公共数据集中挑选出来的,这些数据集是用预定义的标签列表收集的,如iNaturalist、Texture和ImageNet-21k(表1)。这可能会导致有偏差的表现比较,特别是第5节中描述的小覆盖率的可黑客性。为了避免这种风险,我们从具有自然类分布的OpenImage数据集[21]中为ImageNet-1K[4]模型构建了一个新的OOD基准OpenImage-o。它包含17,632张手动过滤的图像,比最近的ImageNet-O[15]数据集大7.8倍。

image.png

Motivation: Logit中缺失的信息

  • 基于特征的OOD分数(例如Mahalanobis和Residual)擅长检测ImageNet-O中的OOD,而所有基于logit/概率的方法都落后。
  • 最先进的基于概率的方法 KL 匹配的 AUROC 仍然低于纹理数据集特征空间中直接设计的 OOD 分数。

image.png

基于零空间的OOD评分

将特征分解为 $x = x^{W⊥} + x^W$,其中$x^{W⊥}$和$x^W$分别是$x$在$W^⊥$和$W$上的投影,$W^⊥$是$W^T$的零空间,而$W$是$\mathbf{W}$的列空间,$x^{W⊥}$不影响分类,但是对OOD检测有重要作用
$$
NuSA(x)=\frac{\sqrt{ \lvert \lvert x \rvert \rvert ^2-\lvert \lvert x^{W⊥} \rvert \rvert ^2 }}{\lvert \lvert x \rvert \rvert }
$$
NuSA得分实际上是特征向量在主空间上的能力占总能量的比例。NuSA得分在0到1之间。当特征向量完全在主空间时,NuSA得分为1,当特征向量完全在零空间时,NuSA得分为0.OOD样本在零空间上的能量较大,因此其NuSA得分较低。

image.png

基于主空间的OOD评分

低维流形 (Low-Dimensional Manifold) 是指数据或特征在高维空间中实际位于一个相对较低维度的子空间上。这一概念广泛应用于机器学习和数据分析中,特别是在降维、特征提取和异常检测等领域。

假设特征向量分布在一个低维流形上,并使用通过原点$O$的线性子空间作为模型。定义主空间为由矩阵 $X^TX$ 的最大$D$个特征值对应的特征向量所张成的$D$维子空间$P$。偏离主空间的特征可能是OOD样本。因此考虑计算特征与主空间的偏差:
$$
Residual(x)=\lvert \lvert x^{P⊥} \rvert \rvert
$$
这里的$x^{P⊥}$是$x$到$P⊥$的投影。残差分数与[27]中的重构误差相似,只不过它们采用了非线性流形学习进行降维。注意,在投影到logits之后,这种偏差被破坏了,因为矩阵$W^T$投影到比特征空间更低的维度空间。

NuSA 和 Residual的缺点

与 logit/概率方法相比,NuSA 和 Residual 都不考虑特定于各个 ID 类的信息,即它们是类不可知的。因此,这些分数忽略了与每个 ID 类别的特征相似性,并且不知道输入最类似于哪个类别。
这解释了为什么它们在iNaturalist OOD基准上的表现更差,因为iNaturalist样本需要区分细粒度类别之间的细微差异。

image.png

虚拟logit匹配

Logits 包含与类相关的信息,但特征空间中存在无法从 Logits 恢复的与类无关的信息。为了统一 OOD 检测的类不可知和类相关信息,提出了通过 Virtual-logit 匹配(缩写为 ViM)的 OOD 评分。

具体步骤包含三步,分别针对特征、logit和概率进行操作:

  • 提取残差:提取输入特征 $x$ 相对于主子空间(即主要成分分析得到的低维子空间)的残差$x^{P\perp}$。这意味着将输入特征分解为主成分和残差两部分。
  • 转换为logit:通过将这些残差的均值匹配到训练样本中的平均最大logit,将残差转换为有效的logit。这一步的目的是使得残差能反映出与现有logit相当的概率信息。
  • 计算softmax概率:计算这个虚拟OOD类别的softmax概率,这个概率即为ViM得分。

image.png
image.png

OpenImage-O 数据集

为 ID 数据集 ImageNet-1K 构建了一个名为 OpenImage-O 的新 OOD 数据集:

  • 它是手动注释的,具有自然多样化的分布,并且具有17,632张图像的大规模。
  • 它的构建是为了克服现有 OOD 基准的几个缺点。
  • OpenImage-O 是从 OpenImageV3 的测试集中逐图像选择的,包括从 Flickr 收集的 125,436 张图像,没有预定义的类名称或标签列表,从而实现自然的类统计并避免初始设计偏差。
  1. 图像级注释的必要性
    过去的一些工作仅仅根据类别标签从其他数据集中选择部分数据来进行OOD检测。虽然类别级别的注释成本较低,但生成的数据集可能包含大量不符合预期的噪音。因此,简单地通过查询标签创建OOD数据集是不可靠的,需要对每个图像进行人工检查以确认其有效性。
  2. 小覆盖范围的可破解性
    如果 OOD 数据集有一个中心主题,例如纹理,其分布不太多样化,那么它可能很容易被“黑客攻击”。
  3. OpenImage-O 的构建过程
    基于 OpenImage-v3 数据集构建 OpenImage-O:
  • 对于测试集中的每张图像,我们让人工标注人员确定它是否是 OOD 样本。
  • 为了辅助标记,我们将任务简化为将图像与 ImageNet-1K 分类模型预测的前 10 个类别区分开来,即,如果图像不属于这 10 个类别中的任何一个,则该图像为 OOD。
  • 提供类别标签以及每个类别中与测试图像最相似的图像(通过特征空间中的余弦相似度来测量)以进行可视化。

为了进一步提高标注质量,我们设计了几种方案:
(1)如果标注者无法确定图像是否属于10个类别中的任何一个,则可以选择“困难”;
(2)每张图像由至少两个标注器独立标注,并取两者一致的OOD图像集;
(3)抽查检验,确保质量。

Energy-based Out-of-distribution Detection

Energy-based Out-of-distribution Detection(NeurIPS 2020)

motivation:
使用softmax置信度分数会导致模型对OOD data的预测有较高的置信度(这与softmax的特性有关,也有深度神经网络训练的特性有关),这显然是不合理的。同时,有研究表明通过深度生成模型估计得到的密度函数对于OOD data的检测并不可靠。基于此,作者提出了energy score。

idea:
基于energy的模型将每个输入映射为一个标量,这个标量对于见过的数据(ID data)较低,对于未见过的数据(OOD data)较高。
一、使用energy score的一些优点:可以直接根据分类模型推导得到,而不依赖密度估计;可以解决模型对OOD data的预测过度自信的问题;使用方便,是一个无参数度量。
二、作者提出了一个训练框架,能够利用分布内数据和辅助数据集数据,使得ID data和OOD data的energy score有一个较为明显的差距。
三、基于energy的fine tune model不仅可以提高OOD data的检测效果,对ID data进行分类的准确率也不会因此下降。

同样使用后处理 #post-hoc

能量函数

基于能量的模型(EBM)的本质是建立一个函数$E(\mathbf{x}):R^D \to R$,将输入空间的每个点x映射到一个称为能量的单一非概率标量。能量值的集合可以通过吉布斯分布转化为概率密度$p(\mathbf{x})$:
image.png
其中分母称为配分函数,它在$y$上边缘化,$T$是温度参数。

由上式的分母部分可以推出,给定数据点$x \in R^D$的亥姆霍兹自由能$E(\mathbf{ x})$可以表示为对数配分函数的负值:
image.png
image.png

综述:基于能量的模型 - yearn的文章 - 知乎
LeCun 的Lessons:yann.lecun.com/exdb/publis/pdf/lecun-06.pdf
补充:ICLR2020的论文:解读 Your Classifier is Secretly an Energy Based Model and You Should Treat it Like One-CSDN博客

基于能量的模型与现代机器学习,尤其是判别模型有着内在的联系。为了看到这一点,我们考虑一个判别神经分类器$f(\mathbf{x}):R^D\to R^K$,它将输入$x \in R^D$映射到K个称为logits的实数值。这些logits用于使用softmax函数推导分类分布:
image.png
softmax:
image.png

通过连接Eq.1和Eq.3,我们可以将给定输入$(\mathbf{x},y)$的能量定义为$E(\mathbf{x},y)= f_{y}(\mathbf{x})$。更重要的是,在不改变神经网络$f_{y}(\mathbf{x})$的参数化的情况下,我们可以用softmax激活的分母来表示$x \to R^D$上的自由能函数$E(x; f)$:
image.png

image.png
论文尝试在分类模型上接入energy函数,通过energy进行OOD检测。energy较小的为ID数据,energy较大的为OOD数据。当负能量评分大于阈值时,OOD检测器将该输入分类为OOD。

实际上,通过负对数似然(negative log-likelihood,NLL))损失训练的模型本身就倾向于拉低ID数据的energy,负对数似然损失可表示为:
image.png
定义energy函数 $E(x,y) = -f_{y}(x)$并将$\log$里面的分数展开,NLL损失可转换为:
image.png
从损失值越低越好的优化角度看,公式6的第一项倾向于拉低目标类别$y$的energy,而公式6第二项从形式来看相当于输入数据的free energy。第二项导致整体损失函数倾向于拉低目标类别$y$的energy,同时拉高其它标签的energy,可以从梯度的角度进行解释:
image.png|404

上述式子是对两项的梯度进行整合,分为目标类别相关的梯度和非目标相关的梯度。可以看到,目标类别相关的梯度是倾向于更小的energy,而非目标类别相关的梯度由于前面有负号,所以是倾向于更大的energy。另外,由于energy近似为$-f_y(x)=E(x,y)$,通常都是目标类别的值比较大,所以NLL损失整体倾向于拉低ID数据的energy。

使用 energy 进行OOD

分布外检测是一个二元分类问题,它依赖于一个分数来区分分布内和分布外的例子。评分函数应产生可区分分布内和分布外的值。一个自然的选择是使用数据$p(\mathbf{x})$的密度函数,并考虑具有低可能性的示例是OOD。可以通过诉诸基于能量的模型来获得判别模型的密度函数:
image.png
归一化密度函数$Z$(分母)(相对于x)可能难以计算,甚至在输入空间上可靠地估计。

为了减轻这一问题,我们的关键观察结果是,缺乏标准化根本不会影响OOD检测。具有较高出现概率的数据点相当于具有较低能量。要看到这一点,我们可以采取对数化方程:
image.png

image.png
正(分布内)样本具有更高的分数
能量分数本质上是非概率性的,可以通过 logsumexp 方便地计算
我们的方法不需要显式估计密度Z,因为Z与样本无关,并且不影响整体能量分数分布。

Energy Score与Softmax的关系:
image.png
可见,直接优化softmax等价于同时优化energy score和fmax

从上述式子可以看出,softmax置信度的对数实际上是free energy的特例,先将每个energy减去最大的energy进行偏移(shift),再进行free energy的计算,导致置信度与输入的概率密度不匹配。随着训练的进行,通常$f^{max}(x)$会变高,而$E(x;f)$则变低,所以softmax是有偏评价函数,置信度也不适用于OOD检测。

对比:
image.png
因此,与密度 p(x) 很好地对齐的能量得分不同,softmax 置信度得分不太能够可靠地区分分布内和分布外的示例。 为了通过一个真实的示例进行说明,图 2 显示了 SVHN 数据集 (OOD) 中的一个示例和分布内数据 CIFAR-10 中的另一个示例。 虽然它们的 softmax 置信度分数几乎相同(1.0 与 0.99),但负能量分数更容易区分(11.19 与 7.11)。 因此,在原始 Logit 空间(能量得分)而不是移动 Logit 空间(softmax 得分)中工作可以为每个样本产生更多有用的信息。 我们在 4.2 节的实验结果中表明,对于 OOD 检测,能量得分是比 softmax 得分更好的指标。
image.png
左边是softmax,右边的是energy。发现softmax得到的置信度几乎相等,但是energy得到的差值会大一些,提供了更多信息。

进行训练

虽然能量得分对于预训练的神经网络很有用,但虽然能量得分对于预训练的神经网络很有用,但分布内和分布外之间的能量差距可能并不总是对于分类来说是最佳的。 因此,我们还提出了一个能量有限(energy-bounded)的学习目标,其中神经网络经过微调,通过将较低的能量分配给分布内数据,将较高的能量分配给 OOD 数据来显式地创建能量间隙。 学习过程在对比塑造能量表面方面提供了更大的灵活性,从而产生更可区分的分布内和分布外数据。 具体来说,我们的基于能量的分类器是使用以下目标进行训练的:
image.png

其中 $F(x)$ 是分类模型的 softmax 输出,$D^{train}_{in}$ 是分布内训练数据。 总体训练目标结合了标准交叉熵损失以及以能量定义的正则化损失:

image.png

其中 $D^{\text{train}}_{\text{out}}$ 是未标记的辅助 OOD 训练数据。特别是,我们使用两个平方 Hinge 损失项以及独立的边界超参数 $m_{\text{in}}$ 和 $m_{\text{out}}$ 对能量进行正则化。

一方面,模型会惩罚产生能量高于 $m_{\text{in}}$ 的分布内样本;另一方面,模型会惩罚能量低于 $m_{\text{out}}$ 的分布外样本。换句话说,损失函数惩罚能量为 $E(x) \in [m_{\text{in}}, m_{\text{out}}]$ 的样本。模型微调后,下游 OOD 检测流程与 3.1 节的描述一致。

实验

分布内数据集

我们使用 SVHN [28]、CIFAR-10 [18] 和 CIFAR-100 [18] 数据集作为分布内数据。 我们使用标准分割,并分别用 $D_{train}^{in}$ 和 $D_{test}^{in}$ 表示训练集和测试集。

ID数据集包含CIFA-10、CIFAR-100,并且分割训练集和测试集。OOD测试数据集包含Textures、SVHN、Places365、LSUN-Crop、LSUN_Resize和iSUN。辅助用的OOD数据集则采用80 Million Tiny Images,去掉CIFAR里面出现的类别

分布外数据集

对于 OOD 测试数据集 Dtest out ,我们使用六个常见基准:Textures [5]、SVHN [28]、Places365 [49]、LSUN-Crop [46]、LSUN-Resize [46] 和 iSUN[45]。 所有图像的像素值通过 z 归一化进行归一化,其中参数取决于网络类型。 对于辅助异常数据集,我们使用 8000 万张微小图像 [38],这是从网络上抓取的大规模、多样化的数据集。 我们删除了该数据集中出现在 CIFAR-10 和 CIFAR-100 中的所有示例。

评估指标

我们测量以下指标:
(1)当分布内示例的真阳性率为95%时,OOD示例的误报率(FPR95);
(2) AUROC;
(3) 精确率-召回率曲线下面积 (AUPR)。

训练细节

image.png

训练结果

与softmax和OE

image.png

与其他OOD

image.png

能量微调是否会影响神经网络的分类精度?

可以提高

image.png

关于温度缩放

image.png

FSAC 方法

原位浮游生物图像检索(IsPlanktonIR)框架主要由左侧基于CBIR的识别部分和右侧人机交互部分组成。 前者可以自动识别原位捕获的海洋浮游生物和颗粒的感兴趣区域(ROI)图像,后者支持对识别结果进行手动验证和校正,以在必要时提高或恢复性能。 下面介绍框架中关键组件的功能、结构和原理。

image.png

自动识别部分主要由四个模块组成,包括参考图库、图像特征提取器、图像相似性度量和决策策略。 图库中预先存储了大量手动标记的ROI,它们都被特征提取器转换为特征向量并写入查找表(LUT)。 当任何查询ROI图像输入到框架进行识别处理时,首先由特征提取器将其转换为特征向量,然后与LUT中的所有特征向量进行比较。 最后,利用得分最高的前k张图像的标签来确定查询ROI的识别结果。

特征提取器

采用50层结构的SEResNeXt(Hu et al., 2018),丢弃其网络末端的全连接层,仅保留特征提取部分作为图像检索框架中的特征提取器,如图2所示。SEResNeXt 基于 ResNeXt 网络(Xie et al., 2017),并结合了Squeeze-and-Exitation注意力模块。 它已被证明在许多图像分类任务中表现良好(Hu et al., 2018;Olsvik et al., 2019; Han et al., 2020)。 这种结构使得网络具有很强的抽象能力,其注意力机制也帮助网络关注对图像表示贡献更大的部分。

image.png

提取器训练

由于 SEResNeXt 仅接受 224 x 224 像素 RGB 彩色图像输入,因此首先使用填充和重新缩放操作对每个 ROI 进行预处理,以实现无失真尺寸归一化(Li et al., 2022)。 之后,将训练数据集中所有ROI的像素值转换为[0, 1],然后根据公式(1)进行归一化,以加速训练收敛
$$
I_{norm}=\frac{1-mean}{SD}
$$
其中mean和SD分别表示所有训练ROI的像素值平均值和标准差。 特征提取后,输入图像被转换为​​长度为2048的特征向量

接下来,我们使用 SCL 来训练特征提取器。 训练过程如图3所示。SLC使用Siamese网络结构,一对对称分支共享相同的网络结构和权重。 除了特征提取器之外,每个分支最后还有一个由两层全连接网络组成的投影仪,以进一步降低输出特征向量的维数。 在每次训练迭代期间,从训练集中随机选择一批 N 个图像,然后将每个图像随机增强两次以生成总共 2N 个图像。
image.png

图像增强可以是剪切、旋转、翻转、灰度、亮度调整、对比度调整和饱和度调整。 然后增强的 ROI 形成总共 N × (2N−1) 个图像对,没有任何组合重复。 根据它们的标签,属于同一类别的每对 ROI 构成正对,而属于不同类别的每对 ROI 构成负对。 经过特征提取和投影后,一对 ROI 都被简化为两个 128 维向量,并通过 SupCon 损失(Khosla et al., 2020)进一步进行比较,如公式(2)所示,
image.png
其中 I 描述了所有索引 输入 ROI 批次的,P(i) 是增强 ROI 批次中除 i 之外的所有正例的索引集,A(i) 是增强批次中除 i 之外的所有 ROI 的索引集,zi 描述第 i 个 L2归一化后的特征向量,τ是一个温度超参数,它控制正负值之间的平衡(在我们的例子中τ = 0.07)。 通过这样对不同图像对进行迭代后的SCL,网络最终达到了特征空间中压缩正片、推开负片的效果。

特征提取器的训练使用在 ImageNet 上预训练的权重进行初始化。 使用动量为 0.9、小批量为 128 的 SGD 进行优化。学习率在前 10 个 epoch 中从 0 线性增加到 0.2,然后通过余弦衰减函数逐渐降低到 0.0001。 我们使用 PyTorch 以分布式数据并行模式训练四个 NVIDIA RTX 3090 GPU 的网络,训练最终在 150 个 epoch 后收敛。

Gallery建设与优化

所有图库图像都会转换为特征向量,组成存储在计算机硬盘中的 LUT。 识别时,将LUT加载到内存中进行比较,无需重复计算参考特征。 由于每张查询图像的特征都要与所有参考特征进行比较,因此LUT的特征数量将影响检索效率。 因此,对LUT进行更好的细化,在保留实例多样性的前提下去除冗余实例,即只有那些在特征空间中的相似度低于阈值的实例才值得保留。 最后,可以在测试数据集上确定每个类的相似度阈值,以去除冗余示例并最小化LUT大小,从而平衡检索精度和效率。

实验部分

数据集

如图5所示,为了更好地利用有限的数据来模拟天然海水中可能的DSS和OOD情况,我们将构建的数据集进一步分为$D_{gallery}$和$D_{test}$两个子集,并具有$C_1$、$C_2$和$C_{OOD}$三个标签组 训练特征提取器并评估 IsPlanktonIR 框架。

子集 Dgallery 由 DYB-PlanktonNet 中每个类别的 $4/5$ ROI 组成,Dgallery 中的所有 90 个目标标签被随机分为 $|C1|= 60$ 和 $|C2|= 30$ 两组。

IsPlanktonIR 框架中的画廊,也用于为以下实验提供训练数据。 子集$D_{test}$包含DYBPlanktonNet的其余1/5左侧ROI和所有长江数据,用于构建各种测试集以评估IsPlanktonIR框架的识别性能。

除了$C1$和$C2$的目标类别外,$D_{test}$中长江数据的标签被标记为$C_{OOD}$。

实验

image.png

在实验1中,整个Dgallery被用来训练第一个特征提取器,Dtest(C1∪C2)中的例子被用作测试集来评估IsPlanktonIR的性能 框架。 该实验的结果被用作基线模仿理想的独立同分布情况。 此外,还使用相同的数据集来训练和测试(Li et al., 2022)中使用的 ResNet18 分类模型,以进行性能比较。

接下来,仅使用Dgallery(C1)中的示例来训练第二个特征提取器,并使用这个新的特征提取器重建图像检索框架。 通过设置与Dtest不同的测试集组成,设计了以下实验2-5的四个实验,以进一步测试IsPlanktonIR在不同模拟数据条件下的性能。

实验2中,使用Dtest(C1∪C2)样本来测试IsPlanktonIR的识别性能。

实验3中,我们在测试集中添加了Dtest(COOD)数据,即用整个Dtest来测试IsPlanktonIR的识别性能。

在实验4中,我们进一步对Dtest(C1∪C2)进行重新采样,生成50个测试集,并按照(González et al., 2017)中推荐的方式使用它们来测试IsPlanktonIR在处理DSS问题时的识别性能。在数据重采样过程中,我们参考了已知的“非浮游生物颗粒>桡足类>其他”的相对数量关系,使测试集的分布更接近真实天然海水中的分布(Suthers等,2019)。 因此,每个测试集中非浮游生物颗粒的比例为其样本总数的50%~90%,其余样本的50%~90%为桡足类,其余样本构成其余样本。 另一方面,我们使用均匀分布率对每个类进行随机重采样,并在每个测试集中将非浮游生物颗粒、桡足类等的分类样本数大小分别限制在 600、200 和 100,以最大限度地 确保人工生成的测试集和训练集之间存在分布差异

在实验5中,我们将Dtest(COOD)数据添加到实验4中生成的50个测试集,以进一步评估IsPlanktonIR框架。 由于OOD数据独立于Dgallery,我们直接使用全部或随机子采样它们进行测试。此外,实验5中的数据集也用于训练和测试AD分类器,如(Pu et al., 2021)中提出的 进行比较。 由于AD模型无法对测试集中的Dtest(C2)示例进行分类,因此我们仅测试其在Dtest(C1)分类和Dtest(COOD)示例检测上的性能。

image.png

对于测试集中 OOD 数据的实验 3 和 5,我们将相似度值设置为 0.75 作为 IsPlanktonIR 拒绝识别的阈值

最后,为了测试LUT剪枝对图像检索框架的影响,我们在实验2的设置下,进一步评估了不同LUT压缩率下相似度阈值变化的性能。

在所有实验中,准确率(ACC)、精度、召回率和 F1 用作表征 IsPlanktonIR 框架性能的指标。

251f08b2adc0742862e1c4c99293635.png

Fast Decision Boundary based Out-of-Distribution Detector(FDBD)

ICML 2024
根据 OOD 样本到决策边界的特征距离来检测它们
采用的也是后处理方法 #post-hoc

[!info] OOD介绍
Out-of-distribution,分布外检测。在实际情况下,由于通常不满足封闭性类别平衡性独立同分布假设,因此需要进行识别,哪些是In-distribution样本,哪些是Out-of-distribution样本。通常考虑为一个二分类问题,采用指标为AUROC、FPR95、AUPR等

文章简要概述:

  1. 研究背景
    • 随着机器学习模型在现实世界中的广泛应用,不可避免地会遇到训练分布之外的样本(OOD),OOD检测对于确保模型的安全部署至关重要。
    • 现有的OOD检测方法分为基于模型输出空间和基于特征空间的方法,基于特征空间的方法虽然有效,但依赖于从训练特征构建的辅助模型,计算开销较大。
  2. 研究方向
    • 从决策边界的新视角设计事后(post - hoc)OOD检测器,在不使用辅助模型的情况下利用特征空间中的丰富信息,优化计算效率。
  3. 研究方法
    • 测量到决策边界的特征距离
      • 首先在多类分类器中定义了样本特征到决策边界的距离($D_f(z_x,c)$),由于决策区域的非凸性,该距离没有闭式解,难以直接计算。
      • 提出一种有效的闭式估计方法$\tilde{D}_f(z_x,c)$,从理论上证明了该估计紧密地下界(lower bound)了距离,并且通过实验验证了该方法的有效性(相对误差小于1.5%)和高效性(在推理过程中可在常数时间内计算,相比于迭代优化方法显著降低了计算开销)。
    • 基于决策边界的快速OOD检测器(fDBD)
      • 通过实验观察发现,同分布(In - Distribution,ID)特征相比OOD特征更远离决策边界,并且在将ID和OOD样本按照与训练特征均值的偏差水平进行分组比较时,两者的分离效果更好。
      • 基于上述观察,设计了一种基于正则化平均特征距离到决策边界的OOD检测分数($regDistDB$),通过对该分数设置阈值构建了fDBD检测器,该检测器无超参数、无辅助模型且计算高效(时间复杂度为$O(|C| + P)$,与训练类别的数量$|C|$和特征维度$P$线性相关)。
  4. 实验结果
    • 在CIFAR-10和ImageNet等不同的数据集、不同的训练目标(交叉熵损失和监督对比损失)以及不同的网络架构(ResNet、ViT和DenseNet)上进行了广泛的实验。
    • 使用FPR@95(95%真阳性率下的假阳性率)和AUROC(接收者操作特征曲线下面积)作为评估指标,结果表明fDBD在大多数情况下达到或超过了现有方法的OOD检测性能,同时保持了与普通softmax confidence检测器相当的推理延迟,几乎没有增加额外的开销。
    • 还进行了消融实验,验证了正则化对提高OOD检测效果的作用,以及在不同的激活塑造算法(ReAct、ASH和Scale)下fDBD的性能表现。
  5. 研究结论
    • 提出的fDBD是一种高效且有效的OOD检测器,基于特征到决策边界的距离这一新颖视角,通过闭式估计方法测量距离,揭示了ID和OOD样本与决策边界的关系,通过正则化设计了有效的OOD检测算法。
  6. 研究不足
    • 论文未明确提及研究的不足之处。
  7. 未来研究方向
    • 希望该算法能够启发未来从决策边界的角度探索模型不确定性的工作,包括OOD检测以及其他研究问题,如对抗鲁棒性和域泛化等。

Intro

后处理方法(post-hoc method):与训练无关(training-agnostic),适合在预训练模型上立即实施

  • eg. KNN,马氏距离等距离度量方法;MSP、O-DIN等置信度处理方法

先前方法的问题:它们对根据训练特征构建的辅助模型的依赖会产生额外的计算成本

ID 和 OOD 样本的特征相对于决策边界位于哪里?

为了回答这个问题,我们首先将特征距离到类决策边界的概念形式化。 我们将距离定义为特征空间中改变分类器对类别的决策的最小扰动,如图 1 左图所示。
我们特别关注倒数第二层,即线性分类头之前的层。 由于非凸性,倒数第二层上的距离无法轻易计算。
为了最大限度地减少测量距离的成本,该文章引入了一种有效的封闭式估计,经过分析证明可以严格限制距离。 直观上,特征到决策边界的距离反映了改变模型决策的难度,并且可以量化特征空间中的模型不确定性。
与输出空间 softmax 置信度(常见的MSP)不同,该文章的特征空间距离使用特征空间中嵌入的丰富信息进行 OOD 检测。

image.png|600

直观上,ID 样本的特征比 OOD 样本更远离决策边界,因为分类器在 ID 样本中可能更具决定性。当与训练特征平均值的偏差水平相等时,ID 和 OOD 可以更好地分开

问题定义

我们考虑一个数据空间$X$,一个类集$C$和一个分类器$f: X→C$,该分类器是在从联合分布$P_{XC}$ 中提取的样本 $i.i.d.$ 上训练的。我们表示$P_{XC}$在$X$上的边际分布为$P^{in}$。我们将从$P^{in}$中抽取的样本称为分布内(ID)样本。在实践中,分类器$f$可能会遇到$x∈X$,且它不是从$P^{in}$中提取的。我们称这样的样品为分布外(OOD)。

由于分类器无法对训练期间未见的类别的OOD样本做出有意义的预测,因此区分此类OOD样本和ID样本对于部署可靠性非常重要。此外,对于时间紧迫的应用,及时检测OOD样品以采取预防措施至关重要。与现有技术中使用ID特征聚类和构建辅助模型不同(Lee et al., 2018;Sun et al., 2022),我们可以从决策边界的角度研究OOD-ness,这本质上捕获了训练ID统计。

决策边界判断OOD

第三章主要讲述了使用决策边界检测离群分布(OOD)的相关内容

  1. 测量到决策边界的特征距离(3.1)

    • 定义距离概念:在多分类器的倒数第二层空间,定义样本$x$的特征嵌入$z_x$到类别$c$($c\neq f(x)$)决策边界的$L2$ - 距离$D_f(z_x,c)$为将模型决策变为类别$c$所需的最小扰动。由于决策区域通常非凸,该距离没有闭式解,难以直接计算。
    • 提出有效估计方法:定理3.2提出一种闭式估计$\tilde{D}_f(z_x,c)$,可有效且紧密地下界$D_f(z_x,c)$。从理论上证明了该方法的有效性,并且通过实证验证其精度高(相对误差小于1.5%)。同时分析了该距离测量方法的效率,其在推理过程中可在常数时间内计算,实证表明在CIFAR - 10分类器上使用该方法计算距离时,与不使用该方法相比,平均推理时间基本无增加,而通过迭代优化估计距离则耗时很长(992.2ms),从而验证了所提估计方法的高效性。
  2. 基于快速决策边界的OOD检测器(3.2)

    • 基于决策边界的假设与验证:从决策边界的角度研究OOD检测,假设由于模型对ID样本更确定,ID特征相比OOD特征更可能远离决策边界。通过大量验证(如附录J中的图展示了ID/OOD到决策边界的特征距离)以及可视化ID/OOD样本到决策边界的平均特征距离(图2左),证实了该假设。

    • 深入探究ID/OOD重叠区域:研究在平均距离到决策边界这一度量下ID/OOD的重叠区域(图3),发现ID和OOD样本的平均特征距离到决策边界都会随着特征偏离训练特征均值而增加,这导致具有较高偏差水平的OOD样本与较低偏差水平的ID样本难以区分,而在相同偏差水平内,OOD与ID样本可更好地分离。

    • 设计OOD检测分数与检测器:基于上述理解,设计OOD检测分数$regDistDB$,它是到决策边界的平均特征距离,并由到训练特征均值的特征距离进行正则化,该分数近似在相同偏差水平比较ID和OOD样本,可增强ID/OOD分离(图2)。通过对$regDistDB$设置阈值,提出基于快速决策边界的OOD检测器($fDBD$),将低于阈值的样本识别为OOD。$fDBD$无超参数且无需辅助模型,计算效率高,计算 $\tilde{D}_f(z_x,c)$ 为常数时间,计算 $regDistDB$ 中的 $|z_x - \mu_{train}|_2$ 时间复杂度为 $O(P)$ ( $P$ 为倒数第二层维度),整体 $fDBD$ 时间复杂度为 $O(|C| + P)$ ,对大规模数据集和模型具有计算可扩展性。

    • regDistDB:一种经过正则化处理的 OOD 检测分数,计算方式为:

    $$
    \begin{aligned}
    \text{regDistDB} := \frac{1}{|C| - 1} \sum_{\substack{c \in C \ c \neq f(x)}} \frac{\tilde{D}_{f}(z_{x}, c)}{\parallel z_{x} - \mu_{\text{train}} \parallel_{2}}
    \end{aligned}
    $$

    其中 $\tilde{D}_{f}(z_{x}, c)$ 是到决策边界的估计距离,$\mu_{\text{train}}$ 表示训练特征的均值。该分数通过正则化特征到训练均值的距离,实现在相同偏差水平下比较 ID/OOD 样本,增强检测效果。

    • avgDistDB:是未经过正则化的平均距离,计算方式为$avgDistDB := \parallel z - \mu_{train}\parallel_{2}regDistDB$,在研究正则化对OOD检测效果影响的实验中,被作为一种检测分数与经过正则化的$regDistDB$进行对比,以体现正则化在OOD检测中的作用。

实验

论文的第四章主要是通过实验展示了fDBD(Fast Decision Boundary based Out-of-Distribution Detector)在不同的OOD(Out-of-Distribution)基准测试中的高效性和有效性。具体内容如下:

CIFAR-10 Benchmark

  1. 实验评估指标
    • 使用了文献中广泛认可的两个指标:在95%真阳性率下的假阳性率(FPR95)和接受者操作特征曲线下面积(AUROC),FPR95分数越低、AUROC值越高表示性能越好。此外还报告了在Tesla T4 GPU上评估的每张图像的推理延迟(以毫秒为单位)。
  2. CIFAR - 10基准测试评估
    • 训练方案:评估了在标准交叉熵损失下训练的模型的OOD检测性能(准确率为94.21%),以及使用监督对比损失(SupCon)训练表示映射的模型(准确率为94.64%)。 (这个地方存疑,因为似乎没有在表格里面提到,怀疑这里的ACC指的是ID分类准确率)
    • 数据集:将CIFAR - 10测试集的10,000张图像作为ID(In - Distribution)测试样本,OOD样本考虑了SVHN、iSUN、Places365和Texture。
    • 基线方法:与六种基于标准交叉熵损失训练的模型的基线方法进行比较,包括MSP、ODIN、Energy、ViM、MDS、KNN,还考虑了在对比损失下特别有竞争力的四种基线方法CSI、SSD+、KNN+。fDBD是训练无关的,无需辅助模型并整合了决策边界视角的类别特定信息,且fDBD、MSP和Energy是无超参数的。
    • OOD检测性能
      • fDBD在FPR95和AUROC分数方面达到了最先进的性能,并且由于3.1节中的高效距离估计方法,计算开销最小。
      • 对比分析:
        • fDBD与MSP/Energy:三者都是无超参数且基于模型不确定性检测OOD,fDBD利用特征空间距离,相比MSP和Energy有显著性能提升,表明特征空间对OOD检测的重要性。
        • fDBD与KNN:在相同超参数设置下对比,fDBD和KNN在CIFAR - 10 OOD基准测试上检测效果都较好,但KNN由于使用辅助模型,平均推理时间较长;在ImageNet OOD基准测试中fDBD显著优于KNN,体现了从类别决策边界角度整合类别特定信息的优势。
        • fDBD与ViM:两者都将类别特定信息集成到特征空间表示中,但ViM在推理时需要昂贵的矩阵乘法,导致延迟增加,且fDBD性能优于ViM,尤其是在ImageNet OOD基准测试中,表明fDBD从特征空间类别决策边界角度整合信息的有效性。

image.png

ImageNet Benchmark

  • 训练方案、数据集和基线:考虑了4.1节中的训练方案,使用交叉熵损失和监督对比损失训练的模型,将ImageNet验证图像中的50,000张作为ID测试样本,OOD样本来自去除与ImageNet重叠类后的Texture、Places365、iNaturalist、SUN数据集。与4.1节中的相同基线进行比较(除CSI外),对于KNN考虑了两组超参数。
  • OOD检测性能:fDBD在ImageNet OOD基准测试的平均FPR95和平均AUROC方面优于所有基线,在大规模数据集上保持了OOD检测的高效性,这与在CIFAR-10基准测试中的观察结果一致,也支持了fDBD与类别数量和维度线性扩展的分析。

image.png

替代架构评估

在基于Transformer的ViT模型和DenseNet上进行实验,评估了fDBD、ViM和KNN在使用交叉熵损失对ImageNet - 1k进行微调的ViT - B/16上的性能(分类器准确率为81.14%),还在DenseNet上进行了扩展实验,结果表明fDBD在不同网络架构上的有效性。

image.png

激活整形下的评估

研究了激活整形算法(ReAct、ASH、Scale)对fDBD性能的影响,将这些算法作为标准ReLU激活的替代操作。fDBD作为无超参数方法,可以与这些算法无缝结合。在ResNet - 50上进行实验,结果表明应用激活整形后性能有所提高,验证了fDBD与这些算法的兼容性,且fDBD与Scale结合在该基准测试中达到了最先进的性能。

image.png

消融研究

  • 正则化的影响:比较正则化平均距离 $\text{regDistDB}$、正则化项 $\parallel z - \mu_{\text{train}} \parallel_{2}$ 和未正则化平均距离 $\text{avgDistDB}$ 的性能。实验表明:
    1. 单独使用 $\parallel z - \mu_{\text{train}} \parallel_{2}$ 区分能力有限
    2. 正则化显著增强 ID/OOD 分离效果
    3. $\text{regDistDB}$ 优于 $\text{avgDistDB}$,支持第 3 节的等偏差比较理论(附录 B 提供理论解释)
  • 单个距离的影响:对fDBD的检测分数(基于到决策边界的特征距离的平均值)进行消融研究,通过对每个样本到决策边界的特征距离排序,使用前k个最小距离值的平均值来检测OOD。在CIFAR - 10和ImageNet基准测试上的实验表明,随着k的增加性能提高,证明了fDBD作为无超参数方法利用所有距离进行OOD检测的设计合理性。

image.png

创新点

  • 提出了一种新的判断OOD的方法,且效果上达到SOTA
  • 训练时间和复杂度明显缩小,采用两种损失效果均优秀
  • 消融实验说明正则化的平均距离效果具有优越性,能显著提高AUROC
0%