TGDA: fine-grained image recognition from scratch with teacher-guided data augmentation
These are the checkpoints behind Fine-Grained Image Recognition from Scratch with Teacher-Guided Data Augmentation (arXiv:2507.12157). Students trained from scratch learn from a fine-grained teacher (a ResNet-101 trained with counterfactual attention learning, CAL), which also guides data-aware augmentation of the student's inputs. Code: arkel23/TGDA.
249 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 |
Serials |
What |
Files |
sota_448 |
301-304 |
Main state-of-the-art table: ResNet-18/34/50/101 students, TGDA with TrivialAugment, label smoothing and stochastic depth |
12 |
lrnet_128 |
201-204 |
Main LRNet table: low-resolution students at 128 px from a 448 px teacher |
24 |
vitfs_448 |
100, 101 |
Efficient ViTs and the ViTFS variants, teacher and student at 448 px |
54 |
vitfs_224_t448 |
102 |
Teacher at 448 px, student at 224 px |
15 |
vitfs_224 |
103 |
Teacher and student at 224 px |
9 |
vitfs_128 |
109 |
ViTFS tiny/micro/nano students at 128 px from a 448 px teacher |
8 |
vit_ce_448 |
107 |
The serial-101 models trained with cross-entropy only (no teacher) |
35 |
vitfs_transfer |
104-106 |
A TGDA-trained student transferred to two new datasets with cross-entropy |
8 |
ablations_128 |
212, 214, 221-223, 241-248, 251, 261-263, 271-278, 281 |
Ablations: TGDA without extra regularization, one- vs two-stage training, augmentation type, teacher type, transfer |
73 |
scratch_vs_pt_448 |
320, 321, 331 |
200 epochs from scratch with cross-entropy or KD, and ImageNet-pretrained with KD |
9 |
sweeps_128 |
0, 1 |
KD weight and temperature sweeps on CUB |
2 |
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('sota_448/cub_resnet18_resnet101_cal_tgda_301')
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)),
])
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())
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.
sota_448
| Model |
aircraft |
cars |
cub |
resnet101 <- resnet101 |
94.81 |
95.19 |
89.25 |
resnet18 <- resnet101 |
93.73 |
94.86 |
87.49 |
resnet34 <- resnet101 |
94.24 |
95.04 |
88.40 |
resnet50 <- resnet101 |
94.78 |
95.16 |
88.95 |
lrnet_128
| Model |
aircraft |
cars |
cub |
lrnet14 <- resnet101 |
89.02 |
92.74 |
80.48 |
lrnet18 <- resnet101 |
90.67 |
93.21 |
82.48 |
lrnet26 <- resnet101 |
91.30 |
93.57 |
82.65 |
lrnet50 <- resnet101 |
91.81 |
93.74 |
84.12 |
resnet101 <- resnet101 |
88.57 |
92.19 |
81.48 |
resnet18 <- resnet101 |
86.95 |
91.18 |
77.68 |
resnet34 <- resnet101 |
85.45 |
91.03 |
78.81 |
resnet50 <- resnet101 |
90.19 |
92.96 |
82.74 |
vitfs_448
| Model |
aircraft |
cars |
cub |
efficientvit_m2 <- resnet101 |
92.50 |
94.11 |
85.42 |
efficientvit_m3 <- resnet101 |
92.80 |
94.50 |
85.48 |
lcnet_035 <- resnet101 |
91.42 |
91.12 |
78.43 |
levit_128s <- resnet101 |
88.66 |
91.98 |
81.24 |
mobilevit_s <- resnet101 |
92.68 |
93.79 |
83.48 |
mobilevitv2_100 <- resnet101 |
94.36 |
94.57 |
87.59 |
mobilevitv2_125 <- resnet101 |
93.64 |
94.63 |
87.35 |
nest_tiny <- resnet101 |
89.89 |
93.25 |
85.48 |
pvt_v2_b0 <- resnet101 |
91.84 |
93.79 |
86.93 |
pvt_v2_b1 <- resnet101 |
92.53 |
94.29 |
86.85 |
swin_tiny_patch4_window7_224 <- resnet101 |
89.62 |
93.35 |
82.40 |
tiny_vit_5m_224 <- resnet101 |
93.37 |
94.43 |
88.45 |
vit_t16 <- resnet101 |
61.00 |
|
58.70 |
vitfs_tiny_patch16_clc_gap_reg4_dinov2_bn <- resnet101 |
90.58 |
94.01 |
85.47 |
vitfs_tiny_patch16_gap_224 <- resnet101 |
85.30 |
|
82.72 |
vitfs_tiny_patch16_gap_reg4_dinov2_bn_init <- resnet101 |
92.20 |
94.48 |
86.26 |
vitfs_tiny_patch16_gap_reg4_dinov2_init <- resnet101 |
89.32 |
93.07 |
83.72 |
vitfs_tiny_patch16_kvm_gap_reg4_dinov2_bn <- resnet101 |
|
94.25 |
83.91 |
vitfs_224_t448
| Model |
aircraft |
cars |
cub |
vit_t16 <- resnet101 |
55.06 |
51.29 |
49.48 |
vitfs_micro_patch16_gap_reg4_dinov2_bn <- resnet101 |
88.81 |
92.41 |
78.25 |
vitfs_nano_patch16_gap_reg4_dinov2_bn <- resnet101 |
85.06 |
90.44 |
70.88 |
vitfs_tiny_patch16_gap_reg4_dinov2_bn_init <- resnet101 |
90.49 |
93.91 |
81.20 |
vitfs_tiny_patch16_gap_reg4_dinov2_init <- resnet101 |
86.35 |
92.71 |
77.94 |
vitfs_224
| Model |
aircraft |
cars |
cub |
vitfs_tiny_patch16_gap_224 <- resnet101 |
52.63 |
86.16 |
75.61 |
vitfs_tiny_patch16_gap_reg4_dinov2_bn_init <- resnet101 |
60.13 |
92.64 |
79.89 |
vitfs_tiny_patch16_gap_reg4_dinov2_init <- resnet101 |
47.76 |
86.57 |
76.46 |
vitfs_128
| Model |
aircraft |
cars |
cub |
vitfs_micro_patch16_gap_reg4_dinov2_bn <- resnet101 |
79.21 |
88.45 |
66.40 |
vitfs_nano_patch16_gap_reg4_dinov2_bn <- resnet101 |
77.47 |
83.97 |
61.32 |
vitfs_tiny_patch16_gap_reg4_dinov2_bn_init <- resnet101 |
81.10 |
90.24 |
|
vit_ce_448
| Model |
aircraft |
cars |
cub |
efficientvit_m2 |
87.49 |
83.75 |
73.25 |
efficientvit_m3 |
87.46 |
80.19 |
72.82 |
levit_128s |
82.27 |
87.07 |
69.59 |
mobilevit_s |
88.36 |
91.20 |
72.01 |
mobilevitv2_100 |
89.11 |
90.57 |
78.60 |
mobilevitv2_125 |
87.85 |
90.34 |
81.50 |
nest_tiny |
82.99 |
81.23 |
71.13 |
pvt_v2_b0 |
86.41 |
89.76 |
75.09 |
pvt_v2_b1 |
85.63 |
|
|
swin_tiny_patch4_window7_224 |
|
63.26 |
|
vit_t16 |
45.60 |
26.38 |
30.81 |
vitfs_tiny_patch16_gap_224 |
|
|
0.78 |
vitfs_tiny_patch16_gap_reg4_dinov2_bn_init |
|
88.41 |
69.92 |
vitfs_tiny_patch16_gap_reg4_dinov2_init |
76.84 |
81.35 |
60.30 |
vitfs_transfer
| Model |
aircraft |
cars |
cub |
vit_t16 |
50.23 |
39.12 |
|
vitfs_tiny_patch16_gap_reg4_dinov2_bn_init |
87.19 |
90.70 |
82.52 |
ablations_128
| Model |
aircraft |
cars |
cub |
lrnet14 |
86.05 |
89.34 |
65.10 |
lrnet14 <- resnet101 |
85.30 |
93.06 |
81.79 |
resnet101d <- resnet101 |
88.18 |
92.54 |
|
resnet18 |
73.72 |
82.13 |
56.54 |
resnet18 <- resnet101 |
82.03 |
88.22 |
75.34 |
resnet34d <- resnet101 |
87.46 |
91.64 |
78.65 |
scratch_vs_pt_448
| Model |
aircraft |
cars |
cub |
resnet101 |
83.08 |
84.36 |
66.41 |
resnet101 <- resnet101 |
93.91 |
94.60 |
87.63 |
sweeps_128
| Model |
cub |
resnet18 <- resnet101 |
80.34 |
Requirements
fgir-zoo (pip install git+https://github.com/arkel23/fgir-zoo.git), which pins
timm==0.9.12
torch (checked with 2.5.1)
Citation
@misc{rios_tgda_2025,
title = {Fine-Grained Image Recognition from Scratch with Teacher-Guided Data Augmentation},
author = {Rios, Edwin Arkel and Mikael, Fernando and Gosal, Oswin and Oyerinde, Femiloye and
Liang, Hao-Chun and Lai, Bo-Cheng and Hu, Min-Chun},
year = {2025},
eprint = {2507.12157},
archivePrefix = {arXiv},
primaryClass = {cs.CV},
doi = {10.48550/arXiv.2507.12157},
url = {https://arxiv.org/abs/2507.12157}
}