Downloads · 30 days
100
28% of all-time downloads
Luigi/edge-fall-vlm-2.2b
edge-fall-vlm-2.2b is a image-text-to-text model from Luigi. Use it for the image-text-to-text task on the model card, and read the license before you ship it in a product. It is set up for transformers. The card lists the license as apache-2.0.
A fine-tune of SmolVLM2-2.2B-Instruct that detects human falls, being down, and distress from a short strip of consecutive video frames, designed to run on a Raspberry Pi 5 (4 GB) at Q6K GGUF. Trained almost entirely…
Downloads · 30 days
100
28% of all-time downloads
All-time downloads
363
Public
Parameters
2.2B
8.8 GB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors4.5 GB · 51%
From the Hugging Face model README
A fine-tune of SmolVLM2-2.2B-Instruct that detects human falls, being down, and distress from a short strip of consecutive video frames, designed to run on a Raspberry Pi 5 (4 GB) at Q6_K GGUF. Trained almost entirely on synthetic 3D renders plus a small real-negative set.
Code & full write-up: https://github.com/vieenrose/edge-fall-vlm
Input: a few consecutive frames (oldest→newest). Output: JSON, e.g.
{"posture":"horizontal-on-floor","status":"down","confidence":0.9,"person_down":true,"n_people":1}
where status ∈ {down, distress, normal} (3-class down3 scheme).
| Test | Metric |
|---|---|
| In-the-wild falls (OOPS) | 0.83 recall — vs VideoMAE 0.21, frozen-I3D 0.68 baselines |
| Real overhead falls (URFD held-out) | 0.90 recall / 1.0 specificity |
| Synthetic-only → real transfer | 0.95 recall before any real data |
| On-device | Q6_K GGUF ≈ 2.2 GB, ~1.8 GB RAM, ~4–6 s/inference projected on RPi5 |
model.safetensors + config/processor — transformers (bf16).model-Q6_K.gguf (recommended, fits RPi5 4 GB) and
model-Q8_0.gguf, plus mmproj-f16.gguf (vision projector). Note: Q4 breaks this
fine-tune — use Q6_K or higher.from transformers import AutoModelForImageTextToText, AutoProcessor
import torch
proc = AutoProcessor.from_pretrained("Luigi/edge-fall-vlm-2.2b", do_image_splitting=False,
size={"longest_edge": 384})
model = AutoModelForImageTextToText.from_pretrained("Luigi/edge-fall-vlm-2.2b",
dtype=torch.bfloat16).to("cuda").eval()
prompt = ("You are a safety monitor. These are consecutive video frames (oldest first), "
"possibly with more than one person. Report whether ANYONE has fallen, fainted, "
"is lying immobile, or is in distress; else normal. Answer with JSON only.")
frames = [...] # list of PIL images, ~6 frames spanning ~3.5s
msgs = [{"role":"user","content":[{"type":"image"} for _ in frames]+[{"type":"text","text":prompt}]}]
text = proc.apply_chat_template(msgs, tokenize=False, add_generation_prompt=True)
batch = proc(text=[text], images=[frames], return_tensors="pt").to("cuda")
print(proc.batch_decode(model.generate(**batch, max_new_tokens=64, do_sample=False)[:, batch["input_ids"].shape[1]:], skip_special_tokens=True)[0])
llama-mtmd-cli -m model-Q6_K.gguf --mmproj mmproj-f16.gguf \
--image f0.png --image f1.png ... -t 4 -n 64 --temp 0 -p "<prompt above>"
Apache-2.0 (inherits SmolVLM2). Evaluation datasets (URFD, OmniFall/OOPS) are not redistributed; see their sources for terms.