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:
1from inference.food_classifier import FoodClassifier
2
3model_dir = "model_saved/finetuning/facebook-dinov3-vitl16-pretrain-lvd1689m/epochs_8"
4classifier = FoodClassifier(model_dir)
5
6prediction = classifier.predict("path/to/food_image.jpg")
7print(prediction)
Manual loading:
1import json
2import torch
3from transformers import AutoImageProcessor, AutoModel
4from finetuning.train_classifier import BackboneImageClassifier
5
6model_dir = "model_saved/finetuning/facebook-dinov3-vitl16-pretrain-lvd1689m/epochs_8"
7
8with open(f"{model_dir}/classifier_config.json", "r", encoding="utf-8") as f:
9 classifier_config = json.load(f)
10
11id2label = {
12 int(label_id): label
13 for label_id, label in classifier_config["id2label"].items()
14}
15label2id = {
16 label: int(label_id)
17 for label, label_id in classifier_config["label2id"].items()
18}
19
20backbone = AutoModel.from_pretrained(f"{model_dir}/backbone")
21model = BackboneImageClassifier(
22 backbone=backbone,
23 num_labels=int(classifier_config["num_labels"]),
24 id2label=id2label,
25 label2id=label2id,
26)
27
28classifier_state = torch.load(f"{model_dir}/classifier.pt", map_location="cpu")
29model.classifier.load_state_dict(classifier_state)
30model.eval()
31
32processor = 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