42 const std::vector<base::TrafficLightPtr> &refined_bboxes,
43 std::vector<base::TrafficLightPtr> *hdmap_bboxes) {
44 std::vector<std::pair<size_t, size_t>> assignments;
45 munkres_.
costs()->
Resize(hdmap_bboxes->size(), refined_bboxes.size());
47 for (
size_t row = 0; row < hdmap_bboxes->size(); ++row) {
48 auto center_hd = (*hdmap_bboxes)[row]->region.detection_roi.Center();
49 if ((*hdmap_bboxes)[row]->region.outside_image) {
50 AINFO <<
"projection_roi outside image, set score to 0.";
51 for (
size_t col = 0; col < refined_bboxes.size(); ++col) {
52 (*munkres_.
costs())(row, col) = 0.0;
56 for (
size_t col = 0; col < refined_bboxes.size(); ++col) {
57 float gaussian_score = 100.0f;
58 auto center_refine = refined_bboxes[col]->region.detection_roi.Center();
60 double distance_score =
Calc2dGaussianScore(center_hd, center_refine, gaussian_score, gaussian_score);
62 double max_score = 0.9;
63 auto detect_score = refined_bboxes[col]->region.detect_score;
64 double detection_score = detect_score > max_score ? max_score : detect_score;
66 double distance_weight = 0.7;
67 double detection_weight = 1 - distance_weight;
68 (*munkres_.
costs())(row, col)
69 =
static_cast<float>(detection_weight * detection_score + distance_weight * distance_score);
70 const auto &crop_roi = (*hdmap_bboxes)[row]->region.crop_roi;
71 const auto &detection_roi = refined_bboxes[col]->region.detection_roi;
72 if ((detection_roi & crop_roi) != detection_roi) {
73 AINFO <<
"detection_roi outside crop_roi, set score to 0."
74 <<
" detection_roi: " << detection_roi.x <<
" " << detection_roi.y <<
" " << detection_roi.width
75 <<
" " << detection_roi.height <<
" crop_roi: " << crop_roi.x <<
" " << crop_roi.y <<
" "
76 << crop_roi.width <<
" " << crop_roi.height;
77 (*munkres_.
costs())(row, col) = 0.0;
79 AINFO <<
"score " << (*munkres_.
costs())(row, col);
85 for (
size_t i = 0; i < hdmap_bboxes->size(); ++i) {
86 (*hdmap_bboxes)[i]->region.is_selected =
false;
87 (*hdmap_bboxes)[i]->region.is_detected =
false;
90 for (
size_t i = 0; i < assignments.size(); ++i) {
91 if (
static_cast<size_t>(assignments[i].first) >= hdmap_bboxes->size()
92 ||
static_cast<size_t>(
93 assignments[i].second >= refined_bboxes.size()
94 || (*hdmap_bboxes)[assignments[i].first]->region.is_selected
95 || refined_bboxes[assignments[i].second]->region.is_selected)) {
97 auto &refined_bbox_region = refined_bboxes[assignments[i].second]->region;
98 auto &hdmap_bbox_region = (*hdmap_bboxes)[assignments[i].first]->region;
99 refined_bbox_region.is_selected =
true;
100 hdmap_bbox_region.is_selected =
true;
102 const auto &crop_roi = hdmap_bbox_region.crop_roi;
103 const auto &detection_roi = refined_bbox_region.detection_roi;
104 bool outside_crop_roi = ((crop_roi & detection_roi) != detection_roi);
105 if (hdmap_bbox_region.outside_image || outside_crop_roi) {
106 hdmap_bbox_region.is_detected =
false;
108 hdmap_bbox_region.detection_roi = refined_bbox_region.detection_roi;
109 hdmap_bbox_region.detect_class_id = refined_bbox_region.detect_class_id;
110 hdmap_bbox_region.detect_score = refined_bbox_region.detect_score;
111 hdmap_bbox_region.is_detected = refined_bbox_region.is_detected;
112 hdmap_bbox_region.is_selected = refined_bbox_region.is_selected;
117 for (
size_t i = 0; i < hdmap_bboxes->size(); ++i) {
118 AINFO <<
"hdmap_bboxes-" << i <<
":"
119 <<
" projection_roi: " << (*hdmap_bboxes)[i]->region.projection_roi.ToStr()
120 <<
" detection_roi: " << (*hdmap_bboxes)[i]->region.detection_roi.ToStr();