Spaces:
Running on Zero
Running on Zero
Jian Shi commited on
Commit ·
4ed94f8
1
Parent(s): ed05f75
Video tab: three temporal clips through the video matchers, mp4 outputs
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- __pycache__/engine.cpython-311.pyc +0 -0
- app.py +72 -7
- clips/galapagos/left_00.jpg +3 -0
- clips/galapagos/left_01.jpg +3 -0
- clips/galapagos/left_02.jpg +3 -0
- clips/galapagos/left_03.jpg +3 -0
- clips/galapagos/left_04.jpg +3 -0
- clips/galapagos/left_05.jpg +3 -0
- clips/galapagos/left_06.jpg +3 -0
- clips/galapagos/left_07.jpg +3 -0
- clips/galapagos/left_08.jpg +3 -0
- clips/galapagos/left_09.jpg +3 -0
- clips/galapagos/left_10.jpg +3 -0
- clips/galapagos/left_11.jpg +3 -0
- clips/galapagos/right_00.jpg +3 -0
- clips/galapagos/right_01.jpg +3 -0
- clips/galapagos/right_02.jpg +3 -0
- clips/galapagos/right_03.jpg +3 -0
- clips/galapagos/right_04.jpg +3 -0
- clips/galapagos/right_05.jpg +3 -0
- clips/galapagos/right_06.jpg +3 -0
- clips/galapagos/right_07.jpg +3 -0
- clips/galapagos/right_08.jpg +3 -0
- clips/galapagos/right_09.jpg +3 -0
- clips/galapagos/right_10.jpg +3 -0
- clips/galapagos/right_11.jpg +3 -0
- clips/jurassic_world/left_00.jpg +3 -0
- clips/jurassic_world/left_01.jpg +3 -0
- clips/jurassic_world/left_02.jpg +3 -0
- clips/jurassic_world/left_03.jpg +3 -0
- clips/jurassic_world/left_04.jpg +3 -0
- clips/jurassic_world/left_05.jpg +3 -0
- clips/jurassic_world/left_06.jpg +3 -0
- clips/jurassic_world/left_07.jpg +3 -0
- clips/jurassic_world/left_08.jpg +3 -0
- clips/jurassic_world/left_09.jpg +3 -0
- clips/jurassic_world/left_10.jpg +3 -0
- clips/jurassic_world/left_11.jpg +3 -0
- clips/jurassic_world/right_00.jpg +3 -0
- clips/jurassic_world/right_01.jpg +3 -0
- clips/jurassic_world/right_02.jpg +3 -0
- clips/jurassic_world/right_03.jpg +3 -0
- clips/jurassic_world/right_04.jpg +3 -0
- clips/jurassic_world/right_05.jpg +3 -0
- clips/jurassic_world/right_06.jpg +3 -0
- clips/jurassic_world/right_07.jpg +3 -0
- clips/jurassic_world/right_08.jpg +3 -0
- clips/jurassic_world/right_09.jpg +3 -0
- clips/jurassic_world/right_10.jpg +3 -0
- clips/jurassic_world/right_11.jpg +3 -0
__pycache__/engine.cpython-311.pyc
CHANGED
|
Binary files a/__pycache__/engine.cpython-311.pyc and b/__pycache__/engine.cpython-311.pyc differ
|
|
|
app.py
CHANGED
|
@@ -61,6 +61,56 @@ def build_examples():
|
|
| 61 |
return rows
|
| 62 |
|
| 63 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 64 |
with gr.Blocks(title="Unmuzzling Stereo") as demo:
|
| 65 |
gr.Markdown(
|
| 66 |
"# Unmuzzling Stereo — signed disparity for content behind the screen\n"
|
|
@@ -72,21 +122,36 @@ with gr.Blocks(title="Unmuzzling Stereo") as demo:
|
|
| 72 |
"models — fine-tuned on horizontally translated SceneFlow only — recover "
|
| 73 |
"it with no architectural change. Red = in front of the screen plane, "
|
| 74 |
"blue = behind it.")
|
| 75 |
-
with gr.
|
|
|
|
| 76 |
left = gr.Image(label="Left view", type="numpy")
|
| 77 |
right = gr.Image(label="Right view", type="numpy")
|
| 78 |
-
|
| 79 |
model = gr.Dropdown(CHOICES, value=CHOICES[0], label="Backbone")
|
| 80 |
show_orig = gr.Checkbox(value=True, label="Also run the released (zero-shot) model")
|
| 81 |
btn = gr.Button("Run", variant="primary")
|
| 82 |
-
|
| 83 |
out_ours = gr.Image(label="Corrected (ours)", interactive=False)
|
| 84 |
out_zs = gr.Image(label="Zero-shot (released)", interactive=False)
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
| 89 |
gr.Examples(ex, [left, right, model, show_orig], label="Try a rendered pair (CC-BY Blender open movies)")
|
| 90 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 91 |
if __name__ == "__main__":
|
| 92 |
demo.launch()
|
|
|
|
| 61 |
return rows
|
| 62 |
|
| 63 |
|
| 64 |
+
CLIP_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "clips")
|
| 65 |
+
VIDEO_CHOICES = [engine.NAMES[k] for k in ("sav", "dynamic", "bida")]
|
| 66 |
+
|
| 67 |
+
|
| 68 |
+
def _load_clip(name):
|
| 69 |
+
import glob
|
| 70 |
+
d = os.path.join(CLIP_DIR, name)
|
| 71 |
+
L = [np.asarray(__import__("PIL.Image", fromlist=["Image"]).open(p))
|
| 72 |
+
for p in sorted(glob.glob(f"{d}/left_*.jpg"))]
|
| 73 |
+
R = [np.asarray(__import__("PIL.Image", fromlist=["Image"]).open(p))
|
| 74 |
+
for p in sorted(glob.glob(f"{d}/right_*.jpg"))]
|
| 75 |
+
return L, R
|
| 76 |
+
|
| 77 |
+
|
| 78 |
+
def _write_video(frames, path, fps=8):
|
| 79 |
+
import imageio.v2 as imageio
|
| 80 |
+
with imageio.get_writer(path, fps=fps, codec="libx264", quality=7) as w:
|
| 81 |
+
for f in frames:
|
| 82 |
+
w.append_data(f)
|
| 83 |
+
return path
|
| 84 |
+
|
| 85 |
+
|
| 86 |
+
@_gpu
|
| 87 |
+
def run_video(clip_name, model_name, show_orig):
|
| 88 |
+
import tempfile
|
| 89 |
+
fam = KEY[model_name]
|
| 90 |
+
L, R = _load_clip(clip_name)
|
| 91 |
+
if not L:
|
| 92 |
+
raise gr.Error(f"clip {clip_name} not found")
|
| 93 |
+
tmp = tempfile.mkdtemp()
|
| 94 |
+
_write_video(L, f"{tmp}/input.mp4")
|
| 95 |
+
d_ours = engine.predict_clip(fam, "ours", L, R)
|
| 96 |
+
vmax = max(8.0, float(np.percentile(np.abs(d_ours), 99)))
|
| 97 |
+
behind = 100.0 * float((d_ours < -0.5).mean())
|
| 98 |
+
_write_video([engine.colorize(f, vmax) for f in d_ours], f"{tmp}/ours.mp4")
|
| 99 |
+
md = (f"**{model_name} (corrected)** — {len(L)} frames, range "
|
| 100 |
+
f"[{d_ours.min():.1f}, {d_ours.max():.1f}] px, {behind:.0f}% behind the "
|
| 101 |
+
f"screen. Shared color scale ±{vmax:.0f} px.")
|
| 102 |
+
if show_orig:
|
| 103 |
+
d_zs = engine.predict_clip(fam, "zs", L, R)
|
| 104 |
+
_write_video([engine.colorize(f, vmax) for f in d_zs], f"{tmp}/zs.mp4")
|
| 105 |
+
zs = gr.update(value=f"{tmp}/zs.mp4", visible=True,
|
| 106 |
+
label=f"{model_name} zero-shot (released)")
|
| 107 |
+
md += (f"\n\n**Zero-shot** — range [{d_zs.min():.1f}, {d_zs.max():.1f}] px.")
|
| 108 |
+
else:
|
| 109 |
+
zs = gr.update(value=None, visible=False)
|
| 110 |
+
return f"{tmp}/input.mp4", gr.update(value=f"{tmp}/ours.mp4",
|
| 111 |
+
label=f"{model_name} + ours — {behind:.0f}% behind"), zs, md
|
| 112 |
+
|
| 113 |
+
|
| 114 |
with gr.Blocks(title="Unmuzzling Stereo") as demo:
|
| 115 |
gr.Markdown(
|
| 116 |
"# Unmuzzling Stereo — signed disparity for content behind the screen\n"
|
|
|
|
| 122 |
"models — fine-tuned on horizontally translated SceneFlow only — recover "
|
| 123 |
"it with no architectural change. Red = in front of the screen plane, "
|
| 124 |
"blue = behind it.")
|
| 125 |
+
with gr.Tab("Image matchers"):
|
| 126 |
+
with gr.Row():
|
| 127 |
left = gr.Image(label="Left view", type="numpy")
|
| 128 |
right = gr.Image(label="Right view", type="numpy")
|
| 129 |
+
with gr.Row():
|
| 130 |
model = gr.Dropdown(CHOICES, value=CHOICES[0], label="Backbone")
|
| 131 |
show_orig = gr.Checkbox(value=True, label="Also run the released (zero-shot) model")
|
| 132 |
btn = gr.Button("Run", variant="primary")
|
| 133 |
+
with gr.Row():
|
| 134 |
out_ours = gr.Image(label="Corrected (ours)", interactive=False)
|
| 135 |
out_zs = gr.Image(label="Zero-shot (released)", interactive=False)
|
| 136 |
+
stats = gr.Markdown()
|
| 137 |
+
btn.click(run, [left, right, model, show_orig], [out_ours, out_zs, stats])
|
| 138 |
+
ex = build_examples()
|
| 139 |
+
if ex:
|
| 140 |
gr.Examples(ex, [left, right, model, show_orig], label="Try a rendered pair (CC-BY Blender open movies)")
|
| 141 |
|
| 142 |
+
with gr.Tab("Video matchers"):
|
| 143 |
+
clips = sorted(os.listdir(CLIP_DIR)) if os.path.isdir(CLIP_DIR) else []
|
| 144 |
+
with gr.Row():
|
| 145 |
+
clip_sel = gr.Dropdown(clips, value=clips[0] if clips else None, label="Clip")
|
| 146 |
+
vmodel = gr.Dropdown(VIDEO_CHOICES, value=VIDEO_CHOICES[0], label="Video backbone")
|
| 147 |
+
vshow = gr.Checkbox(value=True, label="Also run the released (zero-shot) model")
|
| 148 |
+
vbtn = gr.Button("Run clip", variant="primary")
|
| 149 |
+
with gr.Row():
|
| 150 |
+
v_in = gr.Video(label="Input (left view)", interactive=False)
|
| 151 |
+
v_ours = gr.Video(label="Corrected (ours)", interactive=False)
|
| 152 |
+
v_zs = gr.Video(label="Zero-shot (released)", interactive=False)
|
| 153 |
+
vstats = gr.Markdown()
|
| 154 |
+
vbtn.click(run_video, [clip_sel, vmodel, vshow], [v_in, v_ours, v_zs, vstats])
|
| 155 |
+
|
| 156 |
if __name__ == "__main__":
|
| 157 |
demo.launch()
|
clips/galapagos/left_00.jpg
ADDED
|
Git LFS Details
|
clips/galapagos/left_01.jpg
ADDED
|
Git LFS Details
|
clips/galapagos/left_02.jpg
ADDED
|
Git LFS Details
|
clips/galapagos/left_03.jpg
ADDED
|
Git LFS Details
|
clips/galapagos/left_04.jpg
ADDED
|
Git LFS Details
|
clips/galapagos/left_05.jpg
ADDED
|
Git LFS Details
|
clips/galapagos/left_06.jpg
ADDED
|
Git LFS Details
|
clips/galapagos/left_07.jpg
ADDED
|
Git LFS Details
|
clips/galapagos/left_08.jpg
ADDED
|
Git LFS Details
|
clips/galapagos/left_09.jpg
ADDED
|
Git LFS Details
|
clips/galapagos/left_10.jpg
ADDED
|
Git LFS Details
|
clips/galapagos/left_11.jpg
ADDED
|
Git LFS Details
|
clips/galapagos/right_00.jpg
ADDED
|
Git LFS Details
|
clips/galapagos/right_01.jpg
ADDED
|
Git LFS Details
|
clips/galapagos/right_02.jpg
ADDED
|
Git LFS Details
|
clips/galapagos/right_03.jpg
ADDED
|
Git LFS Details
|
clips/galapagos/right_04.jpg
ADDED
|
Git LFS Details
|
clips/galapagos/right_05.jpg
ADDED
|
Git LFS Details
|
clips/galapagos/right_06.jpg
ADDED
|
Git LFS Details
|
clips/galapagos/right_07.jpg
ADDED
|
Git LFS Details
|
clips/galapagos/right_08.jpg
ADDED
|
Git LFS Details
|
clips/galapagos/right_09.jpg
ADDED
|
Git LFS Details
|
clips/galapagos/right_10.jpg
ADDED
|
Git LFS Details
|
clips/galapagos/right_11.jpg
ADDED
|
Git LFS Details
|
clips/jurassic_world/left_00.jpg
ADDED
|
Git LFS Details
|
clips/jurassic_world/left_01.jpg
ADDED
|
Git LFS Details
|
clips/jurassic_world/left_02.jpg
ADDED
|
Git LFS Details
|
clips/jurassic_world/left_03.jpg
ADDED
|
Git LFS Details
|
clips/jurassic_world/left_04.jpg
ADDED
|
Git LFS Details
|
clips/jurassic_world/left_05.jpg
ADDED
|
Git LFS Details
|
clips/jurassic_world/left_06.jpg
ADDED
|
Git LFS Details
|
clips/jurassic_world/left_07.jpg
ADDED
|
Git LFS Details
|
clips/jurassic_world/left_08.jpg
ADDED
|
Git LFS Details
|
clips/jurassic_world/left_09.jpg
ADDED
|
Git LFS Details
|
clips/jurassic_world/left_10.jpg
ADDED
|
Git LFS Details
|
clips/jurassic_world/left_11.jpg
ADDED
|
Git LFS Details
|
clips/jurassic_world/right_00.jpg
ADDED
|
Git LFS Details
|
clips/jurassic_world/right_01.jpg
ADDED
|
Git LFS Details
|
clips/jurassic_world/right_02.jpg
ADDED
|
Git LFS Details
|
clips/jurassic_world/right_03.jpg
ADDED
|
Git LFS Details
|
clips/jurassic_world/right_04.jpg
ADDED
|
Git LFS Details
|
clips/jurassic_world/right_05.jpg
ADDED
|
Git LFS Details
|
clips/jurassic_world/right_06.jpg
ADDED
|
Git LFS Details
|
clips/jurassic_world/right_07.jpg
ADDED
|
Git LFS Details
|
clips/jurassic_world/right_08.jpg
ADDED
|
Git LFS Details
|
clips/jurassic_world/right_09.jpg
ADDED
|
Git LFS Details
|
clips/jurassic_world/right_10.jpg
ADDED
|
Git LFS Details
|
clips/jurassic_world/right_11.jpg
ADDED
|
Git LFS Details
|