Car-part segmentation models trained on VehicleSeg10K

Three models fine-tuned to segment 13 car parts on the VehicleSeg10K dataset, all scored with the same evaluation code. The code to train, predict and evaluate is on GitHub: https://github.com/AlbertRG99/VehiclePartsSegmentatorFTModels.

Folder Model Type Licence of the weights
yolo26x-seg/ YOLO26x-seg (Ultralytics) Instance segmentation AGPL-3.0 (inherited from Ultralytics)
rfdetr-seg-2xl/ RF-DETR Seg 2XL (Roboflow) Instance segmentation Apache-2.0 (inherited from RF-DETR)
dinov3-vitl16-decoder/ Frozen DINOv3 ViT-L/16 + trained FPN decoder Semantic segmentation DINOv3 License (decoder only; backbone not included)

Classes

All three models share the same 13 classes and the same ids (1–13; 0 is background in the DINOv3 model):

id class id class
1 Foreground (car body) 8 Left back window
2 Plate 9 Left back door
3 Wheel 10 Right front window
4 Front window (windscreen) 11 Right front door
5 Back window (rear window) 12 Right back window
6 Left front window 13 Right back door
7 Left front door

"Left" means the car's left (driver's point of view), not the left of the image. None of the models was trained with horizontal flips.

Results

These are on the official valid split of VehicleSeg10K (3,069 images), used as the test set. It was never used to pick a checkpoint: the last epoch is evaluated.

Model mIoU mAcc mDice mAP50 mAP50-95 Part F1 ms/frame GPU Params Peak VRAM
DINOv3 ViT-L + decoder 91.50 95.25 95.53 92.72 79.80 93.22 1228 ¹ GTX 1080 Ti 0.3 B frozen + 5.4 M –
RF-DETR Seg 2XL 90.57 94.43 95.03 88.50 73.89 91.24 77 RTX 2080 Ti 38.4 M 7.4 GB
YOLO26x-seg 87.91 95.51 93.53 88.03 76.19 92.04 38 RTX 2080 Ti 70.5 M 2.6 GB

For reference, SAM 3 zero-shot (one text prompt per part, no training) reaches 34.55 mIoU on the same test.

¹ Measured in float16 on a GTX 1080 Ti, which has no tensor cores; that time is not representative of a modern GPU. The included dinov3_parts.py uses float32 on such GPUs.

  • How the metrics are computed:
    • Pixel metrics use a per-image label map compared with the official PNG masks, over 13 classes without background, accumulated over the whole test set.
    • Part F1 counts a part as found if IoU ≥ 0.5, with a confidence threshold of 0.25.
    • mAP is COCO-style with one mask per class and image.
  • How the timing is measured: one GPU, batch size 1, from the decoded image to full-resolution masks.

Overall metrics

Accuracy vs. inference time

Examples on test images: input, ground truth and each model

IoU per part

Left/right and front/back confusion

Confusion matrix of the best model

The full report, with per-part IoU, left/right confusion and examples, is in report/car_part_segmentation_report.pdf.

Usage

YOLO26x-seg

# pip install "ultralytics>=8.4" huggingface_hub
from huggingface_hub import hf_hub_download
from ultralytics import YOLO

path = hf_hub_download("MrBr1ghts1d3/VehiclePartsSegmentatorFTModels", "yolo26x-seg/yolo26x_seg_vehicleseg10k.pt")
model = YOLO(path)
result = model.predict("car.jpg", imgsz=768, conf=0.25, retina_masks=True)[0]
for cls, score in zip(result.boxes.cls.tolist(), result.boxes.conf.tolist()):
    print(model.names[int(cls)], round(score, 3))
masks = result.masks.data  # N x H x W
  • Training: fine-tuned from yolo26x-seg.pt (COCO), 100 epochs, 768 px, batch 12 on 4× RTX 2080 Ti, fliplr=0. The weights are from the last epoch.

RF-DETR Seg 2XL

