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

Redundancy & Parsimony Analysis

Redundancy & Parsimony Analysis: Computational Narrative Feature Extraction

This analysis identifies redundant or highly-correlated feature extractors across the 16 catalogs, recommends a single best-in-class option per redundancy group, flags cases where keeping two is justified by genuinely distinct information, and ends with a MINIMAL tractable set vs. a FULL set.


A. WITHIN-SUBCLASS REDUNDANCY

These are pairs/groups producing near-identical outputs. Keep one; the rest are interchangeable variants.

#Redundant groupWhy correlatedKEEP (best-in-class)Drop / conditional
1scikit-image vs OpenCV (color/edge/FFT)Same pixel-level operatorsscikit-image + OpenCV together as one engine (OpenCV for decode/speed, skimage for stats)Treat as a single tool, not two features
2OpenCV Gabor bank vs pyrtools vs GISTAll = oriented spatial-frequency energypyrtools (principled steerable pyramid)GIST only if a compact fixed-length holistic vector is wanted; drop OpenCV Gabor
3Global entropy / edge density vs Rosenholtz clutterWeak vs strong clutter proxiesRosenholtz Feature-Congestion + Subband-EntropyEntropy/edge density redundant as clutter
4OpenCLIP vs SigLIP 2Same open-vocab text-probe roleSigLIP 2Drop OpenCLIP (run one)
5Places365 / ImageNet CNNs vs CLIP/SigLIP probingSame scene/object categoriesSigLIP 2 zero-shot probeKeep Places365 ONLY for a frozen, reproducible fixed-taxonomy vector
6Qwen2.5/3-VL vs InternVL3 vs LLaVA-OneVision vs VideoLLaMA3Interchangeable captioning/VQA VLMsQwen-VL (2.5 image / 3 video)Drop others as primary; one API judge for validation only
7YOLO-World vs Grounding DINOSame open-vocab detectionGrounding DINO (accuracy)YOLO-World only when per-frame throughput is the bottleneck
8SAM 2 vs Mask2Former (static panoptic)Overlapping segmentationMask2Former for compositionSAM 2 only for video-consistent tracking / Grounded-SAM
9OpenFace 2.0 vs OpenFace 3.0SupersededOpenFace 3.0OpenFace 2.0 legacy/AU-scale reproduction only
10Standalone RetinaFace vs InsightFaceInsightFace bundles RetinaFaceInsightFace buffalo_lDrop standalone RetinaFace
11ViTPose vs MMPose RTMPose/RTMWSame keypointsMMPose RTMPose/RTMWViTPose only for max-accuracy on strong GPU
12EmoNet vs HSEmotion (face V/A)Same face valence-arousalHSEmotion/EmotiEffLibEmoNet citable cross-check only
13RAFT / MemFlow / VideoFlow / Farneback vs SEA-RAFTSame dense flowSEA-RAFTMemFlow if temporal smoothing needed; Farneback = no-GPU fallback
14AutoShot vs TransNetV2Same shot detectionTransNetV2 (+ PySceneDetect CPU prior)Drop AutoShot
15TimeSformer/VideoSwin/SlowFast vs VideoMAE V2 / InternVideo2Superseded clip classifiersVideoMAE V2 (+ InternVideo2)Legacy backbones for TAL features only
16X-CLIP vs InternVideo2 zero-shotSame open-vocab action roleX-CLIP (cheap default)InternVideo2 zero-shot if accuracy needed
17MiDaS/DPT/ZoeDepth vs Depth-Anything-V2Superseded depthDepth-Anything-V2Apple Depth Pro only if metric (meters) needed
18TASED-Net / UNISAL vs ViNetSame video saliencyViNet (ViNet-A for audio-visual)UNISAL if lightest needed
19DeepGaze (static) vs ViNet (video)Static superseded for videoViNetDeepGaze only as pure static attention proxy
20LAION-Aesthetics / CLIP-IQA vs Q-AlignSubsumed by Q-Align IAA/IQAQ-Align/OneAlignLightweight fallbacks when 7B LMM too heavy
21torchaudio / Essentia spectral/MFCC vs librosaSame DSP descriptorslibrosa (primary MIR)Essentia for roughness/beat; torchaudio if GPU/differentiable
22librosa pyin / torchaudio pitch vs CREPE/PraatWeaker F0Praat (Parselmouth) + CREPEDrop pyin/torchaudio F0
23openSMILE jitter/shimmer/HNR vs ParselmouthSame voice qualityParselmouth (canonical)openSMILE for standardized 88-dim eGeMAPS summary
24AST / PANNs / YAMNet vs BEATs / PaSSTHighly correlated 527-classBEATs (one primary tagger)PANNs for framewise SED; YAMNet CPU-only
25Essentia tempo vs madmom/Beat This!Overlapping beat trackingmadmom / Beat This!Essentia tempo redundant
26openai-whisper / whisper.cpp / insanely-fast vs faster-whisperSame weightsfaster-whisper + WhisperXDrop variants
27pyannote 3.1 vs community-1Supersededpyannote community-1 (3.1 in social catalog)Use newest
28WebRTC VAD / audiotok vs Silero/pyannote VADSupersededSilero VADDrop old VADs
29NeMo ASR / emotion2vec+ vs Whisper/audEERINGOverlapping defaultsfaster-whisper + audEERING wav2vec2-dimNeMo for multilingual; emotion2vec+ for categorical
30NLTK vs spaCySupersededspaCy (trf)NLTK for WordNet synsets only
31surprisal pkg vs miniconsDirect overlapminiconsPick one
32ANEW / MRC / Glasgow vs Warriner / Brysbaert / KupermanSmaller-coverage norm setsWarriner VAD + Brysbaert + Kuperman + NRC-VADGlasgow for imageability/size only
33Trankit / supar vs spaCy / Stanza / beneparOverlapping parsersspaCy + Stanza + beneparTrankit for multilingual seg; supar for CRF marginals
34fastcoref vs MaverickSuperseded on accuracyMaverickfastcoref for high-throughput batch
35textstat vs L2SCASurface vs deep complexityL2SCA (+ Yngve/Frazier)textstat cheap sliding-window scalar
36multilingual-e5 / GTE / BGE / API embeddings vs Qwen3-EmbeddingInterchangeable encodersQwen3-EmbeddingPick one; API only if leaderboard-topping required
37DMRST / TRIPOD turning-point vs instruction-tuned LLMSubsumed by LLM extractorInstruction-tuned LLMSupervised models only when reproducible labels required
38BrainIAK HMM vs GSBSOverlapping boundary detectorsGSBS (auto-K, faster)HMM for soft event posteriors / reactivation
39MovieCLIP vs zero-shot CLIP / Places365Overlapping setting taxonomySigLIP/CLIP zero-shotMovieCLIP if 179-cinematic taxonomy fits
40TalkNet-ASD vs Light-ASD/LR-ASDSame task, 23x paramsLight-ASD/LR-ASDDrop TalkNet
41OpenPose vs RTMPose/ViTPoseLegacyRTMPoseDrop OpenPose
42Emotion-LLaMA vs AffectGPT vs general MLLMOverlapping fusion/reasoningOne MLLM (Qwen-VL or GPT-4o)Emotion-LLaMA for benchmarked labels; AffectGPT for open-vocab — not all three

