Splits the rep4 write-up's key findings into their own linkable pages: - best-model.md: calibration curves first (discriminative power, independent of any threshold), then F1 on the benchmark — LVFace-B Glint360K wins both. - gallery-scope.md: whole vs. cast-restricted gallery, isolated from model and expansion choice — restriction wins on every axis, but isn't a shipped runtime feature yet. - pose-expansion.md: the training-set expand_gallery effect, and the held-out replication attempt that found it doesn't reproduce (5 films, 2 models, after catching and fixing a replay-timeout truncation bug and a bbox first-match-instead-of-best-match bug in the comparison harness itself). An honest null result, with the methodology errors documented since they're exactly the kind that manufacture a false "it works!" finding. - lvface-deep-dive.md: the winning model's held-out generalization gap, its two failure modes (frozen-bbox ghost tracks), and a verified case (cross- checked against Jellyfin's independent cast metadata) where LVFace correctly identified an actor that X-Ray's ground truth failed to credit. Adds a "report-highlights" artifact-registry package (scripts/artifacts/ push_artifacts.sh, pull_artifacts.sh) for hand-picked illustrative frames that aren't reproducible via the automated best/worst montage selection, and wires pulling it into scripts/docs/build_site.sh.
123 lines
4.6 KiB
Bash
Executable File
123 lines
4.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# pull_artifacts.sh — download benchmark artifacts (galleries, montage frames) from
|
|
# the Gitea generic package registry. Counterpart to push_artifacts.sh.
|
|
#
|
|
# Downloads are public (no token needed) as long as the repo/packages are public.
|
|
# Resolving "latest" needs GITEA_TOKEN (the list-packages endpoint requires auth
|
|
# on this instance even for a public account) — export it before using "latest".
|
|
#
|
|
# Usage:
|
|
# scripts/artifacts/pull_artifacts.sh galleries [version]
|
|
# scripts/artifacts/pull_artifacts.sh montage-frames <film-slug> [version]
|
|
# scripts/artifacts/pull_artifacts.sh experiment-data [version]
|
|
# scripts/artifacts/pull_artifacts.sh report-highlights <name> [version]
|
|
# version defaults to "latest" (newest uploaded version, by created_at).
|
|
set -euo pipefail
|
|
|
|
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
OWNER="dtourolle"
|
|
# NOTE: file download lives under /api/packages/ (no /v1/); listing/metadata
|
|
# lives under the regular /api/v1/packages/ REST API. Different base paths,
|
|
# both real — see push_artifacts.sh's comment.
|
|
DL_BASE="https://gitea.tourolle.paris/api/packages/${OWNER}"
|
|
|
|
resolve_latest_version() {
|
|
local package="$1"
|
|
if [ -z "${GITEA_TOKEN:-}" ]; then
|
|
echo "error: resolving 'latest' needs GITEA_TOKEN (list-packages requires auth here)." >&2
|
|
echo " export GITEA_TOKEN=... or pass an explicit version instead of 'latest'." >&2
|
|
exit 1
|
|
fi
|
|
curl -sf "https://gitea.tourolle.paris/api/v1/packages/${OWNER}" \
|
|
-H "Authorization: token ${GITEA_TOKEN}" \
|
|
| python3 -c "
|
|
import json, sys
|
|
d = json.load(sys.stdin)
|
|
matches = [p for p in d if p['name'] == '$package' and p['type'] == 'generic']
|
|
if not matches:
|
|
sys.exit('no versions found for package \'$package\'')
|
|
matches.sort(key=lambda p: p['created_at'])
|
|
print(matches[-1]['version'])
|
|
"
|
|
}
|
|
|
|
pull_galleries() {
|
|
local version="$1"
|
|
local dest="${REPO_ROOT}/experiments/galleries"
|
|
mkdir -p "$dest"
|
|
echo "=== galleries (version ${version}) ==="
|
|
for model in arcface_w600k_r50 arcface_r18 arcface_w600k_mbf LVFace-B_Glint360K; do
|
|
local f="gallery_${model}.h5"
|
|
echo " fetching ${f}..."
|
|
curl -sf "${DL_BASE}/generic/galleries/${version}/${f}" \
|
|
-o "${dest}/${f}" || echo " [warn] ${f} not found at version ${version}"
|
|
done
|
|
}
|
|
|
|
pull_montage_frames() {
|
|
local version="$1" film="$2"
|
|
local dest="${REPO_ROOT}/experiments/results/holdout/montage_bestworst"
|
|
mkdir -p "$dest"
|
|
echo "=== montage-frames/${film} (version ${version}) ==="
|
|
local tmp; tmp="$(mktemp)"
|
|
curl -sf "${DL_BASE}/generic/montage-frames/${version}/${film}.zip" -o "$tmp"
|
|
mkdir -p "${dest}/${film}"
|
|
unzip -qo "$tmp" -d "${dest}/${film}"
|
|
rm "$tmp"
|
|
}
|
|
|
|
pull_experiment_data() {
|
|
local version="$1"
|
|
echo "=== experiment-data (version ${version}) ==="
|
|
local tmp; tmp="$(mktemp)"
|
|
curl -sf "${DL_BASE}/generic/experiment-data/${version}/experiment-data.zip" -o "$tmp"
|
|
unzip -qo "$tmp" -d "$REPO_ROOT"
|
|
rm "$tmp"
|
|
}
|
|
|
|
pull_report_highlight() {
|
|
local version="$1" name="$2"
|
|
local dest="${REPO_ROOT}/docs/assets/images"
|
|
mkdir -p "$dest"
|
|
echo "=== report-highlights/${name} (version ${version}) ==="
|
|
curl -sf "${DL_BASE}/generic/report-highlights/${version}/${name}" -o "${dest}/${name}"
|
|
}
|
|
|
|
if [ $# -eq 0 ]; then
|
|
echo "usage: $0 galleries [version]" >&2
|
|
echo " $0 montage-frames <film-slug> [version]" >&2
|
|
echo " $0 experiment-data [version]" >&2
|
|
echo " $0 report-highlights <name> [version]" >&2
|
|
exit 1
|
|
fi
|
|
|
|
TARGET="$1"
|
|
case "$TARGET" in
|
|
galleries)
|
|
VERSION="${2:-latest}"
|
|
[ "$VERSION" = "latest" ] && VERSION="$(resolve_latest_version galleries)"
|
|
pull_galleries "$VERSION"
|
|
;;
|
|
montage-frames)
|
|
FILM="${2:?usage: $0 montage-frames <film-slug> [version]}"
|
|
VERSION="${3:-latest}"
|
|
[ "$VERSION" = "latest" ] && VERSION="$(resolve_latest_version montage-frames)"
|
|
pull_montage_frames "$VERSION" "$FILM"
|
|
;;
|
|
experiment-data)
|
|
VERSION="${2:-latest}"
|
|
[ "$VERSION" = "latest" ] && VERSION="$(resolve_latest_version experiment-data)"
|
|
pull_experiment_data "$VERSION"
|
|
;;
|
|
report-highlights)
|
|
NAME="${2:?usage: $0 report-highlights <name> [version]}"
|
|
VERSION="${3:-latest}"
|
|
[ "$VERSION" = "latest" ] && VERSION="$(resolve_latest_version report-highlights)"
|
|
pull_report_highlight "$VERSION" "$NAME"
|
|
;;
|
|
*)
|
|
echo "unknown target: $TARGET (expected galleries, montage-frames, experiment-data, or report-highlights)" >&2
|
|
exit 1
|
|
;;
|
|
esac
|