@@ -58,7 +58,7 @@ __global__ void generateBoxes3D_kernel(
58
58
const float * out_rot, const float * out_vel, const float voxel_size_x, const float voxel_size_y,
59
59
const float range_min_x, const float range_min_y, const std::size_t down_grid_size_x,
60
60
const std::size_t down_grid_size_y, const std::size_t downsample_factor, const int class_size,
61
- const float * yaw_norm_thresholds, Box3D * det_boxes3d)
61
+ const bool has_variance, const float * yaw_norm_thresholds, Box3D * det_boxes3d)
62
62
{
63
63
// generate boxes3d from the outputs of the network.
64
64
// shape of out_*: (N, DOWN_GRID_SIZE_Y, DOWN_GRID_SIZE_X)
@@ -107,6 +107,34 @@ __global__ void generateBoxes3D_kernel(
107
107
det_boxes3d[idx].yaw = atan2f (yaw_sin, yaw_cos);
108
108
det_boxes3d[idx].vel_x = vel_x;
109
109
det_boxes3d[idx].vel_y = vel_y;
110
+
111
+ if (has_variance) {
112
+ const float offset_x_variance = out_offset[down_grid_size * 2 + idx];
113
+ const float offset_y_variance = out_offset[down_grid_size * 3 + idx];
114
+ const float z_variance = out_z[down_grid_size * 1 + idx];
115
+ const float w_variance = out_dim[down_grid_size * 3 + idx];
116
+ const float l_variance = out_dim[down_grid_size * 4 + idx];
117
+ const float h_variance = out_dim[down_grid_size * 5 + idx];
118
+ const float yaw_sin_log_variance = out_rot[down_grid_size * 2 + idx];
119
+ const float yaw_cos_log_variance = out_rot[down_grid_size * 3 + idx];
120
+ const float vel_x_variance = out_vel[down_grid_size * 2 + idx];
121
+ const float vel_y_variance = out_vel[down_grid_size * 3 + idx];
122
+
123
+ det_boxes3d[idx].x_variance = voxel_size_x * downsample_factor * expf (offset_x_variance);
124
+ det_boxes3d[idx].y_variance = voxel_size_x * downsample_factor * expf (offset_y_variance);
125
+ det_boxes3d[idx].z_variance = expf (z_variance);
126
+ det_boxes3d[idx].length_variance = expf (l_variance);
127
+ det_boxes3d[idx].width_variance = expf (w_variance);
128
+ det_boxes3d[idx].height_variance = expf (h_variance);
129
+ const float yaw_sin_sq = yaw_sin * yaw_sin;
130
+ const float yaw_cos_sq = yaw_cos * yaw_cos;
131
+ const float yaw_norm_sq = (yaw_sin_sq + yaw_cos_sq) * (yaw_sin_sq + yaw_cos_sq);
132
+ det_boxes3d[idx].yaw_variance =
133
+ (yaw_cos_sq * expf (yaw_sin_log_variance) + yaw_sin_sq * expf (yaw_cos_log_variance)) /
134
+ yaw_norm_sq;
135
+ det_boxes3d[idx].vel_x_variance = expf (vel_x_variance);
136
+ det_boxes3d[idx].vel_y_variance = expf (vel_y_variance);
137
+ }
110
138
}
111
139
112
140
PostProcessCUDA::PostProcessCUDA (const CenterPointConfig & config) : config_(config)
@@ -131,7 +159,7 @@ cudaError_t PostProcessCUDA::generateDetectedBoxes3D_launch(
131
159
out_heatmap, out_offset, out_z, out_dim, out_rot, out_vel, config_.voxel_size_x_ ,
132
160
config_.voxel_size_y_ , config_.range_min_x_ , config_.range_min_y_ , config_.down_grid_size_x_ ,
133
161
config_.down_grid_size_y_ , config_.downsample_factor_ , config_.class_size_ ,
134
- thrust::raw_pointer_cast (yaw_norm_thresholds_d_.data ()),
162
+ config_. has_variance_ , thrust::raw_pointer_cast (yaw_norm_thresholds_d_.data ()),
135
163
thrust::raw_pointer_cast (boxes3d_d_.data ()));
136
164
137
165
// suppress by score
0 commit comments