視頻序列和射頻信號多模態融合算法Fusion-Vital解讀

視頻序列和射頻信號多模態融合算法Fusion-Vital解讀

  • 概述
    • 模型整體流程
    • 視頻幀時間差分歸一化
    • TSM模塊
    • 視頻序列特征融合模塊
    • 跨模態特征融合模塊

概述

最近看了Fusion-Vital的視頻-射頻(RGB-RF)融合Transformer模型。記錄一下,對于實際項目中的多模態數據融合有一定參考價值。原始論文,參考實現源碼。
具體來說,Fusion-Vital模型首先將多幀視頻RGB圖像投影到一個共享的時間差分域中,以有效捕捉微小的生理信號,同時避免全局運動的干擾。
對于RF射頻模態,利用多普勒特性,通過短時傅里葉變換(STFT)生成時間-頻率圖像,作為時間差分域的替代指標。
模型采用并行編碼分支,分別處理RGB和RF數據,并引入多級特征融合模塊,利用交叉注意力機制在時間差分域中對齊和融合兩種模態的特征。

模型整體流程

在這里插入圖片描述

整個模型有以下模塊組成:

  1. 時序移動模塊(TSM)
  2. RGB通路(運動分支 + 外觀分支)
  3. RF通路(射頻分支)
  4. 注意力機制(Attention)
  5. 兩次跨模態交互塊(CrossAttentionModule)
  6. 池化與Dropout
  7. 最終MLP輸出

輸入輸出

  1. 輸入:
    rgb_input: 形狀為 (B, C=3, T, H, W),視頻幀序列。
    rf_input: 形狀為 (B, C=4, T, F),射頻信號時頻特征。
  2. 輸出:
    bvp :形狀為 (B, T),這里為脈搏波形。
    在這里插入圖片描述

視頻幀時間差分歸一化

  1. 連續的視頻幀時間差分歸一化處理。
  2. 維度變換?:
    輸入:(B, C, T, H, W)
    輸出:(B, C, T, H, W)
def diff_normalize_data(x):"""Calculate discrete difference in video data along the time-axis and nornamize by its standard deviation."""B, C, T, H, W = x.shape# denominatordenominator = torch.ones((B, C, T, H, W), dtype=torch.float32, device=x.device)for j in range(T - 1):denominator[:, :, j, :, :] = x[:, :, j + 1, :, :] + x[:, :, j, :, :] + 1e-7x_diff = torch.cat([torch.zeros((B, C, 1, H, W), device=x.device), x.diff(dim=2)], dim=2) / denominatorx_diff = x_diff / x_diff.view(B, -1).std(dim=1)[:, None, None, None, None]x_diff[torch.isnan(x_diff)] = 0return x_diff

TSM模塊

在這里插入圖片描述

  1. 通道分割?:將特征通道分為3部分:
    前1/3:向前時序移位(用下一幀的特征替換當前幀)
    中1/3:向后時序移位(用上一幀的特征替換當前幀)
    后1/3:保持不變
  2. 維度變換?:
    輸入:(B×T, C, H, W)
class TSM(nn.Module):def __init__(self, n_segment=32, fold_div=3):super(TSM, self).__init__()self.n_segment = n_segmentself.fold_div = fold_divdef forward(self, x):nt, c, h, w = x.size()n_batch = nt // self.n_segmentx = x.view(n_batch, self.n_segment, c, h, w)fold = c // self.fold_divout = torch.zeros_like(x)out[:, :-1, :fold] = x[:, 1:, :fold]  # shift leftout[:, 1:, fold: 2 * fold] = x[:, :-1, fold: 2 * fold]  # shift rightout[:, :, 2 * fold:] = x[:, :, 2 * fold:]  # not shiftreturn out.view(nt, c, h, w)

視頻序列特征融合模塊

在這里插入圖片描述

  1. 運動分支:對輸入的時序差分特征(diff_input)做兩次卷積和兩次TSM,得到 d2。
    外觀分支:對原始輸入做兩次卷積,得到 r2。
    注意力分支:對外觀分支 r2 做 1x1 卷積和 sigmoid,得到注意力權重 g1。
    融合:d2 * g1,得到融合后的 rgb1
  2. 輸入:diff_input, raw_input → (BT, C, H, W)
    輸出:rgb1 → (B
    T, nb_filters1=32, H, W)
