### Install CMU Multimodal SDK via Pip Source: https://context7.com/cmu-multicomp-lab/cmu-multimodalsdk/llms.txt Installs the CMU Multimodal SDK in development mode using pip. This involves cloning the repository and then running the pip install command. ```bash git clone git@github.com:A2Zadeh/CMU-MultimodalSDK.git cd CMU-MultimodalSDK pip install -e . ``` -------------------------------- ### Initialize and Use DynamicFusionGraph Model Source: https://context7.com/cmu-multicomp-lab/cmu-multimodalsdk/llms.txt Illustrates the setup and application of the DynamicFusionGraph module for interpretable dynamic fusion. It involves defining a pattern model and an efficacy model, then initializing the graph with these components and sample multimodal inputs to learn efficacy-weighted connections. ```python import torch from torch import nn from torch.autograd import Variable import numpy from mmsdk.mmmodelsdk.fusion.dynamic_fusion_graph import DynamicFusionGraph # Define input dimensions for 3 modalities language_dim, visual_dim, acoustic_dim = 40, 12, 20 output_dim = 20 batch_size = 32 # Define pattern model (core network for each fusion node) pattern_model = nn.Sequential( nn.Linear(100, 64), nn.ReLU(), nn.Linear(64, output_dim) ) # Define efficacy model (learns connection weights) efficacy_model = nn.Sequential( nn.Linear(100, 64), nn.ReLU() ) # Initialize Dynamic Fusion Graph fusion_model = DynamicFusionGraph( pattern_model=pattern_model, in_dimensions=[language_dim, visual_dim, acoustic_dim], out_dimension=output_dim, efficacy_model=efficacy_model ) # Create sample inputs language_input = Variable(torch.randn(batch_size, language_dim), requires_grad=True) visual_input = Variable(torch.randn(batch_size, visual_dim), requires_grad=True) acoustic_input = Variable(torch.randn(batch_size, acoustic_dim), requires_grad=True) # Perform fusion modalities = [language_input, visual_input, acoustic_input] final_output, intermediate_outputs, efficacies = fusion_model(modalities) print(final_output.shape) # torch.Size([32, 20]) print(efficacies.shape) # Learned efficacy weights for all connections ``` -------------------------------- ### Python: Get Dataset Citation Information Source: https://github.com/cmu-multicomp-lab/cmu-multimodalsdk/blob/main/README.md This Python code snippet demonstrates how to retrieve citation information for datasets and computational sequences processed by the CMU-Multimodal SDK. It writes the citations to specified .bib files. ```python >>> mydataset.bib_citations(open('mydataset.bib','w')) >>> mycompseq.bib_citations(open('mycompseq.bib','w')) ``` -------------------------------- ### Initialize and Manage Datasets with mmdatasdk.mmdataset Source: https://context7.com/cmu-multicomp-lab/cmu-multimodalsdk/llms.txt Demonstrates how to initialize an mmdatasdk.mmdataset object, download datasets, add computational sequences (like labels), and access data. It shows how to load data from URLs or local folders and inspect features and intervals. ```python from mmsdk import mmdatasdk # Download CMU-MOSI dataset with high-level features (GloVe, FACET, COVAREP) cmumosi = mmdatasdk.mmdataset(mmdatasdk.cmu_mosi.highlevel, 'cmumosi/') # Add sentiment labels computational sequence cmumosi.add_computational_sequences(mmdatasdk.cmu_mosi.labels, 'cmumosi/') # Access computational sequence keys print(cmumosi.keys()) # Output: dict_keys(['glove_vectors', 'FACET_4.1', 'FACET_4.2', 'OpenSmile-emobase2010', # 'OpenSMILE', 'OpenFace_1', 'OpenFace_2', 'COVAREP', 'Opinion Segment Labels']) # Access data for a specific video in a computational sequence video_data = cmumosi['glove_vectors']['video_id'] print(video_data['features'].shape) # (num_segments, feature_dim) print(video_data['intervals'].shape) # (num_segments, 2) # Load dataset from local folder containing .csd files local_dataset = mmdatasdk.mmdataset('./my_dataset_folder/') ``` -------------------------------- ### Load and Initialize mmdatasdk Source: https://github.com/cmu-multicomp-lab/cmu-multimodalsdk/blob/main/README.md This snippet demonstrates how to import the mmdatasdk and initialize an mmdatasdk object with a specified dataset and local directory. It's the first step for data acquisition. ```python from mmsdk import mmdatasdk cmumosi_highlevel=mmdatasdk.mmdataset(mmdatasdk.cmu_mosi.highlevel,'cmumosi/') ``` -------------------------------- ### Initialize and Use LSTHM Module Source: https://context7.com/cmu-multicomp-lab/cmu-multimodalsdk/llms.txt Shows how to initialize the Long Short-Term Hybrid Memory (LSTHM) module and process a sequence of inputs step-by-step with hybrid cross-modal information. ```python from mmsdk.mmmodelsdk.modules.LSTHM import LSTHM lsthm = LSTHM(cell_size=128, in_size=300, hybrid_in_size=109) c_t = torch.zeros(32, 128) h_t = torch.zeros(32, 128) for t in range(25): c_t, h_t = lsthm.step(language_seq[t], c_t, h_t, hybrid_seq[t]) ``` -------------------------------- ### Configure Standard Multimodal Datasets Source: https://context7.com/cmu-multicomp-lab/cmu-multimodalsdk/llms.txt Retrieves pre-configured high-level features and labels for standard datasets like CMU-MOSI, CMU-MOSEI, and POM. ```python from mmsdk import mmdatasdk mosei_dataset = mmdatasdk.mmdataset(mmdatasdk.cmu_mosei.highlevel, 'cmumosei/') mosei_dataset.add_computational_sequences(mmdatasdk.cmu_mosei.labels, 'cmumosei/') ``` -------------------------------- ### Perform Multimodal Fusion Source: https://context7.com/cmu-multicomp-lab/cmu-multimodalsdk/llms.txt Demonstrates how to pass multiple modality inputs into a fusion model and inspect the resulting dimension-reduced output shapes. ```python modalities = [language_input, visual_input, acoustic_input] dim_reduced, attention_outputs = fusion_model(modalities) print(dim_reduced[0].shape) print(dim_reduced[1].shape) print(dim_reduced[2].shape) ``` -------------------------------- ### Initialize and Use MultipleAttentionFusion Model Source: https://context7.com/cmu-multicomp-lab/cmu-multimodalsdk/llms.txt Shows how to initialize and use the MultipleAttentionFusion module, which implements multi-attention recurrent fusion. It involves defining an attention model and dimension reduction networks for each modality, then creating the fusion model and preparing sample inputs. ```python import torch from torch import nn from torch.autograd import Variable import numpy from mmsdk.mmmodelsdk.fusion.multiple_attention import MultipleAttentionFusion # Define input dimensions language_dim, visual_dim, acoustic_dim = 40, 12, 20 total_dim = language_dim + visual_dim + acoustic_dim num_attentions = 4 batch_size = 32 # Attention model: outputs attention weights for all modalities attention_model = nn.Sequential( nn.Linear(total_dim, total_dim * num_attentions), nn.Tanh() ) # Dimension reduction networks for each modality after attention dim_reduce_nets = [ nn.Sequential(nn.Linear(language_dim * num_attentions, 32)), nn.Sequential(nn.Linear(visual_dim * num_attentions, 16)), nn.Sequential(nn.Linear(acoustic_dim * num_attentions, 24)) ] # Initialize Multiple Attention Fusion fusion_model = MultipleAttentionFusion( attention_model=attention_model, dim_reduce_nets=dim_reduce_nets, num_atts=num_attentions ) # Create sample inputs language_input = Variable(torch.randn(batch_size, language_dim), requires_grad=True) visual_input = Variable(torch.randn(batch_size, visual_dim), requires_grad=True) acoustic_input = Variable(torch.randn(batch_size, acoustic_dim), requires_grad=True) # Note: The code snippet provided in the prompt was incomplete for this section. # A full example would typically include a call to fusion_model(modalities). ``` -------------------------------- ### Initialize and Use RecurrentFusion Model Source: https://context7.com/cmu-multicomp-lab/cmu-multimodalsdk/llms.txt Demonstrates the initialization and usage of the RecurrentFusion module, which employs LSTM cells for iterative multimodal fusion. It shows how to create the model, provide sample inputs, and perform fusion over multiple steps, outputting fused features, hidden states, and cell states. ```python import torch from torch.autograd import Variable import numpy from mmsdk.mmmodelsdk.fusion.recurrent_fusion import RecurrentFusion # Define input dimensions and LSTM cell size language_dim, visual_dim, acoustic_dim = 300, 35, 74 cell_size = 128 batch_size = 32 fusion_steps = 5 # Initialize Recurrent Fusion model fusion_model = RecurrentFusion( in_dimensions=[language_dim, visual_dim, acoustic_dim], cell_size=cell_size ) # Create sample inputs language_input = Variable(torch.randn(batch_size, language_dim), requires_grad=True) visual_input = Variable(torch.randn(batch_size, visual_dim), requires_grad=True) acoustic_input = Variable(torch.randn(batch_size, acoustic_dim), requires_grad=True) # Perform recurrent fusion with 5 iterations modalities = [language_input, visual_input, acoustic_input] outputs, hidden_state, cell_state = fusion_model(modalities, steps=fusion_steps) print(outputs.shape) # torch.Size([5, 32, 128]) - (steps, batch, cell_size) print(hidden_state.shape) # torch.Size([1, 32, 128]) print(cell_state.shape) # torch.Size([1, 32, 128]) ``` -------------------------------- ### Deploy and Load Datasets with mmdataset.deploy Source: https://context7.com/cmu-multicomp-lab/cmu-multimodalsdk/llms.txt Saves processed computational sequences to disk as .csd files. This allows for efficient reuse of aligned datasets without needing to re-process or re-download data. ```python from mmsdk import mmdatasdk cmumosi = mmdatasdk.mmdataset(mmdatasdk.cmu_mosi.highlevel, 'cmumosi/') cmumosi.add_computational_sequences(mmdatasdk.cmu_mosi.labels, 'cmumosi/') cmumosi.align('Opinion Segment Labels') deploy_filenames = {key: key for key in cmumosi.keys()} cmumosi.deploy('./deployed/', deploy_filenames) aligned_dataset = mmdatasdk.mmdataset('./deployed/') ``` -------------------------------- ### Build End-to-End Training Pipeline Source: https://context7.com/cmu-multicomp-lab/cmu-multimodalsdk/llms.txt A complete workflow for downloading data, performing word-level alignment, imputing missing values, and preparing PyTorch DataLoaders. ```python cmumosi = mmdatasdk.mmdataset(mmdatasdk.cmu_mosi.highlevel, 'cmumosi/') cmumosi.align('glove_vectors', collapse_functions=[myavg]) cmumosi.impute('glove_vectors') tensors = cmumosi.get_tensors(seq_len=50, non_sequences=['Opinion Segment Labels'], folds=folds) train_loader = create_loader(tensors[0]) ``` -------------------------------- ### Implement Training Loop and Dataset Verification Source: https://context7.com/cmu-multicomp-lab/cmu-multimodalsdk/llms.txt This snippet demonstrates the standard iteration pattern for multimodal data loaders in PyTorch and provides a mechanism to print the count of samples for each data split. It assumes the existence of a train_loader and data dictionaries containing glove_vectors. ```python for batch_idx, (language, visual, labels) in enumerate(train_loader): # language.shape: (batch, seq_len, 300) # visual.shape: (batch, seq_len, 74) # labels.shape: (batch,) pass print("Training pipeline ready!") print(f"Train samples: {len(train_data['glove_vectors'])}") print(f"Valid samples: {len(valid_data['glove_vectors'])}") print(f"Test samples: {len(test_data['glove_vectors'])}") ``` -------------------------------- ### Implement Tensor Fusion Network Source: https://context7.com/cmu-multicomp-lab/cmu-multimodalsdk/llms.txt Initializes the Tensor Fusion module for multimodal analysis. It computes outer products between modalities to capture inter-modality dynamics. ```python import torch from torch.autograd import Variable import numpy from mmsdk.mmmodelsdk.fusion.tensor_fusion import TensorFusion language_dim, visual_dim, acoustic_dim = 300, 35, 74 output_dim = 128 batch_size = 32 ``` -------------------------------- ### Initialize and Use TensorFusion Model Source: https://context7.com/cmu-multicomp-lab/cmu-multimodalsdk/llms.txt Initializes the TensorFusion model with specified input dimensions and performs a fusion operation on sample multimodal inputs. It demonstrates how to create the model and pass concatenated modality inputs for fusion. ```python from torch.autograd import Variable import torch from mmsdk.mmmodelsdk.fusion.tensor_fusion import TensorFusion # Define dimensions language_dim, visual_dim, acoustic_dim = 300, 35, 74 output_dim = 128 batch_size = 32 # Initialize Tensor Fusion model fusion_model = TensorFusion( in_dimensions=[language_dim, visual_dim, acoustic_dim], out_dimension=output_dim ) # Create sample inputs for each modality language_input = Variable(torch.randn(batch_size, language_dim), requires_grad=True) visual_input = Variable(torch.randn(batch_size, visual_dim), requires_grad=True) acoustic_input = Variable(torch.randn(batch_size, acoustic_dim), requires_grad=True) # Perform fusion modalities = [language_input, visual_input, acoustic_input] fused_output = fusion_model(modalities) print(fused_output.shape) # torch.Size([32, 128]) ``` -------------------------------- ### Word-Level Alignment with Collapsing Source: https://github.com/cmu-multicomp-lab/cmu-multimodalsdk/blob/main/README.md This snippet illustrates performing word-level alignment using 'glove_vectors' as the primary alignment sequence and then aligning to 'Opinion Segment Labels'. It also demonstrates collapsing other modalities using a custom average function. ```python from mmsdk import mmdatasdk cmumosi_highlevel=mmdatasdk.mmdataset(mmdatasdk.cmu_mosi.highlevel,'cmumosi/') cmumosi_highlevel.align('glove_vectors',collapse_functions=[myavg]) cmumosi_highlevel.add_computational_sequences(mmdatasdk.cmu_mosi.labels,'cmumosi/') cmumosi_highlevel.align('Opinion Segment Labels') ``` -------------------------------- ### Temporally Align Computational Sequences with mmdataset.align Source: https://context7.com/cmu-multicomp-lab/cmu-multimodalsdk/llms.txt Explains how to use the `align` method to synchronize computational sequences based on time intervals. It supports custom functions for feature collapsing and can perform word-level alignment by aligning to specific reference sequences. ```python from mmsdk import mmdatasdk import numpy # Define collapse function for averaging features across time intervals def myavg(intervals, features): return numpy.average(features, axis=0) # Download dataset cmumosi = mmdatasdk.mmdataset(mmdatasdk.cmu_mosi.highlevel, 'cmumosi/') # Word-level alignment: align all modalities to glove_vectors with averaging cmumosi.align('glove_vectors', collapse_functions=[myavg]) # After alignment, entries have segment indices like 'video_id[0]', 'video_id[1]', etc. # Each segment corresponds to one word # Add labels and align to opinion segments cmumosi.add_computational_sequences(mmdatasdk.cmu_mosi.labels, 'cmumosi/') cmumosi.align('Opinion Segment Labels') # Access aligned data with segment index segment_data = cmumosi['glove_vectors']['video_id[0]'] print(segment_data['features'].shape) # Features for first opinion segment print(segment_data['intervals'].shape) # Time intervals for first segment ``` -------------------------------- ### Convert Datasets to Tensors with mmdataset.get_tensors Source: https://context7.com/cmu-multicomp-lab/cmu-multimodalsdk/llms.txt Converts aligned computational sequences into numpy arrays for machine learning. It supports sequence padding, fold-based partitioning, and handling non-sequential data labels. ```python from mmsdk import mmdatasdk cmumosi = mmdatasdk.mmdataset(mmdatasdk.cmu_mosi.highlevel, 'cmumosi/') cmumosi.add_computational_sequences(mmdatasdk.cmu_mosi.labels, 'cmumosi/') def myavg(intervals, features): import numpy return numpy.average(features, axis=0) cmumosi.align('glove_vectors', collapse_functions=[myavg]) cmumosi.align('Opinion Segment Labels') cmumosi.hard_unify() train_fold = mmdatasdk.cmu_mosi.standard_folds.standard_train_fold valid_fold = mmdatasdk.cmu_mosi.standard_folds.standard_valid_fold test_fold = mmdatasdk.cmu_mosi.standard_folds.standard_test_fold tensors = cmumosi.get_tensors( seq_len=25, non_sequences=['Opinion Segment Labels'], direction=False, folds=[train_fold, valid_fold, test_fold] ) train_tensors, valid_tensors, test_tensors = tensors[0], tensors[1], tensors[2] ``` -------------------------------- ### Add and Align Computational Sequences Source: https://github.com/cmu-multicomp-lab/cmu-multimodalsdk/blob/main/README.md This code shows how to add additional computational sequences (like labels) to an existing mmdatasdk object and then align all sequences to a reference sequence, such as 'Opinion Segment Labels'. ```python cmumosi_highlevel.add_computational_sequences(mmdatasdk.cmu_mosi.labels,'cmumosi/') cmumosi_highlevel.align('Opinion Segment Labels') ``` -------------------------------- ### Custom Average Function for Collapsing Source: https://github.com/cmu-multicomp-lab/cmu-multimodalsdk/blob/main/README.md Defines a custom Python function 'myavg' that takes intervals and features as input and returns the average of the features, suitable for use with the collapse_functions parameter in the align method. ```python import numpy def myavg(intervals,features): return numpy.average(features,axis=0) ``` -------------------------------- ### Unify Datasets Across Sequences with mmdataset.unify and hard_unify Source: https://context7.com/cmu-multicomp-lab/cmu-multimodalsdk/llms.txt Details the `unify` and `hard_unify` methods for ensuring data consistency across computational sequences. `unify` removes entire entries (e.g., videos) not present in all sequences, while `hard_unify` operates on aligned data to remove segment-level mismatches. ```python from mmsdk import mmdatasdk cmumosi = mmdatasdk.mmdataset(mmdatasdk.cmu_mosi.highlevel, 'cmumosi/') # Remove videos that don't exist in all computational sequences cmumosi.unify(active=True) # active=True removes violators, False just reports them # After alignment, use hard_unify for segment-level consistency cmumosi.add_computational_sequences(mmdatasdk.cmu_mosi.labels, 'cmumosi/') cmumosi.align('Opinion Segment Labels') cmumosi.hard_unify(active=True) # Ensures all segment IDs like 'video[0]' exist in all sequences ``` -------------------------------- ### Impute Missing Data with mmdataset.impute Source: https://context7.com/cmu-multicomp-lab/cmu-multimodalsdk/llms.txt Shows how to use the `impute` method to fill in missing segments within computational sequences. It can use default zero imputation or a custom function (like `numpy.ones`) for filling missing values, based on a reference sequence's intervals. ```python from mmsdk import mmdatasdk import numpy cmumosi = mmdatasdk.mmdataset(mmdatasdk.cmu_mosi.highlevel, 'cmumosi/') # Align to word vectors def myavg(intervals, features): return numpy.average(features, axis=0) cmumosi.align('glove_vectors', collapse_functions=[myavg]) # Impute missing entries using zeros (default) cmumosi.impute('glove_vectors') # Impute with custom function (e.g., ones instead of zeros) cmumosi.impute('glove_vectors', imputation_fn=numpy.ones) ``` -------------------------------- ### Generate BibTeX Citations with mmdataset.bib_citations Source: https://context7.com/cmu-multicomp-lab/cmu-multimodalsdk/llms.txt Outputs academic citations for the datasets and sequences used in a project. This ensures proper attribution for the multimodal data sources. ```python from mmsdk import mmdatasdk cmumosi = mmdatasdk.mmdataset(mmdatasdk.cmu_mosi.highlevel, 'cmumosi/') cmumosi.bib_citations() with open('citations.bib', 'w') as f: cmumosi.bib_citations(f) ``` -------------------------------- ### Revert Dataset Alignment with mmdataset.revert Source: https://context7.com/cmu-multicomp-lab/cmu-multimodalsdk/llms.txt Undoes alignment operations by stacking segmented data back into original video-level entries. This is useful for restoring the original data structure after alignment. ```python from mmsdk import mmdatasdk aligned_dataset = mmdatasdk.mmdataset('./deployed/') aligned_dataset.revert(replace=True) reverted_dataset = aligned_dataset.revert(replace=False) ``` -------------------------------- ### Manage Computational Sequences with mmdatasdk.computational_sequence Source: https://context7.com/cmu-multicomp-lab/cmu-multimodalsdk/llms.txt Defines a hierarchical structure for modality data, containing features and intervals. It supports manual data construction, disk deployment with compression, and loading. ```python from mmsdk import mmdatasdk import numpy compseq = mmdatasdk.computational_sequence("my_modality") data = {} video_ids = ["video1", "video2", "video3"] for vid in video_ids: num_segments = numpy.random.randint(10, 50) data[vid] = { "features": numpy.random.randn(num_segments, 128).astype(numpy.float32), "intervals": numpy.column_stack([numpy.arange(num_segments), numpy.arange(1, num_segments + 1)]).astype(numpy.float32) } compseq.setData(data, "my_modality") compseq.deploy("my_modality.csd", compression="gzip", compression_opts=9) loaded_compseq = mmdatasdk.computational_sequence("my_modality.csd") ``` -------------------------------- ### Binarize CMU-MOSEI Sentiment Scores (Python) Source: https://github.com/cmu-multicomp-lab/cmu-multimodalsdk/blob/main/mmsdk/mmdatasdk/dataset/standard_datasets/CMU_MOSEI/README.md This function rounds sentiment scores to the nearest integer within the CMU-MOSEI dataset's defined ranges. It handles the mapping from continuous sentiment values to discrete integer labels. ```python def cmumosei_round(a): if a < -2: res = -3 if -2 <= a and a < -1: res = -2 if -1 <= a and a < 0: res = -1 if 0 <= a and a <= 0: res = 0 if 0 < a and a <= 1: res = 1 if 1 < a and a <= 2: res = 2 if a > 2: res = 3 return res ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.