adarshcod30 commited on
Commit
44db0f5
·
verified ·
1 Parent(s): 534b24f

v2: three-backbone ensemble with corruption-matched augmentation

Browse files
Files changed (6) hide show
  1. README.md +27 -11
  2. config.json +6 -6
  3. evaluation_report.json +369 -136
  4. manifest.json +0 -0
  5. model.keras +2 -2
  6. serving.json +9 -9
README.md CHANGED
@@ -5,28 +5,26 @@ library_name: keras
5
  pipeline_tag: image-classification
6
  ---
7
 
8
- # OpenForensics Deepfake Detector (v1)
9
 
10
  A multi-backbone CNN ensemble that classifies face crops as **Real** or
11
- **Fake**. Backbones: resnet50, vgg16. Their pooled embeddings are
12
  concatenated and read by a shared classifier head.
13
 
14
  ## Output
15
 
16
  A single sigmoid: **P(Real)**. Fake is `1 - p`.
17
 
18
- The published threshold is **0.500** a neutral default, **not** a fitted operating point. A temperature of **1.099** was fitted on validation and is applied.
19
-
20
- Thresholds fitted on the validation split do not transfer to the test split for this dataset (see Limitations). Pick your own operating point from `threshold_sweep` in the evaluation report, on data resembling your deployment.
21
 
22
  ## Test metrics
23
 
24
  | Metric | Value |
25
  |---|---|
26
- | Accuracy | 0.8860 |
27
- | ROC-AUC | 0.9421 |
28
- | PR-AUC | 0.9527 |
29
- | Real images called fake | 175 (17.5%) |
30
 
31
  Measured on a held-out test split with horizontal-flip test-time
32
  augmentation. The split is content-hash deduplicated against train and
@@ -60,7 +58,25 @@ Loading needs the `PreprocessLayer` custom layer from
60
  ## Training data
61
 
62
  The face-cropped OpenForensics distribution (190,334 images at 256x256).
63
- Training used light augmentation only: horizontal flip, small brightness and contrast jitter. No corruption-matched augmentation.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
 
65
  ## Limitations
66
 
@@ -70,7 +86,7 @@ Training used light augmentation only: horizontal flip, small brightness and con
70
  the output.
71
  - Performance degrades on manipulation methods absent from OpenForensics.
72
  - Research and educational use. Not a forensic authority.
73
- - **Validation does not predict test performance on this dataset.** Recall on genuine images at threshold 0.5 is 0.984 on validation but 0.825 on test. The 10th percentile of scores on genuine images is 0.975 on validation and 0.138 on test a subset of test images is confidently misread rather than the whole distribution shifting. The test split carries degradations (desaturation, noise, blocking, blur) that train and validation do not. Expect calibration to drift on degraded inputs.
74
 
75
  ## Citation
76
 
 
5
  pipeline_tag: image-classification
6
  ---
7
 
8
+ # OpenForensics Deepfake Detector (v2)
9
 
10
  A multi-backbone CNN ensemble that classifies face crops as **Real** or
11
+ **Fake**. Backbones: resnet50, vgg16, efficientnetv2b0. Their pooled embeddings are
12
  concatenated and read by a shared classifier head.
13
 
14
  ## Output
15
 
16
  A single sigmoid: **P(Real)**. Fake is `1 - p`.
17
 
18
+ Decision threshold **0.362** and temperature **0.876** were fitted on a held-out validation split (target_recall criterion) and are carried in `serving.json`.
 
 
19
 
20
  ## Test metrics
21
 
22
  | Metric | Value |
23
  |---|---|
24
+ | Accuracy | 0.9480 |
25
+ | ROC-AUC | 0.9899 |
26
+ | PR-AUC | 0.9900 |
27
+ | Real images called fake | 25 (2.5%) |
28
 
29
  Measured on a held-out test split with horizontal-flip test-time
30
  augmentation. The split is content-hash deduplicated against train and
 
58
  ## Training data
59
 
60
  The face-cropped OpenForensics distribution (190,334 images at 256x256).
