Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
BaiXuePrincess
Paddle
提交
1a685144
P
Paddle
项目概览
BaiXuePrincess
/
Paddle
与 Fork 源项目一致
Fork自
PaddlePaddle / Paddle
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
1a685144
编写于
12月 28, 2017
作者:
S
sweetsky0901
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
for xxYY to xx_yy
上级
dc7ddcb0
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
56 addition
and
57 deletion
+56
-57
paddle/operators/detection_output_op.cc
paddle/operators/detection_output_op.cc
+3
-4
paddle/operators/detection_output_op.cu.cc
paddle/operators/detection_output_op.cu.cc
+2
-2
paddle/operators/detection_output_op.h
paddle/operators/detection_output_op.h
+11
-11
paddle/operators/math/detection_util.h
paddle/operators/math/detection_util.h
+40
-40
未找到文件。
paddle/operators/detection_output_op.cc
浏览文件 @
1a685144
...
...
@@ -18,8 +18,7 @@ namespace operators {
class
DetectionOutputOpMaker
:
public
framework
::
OpProtoAndCheckerMaker
{
public:
DetectionOutputOpMaker
(
framework
::
OpProto
*
proto
,
framework
::
OpAttrChecker
*
op_checker
)
DetectionOutputOpMaker
(
OpProto
*
proto
,
OpAttrChecker
*
op_checker
)
:
OpProtoAndCheckerMaker
(
proto
,
op_checker
)
{
AddInput
(
"Loc"
,
"(Tensor) The input tensor of detection_output operator."
...
...
@@ -86,5 +85,5 @@ REGISTER_OP_WITHOUT_GRADIENT(detection_output, ops::DetectionOutputOp,
ops
::
DetectionOutputOpMaker
);
REGISTER_OP_CPU_KERNEL
(
detection_output
,
ops
::
Detection
_output_
Kernel
<
paddle
::
platform
::
CPUDeviceContext
,
float
>
,
ops
::
Detection
_output_
Kernel
<
paddle
::
platform
::
CPUDeviceContext
,
double
>
);
ops
::
Detection
Output
Kernel
<
paddle
::
platform
::
CPUDeviceContext
,
float
>
,
ops
::
Detection
Output
Kernel
<
paddle
::
platform
::
CPUDeviceContext
,
double
>
);
paddle/operators/detection_output_op.cu.cc
浏览文件 @
1a685144
...
...
@@ -17,5 +17,5 @@ limitations under the License. */
namespace
ops
=
paddle
::
operators
;
REGISTER_OP_CUDA_KERNEL
(
detection_output
,
ops
::
Detection
_output_
Kernel
<
paddle
::
platform
::
CUDADeviceContext
,
float
>
,
ops
::
Detection
_output_
Kernel
<
paddle
::
platform
::
CUDADeviceContext
,
double
>
);
ops
::
Detection
Output
Kernel
<
paddle
::
platform
::
CUDADeviceContext
,
float
>
,
ops
::
Detection
Output
Kernel
<
paddle
::
platform
::
CUDADeviceContext
,
double
>
);
paddle/operators/detection_output_op.h
浏览文件 @
1a685144
...
...
@@ -48,7 +48,7 @@ inline void transpose_fun(const framework::ExecutionContext& context,
}
}
template
<
typename
DeviceContext
,
typename
T
>
class
Detection
_output_
Kernel
:
public
framework
::
OpKernel
<
T
>
{
class
Detection
Output
Kernel
:
public
framework
::
OpKernel
<
T
>
{
public:
void
Compute
(
const
framework
::
ExecutionContext
&
context
)
const
override
{
const
framework
::
Tensor
*
in_loc
=
context
.
Input
<
framework
::
Tensor
>
(
"Loc"
);
...
...
@@ -119,22 +119,22 @@ class Detection_output_Kernel : public framework::OpKernel<T> {
size_t
prior_offset
=
i
*
8
;
size_t
loc_pred_offset
=
n
*
num_priors
*
4
+
i
*
4
;
std
::
vector
<
math
::
BBox
<
T
>>
prior_bbox_vec
;
math
::
get
BBoxFromP
riorData
<
T
>
(
priorbox_data
+
prior_offset
,
1
,
prior_bbox_vec
);
math
::
get
_bbox_from_p
riorData
<
T
>
(
priorbox_data
+
prior_offset
,
1
,
prior_bbox_vec
);
std
::
vector
<
std
::
vector
<
T
>>
prior_bbox_var
;
math
::
get
BBoxVarFromPriorD
ata
<
T
>
(
priorbox_data
+
prior_offset
,
1
,
prior_bbox_var
);
math
::
get
_bbox_var_from_prior_d
ata
<
T
>
(
priorbox_data
+
prior_offset
,
1
,
prior_bbox_var
);
std
::
vector
<
T
>
loc_pred_data
;
for
(
size_t
j
=
0
;
j
<
4
;
++
j
)
loc_pred_data
.
push_back
(
*
(
loc_data
+
loc_pred_offset
+
j
));
math
::
BBox
<
T
>
bbox
=
math
::
decode
BBoxWithV
ar
<
T
>
(
math
::
BBox
<
T
>
bbox
=
math
::
decode
_bbox_with_v
ar
<
T
>
(
prior_bbox_vec
[
0
],
prior_bbox_var
[
0
],
loc_pred_data
);
decoded_bboxes
.
push_back
(
bbox
);
}
all_decoded_bboxes
.
push_back
(
decoded_bboxes
);
}
std
::
vector
<
std
::
map
<
size_t
,
std
::
vector
<
size_t
>>>
all_indices
;
int
num_kept
=
math
::
get
DetectionI
ndices
<
T
>
(
int
num_kept
=
math
::
get
_detection_i
ndices
<
T
>
(
conf_data
,
num_priors
,
num_classes
,
background_label_id
,
batch_size
,
confidence_threshold
,
nms_top_k
,
nms_threshold
,
top_k
,
all_decoded_bboxes
,
&
all_indices
);
...
...
@@ -154,11 +154,11 @@ class Detection_output_Kernel : public framework::OpKernel<T> {
out_cpu
.
mutable_data
<
T
>
(
out
->
dims
(),
platform
::
CPUPlace
());
out_data
=
out_cpu
.
data
<
T
>
();
}
math
::
get
DetectionO
utput
<
T
>
(
conf_data
,
num_kept
,
num_priors
,
num_classes
,
batch_size
,
all_indices
,
all_decoded_bboxes
,
out_data
);
math
::
get
_detection_o
utput
<
T
>
(
conf_data
,
num_kept
,
num_priors
,
num_classes
,
batch_size
,
all_indices
,
all_decoded_bboxes
,
out_data
);
if
(
platform
::
is_gpu_place
(
context
.
GetPlace
()))
{
framework
::
CopyFrom
(
out_cpu
,
platform
::
GPU
Place
(),
framework
::
CopyFrom
(
out_cpu
,
platform
::
CUDA
Place
(),
context
.
device_context
(),
out
);
}
}
...
...
paddle/operators/math/detection_util.h
浏览文件 @
1a685144
...
...
@@ -51,31 +51,31 @@ struct BBox {
// KNCHW ==> NHWC
// template <typename T>
template
<
typename
T
>
void
get
BBoxFromP
riorData
(
const
T
*
prior_data
,
const
size_t
num_bboxes
,
std
::
vector
<
BBox
<
T
>>&
bbox_vec
);
void
get
_bbox_from_p
riorData
(
const
T
*
prior_data
,
const
size_t
num_bboxes
,
std
::
vector
<
BBox
<
T
>>&
bbox_vec
);
template
<
typename
T
>
void
get
BBoxVarFromPriorD
ata
(
const
T
*
prior_data
,
const
size_t
num
,
std
::
vector
<
std
::
vector
<
T
>>&
var_vec
);
void
get
_bbox_var_from_prior_d
ata
(
const
T
*
prior_data
,
const
size_t
num
,
std
::
vector
<
std
::
vector
<
T
>>&
var_vec
);
template
<
typename
T
>
BBox
<
T
>
decode
BBoxWithV
ar
(
BBox
<
T
>&
prior_bbox
,
const
std
::
vector
<
T
>&
prior_bbox_var
,
const
std
::
vector
<
T
>&
loc_pred_data
);
BBox
<
T
>
decode
_bbox_with_v
ar
(
BBox
<
T
>&
prior_bbox
,
const
std
::
vector
<
T
>&
prior_bbox_var
,
const
std
::
vector
<
T
>&
loc_pred_data
);
template
<
typename
T1
,
typename
T2
>
bool
sort
ScorePairD
escend
(
const
std
::
pair
<
T1
,
T2
>&
pair1
,
const
std
::
pair
<
T1
,
T2
>&
pair2
);
bool
sort
_score_pair_d
escend
(
const
std
::
pair
<
T1
,
T2
>&
pair1
,
const
std
::
pair
<
T1
,
T2
>&
pair2
);
template
<
typename
T
>
bool
sort
ScorePairD
escend
(
const
std
::
pair
<
T
,
BBox
<
T
>>&
pair1
,
const
std
::
pair
<
T
,
BBox
<
T
>>&
pair2
);
bool
sort
_score_pair_d
escend
(
const
std
::
pair
<
T
,
BBox
<
T
>>&
pair1
,
const
std
::
pair
<
T
,
BBox
<
T
>>&
pair2
);
template
<
typename
T
>
T
jaccard
O
verlap
(
const
BBox
<
T
>&
bbox1
,
const
BBox
<
T
>&
bbox2
);
T
jaccard
_o
verlap
(
const
BBox
<
T
>&
bbox1
,
const
BBox
<
T
>&
bbox2
);
template
<
typename
T
>
void
apply
NMSFast
(
const
std
::
vector
<
BBox
<
T
>>&
bboxes
,
const
T
*
conf_score_data
,
size_t
class_idx
,
size_t
top_k
,
T
conf_threshold
,
T
nms_threshold
,
size_t
num_priors
,
size_t
num_classe
s
,
std
::
vector
<
size_t
>*
indices
);
void
apply
_nms_fast
(
const
std
::
vector
<
BBox
<
T
>>&
bboxes
,
const
T
*
conf_score_data
,
size_t
class_idx
,
size_t
top_k
,
T
conf_threshold
,
T
nms_threshold
,
size_t
num_prior
s
,
size_t
num_classes
,
std
::
vector
<
size_t
>*
indices
);
template
<
typename
T
>
int
get
DetectionI
ndices
(
int
get
_detection_i
ndices
(
const
T
*
conf_data
,
const
size_t
num_priors
,
const
size_t
num_classes
,
const
size_t
background_label_id
,
const
size_t
batch_size
,
const
T
conf_threshold
,
const
size_t
nms_top_k
,
const
T
nms_threshold
,
...
...
@@ -85,14 +85,14 @@ int getDetectionIndices(
template
<
typename
T
>
BBox
<
T
>
clipBBox
(
const
BBox
<
T
>&
bbox
);
template
<
typename
T
>
void
get
DetectionO
utput
(
void
get
_detection_o
utput
(
const
T
*
conf_data
,
const
size_t
num_kept
,
const
size_t
num_priors
,
const
size_t
num_classes
,
const
size_t
batch_size
,
const
std
::
vector
<
std
::
map
<
size_t
,
std
::
vector
<
size_t
>>>&
all_indices
,
const
std
::
vector
<
std
::
vector
<
BBox
<
T
>>>&
all_decoded_bboxes
,
T
*
out_data
);
template
<
typename
T
>
void
get
BBoxFromP
riorData
(
const
T
*
prior_data
,
const
size_t
num_bboxes
,
std
::
vector
<
BBox
<
T
>>&
bbox_vec
)
{
void
get
_bbox_from_p
riorData
(
const
T
*
prior_data
,
const
size_t
num_bboxes
,
std
::
vector
<
BBox
<
T
>>&
bbox_vec
)
{
size_t
out_offset
=
bbox_vec
.
size
();
bbox_vec
.
resize
(
bbox_vec
.
size
()
+
num_bboxes
);
for
(
size_t
i
=
0
;
i
<
num_bboxes
;
++
i
)
{
...
...
@@ -105,8 +105,8 @@ void getBBoxFromPriorData(const T* prior_data, const size_t num_bboxes,
}
}
template
<
typename
T
>
void
get
BBoxVarFromPriorD
ata
(
const
T
*
prior_data
,
const
size_t
num
,
std
::
vector
<
std
::
vector
<
T
>>&
var_vec
)
{
void
get
_bbox_var_from_prior_d
ata
(
const
T
*
prior_data
,
const
size_t
num
,
std
::
vector
<
std
::
vector
<
T
>>&
var_vec
)
{
size_t
out_offset
=
var_vec
.
size
();
var_vec
.
resize
(
var_vec
.
size
()
+
num
);
for
(
size_t
i
=
0
;
i
<
num
;
++
i
)
{
...
...
@@ -119,9 +119,9 @@ void getBBoxVarFromPriorData(const T* prior_data, const size_t num,
}
}
template
<
typename
T
>
BBox
<
T
>
decode
BBoxWithV
ar
(
BBox
<
T
>&
prior_bbox
,
const
std
::
vector
<
T
>&
prior_bbox_var
,
const
std
::
vector
<
T
>&
loc_pred_data
)
{
BBox
<
T
>
decode
_bbox_with_v
ar
(
BBox
<
T
>&
prior_bbox
,
const
std
::
vector
<
T
>&
prior_bbox_var
,
const
std
::
vector
<
T
>&
loc_pred_data
)
{
T
prior_bbox_width
=
prior_bbox
.
get_width
();
T
prior_bbox_height
=
prior_bbox
.
get_height
();
T
prior_bbox_center_x
=
prior_bbox
.
get_center_x
();
...
...
@@ -147,12 +147,12 @@ BBox<T> decodeBBoxWithVar(BBox<T>& prior_bbox,
return
decoded_bbox
;
}
template
<
typename
T1
,
typename
T2
>
bool
sort
ScorePairD
escend
(
const
std
::
pair
<
T1
,
T2
>&
pair1
,
const
std
::
pair
<
T1
,
T2
>&
pair2
)
{
bool
sort
_score_pair_d
escend
(
const
std
::
pair
<
T1
,
T2
>&
pair1
,
const
std
::
pair
<
T1
,
T2
>&
pair2
)
{
return
pair1
.
first
>
pair2
.
first
;
}
template
<
typename
T
>
T
jaccard
O
verlap
(
const
BBox
<
T
>&
bbox1
,
const
BBox
<
T
>&
bbox2
)
{
T
jaccard
_o
verlap
(
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
;
...
...
@@ -174,10 +174,10 @@ T jaccardOverlap(const BBox<T>& bbox1, const BBox<T>& bbox2) {
}
template
<
typename
T
>
void
apply
NMSFast
(
const
std
::
vector
<
BBox
<
T
>>&
bboxes
,
const
T
*
conf_score_data
,
size_t
class_idx
,
size_t
top_k
,
T
conf_threshold
,
T
nms_threshold
,
size_t
num_priors
,
size_t
num_classe
s
,
std
::
vector
<
size_t
>*
indices
)
{
void
apply
_nms_fast
(
const
std
::
vector
<
BBox
<
T
>>&
bboxes
,
const
T
*
conf_score_data
,
size_t
class_idx
,
size_t
top_k
,
T
conf_threshold
,
T
nms_threshold
,
size_t
num_prior
s
,
size_t
num_classes
,
std
::
vector
<
size_t
>*
indices
)
{
std
::
vector
<
std
::
pair
<
T
,
size_t
>>
scores
;
for
(
size_t
i
=
0
;
i
<
num_priors
;
++
i
)
{
size_t
conf_offset
=
i
*
num_classes
+
class_idx
;
...
...
@@ -185,7 +185,7 @@ void applyNMSFast(const std::vector<BBox<T>>& bboxes, const T* conf_score_data,
scores
.
push_back
(
std
::
make_pair
(
conf_score_data
[
conf_offset
],
i
));
}
std
::
stable_sort
(
scores
.
begin
(),
scores
.
end
(),
sort
ScorePairD
escend
<
T
,
size_t
>
);
sort
_score_pair_d
escend
<
T
,
size_t
>
);
if
(
top_k
>
0
&&
top_k
<
scores
.
size
())
scores
.
resize
(
top_k
);
while
(
scores
.
size
()
>
0
)
{
const
size_t
idx
=
scores
.
front
().
second
;
...
...
@@ -193,7 +193,7 @@ void applyNMSFast(const std::vector<BBox<T>>& bboxes, const T* conf_score_data,
for
(
size_t
i
=
0
;
i
<
indices
->
size
();
++
i
)
{
if
(
keep
)
{
const
size_t
saved_idx
=
(
*
indices
)[
i
];
T
overlap
=
jaccard
O
verlap
<
T
>
(
bboxes
[
idx
],
bboxes
[
saved_idx
]);
T
overlap
=
jaccard
_o
verlap
<
T
>
(
bboxes
[
idx
],
bboxes
[
saved_idx
]);
keep
=
overlap
<=
nms_threshold
;
}
else
{
break
;
...
...
@@ -204,7 +204,7 @@ void applyNMSFast(const std::vector<BBox<T>>& bboxes, const T* conf_score_data,
}
}
template
<
typename
T
>
int
get
DetectionI
ndices
(
int
get
_detection_i
ndices
(
const
T
*
conf_data
,
const
size_t
num_priors
,
const
size_t
num_classes
,
const
size_t
background_label_id
,
const
size_t
batch_size
,
const
T
conf_threshold
,
const
size_t
nms_top_k
,
const
T
nms_threshold
,
...
...
@@ -219,9 +219,9 @@ int getDetectionIndices(
size_t
conf_offset
=
n
*
num_priors
*
num_classes
;
for
(
size_t
c
=
0
;
c
<
num_classes
;
++
c
)
{
if
(
c
==
background_label_id
)
continue
;
apply
NMSF
ast
<
T
>
(
decoded_bboxes
,
conf_data
+
conf_offset
,
c
,
nms_top_k
,
conf_threshold
,
nms_threshold
,
num_priors
,
num_classes
,
&
(
indices
[
c
]));
apply
_nms_f
ast
<
T
>
(
decoded_bboxes
,
conf_data
+
conf_offset
,
c
,
nms_top_k
,
conf_threshold
,
nms_threshold
,
num_priors
,
num_classes
,
&
(
indices
[
c
]));
num_detected
+=
indices
[
c
].
size
();
}
if
(
top_k
>
0
&&
num_detected
>
top_k
)
{
...
...
@@ -237,7 +237,7 @@ int getDetectionIndices(
}
}
std
::
sort
(
score_index_pairs
.
begin
(),
score_index_pairs
.
end
(),
sort
ScorePairD
escend
<
T
,
std
::
pair
<
size_t
,
size_t
>>
);
sort
_score_pair_d
escend
<
T
,
std
::
pair
<
size_t
,
size_t
>>
);
score_index_pairs
.
resize
(
top_k
);
std
::
map
<
size_t
,
std
::
vector
<
size_t
>>
new_indices
;
for
(
size_t
i
=
0
;
i
<
score_index_pairs
.
size
();
++
i
)
{
...
...
@@ -266,7 +266,7 @@ BBox<T> clipBBox(const BBox<T>& bbox) {
return
clipped_bbox
;
}
template
<
typename
T
>
void
get
DetectionO
utput
(
void
get
_detection_o
utput
(
const
T
*
conf_data
,
const
size_t
num_kept
,
const
size_t
num_priors
,
const
size_t
num_classes
,
const
size_t
batch_size
,
const
std
::
vector
<
std
::
map
<
size_t
,
std
::
vector
<
size_t
>>>&
all_indices
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录