Visual features
Low-level static visual properties
Per-frame low-level image statistics (luminance, RMS contrast, color in RGB/HSV/CIELAB, colorfulness, spatial-frequency power spectra, edge/orientation energy, entropy, clutter) are a mature, well-understood domain that is best served by classic computer-vision libraries and a handful of vision-science toolboxes rather than learned models. The recommended core is scikit-image + OpenCV + NumPy for the bulk of pixel/color/edge/frequency statistics, a steerable-pyramid library (pyrtools / plenoptic) for biologically motivated orientation-energy and spatial-frequency banks, SHINE for canonical luminance/contrast/Fourier-amplitude measures aligned with the vision-science literature, and the Rosenholtz Feature-Congestion/Subband-Entropy code for visual clutter. GIST provides a compact holistic spatial-envelope descriptor that bridges low- and mid-level. Learned descriptors add little over these analytic features for this specific subclass; the main “modern” gain is wrapping the classic operators in a per-frame pipeline (e.g. pliers) and running them at 1-25 fps over a video. All of these run on CPU and are trivially feasible for a small lab; the practical work is timeline alignment and per-frame batching, not compute.
| Tool | Measures | Per-timepoint output | Modality | Granularity | Local | Rating | Rec |
|---|---|---|---|---|---|---|---|
| scikit-image (skimage) 0.24/0.25 + NumPy | General-purpose per-frame pixel statistics: luminance/intensity, RMS contrast (std of luminance), color-space conversions (rgb2hsv, rgb2lab, rgb2gray), Shannon entropy (skimage.measure.shannon_entropy and local entropy filter), edge maps (Sobel, Scharr, Canny, edge density), texture (GLCM via greycomatrix/graycoprops, local binary patterns), and frequency content via skimage.filters and FFT helpers. | Per-frame scalars and maps: mean luminance, RMS contrast (Michelson/Weber/std-based), per-channel R/G/B and H/S/V and L*/a*/b* means and stds, global/local Shannon entropy (bits), edge-pixel fraction (edge density), GLCM contrast/energy/homogeneity/correlation, LBP histograms. All reducible to 1 value/frame. | video-frame | frame | yes-cpu | best-in-class | include |
| OpenCV (cv2) 4.x | Fast per-frame image statistics and primitives: color-space conversion (cvtColor to HSV/Lab/YCrCb/Gray), histograms, Sobel/Laplacian/Canny edges, Gabor kernels (getGaborKernel) for orientation/spatial-frequency energy, DFT/magnitude spectra, Laplacian-variance sharpness/blur, and efficient video frame I/O (VideoCapture) for timeline-locked extraction. | Per-frame: mean/std luminance, per-channel color means in any space, color histograms, edge density, Laplacian variance (focus/sharpness scalar), Gabor-bank response energy per orientation/frequency, FFT radial power-spectrum slope. Plus the frame-grabbing layer that timestamps every frame. | video-frame | frame | yes-cpu | best-in-class | include |
| SHINE toolbox (+ SHINE_color fork) | Canonical vision-science measurement and control of low-level image properties: mean luminance, RMS contrast, luminance histogram, and the rotational (orientation-averaged) Fourier amplitude spectrum / energy at each spatial frequency. Primarily a control/equalization tool but its measurement functions are the field-standard definitions. | Per-frame (per-image): mean luminance, RMS contrast, full luminance histogram, 1-D rotationally averaged Fourier amplitude spectrum (energy vs spatial frequency) and amplitude-spectrum slope. SHINE_color extends to color channels. | video-frame | frame | yes-cpu | strong | include |
| pyrtools (LabForComputationalVision) / matlabPyrTools | Multi-scale, multi-orientation steerable-pyramid and Laplacian/QMF/wavelet decompositions. Provides biologically motivated orientation-energy and spatial-frequency subband responses (the V1-like Gabor/steerable filter bank) at multiple scales and orientations. | Per-frame: per-subband (scale x orientation) coefficient energy/variance, total energy per orientation band (orientation-energy histogram), energy per spatial-frequency scale, oriented-edge energy. Yields a compact vector of orientation x scale energies per frame. | video-frame | frame | yes-cpu | strong | include |
| Rosenholtz Feature Congestion + Subband Entropy clutter measures | Two complementary models of visual clutter. Feature Congestion captures local variability of color, luminance-contrast, and orientation (via Gaussian-pyramid covariance of feature maps); Subband Entropy captures clutter as the entropy/information in wavelet luminance and chrominance subbands. | Per-frame: a global Feature-Congestion clutter scalar (and a dense per-pixel clutter map), and a global Subband-Entropy clutter scalar; optionally split into color, contrast, and orientation clutter sub-components. | video-frame | frame | yes-cpu | strong | include |
| Hasler & Susstrunk colorfulness metric (+ warmth from CIELAB) | Perceptual colorfulness of a natural image from opponent-color statistics, validated against human colorfulness ratings (>90% correlation). Trivially paired with CIELAB-based ‘warmth’ (a* red-green / b* yellow-blue means or hue distribution) and saturation from HSV. | Per-frame scalars: colorfulness index M = sqrt(std_rg^2 + std_yb^2) + 0.3sqrt(mean_rg^2 + mean_yb^2); plus mean a/b* (warmth/coolness), mean HSV saturation, dominant-hue summaries. | video-frame | frame | yes-cpu | strong | include |
| GIST / spatial envelope descriptor (lear-gist-python, pyGist, LMgist) | Holistic low-to-mid-level scene descriptor: orientation x spatial-frequency energy (Gabor filter bank, typically 8 orientations x 4 scales) pooled over a 4x4 spatial grid, summarizing global scene structure (openness, roughness, naturalness-related dimensions). | Per-frame fixed-length vector (e.g. 512-d for 8 orientations x 4 scales x 4x4 grid) of windowed orientation-energy values; a compact global texture/structure signature usable directly as a per-frame feature vector. | video-frame | frame | yes-cpu | usable | include-if-resources |
| pliers (PsychoinformaticsLab) low-level image extractors | Orchestration framework that runs low-level image extractors (BrightnessExtractor, SharpnessExtractor, VibranceExtractor, SaliencyExtractor, plus wrappers to scikit-image/OpenCV) over video frames with automatic timestamping and a tidy long-format output, instead of hand-rolling the per-frame loop. | Per-frame, timestamped: brightness (mean value/luminance), sharpness (Laplacian-variance), vibrance (variance across RGB channels), saliency summary; emits an onset/duration-tagged dataframe ready for fMRI/timeline alignment. | video-frame | frame | yes-cpu | usable | include |
Recommended (best-in-class): scikit-image + OpenCV + NumPy as the core per-frame engine (luminance, RMS contrast, RGB/HSV/CIELAB color, entropy, edges, FFT power spectrum); pyrtools / plenoptic steerable pyramid for orientation-energy and spatial-frequency banks; SHINE for canonical, literature-matched luminance/contrast/Fourier-amplitude-spectrum definitions; Rosenholtz Feature-Congestion + Subband-Entropy for visual clutter; Hasler-Susstrunk colorfulness formula (implemented directly) for perceptual color; pliers as the timestamping/orchestration layer feeding the movie timeline
Likely redundant:
- OpenCV Gabor-kernel bank is superseded by pyrtools/GIST for principled orientation-energy (keep OpenCV mainly for speed and video decoding)
- Global Shannon entropy and raw edge density are weaker clutter proxies superseded by Rosenholtz Feature-Congestion / Subband-Entropy
- GIST overlaps heavily with pyrtools orientation-energy; only one is needed unless a compact fixed-length holistic vector is specifically wanted
- Learned low-level descriptors / CNN early-layer activations add little over analytic luminance/contrast/color/frequency features for this subclass and are better reserved for mid/high-level visual subclasses
- pliers built-in extractors duplicate scikit-image/OpenCV computations; it is an orchestration convenience, not an independent feature source
- scikit-image and OpenCV themselves overlap substantially in color/edge/FFT ops
References
- scikit-image (skimage) 0.24/0.25 + NumPy — scikit-image.org; van der Walt et al. 2014 PeerJ
- OpenCV (cv2) 4.x — opencv.org; pyimagesearch colorfulness/blur tutorials
- SHINE toolbox (+ SHINE_color fork) — Willenbockel et al. 2010 Behav Res Methods 42:671; mapageweb.umontreal.ca/gosselif/shine
- pyrtools (LabForComputationalVision) / matlabPyrTools — github.com/LabForComputationalVision/pyrtools; Simoncelli & Freeman 1995; plenoptic (Duong et al.)
- Rosenholtz Feature Congestion + Subband Entropy clutter measures — Rosenholtz, Li & Nakano 2007 J Vision; persci.mit.edu/research/clutter
- Hasler & Susstrunk colorfulness metric (+ warmth from CIELAB) — Hasler & Susstrunk 2003, SPIE Human Vision; pyimagesearch colorfulness post
- GIST / spatial envelope descriptor (lear-gist-python, pyGist, LMgist) — Oliva & Torralba 2001 IJCV; github.com/whitphx/lear-gist-python; davidmwatson/pyTools pyGist
- pliers (PsychoinformaticsLab) low-level image extractors — McNamara et al. 2017; github.com/PsychoinformaticsLab/pliers; Neuroscout (de la Vega 2022 eLife)
High-level static visual: objects, scenes, places, attributes
For per-frame movie/audio-story annotation of objects, scenes, places, and attributes, the field has consolidated around a few foundation-model families. Two complementary backbones cover most needs: contrastive vision-language encoders (OpenCLIP, SigLIP 2) that give open-vocabulary probe scores and zero-shot scene/place/object/attribute labels via text prompts, and self-supervised encoders (DINOv2/DINOv3) that give label-free dense semantic embeddings. For explicit localized labels, open-vocabulary detectors (Grounding DINO 1.5/1.6, YOLO-World) and promptable/panoptic segmenters (SAM 2, Mask2Former) emit per-object boxes/masks. For rich natural-language scene descriptions and attribute/relation reasoning, open VLMs (Qwen2.5-VL, InternVL3, LLaVA-OneVision) caption frames or answer structured VQA. A small lab can run most of these locally on a single 24-48GB GPU; the main tradeoff is fixed-vocabulary classifiers (Places365, ImageNet backbones) being largely superseded by open-vocabulary CLIP-family probing, except where a frozen, reproducible, interpretable category vector is explicitly wanted.
| Tool | Measures | Per-timepoint output | Modality | Granularity | Local | Rating | Rec |
|---|---|---|---|---|---|---|---|
| OpenCLIP (ViT-L/14, ViT-H/14, ViT-bigG/14; LAION-2B / DataComp checkpoints) | Open-vocabulary semantic content of a frame: similarity between the image and arbitrary text prompts for objects, scenes, places, attributes, actions. | Per-frame: (a) 768-1280 dim L2-normalized image embedding; (b) cosine-similarity / softmax scores against any user-defined label set (e.g. zero-shot Places365 categories, ImageNet-1k classes, attribute prompts). Continuous probe scores per concept per frame. | video-frame | frame (run on sampled frames, e.g. 1-4 fps, aligned to timeline) | yes-gpu | best-in-class | include |
| SigLIP 2 (google/siglip2 ViT-B/L/So400m, NaFlex variants) | Open-vocabulary image-text alignment (same role as CLIP) with sigmoid loss, stronger zero-shot classification, localization, multilingual (109 languages) and improved dense features. | Per-frame: image embedding (768-1152 dim) plus per-prompt sigmoid/logit scores for object/scene/place/attribute label sets; supports native-resolution (NaFlex) and better patch-level dense features for localized attribute probing. | video-frame | frame | yes-gpu | best-in-class | include |
| DINOv2 / DINOv3 (ViT-S/B/L/g, self-supervised) | Label-free general-purpose visual semantics and structure; strong dense (patch-level) features for objects/parts/scenes without needing any text vocabulary. | Per-frame: global CLS embedding (384-1536 dim) and per-patch dense feature maps. No human-readable labels by default; used as representational similarity (RSA) features, for linear-probe classifiers, or as the backbone for downstream attribute/scene probes. DINOv3 adds Gram-anchored high-resolution dense maps. | video-frame | frame | yes-gpu | best-in-class | include |
| Grounding DINO 1.5 / 1.6 (Pro and Edge) | Open-vocabulary object DETECTION: localizes arbitrary objects/categories given free-text prompts (category names or referring expressions). | Per-frame: list of detected objects with bounding boxes, free-text class label (from the prompt vocabulary), and confidence score. Yields per-frame object presence/counts/positions for any concept list. | video-frame | frame | yes-gpu | best-in-class | include |
| YOLO-World (v2, S/M/L/X) | Real-time open-vocabulary object detection (CLIP-text-conditioned YOLO). | Per-frame: bounding boxes + open-vocabulary class labels + confidence scores; very fast, so practical to run densely (every frame) across long films. | video-frame | frame | yes-gpu | strong | alternative |
| Qwen2.5-VL (3B / 7B / 72B) | Natural-language scene description, structured VQA over objects/scenes/attributes/relations, grounded captioning with coordinates; the workhorse open VLM for semantic frame annotation. | Per-frame (or per-shot keyframe): free-text caption; structured/JSON answers to fixed question schemas (e.g. setting=indoor/outdoor, place type, salient objects list, attributes, people count); optional grounded boxes for referenced objects. Convert to categorical/ordinal time series. | video-frame | frame / per-shot (run on sampled keyframes; also natively handles short clips) | yes-gpu | best-in-class | include |
| InternVL3 (1B-78B; InternVL3-8B/14B common) | Same scene-description / VQA / grounded-captioning role as Qwen2.5-VL; among the strongest open MLLMs on perception and reasoning benchmarks. | Per-frame: free-text captions and structured VQA outputs (scene/place classification, object inventory, attributes, spatial relations); supports grounding. | video-frame | frame / per-shot | yes-gpu | strong | alternative |
| Places365 CNN (ResNet-50-places365) and ImageNet backbones (ConvNeXt-V2, EVA-02, BEiT-3) | Closed-vocabulary scene/place recognition (365 scene categories) and object classification (ImageNet-1k/-21k) with fixed, reproducible, interpretable label posteriors. | Per-frame: 365-dim scene-category probability vector (Places365) and/or 1000/21841-dim ImageNet class posteriors; also scene attributes (SUN-attribute head) and indoor/outdoor + naturalness. Fully interpretable per-category time series. | video-frame | frame | yes-cpu | usable | include-if-resources |
| Mask2Former / OneFormer (panoptic, COCO/ADE20K/Cityscapes) | Panoptic / semantic / instance segmentation: pixel-level labeling of every region into ‘thing’ (objects) and ‘stuff’ (sky, road, wall, vegetation) categories. | Per-frame: per-pixel class map plus per-instance masks with class labels; derive per-frame area fractions per category (e.g. % sky, % person, % building), object counts, scene composition vectors. | video-frame | frame | yes-gpu | strong | include |
| SAM 2 (Segment Anything Model 2, hiera-tiny/small/base/large) | Class-agnostic promptable segmentation of objects in images and video; produces masks but NOT semantic labels by itself. | Per-frame: high-quality instance masks (from points/boxes/auto ‘everything’ mode), with video temporal mask propagation/tracking. Pair with CLIP/Grounding DINO to attach labels (Grounded-SAM); yields per-object segmented regions, sizes, counts, and consistent track IDs. | video-clip | frame (with temporal mask propagation across the clip) | yes-gpu | strong | include-if-resources |
Recommended (best-in-class): SigLIP 2 (or OpenCLIP ViT-L) as the primary open-vocabulary text-probe encoder for object/scene/place/attribute scores; DINOv2/DINOv3 as the complementary label-free dense embedding for RSA and linear probes; Qwen2.5-VL-7B as the primary captioning/VQA VLM for structured scene descriptions; Grounding DINO (1.6 Pro via API for accuracy, or open 1.0 / YOLO-World locally) for open-vocabulary per-object detection; Mask2Former/OneFormer panoptic for scene-composition (thing+stuff area fractions)
Likely redundant:
- OpenCLIP and SigLIP 2 fill the same text-probe role - run one as primary (SigLIP 2 generally stronger), not both
- Qwen2.5-VL, InternVL3, and LLaVA-OneVision are interchangeable captioning/VQA VLMs - pick one primary after benchmarking your prompt schema
- YOLO-World is superseded on accuracy by Grounding DINO 1.6 Pro; keep only when per-frame throughput/density is the constraint
- Places365 CNN and ImageNet-trained backbones are largely superseded by zero-shot CLIP/SigLIP2 probing of the same label sets - keep only for a frozen, reproducible fixed-taxonomy probability vector
- SAM 2 alone produces no labels and overlaps Mask2Former for static panoptic needs; only adds value via video-consistent tracking or as Grounded-SAM
Open questions:
- Frame sampling rate to hit true second-by-second alignment vs compute budget (1 fps probing vs shot-level keyframes for heavy VLMs)
- Whether to derive scene/place labels via zero-shot CLIP/SigLIP2 prompting or keep a frozen Places365 head for reproducibility/citation in fMRI work
- DINOv3 licensing (research/non-commercial terms) may restrict use vs Apache-2.0 DINOv2
- Grounding DINO 1.6 Pro best accuracy is API-only - acceptable for a small lab, or fall back to open 1.0/YOLO-World?
- Need for an aggregation/parsing layer to convert free-text VLM captions into consistent categorical per-second feature vectors (schema + JSON-constrained decoding)
References
- OpenCLIP (ViT-L/14, ViT-H/14, ViT-bigG/14; LAION-2B / DataComp checkpoints) — github.com/mlfoundations/open_clip; LAION-2B / DataComp-1B; Radford et al. 2021 CLIP
- SigLIP 2 (google/siglip2 ViT-B/L/So400m, NaFlex variants) — Tschannen et al. 2025 arXiv:2502.14786; hf.co/google (siglip2)
- DINOv2 / DINOv3 (ViT-S/B/L/g, self-supervised) — Oquab et al. 2023 DINOv2; DINOv3 2025 arXiv:2508.10104
- Grounding DINO 1.5 / 1.6 (Pro and Edge) — Liu et al. 2023; Ren et al. 2024 Grounding DINO 1.5 arXiv:2405.10300; IDEA-Research/GroundingDINO
- YOLO-World (v2, S/M/L/X) — Cheng et al. 2024 arXiv:2401.17270; docs.ultralytics.com/models/yolo-world
- Qwen2.5-VL (3B / 7B / 72B) — Qwen2.5-VL Technical Report 2025; hf.co/Qwen
- InternVL3 (1B-78B; InternVL3-8B/14B common) — InternVL3 2025 arXiv:2504.10479; hf.co/OpenGVLab
- Places365 CNN (ResNet-50-places365) and ImageNet backbones (ConvNeXt-V2, EVA-02, BEiT-3) — Zhou et al. 2017 Places365; github.com/CSAILVision/places365; huggingface timm
- Mask2Former / OneFormer (panoptic, COCO/ADE20K/Cityscapes) — Cheng et al. 2022 Mask2Former; Jain et al. 2023 OneFormer
- SAM 2 (Segment Anything Model 2, hiera-tiny/small/base/large) — Ravi et al. 2024 SAM 2 arXiv:2408.00714; Grounded-SAM (IDEA-Research)
Faces, bodies, gaze, and facial expression
This subclass covers per-frame extraction of where faces and bodies are, who they are, where they look, and what they express. The mature open-source stack is: a detector/tracker (RetinaFace/InsightFace, MediaPipe) feeding identity (ArcFace), landmarks, head pose and gaze (OpenFace 3.0, L2CS-Net), facial action units and discrete/continuous emotion (Py-Feat, OpenFace 3.0, HSEmotion/EmotiEffLib, EmoNet), and body/hand keypoints (MMPose’s RTMPose/RTMW, ViTPose, MediaPipe Holistic). As of 2025, OpenFace 3.0 (arXiv 2506.02891) consolidates landmarks+AUs+gaze+emotion into one lightweight CPU-capable multitask model, and MMPose RTMPose/RTMW dominate real-time 2D/whole-body pose; these are the recommended defaults for a small lab. All major components run on a single consumer GPU (often CPU), making second-by-second annotation of long films feasible.
| Tool | Measures | Per-timepoint output | Modality | Granularity | Local | Rating | Rec |
|---|---|---|---|---|---|---|---|
| InsightFace (RetinaFace detector + ArcFace ‘buffalo_l’ pack, ResNet50@WebFace600K) | Face detection, 5-point + 2D-106/3D-68 landmark alignment, and 512-d face identity embeddings for recognition/tracking across frames. | Per detected face per frame: bounding box (x,y,w,h) + detection score; 5 or 106 2D landmark coords; 68 3D landmark coords; coarse head pose (yaw/pitch/roll from 3D fit); age estimate; binary sex; 512-dim L2-normalized ArcFace embedding (cosine-comparable for identity clustering/tracking). | video-frame | per-frame (per detected face) | yes-gpu | best-in-class | include |
| RetinaFace (standalone, serengil/retinaface or InsightFace detector) | Single-stage dense face detection with facial landmark localization; the detection backbone underneath most modern pipelines. | Per frame: face bounding boxes + confidence; 5 facial landmarks (eyes, nose, mouth corners) per face. No identity/AUs. | video-frame | per-frame | yes-cpu | strong | alternative |
| MediaPipe Tasks (Face Detector, Face Landmarker w/ blendshapes, Pose Landmarker, Hand Landmarker; legacy Holistic) | Lightweight on-device face, body, and hand keypoints plus 52 ARKit-style blendshape expression coefficients and approximate head pose. | Per frame: 478 3D face mesh landmarks; 52 blendshape coefficients (0-1) covering brow/eye/mouth/jaw expression primitives; 4x4 facial transform matrix (head pose); 33 3D body pose landmarks with visibility; 21 3D hand landmarks per hand. Emits normalized + world coords. | video-frame | per-frame | yes-cpu | strong | include |
| OpenFace 3.0 (lightweight multitask, RetinaFace MobileNet-0.25 frontend) | Unified per-frame facial behavior: landmarks, facial action units, eye-gaze, and discrete emotion from a single shared-backbone model. | Per face per frame: dense 2D facial landmarks; AU detection (presence/intensity, FACS-style set); eye-gaze direction (gaze vectors / yaw-pitch); head pose; discrete facial emotion class + probabilities. Time-series CSV per video. | video-frame | per-frame | yes-cpu | best-in-class | include |
| OpenFace 2.0 (TadasBaltrusaitis/OpenFace) | Classic CLM/CE-CLM facial landmark, head pose, gaze, and AU intensity/presence regression; long the field standard for FACS-based AU time series. | Per frame: 68 2D+3D landmarks; head pose (Tx,Ty,Tz, pitch/yaw/roll); eye-gaze vectors (gaze_0, gaze_1) + gaze angle; 17 AU intensities (AU01-AU45, 0-5) + 18 AU presence binaries; per-frame confidence and success flag. Outputs tidy CSV. | video-frame | per-frame | yes-cpu | usable | alternative |
| Py-Feat (cosanlab/py-feat) | Modular Python facial expression pipeline: face detection, landmarks, head pose, AUs, and 7-class emotion, with built-in visualization and analysis (Fex data class). | Per face per frame: bbox + score; 68 landmarks; head pose (pitch/yaw/roll); ~20 AU probabilities/intensities (selectable detectors, e.g. XGBoost/SVM on landmark+HOG); 7 emotion probabilities (anger, disgust, fear, happy, sad, surprise, neutral); optional identity embedding. Returns a pandas-like Fex time-series. | video-frame | per-frame | yes-gpu | strong | include |
| L2CS-Net (Ahmednull/L2CS-Net) | Appearance-based 3D gaze direction estimation in unconstrained, full-360 settings from the face crop (no eye-tracker hardware). | Per face per frame: gaze yaw and pitch angles (radians/degrees) -> 3D gaze direction vector. SOTA 3.92 deg (MPIIGaze), 10.41 deg (Gaze360). | video-frame | per-frame | yes-gpu | strong | include-if-resources |
| MMPose: RTMPose / RTMW / RTMW3D (open-mmlab/mmpose) | Real-time top-down multi-person 2D body, whole-body (body+face+hands+feet), and 3D whole-body keypoint estimation. | Per detected person per frame: 17 COCO body keypoints (RTMPose) OR 133 COCO-WholeBody keypoints (RTMW: 23 body+foot, 68 face, 42 hand), each with (x,y) + confidence; RTMW3D adds 3D (x,y,z). Yields per-person skeletons -> derived posture, hand gesture, head orientation signals. | video-frame | per-frame (per person) | yes-gpu | best-in-class | include |
| ViTPose / ViTPose++ (ViTAE-Transformer/ViTPose, in MMPose) | Vision-transformer top-down human pose estimation; highest-accuracy 2D body keypoints when accuracy outranks speed. | Per person per frame: 17 (COCO) or up to 133 (whole-body via ViTPose+) keypoints with (x,y)+confidence heatmap-derived coords. ViTPose-G reaches >80 AP on COCO. | video-frame | per-frame (per person) | yes-heavy-gpu | strong | alternative |
| HSEmotion / EmotiEffLib (EmotiEffNet, av-savchenko / sb-ai-lab) | Fast EfficientNet/MobileViT-based facial expression classification, valence-arousal regression, and AU prediction from face crops; tuned for video. | Per face per frame: 8-class emotion probabilities (anger, contempt, disgust, fear, happy, neutral, sad, surprise); continuous valence and arousal scalars (-1..1); AU activations; plus reusable face embedding features for downstream temporal models. | video-frame | per-frame (aggregable per-utterance/clip) | yes-cpu | strong | include |
| EmoNet (face-analysis/emonet) | Continuous valence-arousal plus discrete emotion estimation from faces in naturalistic conditions (AffectNet-trained). | Per face per frame: continuous valence and arousal (-1..1); discrete emotion class (5- or 8-class model) + probabilities; facial landmarks. Includes demo_video.py for video face-detect + emotion. | video-frame | per-frame | yes-gpu | usable | alternative |
Recommended (best-in-class): OpenFace 3.0 (landmarks + AUs + gaze + emotion in one CPU-capable multitask model) as the primary face-behavior extractor; InsightFace buffalo_l (RetinaFace + ArcFace) for face detection, tracking, and identity embeddings; MMPose RTMPose / RTMW for real-time 2D and whole-body (body+face+hands+feet) keypoints; MediaPipe Tasks for cheap CPU-only body/hand/face landmarks + blendshapes as a fallback/redundancy layer; HSEmotion/EmotiEffLib for fast continuous valence-arousal and expression, and L2CS-Net when high-accuracy 360-degree gaze is a primary signal
Likely redundant:
- OpenFace 2.0 -> superseded by OpenFace 3.0 (faster, multitask, better accuracy); keep only for reproducing legacy pipelines or its validated AU intensity scale
- Standalone RetinaFace -> redundant with InsightFace, which bundles it; and with detectors inside OpenFace 3.0 / Py-Feat
- ViTPose -> redundant with MMPose RTMPose/RTMW for typical lab use; only worth it for max-accuracy keypoints on a strong GPU
- EmoNet -> valence-arousal largely superseded by HSEmotion (faster, newer, more outputs); keep as a citable cross-check
- L2CS-Net gaze and Py-Feat/HSEmotion emotion overlap OpenFace 3.0’s bundled gaze/emotion -> run separately only when those specific signals need best-in-class accuracy
- MediaPipe body/hand keypoints overlap MMPose (lower accuracy, single-best-effort) -> use MediaPipe for cheap CPU-only or redundancy, MMPose for accuracy/multi-person
References
- InsightFace (RetinaFace detector + ArcFace ‘buffalo_l’ pack, ResNet50@WebFace600K) — github.com/deepinsight/insightface; RetinaFace (arXiv 1905.00641); ArcFace (arXiv 1801.07698)
- RetinaFace (standalone, serengil/retinaface or InsightFace detector) — arXiv 1905.00641; github.com/serengil/retinaface
- MediaPipe Tasks (Face Detector, Face Landmarker w/ blendshapes, Pose Landmarker, Hand Landmarker; legacy Holistic) — ai.google.dev/edge/mediapipe; developers.google.com/mediapipe
- OpenFace 3.0 (lightweight multitask, RetinaFace MobileNet-0.25 frontend) — arXiv 2506.02891; huggingface.co/papers/2506.02891
- OpenFace 2.0 (TadasBaltrusaitis/OpenFace) — github.com/TadasBaltrusaitis/OpenFace; OpenFace 2.0 (FG 2018)
- Py-Feat (cosanlab/py-feat) — Cheong et al., Behavior Research Methods 2023; github.com/cosanlab/py-feat
- L2CS-Net (Ahmednull/L2CS-Net) — arXiv 2203.03339; github.com/Ahmednull/L2CS-Net
- MMPose: RTMPose / RTMW / RTMW3D (open-mmlab/mmpose) — RTMPose arXiv 2303.07399; RTMW arXiv 2407.08634; github.com/open-mmlab/mmpose
- ViTPose / ViTPose++ (ViTAE-Transformer/ViTPose, in MMPose) — ViTPose arXiv 2204.12484; ViTPose++ arXiv 2212.04246
- HSEmotion / EmotiEffLib (EmotiEffNet, av-savchenko / sb-ai-lab) — Savchenko, HSEmotion (CVPR 2023 workshops; arXiv 2403.11590); github.com/av-savchenko/hsemotion; github.com/sb-ai-lab/EmotiEffLib
- EmoNet (face-analysis/emonet) — Toisoul et al., Nature Machine Intelligence 2021; github.com/face-analysis/emonet
Dynamic visual: motion, optical flow, motion energy
This subclass covers low-level dynamic visual signal: dense optical flow (per-pixel motion vectors), aggregate motion energy from spatiotemporal filter banks, camera-vs-object motion separation, shot/cut boundaries, and frame-to-frame visual change/novelty. These are deliberately pre-semantic features (how much/which-direction things move, when the camera cuts) distinct from semantic action recognition. The field is mature and largely open-source: RAFT and its 2024 successor SEA-RAFT dominate dense flow, MemFlow/VideoFlow add multi-frame temporal smoothing, pymoten provides the canonical neuroscience motion-energy pyramid, and TransNetV2 plus PySceneDetect cover shot detection. For a small lab, a practical default pipeline is: PySceneDetect/TransNetV2 for cuts, pymoten for a brain-aligned motion-energy regressor, and SEA-RAFT (or RAFT) for dense flow from which you derive global/mean flow magnitude (proxy for camera motion) and residual flow (object motion).
| Tool | Measures | Per-timepoint output | Modality | Granularity | Local | Rating | Rec |
|---|---|---|---|---|---|---|---|
| SEA-RAFT (Princeton-VL, ECCV 2024) | Dense per-pixel optical flow (2D motion vector field) between consecutive frames; current best accuracy/speed tradeoff among open flow models | Per-pixel (u,v) displacement field at full resolution; derivable per-frame scalars: mean/median flow-vector magnitude, flow-orientation histogram, divergence/curl, global-motion (camera) estimate via robust fit and residual (object) motion magnitude | video-frame | frame (per consecutive frame pair) | yes-gpu | best-in-class | include |
| RAFT (Teed & Deng, ECCV 2020) | Dense per-pixel optical flow via recurrent all-pairs correlation; the long-standing reliable baseline, widely wrapped (torchvision, ptlflow) | Per-pixel (u,v) flow field; same derived per-frame scalars as SEA-RAFT (mean magnitude, orientation entropy, camera/object decomposition) | video-frame | frame | yes-gpu | strong | alternative |
| MemFlow (Dong et al., CVPR 2024) | Multi-frame optical flow with a memory module that aggregates historical motion, giving temporally smoother flow and large-motion robustness; real-time | Per-pixel (u,v) flow field, temporally coherent across the clip; same derived scalars, with less frame-to-frame jitter useful for second-by-second time series | video-clip | frame (with temporal context) | yes-gpu | strong | include-if-resources |
| VideoFlow (Shi et al., ICCV 2023) | Multi-frame (tri-frame TROF + propagation) optical flow exploiting temporal cues; high accuracy on Sintel/KITTI | Bi-directional per-pixel (u,v) flow across multiple frames; derived per-frame motion magnitude/orientation series | video-clip | frame (multi-frame context) | yes-gpu | usable | drop |
| pymoten (Gallant Lab; Nunez-Elizalde et al. 2021) | Motion energy from a pyramid of spatiotemporal Gabor quadrature filters at multiple spatial/temporal frequencies, directions, positions, sizes — the canonical low-level motion model for fMRI encoding (Nishimoto & Gallant 2011) | Per-frame high-dimensional (hundreds-to-thousands-dim) vector of filter activation energies, one value per Gabor channel (spatial freq x temporal freq x direction x location). Directly usable as a voxelwise encoding-model regressor or reducible to summary motion-energy scalars | video-frame | frame (configurable; commonly downsampled to per-second or TR) | yes-cpu | best-in-class | include |
| TransNetV2 (Soucek & Lokoc 2020) | Shot/cut boundary detection including hard cuts and gradual transitions (dissolves, fades, wipes) via a deep dilated-3D-CNN; current open SOTA for shot boundaries | Per-frame cut probability (0-1); thresholded list of shot boundary frame indices and shot segments; handles gradual transitions, flashes, motion blur | video-clip | per-frame probability yielding per-shot segmentation | yes-gpu | best-in-class | include |
| PySceneDetect (v0.6+) | Shot/cut detection via content-aware HSV histogram change (ContentDetector) or adaptive/threshold detectors; lightweight CPU tool | List of cut frame/timecode boundaries and scene segments; per-frame content-change score time series (the raw HSV-delta signal is itself a usable visual-change/novelty feature) | video-frame | per-frame change score; per-shot segmentation | yes-cpu | strong | include |
| AutoShot (Zhu et al., CVPRW 2023) | Shot boundary detection trained on the SHOT/short-video dataset; reports SOTA on short-form/social video where TransNetV2 was trained on different distribution | Per-frame shot-boundary scores and shot segments | video-clip | per-frame / per-shot | yes-gpu | usable | alternative |
| OpenCV Farneback / DIS dense optical flow | Classical (non-deep) dense optical flow — Farneback polynomial expansion or DISOpticalFlow; CPU-only fallback when no GPU is available | Per-pixel (u,v) flow field; derived per-frame mean magnitude and orientation histograms | video-frame | frame | yes-cpu | usable | alternative |
Recommended (best-in-class): SEA-RAFT (dense optical flow; derive global camera-motion vs residual object-motion and mean flow magnitude); pymoten (neuroscience-standard motion-energy pyramid feature for direct fMRI encoding); TransNetV2 (shot/cut boundary detection incl. gradual transitions); PySceneDetect (fast CPU cut detection + continuous per-frame visual-change/novelty score)
Likely redundant:
- RAFT -> superseded by SEA-RAFT (better accuracy and ~2.3x faster); keep only as easy torchvision fallback
- VideoFlow -> superseded by MemFlow (faster, fewer params, higher accuracy for multi-frame flow)
- AutoShot -> overlaps TransNetV2; only preferable for short-form/social video stimuli
- OpenCV Farneback/DIS -> superseded by SEA-RAFT/RAFT in accuracy; keep only as no-GPU fallback
- GMFlow/FlowFormer family -> covered in spirit by SEA-RAFT as the chosen single dense-flow model; no need to run multiple deep flow nets
Open questions:
- Camera-vs-object motion separation is not a turnkey tool: it must be derived from a dense-flow model (e.g. robust homography/affine global-motion fit on the flow field, then residual = object motion). Decide whether to implement this or adopt a SLAM/egomotion package.
- Choose the temporal aggregation strategy: flow and motion-energy are per-frame, so define how to bin/downsample to per-second or per-TR (mean, RMS, or HRF-convolved) for the neuroimaging timeline.
- For long narrative films, decide between per-pair flow (SEA-RAFT) vs temporally-smoothed multi-frame flow (MemFlow) depending on whether jitter in the second-by-second series is a problem.
- Confirm SEA-RAFT vs MemFlow generalization on your actual stimulus domain (animation, archival film, low light) since flow models are trained mostly on Sintel/KITTI/Spring.
References
- SEA-RAFT (Princeton-VL, ECCV 2024) — github.com/princeton-vl/SEA-RAFT ; arXiv 2405.14793 ; Spring benchmark EPE 3.69
- RAFT (Teed & Deng, ECCV 2020) — github.com/princeton-vl/RAFT ; pytorch.org/vision optical_flow
- MemFlow (Dong et al., CVPR 2024) — github.com/dqiaole/MemFlow ; CVPR 2024 ; dqiaole.github.io/MemFlow
- VideoFlow (Shi et al., ICCV 2023) — arXiv 2303.08340 ; github.com/XiaoyuShi97/VideoFlow
- pymoten (Gallant Lab; Nunez-Elizalde et al. 2021) — github.com/gallantlab/pymoten ; Nishimoto & Gallant 2011 J Neurosci ; gallantlab.org/voxelwise_tutorials
- TransNetV2 (Soucek & Lokoc 2020) — github.com/soCzech/TransNetV2 ; arXiv 2008.04838
- PySceneDetect (v0.6+) — github.com/Breakthrough/PySceneDetect ; scenedetect.com
- AutoShot (Zhu et al., CVPRW 2023) — arXiv 2304.06116 ; github.com/wentaoyu/AutoShot
- OpenCV Farneback / DIS dense optical flow — docs.opencv.org optical flow tutorial; Kroeger et al. DIS ECCV 2016
Action and activity recognition (video understanding)
Computational action/activity recognition for a movie/audio-story timeline splits into three usable layers: (1) clip-level recognition backbones that emit Kinetics/Something-Something class posteriors and/or pooled spatiotemporal embeddings over short sliding windows (VideoMAE V2, InternVideo2, V-JEPA 2, TimeSformer, VideoSwin, SlowFast), best run at a fixed window stride (e.g. 16 frames / 1-2 s) to produce per-second features; (2) temporal action localization (TAL) heads (ActionFormer / OpenTAD, typically fed InternVideo2 or VideoMAE features) that turn those per-window embeddings into start-end action segments with confidence; and (3) video-LLMs (Qwen3-VL, VideoLLaMA3, InternVL3, Video-LLaVA) that produce open-vocabulary dense event descriptions with timestamps, valuable for naturalistic film where a fixed label set is too restrictive. For a small lab the most leverage comes from: VideoMAE V2 / InternVideo2 as frozen feature extractors on a sliding window, X-CLIP for zero-shot open-vocabulary action probabilities, and one video-LLM for dense captioning. The pure clip classifiers (TimeSformer/VideoSwin/SlowFast) are now largely superseded as standalone choices but remain valuable as the standard, well-documented MMAction2/PySlowFast backbones and as TAL feature sources.
| Tool | Measures | Per-timepoint output | Modality | Granularity | Local | Rating | Rec |
|---|---|---|---|---|---|---|---|
| VideoMAE V2 (OpenGVLab, CVPR 2023; ViT-B/L/g, UnlabeledHybrid-1M pretrain, K400/K710 finetune) | Self-supervised masked-autoencoder video backbone; clip-level human action class and a strong pooled spatiotemporal embedding over a short window | Per-window (16 frames) 400-dim Kinetics-400 (or 710) action softmax posteriors AND/OR a frozen pooled embedding (768-dim ViT-B, 1024-dim ViT-L, 1408-dim ViT-g) used as the de facto feature for downstream TAL | video-clip | per-clip (sliding 16-frame window; emit per-second by striding) | yes-gpu | best-in-class | include |
| InternVideo2 (OpenGVLab, ECCV 2024; Stage2 1B & 6B, video-text contrastive) | Large multimodal video foundation model; SOTA clip-level action recognition, zero-shot/open-vocabulary action classification via video-text matching, and the strongest published TAL feature extractor | Per-window video embedding (aligned to a text embedding space) giving zero-shot similarity scores to an arbitrary action-label vocabulary; supervised K400/SSv2 class posteriors; pooled features (1B/6B) feeding ActionFormer-style TAL | multimodal | per-clip (sliding window; emit per-second by striding) | yes-heavy-gpu | best-in-class | include |
| V-JEPA 2 (Meta AI, June 2025; ViT-L/H/g, facebook/vjepa2-vitl-fpc64-256) | Self-supervised (non-generative, latent-prediction) video world model; motion-centric spatiotemporal representations strong on temporal/motion understanding and action anticipation | Frozen per-window spatiotemporal embedding (attentive-probe gives action class posteriors, e.g. SSv2/EK100); supports action-anticipation (recall@5) outputs; embeddings usable as motion-rich timeline features | video-clip | per-clip (16-/64-frame window; stride for per-second) | yes-gpu | strong | include-if-resources |
| X-CLIP (Microsoft, ECCV 2022; microsoft/xclip-base-patch16/32, zero-shot variant) | CLIP extended to video with cross-frame attention; open-vocabulary / zero-shot clip-level action classification via video-text similarity | Per-window similarity score (softmax) over an ARBITRARY user-supplied list of action phrases; or 512-dim joint video embedding for retrieval | multimodal | per-clip (8-frame window; stride for per-second) | yes-gpu | strong | include |
| ActionFormer + OpenTAD (ECCV 2022 / CVPR-W 2025; TAL on InternVideo2/VideoMAE features) | Temporal action localization: converts per-window backbone features into time-stamped action segments with class and confidence (single-shot, anchor-free, multiscale local attention) | List of (start_time, end_time, action_class, confidence) segments per video; densely covers the timeline, directly alignable to a movie clock | video-clip | per-shot / per-segment (boundaries at sub-second precision) | yes-gpu | best-in-class | include |
| Qwen3-VL (Alibaba, 2025; 4B/8B/30B/235B, video; predecessor Qwen2.5-VL) | Video-LLM for open-vocabulary dense event description and temporal grounding; describes what people are doing and localizes it in time via text-timestamp alignment | Free-text dense captions and event segmentations with explicit start/end timestamps (Text-Timestamp Alignment); answers ‘what action happens between t1-t2’; temporal grounding outputs (Charades-STA style) | multimodal | per-utterance / per-event (model-emitted timestamps, ~second precision) | yes-gpu | best-in-class | include |
| VideoLLaMA3 (DAMO/Alibaba, 2025; 2B/7B) | Unified image+video LLM specialized for temporal grounding and dense video captioning | Dense captions with start-end token timestamps; temporal grounding on ActivityNet/YouCook2/Charades-STA/Ego4D/COIN; open-vocabulary action/event descriptions per timestamped span | multimodal | per-event / per-utterance (start-end token timestamps) | yes-gpu | strong | alternative |
| InternVL3 (video) (OpenGVLab/Shanghai AI Lab, 2025; 1B-78B) | General multimodal LLM with competitive video understanding; open-vocabulary event/action description and video QA over sampled frames | Free-text descriptions of actions/activities for a queried window; video QA answers; can be prompted for timestamped event lists (weaker native timestamp grounding than Qwen3-VL) | multimodal | per-clip / per-event (prompt-dependent) | yes-gpu | strong | alternative |
| TimeSformer / VideoSwin / SlowFast (via MMAction2 + PySlowFast) | Classic supervised clip-level action classifiers (divided space-time attention / hierarchical 3D-window transformer / dual-pathway 3D-CNN); emit Kinetics/SSv2 action posteriors | Per-window action softmax posteriors (e.g. 400-dim K400, 174-dim Something-Something v2) and pooled clip embeddings; SlowFast features were the long-time standard TAL input before VideoMAE/InternVideo2 | video-clip | per-clip (8-32 frame window; stride for per-second) | yes-gpu | usable | include-if-resources |
Recommended (best-in-class): VideoMAE V2 (ViT-L/g) or InternVideo2-1B as the frozen sliding-window feature extractor + Kinetics classifier; X-CLIP for lightweight zero-shot open-vocabulary action probabilities over a custom film vocabulary; ActionFormer/OpenTAD over InternVideo2/VideoMAE features for timestamped action segments; Qwen3-VL (8B) as the primary video-LLM for open-vocabulary dense, timestamped event description
Likely redundant:
- TimeSformer / VideoSwin / SlowFast as standalone recognizers -> superseded by VideoMAE V2 and InternVideo2 (keep only for the convenient MMAction2/PySlowFast pipeline or as legacy TAL features)
- InternVL3 (video) and VideoLLaMA3 -> overlap with Qwen3-VL for dense captioning/temporal grounding; pick one video-LLM as primary (Qwen3-VL has the strongest native timestamp grounding)
- X-CLIP zero-shot vs InternVideo2 zero-shot -> same open-vocabulary role; InternVideo2 is more accurate but far heavier, X-CLIP is the cheap default
- V-JEPA 2 vs VideoMAE V2 -> both self-supervised backbones; V-JEPA 2 is the more motion/temporal-biased complement, not a strict duplicate
Open questions:
- Licensing: VideoMAE V2 and InternVideo2 weights are non-commercial/research only; confirm this is acceptable for the project’s use and publication plans.
- Window stride and temporal resolution: clip backbones natively output per-16-frame (~0.5-1 s) features; the target second-by-second cadence requires choosing stride/overlap and a pooling rule that needs to be standardized across features.
- Label taxonomy: Kinetics-400/700 and Something-Something classes are everyday/atomic actions and may map poorly onto narrative-film events; decide whether to rely on TAL with a custom taxonomy vs open-vocabulary X-CLIP/video-LLM outputs.
- Video-LLM timestamp reliability: Qwen3-VL/VideoLLaMA3 emit timestamps but their second-level accuracy on long naturalistic films is not well validated; may need calibration against TAL or manual spot-checks.
- Compute budget: InternVideo2-6B and Qwen3-VL-30B+ exceed a single-GPU small-lab setup; confirm whether 1B/8B-class models suffice for the required annotation quality.
References
- VideoMAE V2 (OpenGVLab, CVPR 2023; ViT-B/L/g, UnlabeledHybrid-1M pretrain, K400/K710 finetune) — arXiv:2303.16727; HF OpenGVLab/VideoMAEv2-giant; github.com/OpenGVLab/VideoMAEv2
- InternVideo2 (OpenGVLab, ECCV 2024; Stage2 1B & 6B, video-text contrastive) — arXiv:2403.15377; ECCV 2024; HF collection OpenGVLab/InternVideo2
- V-JEPA 2 (Meta AI, June 2025; ViT-L/H/g, facebook/vjepa2-vitl-fpc64-256) — arXiv:2506.09985; ai.meta.com/blog/v-jepa-2-world-model-benchmarks; HF facebook/vjepa2-vitl-fpc64-256
- X-CLIP (Microsoft, ECCV 2022; microsoft/xclip-base-patch16/32, zero-shot variant) — arXiv:2208.02816; HF docs/transformers model_doc/xclip
- ActionFormer + OpenTAD (ECCV 2022 / CVPR-W 2025; TAL on InternVideo2/VideoMAE features) — arXiv:2202.07925; OpenTAD arXiv:2502.20361; github.com/OpenGVLab/OpenTAD
- Qwen3-VL (Alibaba, 2025; 4B/8B/30B/235B, video; predecessor Qwen2.5-VL) — Qwen3-VL Technical Report arXiv:2511.21631; github.com/QwenLM/Qwen3-VL
- VideoLLaMA3 (DAMO/Alibaba, 2025; 2B/7B) — arXiv:2501.13106; HF DAMO-NLP-SG/VideoLLaMA3
- InternVL3 (video) (OpenGVLab/Shanghai AI Lab, 2025; 1B-78B) — arXiv:2504.10479; HF OpenGVLab/InternVL3
- TimeSformer / VideoSwin / SlowFast (via MMAction2 + PySlowFast) — TimeSformer arXiv:2102.05095; Video Swin arXiv:2106.13230; SlowFast arXiv:1812.03982; github.com/open-mmlab/mmaction2
Visual saliency, attention, aesthetics, depth
This subclass produces per-frame attention/complexity proxies: predicted human fixation/saliency maps (static and video), monocular depth maps, and scalar image-level scores for aesthetics, technical quality, and memorability. For a movie/audio-story timeline, the most timeline-relevant outputs are spatiotemporal video-saliency maps (one map per frame, summarizable to scalars like saliency concentration/entropy and number-of-salient-regions) and depth maps (mean/range/foreground-fraction per frame). The field is mature and overwhelmingly open-source: DeepGaze IIE/III for static fixation, ViNet/TASED-Net/UNISAL for video saliency, Depth-Anything-V2 (and Apple Depth Pro for metric) for depth, and CLIP/LMM-based scorers (Q-Align, LAION-Aesthetics, ResMem) for aesthetics/quality/memorability. All run on a single consumer GPU; most also run on CPU slowly. Recommend one video-saliency model + one depth model + one aesthetics/quality scorer + memorability as the core, with static-image saliency only as an alternative.
| Tool | Measures | Per-timepoint output | Modality | Granularity | Local | Rating | Rec |
|---|---|---|---|---|---|---|---|
| DeepGaze IIE (Linardos et al., ICCV 2021) | Static per-image predicted human fixation density (free-viewing saliency), well-calibrated in/out-of-domain | Single-channel probabilistic saliency/fixation-density map per frame (log-density, normalizes to a spatial probability distribution); derive scalars: saliency entropy/dispersion, peak saliency, center-of-mass, top-k salient-region count | video-frame | frame (applied independently per frame) | yes-gpu | strong | alternative |
| TASED-Net (Min & Corso, ICCV 2019) | Video spatiotemporal saliency: predicted fixation map for the current frame given a clip, capturing motion-driven attention | Per-frame single-channel saliency map (0-1); scalars: saliency concentration/entropy, peak location & value, salient-area fraction, frame-to-frame saliency-shift (proxy for attention reorienting) | video-clip | frame (sliding window of ~32 frames -> one output map per frame) | yes-gpu | strong | alternative |
| ViNet / ViNet-S+ViNet-A ensemble (Jain et al., IROS 2021; updated) | Video (and audio-visual) saliency: predicted dynamic fixation maps, current SOTA on multiple DHF1K/Hollywood2/AViMoS-style benchmarks | Per-frame single-channel saliency map; scalars as for TASED-Net (concentration/entropy, peak, salient-area fraction, temporal saliency shift). Audio-visual variant (ViNet-A) integrates the soundtrack | video-clip | frame (clip-based, one map per frame) | yes-gpu | best-in-class | include |
| UNISAL (Droste et al., ECCV 2020) | Unified image+video saliency with one model; predicted fixation maps for both stills and clips | Per-frame saliency map (0-1) plus same derived scalars; handles static frames and video in one network | video-clip | frame (video) / per-image (stills) | yes-gpu | strong | alternative |
| Depth-Anything-V2 (Yang et al., NeurIPS 2024) | Monocular (relative, optionally metric) depth per pixel; foundation MDE model, robust across scenes | Dense per-pixel depth/inverse-depth map per frame; scalars: mean/median depth, depth range, foreground-fraction (near-camera pixels), depth entropy/layering, depth gradient (spatial complexity). Metric checkpoints give meters | video-frame | frame (per frame independently) | yes-gpu | best-in-class | include |
| Apple Depth Pro (Bochkovskii et al., 2024) | Sharp zero-shot metric (absolute, in meters) monocular depth with high-frequency boundary detail, no camera intrinsics needed | Per-pixel metric depth map (meters) per frame; same scalars as Depth-Anything plus true-scale foreground distance and absolute depth-range in meters | video-frame | frame | yes-gpu | strong | include-if-resources |
| Q-Align / OneAlign (Wu et al., ICML 2024) | Image (and video) technical quality (IQA) and aesthetic quality (IAA) via an LMM scoring against discrete text-defined levels; SOTA unified scorer | Per-frame scalar quality score and scalar aesthetic score (continuous, derived from rating-level probabilities); VQA variant gives per-clip quality | video-frame | frame (per frame) / per-clip (VQA mode) | yes-heavy-gpu | best-in-class | include |
| LAION-Aesthetics Predictor V2 (improved-aesthetic-predictor) | Image aesthetic appeal as a single scalar (the score used to filter LAION/Stable-Diffusion training data) | Per-frame scalar aesthetic score (~1-10); cheap aesthetics proxy over a timeline | video-frame | frame | yes-cpu | usable | alternative |
| CLIP-IQA / QualiCLIP | No-reference technical image quality (and perceptual attributes) via CLIP text-image alignment, opinion-unaware | Per-frame scalar quality score (0-1); antonym-prompt variants also yield attribute scores (sharp/blurry, bright/dark, natural) | video-frame | frame | yes-gpu | usable | alternative |
| ResMem (Needell & Bainbridge, 2022) | Intrinsic image memorability: predicted probability an image will be remembered | Per-frame scalar memorability score (0-1, LaMem-calibrated) | video-frame | frame | yes-cpu | strong | include |
| IQA-PyTorch (toolkit, chaofengc) | Not a single model: a unified library exposing 40+ no-reference IQA/IAA metrics (CLIP-IQA, MUSIQ, NIMA, DBCNN, LAION-AES, MANIQA, etc.) under one API | Per-frame scalar quality/aesthetic scores from whichever metric is selected; convenient for emitting several quality scalars at once | video-frame | frame | yes-gpu | strong | include-if-resources |
Recommended (best-in-class): ViNet (or ViNet-A for audio-visual) for per-frame video saliency maps -> saliency concentration/entropy, peak, salient-area, temporal shift; Depth-Anything-V2 for per-frame relative depth (add Apple Depth Pro only if metric/meters depth is needed) -> mean/range depth, foreground-fraction, depth complexity; Q-Align/OneAlign for combined per-frame aesthetic + technical-quality scalars (subsample to ~1 fps), with IQA-PyTorch (MUSIQ/NIMA/LAION-AES) as a lightweight fallback; ResMem for per-frame image-memorability scalar
Likely redundant:
- MiDaS / DPT / ZoeDepth — superseded by Depth-Anything-V2 (relative) and Apple Depth Pro (metric)
- TASED-Net and UNISAL — same video-saliency output as ViNet; pick one (ViNet best accuracy, UNISAL lightest)
- DeepGaze IIE/III (static fixation) — for video timelines superseded by motion-aware video-saliency models; keep only as a pure static-image attention proxy
- LAION-Aesthetics V2 and CLIP-IQA/QualiCLIP — subsumed by Q-Align’s IAA/IQA branches (use them only as lightweight substitutes when the 7B LMM is too heavy)
- MemNet / ResMem-Net — older or less-standardized memorability predictors superseded by the maintained, pip-installable ResMem
References
- DeepGaze IIE (Linardos et al., ICCV 2021) — arXiv:2105.12441; github.com/matthias-k/DeepGaze
- TASED-Net (Min & Corso, ICCV 2019) — arXiv:1908.05786; github.com/MichiganCOG/TASED-Net
- ViNet / ViNet-S+ViNet-A ensemble (Jain et al., IROS 2021; updated) — arXiv:2012.06170; github.com/samyak0210/ViNet; AIM 2024 Video Saliency Challenge (ECCV-W)
- UNISAL (Droste et al., ECCV 2020) — arXiv:2003.05477; github.com/rdroste/unisal
- Depth-Anything-V2 (Yang et al., NeurIPS 2024) — arXiv:2406.09414; github.com/DepthAnything/Depth-Anything-V2
- Apple Depth Pro (Bochkovskii et al., 2024) — arXiv:2410.02073; github.com/apple/ml-depth-pro
- Q-Align / OneAlign (Wu et al., ICML 2024) — arXiv:2312.17090; github.com/Q-Future/Q-Align; q-align.github.io
- LAION-Aesthetics Predictor V2 (improved-aesthetic-predictor) — github.com/christophschuhmann/improved-aesthetic-predictor; LAION-5B
- CLIP-IQA / QualiCLIP — CLIP-IQA arXiv:2207.12396; QualiCLIP github.com/miccunifi/QualiCLIP; IQA-PyTorch
- ResMem (Needell & Bainbridge, 2022) — Needell & Bainbridge 2022; github.com/Brain-Bridge-Lab/resmem; LaMem dataset
- IQA-PyTorch (toolkit, chaofengc) — github.com/chaofengc/IQA-PyTorch (pyiqa)