隨記
原文 K-Planes: Explicit Radiance Fields in Space, Time, and Appearance,又要換baseline,可是效果不好能怎么辦呢,我可不可以發瘋。k-planes的代碼又是非常工程瑣碎的,大佬的代碼果然不顧小白死活。隨便記錄下整個過程。
代碼記錄
main.py
主要用于:加載config文件,data,初始化等
loda_data() # 加載數據
init_trainer() # 初始化模型(包括k-planes loss function等各種)
load_model()
type有幾個參數可選,其中phototourism
等價于NeRF-W,video
相當于動態場景,其他是靜態;從line 70
進入各種初始化步驟。
所有參數都初始化完畢后,開始訓練
line 160 trainer.train()
base_train.py
一系列參數的初始化
還有損失函數的計算和優化
lowran_model.py
經過一系列跳轉,在這個文件下進行KPlaneField,KPlaneDensityField,ProposalNetworkSampler等一系列采樣和plane的生成和初始化操作,還有forward()函數,插值,query_rgb query_density。這里我只關心k-plane生成
kplane_field.py
1. 生成并初始化K-planes
最后生成以下k-planes:
2. Init appearance code-related parameters等價于NeRF-W(略)
3. Init decoder params: 對方向進行編碼
4. 初始化decoder
這里有兩種選擇,使用論文中的線性解碼器還是MLP,直接看else line189-217
video_trainer.py
其他的初始化都沒那么重要,第二重要的loss,k-plane添加了很多正則化的loss,就在這個函數里進行初始化
需要注意的點
- pytorch提供的插值函數需要將x歸一化的[-1,1]之間
- 損失函數的計算
記錄一下求ray還是什么的區別,暫時沒有很重要。不過原文里的這部分好像被刪掉了,這里是在B站up那里截的圖。