Spaces:
Running
on
Zero
Running
on
Zero
add tree option
Browse files
app.py
CHANGED
@@ -2297,6 +2297,7 @@ with demo:
|
|
2297 |
num_sample_fps_slider = gr.Slider(1, 5000, step=1, label="FPS: num_sample", value=1000, elem_id="num_sample_fps")
|
2298 |
tsne_perplexity_slider = gr.Slider(1, 1000, step=1, label="t-SNE: perplexity", value=500, elem_id="perplexity_tsne")
|
2299 |
fps_hc_seed_slider = gr.Slider(0, 1000, step=1, label="Seed", value=0, elem_id="fps_hc_seed")
|
|
|
2300 |
tsne_plot = gr.Image(label="spectral-tSNE tree", elem_id="tsne_plot", interactive=False, format='png')
|
2301 |
|
2302 |
tsne_2d_points = gr.State(np.array([]))
|
@@ -2309,10 +2310,20 @@ with demo:
|
|
2309 |
# Plot the t-SNE points
|
2310 |
fig, ax = plt.subplots(1, 1, figsize=(6, 6))
|
2311 |
ax.scatter(tsne_embed[:, 0], tsne_embed[:, 1], s=20, c=fps_tsne3d_rgb)
|
|
|
|
|
|
|
|
|
2312 |
# draw the edges
|
2313 |
for i_edge in range(k, len(edges)):
|
2314 |
edge = edges[i_edge]
|
2315 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
2316 |
# highlight the selected node
|
2317 |
if hightlight_idx is not None:
|
2318 |
if highlight_connections:
|
@@ -2428,7 +2439,7 @@ with demo:
|
|
2428 |
return pil_image
|
2429 |
|
2430 |
|
2431 |
-
def run_fps_tsne_hierarchical(image_gallery, eigvecs, num_sample_fps, perplexity_tsne, tsne3d_rgb, seed=0, max_display_dots=300):
|
2432 |
if len(eigvecs) == 0:
|
2433 |
gr.Warning("Please run NCUT first.")
|
2434 |
return
|
@@ -2464,9 +2475,10 @@ with demo:
|
|
2464 |
tsne_embed[:, 0] = (tsne_embed[:, 0] - tsne_embed[:, 0].min()) / (tsne_embed[:, 0].max() - tsne_embed[:, 0].min()) * 2 - 1
|
2465 |
tsne_embed[:, 1] = (tsne_embed[:, 1] - tsne_embed[:, 1].min()) / (tsne_embed[:, 1].max() - tsne_embed[:, 1].min()) * 2 - 1
|
2466 |
|
2467 |
-
|
2468 |
-
|
2469 |
-
|
|
|
2470 |
|
2471 |
# Plot the t-SNE points
|
2472 |
pil_image = plot_tsne_tree(tsne_embed, edges, fps_tsne3d_rgb, 0)
|
@@ -2484,7 +2496,7 @@ with demo:
|
|
2484 |
|
2485 |
run_hierarchical_button.click(
|
2486 |
run_fps_tsne_hierarchical,
|
2487 |
-
inputs=[input_gallery, eigvecs, num_sample_fps_slider, tsne_perplexity_slider, tsne3d_rgb, fps_hc_seed_slider],
|
2488 |
outputs=[tsne_2d_points, edges, fps_eigvecs, fps_tsne_rgb, fps_indices, tsne_plot, tsne_image_plot],
|
2489 |
)
|
2490 |
with gr.Row():
|
|
|
2297 |
num_sample_fps_slider = gr.Slider(1, 5000, step=1, label="FPS: num_sample", value=1000, elem_id="num_sample_fps")
|
2298 |
tsne_perplexity_slider = gr.Slider(1, 1000, step=1, label="t-SNE: perplexity", value=500, elem_id="perplexity_tsne")
|
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="eigvecs", elem_id="tree_method")
|
2301 |
tsne_plot = gr.Image(label="spectral-tSNE tree", elem_id="tsne_plot", interactive=False, format='png')
|
2302 |
|
2303 |
tsne_2d_points = gr.State(np.array([]))
|
|
|
2310 |
# Plot the t-SNE points
|
2311 |
fig, ax = plt.subplots(1, 1, figsize=(6, 6))
|
2312 |
ax.scatter(tsne_embed[:, 0], tsne_embed[:, 1], s=20, c=fps_tsne3d_rgb)
|
2313 |
+
# compute the length of the edges
|
2314 |
+
lengthes = np.linalg.norm(tsne_embed[edges[:, 0]] - tsne_embed[edges[:, 1]], axis=1)
|
2315 |
+
max_length = lengthes[k:].max()
|
2316 |
+
diag_length = np.linalg.norm(tsne_embed.max(axis=0) - tsne_embed.min(axis=0))
|
2317 |
# draw the edges
|
2318 |
for i_edge in range(k, len(edges)):
|
2319 |
edge = edges[i_edge]
|
2320 |
+
# _do = np.clip(lengthes[i_edge] / (diag_length*0.3), 0, 1)
|
2321 |
+
if lengthes[i_edge] > diag_length*0.1:
|
2322 |
+
_do = 1.0
|
2323 |
+
else:
|
2324 |
+
_do = 0.0
|
2325 |
+
alpha = 0.7 * (1 - _do) + 0.0
|
2326 |
+
ax.plot(tsne_embed[edge, 0], tsne_embed[edge, 1], 'k-', lw=1, alpha=alpha)
|
2327 |
# highlight the selected node
|
2328 |
if hightlight_idx is not None:
|
2329 |
if highlight_connections:
|
|
|
2439 |
return pil_image
|
2440 |
|
2441 |
|
2442 |
+
def run_fps_tsne_hierarchical(image_gallery, eigvecs, num_sample_fps, perplexity_tsne, tsne3d_rgb, seed=0, tree_method='eigvecs', max_display_dots=300):
|
2443 |
if len(eigvecs) == 0:
|
2444 |
gr.Warning("Please run NCUT first.")
|
2445 |
return
|
|
|
2475 |
tsne_embed[:, 0] = (tsne_embed[:, 0] - tsne_embed[:, 0].min()) / (tsne_embed[:, 0].max() - tsne_embed[:, 0].min()) * 2 - 1
|
2476 |
tsne_embed[:, 1] = (tsne_embed[:, 1] - tsne_embed[:, 1].min()) / (tsne_embed[:, 1].max() - tsne_embed[:, 1].min()) * 2 - 1
|
2477 |
|
2478 |
+
if tree_method == 'eigvecs':
|
2479 |
+
edges = build_tree(fps_eigvecs, dist='cosine')
|
2480 |
+
if tree_method == 'tsne':
|
2481 |
+
edges = build_tree(tsne_embed, dist='euclidean')
|
2482 |
|
2483 |
# Plot the t-SNE points
|
2484 |
pil_image = plot_tsne_tree(tsne_embed, edges, fps_tsne3d_rgb, 0)
|
|
|
2496 |
|
2497 |
run_hierarchical_button.click(
|
2498 |
run_fps_tsne_hierarchical,
|
2499 |
+
inputs=[input_gallery, eigvecs, num_sample_fps_slider, tsne_perplexity_slider, tsne3d_rgb, fps_hc_seed_slider, tree_method_radio],
|
2500 |
outputs=[tsne_2d_points, edges, fps_eigvecs, fps_tsne_rgb, fps_indices, tsne_plot, tsne_image_plot],
|
2501 |
)
|
2502 |
with gr.Row():
|