ONNX Model Zoo

Jordo23/vehicle-classifier

By Jordo23 · ↓ 0 · ♥ 2 · Updated 2025-12-14

What's in this repo

This page lists the files in Jordo23/vehicle-classifier, including vehicle_classifier.onnx.

  • 1 ONNX models (.onnx files)
  • 5 files, including 1 .md, 1 .csv, 1 .onnx, 1 .pth
  • Last updated 2025-12-14

ONNX files

File Size Download
vehicle_classifier.onnx — Download

How to use

These ONNX files can be loaded with ONNX Runtime. To inspect a model graph, upload the file to the Netron viewer. Download links point to the original files on Hugging Face.

README

Vehicle Classifier - Dude, What's My Car?

A fine-tuned EfficientNet-B4 model for identifying vehicle make, model, and year from photographs. Part of the "Dude, What's My Car?" vehicle identification system.

Model Description

This model classifies vehicles into 8,949 unique classes covering make, model, and year combinations. It was trained on the VMMRdb (Vehicle Make and Model Recognition) dataset.

Architecture

  • Base Model: EfficientNet-B4 (via timm)
  • Input Size: 380 x 380 pixels
  • Output: 8,949 classes (format: Make Model Year)
  • Parameters: ~19M

Performance

  • Top-1 Accuracy: ~50%
  • Top-5 Accuracy: ~75-80%

Note: Vehicle classification is challenging due to subtle differences between model years and trim levels. Top-5 accuracy is more meaningful for practical applications.

Intended Use

  • Vehicle identification from photographs
  • Automotive inventory management
  • Insurance claim processing
  • Law enforcement investigations
  • Parking and traffic systems

Files

File Format Size Description
vehicle_classifier.pth PyTorch 130MB Full checkpoint with weights + class mapping
vehicle_classifier.onnx ONNX ~1MB Optimized for fast inference
class_mapping.csv CSV 346KB Class ID to Make/Model/Year mapping

Quick Start

PyTorch

import torch
import timm
from PIL import Image
from torchvision import transforms

# Load model
checkpoint = torch.load("vehicle_classifier.pth", map_location="cpu")
model = timm.create_model("efficientnet_b4", pretrained=False, num_classes=8949)
model.load_state_dict(checkpoint["model_state"])
model.eval()

# Preprocessing
transform = transforms.Compose([
    transforms.Resize((380, 380)),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])

# Predict
image = Image.open("car.jpg").convert("RGB")
input_tensor = transform(image).unsqueeze(0)

with torch.no_grad():
    logits = model(input_tensor)
    probs = torch.softmax(logits, dim=1)
    top5_probs, top5_indices = torch.topk(probs, 5)

# Decode predictions
class_mapping = checkpoint["class_mapping"]  # {id: "Make Model Year"}
for prob, idx in zip(top5_probs[0], top5_indices[0]):
    print(f"{class_mapping[idx.item()]}: {prob.item()*100:.1f}%")

ONNX Runtime

import onnxruntime as ort
import numpy as np
from PIL import Image

# Load model
session = ort.InferenceSession("vehicle_classifier.onnx")

# Preprocess (same as PyTorch)
image = Image.open("car.jpg").convert("RGB").resize((380, 380))
img_array = np.array(image).astype(np.float32) / 255.0
img_array = (img_array - [0.485, 0.456, 0.406]) / [0.229, 0.224, 0.225]
img_array = img_array.transpose(2, 0, 1)[np.newaxis, ...]

# Predict
outputs = session.run(None, {"input": img_array.astype(np.float32)})
logits = outputs[0]

# Get top predictions
probs = np.exp(logits) / np.sum(np.exp(logits), axis=1, keepdims=True)
top5_indices = np.argsort(probs[0])[-5:][::-1]

With Hugging Face Hub

from huggingface_hub import hf_hub_download

# Download model
model_path = hf_hub_download(repo_id="Jordo23/vehicle-classifier", filename="vehicle_classifier.pth")
onnx_path = hf_hub_download(repo_id="Jordo23/vehicle-classifier", filename="vehicle_classifier.onnx")

Training Details

  • Dataset: VMMRdb (Vehicle Make and Model Recognition Database)
  • Training Images: ~280,000
  • Classes: 8,949 (Make + Model + Year combinations)
  • Epochs: Fine-tuned from ImageNet pretrained weights
  • Optimizer: AdamW
  • Loss: Cross-Entropy

Limitations

  • Best performance on clear, well-lit photographs
  • May struggle with:
    • Heavily occluded vehicles
    • Unusual angles (top-down, extreme close-ups)
    • Very old/rare vehicles not in training data
    • Heavily modified or custom vehicles
  • Color detection is handled separately (not part of this model)

Citation

If you use this model, please cite:

@misc{vehicle-classifier-2024,
  author = {Jordo23},
  title = {Vehicle Classifier - Dude, What's My Car?},
  year = {2024},
  publisher = {Hugging Face},
  url = {https://huggingface.co/Jordo23/vehicle-classifier}
}

License

MIT License - Free for personal and commercial use.

Contact

For issues or questions, please open an issue on the model repository.


Part of the "Dude, What's My Car?" vehicle identification system 🚗

Model info

timm onnx image-classification vehicle-identification pytorch efficientnet computer-vision en dataset:custom license:mit region:us
↓ 0 ♥ 2

Created: 2025-12-14

Updated: 2025-12-14

View on Hugging Face

Files (5)

.gitattributes
README.md
class_mapping.csv
vehicle_classifier.onnx ONNX
vehicle_classifier.pth

Related models