Implements DToP for LeafSnap, with Dynamic Position Embedding (via timm interpolation) and multi-size training. Options: ResNet50 baseline, Proxy-Anchor loss, and GeM in local branch. Also supports cross-domain eval on a PlantCLEF subset.
LeafSnap: train//.jpg|png val//.jpg|png test//*.jpg|png
PlantCLEF subset: test//*.jpg|png
python -m venv .venv && source .venv/bin/activate pip install -r requirements.txt
python train.py --data_root /path/to/leafsnap --model dtop --loss proxyanchor --local_pool gem --multi_sizes 192 224 256 288 --epochs 30 --batch_size 32 --device cuda
python train.py --data_root /path/to/leafsnap --model resnet --loss triplet --epochs 30 --batch_size 32 --device cuda
python eval.py --data_root /path/to/leafsnap --split test --model dtop --ckpt runs/dtop_proxyanchor_gem/best.pt
python eval.py --data_root /path/to/plantclef_subset --split test --model dtop --ckpt runs/dtop_proxyanchor_gem/best.pt
python extract_features.py --data_root /content/drive/MyDrive/Project/dtop_leafsnap_project/data --split train --out_csv outputs/train_features.csv
--do_resnet --do_dtop_gap --do_dtop_gap
--ckpt_resnet runs/resnet_triplet_gap/best.pt
--ckpt_dtop runs/dtop_triplet_gap/best.pt
python db/ingest_from_csv.py --csv outputs/train_features.csv --db_url "$DATABASE_URL"