Observed since 20 Oct, 18:32 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
ActionFormer: Localizing Moments of Actions with Transformers
Enhanced fork of ActionFormer with multi-GPU training and modern transformer architecture.
| Feature | Description | Docs |
|---|---|---|
| Multi-GPU Training | DDP, AMP, gradient accumulation | Guide |
| Transformer v2 | Flash Attention, RoPE, RMSNorm, SwiGLU | Guide |
| Detection Quality | EIoU, DIoU-NMS, temperature scaling | Guide |
| SnapFormer | Heatmap-based point detection for instant events | Config |
| TBTFormer | Boundary Distribution Regression for noisy labels | Config |
| Framework Utils | Config validation, adaptive ranges, post-processing | Guide |
| Use Cases | Configuration recommendations | Guide |
# Multi-GPU training with all optimizations
torchrun --nproc_per_node=4 train_ddp.py configs/thumos_i3d.yaml --amp --output my_exp
# Test the improvements
python test_improvements.py
torchrun| Component | Description | Benefit |
|---|---|---|
| Flash Attention | PyTorch 2.0+ optimized attention | 2-4x faster, O(T) memory |
| RoPE | Rotary Position Embeddings | Better length generalization |
| RMSNorm | Root Mean Square normalization | 1.8x faster than LayerNorm |
| SwiGLU | Gated Linear Unit FFN | Better quality per parameter |
| GQA | Grouped Query Attention | Faster inference |
model:
backbone_type: convTransformerv2
backbone:
use_rope: true
use_flash_attn: true
use_swiglu: true
use_rms_norm: true
| Component | Description | Benefit |
|---|---|---|
| EIoU Loss | Enhanced IoU with aspect ratio penalty | Better convergence |
| QualityFocal Loss | IoU-aware classification | Aligns confidence with localization |
| DIoU-NMS | Distance-aware suppression | Better handling of overlapping events |
| Temperature Scaling | Score calibration | Improved probability estimates |
| Class-specific NMS | Per-class suppression params | Tailored for event types |
| Deeper Heads (v2) | Skip connections | Better gradient flow |
test_cfg:
use_diou_nms: true
score_temperature: 1.3
class_sigma:
0: 0.7 # short events
1: 0.4 # medium events
For detecting instant/point events (e.g., snap detection in football, keystroke detection), SnapFormer uses heatmap regression instead of segment boundary regression.
| Component | Description |
|---|---|
| Gaussian Heatmap | Targets are Gaussian peaks centered at event frames |
| Focal Loss | CornerNet-style focal loss for class imbalance |
| Cross-Scale FPN | Bidirectional PANet-style feature fusion |
| Peak Detection | Inference via local maxima finding |
When to use SnapFormer vs ActionFormer:
# SnapFormer config for point detection
model:
meta_arch: "SnapFormer"
fpn_type: "cs_fpn" # Cross-scale FPN (bidirectional)
# ... other params same as ActionFormer
# Standard ActionFormer for segment detection
model:
meta_arch: "LocPointTransformer"
fpn_type: "fpn" # Standard top-down FPN
For action segmentation with noisy annotations or uncertain boundaries, TBTFormer uses probabilistic boundary regression instead of direct offset prediction.
| Component | Description |
|---|---|
| BDR Head | Predicts probability distribution over boundary locations |
| Distribution Focal Loss | Cross-entropy over adjacent bins for smooth learning |
| Scaled Backbone | Optional 16 heads, 6x MLP for larger capacity |
When to use TBTFormer vs ActionFormer:
# TBTFormer config
model:
meta_arch: "TBTFormer"
fpn_type: "cs_fpn" # Cross-scale FPN recommended
reg_max: 16 # Distribution bins (default: 16)
dfl_weight: 0.25 # DFL loss weight
# Optional: Scaled backbone (TBT-Former paper settings)
backbone:
n_head: 16 # Default: 8
n_hidden: 1536 # 6x embed dim (default: 4x = 1024)
| Component | Description |
|---|---|
| Config Validation | Catch misconfigurations early (FPN alignment, sequence divisibility) |
| Adaptive Ranges | Compute regression ranges from annotation distribution |
| Loss Logger | Moving averages with IoU stats for debugging |
| Temporal Constraints | Post-process with min gap, duration limits, overlap rules |
from actionformer import validate_config, compute_adaptive_ranges, TemporalConstraints
validate_config(cfg) # Raises on invalid config
ranges = compute_adaptive_ranges('annotations.json', num_levels=6)
filtered = TemporalConstraints(min_gap={0: 5.0}).apply(results)
This fork is based on the original ActionFormer by Zhang et al. (ECCV 2022):
If you use this code, please cite the original paper:
@inproceedings{zhang2022actionformer,
title={ActionFormer: Localizing Moments of Actions with Transformers},
author={Zhang, Chen-Lin and Wu, Jianxin and Li, Yin},
booktitle={European Conference on Computer Vision},
pages={492-510},
year={2022}
}
ActionFormer is one of the first Transformer-based models for temporal action localization --- detecting the onsets and offsets of action instances and recognizing their action categories. Without bells and whistles, ActionFormer achieves 71.0% mAP at tIoU=0.5 on THUMOS14, outperforming the best prior model by 14.1 absolute percentage points. Further, ActionFormer demonstrates strong results on ActivityNet 1.3 (36.56% average mAP) and EPIC-Kitchens 100 (+13.5% average mAP over prior works).
The model adapts local self-attention to model temporal context in untrimmed videos, classifies every moment in an input video, and regresses their corresponding action boundaries. The result is a deep model trained using standard classification and regression loss that can localize moments of actions in a single shot.
Related projects:
SnAG: Scalable and Accurate Video Grounding
Fangzhou Mu*, Sicheng Mo*, Yin Li
CVPR 2024
![]()
![]()
![]()
11/18/2022: We have released the tech report for our submission to the Ego4D Moment Queries (MQ) Challenge. The code repo now includes config files, pre-trained models and results on the Ego4D MQ benchmark.
08/29/2022: Updated arXiv version.
08/01/2022: Updated code repo with latest results on ActivityNet.
07/08/2022: The paper is accepted to ECCV 2022.
05/09/2022: Pre-trained models have been updated.
05/08/2022: We have updated the code repo based on the community feedback and our code review, leading to significantly better average mAP on THUMOS14 (>66.0%) and slightly improved results on ActivityNet and EPIC-Kitchens 100.
The structure of this code repo is heavily inspired by Detectron2. Some of the main components are
Download Features and Annotations
md5sum 375f76ffbf7447af1035e694971ec9b2) from this Box link or this Google Drive link or this BaiduYun link.Details: The features are extracted from two-stream I3D models pretrained on Kinetics using clips of 16 frames at the video frame rate (~30 fps) and a stride of 4 frames. This gives one feature vector per 4/30 ~= 0.1333 seconds.
Unpack Features and Annotations
This folder
│ README.md
│ ...
│
└───data/
│ └───thumos/
│ │ └───annotations
│ │ └───i3d_features
│ └───...
|
└───libs
│
│ ...
Training and Evaluation
python ./train.py ./configs/thumos_i3d.yaml --output reproduce
[Optional] Multi-GPU Training with DDP
For faster training on multiple GPUs, use DistributedDataParallel (DDP):
# Basic 4-GPU training
torchrun --nproc_per_node=4 ./train_ddp.py ./configs/thumos_i3d.yaml --output reproduce
# With AMP (mixed precision) for ~2x faster training
torchrun --nproc_per_node=4 ./train_ddp.py ./configs/thumos_i3d.yaml --amp --output reproduce
# Full example with all features
torchrun --nproc_per_node=4 ./train_ddp.py ./configs/thumos_i3d.yaml \
--amp --accum-steps 2 --eval-freq 5 --output reproduce
[Optional] Modernized Transformer (v2)
To use the v2 backbone with Flash Attention, RoPE, RMSNorm, and SwiGLU:
model:
backbone_type: convTransformerv2
backbone:
use_rope: true
use_flash_attn: true
use_swiglu: true
use_rms_norm: true
tensorboard --logdir=./ckpt/thumos_i3d_reproduce/logs
python ./eval.py ./configs/thumos_i3d.yaml ./ckpt/thumos_i3d_reproduce
[Optional] Evaluating Our Pre-trained Model
We also provide a pre-trained model for THUMOS 14. The model with all training logs can be downloaded from this Google Drive link. To evaluate the pre-trained model, please follow the steps listed below.
This folder
│ README.md
│ ...
│
└───pretrained/
│ └───thumos_i3d_reproduce/
│ │ └───thumos_reproduce_log.txt
│ │ └───thumos_reproduce_results.txt
│ │ └───...
│ └───...
|
└───libs
│
│ ...
python ./eval.py ./configs/thumos_i3d.yaml ./pretrained/thumos_i3d_reproduce/
| Method | 0.3 | 0.4 | 0.5 | 0.6 | 0.7 | Avg |
|---|---|---|---|---|---|---|
| ActionFormer | 82.13 | 77.80 | 70.95 | 59.40 | 43.87 | 66.83 |
Download Features and Annotations
md5sum c415f50120b9425ee1ede9ac3ce11203) from this Box link or this Google Drive Link or this BaiduYun Link.Details: The features are extracted from the R(2+1)D-34 model pretrained with TSP on ActivityNet using clips of 16 frames at a frame rate of 15 fps and a stride of 16 frames (i.e., non-overlapping clips). This gives one feature vector per 16/15 ~= 1.067 seconds. The features are converted into numpy files for our code.
Unpack Features and Annotations
This folder
│ README.md
│ ...
│
└───data/
│ └───anet_1.3/
│ │ └───annotations
│ │ └───tsp_features
│ └───...
|
└───libs
│
│ ...
Training and Evaluation
python ./train.py ./configs/anet_tsp.yaml --output reproduce
tensorboard --logdir=./ckpt/anet_tsp_reproduce/logs
python ./eval.py ./configs/anet_tsp.yaml ./ckpt/anet_tsp_reproduce
[Optional] Evaluating Our Pre-trained Model
We also provide a pre-trained model for ActivityNet 1.3. The model with all training logs can be downloaded from this Google Drive link. To evaluate the pre-trained model, please follow the steps listed below.
This folder
│ README.md
│ ...
│
└───pretrained/
│ └───anet_tsp_reproduce/
│ │ └───anet_tsp_reproduce_log.txt
│ │ └───anet_tsp_reproduce_results.txt
│ │ └───...
│ └───...
|
└───libs
│
│ ...
python ./eval.py ./configs/anet_tsp.yaml ./pretrained/anet_tsp_reproduce/
| Method | 0.5 | 0.75 | 0.95 | Avg |
|---|---|---|---|---|
| ActionFormer | 54.67 | 37.81 | 8.36 | 36.56 |
[Optional] Reproducing Our Results with I3D Features
md5sum e649425954e0123401650312dd0d56a7) from this Google Drive Link.Details: The features are extracted from the I3D model pretrained on Kinetics using clips of 16 frames at a frame rate of 25 fps and a stride of 16 frames. This gives one feature vector per 16/25 = 0.64 seconds. The features are converted into numpy files for our code.
Unpack the file under ./data (or elsewhere and link to ./data), similar to TSP features.
Train our ActionFormer with I3D features. This will create an experiment folder under ./ckpt that stores training config, logs, and checkpoints.
python ./train.py ./configs/anet_i3d.yaml --output reproduce
python ./eval.py ./configs/anet_i3d.yaml ./ckpt/anet_i3d_reproduce
python ./eval.py ./configs/anet_i3d.yaml ./pretrained/anet_i3d_reproduce/
| Method | 0.5 | 0.75 | 0.95 | Avg |
|---|---|---|---|---|
| ActionFormer | 54.29 | 36.71 | 8.24 | 36.03 |
Download Features and Annotations
md5sum add9803756afd9a023bc9a9c547e0229) from this Box link or this Google Drive Link or this BaiduYun Link.Details: The features are extracted from the SlowFast model pretrained on the training set of EPIC Kitchens 100 (action classification) using clips of 32 frames at a frame rate of 30 fps and a stride of 16 frames. This gives one feature vector per 16/30 ~= 0.5333 seconds.
Unpack Features and Annotations
This folder
│ README.md
│ ...
│
└───data/
│ └───epic_kitchens/
│ │ └───annotations
│ │ └───features
│ └───...
|
└───libs
│
│ ...
Training and Evaluation
python ./train.py ./configs/epic_slowfast_verb.yaml --output reproduce
python ./train.py ./configs/epic_slowfast_noun.yaml --output reproduce
python ./eval.py ./configs/epic_slowfast_verb.yaml ./ckpt/epic_slowfast_verb_reproduce
python ./eval.py ./configs/epic_slowfast_noun.yaml ./ckpt/epic_slowfast_noun_reproduce
[Optional] Evaluating Our Pre-trained Model
We also provide a pre-trained model for EPIC-Kitchens 100. The model with all training logs can be downloaded from this Google Drive link (verb), and from this Google Drive link (noun). To evaluate the pre-trained model, please follow the steps listed below.
This folder
│ README.md
│ ...
│
└───pretrained/
│ └───epic_slowfast_verb_reproduce/
│ │ └───epic_slowfast_verb_reproduce_log.txt
│ │ └───epic_slowfast_verb_reproduce_results.txt
│ │ └───...
│ └───epic_slowfast_noun_reproduce/
│ │ └───epic_slowfast_noun_reproduce_log.txt
│ │ └───epic_slowfast_noun_reproduce_results.txt
│ │ └───...
│ └───...
|
└───libs
│
│ ...
python ./eval.py ./configs/epic_slowfast_verb.yaml ./pretrained/epic_slowfast_verb_reproduce/
python ./eval.py ./configs/epic_slowfast_noun.yaml ./pretrained/epic_slowfast_noun_reproduce/
| Method | 0.1 | 0.2 | 0.3 | 0.4 | 0.5 | Avg |
|---|---|---|---|---|---|---|
| ActionFormer (verb) | 26.58 | 25.42 | 24.15 | 22.29 | 19.09 | 23.51 |
| ActionFormer (noun) | 25.21 | 24.11 | 22.66 | 20.47 | 16.97 | 21.88 |
Download Features and Annotations
./tools/convert_ego4d_trainval.py.Details: All features are extracted at 1.875 fps from videos at 30 fps. This gives one feature vector per ~0.5333 seconds. Please refer to Ego4D and EgoVLP's documentation for more details on feature extraction.
Unpack Features and Annotations
This folder
│ README.md
│ ...
│
└───data/
│ └───ego4d/
│ │ └───annotations
│ │ └───slowfast_features
│ │ └───omnivore_features
│ │ └───egovlp_features
│ └───...
|
└───libs
│
│ ...
Training and Evaluation
python ./train.py ./configs/ego4d_omnivore_egovlp.yaml --output reproduce
tensorboard --logdir=./ckpt/ego4d_omnivore_egovlp_reproduce/logs
python ./eval.py ./configs/ego4d_omnivore_egovlp.yaml ./ckpt/ego4d_omnivore_egovlp_reproduce
[Optional] Evaluating Our Pre-trained Model
We also provide pre-trained models for Ego4D trained with all feature combinations. The models with all training logs can be downloaded from this Google Drive link. To evaluate the pre-trained model, please follow the steps listed below.
This folder
│ README.md
│ ...
│
└───pretrained/
│ └───ego4d_omnivore_egovlp_reproduce/
│ │ └───ego4d_omnivore_egovlp_reproduce_log.txt
│ │ └───ego4d_omnivore_egovlp_reproduce_results.txt
│ │ └───...
│ └───...
|
└───libs
│
│ ...
python ./eval.py ./configs/ego4d_omnivore_egovlp.yaml ./pretrained/ego4d_omnivore_egovlp_reproduce/
| Method | 0.1 | 0.2 | 0.3 | 0.4 | 0.5 | Avg |
|---|---|---|---|---|---|---|
| ActionFormer (S) | 20.09 | 17.45 | 14.44 | 12.46 | 10.00 | 14.89 |
| ActionFormer (O) | 23.87 | 20.78 | 18.39 | 15.33 | 12.65 | 18.20 |
| ActionFormer (E) | 26.84 | 23.86 | 20.57 | 17.19 | 14.54 | 20.60 |
| ActionFormer (S+E) | 27.98 | 24.46 | 21.21 | 18.56 | 15.60 | 21.56 |
| ActionFormer (O+E) | 27.99 | 24.94 | 21.94 | 19.05 | 15.98 | 21.98 |
| ActionFormer (S+O+E) | 28.26 | 24.69 | 21.88 | 19.35 | 16.28 | 22.09 |
| Method | 0.1 | 0.2 | 0.3 | 0.4 | 0.5 | Avg |
|---|---|---|---|---|---|---|
| ActionFormer (S) | 52.25 | 45.84 | 40.60 | 36.58 | 31.33 | 41.32 |
| ActionFormer (O) | 54.63 | 48.72 | 43.03 | 37.76 | 33.57 | 43.54 |
| ActionFormer (E) | 59.53 | 54.39 | 48.97 | 42.75 | 37.12 | 48.55 |
| ActionFormer (S+E) | 59.96 | 53.75 | 48.76 | 44.00 | 38.96 | 49.09 |
| ActionFormer (O+E) | 61.03 | 54.15 | 49.79 | 45.17 | 39.88 | 49.99 |
| ActionFormer (S+O+E) | 60.85 | 54.16 | 49.60 | 45.12 | 39.87 | 49.92 |
Work in progress. Stay tuned.
Please cite the original ActionFormer paper:
@inproceedings{zhang2022actionformer,
title={ActionFormer: Localizing Moments of Actions with Transformers},
author={Zhang, Chen-Lin and Wu, Jianxin and Li, Yin},
booktitle={European Conference on Computer Vision},
pages={492-510},
year={2022}
}
If you cite results on Ego4D, please also cite the tech report:
@article{mu2022actionformerego4d,
title={Where a Strong Backbone Meets Strong Features -- ActionFormer for Ego4D Moment Queries Challenge},
author={Mu, Fangzhou and Mo, Sicheng and Wang, Gillian, and Li, Yin},
journal={arXiv e-prints},
year={2022}
}
If you are using TSP features, please cite
@inproceedings{alwassel2021tsp,
title={{TSP}: Temporally-sensitive pretraining of video encoders for localization tasks},
author={Alwassel, Humam and Giancola, Silvio and Ghanem, Bernard},
booktitle={Proceedings of the IEEE/CVF International Conference on Computer Vision Workshops},
pages={3173--3183},
year={2021}
}
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 1.5.0 | 14 Jan 2026 | 9 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 18:32 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:77d44e4c078c4b4ae54756e465af4f723cfc994728911facdc5387cdb609dc1b