Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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.

ToolMeasuresPer-timepoint outputModalityGranularityLocalRatingRec
scikit-image (skimage) 0.24/0.25 + NumPyGeneral-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-frameframeyes-cpubest-in-classinclude
OpenCV (cv2) 4.xFast 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-frameframeyes-cpubest-in-classinclude
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-frameframeyes-cpustronginclude
pyrtools (LabForComputationalVision) / matlabPyrToolsMulti-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-frameframeyes-cpustronginclude
Rosenholtz Feature Congestion + Subband Entropy clutter measuresTwo 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-frameframeyes-cpustronginclude
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-frameframeyes-cpustronginclude
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-frameframeyes-cpuusableinclude-if-resources
pliers (PsychoinformaticsLab) low-level image extractorsOrchestration 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-frameframeyes-cpuusableinclude

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.

ToolMeasuresPer-timepoint outputModalityGranularityLocalRatingRec
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-frameframe (run on sampled frames, e.g. 1-4 fps, aligned to timeline)yes-gpubest-in-classinclude
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-frameframeyes-gpubest-in-classinclude
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-frameframeyes-gpubest-in-classinclude
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-frameframeyes-gpubest-in-classinclude
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-frameframeyes-gpustrongalternative
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-frameframe / per-shot (run on sampled keyframes; also natively handles short clips)yes-gpubest-in-classinclude
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-frameframe / per-shotyes-gpustrongalternative
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-frameframeyes-cpuusableinclude-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-frameframeyes-gpustronginclude
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-clipframe (with temporal mask propagation across the clip)yes-gpustronginclude-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.

ToolMeasuresPer-timepoint outputModalityGranularityLocalRatingRec
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-frameper-frame (per detected face)yes-gpubest-in-classinclude
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-frameper-frameyes-cpustrongalternative
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-frameper-frameyes-cpustronginclude
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-frameper-frameyes-cpubest-in-classinclude
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-frameper-frameyes-cpuusablealternative
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-frameper-frameyes-gpustronginclude
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-frameper-frameyes-gpustronginclude-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-frameper-frame (per person)yes-gpubest-in-classinclude
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-frameper-frame (per person)yes-heavy-gpustrongalternative
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-frameper-frame (aggregable per-utterance/clip)yes-cpustronginclude
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-frameper-frameyes-gpuusablealternative

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).

ToolMeasuresPer-timepoint outputModalityGranularityLocalRatingRec
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 modelsPer-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 magnitudevideo-frameframe (per consecutive frame pair)yes-gpubest-in-classinclude
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-frameframeyes-gpustrongalternative
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-timePer-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 seriesvideo-clipframe (with temporal context)yes-gpustronginclude-if-resources
VideoFlow (Shi et al., ICCV 2023)Multi-frame (tri-frame TROF + propagation) optical flow exploiting temporal cues; high accuracy on Sintel/KITTIBi-directional per-pixel (u,v) flow across multiple frames; derived per-frame motion magnitude/orientation seriesvideo-clipframe (multi-frame context)yes-gpuusabledrop
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 scalarsvideo-frameframe (configurable; commonly downsampled to per-second or TR)yes-cpubest-in-classinclude
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 boundariesPer-frame cut probability (0-1); thresholded list of shot boundary frame indices and shot segments; handles gradual transitions, flashes, motion blurvideo-clipper-frame probability yielding per-shot segmentationyes-gpubest-in-classinclude
PySceneDetect (v0.6+)Shot/cut detection via content-aware HSV histogram change (ContentDetector) or adaptive/threshold detectors; lightweight CPU toolList 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-frameper-frame change score; per-shot segmentationyes-cpustronginclude
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 distributionPer-frame shot-boundary scores and shot segmentsvideo-clipper-frame / per-shotyes-gpuusablealternative
OpenCV Farneback / DIS dense optical flowClassical (non-deep) dense optical flow — Farneback polynomial expansion or DISOpticalFlow; CPU-only fallback when no GPU is availablePer-pixel (u,v) flow field; derived per-frame mean magnitude and orientation histogramsvideo-frameframeyes-cpuusablealternative

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.