# 第一次和第二次卷積
diff_input = self.TSM_1(diff_input)
d1 = torch.tanh(self.motion_conv1(diff_input))
d1 = self.TSM_2(d1)
d2 = torch.tanh(self.motion_conv2(d1))
r1 = torch.tanh(self.apperance_conv1(raw_input))
r2 = torch.tanh(self.apperance_conv2(r1))
g1 = torch.sigmoid(self.apperance_att_conv1(r2))
g1 = self.attn_mask_1(g1)
rgb1 = d2 * g1 # 第一次輸入Fusion Block的rgb1
  1. 注意力掩碼attn_mask的計算:
  • 空間求和?:
    首先沿高度(H)維度求和,保持維度(keepdim=True)
    然后沿寬度(W)維度求和,得到每個空間位置的總和
  • 歸一化處理?:
    將輸入特征圖除以其空間總和,實現初步歸一化
    乘以高度和寬度恢復數值范圍
    乘以0.5的縮放因子
def forward(self, x):# 計算空間維度的總和 (高度和寬度)xsum = torch.sum(x, dim=2, keepdim=True)  # 沿高度維度(H)求和xsum = torch.sum(xsum, dim=3, keepdim=True)  # 沿寬度維度(W)求和# 獲取輸入形狀xshape = tuple(x.size())# 計算注意力掩碼并應用return x / xsum * xshape[2] * xshape[3] * 0.5

跨模態特征融合模塊

在這里插入圖片描述

交叉注意力融合

  1. 展平空間/頻率維度,視頻幀序列維度變為 (B, T, H*W*C),射頻序列維度(B, T, F*C)
  2. 加入時間位置編碼,時間位置編碼由time_indices = torch.arange(T, device=rgb.device)然后經過Embedding實現,輸出維度不變:(B, T, H*W*C)(B, T, F*C)
  3. Transform1,Q為視頻特征,K和V為射頻特征:Q為視頻特征維度變換得到,維度(T, B, D=64),K為射頻特征變換為得到,維度(T, B, D=64),這里把T和B的位置進行了變換,因為nn.MultiheadAttention 默認的輸入格式是 (seq_len, batch, embed_dim)。經過MultiheadAttention之后變換回視頻特征維度,也就是(B, T, H*W*C)
  4. Transform2: Q為射頻特征,K和V為視頻特征,同上,經過MultiheadAttention之后變換回射頻特征維度,也就是(B, T, F*C)
def forward(self, rgb, rf):B, C, T, H, W = rgb.shape_, _, _, F = rf.shape# Flatten spatial dimensions to create sequences for cross-attentionrgb = rgb.permute(0, 2, 3, 4, 1).reshape(B, T, -1)  # (B, T, H*W*C)rf = rf.permute(0, 2, 3, 1).reshape(B, T, -1)  # (B, T, F*C)# print(rgb.shape, rf.shape)# Temporal Embeddingtime_indices = torch.arange(T, device=rgb.device)rgb_time_embeddings = self.rgb_embedding(time_indices).unsqueeze(0)  # (1, T, H*W*C)rf_time_embeddings = self.rf_embedding(time_indices).unsqueeze(0)  # (1, T, F*C)rgb = rgb + rgb_time_embeddingsrf = rf + rf_time_embeddings# nn.MultiheadAttention 默認的輸入格式是 (seq_len, batch, embed_dim),即 (T, B, D)。rgb, rf = rgb.permute(1, 0, 2), rf.permute(1, 0, 2)# Transform RGB to Q and RF to K and VQ = self.rgb_to_q(rgb)  # (T, B, D)K = self.rf_to_k(rf)    # (T, B, D)V = self.rf_to_v(rf)    # (T, B, D)# Apply cross-attention: RGB as query, RF as key and valuergb_prime, _ = self.attention_rgb_rf(Q, K, V)  # (T, B, D)rgb_prime = self.proj_rgb(rgb_prime)  # (T, B, D)# Reverse the flattening process for RGB'rgb_prime = rgb_prime.view(T, B, H, W, C).permute(1, 4, 0, 2, 3)  # (B, C, T, H, W)# Transform RF to Q and RGB to K and VQ = self.rf_to_q(rf)  # (T, B, D)K = self.rgb_to_k(rgb)    # (T, B, D)V = self.rgb_to_v(rgb)    # (T, B, D)# Apply cross-attention: RF as query, RGB as key and valuerf_prime, _ = self.attention_rf_rgb(Q, K, V)  # (T, B, D)rf_prime = self.proj_rf(rf_prime)  # (T, B, D)# Reverse the flattening process for RF'rf_prime = rf_prime.view(T, B, F, C).permute(1, 3, 0, 2)  # (B, C, T, F)return rgb_prime, rf_prime

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/88285.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/88285.shtml
英文地址,請注明出處:http://en.pswp.cn/web/88285.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