61
+ Training used corruption-matched augmentation desaturation, colour cast, noise, speckle, blur, JPEG artefacts, pixelation, brightness shift and occlusion because the test split is measurably more degraded than train.
62
+
63
+
64
+ ## Robustness
65
+
66
+ Accuracy with a single degradation family applied to the whole test set, one at a time.
67
+
68
+ | Degradation | Accuracy | ROC-AUC | vs clean |
69
+ |---|---|---|---|
70
+ | clean | 0.9405 | 0.9899 | — |
71
+ | desaturate | 0.9255 | 0.9874 | -0.0150 |
72
+ | colour_cast | 0.9230 | 0.9873 | -0.0175 |
73
+ | gaussian_noise | 0.9105 | 0.9827 | -0.0300 |
74
+ | speckle | 0.8745 | 0.9786 | -0.0660 |
75
+ | blur | 0.9025 | 0.9798 | -0.0380 |
76
+ | jpeg_artifact | 0.9260 | 0.9854 | -0.0145 |
77
+ | pixelate | 0.8725 | 0.9623 | -0.0680 |
78
+ | brightness_shift | 0.9210 | 0.9865 | -0.0195 |
79
+ | occlusion | 0.9300 | 0.9856 | -0.0105 |
80
 
81
  ## Limitations
82
 
 
86
  the output.
87
  - Performance degrades on manipulation methods absent from OpenForensics.
88
  - Research and educational use. Not a forensic authority.
89
+ - **Validation tracks test closely.** Recall on genuine images at threshold 0.5 is 0.986 on validation and 0.961 on test — a gap of 0.025. The 10th percentile of scores on genuine images is 0.977 and 0.830 respectively, so the operating point fitted on validation transfers. This is a property of the corruption-matched augmentation, not of the benchmark.
90
 
91
  ## Citation
92
 
config.json CHANGED
@@ -1,5 +1,5 @@
1
  {
2
- "name": "v1",
3
  "out_dir": "/Users/adarsh/Desktop/Projects/OpenForensics/runs",
4
  "data": {
5
  "base_dir": "/Users/adarsh/Desktop/Projects/OpenForensics/Dataset",
@@ -12,13 +12,14 @@
12
  224,
13
  224
14
  ],
15
- "corruption_prob": 0.0,
16
- "max_corruptions": 0
17
  },
18
  "model": {
19
  "backbones": [
20
  "resnet50",
21
- "vgg16"
 
22
  ],
23
  "head_units": 256,
24
  "dropout_branch": 0.4,
@@ -36,6 +37,5 @@
36
  "monitor_mode": "max",
37
  "early_stop_patience": 7,
38
  "reduce_lr_patience": 3
39
- },
40
- "provenance": "Legacy run. Weights predate this package and were trained by the original two-stage pipeline; this config records the evaluation settings, not a reproducible training recipe."
41
  }
 
1
  {
2
+ "name": "v2",
3
  "out_dir": "/Users/adarsh/Desktop/Projects/OpenForensics/runs",
4
  "data": {
5
  "base_dir": "/Users/adarsh/Desktop/Projects/OpenForensics/Dataset",
 
12
  224,
13
  224
14
  ],
15
+ "corruption_prob": 0.5,
16
+ "max_corruptions": 2
17
  },
18
  "model": {
19
  "backbones": [
20
  "resnet50",
21
+ "vgg16",
22
+ "efficientnetv2b0"
23
  ],
24
  "head_units": 256,
25
  "dropout_branch": 0.4,
 
37
  "monitor_mode": "max",
38
  "early_stop_patience": 7,
39
  "reduce_lr_patience": 3
40
+ }
 
41
  }
