huzey commited on
Commit
09d0fa6
·
1 Parent(s): d99ae43

update nothing important

Browse files
Files changed (1) hide show
  1. app.py +24 -14
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, 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="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 * 3
2331
  # flip line width
2332
- line_widths = 3 - 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
- n_components=2,
2481
- perplexity=perplexity_tsne,
2482
- metric='cosine',
2483
- random_state=seed,
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)