Instructions to use RISEF/yolov11s-seatbelt with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- ultralytics
How to use RISEF/yolov11s-seatbelt with ultralytics:
from ultralytics import YOLOvv11 model = YOLOvv11.from_pretrained("RISEF/yolov11s-seatbelt") source = 'http://images.cocodataset.org/val2017/000000039769.jpg' model.predict(source=source, save=True) - Notebooks
- Google Colab
- Kaggle
| license: agpl-3.0 | |
| tags: | |
| - image-classification | |
| - driver-monitoring | |
| - traffic-safety | |
| - seatbelt | |
| - yolov11 | |
| - ultralytics | |
| - onnx | |
| pipeline_tag: image-classification | |
| library_name: ultralytics | |
| # YOLOv11s-cls · seatbelt binary classifier | |
| Binary classifier that predicts whether a **driver is wearing a seatbelt** | |
| from a cropped driver / windshield-view RGB image. | |
| Part of the **ktk-studio** traffic-violation analytics stack (DeepStream 9.0 + | |
| Triton + B200). | |
| ## Summary | |
| | | | | |
| |---|---| | |
| | Architecture | YOLOv11s-cls (Ultralytics) | | |
| | Input | 224×224 RGB | | |
| | Output | logits over 2 classes: `no_seatbelt`, `seat_belt` | | |
| | Parameters | 5.4 M | | |
| | GFLOPs | 12.0 | | |
| | Weights | `best.pt` (PyTorch, 11 MB) / `best.onnx` (21 MB, opset 19) | | |
| | Val top1 | **100.0 %** at epoch 8 (early-stop after 18) | | |
| | Train epochs | 18 (early-stopped out of 40) | | |
| ## Training data | |
| Source: [lavdeep1234/driver-seat-belt-dectection](https://www.kaggle.com/datasets/lavdeep1234/driver-seat-belt-dectection) (Kaggle). | |
| Windshield-view still frames; labels collapsed to binary (`no seatbelt` / `seat_belt`). | |
| | Split | `no_seatbelt` | `seat_belt` | Total | | |
| |---|---|---|---| | |
| | train | 46 | 690 | 736 | | |
| | val (15 % holdout) | 8 | 121 | 129 | | |
| | test | 33 | 366 | 399 | | |
| > The dataset is heavily imbalanced (seat-belt class ~15× more frequent). | |
| > 100 % val accuracy should be interpreted against the small negative class | |
| > size. On out-of-distribution traffic footage, expect lower accuracy; combine | |
| > with driver-ROI detection and a second-tier verifier. | |
| ## Usage | |
| ### Ultralytics | |
| ```python | |
| from ultralytics import YOLO | |
| model = YOLO("best.pt") | |
| r = model("driver_crop.jpg") | |
| print(r[0].probs.top1, r[0].names[r[0].probs.top1]) | |
| ``` | |
| ### ONNX Runtime | |
| ```python | |
| import cv2, numpy as np, onnxruntime as ort | |
| sess = ort.InferenceSession("best.onnx", providers=["CUDAExecutionProvider"]) | |
| img = cv2.cvtColor(cv2.imread("driver_crop.jpg"), cv2.COLOR_BGR2RGB) | |
| img = cv2.resize(img, (224, 224)).astype(np.float32) / 255.0 | |
| x = np.ascontiguousarray(img.transpose(2, 0, 1)[None]) | |
| logits = sess.run(None, {"images": x})[0][0] | |
| print(["no_seatbelt", "seat_belt"][int(logits.argmax())], float(logits.max())) | |
| ``` | |
| ## Intended use | |
| - Real-time seatbelt violation flagging on road-traffic video after car | |
| detection + tracking (e.g. via DeepStream TrafficCamNet + NvDCF tracker). | |
| - Run on the top ~50 % crop of a detected car bbox, where the windshield / | |
| driver sits. | |
| ## Out-of-scope / limitations | |
| - Nighttime / tinted-glass / heavy glare scenes under-represented in training. | |
| - Dataset is English/European angle; fine-tune on local data for RU / KZ plates. | |
| - Binary only — does not distinguish passenger vs driver belt. | |
| ## License | |
| AGPL-3.0 (inherits Ultralytics YOLOv11 weight license). | |