evaluation_report.json CHANGED
@@ -1,305 +1,538 @@
1
  {
2
- "model": "/Users/adarsh/Desktop/Projects/OpenForensics/runs/exp1_finetune/best_model_finetuned.keras",
3
  "threshold_sweep": [
4
  {
5
  "threshold": 0.05,
6
- "accuracy": 0.853,
7
- "real_called_fake": 77,
8
- "fake_called_real": 217
9
  },
10
  {
11
  "threshold": 0.1,
12
- "accuracy": 0.8795,
13
- "real_called_fake": 87,
14
- "fake_called_real": 154
15
  },
16
  {
17
  "threshold": 0.15,
18
- "accuracy": 0.8885,
19
- "real_called_fake": 103,
20
- "fake_called_real": 120
21
  },
22
  {
23
  "threshold": 0.2,
24
- "accuracy": 0.8915,
25
- "real_called_fake": 113,
26
- "fake_called_real": 104
27
  },
28
  {
29
  "threshold": 0.25,
30
- "accuracy": 0.8925,
31
- "real_called_fake": 124,
32
- "fake_called_real": 91
33
  },
34
  {
35
  "threshold": 0.3,
36
- "accuracy": 0.894,
37
- "real_called_fake": 132,
38
- "fake_called_real": 80
39
  },
40
  {
41
  "threshold": 0.35,
42
- "accuracy": 0.895,
43
- "real_called_fake": 139,
44
- "fake_called_real": 71
45
  },
46
  {
47
  "threshold": 0.4,
48
- "accuracy": 0.8945,
49
- "real_called_fake": 151,
50
- "fake_called_real": 60
51
  },
52
  {
53
  "threshold": 0.45,
54
- "accuracy": 0.8905,
55
- "real_called_fake": 164,
56
- "fake_called_real": 55
57
  },
58
  {
59
  "threshold": 0.5,
60
- "accuracy": 0.886,
61
- "real_called_fake": 175,
62
- "fake_called_real": 53
63
  },
64
  {
65
  "threshold": 0.55,
66
- "accuracy": 0.8825,
67
- "real_called_fake": 188,
68
- "fake_called_real": 47
69
  },
70
  {
71
  "threshold": 0.6,
72
- "accuracy": 0.88,
73
- "real_called_fake": 198,
74
- "fake_called_real": 42
75
  },
76
  {
77
  "threshold": 0.65,
78
- "accuracy": 0.8755,
79
- "real_called_fake": 210,
80
- "fake_called_real": 39
81
  },
82
  {
83
  "threshold": 0.7,
84
- "accuracy": 0.8735,
85
- "real_called_fake": 219,
86
- "fake_called_real": 34
87
  },
88
  {
89
  "threshold": 0.75,
90
- "accuracy": 0.8675,
91
- "real_called_fake": 231,
92
- "fake_called_real": 34
93
  },
94
  {
95
  "threshold": 0.8,
96
- "accuracy": 0.8635,
97
- "real_called_fake": 243,
98
- "fake_called_real": 30
99
  },
100
  {
101
  "threshold": 0.85,
102
- "accuracy": 0.8515,
103
- "real_called_fake": 273,
104
- "fake_called_real": 24
105
  },
106
  {
107
  "threshold": 0.9,
108
- "accuracy": 0.836,
109
- "real_called_fake": 309,
110
- "fake_called_real": 19
111
  },
112
  {
113
  "threshold": 0.95,
114
- "accuracy": 0.807,
115
- "real_called_fake": 377,
116
- "fake_called_real": 9
117
  }
118
  ],
119
- "manifest_digest": "599c942765ed9553",
120
  "tta": true,
121
  "calibration": {
122
- "temperature": 1.0986092864209605,
123
- "val_ece_raw": 0.005462571293115611,
124
- "val_ece_calibrated": 0.002969743043184234
125
  },
126
  "operating_point": {
127
- "criterion": "fixed",
128
- "threshold": 0.5,
129
- "rationale": "Thresholds fitted on validation do not transfer to this test split. At 0.5 recall on Real is 0.984 on validation but 0.825 on test; at 0.90 the gap widens to 0.951 vs 0.691. The 10th percentile of scores on genuine images is 0.975 on validation and 0.138 on test, so a subset of test images is confidently misread rather than the whole distribution shifting. 0.5 is published as a neutral default and the full threshold sweep ships alongside so callers can pick their own operating point on data resembling their deployment."
 
130
  },
131
  "test_at_0.5": {
132
  "threshold": 0.5,
133
- "accuracy": 0.886,
134
- "roc_auc": 0.94214,
135
- "pr_auc": 0.9527261743419954,
136
  "confusion_matrix": [
137
  [
138
- 947,
139
- 53
140
  ],
141
  [
142
- 175,
143
- 825
144
  ]
145
  ],
146
- "real_called_fake": 175,
147
- "fake_called_real": 53,
148
- "false_accusation_rate": 0.175,
149
- "ece": 0.05536929062008858,
150
  "n": 2000,
151
- "fake_recall": 0.947,
152
- "real_recall": 0.825
153
  },
154
  "test_at_threshold": {
155
- "threshold": 0.5,
156
- "accuracy": 0.886,
157
- "roc_auc": 0.94214,
158
- "pr_auc": 0.9527261743419954,
159
  "confusion_matrix": [
160
  [
161
- 947,
162
- 53
163
  ],
164
  [
165
- 175,
166
- 825
167
  ]
168
  ],
169
- "real_called_fake": 175,
170
- "fake_called_real": 53,
171
- "false_accusation_rate": 0.175,
172
- "ece": 0.05536929062008858,
173
  "n": 2000,
174
- "fake_recall": 0.947,
175
- "real_recall": 0.825
176
  },
177
  "risk_coverage": [
178
  {
179
  "coverage": 1.0,
180
  "n": 2000,
181
- "accuracy": 0.886,
182
- "min_confidence": 0.5004317760467529
183
  },
184
  {
185
  "coverage": 0.953,
186
  "n": 1905,
187
- "accuracy": 0.90498687664042,
188
- "min_confidence": 0.6455079317092896
189
  },
190
  {
191
  "coverage": 0.905,
192
  "n": 1810,
193
- "accuracy": 0.9187845303867404,
194
- "min_confidence": 0.7839853763580322
195
  },
196
  {
197
  "coverage": 0.858,
198
  "n": 1715,
199
- "accuracy": 0.9276967930029154,
200
- "min_confidence": 0.8622756600379944
201
  },
202
  {
203
  "coverage": 0.811,
204
  "n": 1621,
205
- "accuracy": 0.9358420727945712,
206
- "min_confidence": 0.9077473878860474
207
  },
208
  {
209
  "coverage": 0.763,
210
  "n": 1526,
211
- "accuracy": 0.9403669724770642,
212
- "min_confidence": 0.9426376223564148
213
  },
214
  {
215
  "coverage": 0.716,
216
  "n": 1431,
217
- "accuracy": 0.944095038434661,
218
- "min_confidence": 0.9612756371498108
219
  },
220
  {
221
  "coverage": 0.668,
222
  "n": 1336,
223
- "accuracy": 0.9505988023952096,
224
- "min_confidence": 0.9726122617721558
225
  },
226
  {
227
  "coverage": 0.621,
228
  "n": 1242,
229
- "accuracy": 0.9565217391304348,
230
- "min_confidence": 0.9810938835144043
231
  },
232
  {
233
  "coverage": 0.574,
234
  "n": 1147,
235
- "accuracy": 0.95640802092415,
236
- "min_confidence": 0.9872699975967407
237
  },
238
  {
239
  "coverage": 0.526,
240
  "n": 1052,
241
- "accuracy": 0.9562737642585551,
242
- "min_confidence": 0.9904727339744568
243
  },
244
  {
245
  "coverage": 0.479,
246
  "n": 957,
247
- "accuracy": 0.955067920585162,
248
- "min_confidence": 0.9927610158920288
249
  },
250
  {
251
  "coverage": 0.432,
252
  "n": 863,
253
- "accuracy": 0.9559675550405562,
254
- "min_confidence": 0.9945045709609985
255
  },
256
  {
257
  "coverage": 0.384,
258
  "n": 768,
259
- "accuracy": 0.9557291666666666,
260
- "min_confidence": 0.9956018924713135
261
  },
262
  {
263
  "coverage": 0.337,
264
  "n": 673,
265
- "accuracy": 0.9554234769687965,
266
- "min_confidence": 0.996526300907135
267
  },
268
  {
269
  "coverage": 0.289,
270
  "n": 578,
271
- "accuracy": 0.9532871972318339,
272
- "min_confidence": 0.9974053502082825
273
  },
274
  {
275
  "coverage": 0.242,
276
  "n": 484,
277
- "accuracy": 0.9504132231404959,
278
- "min_confidence": 0.9980881810188293
279
  },
280
  {
281
  "coverage": 0.195,
282
  "n": 389,
283
- "accuracy": 0.9408740359897172,
284
- "min_confidence": 0.9986152648925781
285
  },
286
  {
287
  "coverage": 0.147,
288
  "n": 294,
289
- "accuracy": 0.9421768707482994,
290
- "min_confidence": 0.9990310668945312
291
  },
292
  {
293
  "coverage": 0.1,
294
  "n": 200,
295
- "accuracy": 0.945,
296
- "min_confidence": 0.9993615746498108
297
  }
298
  ],
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
299
  "distribution_shift": {
300
- "recall_real_val_at_0.5": 0.9837,
301
- "recall_real_test_at_0.5": 0.825,
302
- "p10_real_scores_val": 0.9748,
303
- "p10_real_scores_test": 0.1375
304
  }
305
  }
 
