Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenDAS
nerfacc
Commits
01e12848
Unverified
Commit
01e12848
authored
Sep 19, 2022
by
Ruilong Li(李瑞龙)
Committed by
GitHub
Sep 19, 2022
Browse files
DDA fix (#26)
* fix dda marching * bump to 0.0.9 * update test * mark readme as v0.0.8
parent
b9ce1c5b
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
23 additions
and
16 deletions
+23
-16
README.md
README.md
+4
-1
nerfacc/cuda/csrc/volumetric_marching.cu
nerfacc/cuda/csrc/volumetric_marching.cu
+16
-13
pyproject.toml
pyproject.toml
+1
-1
tests/test_marching.py
tests/test_marching.py
+2
-1
No files found.
README.md
View file @
01e12848
...
@@ -62,10 +62,13 @@ Performance on test set:
...
@@ -62,10 +62,13 @@ Performance on test set:
| Our train time & test FPS | 43min; 0.15FPS | 41min; 0.4FPS |
| Our train time & test FPS | 43min; 0.15FPS | 41min; 0.4FPS |
Note the numbers here are tested with version
`v0.0.8`
<!--
## Tips:
## Tips:
1.
sample rays over all images per iteration (
`batch_over_images=True`
) is better:
`PSNR 33.31 -> 33.75`
.
1.
sample rays over all images per iteration (
`batch_over_images=True`
) is better:
`PSNR 33.31 -> 33.75`
.
2.
make use of scheduler (
`MultiStepLR(optimizer, milestones=[20000, 30000], gamma=0.1)`
) to adjust learning rate gives:
`PSNR 33.75 -> 34.40`
.
2.
make use of scheduler (
`MultiStepLR(optimizer, milestones=[20000, 30000], gamma=0.1)`
) to adjust learning rate gives:
`PSNR 33.75 -> 34.40`
.
3.
increasing chunk size (
`chunk: 8192 -> 81920`
) during inference gives speedup:
`FPS 4.x -> 6.2`
3.
increasing chunk size (
`chunk: 8192 -> 81920`
) during inference gives speedup:
`FPS 4.x -> 6.2`
4.
random bkgd color (
`color_bkgd_aug="random"`
) for the
`Lego`
scene actually hurts:
`PNSR 35.42 -> 34.38`
4.
random bkgd color (
`color_bkgd_aug="random"`
) for the
`Lego`
scene actually hurts:
`PNSR 35.42 -> 34.38`
-->
nerfacc/cuda/csrc/volumetric_marching.cu
View file @
01e12848
...
@@ -7,7 +7,6 @@ inline __device__ int cascaded_grid_idx_at(
...
@@ -7,7 +7,6 @@ inline __device__ int cascaded_grid_idx_at(
const
int
resx
,
const
int
resy
,
const
int
resz
,
const
int
resx
,
const
int
resy
,
const
int
resz
,
const
float
*
aabb
const
float
*
aabb
)
{
)
{
// TODO(ruilongli): if the x, y, z is outside the aabb, it will be clipped into aabb!!! We should just return false
int
ix
=
(
int
)(((
x
-
aabb
[
0
])
/
(
aabb
[
3
]
-
aabb
[
0
]))
*
resx
);
int
ix
=
(
int
)(((
x
-
aabb
[
0
])
/
(
aabb
[
3
]
-
aabb
[
0
]))
*
resx
);
int
iy
=
(
int
)(((
y
-
aabb
[
1
])
/
(
aabb
[
4
]
-
aabb
[
1
]))
*
resy
);
int
iy
=
(
int
)(((
y
-
aabb
[
1
])
/
(
aabb
[
4
]
-
aabb
[
1
]))
*
resy
);
int
iz
=
(
int
)(((
z
-
aabb
[
2
])
/
(
aabb
[
5
]
-
aabb
[
2
]))
*
resz
);
int
iz
=
(
int
)(((
z
-
aabb
[
2
])
/
(
aabb
[
5
]
-
aabb
[
2
]))
*
resz
);
...
@@ -15,7 +14,6 @@ inline __device__ int cascaded_grid_idx_at(
...
@@ -15,7 +14,6 @@ inline __device__ int cascaded_grid_idx_at(
iy
=
__clamp
(
iy
,
0
,
resy
-
1
);
iy
=
__clamp
(
iy
,
0
,
resy
-
1
);
iz
=
__clamp
(
iz
,
0
,
resz
-
1
);
iz
=
__clamp
(
iz
,
0
,
resz
-
1
);
int
idx
=
ix
*
resy
*
resz
+
iy
*
resz
+
iz
;
int
idx
=
ix
*
resy
*
resz
+
iy
*
resz
+
iz
;
// printf("(ix, iy, iz) = (%d, %d, %d)\n", ix, iy, iz);
return
idx
;
return
idx
;
}
}
...
@@ -35,13 +33,16 @@ inline __device__ float distance_to_next_voxel(
...
@@ -35,13 +33,16 @@ inline __device__ float distance_to_next_voxel(
float
x
,
float
y
,
float
z
,
float
x
,
float
y
,
float
z
,
float
dir_x
,
float
dir_y
,
float
dir_z
,
float
dir_x
,
float
dir_y
,
float
dir_z
,
float
idir_x
,
float
idir_y
,
float
idir_z
,
float
idir_x
,
float
idir_y
,
float
idir_z
,
const
int
resx
,
const
int
resy
,
const
int
resz
const
int
resx
,
const
int
resy
,
const
int
resz
,
const
float
*
aabb
)
{
// dda like step
)
{
// dda like step
// TODO: warning: expression has no effect?
// TODO: this is ugly -- optimize this.
x
,
y
,
z
=
resx
*
x
,
resy
*
y
,
resz
*
z
;
float
_x
=
((
x
-
aabb
[
0
])
/
(
aabb
[
3
]
-
aabb
[
0
]))
*
resx
;
float
tx
=
((
floorf
(
x
+
0.5
f
+
0.5
f
*
__sign
(
dir_x
))
-
x
)
*
idir_x
)
/
resx
;
float
_y
=
((
y
-
aabb
[
1
])
/
(
aabb
[
4
]
-
aabb
[
1
]))
*
resy
;
float
ty
=
((
floorf
(
y
+
0.5
f
+
0.5
f
*
__sign
(
dir_y
))
-
y
)
*
idir_y
)
/
resy
;
float
_z
=
((
z
-
aabb
[
2
])
/
(
aabb
[
5
]
-
aabb
[
2
]))
*
resz
;
float
tz
=
((
floorf
(
z
+
0.5
f
+
0.5
f
*
__sign
(
dir_z
))
-
z
)
*
idir_z
)
/
resz
;
float
tx
=
((
floorf
(
_x
+
0.5
f
+
0.5
f
*
__sign
(
dir_x
))
-
_x
)
*
idir_x
)
/
resx
*
(
aabb
[
3
]
-
aabb
[
0
]);
float
ty
=
((
floorf
(
_y
+
0.5
f
+
0.5
f
*
__sign
(
dir_y
))
-
_y
)
*
idir_y
)
/
resy
*
(
aabb
[
4
]
-
aabb
[
1
]);
float
tz
=
((
floorf
(
_z
+
0.5
f
+
0.5
f
*
__sign
(
dir_z
))
-
_z
)
*
idir_z
)
/
resz
*
(
aabb
[
5
]
-
aabb
[
2
]);
float
t
=
min
(
min
(
tx
,
ty
),
tz
);
float
t
=
min
(
min
(
tx
,
ty
),
tz
);
return
fmaxf
(
t
,
0.0
f
);
return
fmaxf
(
t
,
0.0
f
);
}
}
...
@@ -51,11 +52,14 @@ inline __device__ float advance_to_next_voxel(
...
@@ -51,11 +52,14 @@ inline __device__ float advance_to_next_voxel(
float
x
,
float
y
,
float
z
,
float
x
,
float
y
,
float
z
,
float
dir_x
,
float
dir_y
,
float
dir_z
,
float
dir_x
,
float
dir_y
,
float
dir_z
,
float
idir_x
,
float
idir_y
,
float
idir_z
,
float
idir_x
,
float
idir_y
,
float
idir_z
,
const
int
resx
,
const
int
resy
,
const
int
resz
,
const
int
resx
,
const
int
resy
,
const
int
resz
,
const
float
*
aabb
,
float
dt_min
)
{
float
dt_min
)
{
// Regular stepping (may be slower but matches non-empty space)
// Regular stepping (may be slower but matches non-empty space)
float
t_target
=
t
+
distance_to_next_voxel
(
float
t_target
=
t
+
distance_to_next_voxel
(
x
,
y
,
z
,
dir_x
,
dir_y
,
dir_z
,
idir_x
,
idir_y
,
idir_z
,
resx
,
resy
,
resz
x
,
y
,
z
,
dir_x
,
dir_y
,
dir_z
,
idir_x
,
idir_y
,
idir_z
,
resx
,
resy
,
resz
,
aabb
);
);
do
{
do
{
t
+=
dt_min
;
t
+=
dt_min
;
...
@@ -106,7 +110,6 @@ __global__ void marching_steps_kernel(
...
@@ -106,7 +110,6 @@ __global__ void marching_steps_kernel(
const
float
x
=
ox
+
t_mid
*
dx
;
const
float
x
=
ox
+
t_mid
*
dx
;
const
float
y
=
oy
+
t_mid
*
dy
;
const
float
y
=
oy
+
t_mid
*
dy
;
const
float
z
=
oz
+
t_mid
*
dz
;
const
float
z
=
oz
+
t_mid
*
dz
;
if
(
grid_occupied_at
(
x
,
y
,
z
,
resx
,
resy
,
resz
,
aabb
,
occ_binary
))
{
if
(
grid_occupied_at
(
x
,
y
,
z
,
resx
,
resy
,
resz
,
aabb
,
occ_binary
))
{
++
j
;
++
j
;
// march to next sample
// march to next sample
...
@@ -117,7 +120,7 @@ __global__ void marching_steps_kernel(
...
@@ -117,7 +120,7 @@ __global__ void marching_steps_kernel(
else
{
else
{
// march to next sample
// march to next sample
t_mid
=
advance_to_next_voxel
(
t_mid
=
advance_to_next_voxel
(
t_mid
,
x
,
y
,
z
,
dx
,
dy
,
dz
,
rdx
,
rdy
,
rdz
,
resx
,
resy
,
resz
,
dt
t_mid
,
x
,
y
,
z
,
dx
,
dy
,
dz
,
rdx
,
rdy
,
rdz
,
resx
,
resy
,
resz
,
aabb
,
dt
);
);
t0
=
t_mid
-
dt
*
0.5
f
;
t0
=
t_mid
-
dt
*
0.5
f
;
t1
=
t_mid
+
dt
*
0.5
f
;
t1
=
t_mid
+
dt
*
0.5
f
;
...
@@ -192,7 +195,7 @@ __global__ void marching_forward_kernel(
...
@@ -192,7 +195,7 @@ __global__ void marching_forward_kernel(
else
{
else
{
// march to next sample
// march to next sample
t_mid
=
advance_to_next_voxel
(
t_mid
=
advance_to_next_voxel
(
t_mid
,
x
,
y
,
z
,
dx
,
dy
,
dz
,
rdx
,
rdy
,
rdz
,
resx
,
resy
,
resz
,
dt
t_mid
,
x
,
y
,
z
,
dx
,
dy
,
dz
,
rdx
,
rdy
,
rdz
,
resx
,
resy
,
resz
,
aabb
,
dt
);
);
t0
=
t_mid
-
dt
*
0.5
f
;
t0
=
t_mid
-
dt
*
0.5
f
;
t1
=
t_mid
+
dt
*
0.5
f
;
t1
=
t_mid
+
dt
*
0.5
f
;
...
...
pyproject.toml
View file @
01e12848
...
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
...
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
[project]
name
=
"nerfacc"
name
=
"nerfacc"
version
=
"0.0.
8
"
version
=
"0.0.
9
"
authors
=
[
{name
=
"Ruilong"
,
email
=
"ruilongli94@gmail.com"
}
]
authors
=
[
{name
=
"Ruilong"
,
email
=
"ruilongli94@gmail.com"
}
]
license
=
{
text
=
"MIT"
}
license
=
{
text
=
"MIT"
}
requires-python
=
">=3.8"
requires-python
=
">=3.8"
...
...
tests/test_marching.py
View file @
01e12848
...
@@ -7,8 +7,9 @@ device = "cuda:0"
...
@@ -7,8 +7,9 @@ device = "cuda:0"
def
test_marching
():
def
test_marching
():
torch
.
manual_seed
(
42
)
scene_aabb
=
torch
.
tensor
([
0
,
0
,
0
,
1
,
1
,
1
],
device
=
device
).
float
()
scene_aabb
=
torch
.
tensor
([
0
,
0
,
0
,
1
,
1
,
1
],
device
=
device
).
float
()
scene_occ_binary
=
torch
.
ones
((
128
*
128
*
128
),
device
=
device
)
.
bool
()
scene_occ_binary
=
torch
.
rand
((
128
*
128
*
128
),
device
=
device
)
>
0.5
rays_o
=
torch
.
rand
((
10000
,
3
),
device
=
device
)
rays_o
=
torch
.
rand
((
10000
,
3
),
device
=
device
)
rays_d
=
torch
.
randn
((
10000
,
3
),
device
=
device
)
rays_d
=
torch
.
randn
((
10000
,
3
),
device
=
device
)
rays_d
=
rays_d
/
rays_d
.
norm
(
dim
=-
1
,
keepdim
=
True
)
rays_d
=
rays_d
/
rays_d
.
norm
(
dim
=-
1
,
keepdim
=
True
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment