Upload folder using huggingface_hub
Browse files- .gitattributes +6 -0
- README.md +15 -4
- clips/FVRA__animate__77f__main__id07839__QTWWQBdhWY_00029__id07683.mp4 +3 -0
- clips/FVRA__s2v__77f__main__id08406_qr5lYg7ej40_00213__id05444.mp4 +3 -0
- clips/RVFA__seed_vc__153f__main__id00460_KCBOXmDu5Ks_00025__id08352.mp4 +3 -0
- clips/RVRA__real__77f__main__id05877_6QUcq_6B-LU_00011__id07768.mp4 +3 -0
- clips/RVRA__real__77f__main__id05877_q_ZAQf6KfTQ_00093__id05564.mp4 +3 -0
- clips/RVRA__real__77f__main__id07839_gJgj1DxOfKA_00045__id07786.mp4 +3 -0
- index.html +170 -17
- samples.json +132 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,9 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
clips/FVRA__animate__77f__main__id07839__QTWWQBdhWY_00029__id07683.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 37 |
+
clips/FVRA__s2v__77f__main__id08406_qr5lYg7ej40_00213__id05444.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 38 |
+
clips/RVFA__seed_vc__153f__main__id00460_KCBOXmDu5Ks_00025__id08352.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 39 |
+
clips/RVRA__real__77f__main__id05877_6QUcq_6B-LU_00011__id07768.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 40 |
+
clips/RVRA__real__77f__main__id05877_q_ZAQf6KfTQ_00093__id05564.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 41 |
+
clips/RVRA__real__77f__main__id07839_gJgj1DxOfKA_00045__id07786.mp4 filter=lfs diff=lfs merge=lfs -text
|
README.md
CHANGED
|
@@ -1,10 +1,21 @@
|
|
| 1 |
---
|
| 2 |
-
title:
|
| 3 |
-
emoji:
|
| 4 |
colorFrom: indigo
|
| 5 |
-
colorTo:
|
| 6 |
sdk: static
|
|
|
|
| 7 |
pinned: false
|
|
|
|
| 8 |
---
|
| 9 |
|
| 10 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
---
|
| 2 |
+
title: MOZAIC Sample Explorer
|
| 3 |
+
emoji: 🎭
|
| 4 |
colorFrom: indigo
|
| 5 |
+
colorTo: gray
|
| 6 |
sdk: static
|
| 7 |
+
app_file: index.html
|
| 8 |
pinned: false
|
| 9 |
+
short_description: Gemini zero-shot answers on MOZAIC deepfake samples
|
| 10 |
---
|
| 11 |
|
| 12 |
+
# MOZAIC sample explorer
|
| 13 |
+
|
| 14 |
+
A small pilot from MOZAIC, an audio-visual deepfake benchmark built on VoxCeleb2
|
| 15 |
+
(code: https://github.com/VectorInstitute/mozaic). It shows Gemini's zero-shot answers on
|
| 16 |
+
example questions from each task (T1 spot the fake, T2 manipulation type, T3 same person,
|
| 17 |
+
T3.5 real same person), with the clips, the correct answers and the pilot-run scores.
|
| 18 |
+
|
| 19 |
+
Clips are copied from the MOZAIC release unchanged (video stream untouched; audio
|
| 20 |
+
re-encoded to AAC so browsers can play it). Fake clips are synthetic media made for
|
| 21 |
+
detection research. The pilot is far too small for conclusions.
|
clips/FVRA__animate__77f__main__id07839__QTWWQBdhWY_00029__id07683.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:fb541e2410de06410bcd71789b65c745ba1b36abc98305252bb25630c731f405
|
| 3 |
+
size 107958
|
clips/FVRA__s2v__77f__main__id08406_qr5lYg7ej40_00213__id05444.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:11a10bd416821b8601bfaebfc9fec4d7c1deb0e480874a4f5470605b111a0baf
|
| 3 |
+
size 119994
|
clips/RVFA__seed_vc__153f__main__id00460_KCBOXmDu5Ks_00025__id08352.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:42ce21a3fa99eaa074a33dab7c90129065c8466a01a5ba46f1fcc019a37dd7bb
|
| 3 |
+
size 260939
|
clips/RVRA__real__77f__main__id05877_6QUcq_6B-LU_00011__id07768.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:175f6a038574049752362c47d6f9cac10be0eb0633155529e0d2b44453a92f3a
|
| 3 |
+
size 128751
|
clips/RVRA__real__77f__main__id05877_q_ZAQf6KfTQ_00093__id05564.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:d20f676dd5ce8f1339b5687fdcbf0d1dff4b9f62e35ea0820c3b5d1ad984c3da
|
| 3 |
+
size 135135
|
clips/RVRA__real__77f__main__id07839_gJgj1DxOfKA_00045__id07786.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:51819f6865267482967c0b79c5e42203166c3b24c138f881961093c9674fb25f
|
| 3 |
+
size 135567
|
index.html
CHANGED
|
@@ -1,19 +1,172 @@
|
|
| 1 |
<!doctype html>
|
| 2 |
-
<html>
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
</html>
|
|
|
|
| 1 |
<!doctype html>
|
| 2 |
+
<html lang="en">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="utf-8">
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
| 6 |
+
<title>MOZAIC Sample Explorer</title>
|
| 7 |
+
<style>
|
| 8 |
+
:root {
|
| 9 |
+
--bg: #f7f7f8; --card: #ffffff; --text: #1b1c1f; --muted: #62656e; --line: #e2e3e7;
|
| 10 |
+
--accent: #4f46e5; --ok: #15803d; --bad: #b91c1c; --code: #f0f0f3;
|
| 11 |
+
}
|
| 12 |
+
@media (prefers-color-scheme: dark) {
|
| 13 |
+
:root:not([data-theme="light"]) {
|
| 14 |
+
--bg: #111214; --card: #1a1b1f; --text: #ececf0; --muted: #a0a3ad; --line: #2c2e34;
|
| 15 |
+
--accent: #8b85ff; --ok: #4ade80; --bad: #f87171; --code: #24262c;
|
| 16 |
+
}
|
| 17 |
+
}
|
| 18 |
+
:root[data-theme="dark"] {
|
| 19 |
+
--bg: #111214; --card: #1a1b1f; --text: #ececf0; --muted: #a0a3ad; --line: #2c2e34;
|
| 20 |
+
--accent: #8b85ff; --ok: #4ade80; --bad: #f87171; --code: #24262c;
|
| 21 |
+
}
|
| 22 |
+
* { box-sizing: border-box; }
|
| 23 |
+
body { margin: 0; background: var(--bg); color: var(--text);
|
| 24 |
+
font: 15px/1.55 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; }
|
| 25 |
+
main { max-width: 1040px; margin: 0 auto; padding: 28px 16px 48px; }
|
| 26 |
+
h1 { font-size: 1.7rem; margin: 0 0 6px; }
|
| 27 |
+
.lede { color: var(--muted); margin: 0 0 4px; }
|
| 28 |
+
.fine { color: var(--muted); font-size: .82rem; margin: 0 0 20px; }
|
| 29 |
+
code { background: var(--code); padding: 1px 6px; border-radius: 5px; font-size: .88em; }
|
| 30 |
+
.tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--line); margin-bottom: 18px; overflow-x: auto; }
|
| 31 |
+
.tabs button { background: none; border: 0; border-bottom: 2px solid transparent; color: var(--muted);
|
| 32 |
+
padding: 9px 12px; font: inherit; cursor: pointer; white-space: nowrap; }
|
| 33 |
+
.tabs button[aria-selected="true"] { color: var(--accent); border-bottom-color: var(--accent); font-weight: 600; }
|
| 34 |
+
.task-q { font-weight: 600; margin: 0; }
|
| 35 |
+
.task-in { color: var(--muted); margin: 2px 0 14px; }
|
| 36 |
+
.note { color: var(--muted); font-size: .82rem; margin: 0 0 6px; }
|
| 37 |
+
.stats { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; margin-bottom: 18px; }
|
| 38 |
+
.stat { background: var(--card); border: 1px solid var(--line); border-radius: 10px; padding: 10px 12px; }
|
| 39 |
+
.stat b { display: block; font-size: 1.45rem; font-variant-numeric: tabular-nums; }
|
| 40 |
+
.stat span { color: var(--muted); font-size: .82rem; }
|
| 41 |
+
.nav { display: flex; gap: 8px; align-items: center; margin-bottom: 14px; }
|
| 42 |
+
.nav select { flex: 1; min-width: 0; padding: 8px 10px; border-radius: 8px; border: 1px solid var(--line);
|
| 43 |
+
background: var(--card); color: var(--text); font: inherit; }
|
| 44 |
+
.nav button { padding: 8px 14px; border-radius: 8px; border: 1px solid var(--line); background: var(--card);
|
| 45 |
+
color: var(--text); font: inherit; cursor: pointer; }
|
| 46 |
+
.clips { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 12px; margin-bottom: 16px; }
|
| 47 |
+
figure { margin: 0; background: var(--card); border: 1px solid var(--line); border-radius: 10px; padding: 10px; }
|
| 48 |
+
figure video { width: 100%; max-height: 320px; background: #000; border-radius: 6px; display: block; }
|
| 49 |
+
figcaption { color: var(--muted); font-size: .84rem; margin-top: 6px; }
|
| 50 |
+
.grid { display: grid; grid-template-columns: 3fr 2fr; gap: 16px; }
|
| 51 |
+
.card { background: var(--card); border: 1px solid var(--line); border-radius: 10px; padding: 14px 16px; }
|
| 52 |
+
.card h3 { font-size: .8rem; text-transform: uppercase; letter-spacing: .04em; color: var(--muted); margin: 0 0 6px; }
|
| 53 |
+
blockquote { margin: 0 0 12px; padding-left: 12px; border-left: 3px solid var(--line); }
|
| 54 |
+
table { border-collapse: collapse; width: 100%; margin-top: 10px; }
|
| 55 |
+
th, td { text-align: left; padding: 7px 8px; border-bottom: 1px solid var(--line); }
|
| 56 |
+
th { color: var(--muted); font-weight: 500; font-size: .85rem; }
|
| 57 |
+
.ok { color: var(--ok); font-weight: 600; } .bad { color: var(--bad); font-weight: 600; }
|
| 58 |
+
details { margin-top: 14px; } summary { cursor: pointer; color: var(--muted); }
|
| 59 |
+
pre { background: var(--code); padding: 10px; border-radius: 8px; overflow-x: auto; font-size: .85rem; }
|
| 60 |
+
ul { margin: 0; padding-left: 18px; }
|
| 61 |
+
@media (max-width: 680px) {
|
| 62 |
+
.stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
| 63 |
+
.grid { grid-template-columns: 1fr; }
|
| 64 |
+
}
|
| 65 |
+
</style>
|
| 66 |
+
</head>
|
| 67 |
+
<body>
|
| 68 |
+
<main>
|
| 69 |
+
<h1>MOZAIC sample explorer</h1>
|
| 70 |
+
<p class="lede">MOZAIC is an audio-visual deepfake benchmark built on VoxCeleb2. Every clip pairs a real or fake face
|
| 71 |
+
with a real or fake voice. This page shows a small pilot: <code id="model">…</code> answering MOZAIC questions
|
| 72 |
+
zero-shot, with example clips per task.</p>
|
| 73 |
+
<p class="fine">Research demo. Fake clips are synthetic media made for detection research; they do not show anything
|
| 74 |
+
the people in them said or did. A pilot this small is far too few for conclusions.</p>
|
| 75 |
+
<div class="tabs" role="tablist" id="tabs"></div>
|
| 76 |
+
<section id="panel"></section>
|
| 77 |
+
</main>
|
| 78 |
+
<script>
|
| 79 |
+
const TASKS = {
|
| 80 |
+
t1: ["T1 · Spot the fake", "Which part is fake: the video, the audio, both, or neither?",
|
| 81 |
+
"The model saw 32 frames and heard the audio."],
|
| 82 |
+
t2: ["T2 · Manipulation type", "How was the video made?", "The model saw 32 frames only, no sound."],
|
| 83 |
+
t3: ["T3 · Same person", "Is the face (or voice) in clip 1 the same person as in clip 2?",
|
| 84 |
+
"Face questions: frames of both clips, no sound. Voice questions: sound of both clips, no frames."],
|
| 85 |
+
t3_5: ["T3.5 · Real same person", "Is clip 1 a real recording of clip 2's person?",
|
| 86 |
+
"Face questions: frames of both clips, no sound. Voice questions: sound of both clips, no frames."],
|
| 87 |
+
};
|
| 88 |
+
const LABELS = { RVRA: "real video · real audio", RVFA: "real video · fake audio",
|
| 89 |
+
FVRA: "fake video · real audio", FVFA: "fake video · fake audio" };
|
| 90 |
+
const METHODS = { real: "camera (real)", facefusion: "FaceFusion face swap", s2v: "Wan2.2-S2V (audio-driven)",
|
| 91 |
+
animate: "Wan2.2-Animate (video-driven)", seed_vc: "Seed-VC voice conversion" };
|
| 92 |
+
const esc = s => String(s ?? "").replace(/[&<>"']/g, c => ({ "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }[c]));
|
| 93 |
+
|
| 94 |
+
function clipDesc(clip) {
|
| 95 |
+
const [label, method, frames, arm] = clip.split("__");
|
| 96 |
+
const parts = [LABELS[label] || label, METHODS[method] || method, frames.replace("f", " frames")];
|
| 97 |
+
if (arm !== "main") parts.push(`${arm} audio`);
|
| 98 |
+
return parts.join(" · ");
|
| 99 |
+
}
|
| 100 |
+
|
| 101 |
+
let DATA, current = { task: null, i: 0 };
|
| 102 |
+
|
| 103 |
+
function renderTabs() {
|
| 104 |
+
const tabs = document.getElementById("tabs");
|
| 105 |
+
tabs.innerHTML = "";
|
| 106 |
+
for (const [key, [title]] of Object.entries(TASKS)) {
|
| 107 |
+
if (!DATA.tasks[key] || !DATA.tasks[key].items.length) continue;
|
| 108 |
+
const b = document.createElement("button");
|
| 109 |
+
b.role = "tab"; b.textContent = title;
|
| 110 |
+
b.setAttribute("aria-selected", key === current.task);
|
| 111 |
+
b.onclick = () => { current = { task: key, i: 0 }; renderTabs(); renderPanel(); };
|
| 112 |
+
tabs.appendChild(b);
|
| 113 |
+
}
|
| 114 |
+
}
|
| 115 |
+
|
| 116 |
+
function renderPanel() {
|
| 117 |
+
const key = current.task, task = DATA.tasks[key], s = task.scores, it = task.items[current.i];
|
| 118 |
+
const [, question, inputs] = TASKS[key];
|
| 119 |
+
const right = Math.round(s.accuracy * s.n);
|
| 120 |
+
const opts = task.items.map((x, i) =>
|
| 121 |
+
`<option value="${i}" ${i === current.i ? "selected" : ""}>${x.correct ? "✓" : "✗"} #${i + 1}${x.part ? ` [${x.part}]` : ""} ${esc(clipDesc(x.clips[0]))}</option>`).join("");
|
| 122 |
+
const clips = it.clips.map((c, n) => `
|
| 123 |
+
<figure><video controls preload="metadata" playsinline src="clips/${encodeURIComponent(c)}"></video>
|
| 124 |
+
<figcaption>Clip ${n + 1}${it.clips.length > 1 && n === 1 ? " (real reference)" : ""}</figcaption></figure>`).join("");
|
| 125 |
+
document.getElementById("panel").innerHTML = `
|
| 126 |
+
<p class="task-q">${esc(question)}</p>
|
| 127 |
+
<p class="task-in">${esc(inputs)}</p>
|
| 128 |
+
<p class="note">Scores over all ${s.n} questions Gemini answered in this pilot run; ${task.items.length} shown below.</p>
|
| 129 |
+
<div class="stats">
|
| 130 |
+
<div class="stat"><b>${right}/${s.n}</b><span>correct</span></div>
|
| 131 |
+
<div class="stat"><b>${s.accuracy.toFixed(2)}</b><span>accuracy (95% CI ${s.ci95[0].toFixed(2)}–${s.ci95[1].toFixed(2)})</span></div>
|
| 132 |
+
<div class="stat"><b>${s.balanced_accuracy.toFixed(2)}</b><span>balanced accuracy</span></div>
|
| 133 |
+
<div class="stat"><b>${s.cohen_kappa.toFixed(2)}</b><span>Cohen's κ</span></div>
|
| 134 |
+
</div>
|
| 135 |
+
<div class="nav">
|
| 136 |
+
<button id="prev" aria-label="Previous sample">◀</button>
|
| 137 |
+
<select id="pick" aria-label="Sample">${opts}</select>
|
| 138 |
+
<button id="next" aria-label="Next sample">▶</button>
|
| 139 |
+
</div>
|
| 140 |
+
<div class="clips">${clips}</div>
|
| 141 |
+
<div class="grid">
|
| 142 |
+
<div class="card">
|
| 143 |
+
<h3>Question</h3>
|
| 144 |
+
<blockquote>${esc(it.question)}</blockquote>
|
| 145 |
+
<div>Options, in the order shown: ${it.options.map(o => `<code>${esc(o)}</code>`).join(" · ")}</div>
|
| 146 |
+
<table>
|
| 147 |
+
<tr><th>Correct answer</th><th>Gemini answered</th><th></th></tr>
|
| 148 |
+
<tr><td><b>${esc(it.gt_answer)}</b></td><td><b>${esc(it.pred_answer ?? "— unreadable —")}</b></td>
|
| 149 |
+
<td class="${it.correct ? "ok" : "bad"}">${it.correct ? "✓ Correct" : "✗ Wrong"}</td></tr>
|
| 150 |
+
</table>
|
| 151 |
+
</div>
|
| 152 |
+
<div class="card">
|
| 153 |
+
<h3>About the clip(s), hidden from the model</h3>
|
| 154 |
+
<ul>${it.clips.map((c, n) => `<li><b>Clip ${n + 1}:</b> ${esc(clipDesc(c))}</li>`).join("")}</ul>
|
| 155 |
+
<details><summary>Gemini's raw reply</summary><pre>${esc((it.raw || "").trim())}</pre></details>
|
| 156 |
+
</div>
|
| 157 |
+
</div>`;
|
| 158 |
+
const go = d => { current.i = (current.i + d + task.items.length) % task.items.length; renderPanel(); };
|
| 159 |
+
document.getElementById("prev").onclick = () => go(-1);
|
| 160 |
+
document.getElementById("next").onclick = () => go(1);
|
| 161 |
+
document.getElementById("pick").onchange = e => { current.i = +e.target.value; renderPanel(); };
|
| 162 |
+
}
|
| 163 |
+
|
| 164 |
+
fetch("samples.json").then(r => r.json()).then(d => {
|
| 165 |
+
DATA = d;
|
| 166 |
+
document.getElementById("model").textContent = d.model;
|
| 167 |
+
current.task = Object.keys(TASKS).find(k => d.tasks[k] && d.tasks[k].items.length);
|
| 168 |
+
renderTabs(); renderPanel();
|
| 169 |
+
}).catch(e => { document.getElementById("panel").textContent = "Could not load samples.json: " + e; });
|
| 170 |
+
</script>
|
| 171 |
+
</body>
|
| 172 |
</html>
|
samples.json
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"model": "gemini-3.8-flash",
|
| 3 |
+
"experiment": "shaina_fresh_test",
|
| 4 |
+
"tasks": {
|
| 5 |
+
"t1": {
|
| 6 |
+
"scores": {
|
| 7 |
+
"n": 10,
|
| 8 |
+
"accuracy": 0.2,
|
| 9 |
+
"ci95": [
|
| 10 |
+
0.0567,
|
| 11 |
+
0.5098
|
| 12 |
+
],
|
| 13 |
+
"balanced_accuracy": 0.1875,
|
| 14 |
+
"cohen_kappa": -0.0256
|
| 15 |
+
},
|
| 16 |
+
"items": [
|
| 17 |
+
{
|
| 18 |
+
"id": "t1_RVFA__seed_vc__153f__main__id00460_KCBOXmDu5Ks_00025__id08352",
|
| 19 |
+
"clips": [
|
| 20 |
+
"RVFA__seed_vc__153f__main__id00460_KCBOXmDu5Ks_00025__id08352.mp4"
|
| 21 |
+
],
|
| 22 |
+
"part": null,
|
| 23 |
+
"question": "Which part of this audio-visual clip, if any, is AI-generated or manipulated? A real recording that was only processed, without changing who is seen or heard, still counts as real.",
|
| 24 |
+
"options": [
|
| 25 |
+
"neither",
|
| 26 |
+
"both",
|
| 27 |
+
"the video",
|
| 28 |
+
"the audio"
|
| 29 |
+
],
|
| 30 |
+
"gt_answer": "the audio",
|
| 31 |
+
"pred_answer": "neither",
|
| 32 |
+
"correct": false,
|
| 33 |
+
"raw": "```json\n{\"answer\": \"neither\"}\n```"
|
| 34 |
+
}
|
| 35 |
+
]
|
| 36 |
+
},
|
| 37 |
+
"t2": {
|
| 38 |
+
"scores": {
|
| 39 |
+
"n": 10,
|
| 40 |
+
"accuracy": 0.5,
|
| 41 |
+
"ci95": [
|
| 42 |
+
0.2366,
|
| 43 |
+
0.7634
|
| 44 |
+
],
|
| 45 |
+
"balanced_accuracy": 0.5,
|
| 46 |
+
"cohen_kappa": 0.3333
|
| 47 |
+
},
|
| 48 |
+
"items": [
|
| 49 |
+
{
|
| 50 |
+
"id": "t2_FVRA__s2v__77f__main__id08406_qr5lYg7ej40_00213__id05444",
|
| 51 |
+
"clips": [
|
| 52 |
+
"FVRA__s2v__77f__main__id08406_qr5lYg7ej40_00213__id05444.mp4"
|
| 53 |
+
],
|
| 54 |
+
"part": null,
|
| 55 |
+
"question": "How was the video in this clip made? This question is only about the video (what you see), not the sound. Normal processing such as brightness, colour or compression does not count.",
|
| 56 |
+
"options": [
|
| 57 |
+
"video-driven animation",
|
| 58 |
+
"audio-driven animation",
|
| 59 |
+
"real",
|
| 60 |
+
"face swap"
|
| 61 |
+
],
|
| 62 |
+
"gt_answer": "audio-driven animation",
|
| 63 |
+
"pred_answer": "video-driven animation",
|
| 64 |
+
"correct": false,
|
| 65 |
+
"raw": "{\"answer\": \"video-driven animation\"}"
|
| 66 |
+
}
|
| 67 |
+
]
|
| 68 |
+
},
|
| 69 |
+
"t3": {
|
| 70 |
+
"scores": {
|
| 71 |
+
"n": 10,
|
| 72 |
+
"accuracy": 0.7,
|
| 73 |
+
"ci95": [
|
| 74 |
+
0.3968,
|
| 75 |
+
0.8922
|
| 76 |
+
],
|
| 77 |
+
"balanced_accuracy": 0.7084,
|
| 78 |
+
"cohen_kappa": 0.4
|
| 79 |
+
},
|
| 80 |
+
"items": [
|
| 81 |
+
{
|
| 82 |
+
"id": "t3_face_A_FVRA__animate__77f__main__id07839__QTWWQBdhWY_00029__id07683",
|
| 83 |
+
"clips": [
|
| 84 |
+
"FVRA__animate__77f__main__id07839__QTWWQBdhWY_00029__id07683.mp4",
|
| 85 |
+
"RVRA__real__77f__main__id07839_gJgj1DxOfKA_00045__id07786.mp4"
|
| 86 |
+
],
|
| 87 |
+
"part": "face",
|
| 88 |
+
"question": "Clip 2 is a real recording of one person. Look only at the faces: is the face in clip 1 the same person as in clip 2? Face means the inner face: eyes, nose and mouth.",
|
| 89 |
+
"options": [
|
| 90 |
+
"yes",
|
| 91 |
+
"no"
|
| 92 |
+
],
|
| 93 |
+
"gt_answer": "no",
|
| 94 |
+
"pred_answer": "no",
|
| 95 |
+
"correct": true,
|
| 96 |
+
"raw": "```json\n{\"answer\": \"no\"}\n```"
|
| 97 |
+
}
|
| 98 |
+
]
|
| 99 |
+
},
|
| 100 |
+
"t3_5": {
|
| 101 |
+
"scores": {
|
| 102 |
+
"n": 10,
|
| 103 |
+
"accuracy": 0.8,
|
| 104 |
+
"ci95": [
|
| 105 |
+
0.4902,
|
| 106 |
+
0.9433
|
| 107 |
+
],
|
| 108 |
+
"balanced_accuracy": 0.75,
|
| 109 |
+
"cohen_kappa": 0.5455
|
| 110 |
+
},
|
| 111 |
+
"items": [
|
| 112 |
+
{
|
| 113 |
+
"id": "t35_face_A_RVRA__real__77f__main__id05877_q_ZAQf6KfTQ_00093__id05564",
|
| 114 |
+
"clips": [
|
| 115 |
+
"RVRA__real__77f__main__id05877_q_ZAQf6KfTQ_00093__id05564.mp4",
|
| 116 |
+
"RVRA__real__77f__main__id05877_6QUcq_6B-LU_00011__id07768.mp4"
|
| 117 |
+
],
|
| 118 |
+
"part": "face",
|
| 119 |
+
"question": "Clip 2 is a real recording of one person. Look only at the faces: is clip 1 a real recording of that same person's face? Answer no if the face in clip 1 belongs to someone else, or was swapped, changed or made by a computer, even if it looks like that person. A real recording that was only processed, without changing whose face it is, still counts as real. Face means the inner face: eyes, nose and mouth.",
|
| 120 |
+
"options": [
|
| 121 |
+
"yes",
|
| 122 |
+
"no"
|
| 123 |
+
],
|
| 124 |
+
"gt_answer": "yes",
|
| 125 |
+
"pred_answer": "yes",
|
| 126 |
+
"correct": true,
|
| 127 |
+
"raw": "```json\n{\"answer\": \"yes\"}\n```"
|
| 128 |
+
}
|
| 129 |
+
]
|
| 130 |
+
}
|
| 131 |
+
}
|
| 132 |
+
}
|