1
  {
2
+ "model": "/Users/adarsh/Desktop/Projects/OpenForensics/runs/v2/final.keras",
3
  "threshold_sweep": [
4
  {
5
  "threshold": 0.05,
6
+ "accuracy": 0.874,
7
+ "real_called_fake": 4,
8
+ "fake_called_real": 248
9
  },
10
  {
11
  "threshold": 0.1,
12
+ "accuracy": 0.9085,
13
+ "real_called_fake": 7,
14
+ "fake_called_real": 176
15
  },
16
  {
17
  "threshold": 0.15,
18
+ "accuracy": 0.922,
19
+ "real_called_fake": 12,
20
+ "fake_called_real": 144
21
  },
22
  {
23
  "threshold": 0.2,
24
+ "accuracy": 0.9325,
25
+ "real_called_fake": 17,
26
+ "fake_called_real": 118
27
  },
28
  {
29
  "threshold": 0.25,
30
+ "accuracy": 0.9405,
31
+ "real_called_fake": 20,
32
+ "fake_called_real": 99
33
  },
34
  {
35
  "threshold": 0.3,
36
+ "accuracy": 0.9435,
37
+ "real_called_fake": 23,
38
+ "fake_called_real": 90
39
  },
40
  {
41
  "threshold": 0.35,
42
+ "accuracy": 0.9465,
43
+ "real_called_fake": 25,
44
+ "fake_called_real": 82
45
  },
46
  {
47
  "threshold": 0.4,
48
+ "accuracy": 0.95,
49
+ "real_called_fake": 26,
50
+ "fake_called_real": 74
51
  },
52
  {
53
  "threshold": 0.45,
54
+ "accuracy": 0.9515,
55
+ "real_called_fake": 32,
56
+ "fake_called_real": 65
57
  },
58
  {
59
  "threshold": 0.5,
60
+ "accuracy": 0.951,
61
+ "real_called_fake": 39,
62
+ "fake_called_real": 59
63
  },
64
  {
65
  "threshold": 0.55,
66
+ "accuracy": 0.9535,
67
+ "real_called_fake": 44,
68
+ "fake_called_real": 49
69
  },
70
  {
71
  "threshold": 0.6,
72
+ "accuracy": 0.9535,
73
+ "real_called_fake": 48,
74
+ "fake_called_real": 45
75
  },
76
  {
77
  "threshold": 0.65,
78
+ "accuracy": 0.95,
79
+ "real_called_fake": 59,
80
+ "fake_called_real": 41
81
  },
82
  {
83
  "threshold": 0.7,
84
+ "accuracy": 0.949,
85
+ "real_called_fake": 66,
86
+ "fake_called_real": 36
87
  },
88
  {
89
  "threshold": 0.75,
90
+ "accuracy": 0.944,
91
+ "real_called_fake": 81,
92
+ "fake_called_real": 31
93
  },
94
  {
95
  "threshold": 0.8,
96
+ "accuracy": 0.939,
97
+ "real_called_fake": 95,
98
+ "fake_called_real": 27
99
  },
100
  {
101
  "threshold": 0.85,
102
+ "accuracy": 0.9335,
103
+ "real_called_fake": 110,
104
+ "fake_called_real": 23
105
  },
106
  {
107
  "threshold": 0.9,
108
+ "accuracy": 0.9235,
109
+ "real_called_fake": 137,
110
+ "fake_called_real": 16
111
  },
112
  {
113
  "threshold": 0.95,
114
+ "accuracy": 0.8955,
115
+ "real_called_fake": 201,
116
+ "fake_called_real": 8
117
  }
118
  ],
119
+ "manifest_digest": "c1e5955e936b52d4",
120
  "tta": true,
121
  "calibration": {
122
+ "temperature": 0.8760257766124369,
123
+ "val_ece_raw": 0.008403347671031909,
124
+ "val_ece_calibrated": 0.0033754417697588602
125
  },
126
  "operating_point": {
127
+ "criterion": "target_recall",
128
+ "target": 0.99,
129
+ "threshold": 0.36217108368873596,
130
+ "rationale": "Chosen on validation to hold recall on genuine images at 0.99. Youden and F1 both land near 0.761, which raises real-images-called-fake from 39 to 83 without improving accuracy. The full threshold_sweep ships alongside."
131
  },
132
  "test_at_0.5": {
133
  "threshold": 0.5,
134
+ "accuracy": 0.951,
135
+ "roc_auc": 0.989896,
136
+ "pr_auc": 0.9899874925285668,
137
  "confusion_matrix": [
138
  [
139
+ 941,
140
+ 59
141
  ],
142
  [
143
+ 39,
144
+ 961
145
  ]
146
  ],
147
+ "real_called_fake": 39,
148
+ "fake_called_real": 59,
149
+ "false_accusation_rate": 0.039,
150
+ "ece": 0.007834798693656874,
151
  "n": 2000,
152
+ "fake_recall": 0.941,
153
+ "real_recall": 0.961
154
  },
155
  "test_at_threshold": {
156
+ "threshold": 0.36217108368873596,
157
+ "accuracy": 0.948,
158
+ "roc_auc": 0.989896,
159
+ "pr_auc": 0.9899874925285668,
160
  "confusion_matrix": [
161
  [
162
+ 921,
163
+ 79
164
  ],
165
  [
166
+ 25,
167
+ 975
168
  ]
169
  ],
170
+ "real_called_fake": 25,
171
+ "fake_called_real": 79,
172
+ "false_accusation_rate": 0.025,
173
+ "ece": 0.007834798693656874,
174
  "n": 2000,
175
+ "fake_recall": 0.921,
176
+ "real_recall": 0.975
177
  },
178
  "risk_coverage": [
179
  {
180
  "coverage": 1.0,
181
  "n": 2000,
182
+ "accuracy": 0.951,
183
+ "min_confidence": 0.5005548000335693
184
  },
185
  {
186
  "coverage": 0.953,
187
  "n": 1905,
188
+ "accuracy": 0.9690288713910761,
189
+ "min_confidence": 0.6960272789001465
190
  },
191
  {
192
  "coverage": 0.905,
193
  "n": 1810,
194
+ "accuracy": 0.9773480662983426,
195
+ "min_confidence": 0.824684739112854
196
  },
197
  {
198
  "coverage": 0.858,
199
  "n": 1715,
200
+ "accuracy": 0.9860058309037901,
201
+ "min_confidence": 0.8969419002532959
202
  },
203
  {
204
  "coverage": 0.811,
205
  "n": 1621,
206
+ "accuracy": 0.9907464528069093,
207
+ "min_confidence": 0.9355311989784241
208
  },
209
  {
210
  "coverage": 0.763,
211
  "n": 1526,
212
+ "accuracy": 0.9927916120576671,
213
+ "min_confidence": 0.9599580764770508
214
  },
215
  {
216
  "coverage": 0.716,
217
  "n": 1431,
218
+ "accuracy": 0.9937106918238994,
219
+ "min_confidence": 0.9731913805007935
220
  },
221
  {
222
  "coverage": 0.668,
223
  "n": 1336,
224
+ "accuracy": 0.9940119760479041,
225
+ "min_confidence": 0.981025755405426
226
  },
227
  {
228
  "coverage": 0.621,
229
  "n": 1242,
230
+ "accuracy": 0.9943639291465378,
231
+ "min_confidence": 0.986376166343689
232
  },
233
  {
234
  "coverage": 0.574,
235
  "n": 1147,
236
+ "accuracy": 0.997384481255449,
237
+ "min_confidence": 0.9896464943885803
238
  },
239
  {
240
  "coverage": 0.526,
241
  "n": 1052,
242
+ "accuracy": 0.9990494296577946,
243
+ "min_confidence": 0.992717444896698
244
  },
245
  {
246
  "coverage": 0.479,
247
  "n": 957,
248
+ "accuracy": 0.9989550679205852,
249
+ "min_confidence": 0.9947149753570557
250
  },
251
  {
252
  "coverage": 0.432,
253
  "n": 863,
254
+ "accuracy": 0.9988412514484357,
255
+ "min_confidence": 0.9961569905281067
256
  },
257
  {
258
  "coverage": 0.384,
259
  "n": 768,
260
+ "accuracy": 0.9986979166666666,
261
+ "min_confidence": 0.9970833659172058
262
  },
263
  {
264
  "coverage": 0.337,
265
  "n": 673,
266
+ "accuracy": 0.9985141158989599,
267
+ "min_confidence": 0.99782794713974
268
  },
269
  {
270
  "coverage": 0.289,
271
  "n": 578,
272
+ "accuracy": 1.0,
273
+ "min_confidence": 0.9984116554260254
274
  },
275
  {
276
  "coverage": 0.242,
277
  "n": 484,
278
+ "accuracy": 1.0,
279
+ "min_confidence": 0.9988195300102234
280
  },
281
  {
282
  "coverage": 0.195,
283
  "n": 389,
284
+ "accuracy": 1.0,
285
+ "min_confidence": 0.9991379976272583
286
  },
287
  {
288
  "coverage": 0.147,
289
  "n": 294,
290
+ "accuracy": 1.0,
291
+ "min_confidence": 0.9994103908538818
292
  },
293
  {
294
  "coverage": 0.1,
295
  "n": 200,
296
+ "accuracy": 1.0,
297
+ "min_confidence": 0.9996227025985718
298
  }
299
  ],
300
+ "per_corruption": {
301
+ "clean": {
302
+ "threshold": 0.7607657313346863,
303
+ "accuracy": 0.9405,
304
+ "roc_auc": 0.9898959999999999,
305
+ "pr_auc": 0.9899874874900219,
306
+ "confusion_matrix": [
307
+ [
308
+ 973,
309
+ 27
310
+ ],
311
+ [
312
+ 92,
313
+ 908
314
+ ]
315
+ ],
316
+ "real_called_fake": 92,
317
+ "fake_called_real": 27,
318
+ "false_accusation_rate": 0.092,
319
+ "ece": 0.01360419222712515,
320
+ "n": 2000,
321
+ "fake_recall": 0.973,
322
+ "real_recall": 0.908
323
+ },
324
+ "desaturate": {
325
+ "threshold": 0.7607657313346863,
326
+ "accuracy": 0.9255,
327
+ "roc_auc": 0.9873709999999999,
328
+ "pr_auc": 0.987042223907956,
329
+ "confusion_matrix": [
330
+ [
331
+ 976,
332
+ 24
333
+ ],
334
+ [
335
+ 125,
336
+ 875
337
+ ]
338
+ ],
339
+ "real_called_fake": 125,
340
+ "fake_called_real": 24,
341
+ "false_accusation_rate": 0.125,
342
+ "ece": 0.012363795459270471,
343
+ "n": 2000,
344
+ "fake_recall": 0.976,
345
+ "real_recall": 0.875
346
+ },
347
+ "colour_cast": {
348
+ "threshold": 0.7607657313346863,
349
+ "accuracy": 0.923,
350
+ "roc_auc": 0.9873129999999999,
351
+ "pr_auc": 0.9875305928718285,
352
+ "confusion_matrix": [
353
+ [
354
+ 978,
355
+ 22
356
+ ],
357
+ [
358
+ 132,
359
+ 868
360
+ ]
361
+ ],
362
+ "real_called_fake": 132,
363
+ "fake_called_real": 22,
364
+ "false_accusation_rate": 0.132,
365
+ "ece": 0.010169397294521293,
366
+ "n": 2000,
367
+ "fake_recall": 0.978,
368
+ "real_recall": 0.868
369
+ },
370
+ "gaussian_noise": {
371
+ "threshold": 0.7607657313346863,
372
+ "accuracy": 0.9105,
373
+ "roc_auc": 0.982704,
374
+ "pr_auc": 0.9828172399928267,
375
+ "confusion_matrix": [
376
+ [
377
+ 965,
378
+ 35
379
+ ],
380
+ [
381
+ 144,
382
+ 856
383
+ ]
384
+ ],
385
+ "real_called_fake": 144,
386
+ "fake_called_real": 35,
387
+ "false_accusation_rate": 0.144,
388
+ "ece": 0.008556965082883835,
389
+ "n": 2000,
390
+ "fake_recall": 0.965,
391
+ "real_recall": 0.856
392
+ },
393
+ "speckle": {
394
+ "threshold": 0.7607657313346863,
395
+ "accuracy": 0.8745,
396
+ "roc_auc": 0.978552,
397
+ "pr_auc": 0.9775095733546318,
398
+ "confusion_matrix": [
399
+ [
400
+ 976,
401
+ 24
402
+ ],
403
+ [
404
+ 227,
405
+ 773
406
+ ]
407
+ ],
408
+ "real_called_fake": 227,
409
+ "fake_called_real": 24,
410
+ "false_accusation_rate": 0.227,
411
+ "ece": 0.012776412010192894,
412
+ "n": 2000,
413
+ "fake_recall": 0.976,
414
+ "real_recall": 0.773
415
+ },
416
+ "blur": {
417
+ "threshold": 0.7607657313346863,
418
+ "accuracy": 0.9025,
419
+ "roc_auc": 0.9797769999999999,
420
+ "pr_auc": 0.9788085527230819,
421
+ "confusion_matrix": [
422
+ [
423
+ 960,
424
+ 40
425
+ ],
426
+ [
427
+ 155,
428
+ 845
429
+ ]
430
+ ],
431
+ "real_called_fake": 155,
432
+ "fake_called_real": 40,
433
+ "false_accusation_rate": 0.155,
434
+ "ece": 0.01519329649209979,
435
+ "n": 2000,
436
+ "fake_recall": 0.96,
437
+ "real_recall": 0.845
438
+ },
439
+ "jpeg_artifact": {
440
+ "threshold": 0.7607657313346863,
441
+ "accuracy": 0.926,
442
+ "roc_auc": 0.985421,
443
+ "pr_auc": 0.9849191247097082,
444
+ "confusion_matrix": [
445
+ [
446
+ 966,
447
+ 34
448
+ ],
449
+ [
450
+ 114,
451
+ 886
452
+ ]
453
+ ],
454
+ "real_called_fake": 114,
455
+ "fake_called_real": 34,
456
+ "false_accusation_rate": 0.114,
457
+ "ece": 0.010649448722600941,
458
+ "n": 2000,
459
+ "fake_recall": 0.966,
460
+ "real_recall": 0.886
461
+ },
462
+ "pixelate": {
463
+ "threshold": 0.7607657313346863,
464
+ "accuracy": 0.8725,
465
+ "roc_auc": 0.9622930000000001,
466
+ "pr_auc": 0.9616763347010586,
467
+ "confusion_matrix": [
468
+ [
469
+ 943,
470
+ 57
471
+ ],
472
+ [
473
+ 198,
474
+ 802
475
+ ]
476
+ ],
477
+ "real_called_fake": 198,
478
+ "fake_called_real": 57,
479
+ "false_accusation_rate": 0.198,
480
+ "ece": 0.03926752486824989,
481
+ "n": 2000,
482
+ "fake_recall": 0.943,
483
+ "real_recall": 0.802
484
+ },
485
+ "brightness_shift": {
486
+ "threshold": 0.7607657313346863,
487
+ "accuracy": 0.921,
488
+ "roc_auc": 0.986505,
489
+ "pr_auc": 0.9866079174092961,
490
+ "confusion_matrix": [
491
+ [
492
+ 975,
493
+ 25
494
+ ],
495
+ [
496
+ 133,
497
+ 867
498
+ ]
499
+ ],
500
+ "real_called_fake": 133,
501
+ "fake_called_real": 25,
502
+ "false_accusation_rate": 0.133,
503
+ "ece": 0.01671682763099669,
504
+ "n": 2000,
505
+ "fake_recall": 0.975,
506
+ "real_recall": 0.867
507
+ },
508
+ "occlusion": {
509
+ "threshold": 0.7607657313346863,
510
+ "accuracy": 0.93,
511
+ "roc_auc": 0.985571,
512
+ "pr_auc": 0.9846328275987414,
513
+ "confusion_matrix": [
514
+ [
515
+ 968,
516
+ 32
517
+ ],
518
+ [
519
+ 108,
520
+ 892
521
+ ]
522
+ ],
523
+ "real_called_fake": 108,
524
+ "fake_called_real": 32,
525
+ "false_accusation_rate": 0.108,
526
+ "ece": 0.019010440915823004,
527
+ "n": 2000,
528
+ "fake_recall": 0.968,
529
+ "real_recall": 0.892
530
+ }
531
+ },
532
  "distribution_shift": {
533
+ "recall_real_val_at_0.5": 0.986,
534
+ "recall_real_test_at_0.5": 0.961,
535
+ "p10_real_scores_val": 0.9771469235420227,
536
+ "p10_real_scores_test": 0.8302948474884033
537
  }
538
  }
