anwm / filter_2d_trajectory.py
de99's picture
Upload filter_2d_trajectory.py
6b8d425 verified
Raw
History Blame Contribute Delete
2.29 kB
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import pickle
from tqdm import tqdm
import numpy as np
# 原始 split 文件
# split_pkl = "data_splits/airvln_16/test/dataset_dist_8_to_8_n4_len_traj_pred_8_all.pkl"
# split_pkl = "data_splits/airvln_16/test/dataset_dist_-64_to_64_n4_len_traj_pred_16.pkl"
split_pkl = "data_splits/airvln_16/test/dataset_dist_8_to_8_n16_len_traj_pred_8.pkl"
with open(split_pkl, "rb") as f:
split_list = pickle.load(f)[0]
print(f"[info] 原始 split 数量: {len(split_list)}")
no_z_list = []
for traj_id, frame_idx, min_goal_distance, max_goal_distance in tqdm(split_list, desc="Checking trajectories", dynamic_ncols=True):
print(traj_id, frame_idx, min_goal_distance, max_goal_distance)
# 假设 traj_data.pkl 路径如下,根据实际情况修改
traj_dir = os.path.join("data", "airvln_16", traj_id)
traj_pkl = os.path.join(traj_dir, "traj_data.pkl")
with open(traj_pkl, "rb") as f:
traj_data = pickle.load(f)
# 计算增量 (dx, dy, dz, dyaw)
diff_traj = np.diff(traj_data["point"], axis=0) # (T,3)
diff_yaw = np.diff(traj_data["yaw"], axis=0).reshape(-1,1) # (T,1)
gt_traj = np.hstack([diff_traj, diff_yaw]) # (T,4)
dz = diff_traj[:, 2]
# print(f"{traj_id}: frame_idx={frame_idx}, dz.min={dz.min():.6f}, dz.max={dz.max():.6f}")
# print("dz:", np.round(dz[:20], 6).tolist())
start = frame_idx - 15
end = frame_idx + max_goal_distance
gt_slice = gt_traj[start:end]
print(f"start={start}, end={end}, slice_len={gt_slice.shape[0]}")
dz_s = gt_slice[:, 2]
print(f"{traj_id}: frame_idx={frame_idx}, dz.min={dz_s.min():.6f}, dz.max={dz_s.max():.6f}")
print("dz slice:", np.round(dz_s.tolist(), 6))
# 判断 z 分量是否全 0(只在切片里)
if (dz_s == 0).all():
no_z_list.append((traj_id, frame_idx, min_goal_distance, max_goal_distance))
print(f"[summary] no-z 数量: {len(no_z_list)}")
print("示例:", no_z_list[:5])
# sample
import random
random.seed(1120)
no_z_list = random.sample(no_z_list, k=100)
# 保存新的 split
out_pkl = "data_splits/airvln_16/test/navigation_eval_16_2d.pkl"
with open(out_pkl, "wb") as f:
pickle.dump(no_z_list, f)
print(f"[save] 写出新 split 到: {out_pkl}")