Files
yolov26_3d/tools/temporal_analysis/track_objects.sh
2026-06-24 09:35:46 +08:00

135 lines
5.3 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# 用法说明:
# 批量对 test_merged_model.sh 推理结果进行跟踪后处理,覆盖三路输入:
# ROI0: {case_dir}/roi0/ → {case_dir}/roi0.json
# ROI1: {case_dir}/roi1/ → {case_dir}/roi1.json
# Merge: {case_dir}/merge_json/ → {case_dir}/merge.json
# 并将三路跟踪结果合并为:
# {case_dir}/combined_tracking.json
#
# 支持两种模式:
# 1) 批量模式(默认):处理 RESULTS_ROOT/MODEL_NAME 下所有 case
# bash track_objects.sh
# 2) 单 case 模式:指定 case 目录路径作为第一个参数
# bash track_objects.sh /data1/dongying/Mono3d/G1M3/cases_regular/model_20260228/some_case
# Set PYTHONPATH to project root for module imports
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
export PYTHONPATH="${PROJECT_ROOT}:${PYTHONPATH}"
# -----------------------------------------------------------------------
# 配置区:与 test_merged_model.sh 保持一致
# -----------------------------------------------------------------------
# RESULTS_ROOT="/data1/dongying/Mono3d/G1M3/cases_feishu_results"
# MODEL_NAME="torchscript_python_300w_newdata-cncap-v6-ego"
# /data1/dongying/Mono3d/G1Q3/tmp/20251018215336_results/predictions
RESULTS_ROOT="/data1/dongying/Mono3d/G1M3/cases_regular"
RESULTS_ROOT="/data1/dongying/Mono3d/G1M3/pdcl_batch_infer/cases_aeb_v2/CBNA/"
MODEL_NAME="50_15_60"
NUM_WORKERS=16
# 公共跟踪参数
TRACK_CLASSES="${TRACK_CLASSES:-0 1 2 3 4 5 6 7 8 9 10 11 12}"
IOU_THRESH=0.3
MAX_AGE=5
DIST_THRESH=100
MAX_FRAMES="${MAX_FRAMES:-200}"
MODEL_VERSION="${MODEL_VERSION:-model_20260403}"
echo ""
echo "######################################################################"
echo "# Batch tracking and merge: single scan + case-level parallel execution"
echo "######################################################################"
FRAME_LIMIT_ARGS=()
if [[ -n "${MAX_FRAMES}" ]]; then
FRAME_LIMIT_ARGS+=(--max-frames "${MAX_FRAMES}")
fi
MODEL_VERSION_ARGS=()
if [[ -n "${MODEL_VERSION}" ]]; then
MODEL_VERSION_ARGS+=(--model-version "${MODEL_VERSION}")
fi
if [[ -n "$1" ]]; then
# ===================================================================
# 单 case 模式:对指定 case 目录进行跟踪 + 合并
# ===================================================================
CASE_DIR="$1"
if [[ ! -d "${CASE_DIR}" ]]; then
echo "Error: case directory does not exist: ${CASE_DIR}"
exit 1
fi
echo "Single-case mode: ${CASE_DIR}"
# 逐源跟踪
for SOURCE in roi0 roi1 merge; do
INPUT_DIR="${CASE_DIR}/${SOURCE}"
if [[ "${SOURCE}" == "merge" ]]; then
OUTPUT_FILE="${CASE_DIR}/merge.json"
else
OUTPUT_FILE="${CASE_DIR}/${SOURCE}.json"
fi
if [[ -d "${INPUT_DIR}" ]]; then
echo ""
echo "--- Tracking ${SOURCE} ---"
python "${PROJECT_ROOT}/tools/temporal_analysis/track_objects.py" \
--input-dir "${INPUT_DIR}" \
--output "${OUTPUT_FILE}" \
--file-pattern "*.json" \
--classes ${TRACK_CLASSES} \
--iou-threshold ${IOU_THRESH} \
--max-age ${MAX_AGE} \
--distance-threshold ${DIST_THRESH} \
"${FRAME_LIMIT_ARGS[@]}" \
"${MODEL_VERSION_ARGS[@]}"
else
echo "Warning: ${INPUT_DIR} not found, skipping ${SOURCE}"
fi
done
# 合并三路跟踪结果
echo ""
echo "--- Merging tracking results ---"
python "${PROJECT_ROOT}/tools/temporal_analysis/merge_tracking_results.py" \
--roi0 "${CASE_DIR}/roi0.json" \
--roi1 "${CASE_DIR}/roi1.json" \
--merge "${CASE_DIR}/merge.json" \
--output "${CASE_DIR}/combined_tracking.json"
else
# ===================================================================
# 批量模式:扫描 RESULTS_ROOT/MODEL_NAME 下所有 case
# ===================================================================
python "${PROJECT_ROOT}/tools/temporal_analysis/track_objects.py" \
--results-root "${RESULTS_ROOT}" \
--model-name "${MODEL_NAME}" \
--num-workers "${NUM_WORKERS}" \
--file-pattern "*.json" \
--classes ${TRACK_CLASSES} \
--iou-threshold ${IOU_THRESH} \
--max-age ${MAX_AGE} \
--distance-threshold ${DIST_THRESH} \
"${FRAME_LIMIT_ARGS[@]}" \
"${MODEL_VERSION_ARGS[@]}"
fi
# -----------------------------------------------------------------------
# 附加3D距离增强匹配注释状态按需启用
# -----------------------------------------------------------------------
# while IFS= read -r -d '' merge_json_dir; do
# case_dir=$(dirname "$merge_json_dir")
# output_file="${case_dir}/merge_tracking_3d.json"
# python "${PROJECT_ROOT}/tools/temporal_analysis/track_objects.py" \
# --input-dir "$merge_json_dir" \
# --output "$output_file" \
# --classes 0 1 2 3 4 5 6 7 8 9 10 11 12 \
# --iou-threshold 0.3 \
# --max-age 5 \
# --distance-threshold 100 \
# --use-3d \
# --max-3d-distance 2.0
# done < <(find "${RESULTS_ROOT}/${MODEL_NAME}" -type d -name "merge_json" -print0 | sort -z)