diff --git a/mmdet/core/bbox/bbox_target.py b/mmdet/core/bbox/bbox_target.py index 4a0450d915784ec1f5bd67963bbb27a743e71044..aa1fbc67430672185a1a01cbc5338a1912928b84 100644 --- a/mmdet/core/bbox/bbox_target.py +++ b/mmdet/core/bbox/bbox_target.py @@ -57,9 +57,6 @@ def bbox_target_single(pos_bboxes, bbox_weights[:num_pos, :] = 1 if num_neg > 0: label_weights[-num_neg:] = 1.0 - if reg_classes > 1: - bbox_targets, bbox_weights = expand_target(bbox_targets, bbox_weights, - labels, reg_classes) return labels, label_weights, bbox_targets, bbox_weights diff --git a/mmdet/models/bbox_heads/bbox_head.py b/mmdet/models/bbox_heads/bbox_head.py index 2168e2e156814dbfd875915335ce2255a9df6c19..4dcbd97eb3daa344bde38c03d632898cf6197258 100644 --- a/mmdet/models/bbox_heads/bbox_head.py +++ b/mmdet/models/bbox_heads/bbox_head.py @@ -94,10 +94,16 @@ class BBoxHead(nn.Module): cls_score, labels, label_weights, reduce=reduce) losses['acc'] = accuracy(cls_score, labels) if bbox_pred is not None: + pos_inds = labels > 0 + if self.reg_class_agnostic: + pos_bbox_pred = bbox_pred.view(bbox_pred.size(0), 4)[pos_inds] + else: + pos_bbox_pred = bbox_pred.view(bbox_pred.size(0), -1, + 4)[pos_inds, labels[pos_inds]] losses['loss_reg'] = weighted_smoothl1( - bbox_pred, - bbox_targets, - bbox_weights, + pos_bbox_pred, + bbox_targets[pos_inds], + bbox_weights[pos_inds], avg_factor=bbox_targets.size(0)) return losses diff --git a/mmdet/ops/dcn/src/deform_conv_cuda.cpp b/mmdet/ops/dcn/src/deform_conv_cuda.cpp index fda204f967d2b0b557d76ddeb71508e06f0bd368..c4563ed86604279983d4d1a80c2890293b38c61b 100644 --- a/mmdet/ops/dcn/src/deform_conv_cuda.cpp +++ b/mmdet/ops/dcn/src/deform_conv_cuda.cpp @@ -195,11 +195,11 @@ int deform_conv_forward_cuda(at::Tensor input, at::Tensor weight, outputHeight, outputWidth}); columns = at::zeros( {nInputPlane * kW * kH, im2col_step * outputHeight * outputWidth}, - input.type()); + input.options()); if (ones.ndimension() != 2 || ones.size(0) * ones.size(1) < outputHeight * outputWidth) { - ones = at::ones({outputHeight, outputWidth}, input.type()); + ones = at::ones({outputHeight, outputWidth}, input.options()); } input = input.view({batchSize / im2col_step, im2col_step, nInputPlane, @@ -211,7 +211,7 @@ int deform_conv_forward_cuda(at::Tensor input, at::Tensor weight, at::Tensor output_buffer = at::zeros({batchSize / im2col_step, nOutputPlane, im2col_step * outputHeight, outputWidth}, - output.type()); + output.options()); output_buffer = output_buffer.view( {output_buffer.size(0), group, output_buffer.size(1) / group, @@ -299,7 +299,7 @@ int deform_conv_backward_input_cuda(at::Tensor input, at::Tensor offset, gradInput = gradInput.view({batchSize, nInputPlane, inputHeight, inputWidth}); columns = at::zeros( {nInputPlane * kW * kH, im2col_step * outputHeight * outputWidth}, - input.type()); + input.options()); // change order of grad output gradOutput = gradOutput.view({batchSize / im2col_step, im2col_step, @@ -414,7 +414,7 @@ int deform_conv_backward_parameters_cuda( columns = at::zeros( {nInputPlane * kW * kH, im2col_step * outputHeight * outputWidth}, - input.type()); + input.options()); gradOutput = gradOutput.view({batchSize / im2col_step, im2col_step, nOutputPlane, outputHeight, outputWidth}); @@ -518,7 +518,7 @@ void modulated_deform_conv_cuda_forward( if (ones.ndimension() != 2 || ones.size(0) * ones.size(1) < height_out * width_out) { // Resize plane and fill with ones... - ones = at::ones({height_out, width_out}, input.type()); + ones = at::ones({height_out, width_out}, input.options()); } // resize output @@ -526,7 +526,7 @@ void modulated_deform_conv_cuda_forward( // resize temporary columns columns = at::zeros({channels * kernel_h * kernel_w, 1 * height_out * width_out}, - input.type()); + input.options()); output = output.view({output.size(0), group, output.size(1) / group, output.size(2), output.size(3)}); @@ -597,12 +597,12 @@ void modulated_deform_conv_cuda_backward( if (ones.ndimension() != 2 || ones.size(0) * ones.size(1) < height_out * width_out) { // Resize plane and fill with ones... - ones = at::ones({height_out, width_out}, input.type()); + ones = at::ones({height_out, width_out}, input.options()); } grad_input = grad_input.view({batch, channels, height, width}); columns = at::zeros({channels * kernel_h * kernel_w, height_out * width_out}, - input.type()); + input.options()); grad_output = grad_output.view({grad_output.size(0), group, grad_output.size(1) / group,