MCPcopy Create free account
hub / github.com/OpenImagingLab/4DSloMo / Aggregation

Class Aggregation

pointops2/functions/pointops2.py:133–159  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

131
132
133class Aggregation(Function):
134 @staticmethod
135 def forward(ctx, input, position, weight, idx):
136 """
137 input: input: (n, c), position: (n, nsample, c), weight : (n, nsample, c'), idx: (n, nsample)
138 output: (n, c)
139 """
140 assert input.is_contiguous() and position.is_contiguous() and weight.is_contiguous()
141 n, nsample, c = position.shape; w_c = weight.shape[-1]
142 output = torch.cuda.FloatTensor(n, c).zero_()
143 pointops_cuda.aggregation_forward_cuda(n, nsample, c, w_c, input, position, weight, idx, output)
144 ctx.save_for_backward(input, position, weight, idx)
145 return output
146
147 @staticmethod
148 def backward(ctx, grad_output):
149 """
150 input: grad_out: (n, c)
151 output: grad_input: (n, c), grad_position: (n, nsample, c), grad_weight : (n, nsample, c')
152 """
153 input, position, weight, idx = ctx.saved_tensors
154 n, nsample, c = position.shape; w_c = weight.shape[-1]
155 grad_input = torch.cuda.FloatTensor(n, c).zero_()
156 grad_position = torch.cuda.FloatTensor(n, nsample, c).zero_()
157 grad_weight = torch.cuda.FloatTensor(n, nsample, w_c).zero_()
158 pointops_cuda.aggregation_backward_cuda(n, nsample, c, w_c, input, position, weight, idx, grad_output, grad_input, grad_position, grad_weight)
159 return grad_input, grad_position, grad_weight, None
160
161aggregation = Aggregation.apply
162

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected