Download example.py from heack/JEVision: direct link, hf CLI and curl.
- Browser
- Download file 2.47 kB
-
https://huggingface.co/heack/JEVision/resolve/main/example.py
- Command line
-
hf download hf://heack/JEVision/example.py
-
curl -L -o example.py https://huggingface.co/heack/JEVision/resolve/main/example.py
2.47 kB
| """Run real image-conditioned decisions with the released JEVision checkpoint.""" | |
| import argparse | |
| import json | |
| from pathlib import Path | |
| import statistics | |
| import time | |
| import torch | |
| from PIL import Image | |
| from training.judge.model import ImageJudge | |
| from training.judge.fast_engine import FastEngine, convert_projections | |
| p = argparse.ArgumentParser() | |
| p.add_argument('--root', default='./data', help='Base model cache root') | |
| p.add_argument('--checkpoint', default='.') | |
| p.add_argument('--image', help='Optional PNG, JPEG or WebP image') | |
| p.add_argument('--question', default='What is the dominant color in the image?') | |
| p.add_argument('--choices', default='red,blue,green') | |
| p.add_argument('--output', default='verification.json') | |
| a = p.parse_args() | |
| torch.set_num_threads(4) | |
| started = time.perf_counter() | |
| model = ImageJudge(Path(a.root), checkpoint=Path(a.checkpoint)).eval() | |
| engine = FastEngine(model, resident=False, row_buckets=(1, 2, 3, 4), max_call_tokens=2560) | |
| convert_projections(engine, 'w8a8', stage_on_host=True) | |
| engine.release_original(cpu_embeddings=True) | |
| engine.load_costs(Path(__file__).parent / 'training/judge/engine_costs_rtx5060ti_w8a8.json') | |
| engine.prepare(graphs=False) | |
| engine.enable_static_vision() | |
| setup = time.perf_counter() - started | |
| q = {'instructions': a.question, 'criteria': {x: x for x in a.choices.split(',')}} | |
| images = [(Path(a.image).name, Image.open(a.image).convert('RGB'))] if a.image else [(color, Image.new('RGB', (224, 224), color)) for color in ('red','blue','green')] | |
| rows = [] | |
| for label, im in images: | |
| engine.predict_many('Use the supplied image.', [q], image=im) | |
| for repeat in range(3): | |
| torch.cuda.synchronize(); begin = time.perf_counter() | |
| r = engine.predict_many('Use the supplied image.', [q], image=im) | |
| torch.cuda.synchronize(); elapsed = (time.perf_counter()-begin)*1000 | |
| probs = r['results'][0]['probabilities'] | |
| rows.append({'image': label, 'prediction': max(probs, key=probs.get), 'probabilities': probs, 'wall_ms': elapsed}) | |
| report = {'gpu': torch.cuda.get_device_name(), 'setup_seconds': setup, 'cases': rows, 'median_ms': statistics.median(x['wall_ms'] for x in rows), 'scope': 'Synthetic color image smoke test; warm inference excludes startup, network and queue time.'} | |
| Path(a.output).write_text(json.dumps(report, indent=2)) | |
| print(json.dumps(report, indent=2)) | |
| if not a.image: | |
| assert all(x['image'] == x['prediction'] for x in rows), 'Image-conditioned smoke test failed' | |