manifest.json ADDED
The diff for this file is too large to render. See raw diff
 
model.keras CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:1bd92b1c334b738ae0e4dfb92dde7a5b77d08b86680ea02ab6d2b2c05272459e
3
- size 157119017
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:01cf24aa96836c3927649bc2d9ad4844616b7915b3ed04fb41a9bc0c3545230b
3
+ size 183329962
serving.json CHANGED
@@ -21,11 +21,11 @@
21
  ],
22
  "note": "P(image is Real). Fake is 1 - p."
23
  },
24
- "params": 39092929,
25
  "decision": {
26
- "threshold": 0.5,
27
- "temperature": 1.0986092864209605,
28
- "criterion": "fixed",
29
  "calibrated": true
30
  },
31
  "tta": {
@@ -35,10 +35,10 @@
35
  "used_in_eval": true
36
  },
37
  "test_metrics": {
38
- "accuracy": 0.886,
39
- "roc_auc": 0.94214,
40
- "pr_auc": 0.9527261743419954,
41
- "real_called_fake": 175,
42
- "false_accusation_rate": 0.175
43
  }
44
  }
 
21
  ],
22
  "note": "P(image is Real). Fake is 1 - p."
23
  },
24
+ "params": 45406737,
25
  "decision": {
26
+ "threshold": 0.36217108368873596,
27
+ "temperature": 0.8760257766124369,
28
+ "criterion": "target_recall",
29
  "calibrated": true
30
  },
31
  "tta": {
 
35
  "used_in_eval": true
36
  },
37
  "test_metrics": {
38
+ "accuracy": 0.948,
39
+ "roc_auc": 0.989896,
40
+ "pr_auc": 0.9899874925285668,
41
+ "real_called_fake": 25,
42
+ "false_accusation_rate": 0.025
43
  }
44
  }