diff --git a/data_extraction/build_html.py b/data_extraction/build_html.py index 3470e03..7d21c6e 100644 --- a/data_extraction/build_html.py +++ b/data_extraction/build_html.py @@ -17,6 +17,24 @@ "SyntheticNeRF": "Synthetic NeRF" } +org_3dgs = { #30K + "TanksAndTemples": ["23.14", "0.841", "0.183", 430964736, 1783867.00] , + "MipNeRF360": ["27.21", "0.815", "0.214", 769654784, 3362470.00], + "DeepBlending": ["29.41", "0.903", "0.243", 708837376, 2975634.50], + "SyntheticNeRF": ["33.32", None, None, None, None], +} + +colors = [ + "#1f77b4", "#aec7e8", "#ff7f0e", "#ffbb78", + "#2ca02c", "#98df8a", "#d62728", "#ff9896", + "#9467bd", "#c5b0d5", "#8c564b", "#c49c94", + "#e377c2", "#f7b6d2", "#7f7f7f", "#c7c7c7", + "#bcbd22", "#dbdb8d", "#17becf", "#9edae5" +] +colors_d = ['#164f79', '#7a8da3', '#b2590a', '#b28253', '#1d721f', + '#6ca46e', '#941d1d', '#b26b68', '#6b4d8a', '#897aa3', + '#633e38', '#896e66', '#a05891', '#ae8093', '#595959', + '#8d8d8d', '#868417', '#989867', '#1193b1', '#6ca0a2'] def get_shortnames(methods_files=["methods_compression.bib"]): #get shortnames from bibtex @@ -31,6 +49,8 @@ def get_shortnames(methods_files=["methods_compression.bib"]): pass #shortnames[entry["ID"]] = entry["ID"] #print(f"Shortname not found for {entry['ID']}, using ID instead") + if "methods_compression.bib" in methods_files: + shortnames["3DGS"] = "3DGS" return shortnames def get_links(methods_files=["methods_compression.bib","methods_densification.bib"]): @@ -68,17 +88,6 @@ def combine_tables_to_html(): shortnames_d = get_shortnames(methods_files=["methods_densification.bib"]) groupcolors = {} - colors = [ - "#1f77b4", "#aec7e8", "#ff7f0e", "#ffbb78", - "#2ca02c", "#98df8a", "#d62728", "#ff9896", - "#9467bd", "#c5b0d5", "#8c564b", "#c49c94", - "#e377c2", "#f7b6d2", "#7f7f7f", "#c7c7c7", - "#bcbd22", "#dbdb8d", "#17becf", "#9edae5" - ] - colors_d = ['#164f79', '#7a8da3', '#b2590a', '#b28253', '#1d721f', - '#6ca46e', '#941d1d', '#b26b68', '#6b4d8a', '#897aa3', - '#633e38', '#896e66', '#a05891', '#ae8093', '#595959', - '#8d8d8d', '#868417', '#989867', '#1193b1', '#6ca0a2'] method_categories_dict = {} for name, shortname in shortnames.items(): @@ -91,6 +100,8 @@ def combine_tables_to_html(): groupcolors[shortname] = colors_d.pop(0) method_categories_dict[name] = "d" + method_categories_dict["3DGS"] = "3" + shortnames.update(shortnames_d) for dataset in dataset_order: @@ -103,6 +114,19 @@ def combine_tables_to_html(): #filter out "Baseline" keyword from Submethod df['Submethod'] = df['Submethod'].str.replace('Baseline', '') + #insert 3DGS + df = pd.concat([df, pd.DataFrame([{ + 'Method': '3DGS', + 'Submethod': '', + 'PSNR': org_3dgs[dataset][0], + 'SSIM': org_3dgs[dataset][1] if org_3dgs[dataset][1] else '', + 'LPIPS': org_3dgs[dataset][2] if org_3dgs[dataset][1] else '', + 'Size [Bytes]': org_3dgs[dataset][3], + '#Gaussians': org_3dgs[dataset][4], + 'Data Source': '', + 'Comment': '' + }])], ignore_index=True) + # parse all float columns to float and keep the exact numer of decimal places df["PSNR"] = df["PSNR"].apply(lambda x: Decimal(x) if x != '' else None) df["SSIM"] = df["SSIM"].apply(lambda x: Decimal(x) if x != '' else None) @@ -150,10 +174,10 @@ def combine_tables_to_html(): multi_col_df.reset_index(inplace=True) #insert category - multi_col_df[("category", "")] = "c" + multi_col_df[("category", "")] = "3" # Loop through method_categories_dict to set the category if the method name contains the key for method, category in method_categories_dict.items(): - multi_col_df.loc[multi_col_df["Method"].str.contains(method, na=False), "category"] = category + multi_col_df.loc[multi_col_df["Method"].str.contains(f'"#{method}"', na=False), "category"] = category method_categories = list(multi_col_df["category"]) @@ -254,8 +278,9 @@ def filter_empty_cols_from_df(key): metrics = ["PSNR", "SSIM", "LPIPS", "Size [MB]"] rank_combinations_c_all, metric_formulas_c = get_rank_combinations_and_formulas(datasets, metrics, filter_empty_cols_from_df("Size [MB]")) - #calc compression ranks for any combination of metrics and datasets for all compression methods - filtered_df = multi_col_df[multi_col_df['category'] == 'c'].copy() + #calc compression ranks for any combination of metrics and datasets for all compression methods +3DGS + filter_c3 = (multi_col_df['category'] == 'c') | (multi_col_df['category'] == '3') + filtered_df = multi_col_df[filter_c3].copy() rank_combinations_c, _ = get_rank_combinations_and_formulas(datasets, metrics, filtered_df) #calc densification ranks for combinations of metrics and datasets for all methods @@ -263,8 +288,9 @@ def filter_empty_cols_from_df(key): metrics = ["PSNR", "SSIM", "LPIPS", "#Gaussians"] rank_combinations_d_all, metric_formulas_d = get_rank_combinations_and_formulas(datasets, metrics, filter_empty_cols_from_df("#Gaussians")) - #calc compression ranks for any combination of metrics and datasets for all densification methods - filtered_df = multi_col_df[multi_col_df['category'] == 'd'].copy() + #calc compression ranks for any combination of metrics and datasets for all densification methods +3DGS + filter_d3 = (multi_col_df['category'] == 'd') | (multi_col_df['category'] == '3') + filtered_df = multi_col_df[filter_d3].copy() rank_combinations_d, _ = get_rank_combinations_and_formulas(datasets, metrics, filtered_df) rank_combinations = { @@ -294,13 +320,13 @@ def get_ordered_ranks(): latex_dfs = {} ranks = {} #first get ordered densification ranks for summary order and plot legend order - mask = multi_col_df['category'] == 'd' + mask = (multi_col_df['category'] == 'd') | (multi_col_df['category'] == '3') multi_col_df['Rank'] = pd.Series(rank_combinations["densification"]["111111"][0][:mask.sum()], index=multi_col_df[mask].index).astype(float) ranks["d"] = get_ordered_ranks() latex_dfs["densification"] = multi_col_df.copy() #then same for compression and leave ranks like this as this is the default option on the website - mask = multi_col_df['category'] == 'c' + mask = (multi_col_df['category'] == 'c') | (multi_col_df['category'] == '3') multi_col_df['Rank'] = pd.Series(rank_combinations["compression"]["11111111"][0][:mask.sum()], index=multi_col_df[mask].index).astype(float) ranks["c"] = get_ordered_ranks() latex_dfs["compression"] = multi_col_df.copy() @@ -447,7 +473,7 @@ def load_methods_summaries(ranks, groupcolors): #sort here by rank to determine order of method summaries shortnames = get_shortnames(["methods_compression.bib","methods_densification.bib"]) - #for now, only include ranked methods + #for now, only include ranked methods / uncomment to include unranked methods # shortnames_d = get_shortnames(["methods_densification.bib"]) # shortnames_c = get_shortnames(["methods_compression.bib"]) # for name in shortnames_d.values(): #also include non ranked methods @@ -563,13 +589,6 @@ def get_plot_data(ranks): shortnames = sorted(shortnames.values()) - org_3dgs = { - "TanksAndTemples": [23.14, 0.841, 0.183] , - "MipNeRF360": [27.21, 0.815, 0.214], - "DeepBlending": [29.41, 0.903, 0.243], - "SyntheticNeRF": [33.32, None, None], - } - data = [] for dataset in dataset_order: df = dfs[dataset] diff --git a/project-page/static/js/scripts.js b/project-page/static/js/scripts.js index c8bf80a..22be3c6 100644 --- a/project-page/static/js/scripts.js +++ b/project-page/static/js/scripts.js @@ -136,6 +136,10 @@ function drawLegend() { // Add rest of legend items Object.keys(groupColors).forEach(group => { + console.log(group) + if (group === "3DGS") { + return; + } var legendItem = document.createElement('div'); legendItem.className = 'legend-item'; @@ -228,9 +232,10 @@ function updateRanks() { } const [newrank, classes] = rankCombinations[rank_category][selected_string]; + console.log(newrank) let ii = 0 for (var i = 0; i < table.columns(1).data()[0].length; i++) { - if (!both && methodCategories[i] != category.slice(0,1)) { // ranks only apply to selected methods with correct category + if (!both && methodCategories[i] != category.slice(0,1) && methodCategories[i] != "3") { // ranks only apply to selected methods with correct category, always use 3 (3DGS) continue; } table.cell(i, 1).data(newrank[ii]);