import json import pickle import numpy as np from collections import OrderedDict def load_pickle(filename): with open(filename, 'rb') as file: data = pickle.load(file) return data def save_pickle_to_json(filename): ordered_dict = load_pickle(filename) json_obj = json.dumps(ordered_dict, cls=NumpyEncoder) with open(filename.replace('.pkl', '.json'), 'w') as f: f.write(json_obj) def load_json(filename): with open(filename, 'r') as read_file: loaded_dict = json.loads(read_file.read()) loaded_dict = OrderedDict(loaded_dict) for k, v in loaded_dict.items(): if type(v) == list: loaded_dict[k] = np.asarray(v) else: for k_, v_ in v.items(): v[k_] = np.asarray(v_) return loaded_dict class NumpyEncoder(json.JSONEncoder): def default(self, obj): if isinstance(obj, np.ndarray): return obj.tolist() return json.JSONEncoder.default(self, obj) # save_pickle_to_json('data/layer_infos/convnext_layer_infos.pkl') # save_pickle_to_json('data/layer_infos/resnet_layer_infos.pkl') # save_pickle_to_json('data/layer_infos/mobilenet_layer_infos.pkl') # file = load_json('data/layer_infos/convnext_layer_infos.json') # print(type(file)) # print(type(file['embeddings.patch_embeddings']))