#!/bin/bash cd ../../.. || exit SAPIENS_CHECKPOINT_ROOT=/home/${USER}/sapiens_lite_host MODE='torchscript' ## original. no optimizations (slow). full precision inference. # MODE='bfloat16' ## A100 gpus. faster inference at bfloat16 SAPIENS_CHECKPOINT_ROOT=$SAPIENS_CHECKPOINT_ROOT/$MODE #----------------------------set your input and output directories---------------------------------------------- INPUT='../pose/demo/data/itw_videos/reel1' OUTPUT="/home/${USER}/Desktop/sapiens/pose/Outputs/vis/itw_videos/reel1_pose17" #--------------------------MODEL CARD--------------- # MODEL_NAME='sapiens_0.3b'; CHECKPOINT=$SAPIENS_CHECKPOINT_ROOT/pose/checkpoints/sapiens_0.3b/sapiens_0.3b_coco_best_coco_AP_796_$MODE.pt2 # MODEL_NAME='sapiens_0.6b'; CHECKPOINT=$SAPIENS_CHECKPOINT_ROOT/pose/checkpoints/sapiens_0.6b/sapiens_0.6b_coco_best_coco_AP_812_$MODE.pt2 MODEL_NAME='sapiens_1b'; CHECKPOINT=$SAPIENS_CHECKPOINT_ROOT/pose/checkpoints/sapiens_1b/sapiens_1b_coco_best_coco_AP_821_$MODE.pt2 # MODEL_NAME='sapiens_2b'; CHECKPOINT=$SAPIENS_CHECKPOINT_ROOT/pose/checkpoints/sapiens_2b/sapiens_2b_coco_best_coco_AP_822_$MODE.pt2 OUTPUT=$OUTPUT/$MODEL_NAME DETECTION_CONFIG_FILE='../pose/demo/mmdetection_cfg/rtmdet_m_640-8xb32_coco-person_no_nms.py' DETECTION_CHECKPOINT=$SAPIENS_CHECKPOINT_ROOT/detector/checkpoints/rtmpose/rtmdet_m_8xb32-100e_coco-obj365-person-235e8209.pth #---------------------------VISUALIZATION PARAMS-------------------------------------------------- LINE_THICKNESS=3 ## line thickness of the skeleton RADIUS=6 ## keypoint radius KPT_THRES=0.3 ## confidence threshold ##-------------------------------------inference------------------------------------- RUN_FILE='demo/vis_pose.py' ## number of inference jobs per gpu, total number of gpus and gpu ids # JOBS_PER_GPU=1; TOTAL_GPUS=8; VALID_GPU_IDS=(0 1 2 3 4 5 6 7) JOBS_PER_GPU=1; TOTAL_GPUS=1; VALID_GPU_IDS=(0) BATCH_SIZE=8 # Find all images and sort them, then write to a temporary text file IMAGE_LIST="${INPUT}/image_list.txt" find "${INPUT}" -type f \( -iname \*.jpg -o -iname \*.png \) | sort > "${IMAGE_LIST}" # Check if image list was created successfully if [ ! -s "${IMAGE_LIST}" ]; then echo "No images found. Check your input directory and permissions." exit 1 fi # Count images and calculate the number of images per text file NUM_IMAGES=$(wc -l < "${IMAGE_LIST}") if ((TOTAL_GPUS > NUM_IMAGES / BATCH_SIZE)); then TOTAL_JOBS=$(( (NUM_IMAGES + BATCH_SIZE - 1) / BATCH_SIZE)) IMAGES_PER_FILE=$((BATCH_SIZE)) EXTRA_IMAGES=$((NUM_IMAGES - ((TOTAL_JOBS - 1) * BATCH_SIZE) )) else TOTAL_JOBS=$((JOBS_PER_GPU * TOTAL_GPUS)) IMAGES_PER_FILE=$((NUM_IMAGES / TOTAL_JOBS)) EXTRA_IMAGES=$((NUM_IMAGES % TOTAL_JOBS)) fi export TF_CPP_MIN_LOG_LEVEL=2 echo "Distributing ${NUM_IMAGES} image paths into ${TOTAL_JOBS} jobs." # Divide image paths into text files for each job for ((i=0; i "${TEXT_FILE}" else # Write the exact number of image paths per text file head -n $((IMAGES_PER_FILE * (i + 1))) "${IMAGE_LIST}" | tail -n ${IMAGES_PER_FILE} > "${TEXT_FILE}" fi done # Run the process on the GPUs, allowing multiple jobs per GPU for ((i=0; i