Spaces:
Running
on
Zero
Running
on
Zero
update nothing important
Browse files
app.py
CHANGED
@@ -2294,10 +2294,11 @@ with demo:
|
|
2294 |
|
2295 |
run_hierarchical_button = gr.Button("🔴 RUN tree", elem_id="run_hierarchical", variant='primary')
|
2296 |
with gr.Accordion("Hierarchical Structure Parameters:", open=True):
|
2297 |
-
num_sample_fps_slider = gr.Slider(1,
|
2298 |
-
tsne_perplexity_slider = gr.Slider(1,
|
|
|
2299 |
fps_hc_seed_slider = gr.Slider(0, 1000, step=1, label="Seed", value=0, elem_id="fps_hc_seed")
|
2300 |
-
tree_method_radio = gr.Radio(["eigvecs", "tsne"], label="Tree Method (input type)", value="tsne", elem_id="tree_method",
|
2301 |
info="What's the input to build tree? `eigvecs` is loss-less, `tsne` is lossy; tsne make tree looks 'better', eigvecs is more accurate.")
|
2302 |
tsne_plot = gr.Image(label="spectral-tSNE tree", elem_id="tsne_plot", interactive=False, format='png')
|
2303 |
|
@@ -2316,6 +2317,7 @@ with demo:
|
|
2316 |
lengthes = np.linalg.norm(tsne_embed[edges[:, 0]] - tsne_embed[edges[:, 1]], axis=1)
|
2317 |
max_length = lengthes[k:].max()
|
2318 |
diag_length = np.linalg.norm(tsne_embed.max(axis=0) - tsne_embed.min(axis=0))
|
|
|
2319 |
# draw the edges
|
2320 |
# for i_edge in range(k, len(edges)):
|
2321 |
# edge = edges[i_edge]
|
@@ -2326,10 +2328,11 @@ with demo:
|
|
2326 |
# _do = 0.0
|
2327 |
# alpha = 0.7 * (1 - _do) + 0.0
|
2328 |
# ax.plot(tsne_embed[edge, 0], tsne_embed[edge, 1], 'k-', lw=1, alpha=alpha)
|
|
|
2329 |
max_level = levels.max()
|
2330 |
-
line_widths = levels / max_level *
|
2331 |
# flip line width
|
2332 |
-
line_widths =
|
2333 |
for i_edge in range(k, len(edges)):
|
2334 |
edge = edges[i_edge]
|
2335 |
level = levels[i_edge]
|
@@ -2450,7 +2453,7 @@ with demo:
|
|
2450 |
return pil_image
|
2451 |
|
2452 |
|
2453 |
-
def run_fps_tsne_hierarchical(image_gallery, eigvecs, num_sample_fps, perplexity_tsne, tsne3d_rgb, seed=0, tree_method='eigvecs', max_display_dots=300):
|
2454 |
if len(eigvecs) == 0:
|
2455 |
gr.Warning("Please run NCUT first.")
|
2456 |
return
|
@@ -2476,12 +2479,19 @@ with demo:
|
|
2476 |
fps_tsne3d_rgb = tsne3d_rgb[fps_idx]
|
2477 |
|
2478 |
np.random.seed(seed)
|
2479 |
-
tsne_embed = TSNE(
|
2480 |
-
|
2481 |
-
|
2482 |
-
|
2483 |
-
|
2484 |
-
).fit_transform(fps_eigvecs)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2485 |
# normalize = [-1, 1]
|
2486 |
tsne_embed[:, 0] = (tsne_embed[:, 0] - tsne_embed[:, 0].min()) / (tsne_embed[:, 0].max() - tsne_embed[:, 0].min()) * 2 - 1
|
2487 |
tsne_embed[:, 1] = (tsne_embed[:, 1] - tsne_embed[:, 1].min()) / (tsne_embed[:, 1].max() - tsne_embed[:, 1].min()) * 2 - 1
|
@@ -2507,7 +2517,7 @@ with demo:
|
|
2507 |
|
2508 |
run_hierarchical_button.click(
|
2509 |
run_fps_tsne_hierarchical,
|
2510 |
-
inputs=[input_gallery, eigvecs, num_sample_fps_slider, tsne_perplexity_slider, tsne3d_rgb, fps_hc_seed_slider, tree_method_radio],
|
2511 |
outputs=[tsne_2d_points, edges, levels, fps_eigvecs, fps_tsne_rgb, fps_indices, tsne_plot, tsne_image_plot],
|
2512 |
)
|
2513 |
with gr.Row():
|
@@ -2571,7 +2581,7 @@ with demo:
|
|
2571 |
with gr.Column(scale=5, min_width=200):
|
2572 |
prompt_radio = gr.Radio(["Tree [+Image]", "Image (NCUT)", "Image (Orig)"], label="Where to click on?", value="Tree [+Image]", elem_id="prompt_radio", show_label=True)
|
2573 |
granularity_slider = gr.Slider(1, 1000, step=1, label="Cluster Granularity (k)", value=100, elem_id="granularity")
|
2574 |
-
num_sample_fps_slider.change(fn=lambda x: gr.update(maximum=x, interactive=True), inputs=[num_sample_fps_slider], outputs=[granularity_slider])
|
2575 |
def updaste_tsne_plot_change_granularity(granularity, tsne_embed, edges, levels, fps_tsne_rgb, tsne_prompt_image):
|
2576 |
# Plot the t-SNE points
|
2577 |
pil_image = plot_tsne_tree(tsne_embed, edges, levels, fps_tsne_rgb, granularity)
|
|
|
2294 |
|
2295 |
run_hierarchical_button = gr.Button("🔴 RUN tree", elem_id="run_hierarchical", variant='primary')
|
2296 |
with gr.Accordion("Hierarchical Structure Parameters:", open=True):
|
2297 |
+
num_sample_fps_slider = gr.Slider(1, 10000, step=1, label="FPS: num_sample", value=1000, elem_id="num_sample_fps")
|
2298 |
+
tsne_perplexity_slider = gr.Slider(1, 500, step=1, label="t-SNE: perplexity", value=500, elem_id="perplexity_tsne")
|
2299 |
+
tsne_knn_slider = gr.Slider(1, 10, step=1, label="t-SNE: KNN", value=1, elem_id="knn_tsne")
|
2300 |
fps_hc_seed_slider = gr.Slider(0, 1000, step=1, label="Seed", value=0, elem_id="fps_hc_seed")
|
2301 |
+
tree_method_radio = gr.Radio(["eigvecs", "tsne"], label="Tree Method (input type)", value="tsne" if USE_HUGGINGFACE_ZEROGPU else "eigvecs", elem_id="tree_method",
|
2302 |
info="What's the input to build tree? `eigvecs` is loss-less, `tsne` is lossy; tsne make tree looks 'better', eigvecs is more accurate.")
|
2303 |
tsne_plot = gr.Image(label="spectral-tSNE tree", elem_id="tsne_plot", interactive=False, format='png')
|
2304 |
|
|
|
2317 |
lengthes = np.linalg.norm(tsne_embed[edges[:, 0]] - tsne_embed[edges[:, 1]], axis=1)
|
2318 |
max_length = lengthes[k:].max()
|
2319 |
diag_length = np.linalg.norm(tsne_embed.max(axis=0) - tsne_embed.min(axis=0))
|
2320 |
+
|
2321 |
# draw the edges
|
2322 |
# for i_edge in range(k, len(edges)):
|
2323 |
# edge = edges[i_edge]
|
|
|
2328 |
# _do = 0.0
|
2329 |
# alpha = 0.7 * (1 - _do) + 0.0
|
2330 |
# ax.plot(tsne_embed[edge, 0], tsne_embed[edge, 1], 'k-', lw=1, alpha=alpha)
|
2331 |
+
|
2332 |
max_level = levels.max()
|
2333 |
+
line_widths = levels / max_level * 2
|
2334 |
# flip line width
|
2335 |
+
line_widths = 2 - line_widths
|
2336 |
for i_edge in range(k, len(edges)):
|
2337 |
edge = edges[i_edge]
|
2338 |
level = levels[i_edge]
|
|
|
2453 |
return pil_image
|
2454 |
|
2455 |
|
2456 |
+
def run_fps_tsne_hierarchical(image_gallery, eigvecs, num_sample_fps, perplexity_tsne, knn_tsne, tsne3d_rgb, seed=0, tree_method='eigvecs', max_display_dots=300):
|
2457 |
if len(eigvecs) == 0:
|
2458 |
gr.Warning("Please run NCUT first.")
|
2459 |
return
|
|
|
2479 |
fps_tsne3d_rgb = tsne3d_rgb[fps_idx]
|
2480 |
|
2481 |
np.random.seed(seed)
|
2482 |
+
# tsne_embed = TSNE(
|
2483 |
+
# n_components=2,
|
2484 |
+
# perplexity=perplexity_tsne,
|
2485 |
+
# metric='cosine',
|
2486 |
+
# random_state=seed,
|
2487 |
+
# ).fit_transform(fps_eigvecs)
|
2488 |
+
from ncut_pytorch import rgb_from_tsne_2d
|
2489 |
+
device = None
|
2490 |
+
# device = 'cpu'
|
2491 |
+
# if not USE_HUGGINGFACE_ZEROGPU and torch.cuda.is_available():
|
2492 |
+
# device = 'cuda'
|
2493 |
+
tsne_embed, _ = rgb_from_tsne_2d(torch.tensor(fps_eigvecs), num_sample=1000, perplexity=perplexity_tsne,
|
2494 |
+
seed=seed, metric='cosine', knn=knn_tsne, device=device)
|
2495 |
# normalize = [-1, 1]
|
2496 |
tsne_embed[:, 0] = (tsne_embed[:, 0] - tsne_embed[:, 0].min()) / (tsne_embed[:, 0].max() - tsne_embed[:, 0].min()) * 2 - 1
|
2497 |
tsne_embed[:, 1] = (tsne_embed[:, 1] - tsne_embed[:, 1].min()) / (tsne_embed[:, 1].max() - tsne_embed[:, 1].min()) * 2 - 1
|
|
|
2517 |
|
2518 |
run_hierarchical_button.click(
|
2519 |
run_fps_tsne_hierarchical,
|
2520 |
+
inputs=[input_gallery, eigvecs, num_sample_fps_slider, tsne_perplexity_slider, tsne_knn_slider, tsne3d_rgb, fps_hc_seed_slider, tree_method_radio],
|
2521 |
outputs=[tsne_2d_points, edges, levels, fps_eigvecs, fps_tsne_rgb, fps_indices, tsne_plot, tsne_image_plot],
|
2522 |
)
|
2523 |
with gr.Row():
|
|
|
2581 |
with gr.Column(scale=5, min_width=200):
|
2582 |
prompt_radio = gr.Radio(["Tree [+Image]", "Image (NCUT)", "Image (Orig)"], label="Where to click on?", value="Tree [+Image]", elem_id="prompt_radio", show_label=True)
|
2583 |
granularity_slider = gr.Slider(1, 1000, step=1, label="Cluster Granularity (k)", value=100, elem_id="granularity")
|
2584 |
+
num_sample_fps_slider.change(fn=lambda x: gr.update(maximum=x-1, interactive=True), inputs=[num_sample_fps_slider], outputs=[granularity_slider])
|
2585 |
def updaste_tsne_plot_change_granularity(granularity, tsne_embed, edges, levels, fps_tsne_rgb, tsne_prompt_image):
|
2586 |
# Plot the t-SNE points
|
2587 |
pil_image = plot_tsne_tree(tsne_embed, edges, levels, fps_tsne_rgb, granularity)
|