frp內網穿透下創建FTP(解決FTP“服務器回應不可路由的地址。使用服務器地址替代”錯誤)

使用寶塔面板,點擊FTP,下載Pure-FTPd插件 點擊Pure-FTPd插件,修改配置文件,找到PassivePortRange, 修改ftp被動端口范圍為39000 39003,我們只需要4個被動端口即可,多了不好在內網穿透frp的配置文件中增加…

STM32控制四自由度機械臂(SG90舵機)(硬件篇)(簡單易復刻)

1.前期硬件準備 2s鋰電池一個(用于供電),stm32f103c8t6最小系統板一個(主控板),兩個搖桿(用于搖桿模式),四個電位器(用于示教器模式)&#xff0c…

華為OD機試_2025 B卷_最差產品獎(Python,100分)(附詳細解題思路)

題目描述 A公司準備對他下面的N個產品評選最差獎, 評選的方式是首先對每個產品進行評分,然后根據評分區間計算相鄰幾個產品中最差的產品。 評選的標準是依次找到從當前產品開始前M個產品中最差的產品,請給出最差產品的評分序列。 輸入描述 第…

飛算JavaAI:重塑Java開發效率的智能引擎

飛算JavaAI:重塑Java開發效率的智能引擎 一、飛算JavaAI核心價值 飛算JavaAI是全球首款專注Java語言的智能開發助手,由飛算數智科技(深圳)有限公司研發。它通過AI大模型技術實現: 全流程自動化:從需求分析→軟件設計→代碼生成一氣呵成工程級代碼輸出:生成包含配置類、…

Java和Go各方面對比:現代編程語言的深度分析

Java和Go各方面對比:現代編程語言的深度分析 引言 在當今的軟件開發領域,選擇合適的編程語言對項目的成功至關重要。Java作為一門成熟的面向對象語言,已經在企業級開發中占據主導地位超過25年。而Go(Golang)作為Google…

CloudCanal:一款企業級實時數據同步、遷移工具

CloudCanal 是一款可視化的數據同步、遷移工具,可以幫助企業構建高質量數據管道,具備實時高效、精確互聯、穩定可拓展、一站式、混合部署、復雜數據轉換等優點。 應用場景 CloudCanal 可以幫助企業實現以下數據應用場景: 數據同步&#xff…

如何發現 Redis 中的 BigKey?

如何發現 Redis 中的 BigKey? Redis 因其出色的性能,常被用作緩存、消息隊列和會話存儲。然而,在 Redis 的使用過程中,BigKey 是一個不容忽視的問題。BigKey 指的是存儲了大量數據或包含大量成員的鍵。它們不僅會占用大量內存&…

Golang讀取ZIP壓縮包并顯示Gin靜態html網站

Golang讀取ZIP壓縮包并顯示Gin靜態html網站Golang讀取ZIP壓縮包并顯示Gin靜態html網站1. 讀取ZIP壓縮包2. 解壓并保存靜態文件3. 設置Gin靜態文件服務基本靜態文件服務使用StaticFS更精細控制單個靜態文件服務4. 完整實現示例5. 高級優化內存映射優化使用Gin-Static中間件6. 部…

參數列表分類法:基本參數與擴展參數的設計模式