ToolMeasuresPer-timepoint outputModalityGranularityLocalRatingRec
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 windowPer-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 TALvideo-clipper-clip (sliding 16-frame window; emit per-second by striding)yes-gpubest-in-classinclude
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 extractorPer-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 TALmultimodalper-clip (sliding window; emit per-second by striding)yes-heavy-gpubest-in-classinclude
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 anticipationFrozen 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 featuresvideo-clipper-clip (16-/64-frame window; stride for per-second)yes-gpustronginclude-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 similarityPer-window similarity score (softmax) over an ARBITRARY user-supplied list of action phrases; or 512-dim joint video embedding for retrievalmultimodalper-clip (8-frame window; stride for per-second)yes-gpustronginclude
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 clockvideo-clipper-shot / per-segment (boundaries at sub-second precision)yes-gpubest-in-classinclude
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 alignmentFree-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)multimodalper-utterance / per-event (model-emitted timestamps, ~second precision)yes-gpubest-in-classinclude
VideoLLaMA3 (DAMO/Alibaba, 2025; 2B/7B)Unified image+video LLM specialized for temporal grounding and dense video captioningDense captions with start-end token timestamps; temporal grounding on ActivityNet/YouCook2/Charades-STA/Ego4D/COIN; open-vocabulary action/event descriptions per timestamped spanmultimodalper-event / per-utterance (start-end token timestamps)yes-gpustrongalternative
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 framesFree-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)multimodalper-clip / per-event (prompt-dependent)yes-gpustrongalternative
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 posteriorsPer-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/InternVideo2video-clipper-clip (8-32 frame window; stride for per-second)yes-gpuusableinclude-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.

ToolMeasuresPer-timepoint outputModalityGranularityLocalRatingRec
DeepGaze IIE (Linardos et al., ICCV 2021)Static per-image predicted human fixation density (free-viewing saliency), well-calibrated in/out-of-domainSingle-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 countvideo-frameframe (applied independently per frame)yes-gpustrongalternative
TASED-Net (Min & Corso, ICCV 2019)Video spatiotemporal saliency: predicted fixation map for the current frame given a clip, capturing motion-driven attentionPer-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-clipframe (sliding window of ~32 frames -> one output map per frame)yes-gpustrongalternative
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 benchmarksPer-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 soundtrackvideo-clipframe (clip-based, one map per frame)yes-gpubest-in-classinclude
UNISAL (Droste et al., ECCV 2020)Unified image+video saliency with one model; predicted fixation maps for both stills and clipsPer-frame saliency map (0-1) plus same derived scalars; handles static frames and video in one networkvideo-clipframe (video) / per-image (stills)yes-gpustrongalternative
Depth-Anything-V2 (Yang et al., NeurIPS 2024)Monocular (relative, optionally metric) depth per pixel; foundation MDE model, robust across scenesDense 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 metersvideo-frameframe (per frame independently)yes-gpubest-in-classinclude
Apple Depth Pro (Bochkovskii et al., 2024)Sharp zero-shot metric (absolute, in meters) monocular depth with high-frequency boundary detail, no camera intrinsics neededPer-pixel metric depth map (meters) per frame; same scalars as Depth-Anything plus true-scale foreground distance and absolute depth-range in metersvideo-frameframeyes-gpustronginclude-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 scorerPer-frame scalar quality score and scalar aesthetic score (continuous, derived from rating-level probabilities); VQA variant gives per-clip qualityvideo-frameframe (per frame) / per-clip (VQA mode)yes-heavy-gpubest-in-classinclude
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 timelinevideo-frameframeyes-cpuusablealternative
CLIP-IQA / QualiCLIPNo-reference technical image quality (and perceptual attributes) via CLIP text-image alignment, opinion-unawarePer-frame scalar quality score (0-1); antonym-prompt variants also yield attribute scores (sharp/blurry, bright/dark, natural)video-frameframeyes-gpuusablealternative
ResMem (Needell & Bainbridge, 2022)Intrinsic image memorability: predicted probability an image will be rememberedPer-frame scalar memorability score (0-1, LaMem-calibrated)video-frameframeyes-cpustronginclude
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 APIPer-frame scalar quality/aesthetic scores from whichever metric is selected; convenient for emitting several quality scalars at oncevideo-frameframeyes-gpustronginclude-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)