Gupta28's picture
Update project name: judgebench -> judgecliff
2a9c1f5 verified
|
Raw
History Blame Contribute Delete
2.19 kB
---
base_model: google/siglip-so400m-patch14-384
pipeline_tag: image-feature-extraction
tags:
- reward-model
- brand-fidelity
- judgecliff
---
# judgecliff SigLIP brand judge v1
Part of [judgecliff](https://github.com/amargupta0428/judgecliff): *which image-QC judges survive optimization pressure?*
A brand-fidelity judge for **rhode** (beauty brand). A judge = these SigLIP weights
+ `calibration.json` (rhode train-split centroid + Platt scaling params) in this repo.
**Base:** `google/siglip-so400m-patch14-384` (full `SiglipModel`, contrastively fine-tuned).
**Training:** SupCon contrastive fine-tune, rhode positives vs competitor-brand negatives (Glossier, ILIA and others), judgecliff train split. No violation negatives.
**Report card (judgecliff Phase 1, 2,622-item test set):** brand AUC **0.99**, logo-masking delta **0.00** (style reader, not a wordmark reader), brand-dial Spearman 0.24, near-zero violation detection.
v1 learned the brand's *center*, not its *boundaries*: it is violation-blind, and under SRPO gradient pressure it was fully exploited (hacked images scored 0.84). See v2 (+violation negatives) and v3 (hardened) for the ablations.
## Scoring
Score = Platt-calibrated cosine similarity between the image embedding and the rhode centroid:
```python
import json, numpy as np, torch
from PIL import Image
from transformers import SiglipModel, SiglipImageProcessor
from huggingface_hub import hf_hub_download
repo = "Gupta28/judgebench-siglip-judge-v1"
model = SiglipModel.from_pretrained(repo)
proc = SiglipImageProcessor.from_pretrained(repo)
params = json.load(open(hf_hub_download(repo, "calibration.json")))
centroid = np.array(params["centroid"]) # L2-normalized rhode train centroid
img = Image.open("image.jpg")
with torch.no_grad():
emb = model.get_image_features(**proc(images=img, return_tensors="pt"))
v = emb[0].numpy(); v /= np.linalg.norm(v)
cos = float(v @ centroid)
score = 1 / (1 + np.exp(-(params["platt_a"] * cos + params["platt_b"]))) # calibrated on-brand prob
```
Full evaluation protocol, test-set construction, and findings: [https://github.com/amargupta0428/judgecliff](https://github.com/amargupta0428/judgecliff).