parent
67cbb3e3b6
commit
26f03ea13d
@ -1,20 +0,0 @@
|
||||
/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License. */
|
||||
|
||||
#include "paddle/operators/detection_map_op.h"
|
||||
|
||||
namespace ops = paddle::operators;
|
||||
REGISTER_OP_CUDA_KERNEL(
|
||||
detection_map, ops::DetectionMAPOpKernel<paddle::platform::GPUPlace, float>,
|
||||
ops::DetectionMAPOpKernel<paddle::platform::GPUPlace, double>);
|
File diff suppressed because it is too large
Load Diff
@ -1,22 +0,0 @@
|
||||
/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License. */
|
||||
|
||||
#include "paddle/operators/math/detection_util.h"
|
||||
#include "paddle/operators/math/math_function.h"
|
||||
|
||||
namespace paddle {
|
||||
namespace operators {
|
||||
namespace math {} // namespace math
|
||||
} // namespace operators
|
||||
} // namespace paddle
|
@ -1,23 +0,0 @@
|
||||
/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License. */
|
||||
|
||||
#include "paddle/operators/math/detection_util.h"
|
||||
#include "paddle/operators/math/math_function.h"
|
||||
#include "paddle/platform/cuda_helper.h"
|
||||
|
||||
namespace paddle {
|
||||
namespace operators {
|
||||
namespace math {} // namespace math
|
||||
} // namespace operators
|
||||
} // namespace paddle
|
@ -1,128 +0,0 @@
|
||||
/* Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License. */
|
||||
#pragma once
|
||||
#include "paddle/framework/selected_rows.h"
|
||||
#include "paddle/platform/device_context.h"
|
||||
|
||||
namespace paddle {
|
||||
namespace operators {
|
||||
namespace math {
|
||||
|
||||
template <typename T>
|
||||
struct BBox {
|
||||
BBox(T x_min, T y_min, T x_max, T y_max)
|
||||
: x_min(x_min),
|
||||
y_min(y_min),
|
||||
x_max(x_max),
|
||||
y_max(y_max),
|
||||
is_difficult(false) {}
|
||||
|
||||
BBox() {}
|
||||
|
||||
T get_width() const { return x_max - x_min; }
|
||||
|
||||
T get_height() const { return y_max - y_min; }
|
||||
|
||||
T get_center_x() const { return (x_min + x_max) / 2; }
|
||||
|
||||
T get_center_y() const { return (y_min + y_max) / 2; }
|
||||
|
||||
T get_area() const { return get_width() * get_height(); }
|
||||
|
||||
// coordinate of bounding box
|
||||
T x_min;
|
||||
T y_min;
|
||||
T x_max;
|
||||
T y_max;
|
||||
// whether difficult object (e.g. object with heavy occlusion is difficult)
|
||||
bool is_difficult;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
void GetBBoxFromDetectData(const T* detect_data, const size_t num_bboxes,
|
||||
std::vector<T>& labels, std::vector<T>& scores,
|
||||
std::vector<BBox<T>>& bboxes) {
|
||||
size_t out_offset = bboxes.size();
|
||||
labels.resize(out_offset + num_bboxes);
|
||||
scores.resize(out_offset + num_bboxes);
|
||||
bboxes.resize(out_offset + num_bboxes);
|
||||
for (size_t i = 0; i < num_bboxes; ++i) {
|
||||
labels[out_offset + i] = *(detect_data + i * 7 + 1);
|
||||
scores[out_offset + i] = *(detect_data + i * 7 + 2);
|
||||
BBox<T> bbox;
|
||||
bbox.x_min = *(detect_data + i * 7 + 3);
|
||||
bbox.y_min = *(detect_data + i * 7 + 4);
|
||||
bbox.x_max = *(detect_data + i * 7 + 5);
|
||||
bbox.y_max = *(detect_data + i * 7 + 6);
|
||||
bboxes[out_offset + i] = bbox;
|
||||
};
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void GetBBoxFromLabelData(const T* label_data, const size_t num_bboxes,
|
||||
std::vector<BBox<T>>& bboxes) {
|
||||
size_t out_offset = bboxes.size();
|
||||
bboxes.resize(bboxes.size() + num_bboxes);
|
||||
for (size_t i = 0; i < num_bboxes; ++i) {
|
||||
BBox<T> bbox;
|
||||
bbox.x_min = *(label_data + i * 6 + 1);
|
||||
bbox.y_min = *(label_data + i * 6 + 2);
|
||||
bbox.x_max = *(label_data + i * 6 + 3);
|
||||
bbox.y_max = *(label_data + i * 6 + 4);
|
||||
T is_difficult = *(label_data + i * 6 + 5);
|
||||
if (std::abs(is_difficult - 0.0) < 1e-6)
|
||||
bbox.is_difficult = false;
|
||||
else
|
||||
bbox.is_difficult = true;
|
||||
bboxes[out_offset + i] = bbox;
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline float JaccardOverlap(const BBox<T>& bbox1, const BBox<T>& bbox2) {
|
||||
if (bbox2.x_min > bbox1.x_max || bbox2.x_max < bbox1.x_min ||
|
||||
bbox2.y_min > bbox1.y_max || bbox2.y_max < bbox1.y_min) {
|
||||
return 0.0;
|
||||
} else {
|
||||
float inter_x_min = std::max(bbox1.x_min, bbox2.x_min);
|
||||
float inter_y_min = std::max(bbox1.y_min, bbox2.y_min);
|
||||
float inter_x_max = std::min(bbox1.x_max, bbox2.x_max);
|
||||
float inter_y_max = std::min(bbox1.y_max, bbox2.y_max);
|
||||
|
||||
float inter_width = inter_x_max - inter_x_min;
|
||||
float inter_height = inter_y_max - inter_y_min;
|
||||
float inter_area = inter_width * inter_height;
|
||||
|
||||
float bbox_area1 = bbox1.get_area();
|
||||
float bbox_area2 = bbox2.get_area();
|
||||
|
||||
return inter_area / (bbox_area1 + bbox_area2 - inter_area);
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
bool SortScorePairDescend(const std::pair<float, T>& pair1,
|
||||
const std::pair<float, T>& pair2) {
|
||||
return pair1.first > pair2.first;
|
||||
}
|
||||
|
||||
// template <>
|
||||
// bool SortScorePairDescend(const std::pair<float, NormalizedBBox>& pair1,
|
||||
// const std::pair<float, NormalizedBBox>& pair2) {
|
||||
// return pair1.first > pair2.first;
|
||||
// }
|
||||
|
||||
} // namespace math
|
||||
} // namespace operators
|
||||
} // namespace paddle
|
Loading…
Reference in new issue