0xZohar commited on
Commit
bc5b3ea
·
verified ·
1 Parent(s): c96c6e8

Add code/cube3d/training/sort_mappings.py

Browse files
code/cube3d/training/sort_mappings.py ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import os
3
+
4
+ def process_mappings(original_mapping_path, inverse_mapping_path, frequency_data_path, output_dir=None):
5
+ """
6
+ 处理正向和反向映射关系,根据使用频率重新排序并生成新的ID
7
+
8
+ 参数:
9
+ original_mapping_path: 原始映射关系JSON文件路径
10
+ inverse_mapping_path: 反向映射关系JSON文件路径
11
+ frequency_data_path: 包含使用频率数据的JSON文件路径
12
+ output_dir: 输出新映射文件的目录,默认为原文件所在目录
13
+ """
14
+ # 读取原正向映射关系
15
+ with open(original_mapping_path, 'r', encoding='utf-8') as f:
16
+ original_mapping = json.load(f)
17
+
18
+ # 读取原反向映射关系
19
+ with open(inverse_mapping_path, 'r', encoding='utf-8') as f:
20
+ inverse_mapping = json.load(f)
21
+
22
+ # 读取频率数据
23
+ with open(frequency_data_path, 'r', encoding='utf-8') as f:
24
+ frequency_data = json.load(f)
25
+
26
+ # 创建part_name到usage_count的映射
27
+ part_frequency = {item['part_name']: item['usage_count'] for item in frequency_data}
28
+
29
+ # 提取所有part_name,确保不遗漏任何数据
30
+ all_parts = set(original_mapping.values())
31
+ all_parts.update(inverse_mapping.keys())
32
+ all_parts.update(part_frequency.keys())
33
+
34
+ # 按照使用频率排序,频率高的在前
35
+ # 对于没有频率数据的part,使用0作为默认值
36
+ sorted_parts = sorted(all_parts, key=lambda x: part_frequency.get(x, 0), reverse=True)
37
+
38
+ # 生成新的正向映射关系,ID从0开始
39
+ new_forward_mapping = {str(i): part for i, part in enumerate(sorted_parts)}
40
+
41
+ # 生成新的反向映射关系 (part_name -> ID)
42
+ #new_inverse_mapping = {part: str(i) for i, part in enumerate(sorted_parts)}
43
+ new_inverse_mapping = {part: int(i) for i, part in enumerate(sorted_parts)}
44
+
45
+ # 确定输出目录
46
+ if output_dir is None:
47
+ output_dir = os.path.dirname(original_mapping_path)
48
+
49
+ # 构建输出文件路径
50
+ forward_output = os.path.join(output_dir, "new_forward_mapping.json")
51
+ inverse_output = os.path.join(output_dir, "new_inverse_mapping.json")
52
+
53
+ # 保存新的正向映射
54
+ with open(forward_output, 'w', encoding='utf-8') as f:
55
+ json.dump(new_forward_mapping, f, ensure_ascii=False, indent=4)
56
+
57
+ # 保存新的反向映射
58
+ with open(inverse_output, 'w', encoding='utf-8') as f:
59
+ json.dump(new_inverse_mapping, f, ensure_ascii=False, indent=4)
60
+
61
+ print(f"新的正向映射已生成: {forward_output}")
62
+ print(f"新的反向映射已生成: {inverse_output}")
63
+ print(f"共处理 {len(new_forward_mapping)} 个part")
64
+
65
+ return new_forward_mapping, new_inverse_mapping
66
+
67
+ if __name__ == "__main__":
68
+ # 示例用法,根据实际情况修改文件路径
69
+ original_mapping_file = "/public/home/wangshuo/gap/assembly/data/car_1k/subset_self/label_mapping.json" # 原正向映射文件
70
+ inverse_mapping_file = "/public/home/wangshuo/gap/assembly/data/car_1k/subset_self/label_inverse_mapping.json" # 原反向映射文件
71
+ frequency_data_file = "/public/home/wangshuo/gap/assembly/data/car_1k/subset_self/label_frequency.json" # 频率数据文件
72
+
73
+ # 处理映射关系
74
+ process_mappings(original_mapping_file, inverse_mapping_file, frequency_data_file)
75
+