DINOv3-food

DINOv3-food is a food image recognition model fine-tuned from facebook/dinov3-vitl16-pretrain-lvd1689m on TSOTSA-Img, a merged food image dataset built from AFD, FruitVeg-81, Food-101, and UECFood256.

The model predicts 389 food categories and uses a DINOv3 ViT-L/16 backbone with a lightweight linear classification head.

Dataset

TSOTSA-Img is the merged dataset used for food recognition in this work. It is split into training and test subsets:

  • Training split: used to fine-tune the model.
  • Test split: used for final evaluation.

The merged dataset combines food images and labels from:

  • AFD
  • FruitVeg-81
  • Food-101
  • UECFood256

Training

The selected checkpoint was fine-tuned for 8 epochs.

Setting Value
Base model facebook/dinov3-vitl16-pretrain-lvd1689m
Backbone DINOv3 ViT-L/16
Number of labels 389
Epochs 8
Batch size 16
Learning rate 2e-5
Weight decay 0.01
Warmup ratio 0.05
Validation selection best validation behavior, with emphasis on validation loss

Validation metrics for the selected run:

Metric Value
Validation loss 0.1100
Accuracy 0.9731
Macro-F1 0.9727
Top-5 accuracy 0.9968

Evaluation

Final evaluation was performed on the individual source datasets and on the merged TSOTSA-Img test split.

Dataset Accuracy
FruitVeg-81 0.9976
AFD 0.9997
Food-101 0.9551
UECFood256 0.8215
TSOTSA-Img test 0.9062

For the TSOTSA-Img test split:

Metric Value
Accuracy 0.9062
Macro-F1 0.9072

Model format

This repository stores a custom backbone-plus-classifier model:

  • backbone/: DINOv3 backbone saved with transformers.
  • classifier.pt: linear classification head.
  • classifier_config.json: label mappings and classifier metadata.
  • preprocessor_config.json: image preprocessing configuration.

Because this model uses a custom wrapper around the DINOv3 backbone, loading it with AutoModelForImageClassification.from_pretrained(...) is not sufficient. Use the project loader or reconstruct the wrapper before inference.

Usage

Example with the project inference class:

from inference.food_classifier import FoodClassifier

model_dir = "model_saved/finetuning/facebook-dinov3-vitl16-pretrain-lvd1689m/epochs_8"
classifier = FoodClassifier(model_dir)

prediction = classifier.predict("path/to/food_image.jpg")
print(prediction)

Manual loading:

import json
import torch
from transformers import AutoImageProcessor, AutoModel
from finetuning.train_classifier import BackboneImageClassifier

model_dir = "model_saved/finetuning/facebook-dinov3-vitl16-pretrain-lvd1689m/epochs_8"

with open(f"{model_dir}/classifier_config.json", "r", encoding="utf-8") as f:
    classifier_config = json.load(f)

id2label = {
    int(label_id): label
    for label_id, label in classifier_config["id2label"].items()
}
label2id = {
    label: int(label_id)
    for label, label_id in classifier_config["label2id"].items()
}

backbone = AutoModel.from_pretrained(f"{model_dir}/backbone")
model = BackboneImageClassifier(
    backbone=backbone,
    num_labels=int(classifier_config["num_labels"]),
    id2label=id2label,
    label2id=label2id,
)

classifier_state = torch.load(f"{model_dir}/classifier.pt", map_location="cpu")
model.classifier.load_state_dict(classifier_state)
model.eval()

processor = AutoImageProcessor.from_pretrained(model_dir)

Intended use

This model is intended for food image recognition over the TSOTSA-Img label space. It can be used for research experiments, dataset benchmarking, and food recognition pipelines where the target labels overlap with the 389 supported categories.

Limitations

  • The model is restricted to the 389 labels in classifier_config.json.
  • Performance may degrade on food categories outside the TSOTSA-Img label space.
  • Predictions may be sensitive to ambiguous images, mixed dishes, heavy occlusion, or visually similar food categories.
  • The model card reports accuracy on the available benchmark splits and should not be interpreted as performance on all possible food domains.

Citation

Downloads last month

-

Downloads are not tracked for this model. How to track
Safetensors
Model size
0.3B params
Tensor type
F32
ยท
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for anonymous-eval/food-recognition