摘要 本文提出了我設計的一種新的函數參數設計范式——參數列表分類法,將傳統的"單一參數列表"擴展為"多參數列表協同"模式。通過引入"基本參數列表"和"擴展參數列表"的概念,為復雜對象構建提供了更靈活、更具表…

Ajax之核心語法詳解

Ajax之核心語法詳解一、Ajax的核心原理與優勢1.1 什么是Ajax?1.2 Ajax的優勢二、XMLHttpRequest:Ajax的核心對象2.1 XHR的基本使用流程2.2 核心屬性與事件解析2.2.1 readyState:請求狀態2.2.2 status:HTTP狀態碼2.2.3 響應數據屬性…

ArcGIS 打開 nc 降雨量文件

1. 打開ArcToolbox,依次打開 多維工具 → 創建 NetCDF 柵格圖層,將 nc 文件拖入 輸入 NetCDF 文件輸入框,確認 X維度(經度)、Y維度(經度) 的變量名是否正確,點擊 確定。圖 1 加載nc文…

01-elasticsearch-搭個簡單的window服務-ik分詞器-簡單使用

1、elasticsearch下載地址 如果是其他版本可以嘗試修改鏈接中的版本信息下載 https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.2-windows-x86_64.zip 2、ik分詞器下載地址 ik分詞器下載的所有版本地址:Index of: analysis-ik/stable/…

[數據結構與算法] 優先隊列 | 最小堆 C++

下面是關于 C 中 std::priority_queue 的詳細說明,包括初始化、用法和常見的應用場景。什么是 priority_queue? priority_queue(優先隊列)是 C 標準庫中的一個容器適配器。它和普通隊列(queue)最大的不同在…

零基礎入門物聯網-遠程門禁開關:硬件介紹

一、成品展示 遠程門禁最終效果 二、項目介紹 整個項目主要是實際使用案例為主,根據自己日常生活中用到物聯網作品為原型,通過項目實例快速理解。項目分為兩部分:制作體驗和深入學習。 制作體驗部分 會提供所有項目資料及制作說明文檔&a…

軟件系統國產化改造開發層面,達夢(DM)數據庫改造問題記錄

本系統前(vue)后端(java spring boot)為列子,數據庫由MySQL--->DM(達夢),中間件為中創的國產化相關軟件,如tomcat、nginx、redis等。重點講數據庫及代碼端的更改,中間件在服務端以…

N8N與Dify:自動化與AI的完美搭配

“N8N”和“Dify”這兩個工具徹底理清楚,它們其實是兩個定位完全不同的開源平臺,各自擅長解決不同類型的問題,但也能協同工作。以下是詳細說明:1. n8n:工作流自動化平臺定位:n8n 是一個專注于跨系統連接與任…

ARM匯編編程(AArch64架構)課程 - 第5章函數調用規范

目錄AAPCS64調用約定參數傳遞規則返回值規則棧幀管理SP寄存器FP寄存器 (X29)棧幀布局示例AAPCS64調用約定 ARM Architecture Procedure Call Standard for 64-bit (AAPCS64) 參數傳遞規則 參數位置寄存器分配特殊規則參數1-8X0-X7 (64-bit) / W0-W7 (32-bit)浮點數使用 V0-V7參…

軟考(軟件設計師)軟件工程-成本評估模型,軟件能力成熟度,軟件配置管理

成本評估模型 Putnam 下面通過一個具體案例,逐步說明Putnam模型的計算過程。我們將開發一個銀行核心交易系統,規模為80萬行代碼(LOC),要求24個月內交付。參數符號值說明軟件規模L800,000 LOC通過功能點轉換獲得開發時間…

SASSNet復現

復現結果–Dice:89.354614,Jaccard:80.968917,95HD:7.3987764,誤差在接受范圍 MethodDiceJaccardJaccard # 感想 第19篇完全復現的論文

大數據學習5:網站訪問日志分析

1.數據處理1.1 環境準備進入cd /opt/server/hadoop-3.1.0/sbin文件夾,停止hdfs服務cd /opt/server/hadoop-3.1.0/sbin ./stop-dfs.sh進入/opt/server/hadoop-3.1.0/etc/hadoop文件夾,編輯yarn-site.xml文件/opt/server/hadoop-3.1.0/etc/hadoop vim yarn…