# pip install "rfdetr==1.12.0" huggingface_hub
from huggingface_hub import hf_hub_download
from PIL import Image
from rfdetr import RFDETR

path = hf_hub_download("MrBr1ghts1d3/VehiclePartsSegmentatorFTModels", "rfdetr-seg-2xl/rfdetr_seg_2xl_vehicleseg10k.pth")
model = RFDETR.from_checkpoint(path, trust_checkpoint=True)
det = model.predict(Image.open("car.jpg").convert("RGB"), threshold=0.25)
print(list(zip(det.data["class_name"], det.confidence)))
masks = det.mask  # N x H x W boolean
  • Training: fine-tuned from the COCO RF-DETR Seg 2XL weights with rfdetr 1.12.0, 50 epochs at 768 px, lr 1e-4 (encoder 1.5e-4), effective batch 16 (1 image × 4 GPUs × 4 accumulation steps) on 4× RTX 2080 Ti, no horizontal flip. The weights are the EMA weights of the last epoch.

DINOv3 ViT-L/16 + decoder

The DINOv3 backbone is gated: request access at https://huggingface.co/facebook/dinov3-vitl16-pretrain-lvd1689m and log in with huggingface-cli login. This repo only holds the decoder (21 MB).

# pip install torch "transformers==5.22.2" opencv-python huggingface_hub   (version used here)
import os, sys
import cv2
from huggingface_hub import hf_hub_download

repo = "MrBr1ghts1d3/VehiclePartsSegmentatorFTModels"
ckpt = hf_hub_download(repo, "dinov3-vitl16-decoder/dinov3_vitl16_decoder_vehicleseg10k.pt")
code = hf_hub_download(repo, "dinov3-vitl16-decoder/dinov3_parts.py")
sys.path.insert(0, os.path.dirname(code))
from dinov3_parts import load, predict, CLASSES

model = load(ckpt)                        # also downloads the frozen backbone from facebook/
rgb = cv2.cvtColor(cv2.imread("car.jpg"), cv2.COLOR_BGR2RGB)
labels, confidence = predict(model, rgb)  # H x W, 0 = background, 1..13 = parts
  • Training:
    • Model: the DINOv3 ViT-L/16 (LVD-1689M) backbone is frozen. On top of it is a 4-level FPN-style decoder with GroupNorm, over layers 6, 12, 18 and 24.
    • Loss: cross-entropy + Dice.
    • Settings: 40 epochs, 768 px (long side), batch 32 on 4× GTX 1080 Ti, lr 5e-4, mixed precision.
    • The weights are from the last epoch.
  • Output: a per-pixel map, not instances, so two wheels come out as one "Wheel" region.

Dataset and limitations

  • Dataset: VehicleSeg10K (Wang et al., 2025), with 8,596 training and 3,069 validation images. The dataset is not redistributed here.
  • Domain: mostly whole passenger cars photographed from outside. Results on trucks, motorcycles, heavy occlusion or interior views are unknown.
  • Left/right: confusion between the two sides is the main remaining error. The report gives the left/right confusion rates per model.

Licence

This repository mixes weights with different upstream licences; see LICENSE.md. In short:

  • YOLO26x-seg: AGPL-3.0.
  • RF-DETR: Apache-2.0.
  • DINOv3 decoder: distributed under the DINOv3 License. You must accept that licence to download the backbone it needs.

Citation

Dataset:

@misc{wang2025SAV,
  title         = {Segment Any Vehicle: Semantic and Visual Context Driven SAM and A Benchmark},
  author        = {Xiao Wang and Ziwen Wang and Wentao Wu and Anjie Wang and Jiashu Wu and Yantao Pan and Chenglong Li},
  year          = {2025},
  eprint        = {2508.04260},
  archivePrefix = {arXiv},
  primaryClass  = {cs.CV},
  url           = {https://arxiv.org/abs/2508.04260}
}
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Paper for MrBr1ghts1d3/VehiclePartsSegmentatorFTModels