Instructions to use ERISLab/FGIR-KD with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- timm
How to use ERISLab/FGIR-KD with timm:
import timm model = timm.create_model("hf_hub:ERISLab/FGIR-KD", pretrained=True) - Notebooks
- Google Colab
- Kaggle
FGIR-KD: how to choose your teacher for fine-grained image recognition
These are the checkpoints behind How to Choose Your Teacher for Fine Grained Image Recognition (arXiv:2605.15689), presented at the FGVC13 workshop at CVPR 2026. Small students (ResNet-18, LCNet, LeViT, ViT-T) are distilled from a range of fine-grained teachers to study which teacher helps most. teachers/ holds the teachers themselves; students/ the distilled students. The model code is shared with TGDA (arkel23/TGDA).
2083 checkpoints, one per configuration, each the last epoch of one training seed. Each file
is a torch.save dict with config (the full training configuration), model (the state dict),
accuracy and epoch, with no optimizer state. File names are the runs' experiment-log names,
ending in the serial. Load them with fgir-zoo. The
collection groups this repo with the paper.
Layout
| Folder | Models | Teachers | Datasets | Files | Mean accuracy |
|---|---|---|---|---|---|
teachers/serial_15 |
resnet101.a1_in1k, resnetv2_101.a1h_in1k, vgg19_bn |
- | 8 | 8 | 90.46 |
teachers/serial_16 |
convnext_base.fb_in22k, resnet101.a1_in1k, resnetv2_101.a1h_in1k, resnetv2_101x3_bit.goog_in21k, swin_base_patch4_window7_224.ms_in22k, van_b3, vgg19_bn, vit_b16 |
- | 6 | 48 | 82.21 |
teachers/serial_17 |
convnext_base.fb_in22k, resnet101.a1_in1k, resnetv2_101.a1h_in1k, resnetv2_101x3_bit.goog_in21k, swin_base_patch4_window7_224.ms_in22k, van_b3, vgg19_bn, vit_b16 |
- | 1 | 8 | 81.45 |
teachers/serial_18 |
convnext_base.fb_in22k, resnet101.a1_in1k, resnetv2_101.a1h_in1k, resnetv2_101x3_bit.goog_in21k, swin_base_patch4_window7_224.ms_in22k, vgg19_bn, vit_b16 |
- | 1 | 7 | 78.83 |
teachers/serial_400 |
convnext_base.fb_in22k, resnet101.a1_in1k, resnetv2_101.a1h_in1k, resnetv2_101x3_bit.goog_in21k, swin_base_patch4_window7_224.ms_in22k, van_b3, vgg19_bn, vit_b16 |
- | 1 | 9 | 71.90 |
teachers/serial_501 |
resnetv2_101x3_bit.goog_in21k |
- | 5 | 5 | 86.01 |
students/serial_1 |
resnet18 |
1 | 1 | 1 | 73.78 |
students/serial_2 |
lcnet_035 |
8 | 9 | 72 | 66.13 |
students/serial_3 |
lcnet_035 |
8 | 9 | 72 | 64.36 |
students/serial_4 |
lcnet_035 |
8 | 9 | 72 | 62.50 |
students/serial_7 |
levit_128s |
8 | 8 | 57 | 63.23 |
students/serial_102 |
resnet18 |
1 | 1 | 1 | 63.62 |
students/serial_104 |
vit_t16 |
1 | 1 | 1 | 14.38 |
students/serial_105 |
lcnet_035 |
1 | 2 | 2 | 33.97 |
students/serial_106 |
levit_128s |
1 | 2 | 2 | 39.34 |
students/serial_193 |
lcnet_035 |
1 | 1 | 1 | 76.86 |
students/serial_201 |
resnet18 |
8 | 10 | 72 | 74.73 |
students/serial_202 |
resnet18 |
8 | 9 | 65 | 71.92 |
students/serial_203 |
resnet18 |
8 | 13 | 104 | 72.22 |
students/serial_204 |
resnet18 |
8 | 13 | 104 | 66.47 |
students/serial_205 |
resnet18 |
8 | 13 | 104 | 70.14 |
students/serial_206 |
resnet18 |
8 | 13 | 104 | 64.09 |
students/serial_207 |
resnet18 |
8 | 13 | 104 | 68.60 |
students/serial_208 |
resnet18 |
8 | 13 | 104 | 63.21 |
students/serial_209 |
lcnet_035 |
8 | 13 | 104 | 55.43 |
students/serial_210 |
lcnet_035 |
8 | 13 | 104 | 54.11 |
students/serial_211 |
lcnet_035 |
8 | 13 | 104 | 53.87 |
students/serial_212 |
levit_128s |
8 | 13 | 104 | 59.39 |
students/serial_213 |
levit_128s |
8 | 13 | 103 | 57.04 |
students/serial_214 |
levit_128s |
8 | 13 | 103 | 57.31 |
students/serial_215 |
lcnet_035 |
8 | 13 | 104 | 58.93 |
students/serial_216 |
levit_128s |
8 | 13 | 101 | 60.95 |
students/serial_253 |
lcnet_035 |
1 | 1 | 1 | 77.43 |
students/serial_259 |
resnet18 |
1 | 1 | 1 | 85.47 |
students/serial_260 |
levit_128s |
1 | 1 | 1 | 82.02 |
students/serial_305 |
levit_128s |
8 | 1 | 8 | 63.62 |
students/serial_309 |
lcnet_035 |
7 | 1 | 7 | 61.52 |
students/serial_311 |
lcnet_035 |
1 | 1 | 1 | 0.52 |
students/serial_321 |
lcnet_035 |
8 | 1 | 8 | 60.81 |
students/serial_322 |
lcnet_035 |
8 | 1 | 8 | 54.30 |
students/serial_323 |
lcnet_035 |
8 | 1 | 8 | 0.64 |
students/serial_324 |
lcnet_035 |
8 | 1 | 8 | 51.13 |
students/serial_401 |
resnet18 |
8 | 1 | 8 | 70.81 |
students/serial_402 |
lcnet_035 |
8 | 1 | 8 | 61.19 |
students/serial_403 |
levit_128s |
3 | 1 | 3 | 72.06 |
students/serial_551 |
resnet18 |
4 | 2 | 4 | 77.20 |
students/serial_552 |
lcnet_035 |
1 | 1 | 1 | 57.28 |
students/serial_553 |
levit_128s |
8 | 5 | 40 | 75.94 |
students/serial_554 |
resnet18 |
1 | 1 | 1 | 54.37 |
students/serial_555 |
lcnet_035 |
2 | 2 | 2 | 66.50 |
students/serial_556 |
levit_128s |
8 | 3 | 10 | 92.36 |
students/serial_999 |
lcnet_035 |
1 | 1 | 1 | 7.04 |
manifest.csv lists every file with its dataset, student, teacher, serial, seed, image size,
class count, accuracy, SHA-256 and size.
Load a checkpoint and classify an image
import torch
from PIL import Image
from torchvision import transforms
from fgir_zoo import tgda
model = tgda.create_model('students/serial_203/cub_resnet18_vgg19_bn_cal_203')
cfg = model.config
tf = transforms.Compose([
transforms.Resize((cfg.test_resize_size, cfg.test_resize_size),
interpolation=transforms.InterpolationMode.BICUBIC),
transforms.CenterCrop(cfg.student_image_size or cfg.image_size),
transforms.ToTensor(),
transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)),
])
# a CUB-200-2011 test image, class index 50 (051.Horned_Grebe)
x = tf(Image.open('Horned_Grebe_0050_34561.jpg').convert('RGB')).unsqueeze(0)
with torch.no_grad():
logits = model(x)
print(logits.argmax(-1).item(), logits.softmax(-1).max().item()) # 50 0.9423
Accuracy of the released checkpoints
Top-1 accuracy (%) stored in each file, on the dataset's test split at the end of training.
Each value is one seed; the paper reports its own aggregates, so its tables can differ slightly. Per-file accuracy for the 2,000 students is in manifest.csv; the table below covers the teachers.
teachers/
| Model | aircraft | bach | bdctkidney | cars | cub | dogs | flowers | idriddr | idridme | imagenet1k | lublung | moe | nabirds | pets |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
convnext_base.fb_in22k |
92.50 | 99.96 | 62.14 | 82.52 | 77.94 | 96.71 | ||||||||
resnet101.a1_in1k |
77.50 | 99.96 | 91.94 | 96.41 | 54.37 | 77.67 | 83.91 | 94.08 | ||||||
resnetv2_101.a1h_in1k |
67.50 | 99.96 | 50.49 | 72.82 | 77.70 | 92.34 | 89.05 | |||||||
resnetv2_101x3_bit.goog_in21k |
87.50 | 99.90 | 57.14 | 89.29 | 47.81 | 96.23 | ||||||||
swin_base_patch4_window7_224.ms_in22k |
95.00 | 99.96 | 59.22 | 82.52 | 71.39 | 96.86 | ||||||||
van_b3 |
92.50 | 100.00 | 54.37 | 82.52 | 85.46 | 96.06 | ||||||||
vgg19_bn |
88.87 | 91.25 | 100.00 | 86.93 | 83.83 | 60.19 | 81.55 | 54.08 | 94.57 | 93.71 | 92.94 | |||
vit_b16 |
86.25 | 100.00 | 51.46 | 82.52 | 76.65 | 96.64 |
Requirements
fgir-zoo(pip install git+https://github.com/arkel23/fgir-zoo.git), which pinstimm==0.9.12torch(checked with 2.5.1)
Citation
@inproceedings{gosal_choose_teacher_2026,
title = {How to Choose Your Teacher for Fine Grained Image Recognition},
author = {Gosal, Oswin and Rios, Edwin Arkel and Surya, Augusto Christian and Mikael, Fernando and
Lai, Bo-Cheng and Hu, Min-Chun},
booktitle = {The 13th Workshop on Fine-Grained Visual Categorization (FGVC13) at CVPR 2026},
note = {Non-archival extended abstract},
year = {2026},
eprint = {2605.15689},
archivePrefix = {arXiv},
primaryClass = {cs.CV},
doi = {10.48550/arXiv.2605.15689},
url = {https://arxiv.org/abs/2605.15689}
}