LaCT l24_d768_ttt2x, sparse-view DL3DV 256x256, iter 65000
Browse files- LICENSE-LaCT +21 -0
- README.md +90 -0
- code/encoder_decoder_lact.py +73 -0
- configs/lact_l24_d768_ttt2x.yaml +21 -0
- configs/train_abl_lact_l24.yaml +101 -0
- eval_results.json +254 -0
- logs/train.log +0 -0
- model.safetensors +3 -0
LICENSE-LaCT
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
MIT License
|
| 2 |
+
|
| 3 |
+
Copyright (c) 2025 Tianyuan Zhang, Hao Tan
|
| 4 |
+
|
| 5 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
| 6 |
+
of this software and associated documentation files (the “Software”), to deal
|
| 7 |
+
in the Software without restriction, including without limitation the rights
|
| 8 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
| 9 |
+
copies of the Software, and to permit persons to whom the Software is
|
| 10 |
+
furnished to do so, subject to the following conditions:
|
| 11 |
+
|
| 12 |
+
The above copyright notice and this permission notice shall be included in
|
| 13 |
+
all copies or substantial portions of the Software.
|
| 14 |
+
|
| 15 |
+
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 16 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| 17 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
| 18 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
| 19 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
| 20 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
| 21 |
+
THE SOFTWARE.
|
README.md
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: mit
|
| 3 |
+
tags:
|
| 4 |
+
- novel-view-synthesis
|
| 5 |
+
- lact
|
| 6 |
+
- test-time-training
|
| 7 |
+
- dl3dv
|
| 8 |
+
---
|
| 9 |
+
|
| 10 |
+
# test_lact
|
| 11 |
+
|
| 12 |
+
A LaCT (Large-Chunk Test-Time Training) novel-view-synthesis model, trained from scratch on DL3DV at 256×256 with **sparse inputs (2–6 context views)**.
|
| 13 |
+
|
| 14 |
+
The architecture is unmodified `LaCTLVSM` from [a1600012888/LaCT](https://github.com/a1600012888/LaCT) (commit `a648340`), using config `lact_l24_d768_ttt2x`: 24 blocks, dim 768, 312.3M parameters.
|
| 15 |
+
|
| 16 |
+
This is **not** the official LaCT checkpoint. The official scene models use 32–64 input views, batch 768 and far more compute. This run used a small sparse-view recipe, so the numbers below are much lower than the paper's.
|
| 17 |
+
|
| 18 |
+
## Files
|
| 19 |
+
|
| 20 |
+
| file | content |
|
| 21 |
+
|---|---|
|
| 22 |
+
| `model.safetensors` | Model weights at iteration 65,000, fp32. Keys match `LaCTLVSM` exactly. No optimizer state. |
|
| 23 |
+
| `configs/lact_l24_d768_ttt2x.yaml` | Model config, copied from the LaCT repo. |
|
| 24 |
+
| `configs/train_abl_lact_l24.yaml` | Training config used for this run. |
|
| 25 |
+
| `code/encoder_decoder_lact.py` | Wrapper used in training. It maps the training code's camera inputs (w2c + K) to LaCT's `c2w` / `fxfycxcy`. |
|
| 26 |
+
| `eval_results.json` | PSNR / SSIM / LPIPS every 5k iterations, 0–65k. |
|
| 27 |
+
| `logs/train.log` | Full training log. |
|
| 28 |
+
| `LICENSE-LaCT` | MIT license of the LaCT code. |
|
| 29 |
+
|
| 30 |
+
## Usage
|
| 31 |
+
|
| 32 |
+
```python
|
| 33 |
+
import sys, torch
|
| 34 |
+
from omegaconf import OmegaConf
|
| 35 |
+
from safetensors.torch import load_file
|
| 36 |
+
|
| 37 |
+
# git clone https://github.com/a1600012888/LaCT && git -C LaCT checkout a648340
|
| 38 |
+
sys.path.insert(0, "LaCT/lact_nvs")
|
| 39 |
+
from model import LaCTLVSM
|
| 40 |
+
|
| 41 |
+
cfg = OmegaConf.to_container(OmegaConf.load("configs/lact_l24_d768_ttt2x.yaml"), resolve=True)
|
| 42 |
+
model = LaCTLVSM(**cfg)
|
| 43 |
+
model.load_state_dict(load_file("model.safetensors"), strict=True)
|
| 44 |
+
model = model.cuda().eval()
|
| 45 |
+
|
| 46 |
+
# input_data = {"image": [B, N, 3, 256, 256] in [0, 1],
|
| 47 |
+
# "fxfycxcy": [B, N, 4] in pixels at 256x256,
|
| 48 |
+
# "c2w": [B, N, 4, 4]}
|
| 49 |
+
# target_data = {"fxfycxcy": [B, T, 4], "c2w": [B, T, 4, 4]}
|
| 50 |
+
with torch.no_grad(), torch.autocast("cuda", dtype=torch.bfloat16):
|
| 51 |
+
rendered = model(input_data, target_data) # [B, T, 3, 256, 256], values in [0, 1]
|
| 52 |
+
```
|
| 53 |
+
|
| 54 |
+
LaCT's `lact_ttt.py` uses `torch.compile`, so the first call compiles.
|
| 55 |
+
|
| 56 |
+
### Camera convention
|
| 57 |
+
|
| 58 |
+
Cameras use the OpenCV convention for `c2w`. The training poses were normalized as follows:
|
| 59 |
+
|
| 60 |
+
1. Re-center the scene on the first context camera.
|
| 61 |
+
2. Divide translations by `1.35 × max(distance of the context cameras from the first camera)`.
|
| 62 |
+
|
| 63 |
+
After this, the farthest context camera is at distance 1/1.35. Use the same normalization at inference.
|
| 64 |
+
|
| 65 |
+
## Training
|
| 66 |
+
|
| 67 |
+
- **Data:** DL3DV, `images_8` (480×270, distorted, as released), resized and cropped to 256×256.
|
| 68 |
+
- **Views per sample:** 2–6 context views (weights 2:8, 3:2, 4:8, 5:2, 6:8) plus 8 target views.
|
| 69 |
+
- Context views are evenly spaced 10–20 frames apart, with jitter.
|
| 70 |
+
- Targets are drawn from the context span, extended by one spacing on each side.
|
| 71 |
+
- **Optimization:**
|
| 72 |
+
- Batch size 16. The training code batches by view count: with c context views, each step has floor(2 × 16 / c) scenes.
|
| 73 |
+
- AdamW, lr 4e-4, betas (0.9, 0.95), weight decay 0.05.
|
| 74 |
+
- Warmup 3k iterations, then cosine decay to 0 at 65k.
|
| 75 |
+
- Grad clip 3.0.
|
| 76 |
+
- **Loss:** L2 + 0.5 × perceptual.
|
| 77 |
+
- **Hardware:** one GPU (B300), bf16 autocast. Activation checkpointing on the first 12 blocks; per-block `torch.compile`. About 24 hours.
|
| 78 |
+
|
| 79 |
+
## Results
|
| 80 |
+
|
| 81 |
+
The test set is 140 DL3DV benchmark scenes at 256×256, with fixed context/target view indices. "Nv" means N context views.
|
| 82 |
+
|
| 83 |
+
| iter | 2v PSNR | 4v PSNR | 6v PSNR | 2v / 4v / 6v SSIM | 2v / 4v / 6v LPIPS |
|
| 84 |
+
|---|---|---|---|---|---|
|
| 85 |
+
| 5k | 16.14 | 17.67 | 18.24 | 0.416 / 0.440 / 0.448 | 0.665 / 0.642 / 0.637 |
|
| 86 |
+
| 25k | 16.86 | 19.05 | 20.02 | 0.464 / 0.526 / 0.556 | 0.533 / 0.453 / 0.421 |
|
| 87 |
+
| 45k | 17.42 | 20.20 | 21.24 | 0.493 / 0.584 / 0.619 | 0.491 / 0.381 / 0.345 |
|
| 88 |
+
| **65k** | **17.65** | **20.68** | **21.78** | **0.504 / 0.607 / 0.644** | **0.475 / 0.358 / 0.320** |
|
| 89 |
+
|
| 90 |
+
`eval_results.json` has every 5k step.
|
code/encoder_decoder_lact.py
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""LaCT (Large-Chunk TTT, LVSM 계열) 를 abl kit 학습 루프에 끼우는 wrapper.
|
| 2 |
+
|
| 3 |
+
모델 코드는 git clone 한 LaCT repo (lact_nvs/model.py, lact_ttt.py) 를 수정 없이 그대로 쓴다.
|
| 4 |
+
kit 의 입력 (images, rays, camera_cond, num_cond_views) 을 LaCT 입력으로 바꿀 뿐이다:
|
| 5 |
+
camera_cond["extrinsics"] = 정규화된 c2w 의 역행렬 (w2c, normalize_for_da3=False)
|
| 6 |
+
camera_cond["intrinsics"] = 학습 해상도 (256x256) 기준 K
|
| 7 |
+
-> LaCT 의 c2w / fxfycxcy. kit 의 renderer 가 쓰는 Plucker ray 와 같은 카메라 정규화
|
| 8 |
+
(첫 context 카메라 기준, 가장 먼 context 카메라가 1/1.35) 를 그대로 받는다.
|
| 9 |
+
출력은 kit 모델과 같이 [context 이미지, 렌더링한 target] 을 view 축으로 붙여 돌려준다.
|
| 10 |
+
"""
|
| 11 |
+
|
| 12 |
+
import os
|
| 13 |
+
import sys
|
| 14 |
+
|
| 15 |
+
import torch
|
| 16 |
+
import torch.nn as nn
|
| 17 |
+
import torch.utils.checkpoint
|
| 18 |
+
from omegaconf import OmegaConf
|
| 19 |
+
|
| 20 |
+
|
| 21 |
+
def _import_lact(lact_nvs_dir):
|
| 22 |
+
# LaCT config 의 block type 이 "model.SelfAttention", "lact_ttt.FastWeightGluMLPMultihead"
|
| 23 |
+
# 처럼 top-level 모듈 이름이라 lact_nvs 폴더를 sys.path 에 넣어야 한다.
|
| 24 |
+
lact_nvs_dir = os.path.abspath(lact_nvs_dir)
|
| 25 |
+
if lact_nvs_dir not in sys.path:
|
| 26 |
+
sys.path.insert(0, lact_nvs_dir)
|
| 27 |
+
import model as lact_model # noqa: E402 (LaCT/lact_nvs/model.py)
|
| 28 |
+
assert os.path.dirname(os.path.abspath(lact_model.__file__)) == lact_nvs_dir, lact_model.__file__
|
| 29 |
+
return lact_model
|
| 30 |
+
|
| 31 |
+
|
| 32 |
+
class LaCTWrapper(nn.Module):
|
| 33 |
+
def __init__(self, lact_nvs_dir, lact_config, ckpt_blocks=0, compile_blocks=False):
|
| 34 |
+
super().__init__()
|
| 35 |
+
lact_model = _import_lact(lact_nvs_dir)
|
| 36 |
+
cfg = OmegaConf.to_container(OmegaConf.load(lact_config), resolve=True)
|
| 37 |
+
self.lact = lact_model.LaCTLVSM(**cfg)
|
| 38 |
+
# 학습 중 앞에서부터 ckpt_blocks 개 Block 을 activation checkpointing 한다 (0 = 끔).
|
| 39 |
+
# Block.forward 만 바꾸므로 state_dict key 는 LaCTLVSM 그대로다.
|
| 40 |
+
self.ckpt_blocks = int(ckpt_blocks)
|
| 41 |
+
for i, blk in enumerate(self.lact.blocks):
|
| 42 |
+
if i < self.ckpt_blocks:
|
| 43 |
+
blk.forward = self._ckpt_forward(blk.forward)
|
| 44 |
+
# LaCT README: TTT 모델은 compile 해야 제 속도가 난다. Block 을 하나씩 in-place 로 compile
|
| 45 |
+
# 하고 checkpoint 는 compile 안에서 돈다 (2026-11-13 memtest, B300):
|
| 46 |
+
# LaCTLVSM 전체를 compile -> inductor 커널이 "misaligned address" 로 죽는다.
|
| 47 |
+
# checkpoint 바깥 + compile 안쪽 -> backward 재계산에서 CheckpointError.
|
| 48 |
+
self.compile_blocks = bool(compile_blocks)
|
| 49 |
+
if self.compile_blocks:
|
| 50 |
+
# block 마다 guard (forward closure id) 가 달라 block 수만큼 재컴파일된다 (기본 한도 8).
|
| 51 |
+
torch._dynamo.config.recompile_limit = 128
|
| 52 |
+
torch._dynamo.config.accumulated_recompile_limit = 1024
|
| 53 |
+
for blk in self.lact.blocks:
|
| 54 |
+
blk.compile()
|
| 55 |
+
|
| 56 |
+
def _ckpt_forward(self, fwd):
|
| 57 |
+
def run(x, info):
|
| 58 |
+
if self.training and torch.is_grad_enabled():
|
| 59 |
+
return torch.utils.checkpoint.checkpoint(fwd, x, info, use_reentrant=False)
|
| 60 |
+
return fwd(x, info)
|
| 61 |
+
return run
|
| 62 |
+
|
| 63 |
+
def forward(self, images, rays, camera_cond, num_cond_views, timeit=False):
|
| 64 |
+
n = int(num_cond_views)
|
| 65 |
+
w2c = camera_cond["extrinsics"].to(images.device).float()
|
| 66 |
+
K = camera_cond["intrinsics"].to(images.device).float()
|
| 67 |
+
c2w = torch.linalg.inv(w2c)
|
| 68 |
+
fxfycxcy = torch.stack([K[..., 0, 0], K[..., 1, 1], K[..., 0, 2], K[..., 1, 2]], dim=-1)
|
| 69 |
+
|
| 70 |
+
input_data = {"image": images[:, :n].float(), "fxfycxcy": fxfycxcy[:, :n], "c2w": c2w[:, :n]}
|
| 71 |
+
target_data = {"fxfycxcy": fxfycxcy[:, n:], "c2w": c2w[:, n:]}
|
| 72 |
+
rendered = self.lact(input_data, target_data)
|
| 73 |
+
return torch.cat([images[:, :n], rendered.to(images.dtype)], dim=1)
|
configs/lact_l24_d768_ttt2x.yaml
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
patch_size: 8
|
| 2 |
+
dim: 768
|
| 3 |
+
layers: 24
|
| 4 |
+
|
| 5 |
+
block_config:
|
| 6 |
+
- type: model.SelfAttention
|
| 7 |
+
length_dim: l
|
| 8 |
+
params:
|
| 9 |
+
head_dim: 64
|
| 10 |
+
use_qk_norm: true
|
| 11 |
+
- type: lact_ttt.FastWeightGluMLPMultihead
|
| 12 |
+
length_dim: vl
|
| 13 |
+
params:
|
| 14 |
+
head_dim: 768 # 256
|
| 15 |
+
inter_multi: 2
|
| 16 |
+
base_lr: 0.01
|
| 17 |
+
muon_update_steps: 5
|
| 18 |
+
- type: model.MLP
|
| 19 |
+
length_dim: vl
|
| 20 |
+
params:
|
| 21 |
+
inter_multi: 4
|
configs/train_abl_lact_l24.yaml
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# abl_lact_l24: LaCT baseline (git clone https://github.com/a1600012888/LaCT @ a648340, lact_nvs 의
|
| 2 |
+
# LaCTLVSM + config/lact_l24_d768_ttt2x.yaml, 처음부터 학습) 를 abl_da3_l12 와 같은 조건으로 돌린다 (2026-11-13, B300 GPU 3).
|
| 3 |
+
# abl_da3_l12.yaml 과 model 블록만 다르다: 데이터 / view (context 2-6 + target 8) / batch 16 / 256x256 /
|
| 4 |
+
# lr 4e-4, warmup 3000, cosine 65k / loss (L2 + 0.5 perceptual) / eval 5k / W&B abl_enc6 이 모두 같다.
|
| 5 |
+
# LaCT 는 encoder 가 없어서 카메라는 da3 형식 (w2c + K) 으로 받아 c2w / fxfycxcy 로 바꿔 쓴다
|
| 6 |
+
# (models/encoder_decoder_lact.py). LaCT repo 코드는 수정하지 않았다.
|
| 7 |
+
# memtest batch 16 (B300, 컨테이너 yglee_lact): checkpointing 없음 -> cond 2 OOM.
|
| 8 |
+
# ckpt 24: cond 2 37,862 MiB / 2.78 s | ckpt 12: cond 2 220,166 MiB / 2.58 s
|
| 9 |
+
# ckpt 12 + compile (채택): cond 2 179,558 MiB / 1.87 s, cond 4 109,538 MiB / 1.05 s, cond 6 81,436 MiB / 0.72 s
|
| 10 |
+
module: train
|
| 11 |
+
seed: 0
|
| 12 |
+
|
| 13 |
+
opt:
|
| 14 |
+
lr: 4e-4
|
| 15 |
+
weight_decay: 0.05
|
| 16 |
+
num_iter_total: 65001 # GPU 2,3 를 이틀 쓰는 길이 (VGGT 2.3 s/iter + eval 5 분/2.5k -> 약 44 h)
|
| 17 |
+
lr_scheduler_iter: 65001
|
| 18 |
+
warmup_steps: 3000
|
| 19 |
+
batch_size: 16 # memtest 2026-11-08: 두 arm 공통 최대 (cond 2 가 최악: DA3 165.5 GB, VGGT 168.3 GB; 24 는 VGGT OOM)
|
| 20 |
+
batch_size_test: 16
|
| 21 |
+
target_has_input_p: 1.0
|
| 22 |
+
l2_loss_weight: 1.0
|
| 23 |
+
perceptual_loss_weight: 0.5
|
| 24 |
+
grad_clip_norm: 3.0
|
| 25 |
+
allowed_gradnorm_factor: 5
|
| 26 |
+
betas:
|
| 27 |
+
- 0.9
|
| 28 |
+
- 0.95
|
| 29 |
+
lr_scheduler: cosine
|
| 30 |
+
hold_steps: 0
|
| 31 |
+
cosine_min_range: 0.0
|
| 32 |
+
freeze_da3: false # encoder 도 학습 (논문 256 모델과 같다)
|
| 33 |
+
print_every: 50
|
| 34 |
+
|
| 35 |
+
model:
|
| 36 |
+
model_type: regressive
|
| 37 |
+
encoder: lact
|
| 38 |
+
lact_nvs_dir: /data/models/yglee_lager/LaCT/lact_nvs
|
| 39 |
+
lact_config: /data/models/yglee_lager/LaCT/lact_nvs/config/lact_l24_d768_ttt2x.yaml
|
| 40 |
+
lact_ckpt_blocks: 12 # activation checkpointing 하는 앞쪽 Block 수 (계산 결과는 같다)
|
| 41 |
+
lact_compile: true # LaCT Block 을 torch.compile (LaCT README 권장)
|
| 42 |
+
da_model_weights_path: 'pretrained_weights/model_giant.safetensors' # run.sh 가 넘기는 값. LaCT 는 쓰지 않는다
|
| 43 |
+
|
| 44 |
+
data:
|
| 45 |
+
camera_condition_type: da3
|
| 46 |
+
subdataset_list:
|
| 47 |
+
- name: dl3dv
|
| 48 |
+
view_sampler_range:
|
| 49 |
+
- 10
|
| 50 |
+
- 20
|
| 51 |
+
expansion_factor: 1.0
|
| 52 |
+
equalization_length: 200000
|
| 53 |
+
num_cond_views_aug:
|
| 54 |
+
- 2
|
| 55 |
+
- 6
|
| 56 |
+
aspect_ratio_range:
|
| 57 |
+
- 1.0
|
| 58 |
+
- 1.0
|
| 59 |
+
im_size_hw:
|
| 60 |
+
- 256
|
| 61 |
+
- 256
|
| 62 |
+
num_views: 10
|
| 63 |
+
zero_out_cam_cond_p: 0.0
|
| 64 |
+
num_tgt_views: 8
|
| 65 |
+
view_to_sample_prob:
|
| 66 |
+
- 2,8
|
| 67 |
+
- 3,2
|
| 68 |
+
- 4,8
|
| 69 |
+
- 5,2
|
| 70 |
+
- 6,8
|
| 71 |
+
|
| 72 |
+
test_data:
|
| 73 |
+
dataset_names: [dl3dv, dl3dv, dl3dv]
|
| 74 |
+
dataset_names_log: [dl3dv_2view, dl3dv_4view, dl3dv_6view]
|
| 75 |
+
zero_out_cam_cond_p: [0.0, 0.0, 0.0]
|
| 76 |
+
test_view_indices_paths: [assets/dl3dv_2v.json, assets/dl3dv_4v.json, assets/dl3dv_6v.json]
|
| 77 |
+
num_cond_views: [2, 4, 6]
|
| 78 |
+
camera_condition_type: da3
|
| 79 |
+
|
| 80 |
+
view_sampler:
|
| 81 |
+
train_method: bounded_interp
|
| 82 |
+
test_method: fixed
|
| 83 |
+
|
| 84 |
+
log_dir: ./output
|
| 85 |
+
|
| 86 |
+
wandb:
|
| 87 |
+
api_key_path: ./config/api_keys.yaml
|
| 88 |
+
enabled: true
|
| 89 |
+
project: abl_enc6
|
| 90 |
+
entity: dudrms514
|
| 91 |
+
name: null
|
| 92 |
+
resume: allow
|
| 93 |
+
id: null
|
| 94 |
+
log_iter: 50
|
| 95 |
+
vis_iter: 500
|
| 96 |
+
|
| 97 |
+
eval:
|
| 98 |
+
log_iter: 50
|
| 99 |
+
eval_at_start: true
|
| 100 |
+
eval_iter: 5000
|
| 101 |
+
ckpt_iter: 100000000 # 번호 붙은 체크포인트는 만들지 않는다 (latest 는 1000 마다 덮어쓴다)
|
eval_results.json
ADDED
|
@@ -0,0 +1,254 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"iter": 0,
|
| 4 |
+
"dl3dv_2view": {
|
| 5 |
+
"psnr": 11.421739,
|
| 6 |
+
"ssim": 0.065604,
|
| 7 |
+
"lpips": 0.788644
|
| 8 |
+
},
|
| 9 |
+
"dl3dv_4view": {
|
| 10 |
+
"psnr": 11.422578,
|
| 11 |
+
"ssim": 0.065605,
|
| 12 |
+
"lpips": 0.788819
|
| 13 |
+
},
|
| 14 |
+
"dl3dv_6view": {
|
| 15 |
+
"psnr": 11.422861,
|
| 16 |
+
"ssim": 0.065604,
|
| 17 |
+
"lpips": 0.788792
|
| 18 |
+
}
|
| 19 |
+
},
|
| 20 |
+
{
|
| 21 |
+
"iter": 5000,
|
| 22 |
+
"dl3dv_2view": {
|
| 23 |
+
"psnr": 16.143566,
|
| 24 |
+
"ssim": 0.416415,
|
| 25 |
+
"lpips": 0.66512
|
| 26 |
+
},
|
| 27 |
+
"dl3dv_4view": {
|
| 28 |
+
"psnr": 17.673761,
|
| 29 |
+
"ssim": 0.440066,
|
| 30 |
+
"lpips": 0.642324
|
| 31 |
+
},
|
| 32 |
+
"dl3dv_6view": {
|
| 33 |
+
"psnr": 18.242579,
|
| 34 |
+
"ssim": 0.44798,
|
| 35 |
+
"lpips": 0.636527
|
| 36 |
+
}
|
| 37 |
+
},
|
| 38 |
+
{
|
| 39 |
+
"iter": 10000,
|
| 40 |
+
"dl3dv_2view": {
|
| 41 |
+
"psnr": 16.489031,
|
| 42 |
+
"ssim": 0.439963,
|
| 43 |
+
"lpips": 0.605489
|
| 44 |
+
},
|
| 45 |
+
"dl3dv_4view": {
|
| 46 |
+
"psnr": 18.298374,
|
| 47 |
+
"ssim": 0.4804,
|
| 48 |
+
"lpips": 0.557058
|
| 49 |
+
},
|
| 50 |
+
"dl3dv_6view": {
|
| 51 |
+
"psnr": 19.074331,
|
| 52 |
+
"ssim": 0.499484,
|
| 53 |
+
"lpips": 0.538382
|
| 54 |
+
}
|
| 55 |
+
},
|
| 56 |
+
{
|
| 57 |
+
"iter": 15000,
|
| 58 |
+
"dl3dv_2view": {
|
| 59 |
+
"psnr": 16.557905,
|
| 60 |
+
"ssim": 0.446517,
|
| 61 |
+
"lpips": 0.564823
|
| 62 |
+
},
|
| 63 |
+
"dl3dv_4view": {
|
| 64 |
+
"psnr": 18.557508,
|
| 65 |
+
"ssim": 0.497642,
|
| 66 |
+
"lpips": 0.498675
|
| 67 |
+
},
|
| 68 |
+
"dl3dv_6view": {
|
| 69 |
+
"psnr": 19.409191,
|
| 70 |
+
"ssim": 0.521651,
|
| 71 |
+
"lpips": 0.473214
|
| 72 |
+
}
|
| 73 |
+
},
|
| 74 |
+
{
|
| 75 |
+
"iter": 20000,
|
| 76 |
+
"dl3dv_2view": {
|
| 77 |
+
"psnr": 16.463772,
|
| 78 |
+
"ssim": 0.448511,
|
| 79 |
+
"lpips": 0.54851
|
| 80 |
+
},
|
| 81 |
+
"dl3dv_4view": {
|
| 82 |
+
"psnr": 18.719131,
|
| 83 |
+
"ssim": 0.51003,
|
| 84 |
+
"lpips": 0.470424
|
| 85 |
+
},
|
| 86 |
+
"dl3dv_6view": {
|
| 87 |
+
"psnr": 19.628149,
|
| 88 |
+
"ssim": 0.536896,
|
| 89 |
+
"lpips": 0.442171
|
| 90 |
+
}
|
| 91 |
+
},
|
| 92 |
+
{
|
| 93 |
+
"iter": 25000,
|
| 94 |
+
"dl3dv_2view": {
|
| 95 |
+
"psnr": 16.858255,
|
| 96 |
+
"ssim": 0.46427,
|
| 97 |
+
"lpips": 0.533192
|
| 98 |
+
},
|
| 99 |
+
"dl3dv_4view": {
|
| 100 |
+
"psnr": 19.045271,
|
| 101 |
+
"ssim": 0.526044,
|
| 102 |
+
"lpips": 0.453275
|
| 103 |
+
},
|
| 104 |
+
"dl3dv_6view": {
|
| 105 |
+
"psnr": 20.020243,
|
| 106 |
+
"ssim": 0.555756,
|
| 107 |
+
"lpips": 0.420685
|
| 108 |
+
}
|
| 109 |
+
},
|
| 110 |
+
{
|
| 111 |
+
"iter": 30000,
|
| 112 |
+
"dl3dv_2view": {
|
| 113 |
+
"psnr": 16.958929,
|
| 114 |
+
"ssim": 0.469906,
|
| 115 |
+
"lpips": 0.521318
|
| 116 |
+
},
|
| 117 |
+
"dl3dv_4view": {
|
| 118 |
+
"psnr": 19.342415,
|
| 119 |
+
"ssim": 0.54211,
|
| 120 |
+
"lpips": 0.430941
|
| 121 |
+
},
|
| 122 |
+
"dl3dv_6view": {
|
| 123 |
+
"psnr": 20.310455,
|
| 124 |
+
"ssim": 0.573381,
|
| 125 |
+
"lpips": 0.396702
|
| 126 |
+
}
|
| 127 |
+
},
|
| 128 |
+
{
|
| 129 |
+
"iter": 35000,
|
| 130 |
+
"dl3dv_2view": {
|
| 131 |
+
"psnr": 16.954477,
|
| 132 |
+
"ssim": 0.474047,
|
| 133 |
+
"lpips": 0.5025
|
| 134 |
+
},
|
| 135 |
+
"dl3dv_4view": {
|
| 136 |
+
"psnr": 19.558046,
|
| 137 |
+
"ssim": 0.555949,
|
| 138 |
+
"lpips": 0.406279
|
| 139 |
+
},
|
| 140 |
+
"dl3dv_6view": {
|
| 141 |
+
"psnr": 20.597551,
|
| 142 |
+
"ssim": 0.58913,
|
| 143 |
+
"lpips": 0.372302
|
| 144 |
+
}
|
| 145 |
+
},
|
| 146 |
+
{
|
| 147 |
+
"iter": 40000,
|
| 148 |
+
"dl3dv_2view": {
|
| 149 |
+
"psnr": 17.270464,
|
| 150 |
+
"ssim": 0.484966,
|
| 151 |
+
"lpips": 0.493843
|
| 152 |
+
},
|
| 153 |
+
"dl3dv_4view": {
|
| 154 |
+
"psnr": 19.936426,
|
| 155 |
+
"ssim": 0.570776,
|
| 156 |
+
"lpips": 0.393177
|
| 157 |
+
},
|
| 158 |
+
"dl3dv_6view": {
|
| 159 |
+
"psnr": 20.957508,
|
| 160 |
+
"ssim": 0.604687,
|
| 161 |
+
"lpips": 0.356841
|
| 162 |
+
}
|
| 163 |
+
},
|
| 164 |
+
{
|
| 165 |
+
"iter": 45000,
|
| 166 |
+
"dl3dv_2view": {
|
| 167 |
+
"psnr": 17.417568,
|
| 168 |
+
"ssim": 0.492875,
|
| 169 |
+
"lpips": 0.491123
|
| 170 |
+
},
|
| 171 |
+
"dl3dv_4view": {
|
| 172 |
+
"psnr": 20.203033,
|
| 173 |
+
"ssim": 0.584476,
|
| 174 |
+
"lpips": 0.381447
|
| 175 |
+
},
|
| 176 |
+
"dl3dv_6view": {
|
| 177 |
+
"psnr": 21.237524,
|
| 178 |
+
"ssim": 0.618938,
|
| 179 |
+
"lpips": 0.344819
|
| 180 |
+
}
|
| 181 |
+
},
|
| 182 |
+
{
|
| 183 |
+
"iter": 50000,
|
| 184 |
+
"dl3dv_2view": {
|
| 185 |
+
"psnr": 17.475805,
|
| 186 |
+
"ssim": 0.496668,
|
| 187 |
+
"lpips": 0.479948
|
| 188 |
+
},
|
| 189 |
+
"dl3dv_4view": {
|
| 190 |
+
"psnr": 20.386845,
|
| 191 |
+
"ssim": 0.594407,
|
| 192 |
+
"lpips": 0.369613
|
| 193 |
+
},
|
| 194 |
+
"dl3dv_6view": {
|
| 195 |
+
"psnr": 21.483255,
|
| 196 |
+
"ssim": 0.631511,
|
| 197 |
+
"lpips": 0.331847
|
| 198 |
+
}
|
| 199 |
+
},
|
| 200 |
+
{
|
| 201 |
+
"iter": 55000,
|
| 202 |
+
"dl3dv_2view": {
|
| 203 |
+
"psnr": 17.616961,
|
| 204 |
+
"ssim": 0.502485,
|
| 205 |
+
"lpips": 0.475959
|
| 206 |
+
},
|
| 207 |
+
"dl3dv_4view": {
|
| 208 |
+
"psnr": 20.577383,
|
| 209 |
+
"ssim": 0.601876,
|
| 210 |
+
"lpips": 0.362314
|
| 211 |
+
},
|
| 212 |
+
"dl3dv_6view": {
|
| 213 |
+
"psnr": 21.660151,
|
| 214 |
+
"ssim": 0.638468,
|
| 215 |
+
"lpips": 0.324519
|
| 216 |
+
}
|
| 217 |
+
},
|
| 218 |
+
{
|
| 219 |
+
"iter": 60000,
|
| 220 |
+
"dl3dv_2view": {
|
| 221 |
+
"psnr": 17.627119,
|
| 222 |
+
"ssim": 0.502907,
|
| 223 |
+
"lpips": 0.475652
|
| 224 |
+
},
|
| 225 |
+
"dl3dv_4view": {
|
| 226 |
+
"psnr": 20.662294,
|
| 227 |
+
"ssim": 0.605849,
|
| 228 |
+
"lpips": 0.3587
|
| 229 |
+
},
|
| 230 |
+
"dl3dv_6view": {
|
| 231 |
+
"psnr": 21.750998,
|
| 232 |
+
"ssim": 0.642899,
|
| 233 |
+
"lpips": 0.320617
|
| 234 |
+
}
|
| 235 |
+
},
|
| 236 |
+
{
|
| 237 |
+
"iter": 65000,
|
| 238 |
+
"dl3dv_2view": {
|
| 239 |
+
"psnr": 17.649261,
|
| 240 |
+
"ssim": 0.50394,
|
| 241 |
+
"lpips": 0.474991
|
| 242 |
+
},
|
| 243 |
+
"dl3dv_4view": {
|
| 244 |
+
"psnr": 20.684305,
|
| 245 |
+
"ssim": 0.607008,
|
| 246 |
+
"lpips": 0.358075
|
| 247 |
+
},
|
| 248 |
+
"dl3dv_6view": {
|
| 249 |
+
"psnr": 21.778204,
|
| 250 |
+
"ssim": 0.644274,
|
| 251 |
+
"lpips": 0.319716
|
| 252 |
+
}
|
| 253 |
+
}
|
| 254 |
+
]
|
logs/train.log
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
model.safetensors
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:cc6ad4805ee577beaacbfccc97d3cc8da3cb20d3685c077aa7745cf94efc913c
|
| 3 |
+
size 1249236840
|