建具備物理規(guī)律外推能力的視頻世界模型:從對(duì)象中心表示到工程實(shí)踐)
在計(jì)算機(jī)視覺(jué)領(lǐng)域構(gòu)建能夠理解和預(yù)測(cè)物理世界的模型一直是核心挑戰(zhàn)之一。我們常常遇到這樣的困境一個(gè)在訓(xùn)練集上表現(xiàn)優(yōu)異的視頻預(yù)測(cè)模型一旦遇到訓(xùn)練時(shí)未曾見(jiàn)過(guò)的物體、場(chǎng)景或運(yùn)動(dòng)模式其預(yù)測(cè)結(jié)果就可能變得荒謬比如物體穿墻而過(guò)、液體違反重力規(guī)律。這背后的根本原因在于模型可能只是記住了數(shù)據(jù)中的統(tǒng)計(jì)模式而非真正學(xué)會(huì)了支配世界的物理規(guī)律。本文將深入解讀一篇探討“讓模型真的學(xué)會(huì)物理規(guī)律”的前沿AI論文該研究旨在構(gòu)建一個(gè)能夠外推到未見(jiàn)unseen場(chǎng)景的視頻世界模型。我們將從核心概念、模型架構(gòu)、代碼實(shí)現(xiàn)思路到工程實(shí)踐意義進(jìn)行系統(tǒng)拆解無(wú)論你是計(jì)算機(jī)視覺(jué)的研究者還是希望將物理先驗(yàn)融入AI應(yīng)用的工程師都能從中獲得啟發(fā)和可直接參考的實(shí)戰(zhàn)方案。1. 背景與核心概念為什么需要“學(xué)會(huì)物理”的模型1.1 視頻預(yù)測(cè)模型的現(xiàn)狀與局限視頻預(yù)測(cè)即給定若干幀歷史圖像預(yù)測(cè)未來(lái)若干幀的內(nèi)容是視頻理解、自動(dòng)駕駛、機(jī)器人規(guī)劃等任務(wù)的基礎(chǔ)。傳統(tǒng)方法如ConvLSTM、PredNet以及近年流行的基于GAN或擴(kuò)散模型的視頻生成器在標(biāo)準(zhǔn)數(shù)據(jù)集如KTH, UCF-101上取得了令人印象深刻的視覺(jué)效果。然而這些模型存在一個(gè)共性缺陷泛化能力弱尤其是對(duì)分布外Out-of-Distribution, OOD數(shù)據(jù)的泛化。例如一個(gè)用臺(tái)球碰撞視頻訓(xùn)練出的模型可能無(wú)法正確預(yù)測(cè)兩個(gè)形狀、質(zhì)量完全不同的新物體的碰撞結(jié)果。模型學(xué)到的往往是像素層面的紋理關(guān)聯(lián)和短期運(yùn)動(dòng)模式而非物體屬性質(zhì)量、彈性和物理定律動(dòng)量守恒、能量守恒。1.2 物理規(guī)律與外推Extrapolation能力物理規(guī)律如牛頓力學(xué)、光學(xué)原理是普適的、可解釋的。一個(gè)真正理解了物理的AI模型應(yīng)該具備外推能力即將其學(xué)到的規(guī)律應(yīng)用到訓(xùn)練數(shù)據(jù)分布之外的、全新的場(chǎng)景和物體上。內(nèi)插Interpolation在訓(xùn)練數(shù)據(jù)覆蓋的范圍內(nèi)進(jìn)行預(yù)測(cè)。例如預(yù)測(cè)一個(gè)已知物體在已知場(chǎng)景中以未見(jiàn)過(guò)的中間速度運(yùn)動(dòng)。外推Extrapolation對(duì)訓(xùn)練數(shù)據(jù)范圍之外的情況進(jìn)行預(yù)測(cè)。例如預(yù)測(cè)一個(gè)全新形狀的物體與環(huán)境的交互或者物體數(shù)量、物理屬性如彈性系數(shù)遠(yuǎn)超訓(xùn)練集范圍時(shí)的動(dòng)態(tài)。當(dāng)前大多數(shù)模型擅長(zhǎng)內(nèi)插但外推能力嚴(yán)重不足。本文解讀的研究其核心目標(biāo)就是提升模型的外推能力使其預(yù)測(cè)行為更符合物理常識(shí)。1.3 世界模型World Model與歸納偏置世界模型的概念來(lái)源于控制論和認(rèn)知科學(xué)指智能體對(duì)其所處環(huán)境內(nèi)部運(yùn)行機(jī)制的一種內(nèi)部表示。在深度學(xué)習(xí)中世界模型通常是一個(gè)能夠模擬環(huán)境動(dòng)態(tài)的生成模型。通過(guò)在世界模型中“想象”未來(lái)智能體可以進(jìn)行規(guī)劃而不必在真實(shí)世界中試錯(cuò)。要讓世界模型學(xué)會(huì)物理關(guān)鍵在于為其注入正確的歸納偏置。歸納偏置是學(xué)習(xí)算法中內(nèi)置的、用于引導(dǎo)模型優(yōu)先學(xué)習(xí)某種假設(shè)的偏好。例如卷積神經(jīng)網(wǎng)絡(luò)CNN的偏置是“平移不變性”。對(duì)于物理世界我們需要引入如物體中心性、持續(xù)性、能量守恒等偏置。這篇論文的核心貢獻(xiàn)之一就是通過(guò)巧妙的模型設(shè)計(jì)將這類(lèi)物理歸納偏置自然地嵌入到學(xué)習(xí)過(guò)程中。2. 核心方法拆解模型如何學(xué)習(xí)并外推物理規(guī)律論文提出的模型架構(gòu)通常是一個(gè)基于對(duì)象中心Object-Centric表示的生成模型。下面我們分解其關(guān)鍵組件和設(shè)計(jì)原理。2.1 對(duì)象中心表示學(xué)習(xí)像素空間過(guò)于底層且冗余不利于學(xué)習(xí)高級(jí)概念如物體和物理。因此第一步是將視頻幀編碼為一組對(duì)象槽。# 偽代碼示意對(duì)象槽編碼器 import torch import torch.nn as nn import torch.nn.functional as F class SlotAttentionEncoder(nn.Module): 將圖像編碼為K個(gè)對(duì)象槽slot的模塊。 每個(gè)槽可以理解為對(duì)圖像中一個(gè)潛在物體或背景一部分的抽象表示。 def __init__(self, num_slots, slot_dim, encoder_hidden_dim): super().__init__() self.num_slots num_slots self.slot_dim slot_dim # 一個(gè)CNN主干用于提取圖像特征圖 self.cnn_backbone SimpleCNN() # 將特征圖投影為鍵Key和值Value self.proj_k nn.Linear(encoder_hidden_dim, slot_dim) self.proj_v nn.Linear(encoder_hidden_dim, slot_dim) # 可學(xué)習(xí)的初始槽向量 self.slots_mu nn.Parameter(torch.randn(1, num_slots, slot_dim)) self.slots_log_sigma nn.Parameter(torch.zeros(1, num_slots, slot_dim)) nn.init.xavier_uniform_(self.slots_mu) nn.init.xavier_uniform_(self.slots_log_sigma) def forward(self, images): # images: [B, C, H, W] batch_size images.shape[0] # 1. 提取特征 feat_map self.cnn_backbone(images) # [B, H*W, hidden_dim] # 2. 計(jì)算Keys和Values keys self.proj_k(feat_map) # [B, N, slot_dim] values self.proj_v(feat_map) # [B, N, slot_dim] # 3. 初始化槽Slot Attention迭代過(guò)程此處簡(jiǎn)化為從可學(xué)習(xí)參數(shù)初始化 slots self.slots_mu torch.exp(self.slots_log_sigma) * torch.randn_like(self.slots_mu) slots slots.repeat(batch_size, 1, 1) # [B, num_slots, slot_dim] # 4. 迭代優(yōu)化槽表示簡(jiǎn)化版省略多輪Attention迭代 # 核心槽作為Query與圖像的Key做Attention加權(quán)聚合Value來(lái)更新自己。 attn_logits torch.einsum(bnd,bmd-bnm, slots, keys) # [B, num_slots, N] attn F.softmax(attn_logits, dim-1) # 每個(gè)槽關(guān)注圖像的不同區(qū)域 updates torch.einsum(bnm,bmd-bnd, attn, values) slots slots updates # 通常這里會(huì)進(jìn)行歸一化并迭代多次 return slots # [B, num_slots, slot_dim]為什么有效對(duì)象槽將場(chǎng)景分解為獨(dú)立的實(shí)體這與我們對(duì)物理世界的認(rèn)知世界由相互作用的物體構(gòu)成相符。這種表示天然支持組合性新場(chǎng)景可以被看作是已知物體的新組合從而為外推提供了基礎(chǔ)。2.2 物理動(dòng)力學(xué)模型在獲得每一幀的對(duì)象槽表示后模型需要學(xué)習(xí)一個(gè)動(dòng)力學(xué)函數(shù)用于根據(jù)當(dāng)前時(shí)刻的槽狀態(tài)預(yù)測(cè)下一時(shí)刻的槽狀態(tài)。class PhysicalDynamicsModel(nn.Module): 物理動(dòng)力學(xué)模型。在對(duì)象槽的潛在空間中模擬物理交互。 def __init__(self, slot_dim, hidden_dim): super().__init__() # 一個(gè)圖神經(jīng)網(wǎng)絡(luò)GNN是自然的選擇因?yàn)槲矬w間存在交互。 # 這里用一個(gè)簡(jiǎn)化的MLP來(lái)模擬物體自身和交互的動(dòng)態(tài)。 self.dynamics_net nn.Sequential( nn.Linear(slot_dim * 2, hidden_dim), # 輸入當(dāng)前槽狀態(tài) 交互上下文 nn.ReLU(), nn.Linear(hidden_dim, slot_dim) # 輸出槽狀態(tài)的變化量 delta ) def forward(self, current_slots): current_slots: [B, num_slots, slot_dim] 返回下一時(shí)刻的槽狀態(tài)預(yù)測(cè) [B, num_slots, slot_dim] batch_size, num_slots, slot_dim current_slots.shape next_slots [] for i in range(num_slots): # 對(duì)于第i個(gè)槽計(jì)算它與其他所有槽的交互 slot_i current_slots[:, i, :] # [B, slot_dim] # 簡(jiǎn)單聚合其他槽的信息作為上下文實(shí)踐中可用更復(fù)雜的Attention context current_slots.mean(dim1) # [B, slot_dim] 全局平均池化作為簡(jiǎn)化交互 # 將自身狀態(tài)和交互上下文拼接 combined torch.cat([slot_i, context], dim-1) # [B, slot_dim*2] # 預(yù)測(cè)狀態(tài)變化 delta self.dynamics_net(combined) # [B, slot_dim] next_slot_i slot_i delta # 歐拉積分簡(jiǎn)化 next_slots.append(next_slot_i) next_slots torch.stack(next_slots, dim1) # [B, num_slots, slot_dim] return next_slots關(guān)鍵設(shè)計(jì)動(dòng)力學(xué)模型通常在潛在空間對(duì)象槽空間而非像素空間運(yùn)作。這迫使模型學(xué)習(xí)物體狀態(tài)的抽象演變規(guī)律如位置、速度的更新這些規(guī)律更有可能對(duì)應(yīng)真實(shí)的物理量從而更容易泛化。模型結(jié)構(gòu)如GNN本身也嵌入了“物體間相互作用”的歸納偏置。2.3 解碼器與訓(xùn)練目標(biāo)動(dòng)力學(xué)模型預(yù)測(cè)出未來(lái)時(shí)刻的對(duì)象槽后需要一個(gè)解碼器將這些槽轉(zhuǎn)換回像素空間生成可視化的未來(lái)幀。class SlotDecoder(nn.Module): 將對(duì)象槽解碼為圖像。 每個(gè)槽獨(dú)立生成一個(gè)圖像掩膜和特征然后通過(guò)alpha合成得到最終圖像。 def __init__(self, slot_dim, output_res): super().__init__() self.slot_to_feature nn.Linear(slot_dim, 256) self.slot_to_mask nn.Sequential( nn.Linear(slot_dim, 64), nn.ReLU(), nn.Linear(64, output_res[0]*output_res[1]) # 生成與圖像空間位置對(duì)應(yīng)的logits ) # 一個(gè)小的CNN用于將特征上采樣為圖像patch self.feature_to_rgb SimpleUpsampleCNN() def forward(self, slots): # slots: [B, num_slots, slot_dim] batch_size, num_slots, _ slots.shape H, W output_res # 每個(gè)槽生成特征和空間注意力掩膜alpha mask features self.slot_to_feature(slots) # [B, num_slots, 256] mask_logits self.slot_to_mask(slots) # [B, num_slots, H*W] masks F.softmax(mask_logits, dim1) # 沿slot維度歸一化使得所有槽的mask和為1 masks masks.view(batch_size, num_slots, H, W) # 每個(gè)槽的特征生成RGB圖像 slot_images [] for s in range(num_slots): feat features[:, s, :].unsqueeze(1).unsqueeze(1) # [B, 1, 1, 256] rgb self.feature_to_rgb(feat) # [B, 3, H, W] slot_images.append(rgb) slot_images torch.stack(slot_images, dim1) # [B, num_slots, 3, H, W] # Alpha合成加權(quán)求和 recon_images (slot_images * masks.unsqueeze(2)).sum(dim1) # [B, 3, H, W] return recon_images, masks訓(xùn)練目標(biāo)通常是多任務(wù)組合重建損失對(duì)于輸入的歷史幀編碼-解碼后的重建圖像應(yīng)與原圖盡可能接近如MSE或感知損失。預(yù)測(cè)損失對(duì)于未來(lái)的真實(shí)幀由模型預(yù)測(cè)的槽經(jīng)過(guò)解碼生成的圖像應(yīng)與真實(shí)未來(lái)幀接近。物理約束損失可選但關(guān)鍵在槽的潛在空間或解碼過(guò)程中引入額外的正則化損失鼓勵(lì)模型遵守物理規(guī)律。例如持續(xù)性損失相鄰幀中同一對(duì)象的槽表示應(yīng)保持相似。對(duì)象不變性損失物體的外觀顏色、紋理在短時(shí)間內(nèi)不應(yīng)突變。物理屬性一致性損失如果槽的某些維度被解釋為物理屬性如速度則可以約束其變化符合簡(jiǎn)單運(yùn)動(dòng)學(xué)。3. 實(shí)現(xiàn)流程與實(shí)戰(zhàn)要點(diǎn)3.1 環(huán)境準(zhǔn)備與依賴假設(shè)我們使用PyTorch進(jìn)行實(shí)現(xiàn)。# 建議的依賴環(huán)境 python3.8 torch1.9.0 torchvision numpy matplotlib # 用于可視化 # 可選用于更復(fù)雜的GNN動(dòng)力學(xué)模型 # pip install torch-geometric# requirements.txt 示例 torch1.13.1 torchvision0.14.1 numpy1.21.5 Pillow9.3.0 tqdm4.64.1 tensorboard2.11.03.2 數(shù)據(jù)準(zhǔn)備與預(yù)處理模型需要視頻序列數(shù)據(jù)進(jìn)行訓(xùn)練。以合成物理數(shù)據(jù)集如Physion,CLEVRER為例這些數(shù)據(jù)集提供了可控的物理場(chǎng)景和精確的標(biāo)注。import torch from torch.utils.data import Dataset, DataLoader from torchvision import transforms class PhysicsVideoDataset(Dataset): def __init__(self, data_path, seq_len10, image_size(64, 64)): data_path: 包含視頻片段如.npy文件或圖像序列的路徑 seq_len: 每個(gè)樣本的幀數(shù)歷史幀未來(lái)幀 self.data_path data_path self.seq_len seq_len self.transform transforms.Compose([ transforms.Resize(image_size), transforms.ToTensor(), # 根據(jù)數(shù)據(jù)情況決定是否歸一化 # transforms.Normalize(mean[0.5], std[0.5]) ]) # 這里需要實(shí)現(xiàn)加載數(shù)據(jù)列表的邏輯 self.video_clips self._load_clips() def _load_clips(self): # 實(shí)現(xiàn)遍歷data_path將長(zhǎng)視頻分割成固定長(zhǎng)度的片段 # 返回片段起始索引列表 clips [] # 偽代碼 # for video in all_videos: # for start in range(0, len(video)-seq_len, stride): # clips.append((video_id, start)) return clips def __len__(self): return len(self.video_clips) def __getitem__(self, idx): video_id, start_frame self.video_clips[idx] # 加載從start_frame開(kāi)始的seq_len幀圖像 frames [] for i in range(self.seq_len): # 假設(shè)load_image函數(shù)能根據(jù)video_id和幀索引加載PIL圖像 img load_image(video_id, start_frame i) img self.transform(img) frames.append(img) frames torch.stack(frames, dim0) # [seq_len, C, H, W] # 前T幀作為歷史后seq_len-T幀作為未來(lái)目標(biāo) T self.seq_len // 2 # 示例前5幀歷史預(yù)測(cè)后5幀 history frames[:T] future frames[T:] return history, future # [T, C, H, W], [seq_len-T, C, H, W]3.3 模型訓(xùn)練循環(huán)核心代碼下面展示訓(xùn)練循環(huán)的關(guān)鍵部分整合了前述組件。def train_one_epoch(model, dataloader, optimizer, device, epoch): model.train() total_loss 0 for batch_idx, (history, future_gt) in enumerate(dataloader): history, future_gt history.to(device), future_gt.to(device) B, T_history, C, H, W history.shape T_future future_gt.shape[1] optimizer.zero_grad() # 1. 編碼歷史幀得到初始槽 init_slots None for t in range(T_history): frame_slots model.encoder(history[:, t]) # [B, num_slots, slot_dim] if init_slots is None: init_slots frame_slots else: # 可以對(duì)歷史幀的槽進(jìn)行聚合如平均作為初始狀態(tài) init_slots (init_slots frame_slots) / 2 current_slots init_slots pred_frames [] # 2. 自回歸預(yù)測(cè)未來(lái)幀 for t in range(T_future): # 動(dòng)力學(xué)模型預(yù)測(cè)下一時(shí)刻槽 next_slots model.dynamics(current_slots) # 解碼器根據(jù)槽生成圖像 pred_frame, _ model.decoder(next_slots) pred_frames.append(pred_frame) # 為下一步預(yù)測(cè)更新當(dāng)前槽或使用預(yù)測(cè)的槽或使用真實(shí)槽的編碼后者是Teacher Forcing # 這里使用預(yù)測(cè)的槽是自回歸推理模式 current_slots next_slots pred_frames torch.stack(pred_frames, dim1) # [B, T_future, C, H, W] # 3. 計(jì)算損失 # 重建損失對(duì)歷史幀 recon_loss 0 for t in range(T_history): recon_frame, _ model.decoder(model.encoder(history[:, t])) recon_loss F.mse_loss(recon_frame, history[:, t]) recon_loss / T_history # 預(yù)測(cè)損失 pred_loss F.mse_loss(pred_frames, future_gt) # 物理正則化損失示例槽的平滑性約束 # 假設(shè)我們有一個(gè)函數(shù)計(jì)算物理正則項(xiàng) phys_reg_loss model.compute_physics_regularization(init_slots, next_slots) # 總損失 loss recon_loss pred_loss 0.1 * phys_reg_loss # 加權(quán)求和 loss.backward() optimizer.step() total_loss loss.item() if batch_idx % 100 0: print(fEpoch {epoch}, Batch {batch_idx}, Loss: {loss.item():.4f}) avg_loss total_loss / len(dataloader) return avg_loss3.4 外推能力評(píng)估訓(xùn)練完成后評(píng)估是關(guān)鍵。需要在專門(mén)的外推測(cè)試集上進(jìn)行例如新物體訓(xùn)練集只有圓形和方形物體測(cè)試集引入三角形物體。新屬性訓(xùn)練集物體彈性系數(shù)在[0.5, 0.8]之間測(cè)試集使用[0.9, 1.0]完全彈性碰撞。新場(chǎng)景訓(xùn)練集是空曠平面測(cè)試集加入障礙物或斜坡。更長(zhǎng)時(shí)序訓(xùn)練時(shí)預(yù)測(cè)未來(lái)5幀測(cè)試時(shí)要求預(yù)測(cè)未來(lái)20幀。評(píng)估指標(biāo)不應(yīng)僅僅是像素級(jí)的MSE或SSIM這些指標(biāo)在外推場(chǎng)景下不可靠而應(yīng)包含物理合理性指標(biāo)通過(guò)一個(gè)預(yù)訓(xùn)練的物理規(guī)則檢查器或簡(jiǎn)單的啟發(fā)式規(guī)則來(lái)判斷預(yù)測(cè)視頻是否違反物理定律如物體質(zhì)量守恒、非穿透性。下游任務(wù)性能用預(yù)測(cè)的視頻幀去驅(qū)動(dòng)一個(gè)下游任務(wù)如機(jī)器人抓取規(guī)劃看其成功率是否與使用真實(shí)視頻接近。4. 常見(jiàn)問(wèn)題與排查思路在實(shí)現(xiàn)和訓(xùn)練此類(lèi)模型時(shí)會(huì)遇到一些典型問(wèn)題。問(wèn)題現(xiàn)象可能原因排查與解決思路預(yù)測(cè)結(jié)果模糊解碼器過(guò)于簡(jiǎn)單損失函數(shù)過(guò)度依賴像素MSE導(dǎo)致模型輸出所有可能未來(lái)的平均。1. 強(qiáng)化解碼器能力使用更深的網(wǎng)絡(luò)或引入對(duì)抗損失GAN鼓勵(lì)清晰度。2. 使用感知損失如VGG特征距離替代純像素MSE。3. 引入隨機(jī)潛變量來(lái)建模未來(lái)不確定性如VAE或擴(kuò)散模型。物體分解失敗槽表示混亂Slot Attention訓(xùn)練不穩(wěn)定場(chǎng)景過(guò)于復(fù)雜槽數(shù)量不足。1. 調(diào)整Slot Attention的迭代次數(shù)、學(xué)習(xí)率。2. 增加槽的數(shù)量。3. 在損失中加入鼓勵(lì)槽之間稀疏性的正則項(xiàng)使每個(gè)槽專注于一個(gè)物體。動(dòng)力學(xué)模型無(wú)法學(xué)習(xí)長(zhǎng)期依賴自回歸預(yù)測(cè)誤差累積動(dòng)力學(xué)模型容量不足。1. 在訓(xùn)練時(shí)使用Teacher Forcing將真實(shí)歷史槽而非預(yù)測(cè)槽輸入動(dòng)力學(xué)模型在推理時(shí)切換為自回歸。2. 使用更強(qiáng)大的序列模型如Transformer或更深的GNN作為動(dòng)力學(xué)模型。3. 嘗試在潛在空間進(jìn)行多步預(yù)測(cè)然后一次性解碼減少迭代誤差。外推性能提升不明顯模型仍然過(guò)擬合到訓(xùn)練數(shù)據(jù)的表面統(tǒng)計(jì)特征物理正則化太弱。1. 增強(qiáng)數(shù)據(jù)增強(qiáng)模擬更廣泛的物理參數(shù)變化。2. 設(shè)計(jì)更強(qiáng)的、可微的物理約束損失直接作用于槽表示如約束預(yù)測(cè)的位置變化與速度相符。3. 采用課程學(xué)習(xí)先從簡(jiǎn)單物理場(chǎng)景開(kāi)始逐步增加復(fù)雜度。訓(xùn)練速度慢內(nèi)存占用高視頻數(shù)據(jù)分辨率高序列長(zhǎng)度長(zhǎng)模型參數(shù)量大。1. 使用更小的圖像分辨率如64x64進(jìn)行訓(xùn)練。2. 在槽的潛在空間進(jìn)行動(dòng)力學(xué)模擬而非像素空間。3. 使用梯度檢查點(diǎn)技術(shù)。4. 采用混合精度訓(xùn)練AMP。5. 最佳實(shí)踐與工程建議將物理世界模型應(yīng)用于實(shí)際項(xiàng)目需要考慮以下工程細(xì)節(jié)5.1 數(shù)據(jù)策略合成與真實(shí)數(shù)據(jù)的結(jié)合從合成數(shù)據(jù)開(kāi)始像CLEVRER、Physion、NVIDIA的Isaac Gym環(huán)境能生成精確可控的物理場(chǎng)景數(shù)據(jù)是研究和驗(yàn)證模型物理理解能力的理想起點(diǎn)。它們提供完美的標(biāo)注和無(wú)限的數(shù)據(jù)變體。向真實(shí)數(shù)據(jù)遷移真實(shí)世界視頻噪聲大、物體分割模糊??梢允褂迷诤铣蓴?shù)據(jù)上預(yù)訓(xùn)練的模型作為初始化。在真實(shí)數(shù)據(jù)上微調(diào)時(shí)采用更強(qiáng)大的視覺(jué)編碼器如ResNet預(yù)訓(xùn)練權(quán)重。引入自監(jiān)督學(xué)習(xí)目標(biāo)如時(shí)序一致性、顏色恒常性等作為輔助任務(wù)來(lái)適應(yīng)真實(shí)數(shù)據(jù)分布。5.2 模型設(shè)計(jì)平衡表達(dá)力與泛化性歸納偏置的注入明確地將物理知識(shí)設(shè)計(jì)進(jìn)模型結(jié)構(gòu)。例如將對(duì)象槽的某些維度顯式地定義為位置、速度、質(zhì)量并在動(dòng)力學(xué)模型中應(yīng)用近似的牛頓運(yùn)動(dòng)方程作為初始化或軟約束。模塊化與可解釋性保持編碼器、動(dòng)力學(xué)模型、解碼器的模塊化。這便于調(diào)試和分析。例如可以可視化每個(gè)槽對(duì)應(yīng)的圖像掩膜檢查物體分解是否成功可以分析槽向量的某些維度在時(shí)間上的變化看其是否對(duì)應(yīng)有意義的物理量。不確定性建模物理世界本質(zhì)是不確定的??紤]在動(dòng)力學(xué)預(yù)測(cè)中輸出分布如高斯分布而非確定值或者使用擴(kuò)散模型來(lái)生成多樣的未來(lái)可能。5.3 訓(xùn)練技巧課程學(xué)習(xí)先訓(xùn)練模型在簡(jiǎn)單、確定性的場(chǎng)景如單個(gè)物體勻速運(yùn)動(dòng)中預(yù)測(cè)穩(wěn)定后再逐步增加物體數(shù)量、交互復(fù)雜度和隨機(jī)性。多任務(wù)學(xué)習(xí)聯(lián)合訓(xùn)練視頻預(yù)測(cè)與相關(guān)的代理任務(wù)如物體分割、深度估計(jì)、光流預(yù)測(cè)。這些任務(wù)提供的監(jiān)督信號(hào)有助于學(xué)習(xí)更通用的場(chǎng)景表示。正則化是關(guān)鍵除了重建損失持續(xù)性損失、對(duì)象恒常性損失、物理約束損失對(duì)于學(xué)習(xí)可外推的表示至關(guān)重要。需要仔細(xì)調(diào)整這些正則化項(xiàng)的權(quán)重。5.4 評(píng)估與部署建立嚴(yán)謹(jǐn)?shù)耐馔茰y(cè)試集這是衡量工作價(jià)值的核心。測(cè)試集必須與訓(xùn)練集在物體、屬性、場(chǎng)景、動(dòng)態(tài)規(guī)則上有本質(zhì)不同。定性分析與定量指標(biāo)并重除了數(shù)字指標(biāo)一定要人工檢查預(yù)測(cè)視頻。模型是否產(chǎn)生了“魔法般”的物體運(yùn)動(dòng)物體的相互作用是否符合直覺(jué)在閉環(huán)系統(tǒng)中測(cè)試最終目標(biāo)是服務(wù)于決策。將訓(xùn)練好的世界模型接入一個(gè)規(guī)劃器如模型預(yù)測(cè)控制MPC在模擬器甚至真實(shí)機(jī)器人中測(cè)試看基于模型“想象”的規(guī)劃是否有效。這是最有力的證明。構(gòu)建一個(gè)真正學(xué)會(huì)物理規(guī)律并能外推的視頻世界模型是通向通用視覺(jué)智能的重要一步。本文剖析的方法從對(duì)象中心表示出發(fā)通過(guò)精心設(shè)計(jì)的架構(gòu)和損失函數(shù)將物理歸納偏置嵌入學(xué)習(xí)過(guò)程。實(shí)現(xiàn)這樣的系統(tǒng)需要綜合計(jì)算機(jī)視覺(jué)、深度學(xué)習(xí)、物理建模乃至強(qiáng)化學(xué)習(xí)等多方面的知識(shí)。盡管完全解決這一問(wèn)題仍任重道遠(yuǎn)但當(dāng)前的研究已經(jīng)為我們提供了清晰的路徑和強(qiáng)大的工具。建議讀者從復(fù)現(xiàn)一個(gè)簡(jiǎn)單的合成數(shù)據(jù)集如拋物線運(yùn)動(dòng)上的模型開(kāi)始逐步增加復(fù)雜度在實(shí)踐中深入理解每一部分設(shè)計(jì)的作用。最終將這種對(duì)物理規(guī)律的學(xué)習(xí)能力與大規(guī)模真實(shí)數(shù)據(jù)結(jié)合有望催生出更可靠、更智能的視覺(jué)系統(tǒng)。