B. CROSS-SUBCLASS REDUNDANCY

These span catalogs and are the easiest savings to miss. The same underlying model or signal appears in multiple subclasses.

#Appears inRedundant signalResolution
C1Faces, Affect, SocialFace emotion (Py-Feat / OpenFace 3.0 / HSEmotion / EmoNet)Run HSEmotion once; feed its output to both the Affect and Social streams. Do not extract face emotion separately per catalog.
C2Faces, Speech, AffectVocal affect (HSEmotion audio? no — audEERING wav2vec2-dim) appears in Audio-Speech AND AffectRun audEERING wav2vec2-dim once; shared by both
C3Speech, SocialDiarization (pyannote)One pyannote run feeds ASR-speaker-attribution AND social speaker-turn graph
C4Speech, Low-level acoustic, AffectProsody / F0 / voice quality (Parselmouth, openSMILE)One Parselmouth + openSMILE pass; resample for all three uses
C5Faces, Social, Dynamic visualBody pose (MMPose RTMPose)One pose run feeds gesture (Faces), proximity/touch (Social)
C6Faces, SocialGaze (OpenFace 3.0 / L2CS-Net / Gaze-LLE)L2CS-Net or Gaze-LLE once; mutual-gaze/joint-attention derived for Social
C7Faces, Social, High-level objectsFace detect + identity (InsightFace)Single InsightFace track feeds character count/identity everywhere
C8Dynamic visual, Situation, ActionShot/cut boundaries (TransNetV2 / PySceneDetect)Run once; shared event-boundary prior
C9Action, Situation, Social, AffectVideo-LLM (Qwen-VL)A single Qwen-VL pass per shot with a combined multi-field prompt schema (action + situation + social + emotion) replaces 4 separate VLM passes. This is the single biggest compute saving.
C10High-level visual, SituationScene/place recognition (CLIP / Places365)One SigLIP probe with merged label set
C11Semantics, Affect (text), LexicalText/dialogue affect (RoBERTa-GoEmotions, NRC-VAD, Warriner)Lexical-VAD lookups and GoEmotions shared across Language-Lexical and Affect
C12Semantics, AffectAutoregressive LLM surprisal (minicons GPT-2/Llama)One extractor; surprisal used as both a comprehension feature (Semantics) and arousal proxy
C13Audio high-level, Audio low-level, AffectMusic emotion / MIR (Essentia, MERT)Essentia run once feeds tempo/key (MIR) and valence-arousal (Affect)
C14Low-level visual, High-level visualCLIP early-layer / orientation energyAnalytic features (pyrtools) for low-level; CLIP reserved for mid/high-level — do not duplicate

C. CASES WHERE KEEPING TWO IS JUSTIFIED (distinct information)

These are NOT redundant despite surface similarity — log as separate streams.

PairWhy both are needed
DINOv2/DINOv3 + SigLIP 2Label-free self-supervised dense embedding (RSA, no human labels) vs. text-probed interpretable concept scores — genuinely different representations
VideoMAE V2 + V-JEPA 2Both self-supervised, but V-JEPA 2 is motion/temporal-biased; complementary, not duplicate
pymoten (motion energy) + SEA-RAFT (optical flow)Brain-aligned filter-bank regressor vs. interpretable camera-vs-object flow decomposition — different scientific uses
Action recognition (VideoMAE) + low-level motion (SEA-RAFT/pymoten)Semantic “what action” vs. pre-semantic “how much motion” — deliberately separate layers
Depicted emotion (face/voice/text models) + ELICITED emotion (LIRIS-ACCEDE/MuSe regressor)Character-expressed affect vs. viewer-induced affect — correlated but NOT interchangeable; must be distinct streams
Per-modality affect (wav2vec2 + HSEmotion + GoEmotions) + fusion MLLMInterpretable unimodal signals as primary features; MLLM as an added reasoned/fused layer, not a replacement
CREPE + Parselmouth F0CREPE cleaner on noisy/creaky speech; Praat canonical for voice-science jitter/shimmer/HNR — keep Praat for voice quality, CREPE for robust pitch contour
openSMILE eGeMAPS + ParselmouthopenSMILE’s standardized 88-dim affective-computing summary vs. Praat’s per-frame canonical contours
Mask2Former (panoptic composition) + Grounding DINO (object boxes/counts)Area-fraction scene composition vs. discrete object presence/counts/positions
BEATs (AudioSet events) + CLAP (open-vocab prompts)Fixed 527-class calibrated tagging vs. arbitrary custom text-prompt similarity
inaSpeechSegmenter + pyannote diarizationSpeech/music/noise segmentation vs. who-spoke-when speaker turns — different partitions
Lexical surprisal (LLM) + lexical norms (frequency/concreteness/AoA/VAD)Contextual prediction-error vs. context-free word properties
spaCy (CLEAR/fast) + Stanza (true UD)Justified only if cross-tool UD-scheme complexity metrics are needed; otherwise pick one
GSBS + BrainIAK HMMGSBS for hard boundaries/auto-K; HMM only if soft posteriors / reactivation modeling is the goal

MINIMAL TRACTABLE SET (single consumer GPU + CPU; one-pass-per-modality)

The design principle: one extractor per signal, one shared VLM pass, maximal cross-subclass reuse.

Visual — low-level

  • scikit-image + OpenCV core (luminance, RMS contrast, RGB/HSV/CIELAB color, entropy, edges, FFT slope, Hasler-Susstrunk colorfulness)
  • pyrtools steerable pyramid (orientation × scale energy)

Visual — dynamic

  • SEA-RAFT (flow magnitude, camera-vs-object decomposition)
  • pymoten (brain-aligned motion energy regressor)
  • TransNetV2 + PySceneDetect (shot boundaries — shared with Situation/Action)

Visual — high-level / faces / action / saliency

  • SigLIP 2 (object/scene/place/attribute probes — shared with Situation)
  • DINOv2 (label-free embedding for RSA)
  • InsightFace (face count/identity — shared with Social)
  • OpenFace 3.0 (landmarks + AUs + gaze + emotion in one model — shared with Affect/Social)
  • MMPose RTMPose (pose — shared with Social)
  • VideoMAE V2 (sliding-window action posteriors + embeddings) + X-CLIP (zero-shot action)
  • ViNet (video saliency) + Depth-Anything-V2 (depth)

Audio

  • librosa (spectral/MFCC/chroma/onset/tempo)
  • openSMILE eGeMAPS (standardized 88-dim LLDs)
  • Parselmouth (F0, formants, jitter/shimmer/HNR)
  • BEATs (AudioSet events) + CLAP (open-vocab prompts)
  • inaSpeechSegmenter (speech/music/noise)
  • faster-whisper + WhisperX (ASR + word alignment)
  • pyannote community-1 (diarization — shared with Social)
  • audEERING wav2vec2-dim (vocal A/V/D — shared with Affect)

