in pytorch3d/renderer/points/pulsar/renderer.py [0:0]
def backward(ctx, grad_im, *args):
global GAMMA_WARNING_EMITTED
(
vert_pos,
vert_col,
vert_rad,
cam_pos,
pixel_0_0_center,
pixel_vec_x,
pixel_vec_y,
focal_length,
principal_point_offsets,
bg_col,
opacity,
image,
info,
) = ctx.saved_tensors
if (
(
ctx.needs_input_grad[0]
or ctx.needs_input_grad[2]
or ctx.needs_input_grad[3]
or ctx.needs_input_grad[4]
or ctx.needs_input_grad[5]
or ctx.needs_input_grad[6]
or ctx.needs_input_grad[7]
)
and ctx.gamma < 1e-3
and not GAMMA_WARNING_EMITTED
):
warnings.warn(
"Optimizing for non-color parameters and having a gamma value < 1E-3! "
"This is probably not going to produce usable gradients."
)
GAMMA_WARNING_EMITTED = True
if ctx.mode == 0:
(
grad_pos,
grad_col,
grad_rad,
grad_cam_pos,
grad_pixel_0_0_center,
grad_pixel_vec_x,
grad_pixel_vec_y,
grad_opacity,
) = ctx.native_renderer.backward(
grad_im,
image,
info,
vert_pos,
vert_col,
vert_rad,
cam_pos,
pixel_0_0_center,
pixel_vec_x,
pixel_vec_y,
focal_length,
principal_point_offsets,
ctx.gamma,
ctx.max_depth,
ctx.min_depth,
bg_col,
opacity,
ctx.percent_allowed_difference,
ctx.max_n_hits,
ctx.mode,
ctx.needs_input_grad[0],
ctx.needs_input_grad[1],
ctx.needs_input_grad[2],
ctx.needs_input_grad[3]
or ctx.needs_input_grad[4]
or ctx.needs_input_grad[5]
or ctx.needs_input_grad[6]
or ctx.needs_input_grad[7],
ctx.needs_input_grad[14],
None, # No debug information provided.
)
else:
raise ValueError(
"Performing a backward pass for a "
"rendering with `mode != 0`! This is not possible."
)
return (
grad_pos,
grad_col,
grad_rad,
grad_cam_pos,
grad_pixel_0_0_center,
grad_pixel_vec_x,
grad_pixel_vec_y,
None, # focal_length
None, # principal_point_offsets
None, # gamma
None, # max_depth
None, # native_renderer
None, # min_depth
None, # bg_col
grad_opacity,
None, # percent_allowed_difference
None, # max_n_hits
None, # mode
None, # return_forward_info
)