You inherit a weak confidence-only selector for ten aligned candidates per point track. Improve the general prediction method to maximize mean video Average Jaccard; your submission is re-run on disjoint sealed videos for scoring.
Hard Constraints
- Put your final method in
/app/methods/main/predict.pyand keep this exact entry point:
python
def predict(
query_points,
candidate_tracks,
occlusion_logits,
expected_dist_logits,
candidate_model_id,
candidate_stage,
) -> tuple[numpy.ndarray, numpy.ndarray]:
...
- Return
(tracks, occluded), wheretracksis a finite numeric array of shape[Q,T,2]andoccludedis a boolean array of shape[Q,T]. - Use only the six arrays passed to
predict. Do not read visible labels, case identifiers, manifest order, filenames, verifier state, process state, credentials, or files outside/app/methodsfrom prediction code. - Implement one reusable method. Do not encode visible answers, specialize to individual videos or queries, infer hidden identities, or branch on array fingerprints, exact shapes, ordering, filenames, or case counts.
- Treat candidate order as arbitrary and independently permuted for every query. Use
candidate_model_idandcandidate_stageonly as public semantic metadata; never assume a fixed candidate-axis position. - Preserve query equivariance: reordering queries must only reorder outputs, and a query evaluated alone must receive the same prediction as it does in a batch, up to ordinary floating-point tolerance.
- Do not attempt to access sealed data, another container, Docker, network resources, or the verifier. The sealed verifier is offline and runs your method in a restricted child process.
- Keep runtime and memory practical on CPU. Invalid output, timeout, excess resource use, or an exception fails the submission.
Run the complete visible evaluation with:
python /app/selfcheck.py
Use python /app/selfcheck.py --case-limit 3 only for quick smoke tests; the subset score is not comparable to the complete visible score.
What You Have
/app/methods/main/predict.py: the weak max-frame-confidence baseline./app/data/visible/inputs/: 53 sanitized visible candidate-lattice cases./app/data/visible/labels/: visible labels used byselfcheck.pyonly. They are development targets, never prediction inputs./app/data/visible/MANIFEST.json: shapes and integrity hashes for the visible cases./app/selfcheck.py: the visible Average Jaccard evaluator.
For one case, Q is the number of query tracks, T the number of frames, and K=10 the candidate count. Inputs have these shapes:
query_points: float32[Q,3]in(query_frame, y, x)order;candidate_tracks: float16[Q,T,K,2]in(x,y)pixel coordinates;occlusion_logitsandexpected_dist_logits: float16[Q,T,K];candidate_model_idandcandidate_stage: uint8[Q,K], containing each(model,stage)pair from{0,1} x {0,1,2,3,4}exactly once per query.
The public metadata distinguishes tracker family and refinement stage. Candidate permutations and opaque case identifiers deliberately change across splits. Use the visible evaluator to study how confidence, spatial and temporal agreement, and visibility decisions affect generalization.
What You Submit
Harbor collects /app/methods/main/predict.py and /app/experiment_log.md. Helper Python files and a compact learned artifact may be placed under /app/methods/main; prediction must be deterministic for identical inputs and must not require installation, training, labels, network access, or writable caches at grading time.
Keep every graded helper or learned artifact beside predict.py under /app/methods/main. The staged bundle may contain at most 64 regular files and 64 MiB total; each file may be at most 32 MiB and must end in .py, .json, .joblib, .npz, or .npy.
Keep a concise experiment record in /app/experiment_log.md. Record complete visible scores, the change tested, and whether you kept or reverted it.
How It Is Judged
The metric is Average Jaccard in first-query mode at pixel thresholds 1, 2, 4, 8, 16; higher is better. Frames at or before each query frame are excluded. Scores are computed per video and macro-averaged across videos.
The verifier loads the same six-field public schema on disjoint sealed videos, privately permutes candidate and query order, invokes the submitted method without labels or case identity, validates the output, and checks deterministic, singleton, and permutation behavior.