Instructions to use danielrosehill/jerusalem-poster-detector with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- ultralytics
How to use danielrosehill/jerusalem-poster-detector with ultralytics:
# Couldn't find a valid YOLO version tag. # Replace XX with the correct version. from ultralytics import YOLOvXX model = YOLOvXX.from_pretrained("danielrosehill/jerusalem-poster-detector") source = 'http://images.cocodataset.org/val2017/000000039769.jpg' model.predict(source=source, save=True) - Notebooks
- Google Colab
- Kaggle
Jerusalem street poster detector
Fine-tune of yolo11n.pt that locates specific poster designs in street
photographs and names which design it found. Trained on
danielrosehill/jerusalem-poster-detection.
This is a proof of concept: that a small detector, trained on a few dozen hand-drawn boxes, can support graffiti and flyposting workflows โ surveying what is up, identifying which known artwork it is, and checking afterwards whether it came down. It is not a finished production model, and the honest reading of its numbers is at the bottom of this card.
Each class is one artwork, not a generic "poster" category, so the model answers which known design is on the wall and where its bounds are. The class list grows as new designs are surveyed; indices are append-only.
Classes
0โchabad-rebbe-poster-1
Results
Validation was not held out. These weights are fitted on every image in the dataset, so the figures below measure how well the model reproduces what it was shown. They are not an estimate of performance on new photographs. The held-out numbers are in the training log.
| Metric | Value |
|---|---|
| mAP@50 | 0.992 |
| mAP@50-95 | 0.815 |
| Precision | 0.975 |
| Recall | 0.962 |
| Train images | 13 |
| Val images | 13 |
| Image size | 1280 |
| Epochs | 400 |
Held-out evaluation
The shipped weights above are fitted on all 13 image(s). To measure generalisation, an identically configured run held out whole locations (L2, L3, L4, L5) and never saw them:
| Metric | Held out |
|---|---|
| mAP@50 | 0.649 |
| mAP@50-95 | 0.270 |
| Precision | 0.765 |
| Recall | 0.571 |
| Train / val images | 7 / 6 |
These are the numbers to judge the model by. Inspected by eye at
conf=0.25, it finds the real posters on unseen lampposts but also fires on a
passer-by's dark coat and on bright sky-and-building patches, which is what a
precision of 0.77 looks like in practice.
Validation held out whole locations (L1, L2, L3, L4, L5, L6, L7, L8), not random images: several frames in the dataset show the same lamppost from a few paces apart, and splitting per-image would score memorisation.
Usage
from ultralytics import YOLO
from huggingface_hub import hf_hub_download
weights = hf_hub_download("danielrosehill/jerusalem-poster-detector", "best.pt")
model = YOLO(weights)
for r in model.predict("street_photo.jpg", imgsz=1280, conf=0.25):
for box in r.boxes:
print(model.names[int(box.cls)], box.xyxy[0].tolist(), float(box.conf))
Predict at the image size it was trained on. Instances are small โ some occupy under 0.1% of the frame โ so running at the 640 default will miss them.
Limitations
Trained on 13 photographs from one photographer's walk down one
street on one afternoon, so it has seen a narrow slice of lighting, weather and
background. At that size the hyperparameters matter more than usual: the first
run of this model, at Ultralytics' default lr0=0.01 with an unfrozen backbone
and a batch larger than the training set, collapsed into predicting the whole
frame as poster at confidence 1.0 while its training loss fell smoothly. The
shipped configuration is lr0=0.001, freeze=10,
batch=4. Posters appear intact,
over-sprayed, torn and sun-bleached; other street material it has never seen โ
memorial notices, election flyers, other stickers โ is exactly what it is most
likely to fire on falsely. Verify before trusting counts.
Reproduce with scripts/train_detector.py in
https://github.com/danielrosehill/Jerusalem-Graffiti.
- Downloads last month
- -