|
44 | 44 | import pandas as pd |
45 | 45 | import utils |
46 | 46 |
|
47 | | -from compute_per_class_mAP import compute_per_class_mAP |
48 | | -from compute_per_class_mIoU import compute_per_class_mIoU |
| 47 | +from compute_per_class_map import compute_per_class_mAP |
| 48 | +from compute_per_class_miou import compute_per_class_mIoU |
49 | 49 | from compute_per_class_mota import compute_per_class_mota |
50 | 50 | from curve_fitting import convert_to_monotonic_points_SFU |
51 | 51 |
|
@@ -103,44 +103,37 @@ def df_append(df1, df2): |
103 | 103 |
|
104 | 104 |
|
105 | 105 | def generate_class_df(result_df, classes: dict): |
106 | | - class_data = pd.DataFrame(columns=result_df.columns) |
107 | | - class_data.drop(columns=["fps", "num_of_coded_frame"], inplace=True) |
108 | | - |
109 | | - for tag, item in classes.items(): |
110 | | - output = compute_per_class_results(result_df, tag, item) |
111 | | - classwise_df = df_append(class_data, output) |
| 106 | + assert ( |
| 107 | + len(classes) == 1 |
| 108 | + ), "generate_class_df is expected to be called with a single class entry" |
112 | 109 |
|
113 | | - return classwise_df |
| 110 | + ((tag, sequences),) = classes.items() |
| 111 | + return compute_per_class_results(result_df, tag, sequences) |
114 | 112 |
|
115 | 113 |
|
116 | 114 | def compute_per_class_results(result_df, name, sequences): |
117 | | - samples = None |
118 | | - num_points = prev_num_points = -1 |
119 | | - output = pd.DataFrame(columns=result_df.columns) |
120 | | - output.drop(columns=["fps", "num_of_coded_frame"], inplace=True) |
| 115 | + per_sequence_frames = [] |
| 116 | + num_points = None |
121 | 117 |
|
122 | 118 | for seq in sequences: |
123 | | - d = result_df.loc[(result_df["Dataset"] == seq)] |
| 119 | + seq_frames = result_df.loc[result_df["Dataset"] == seq] |
124 | 120 |
|
125 | | - if samples is None: |
126 | | - samples = d |
| 121 | + if num_points is None: |
| 122 | + num_points = seq_frames.shape[0] |
127 | 123 | else: |
128 | | - samples = df_append(samples, d) |
| 124 | + assert num_points == seq_frames.shape[0] |
129 | 125 |
|
130 | | - if prev_num_points == -1: |
131 | | - num_points = prev_num_points = d.shape[0] |
132 | | - else: |
133 | | - assert prev_num_points == d.shape[0] |
| 126 | + per_sequence_frames.append(seq_frames) |
134 | 127 |
|
| 128 | + samples = pd.concat(per_sequence_frames, ignore_index=True) |
135 | 129 | samples["length"] = samples["num_of_coded_frame"] / samples["fps"] |
136 | 130 |
|
| 131 | + output = result_df.drop(columns=["fps", "num_of_coded_frame"]).head(0).copy() |
| 132 | + |
137 | 133 | for i in range(num_points): |
138 | | - # print(f"Set - {i}") |
139 | 134 | points = samples.iloc[range(i, samples.shape[0], num_points)] |
140 | 135 | total_length = points["length"].sum() |
141 | 136 |
|
142 | | - # print(points) |
143 | | - |
144 | 137 | new_row = { |
145 | 138 | output.columns[0]: [ |
146 | 139 | name, |
@@ -176,8 +169,7 @@ def generate_csv_classwise_video_map( |
176 | 169 | seq_prefix: str = None, |
177 | 170 | dataset_prefix: str = None, |
178 | 171 | ): |
179 | | - seq_list = [] |
180 | | - [seq_list.extend(sequences) for sequences in dict_of_class_seq.values()] |
| 172 | + seq_list = [seq for sequences in dict_of_class_seq.values() for seq in sequences] |
181 | 173 |
|
182 | 174 | opts_metrics = {"AP": 0, "AP50": 1, "AP75": 2, "APS": 3, "APM": 4, "APL": 5} |
183 | 175 | results_df = read_df_rec(result_path, dataset_prefix, seq_list, nb_operation_points) |
@@ -212,9 +204,7 @@ def generate_csv_classwise_video_map( |
212 | 204 | ), "No evaluation information found in provided result directories..." |
213 | 205 |
|
214 | 206 | if not skip_classwise: |
215 | | - summary = compute_per_class_mAP( |
216 | | - dict_of_class_seq[class_name], items |
217 | | - ) |
| 207 | + summary = compute_per_class_mAP(dict_of_class_seq[class_name], items) |
218 | 208 | maps = summary.values[0][opts_metrics[metric]] |
219 | 209 | class_wise_maps.append(maps) |
220 | 210 |
|
@@ -327,9 +317,7 @@ def generate_csv_classwise_video_miou( |
327 | 317 | name, _, _ = get_seq_info(seq_info[utils.SEQ_INFO_KEY]) |
328 | 318 | matched_seq_names.append(name) |
329 | 319 |
|
330 | | - class_wise_results_df = generate_class_df( |
331 | | - results_df, {class_name: class_seqs} |
332 | | - ) |
| 320 | + class_wise_results_df = generate_class_df(results_df, {class_name: class_seqs}) |
333 | 321 |
|
334 | 322 | class_wise_results_df["end_accuracy"] = class_wise_mious |
335 | 323 |
|
|
0 commit comments