CARe / InferCode /run_interface_b_single_pair.sh
Hongyang-Li's picture
Upload 78 files
ffba4ae verified
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# =========================
# Edit parameters below, then run:
# bash run_interface_b_single_pair.sh
# =========================
# Optional: load weights from Hugging Face model repos (recommended).
# export CARE_WEIGHT_STEP1_REPO_ID="Hongyang-Li/CARe_VesselSeg"
# export CARE_WEIGHT_STEP2_REPO_ID="Hongyang-Li/CARe_OpticDiscFoveaDetection"
# export CARE_WEIGHT_STEP3_REPO_ID="Hongyang-Li/CARe_Reg"
# export CARE_WEIGHT_BROAD_REPO_ID="AIMClab-RUC/UNet_DCP_1024"
# Backward-compatible single bundled repo:
# export CARE_WEIGHTS_REPO_ID="your-name/care-weights"
# Input images (required)
OCTA_IMAGE="${SCRIPT_DIR}/examples/octa.jpg"
WFCFP_IMAGE="${SCRIPT_DIR}/examples/wfcfp.jpg"
# Output directory
OUTPUT_DIR="${SCRIPT_DIR}/Output/demo_single_pair"
# Step1 vessel segmentation model: CARe-VesselSeg / Broad domain retinal vessel segmentation [ICASSP 2025]
SEG_MODEL="CARe-VesselSeg"
# Registration mode:
# - interface_b_retry: Interface-B logic (includes Step2 + retry routes)
# - direct_no_crop: skip Step2 and cropping, run Step3 directly after Step1 (suitable for CFP-CFP)
REGISTRATION_MODE="interface_b_retry"
# Step1 broad-domain segmentation modality (effective only when SEG_MODEL=\"Broad domain retinal vessel segmentation [ICASSP 2025]\")
# AUTO: infer from filename (contains OCTA/_001 -> OCTA, otherwise CFP)
QUERY_MODALITY="AUTO" # AUTO / CFP / OCTA
REFER_MODALITY="AUTO" # AUTO / CFP / OCTA
# Step3 inlier method: RANSAC / LMEDS
INLIER_METHOD="LMEDS"
# Step3 retry trigger threshold (filtered inlier count)
RETRY_FILTERED_INLIER_THRESHOLD="20"
# Device: auto / cpu / cuda:0
DEVICE="auto"
# Disable non-essential debug artifact generation/writing: 1=on, 0=off
DISABLE_NONSESSENTIAL_IO="1"
# Step3 config and weights
CONFIG_PATH="${SCRIPT_DIR}/../Step3_Reg/Src/config/test.yaml"
MODEL_PATH="${SCRIPT_DIR}/../Step3_Reg/Src/save/crop_vseg_vessel_111.pth"
# Overwrite output if exists: 1=on, 0=off
FORCE_RERUN="1"
# Keep Step3 attempt route directories: 1=keep, 0=remove
KEEP_ATTEMPT_DIRS="0"
if [[ ! -f "${OCTA_IMAGE}" ]]; then
echo "OCTA_IMAGE does not exist: ${OCTA_IMAGE}" >&2
exit 2
fi
if [[ ! -f "${WFCFP_IMAGE}" ]]; then
echo "WFCFP_IMAGE does not exist: ${WFCFP_IMAGE}" >&2
exit 2
fi
ARGS=(
--octa_image "${OCTA_IMAGE}"
--wfcfp_image "${WFCFP_IMAGE}"
--output_dir "${OUTPUT_DIR}"
--seg_model "${SEG_MODEL}"
--registration_mode "${REGISTRATION_MODE}"
--query_modality "${QUERY_MODALITY}"
--refer_modality "${REFER_MODALITY}"
--inlier_method "${INLIER_METHOD}"
--retry_filtered_inlier_threshold "${RETRY_FILTERED_INLIER_THRESHOLD}"
--device "${DEVICE}"
--config_path "${CONFIG_PATH}"
--model_path "${MODEL_PATH}"
)
if [[ "${FORCE_RERUN}" == "1" ]]; then
ARGS+=(--force_rerun)
fi
if [[ "${KEEP_ATTEMPT_DIRS}" == "1" ]]; then
ARGS+=(--keep_attempt_dirs)
fi
if [[ "${DISABLE_NONSESSENTIAL_IO}" == "1" ]]; then
ARGS+=(--disable_nonessential_io)
fi
exec python "${SCRIPT_DIR}/run_interface_b_single_pair.py" "${ARGS[@]}"