
Deepgram API 價格:探索高效語音轉文字解決方案
//1. 資產信息
"ReferencePath":"/Game/ArchVizInteriorVol3/Meshes/SM_Bed.SM_Bed",//資產引用路徑
"Name":"SM_Bed",//資產名字
//2. 語義描述
"Description":"這是一張床",// 語音描述
//3. 幾何信息
"Pivot":"物體中心",//物體錨點
"GeometryInfo":{
"vertices":59997,//頂點數
"Triangles":"114502",//三角形數
"xxx":"" },
"BoundingBox":{
"center":[xx,xx],
"extend":[xx,xx]
},//包圍盒信息
//4. 基本材質信息
"Materials":[
{"MI_Bed_Fabric_1":[
"BaseColor":xxx,
"BaseFallof":xxx
]}
]
}
其中的大部分信息,我們可以在Unreal引擎中通過對模型資產基本信息的解析進行填充:
但是只靠UE資產的信息解析顯然是不夠的,其中缺少關鍵的語義描述信息“Description。傳統的方法是基于人工打標的方式給3D模型進行打標,這些標簽便成為模型在語言空間的表示,并通過這些標簽在模型庫中進行搜索。這種方法不但費時費力,并且,如果想全面的描述一個模型,可能需要大量的tag進行標記:
我想要一張床 || 我想要一張雙人床 || 我想要一張現代風格的雙人床 || 我想要一個頂點數小一些的雙人床 || 我想要一個紅色的雙人床 || 我想要一張床上有個黑色小熊的紅色雙人床
為了能夠填充一個合適的語義描述信息,我們使用視覺-語言模型(Vision-Language Models, VLMs)進行描述信息的填充, 這種任務類型通常被稱為物體級標注:
物體級標注 要求模型生成單個3D物體的簡短自然語言描述。此描述應關注物體的關鍵特征,包括其形狀和語義特征。
在Unreal引擎中利用VLMs進行物體級標注,比如對于這樣一張床,讓通義千問VL-Max幫我們形成其描述信息,可以看到是非常準確的,大模型不僅幫我們總結了三維模型的主體構成部分,甚至連光影效果、設計風格等細節部分都進行了整理。
當把標注好的信息填充到模型描述文件的“Description”字段后,我們就完成了對一個三維模型的自然語言級別的表示。對所有的模型進行這個編碼后,我們便可以獲得一個自然語言空間下的三維模型庫,并通過“ReferencePath”這個字段與實體的三維模型進行關聯,核心步驟如下:
由此,借助VLMs,我們建立了每個模型在自然語言空間的表示。
收集所有的模型,即可建立一個自然語言空間下的三維模型庫。如下圖所示,并通過“ReferencePath”這個字段與實體的三維模型進行關聯。
模型搜索
至此能夠被大模型理解的模型的信息庫已經全部生成,下一步就是大模型如何利用這個信息庫,輔助我們進行模型的搜索,最終實現能夠根據用戶自然語言的輸入,輸出模型在引擎中的描述路徑“ReferencePath”,從而找到對應的三維模型實體。
我想要一張床 || 我想要一張雙人床 || 我想要一張現代風格的雙人床 || 我想要一個頂點數小一些的雙人床 || 我想要一個紅色的雙人床 || 我想要一張床上有個黑色小熊的紅色雙人床
為了能夠讓大模型感知到這個模型信息庫,我們使用大模型的知識檢索增強(RAG)能力,這里以阿里云百煉平臺+通義千問-max模型為例,結合我們3D模型表示過程中建立的三維模型庫的知識庫展示搭建一個智能體應用的過程,專門用于三維模型的搜索。
Assistant API 支持知識檢索增強(RAG)工具,讓智能體能夠根據您的需求獲取外部知識,例如私有產品知識或客戶的偏好信息。本文介紹了一個簡單的“手機導購”示例,幫助您快速上手RAG工具的基本使用方法。
步驟一:在“數據管理”-“結構化數據”下導入三維模型庫信息
步驟二:在“知識索引”-“創建知識庫”下導入上一步的知識,建立知識庫
步驟三:在“我的應用”-“新增應用”-“創建RAG應用”下,創建RAG應用,并配置剛剛建立好的知識庫,然后可以進行一些搜索的驗證。
步驟四:智能體應用調用,可以在Unreal引擎中通過HTTP的接口調用百煉的應用。
至此,我們便通過VLMs建立了每個三維模型的自然語言空間的表示,并借助大模型的RAG能力可以快速的找到符合我們自然語言描述的模型,大大的提高搜索效率。
在有了3D模型的表示后,下一步就是形成場景級別的表示,被稱為3D場景理解,也被稱為場景級標注:
場景級標注 是為整個3D場景生成簡短自然語言描述。此類描述通常關注全局場景信息(如房間類型和風格)、場景中的關鍵物體及其關系。并建立與場景中的實體的一一映射關系,也即為每個場景中的實體增加語義標簽。
為了獲取場景級標注中的全局場景信息,以及關鍵物體及其關系,我們可以將不同視角下的場景截圖直接喂給VLMs,可以看到大模型不但給出了物體信息、布局信息、空間信息,而且就很多細節以及場景的特點都給出了準確的描述。然而這其中有個關鍵的Mapping問題:因為VLMs只提供了3D場景的抽象文本描述,未能建立描述與Unreal引擎場景內實體的對應關系。在Unreal引擎中的場景描述是一個一個的Actor,我們只知道其中有兩個大型吊燈,卻不知道哪個Actor是大型吊燈,從而接下來的三維場景交互也就無從說起。因此場景理解的關鍵點就是建立抽象文本描述與場景內的一一映射關系。
為了解決這個問題,我們有多種策略,本質上就是解決多對多的Mapping問題。
策略一:
核心思路:控制出現在場景截圖中的物體數量
核心步驟:
策略二:
核心思路:保留全部物體,使用實體的唯一標識符標記要重點識別的物體
核心步驟:
輸入:【高腳椅被選中】
輸出:
策略三:
核心思路:保留場景輔助信息的同時,在一個請求的情況下,使用實體UUID盡可能多的標記物體
核心步驟:
輸入:【手動框選幾個主要物體,并標注】
輸出:
綜合使用如上幾種策略后,我們一方面可以獲取場景的全局場景信息(如房間類型和風格)、場景中的關鍵物體及其關系,也建立與場景中的實體的一一映射關系,同時我們也可以根據實體的唯一標識符收集一些引擎內的信息,如位置、錨點、空間關系等。綜合上述所有信息,可以形成這樣一份場景描述文件,這個場景描述文件+當前場景的截圖構成了大模型與3D場景之間相互握手的橋梁,輔助大模型認識、感知和理解3D場景。舉例:大模型通過圖片識別到場景中有幾把椅子,并通過場景描述文件,將圖片中的椅子與3D場景中的椅子建立了映射。
{
"name": "StaticMeshActor_1",
"uUId": "7D70F97241D37F14A1C649860C7FE24D",
"Description": "一張雙人床",
"transform":
{
"rotation":
{
"x": 0,
"y": 0,
"z": 0,
"w": 1
},
"translation":
{
"x": 0,
"y": 0,
"z": 0
},
"scale3D":
{
"x": 1,
"y": 1,
"z": 1
}
},
"boundingBoxCenter":
{
"x": 21.368782043457031,
"y": 1.3006591796875,
"z": 49.454704284667969
},
"boundingBoxExtent":
{
"x": 118.88101959228516,
"y": 112.37855529785156,
"z": 49.406597137451172
}
},
{
"name": "StaticMeshActor_2",
"uUId": "453F4F714546496132DA4EA97D22A636",
"Description": "一個書架",
"transform":
{
"rotation":
{
"x": -1.2325951644078309e-32,
"y": -0.70710678118654746,
"z": 6.1629758220391547e-33,
"w": 0.70710678118654735
},
"translation":
{
"x": 1.5,
"y": 0.5,
"z": 0
},
"scale3D":
{
"x": 1,
"y": 1,
"z": 1
}
},
"boundingBoxCenter":
{
"x": -24.001873016357415,
"y": 1.0605430603027344,
"z": -0.34783363342284446
},
"boundingBoxExtent":
{
"x": 25.503879547119134,
"y": 19.990333557128906,
"z": 19.498573303222656
}
}
三、對話式的3D世界交互
3D世界交互操作指的是自然語言與Unreal引擎內物體物理交互的能力,從移動物體到復雜的操作序列,如組裝零件或開門或者調整天氣等。在建立好三維模型表示以及能夠對場景進行理解后,使LLMs能夠執行操作任務的核心思想在于將動作序列標記化。為了讓LLMs輸出特定動作,然后Unreal引擎執行對應的動作,首先需要FunctionCall,使LLMs能夠根據任務和3D場景上下文生成這些FunctionCall。
舉例:
user: 我想要在場景中的桌子上放置一個杯子
大模型接收到這個邏輯后,會先去收集場景信息,確定桌子的位置信息等等,然后去三維模型庫去找杯子的ReferencePath,然后嘗試生成這個杯子到桌子上去,邏輯是這個邏輯,但是我們非常清楚,標紅的四個行為都是要對應一個函數調用的,要不然只能存在在語言層面,不會產生實際的行為。通過對對應Unreal引擎API的描述,讓大模型知道在放置對應模型時應該調用哪個Unreal函數以及提供什么參數
Function Calling(函數調用)使開發人員能夠描述函數(也稱為工具,您可以將其視為模型要執行的操作,例如執行計算或下訂單),并讓模型智能地選擇輸出包含參數的 JSON 對象來調用這些函數。
在上述例子中我們至少要添加如下幾個FunctionCall:
本例中我們以SpawnObjec為例,說明Function Call的流程:
{ "type": "function", "function": { "description": "在場景中生成或者放置一個物體",//描述函數的主要作用 "parameters": { "type": "object", "properties"://描述函數的參數 { "ReferencePath": { "type": "string",//描述函數的參數的類型 "description": "要生成物體的ReferencePath" //描述函數的參數的含義 }, "description": { "type": "string", "description": "要生成物體的描述" }, "pos_x": { "type": "number", "description": "物體在x軸上的位置" }, "pos_y": { "type": "number", "description": "物體在y軸上的位置" }, "pos_z": { "type": "number", "description": "物體在z軸上的位置" }, "rot_x": { "type": "number", "description": "物體繞x軸的旋轉角度" }, "rot_y": { "type": "number", "description": "物體繞y軸的旋轉角度" }, "rot_z": { "type": "number", "description": "物體繞z軸的旋轉角度" }, "scale_x": { "type": "number", "description": "物體在x軸上的縮放系數,默認為1.0" }, "scale_y": { "type": "number", "description": "物體在y軸上的縮放系數,默認為1.0" }, "scale_z": { "type": "number", "description": "物體在z軸上的縮放系數,默認為1.0" } }, "required": [//描述調用該函數需要哪些參數 "ReferencePath", "description", "pos_x", "pos_y", "pos_z", "rot_x", "rot_y", "rot_z", "scale_x", "scale_y", "scale_z" ] }, "name": "spawn_object" } }
LogChatGPT: Display: [CityV]: OpenAI call the function: [spawn_object] with args: {"ReferencePath": "/Game/ArchVizInteriorVol3/Meshes/SM_Bed", "description": "一張雙人床", "pos_x": 0, "pos_y": 0, "pos_z": 0, "rot_x": 0, "rot_y": 0, "rot_z": 0, "scale_x": 1.0, "scale_y": 1.0, "scale_z": 1.0}
當輸入為:“把杯子移動到咖啡桌的頂部中心位置”時,大模型會根據場景信息找到對應的杯子和咖啡桌,并計算移動的位置,然后發起FunctionCall,調用MoveObject方法,真正的在Unreal引擎中移動杯子到指定的位置。
至此我們介紹了基于LLM打造實時可交互3D世界的要的三個核心模塊:
總的來說,借助Unreal引擎和通義千問家族大模型,我們探索了LLMs與3D結合,在理解和與復雜3D世界互動方面的能力。
大型語言模型(LLMs)的獨特優勢,如上下文學習、逐步推理、開放詞匯能力和廣泛的世界知識,它們在提升空間理解和交互方面的巨大潛力。將LLMs與3D數據融合,提供了一個獨特的機會,可以增強計算模型對物理世界的理解和互動,從而在多個領域引領創新,包括自動駕駛、具身智能、3D生成等。
自動駕駛領域:大模型在自動駕駛的數據標注、仿真和感知環節應用潛力十足。數據標注方面, 技術從人工標注轉為 AI 主導人工輔助。一方面,視覺大模型知識完備性好、精度高、泛化能力強;另一方面,自動駕駛數據積累和標注復雜度提高使數據標注工作量快速增加,AI 大模型的應用有助于加速數據標注并大幅降低數據生產成本。
具身智能領域:LLMs的規劃、工具使用和決策能力可以用于創建3D具身智能體。這些能力使LLMs能夠在3D環境中進行導航,與物體交互,并選擇適當的工具來執行特定任務。
3D生成領域:LLMs與3D結合可以改善傳統建模復雜且耗時的情況,根據語言可以生成情景化的對象或者場景。
總的來說,LLMs在處理、理解和生成3D數據的方法、應用展現了新興能力和強大的變革潛力,為空間智能的進一步發展鋪平道路。
文章轉載自:基于LLM打造沉浸式3D世界