Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleClas
提交
b31d67ea
P
PaddleClas
项目概览
PaddlePaddle
/
PaddleClas
大约 1 年 前同步成功
通知
115
Star
4999
Fork
1114
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
19
列表
看板
标记
里程碑
合并请求
6
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleClas
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
19
Issue
19
列表
看板
标记
里程碑
合并请求
6
合并请求
6
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
b31d67ea
编写于
9月 22, 2022
作者:
H
HydrogenSulfate
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add flexible configuration for disable det model(C++)
上级
6cf954e1
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
285 addition
and
271 deletion
+285
-271
deploy/cpp_shitu/src/main.cpp
deploy/cpp_shitu/src/main.cpp
+285
-271
未找到文件。
deploy/cpp_shitu/src/main.cpp
浏览文件 @
b31d67ea
...
...
@@ -37,17 +37,14 @@
using
namespace
std
;
using
namespace
cv
;
DEFINE_string
(
config
,
""
,
"Path of yaml file"
);
DEFINE_string
(
c
,
""
,
"Path of yaml file"
);
DEFINE_string
(
config
,
""
,
"Path of yaml file"
);
DEFINE_string
(
c
,
""
,
"Path of yaml file"
);
void
DetPredictImage
(
const
std
::
vector
<
cv
::
Mat
>
&
batch_imgs
,
const
std
::
vector
<
std
::
string
>
&
all_img_paths
,
void
DetPredictImage
(
const
std
::
vector
<
cv
::
Mat
>
&
batch_imgs
,
const
std
::
vector
<
std
::
string
>
&
all_img_paths
,
const
int
batch_size
,
Detection
::
ObjectDetector
*
det
,
std
::
vector
<
Detection
::
ObjectResult
>
&
im_result
,
std
::
vector
<
int
>
&
im_bbox_num
,
std
::
vector
<
double
>
&
det_t
,
const
bool
visual_det
=
false
,
std
::
vector
<
Detection
::
ObjectResult
>
&
im_result
,
std
::
vector
<
double
>
&
det_t
,
const
bool
visual_det
=
false
,
const
bool
run_benchmark
=
false
,
const
std
::
string
&
output_dir
=
"output"
)
{
int
steps
=
ceil
(
float
(
all_img_paths
.
size
())
/
batch_size
);
...
...
@@ -65,7 +62,7 @@ void DetPredictImage(const std::vector <cv::Mat> &batch_imgs,
// }
// Store all detected result
std
::
vector
<
Detection
::
ObjectResult
>
result
;
std
::
vector
<
Detection
::
ObjectResult
>
result
;
std
::
vector
<
int
>
bbox_num
;
std
::
vector
<
double
>
det_times
;
bool
is_rbox
=
false
;
...
...
@@ -104,7 +101,7 @@ void DetPredictImage(const std::vector <cv::Mat> &batch_imgs,
}
}
}
im_bbox_num
.
push_back
(
detect_num
);
//
im_bbox_num.push_back(detect_num);
item_start_idx
=
item_start_idx
+
bbox_num
[
i
];
// Visualization result
...
...
@@ -136,16 +133,17 @@ void DetPredictImage(const std::vector <cv::Mat> &batch_imgs,
}
void
PrintResult
(
std
::
string
&
img_path
,
std
::
vector
<
Detection
::
ObjectResult
>
&
det_result
,
std
::
vector
<
int
>
&
indeices
,
VectorSearch
&
vector_search
,
std
::
vector
<
Detection
::
ObjectResult
>
&
det_result
,
std
::
vector
<
int
>
&
indeices
,
VectorSearch
*
vector_search_ptr
,
SearchResult
&
search_result
)
{
printf
(
"%s:
\n
"
,
img_path
.
c_str
());
for
(
int
i
=
0
;
i
<
indeices
.
size
();
++
i
)
{
int
t
=
indeices
[
i
];
printf
(
"
\t
result%d: bbox[%d, %d, %d, %d], score: %f, label: %s
\n
"
,
i
,
printf
(
"
\t
result%d: bbox[%d, %d, %d, %d], score: %f, label: %s
\n
"
,
i
,
det_result
[
t
].
rect
[
0
],
det_result
[
t
].
rect
[
1
],
det_result
[
t
].
rect
[
2
],
det_result
[
t
].
rect
[
3
],
det_result
[
t
].
confidence
,
vector_search
.
GetLabel
(
search_result
.
I
[
search_result
.
return_k
*
t
])
vector_search_ptr
->
GetLabel
(
search_result
.
I
[
search_result
.
return_k
*
t
])
.
c_str
());
}
}
...
...
@@ -168,10 +166,21 @@ int main(int argc, char **argv) {
YamlConfig
config
(
yaml_path
);
config
.
PrintConfigInfo
();
// initialize detector, rec_Model, vector_search
Feature
::
FeatureExtracter
feature_extracter
(
config
.
config_file
);
Detection
::
ObjectDetector
detector
(
config
.
config_file
);
VectorSearch
searcher
(
config
.
config_file
);
// initialize detector
Detection
::
ObjectDetector
*
detector_ptr
=
nullptr
;
if
(
config
.
config_file
[
"Global"
][
"det_inference_model_dir"
].
Type
()
!=
YAML
::
NodeType
::
Null
&&
!
config
.
config_file
[
"Global"
][
"det_inference_model_dir"
]
.
as
<
std
::
string
>
()
.
empty
())
{
detector_ptr
=
new
Detection
::
ObjectDetector
(
config
.
config_file
);
}
// initialize feature_extractor
Feature
::
FeatureExtracter
*
feature_extracter_ptr
=
new
Feature
::
FeatureExtracter
(
config
.
config_file
);
// initialize vector_searcher
VectorSearch
*
vector_searcher_ptr
=
new
VectorSearch
(
config
.
config_file
);
// config
const
int
batch_size
=
config
.
config_file
[
"Global"
][
"batch_size"
].
as
<
int
>
();
...
...
@@ -196,9 +205,9 @@ int main(int argc, char **argv) {
// load image_file_path
std
::
string
path
=
config
.
config_file
[
"Global"
][
"infer_imgs"
].
as
<
std
::
string
>
();
std
::
vector
<
std
::
string
>
img_files_list
;
std
::
vector
<
std
::
string
>
img_files_list
;
if
(
cv
::
utils
::
fs
::
isDirectory
(
path
))
{
std
::
vector
<
cv
::
String
>
filenames
;
std
::
vector
<
cv
::
String
>
filenames
;
cv
::
glob
(
path
,
filenames
);
for
(
auto
f
:
filenames
)
{
img_files_list
.
push_back
(
f
);
...
...
@@ -213,11 +222,11 @@ int main(int argc, char **argv) {
std
::
vector
<
double
>
search_times
=
{
0
,
0
,
0
};
int
instance_num
=
0
;
// for read images
std
::
vector
<
cv
::
Mat
>
batch_imgs
;
std
::
vector
<
std
::
string
>
img_paths
;
std
::
vector
<
cv
::
Mat
>
batch_imgs
;
std
::
vector
<
std
::
string
>
img_paths
;
// for detection
std
::
vector
<
Detection
::
ObjectResult
>
det_result
;
std
::
vector
<
int
>
det_bbox_num
;
std
::
vector
<
Detection
::
ObjectResult
>
det_result
;
// for vector search
std
::
vector
<
float
>
features
;
std
::
vector
<
float
>
feature
;
...
...
@@ -243,9 +252,11 @@ int main(int argc, char **argv) {
batch_imgs
.
push_back
(
srcimg
);
img_paths
.
push_back
(
img_path
);
// step1: get all detection results
DetPredictImage
(
batch_imgs
,
img_paths
,
batch_size
,
&
detector
,
det_result
,
det_bbox_num
,
det_times
,
visual_det
,
false
);
// step1: get all detection results if enable detector
if
(
detector_ptr
!=
nullptr
)
{
DetPredictImage
(
batch_imgs
,
img_paths
,
batch_size
,
detector_ptr
,
det_result
,
det_times
,
visual_det
,
false
);
}
// select max_det_results bbox
if
(
det_result
.
size
()
>
max_det_results
)
{
...
...
@@ -257,7 +268,6 @@ int main(int argc, char **argv) {
Detection
::
ObjectResult
result_whole_img
=
{
{
0
,
0
,
srcimg
.
cols
-
1
,
srcimg
.
rows
-
1
},
0
,
1.0
};
det_result
.
push_back
(
result_whole_img
);
det_bbox_num
[
0
]
=
det_result
.
size
()
+
1
;
// step3: extract feature for all boxes in an inmage
SearchResult
search_result
;
...
...
@@ -266,20 +276,22 @@ int main(int argc, char **argv) {
int
h
=
det_result
[
j
].
rect
[
3
]
-
det_result
[
j
].
rect
[
1
];
cv
::
Rect
rect
(
det_result
[
j
].
rect
[
0
],
det_result
[
j
].
rect
[
1
],
w
,
h
);
cv
::
Mat
crop_img
=
srcimg
(
rect
);
feature_extracter
.
Run
(
crop_img
,
feature
,
cls_times
);
feature_extracter_ptr
->
Run
(
crop_img
,
feature
,
cls_times
);
features
.
insert
(
features
.
end
(),
feature
.
begin
(),
feature
.
end
());
}
// step4: get search result
auto
search_start
=
std
::
chrono
::
steady_clock
::
now
();
search_result
=
searcher
.
Search
(
features
.
data
(),
det_result
.
size
());
search_result
=
vector_searcher_ptr
->
Search
(
features
.
data
(),
det_result
.
size
());
auto
search_end
=
std
::
chrono
::
steady_clock
::
now
();
// nms for search result
for
(
int
i
=
0
;
i
<
det_result
.
size
();
++
i
)
{
det_result
[
i
].
confidence
=
search_result
.
D
[
search_result
.
return_k
*
i
];
}
NMSBoxes
(
det_result
,
searcher
.
GetThreshold
(),
rec_nms_thresold
,
indeices
);
NMSBoxes
(
det_result
,
vector_searcher_ptr
->
GetThreshold
(),
rec_nms_thresold
,
indeices
);
auto
nms_end
=
std
::
chrono
::
steady_clock
::
now
();
std
::
chrono
::
duration
<
float
>
search_diff
=
search_end
-
search_start
;
search_times
[
1
]
+=
double
(
search_diff
.
count
()
*
1000
);
...
...
@@ -289,12 +301,12 @@ int main(int argc, char **argv) {
// print result
if
(
not
benchmark
or
(
benchmark
and
idx
>=
warmup_iter
))
PrintResult
(
img_path
,
det_result
,
indeices
,
searcher
,
search_result
);
PrintResult
(
img_path
,
det_result
,
indeices
,
vector_searcher_ptr
,
search_result
);
// for postprocess
batch_imgs
.
clear
();
img_paths
.
clear
();
det_bbox_num
.
clear
();
det_result
.
clear
();
feature
.
clear
();
features
.
clear
();
...
...
@@ -320,10 +332,12 @@ int main(int argc, char **argv) {
config
.
config_file
[
"Global"
][
"cpu_num_threads"
].
as
<
int
>
();
int
batch_size
=
config
.
config_file
[
"Global"
][
"batch_size"
].
as
<
int
>
();
std
::
vector
<
int
>
shape
=
config
.
config_file
[
"Global"
][
"image_shape"
].
as
<
std
::
vector
<
int
>>
();
config
.
config_file
[
"Global"
][
"image_shape"
].
as
<
std
::
vector
<
int
>>
();
std
::
string
det_shape
=
std
::
to_string
(
shape
[
0
]);
for
(
int
i
=
1
;
i
<
shape
.
size
();
++
i
)
for
(
int
i
=
1
;
i
<
shape
.
size
();
++
i
)
{
det_shape
=
det_shape
+
", "
+
std
::
to_string
(
shape
[
i
]);
}
AutoLogger
autolog_det
(
"Det"
,
use_gpu
,
use_tensorrt
,
enable_mkldnn
,
cpu_num_threads
,
batch_size
,
det_shape
,
presion
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录