单目3D初始代码
This commit is contained in:
134
tools/temporal_analysis/track_objects.sh
Executable file
134
tools/temporal_analysis/track_objects.sh
Executable file
@@ -0,0 +1,134 @@
|
||||
#!/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)
|
||||
Reference in New Issue
Block a user