initial commit

This commit is contained in:
pikaliov
2026-07-07 16:22:49 +03:00
commit 3e95f4f618
21 changed files with 3302 additions and 0 deletions

143
scripts/run_experiments.sh Normal file
View File

@@ -0,0 +1,143 @@
#!/bin/bash
# ============================================================
# Запуск 12 экспериментов на GTA-UAV (2 варианта описаний × 6 комбинаций)
# ============================================================
#
# 6 комбинаций text_levels для каждого варианта:
# 1) level1 — только краткое описание
# 2) level2 — только пространственное
# 3) level3 — только ключевые паттерны
# 4) level1 level2 — краткое + пространственное
# 5) level1 level2 level3 — все три уровня
# 6) level1 level3 — краткое + паттерны (ablation)
#
# Использование:
# bash scripts/run_experiments.sh # все 12 экспериментов
# bash scripts/run_experiments.sh v1 # только v1 (6 экспериментов)
# bash scripts/run_experiments.sh v2 # только v2
# bash scripts/run_experiments.sh v1 3 # v1, эксперимент 3
# bash scripts/run_experiments.sh v2 1 4 # v2, эксперименты 1 и 4
# ============================================================
set -e # Остановиться при ошибке
# ====================== НАСТРОЙКИ ===========================
DATA_ROOT="/media/servml/SSD_2_2TB/datasets/cvgl_datasets/GTA-UAV-LR"
DESCRIPTIONS_v1="/media/servml/SSD_2_2TB/datasets/cvgl_datasets/GTA-UAV-LR-captions_ v1"
DESCRIPTIONS_v2="/media/servml/SSD_2_2TB/datasets/cvgl_datasets/GTA-UAV-LR-captions_v2"
DGTRS_CKPT="/media/servml/SSD_2_2TB/weights/LRSCLIP/DGTRS-CLIP-ViT-B-16.pt"
STRIPNET_CKPT="/media/servml/SSD_2_2TB/weights/stripnet_small.pth"
# Общие гиперпараметры
EPOCHS=50
BATCH_SIZE=64
MICRO_BATCH=64
LR=0.0001
OUTPUT="outputs"
# ============================================================
# Массив экспериментов: номер → уровни текста
declare -A EXPERIMENTS
EXPERIMENTS[1]="level1" # Только краткое описание
EXPERIMENTS[2]="level2" # Только пространственное
EXPERIMENTS[3]="level3" # Только ключевые паттерны
EXPERIMENTS[4]="level1 level2" # Краткое + пространственное
EXPERIMENTS[5]="level1 level2 level3" # Все три уровня
EXPERIMENTS[6]="level1 level3" # Краткое + паттерны (ablation)
# ---------- Парсинг аргументов ----------
# Определить какие версии и эксперименты запускать
VERSIONS=()
EXP_NUMS=()
if [ $# -eq 0 ]; then
# Без аргументов → все версии, все эксперименты
VERSIONS=(v1 v2)
EXP_NUMS=(1 2 3 4 5 6)
elif [ "$1" = "v1" ] || [ "$1" = "v2" ]; then
# Первый аргумент — версия
VERSIONS=("$1")
shift
if [ $# -eq 0 ]; then
EXP_NUMS=(1 2 3 4 5 6)
else
EXP_NUMS=("$@")
fi
else
# Числа без версии → обе версии, указанные эксперименты
VERSIONS=(v1 v2)
EXP_NUMS=("$@")
fi
TOTAL=$(( ${#VERSIONS[@]} * ${#EXP_NUMS[@]} ))
echo "========================================"
echo " CVGL Experiments on GTA-UAV"
echo " Epochs: $EPOCHS | Batch: $BATCH_SIZE"
echo " Versions: ${VERSIONS[*]}"
echo " Experiments: ${EXP_NUMS[*]}"
echo " Total runs: $TOTAL"
echo "========================================"
# ---------- Проверки перед запуском ----------
if [[ "$DGTRS_CKPT" == "/path/to/"* ]]; then
echo "❌ ОШИБКА: Заполни DGTRS_CKPT в скрипте!"
exit 1
fi
if [[ "$STRIPNET_CKPT" == "/path/to/"* ]]; then
echo "❌ ОШИБКА: Заполни STRIPNET_CKPT в скрипте!"
exit 1
fi
RUN_IDX=0
for VERSION in "${VERSIONS[@]}"; do
# Выбрать путь к описаниям по версии
if [ "$VERSION" = "v1" ]; then
DESCRIPTIONS="$DESCRIPTIONS_v1"
else
DESCRIPTIONS="$DESCRIPTIONS_v2"
fi
# Проверить что директория существует
if [ ! -d "$DESCRIPTIONS" ]; then
echo "⚠️ Папка описаний не найдена: $DESCRIPTIONS"
echo " Пропускаю версию $VERSION"
continue
fi
for EXP_NUM in "${EXP_NUMS[@]}"; do
LEVELS="${EXPERIMENTS[$EXP_NUM]}"
RUN_IDX=$((RUN_IDX + 1))
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " [$RUN_IDX/$TOTAL] ${VERSION} / Experiment $EXP_NUM: levels=[$LEVELS]"
echo " Descriptions: $DESCRIPTIONS"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
python train.py \
--data_root "$DATA_ROOT" \
--descriptions_path "$DESCRIPTIONS" \
--text_levels $LEVELS \
--dgtrs_checkpoint "$DGTRS_CKPT" \
--stripnet_checkpoint "$STRIPNET_CKPT" \
--epochs $EPOCHS \
--batch_size $BATCH_SIZE \
--micro_batch_size $MICRO_BATCH \
--lr $LR \
--output_dir "${OUTPUT}/${VERSION}" \
--inject_mona
echo "✅ [$RUN_IDX/$TOTAL] ${VERSION} / Experiment $EXP_NUM complete"
done
done
echo ""
echo "========================================"
echo " All $TOTAL experiments complete!"
echo " Results:"
for VERSION in "${VERSIONS[@]}"; do
echo " ${VERSION}: ${OUTPUT}/${VERSION}/"
done
echo "========================================"