Views
No views yet
Pipeline code + example clips: cstokl3/bimanual_manip_data_processing — clone that repo and follow theaction_recognition/README.mdto run the full pipeline.
| Metric | Value |
|---|---|
| Val Verb top-1 | 41.4% |
| Val Verb MCA | 41.5% |
| Epoch | 5 |
| Training set | 16,852 clips (≤800/class) |
| Val set | 2,973 clips |
Training is ongoing — this checkpoint reflects the best result so far.
take, put, wash, open, close, turn-on, cut, turn-off, pour, mix,
move, remove, throw, dry, shake, scoop, adjust, squeeze, press,
flip, turn, check, scrub, pull, pat, lift, hold, drop,
transition, reach| Setting | Value |
|---|---|
| Base model | MCG-NJU/videomae-base-finetuned-ssv2 |
| Input | 16 × 224×224, ImageNet-normalised, (B, T, C, H, W) |
| Batch size | 8 |
| Base LR | 5e-5 (head) |
| LR schedule | 5-epoch linear warmup → cosine decay |
| Layer-wise LR decay | 0.75 per block (14 param groups) |
| Backbone blocks frozen | 0 (full fine-tune) |
| Dropout | 0.1 |
| Label smoothing | 0.1 |
| Weight decay | 0.05 |
| Optimiser | AdamW |
1# 1. Clone the pipeline repo
2git clone https://github.com/cstokl3/bimanual_manip_data_processing
3cd bimanual_manip_data_processing
4
5# 2. Download weights into action_recognition/
6wget https://huggingface.co/cstokl3/videomae-hdepic-verb-recognition/resolve/main/best.pt \
7 -O action_recognition/videomae_best.pt
8wget https://huggingface.co/cstokl3/videomae-hdepic-verb-recognition/resolve/main/yolo_epic_kitchens.pt \
9 -O action_recognition/yolo_epic_kitchens.pt
10
11# 3. Run on your clips
12python action_recognition/full_pipeline.py \
13 --backbone videomae \
14 --ckpt action_recognition/videomae_best.pt \
15 --clips_dir egocentric_clips \
16 --json results.json1import torch
2from transformers import VideoMAEForVideoClassification
3
4# Load checkpoint
5ckpt = torch.load("best.pt", map_location="cpu", weights_only=False)
6
7# Rebuild model (requires the VideoMAEMultiHead wrapper — see pipeline repo)
8from models.videomae_model import build_videomae
9
10model = build_videomae(
11 n_verb_classes=ckpt["n_action_classes"], # 30
12 n_noun_classes=ckpt["n_noun_classes"], # 50
13 pretrained="MCG-NJU/videomae-base-finetuned-ssv2",
14)
15model.load_state_dict(ckpt["model"])
16model.eval()
17
18verb_names = ckpt["verb_names"] # list of 30 strings
19noun_names = ckpt["noun_names"] # list of 50 strings
20
21# Inference — frames: (1, 16, 3, 224, 224) float32 ImageNet-normalised
22with torch.no_grad():
23 verb_logits, hand_logits, noun_logits = model(frames)
24
25verb = verb_names[verb_logits.argmax(1).item()]
26print("Predicted verb:", verb)1@inproceedings{tong2022videomae,
2 title={VideoMAE: Masked Autoencoders are Data-Efficient Learners for Self-Supervised Video Pre-Training},
3 author={Tong, Zhan and Song, Yibing and Wang, Jue and Wang, Limin},
4 booktitle={NeurIPS},
5 year={2022}
6}