Sources: docs/scripts.md, docs/datasets.md, docs/site_deploy.md. All compute runs go through SLURM; the login node is for edits + light inspection only.
| setting | value |
|---|---|
| Cluster | UMass Unity HPC |
| Username | hangyang_umass_edu |
| Home | /home/hangyang_umass_edu |
| Work | /work/pi_nwycoff_umass_edu/hang |
| Project root | /work/pi_nwycoff_umass_edu/hang/imagehide |
| Conda env | hang at /work/pi_nwycoff_umass_edu/.conda/envs/hang/ |
| Disk budget | 50 GB total under project root |
module load conda/latest
eval "$(conda shell.bash hook)"
conda activate hang
# Don't use `source activate` β Unity's conda/latest is miniforge3 and only `conda activate` works.
| field | value |
|---|---|
| partition | gpu-preempt only |
| GPU | --gres=gpu:2080_ti:1 (underscore, not space) |
| preempt safety | required: training scripts must checkpoint & auto-resume |
# check 2080Ti availability sinfo -p gpu-preempt -o "%t %D %G" | grep 2080_ti # running jobs squeue -u $USER -o "%.18i %.9P %.20j %.8t %.10M %R" # interactive debug session srun --partition=gpu-preempt --gres=gpu:2080_ti:1 \ --mem=16G --time=1:00:00 --pty bash # inspect a finished job sacct -j <JOBID> --format=JobID,State,ExitCode,Elapsed # disk usage du -sh /work/pi_nwycoff_umass_edu/hang/imagehide/* df -h /work/pi_nwycoff_umass_edu/hang
| script | kind | purpose | walltime |
|---|---|---|---|
| smoke_test.{py,sbatch} | smoke | Run TrustMark Q/C/P on a test image; report PSNR and bit recovery. First run downloads model weights from Adobe CDN (~100 MB). | ~2 min Β· 30 min |
| download_data.sbatch | data | COCO 2017 train + DIV2K. Restart-safe (wget --continue). | ~4 h |
| download_clic.sbatch | data | CLIC 2020 pro + mobile, train + valid. ~6.4 GB. | ~6 h |
| download_dped.sbatch | data | DPED full-resolution originals from 4 phones + Canon DSLR. ~58 GB tar β ~51 GB extracted (~22 K images). | ~24 h |
| download_flickr2k.sbatch | data Β· optional | Flickr2K (2,650 imgs, ~22 GB). Not currently submitted. | ~12 h |
| exp0_inn_p896.sbatch | train | INN v3 legacy baseline (16 / RDB, 4.05 M params). Pins --num_blocks 16 --subnet_type rdb. | ~5 h |
| exp0_inn_p896_light.sbatch | train | INN v3 mobile target (8 / light, 0.167 M params). Canonical light run. | ~1.7 h |
| exp0_inn_idea084_d001*.sbatch | train | idea084 / design001 family β subband-weighted permutation adapter, multi-aux losses. Variants _v2 / _full / _best. | ~3β8 h |
| exp0_inn_idea097_d001_full.sbatch | train | idea097 / design001 β currently deployed carrier on imagehide-demo. 1024 b ECC codeword, no-AMP. | ~5 h |
| exp0_inn_idea{109,112}_d*.sbatch | train | In-flight research lines (idea109, idea112). 6 jobs running concurrently across 3 design variants each. | ~5β10 h |
| exp0_inn_eval_multires_v2.sbatch | eval | Multi-resolution eval at 9 sizes (256Β² β 4032Γ3008) Γ 13 compression attacks on 100 DIV2K val. Auto-detects architecture from saved args. --amp recommended. | ~30 min |
| eval_phash_512.sbatch | eval | Robust hash (pHash) drift sweep at 512Β². | ~10 min |
| eval_phash_drift.sbatch | eval | pHash drift across the canonical benign-transform suite (JPEG / resize). | ~15 min |
| eval_phash_{latest,wechat,chain_x}_idea084_d001.sbatch | eval | Targeted attack chains for the idea084/d001 checkpoint family. chain_wechat dropped on 2026-04-28 from live suite (past resize-tolerance bound). | ~10 min |
| eval_pdq_drift_ext.sbatch | eval | Extended PDQ drift validation β adversarial multi-pass JPEG chains. Verifies the BCH t=4 budget assumption. | ~15 min |
| eval_phash_v2_best{_multires,}.sbatch | eval | Multi-res eval against the v2 best checkpoint on the chain_x platform pipeline. | ~20 min |
| export_onnx_fp16.sbatch | export | ONNX export at fp16. Required step for Exp 4 (camera-deployment benchmark). | ~15 min |
| fp16_attempt{1,1b,2,3,3b}.sbatch | export | fp16 conversion experiments β try onnxsim dedupe, polygraphy, weights-only conversion, selective fp16. fp16 round-trip remains numerically tricky. | ~10 min each |
| fp16_{check_ort,validate_bitacc}.sbatch | export | fp16 verification β ONNXRuntime parity + bit_acc validation against fp32 reference. Pending: fp16 max-diff vs fp32 within 0.0001 on bit_acc. | ~5 min each |
cd /work/pi_nwycoff_umass_edu/hang/imagehide sbatch scripts/smoke_test.sbatch squeue -u $USER # check progress tail -f logs/smoke-<JOBID>.out # follow output
Logs land at logs/<name>-<JOBID>.{out,err}.
All under /work/pi_nwycoff_umass_edu/hang/imagehide/data/. ~143K images, ~26 GB on disk after extraction cleanup (~84 GB including kept DPED archive).
| dataset | images | long side | disk | role | status |
|---|---|---|---|---|---|
| COCO 2017 | ~118 000 | β€ 640 px | ~18 GB | training (β€ 512Β²) | on disk |
| DIV2K | 800 + 100 | ~2 040 px | ~3 GB | training (HR) + val | on disk |
| CLIC 2020 | 1 735 | 1.5Kβ5K px | ~12 GB | training (HR) | on disk |
| DPED originals | 22 260 | 2Kβ4K px | ~51 GB | training (HR) | on disk |
data/train.txt and data/val.txt list absolute image paths, one per line, sorted. build_resolution_manifests.py filters per-resolution-class for the multi-res sampler.
| file | train | val | sources |
|---|---|---|---|
train.txt / val.txt | 142 565 | 617 | COCO + DIV2K + CLIC + DPED |
{train,val}_256.txt | 141 741 | 617 | all sources |
{train,val}_384.txt | 122 070 | 617 | HR + most COCO |
{train,val}_512.txt | 32 696 | 615 | HR only (COCO β€ 640 px falls out) |
{train,val}_768.txt | 24 204 | 612 | HR-only: DPED + DIV2K + CLIC |
Sidecar {train,val}_dims.tsv (path \t w \t h) is also written for arbitrary downstream filtering.
src/multi_res_dataset.py: MultiResDataset + MultiResBatchSampler + make_loader. Reads train_dims.tsv and materializes per-(H, W) eligibility lists. RES_POOL defines 18 (H, W) tuples; the sampler picks one per batch and derives batch size from a pixel budget (default 1.0 M). src/exp0_inn_train.py consumes via make_loader(args.manifest_dims, ...).
The public dashboard at yanghangai.github.io/imagehide is served by GitHub Pages from the gh-pages branch β not main. A commit to main won't update the live site.
| where | source path (main) | served path (gh-pages) | URL |
|---|---|---|---|
| Dashboard (landing) | index.html | index.html | / |
| Spec page | docs/html/spec.html | docs/html/spec.html | /docs/html/spec.html |
| Design / Plan / Ops pages | docs/html/{design,plan,ops}.html | same | /docs/html/<page> |
| Feedback overlay | assets/feedback.{css,js} | same | /assets/... |
| Paper site (archived) | site/index.html, site/img/* | paper/index.html, paper/img/* | /paper/ |
# 1. Commit + push source edits on main git add index.html docs/html/ assets/ site/ docs/site_deploy.md git commit -m "Site: <summary>" git push origin main # 2. Mirror to gh-pages via a worktree git fetch origin gh-pages git worktree add /tmp/imagehide-ghpages gh-pages cd /tmp/imagehide-ghpages # 2a. Dashboard + spec/design/plan/ops cp /work/pi_nwycoff_umass_edu/hang/imagehide/index.html index.html mkdir -p docs/html cp /work/pi_nwycoff_umass_edu/hang/imagehide/docs/html/*.html docs/html/ # 2b. Feedback overlay assets mkdir -p assets cp /work/pi_nwycoff_umass_edu/hang/imagehide/assets/feedback.{css,js} assets/ # 2c. Paper site at /paper/ (only when site/ source changes) mkdir -p paper/img cp /work/pi_nwycoff_umass_edu/hang/imagehide/site/index.html paper/index.html cp /work/pi_nwycoff_umass_edu/hang/imagehide/site/img/*.png paper/img/ # 2d. Rewrite repo-internal .md / src/ links β github.com/blob/main URLs GH=https://github.com/yanghangAI/imagehide/blob/main sed -i \ -e "s|href=\"docs/inn_arch_notes.md\"|href=\"${GH}/docs/inn_arch_notes.md\"|g" \ -e "s|href=\"docs/PLAN.md\"|href=\"${GH}/docs/PLAN.md\"|g" \ -e "s|href=\"docs/scripts.md\"|href=\"${GH}/docs/scripts.md\"|g" \ -e "s|href=\"index.md\"|href=\"${GH}/index.md\"|g" \ -e "s|href=\"HANDOFF.md\"|href=\"${GH}/HANDOFF.md\"|g" \ index.html sed -i \ -e "s|href=\"../../src/|href=\"${GH}/src/|g" \ -e "s|href=\"../inn_arch_notes.md\"|href=\"${GH}/docs/inn_arch_notes.md\"|g" \ docs/html/spec.html # 3. Commit + push git add -A git commit -m "<summary>" git push origin gh-pages cd - git worktree remove /tmp/imagehide-ghpages
# landing curl -s https://yanghangai.github.io/imagehide/ | grep -oE 'A-tolerant|MWIP' | sort -u # spec / design / plan / ops for p in docs/html/{spec,design,plan,ops}.html; do printf "%-32s β HTTP %s\n" "/$p" "$(curl -s -o /dev/null -w '%{http_code}' https://yanghangai.github.io/imagehide/$p)" done
main only. Live page won't change. git log origin/gh-pages is the deploy log.gh-pages directly. main and gh-pages diverge; next deploy looks like a revert..md and src/ links 404 on Pages because gh-pages only carries HTML.