Language

  • spaCy trf (POS/dep/NER/morph)
  • wordfreq + Brysbaert + Kuperman + Warriner/NRC-VAD + NRC-EmoLex (lexical norms — shared with Affect)
  • minicons GPT-2/Llama (surprisal + hidden states — shared with Semantics)
  • benepar + L2SCA (syntactic complexity)
  • Maverick (coreference)
  • Qwen3-Embedding + sliding-window coherence/drift + BERTopic (semantics)
  • RoBERTa-GoEmotions (dialogue affect — shared with Affect)

Situation / Social / Affect (mostly via shared passes)

  • GSBS (data-driven event segmentation on the embedding timeline)
  • Light-ASD (active speaker)
  • Gaze-LLE (joint/mutual attention)
  • HSEmotion (face V/A — or reuse OpenFace 3.0 emotion)
  • One Qwen2.5/3-VL pass per shot with a combined JSON schema covering: dense action/event description + situational dimensions (space/time/causation/intention/protagonist) + social interaction-type/dominance/affiliation/ToM + depicted emotion. This single pass replaces four separate VLM deployments.
  • LIRIS-ACCEDE/MuSe regressor (viewer-ELICITED valence/arousal — kept separate from all depicted-emotion streams)

This set covers every subclass, runs on one GPU, and eliminates all Section A/B redundancy.

FULL SET (add when resources / specific accuracy needs justify)

Add to the minimal set, only where a distinct signal or best-in-class accuracy is wanted:

  • Visual low-level: SHINE (literature-matched canonical defs), Rosenholtz clutter, GIST (compact holistic vector)
  • Visual high-level: Grounding DINO (object boxes/counts), Mask2Former (panoptic composition), SAM 2 (video-tracked masks/Grounded-SAM), Places365 (frozen fixed taxonomy)
  • Dynamic: MemFlow (temporally smooth flow)
  • Action: InternVideo2-1B (stronger zero-shot/features), V-JEPA 2 (motion-biased complement), ActionFormer/OpenTAD (timestamped TAL segments), VideoLLaMA3 (alt video-LLM)
  • Saliency/depth: Q-Align (aesthetic + quality), ResMem (memorability), Apple Depth Pro (metric depth), DeepGaze IIE (static fixation)
  • Faces: Py-Feat (validated AU detector set), L2CS-Net (best-in-class 360° gaze), MediaPipe (CPU redundancy layer), InsightFace age/sex
  • Audio: Essentia + madmom/Beat This! (roughness/beat/MIR + calibrated mood/genre/valence-arousal), CREPE (robust F0), mosqito (standards-based psychoacoustic roughness/loudness/sharpness), MERT music-emotion regressor
  • Speech: emotion2vec+ (categorical SER), NeMo Parakeet/Canary (multilingual ASR cross-check)
  • Language: Stanza (true UD scheme), GLiNER (custom entity types), LIWC-22 (validated pronoun/function-word scheme), DMRST (reproducible RST discourse labels), supervised TRIPOD turning-points, textstat (cheap readability), dialogue-act classifier
  • Semantics: API embeddings (OpenAI/Voyage/Gemini) if leaderboard-topping required
  • Situation: BrainIAK HMM (soft event posteriors / reactivation), MovieCLIP (cinematic-taxonomy settings), Llama-3-70B/GPT-4 transcript event segmentation
  • Social: InternVL3 or a frontier API as a second VLM for agreement/gold-label validation; Social-IQ 2.0 / Social Genome schemas for prompt construction
  • Affect: Emotion-LLaMA OR AffectGPT (benchmarked / open-vocab depicted-emotion reasoning), EmoNet (cross-check), EmoBank-VAD text regressor, AttendAffectNet (fused induced V/A)

E. KEY TAKEAWAYS

  1. The single largest saving is consolidating all high-level reasoning into ONE video-LLM pass (C9). Action, situation, social, and depicted-emotion semantics are all currently realized by Qwen-VL-class models — run it once per shot with a unified multi-field prompt rather than four times.
  2. Cross-subclass sharing (Section B) saves more than within-subclass pruning. Face emotion, gaze, pose, diarization, prosody, shot boundaries, surprisal, and lexical-VAD each appear in 2-4 catalogs — extract once, route everywhere.
  3. Foundation models supersede most fixed-taxonomy CNNs (Places365, ImageNet, YAMNet, AST) — keep the latter only when a frozen, calibrated, reproducible probability vector is explicitly required.
  4. The one non-negotiable “keep two” is depicted vs. elicited emotion — these are different constructs and conflating them is a scientific error, not a redundancy.