def prepare_calib_data(dataset, data_processor, encoder, sample_dataset=True):
os.makedirs("calibration_data_dir", exist_ok=True)
for e_name in ENCODER_INPUT_NAMES:
os.makedirs(os.path.join("calibration_data_dir", e_name), exist_ok=True)
for d_name in DECODER_INPUT_NAMES:
os.makedirs(os.path.join("calibration_data_dir", d_name), exist_ok=True)
# 均匀采样数据集,这里取100份数据作为校准数据(可调整)
indices = np.arange(0, len(dataset), len(dataset) // num_samples)[:num_samples]
new_dataset.append(dataset[idx])
for i in range(len(dataset)):
data = data_processor(dataset[i])
data["joint_relative_pos"] = data["joint_relative_pos"].to(torch.int8)
data['imgs'] = data['imgs'].squeeze(0)
data['depths'] = data['depths'].squeeze(0)
for e_name in ENCODER_INPUT_NAMES:
np.save(os.path.join("calibration_data_dir", e_name, f"{e_name}_{i}.npy"), data[e_name].cpu().numpy())
image_feature, robot_feature = encoder(*[data[key] for key in ENCODER_INPUT_NAMES])
data["image_feature"] = image_feature
data["robot_feature"] = robot_feature
data["timestep"] = torch.tensor([999], dtype=torch.int16)
for d_name in DECODER_INPUT_NAMES:
np.save(os.path.join("calibration_data_dir", d_name, f"{d_name}_{i}.npy"), data[d_name].cpu().numpy())
if not sample_dataset and i == 199:
logger.info("prepare calib data done")
def export_onnx(config, model, num_joint, output_path, validate=True):
prepare_calib_data(dataset, data_processor, encoder)