Stable Dreamfusion 上的這個存儲庫啟發(fā)了這個博客。
我認為 3D 擴散和 3D 生成似乎是每個人心中的下一件大事。 Stability AI 開始招聘才華橫溢的 3D AI 工程師,谷歌和學術界每天似乎都在進行令人印象深刻的即時 3D 模型生成器研究。 然而,雖然我對這些模型的工作原理有一個模糊的了解,但我絕對沒有具體的理解。
所以,這篇博客的目標是理解以下兩篇論文
- DreamFusion: Text-to-3D using 2D Diffusion可以說開啟了將文本轉換為 3D 模型的整個想法。
- Zero-1-to-3: Zero-shot One Image to 3D Object?,這是Stable Dreamfusion?存儲庫中用于將圖像轉換為 3D 模型的模型。
現(xiàn)在,讓我們從 DreamFusion 開始。
NSDT工具推薦:?Three.js AI紋理開發(fā)包?-?YOLO合成數(shù)據(jù)生成器?-?GLTF/GLB在線編輯?-?3D模型格式在線轉換?-?可編程3D場景編輯器?-?REVIT導出3D模型插件?-?3D模型語義搜索引擎?-?Three.js虛擬軸心開發(fā)包?
這是一個相當出色的工作,坦白說讓我有些震驚。 這個想法是我們可以使用擴散模型來生成圖像,例如穩(wěn)定擴散,并用它來生成3D模型!
1、什么是擴散?
現(xiàn)在,如果你想回顧一下擴散模型,請查看此處,但主要回顧如下:
擴散過程具有向圖像添加噪聲的正向過程和從圖像中去除噪聲的反向過程。 你可以將這個前向過程視為只是將先前的輸入乘以某個數(shù)量,并向正態(tài)分布添加一些常數(shù)倍。 就這樣吧!
噪聲圖像 = a ? 噪聲較小的圖像 + b ? 噪聲
這些 a 和 b 在去噪過程的某個階段發(fā)生變化,但幾乎所有擴散模型都完全遵循上述想法!
每執(zhí)行一次上述操作,我們就前進一步。 所以,原始圖像是 z?,但如果我們進行上述噪聲處理 2 次,我們就會得到 z2。
然后,似乎很明顯
噪聲較小的圖像 = (噪聲圖像 - b? 噪聲)/a
事實上,由于所有這些 as和 b 都是常數(shù),我們有時可以說
圖像=(噪聲圖像 - b'·噪聲)/a'
對于一些修改后的常數(shù) b' 和 a'。 這種方法有相當多的錯誤,但它對于以隨機時間步長猜測初始圖像非常有用!
一旦我們訓練了一個模型以便我們可以找到噪聲,我們幾乎就擁有了一個可以從純噪聲生成圖像的擴散模型!
主要步驟是,
- 從純噪聲開始作為噪聲圖像
- 使用模型預測噪聲,將圖像推向噪聲較少的圖像
- 進行上述計算以獲得噪聲較少的圖像!
這就是擴散模型背后的主要思想! 至于它是如何訓練的等,我之前曾在這里寫過。 但主要思想是:
- 從輸入圖像 z? 開始
- 添加一些隨機噪聲 ? 以獲得噪聲圖像 z?
- 最后,預測可用于對 z? 進行去噪的噪聲 ?’(z?, t),最終得到 z?。
- 損失為 (?’(z?, t)-?)2
在 Dreamfusion 中,這種損失被引入為:
E 基本上是期望值。 因此,你可以將其視為所有可能數(shù)據(jù)的平均值。 w(t) 只是時間步 t 的某個常數(shù),我們可以輕松地忽略它。 α?x + σ?ε 是我們的噪聲圖像。 我們可以從中獲得
圖像=(噪聲圖像 - b'·噪聲)/a'
我們之前討論過。 然后,
噪聲圖像 = a'? 圖像+b'? 噪聲
中間的噪音部分幾乎就是我們討論的內容!
因此,我們嘗試正確猜測噪聲,以在任何給定時間步對噪聲圖像進行去噪! 如果這部分令人困惑,請告訴我。 我絕對可以修改。
2、回到DreamFusion
現(xiàn)在 Dreamfusion 所說的是,假設有一個帶有一些參數(shù) θ 的可微生成器 g,其中 g(θ) 輸出圖像! 你可以將其視為通過特定攝像機角度和照明 (g) 渲染的 3d 場景 (θ)。
現(xiàn)在,我們如何使 g(θ) 看起來像擴散模型的輸出? 第一個想法是優(yōu)化 θ,使生成器的輸出成為擴散模型的輸出,就像這樣!
這里, ?是擴散模型的參數(shù)。 這里的主要思想是我們假設我們的擴散模型 ? 對圖像有很好的理解。 然后,它必須知道哪些圖像看起來正常,哪些圖像看起來不正常。 如果我們的擴散損失很高并且我們的模型無法預測首先添加了哪些噪聲,則意味著從 g(θ) 生成的圖像看起來不像實際圖像。 所以我們可以反向傳播這個損失來更新 θ,我們應該可以開始了!
然而,奇怪的是,他們發(fā)現(xiàn)這樣做效果并不好。 讓我們看看為什么! 所以我們的擴散損失是
然后,我們用 g(θ) 重置 x,我們想要獲得相對于 θ 的梯度! 然后,我們幾乎只使用鏈式法則
這里的y 是擴散模型的輸入,在這種情況下是文本! 所以這里我們嘗試生成 θ ,使其輸出圖像對應于文本提示。
我懷疑有一個拼寫錯誤,對于正確的鏈式法則,δ ?’/z? 應該是 δ ?’/δ z?。
對于為什么 δ z?/δ x 缺失,圖像 x 可以用噪聲圖像來近似,如下所示
z? = a'x+b'? 噪聲
所以 δ z?/δ x=a' 這是一個常數(shù),所以我們可以將它放入 w(t) 中。 除此之外,這似乎是一個非常標準的鏈式規(guī)則。
這里,δ ?'/δ z? 是昂貴的。 這是有道理的,因為我們需要遍歷生成這些圖像的擴散模型并通過它計算梯度。 然而,這個術語對于小噪聲水平也沒有用,正如論文所說,“因為它經過訓練以近似邊緣密度的縮放 Hessian 矩陣?!?如果有人對此有很好的解釋,請告訴我。 我目前的理解是,正如 EDiffi 等其他研究中所見,當噪聲水平較低時,?'幾乎完全忽略文本,并專注于使噪聲圖像看起來像正常圖像。 這對我們的情況適得其反,因為它不一定強制我們生成的圖像遵循文本提示。 所以結果是次優(yōu)的。
現(xiàn)在,這篇論文所做的是,因為這個術語對我們的損失幾乎沒有任何貢獻,而且只會讓它變得更大,所以讓我們刪除它! 我們得到
現(xiàn)在,雖然刪除導數(shù)似乎有點違反直覺,但這可以正式導出。 它非常有趣,所以一旦我完全消化它就會把它放在這里。
現(xiàn)在,總的來說,就是這樣。 這種方法最酷的一點是我們永遠不需要擴散模型的梯度! 我們可以從擴散模型中采樣并將其用于 θ 的梯度!
3、NeRF:我們如何從 θ 生成 3D 模型?
首先我們來了解一下光線追蹤! 光線追蹤背后的主要思想是,對于圖像中的每個像素,我們都會發(fā)射激光。 如果它擊中一個物體,我們就會看到它。 如果它沒有擊中任何東西,我們就什么也看不見。 下圖幫助我有了這種直覺
現(xiàn)在假設我有 3d 點 μ。 我們將其通過 MLP(單層神經網絡),我們得到
- τ = 該點的不透明程度
- c= 點的 RGB。
所以本質上,我們將相機的 3D 坐標和來自它們的光線映射到顏色以及顏色的密度。
在dreamfusion代碼中,在訓練期間,它似乎像這樣隨機化姿勢
if self.training:
# random pose on the fly
poses, dirs, thetas, phis, radius = rand_poses(....
所以本質上它獲取 3d 坐標和射線角度。
總的來說,我們希望通過訓練來優(yōu)化這個函數(shù),以便它可以將任何角度的任何點映射到顏色和 RGB,以便我們可以從不同角度拍攝生成的圖像! 管道如下圖所示
然而,這是我們想要從文本生成 3D 模型的情況下的一種技術。 我們可以使用相同的技術從圖像生成 3D 模型嗎? 答案是不。 主要問題是這個損失函數(shù)
這里的y是我們的文本條件,它迫使我們的模型生成文本。 所以這個程序中沒有任何地方可以告訴它我們想要它是什么樣的圖像。
現(xiàn)在,我們可以更改它,以便條件 y 接受圖像嗎?
這正是我們下一篇研究論文所做的!
4、Zero-1-to-3:零樣本單圖像生成 3D 對象
本文的主要思想是我們可以微調穩(wěn)定的擴散模型以便我們可以轉動物體嗎? 答案是肯定的!
更詳細地說,他們首先使用名為 CLIP 的強大圖像編碼器對輸入圖像進行編碼。 然后我們添加相機旋轉和平移(R,T)。 我們將所有這些連接在一起。 現(xiàn)在,我們有了圖像、所需的新相機旋轉 (R) 和所需的新相機平移 (T),我們希望它使用這些參數(shù)生成新圖像。 現(xiàn)在,當我第一次讀到這個想法時,我很好奇這樣一個用于訓練這樣的模型的數(shù)據(jù)集已經存在。 事實上,確實如此! 這是數(shù)據(jù)集?objaverse?,它是一個開源項目。 這似乎是由“艾倫人工智能研究所、華盛頓大學、哥倫比亞大學、Stability AI、LAION 和加州理工學院”合作完成的。 這就是為什么它如此優(yōu)秀并且同時開源是有道理的!
總的來說,在stable dreamfusion中,當我仍在消化代碼時,該模型已與 NeRF 相結合,以便你可以通過用我們的剪輯圖像嵌入替換 y 來從圖像生成 3D 模型。 我不確定stable dreamfusion是否利用了我們可以轉動圖像的事實。 我希望如此,因為這是一個了不起的功能。
但總的來說,這個主題就這樣了。 希望大家喜歡這篇文章!文章來源:http://www.zghlxwxcb.cn/news/detail-858704.html
原文鏈接:理解3D擴散模型 - BimAnt文章來源地址http://www.zghlxwxcb.cn/news/detail-858704.html
到了這里,關于深入理解3D擴散生成式模型的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!