Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleClas
提交
59a6cfc3
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看板
未验证
提交
59a6cfc3
编写于
9月 28, 2022
作者:
W
Walter
提交者:
GitHub
9月 28, 2022
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #2355 from zengshao0622/shitu_eval
add shitu pipeline evaluation
上级
db80bfb5
849406a3
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
239 addition
and
0 deletion
+239
-0
deploy/configs/evaluation_general.yaml
deploy/configs/evaluation_general.yaml
+73
-0
deploy/python/eval_shitu_pipeline.py
deploy/python/eval_shitu_pipeline.py
+154
-0
deploy/utils/get_image_list.py
deploy/utils/get_image_list.py
+12
-0
未找到文件。
deploy/configs/evaluation_general.yaml
0 → 100644
浏览文件 @
59a6cfc3
Global
:
infer_imgs
:
"
./drink_dataset_v2.0/test_images/100.jpeg"
det_inference_model_dir
:
"
./models/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_infer"
rec_inference_model_dir
:
"
./models/general_PPLCNetV2_base_pretrained_v1.0_infer"
rec_nms_thresold
:
0.05
batch_size
:
1
image_shape
:
[
3
,
640
,
640
]
threshold
:
0.2
max_det_results
:
5
label_list
:
-
foreground
use_gpu
:
True
enable_mkldnn
:
True
cpu_num_threads
:
10
enable_benchmark
:
True
use_fp16
:
False
ir_optim
:
True
use_tensorrt
:
False
gpu_mem
:
8000
enable_profile
:
False
DetPreProcess
:
transform_ops
:
-
DetResize
:
interp
:
2
keep_ratio
:
false
target_size
:
[
640
,
640
]
-
DetNormalizeImage
:
is_scale
:
true
mean
:
[
0.485
,
0.456
,
0.406
]
std
:
[
0.229
,
0.224
,
0.225
]
-
DetPermute
:
{}
DetPostProcess
:
{}
RecPreProcess
:
transform_ops
:
-
ResizeImage
:
size
:
[
224
,
224
]
return_numpy
:
False
interpolation
:
bilinear
backend
:
cv2
-
NormalizeImage
:
scale
:
1.0/255.0
mean
:
[
0.485
,
0.456
,
0.406
]
std
:
[
0.229
,
0.224
,
0.225
]
order
:
hwc
-
ToCHWImage
:
RecPostProcess
:
null
# evaluation config
Eval
:
name
:
Vechicles
image_root
:
./Vechicles
cls_label_path
:
./Vechicles/query_list.txt
output_dir
:
./eval_output
# indexing engine config
IndexProcess
:
index_method
:
"
HNSW32"
# supported: HNSW32, IVF, Flat
image_root
:
"
./Vechicles/"
index_dir
:
"
./Vechicles/index"
data_file
:
"
./Vechicles/gallery_list.txt"
index_operation
:
"
new"
# suported: "append", "remove", "new"
delimiter
:
"
"
dist_type
:
"
IP"
embedding_size
:
512
batch_size
:
32
return_k
:
5
score_thres
:
0.5
deploy/python/eval_shitu_pipeline.py
0 → 100644
浏览文件 @
59a6cfc3
import
os
import
cv2
import
numpy
as
np
import
faiss
import
pickle
from
paddleclas.deploy.utils
import
logger
,
config
from
paddleclas.deploy.utils.get_image_list
import
get_image_and_label_list
from
paddleclas.deploy.python.build_gallery
import
GalleryBuilder
from
paddleclas.deploy.python.predict_rec
import
RecPredictor
from
paddleclas.deploy.python.predict_det
import
DetPredictor
class
SystemPredictor
(
object
):
def
__init__
(
self
,
config
):
self
.
config
=
config
self
.
det_predictor
=
DetPredictor
(
config
)
self
.
rec_predictor
=
RecPredictor
(
config
)
# create searcher
self
.
return_k
=
self
.
config
[
'IndexProcess'
][
'return_k'
]
self
.
index_dir
=
self
.
config
[
'IndexProcess'
][
'index_dir'
]
if
config
[
'IndexProcess'
].
get
(
"binary_index"
,
False
):
self
.
Searcher
=
faiss
.
read_index_binary
(
os
.
path
.
join
(
self
.
index_dir
,
"vector.index"
))
else
:
self
.
Searcher
=
faiss
.
read_index
(
os
.
path
.
join
(
self
.
index_dir
,
"vector.index"
))
with
open
(
os
.
path
.
join
(
self
.
index_dir
,
"id_map.pkl"
),
"rb"
)
as
fd
:
self
.
id_map
=
pickle
.
load
(
fd
)
def
append_self
(
self
,
results
,
shape
):
results
.
append
({
"class_id"
:
0
,
"score"
:
1.0
,
"bbox"
:
np
.
array
([
0
,
0
,
shape
[
1
],
shape
[
0
]]),
# xmin, ymin, xmax, ymax
"label_name"
:
"foreground"
,
})
return
results
def
nms_to_rec_results
(
self
,
results
,
thresh
=
0.1
):
filtered_results
=
[]
x1
=
np
.
array
([
r
[
"bbox"
][
0
]
for
r
in
results
]).
astype
(
"float32"
)
y1
=
np
.
array
([
r
[
"bbox"
][
1
]
for
r
in
results
]).
astype
(
"float32"
)
x2
=
np
.
array
([
r
[
"bbox"
][
2
]
for
r
in
results
]).
astype
(
"float32"
)
y2
=
np
.
array
([
r
[
"bbox"
][
3
]
for
r
in
results
]).
astype
(
"float32"
)
scores
=
np
.
array
([
r
[
"rec_scores"
]
for
r
in
results
])
areas
=
(
x2
-
x1
+
1
)
*
(
y2
-
y1
+
1
)
order
=
scores
.
argsort
()[::
-
1
]
while
order
.
size
>
0
:
i
=
order
[
0
]
xx1
=
np
.
maximum
(
x1
[
i
],
x1
[
order
[
1
:]])
yy1
=
np
.
maximum
(
y1
[
i
],
y1
[
order
[
1
:]])
xx2
=
np
.
minimum
(
x2
[
i
],
x2
[
order
[
1
:]])
yy2
=
np
.
minimum
(
y2
[
i
],
y2
[
order
[
1
:]])
w
=
np
.
maximum
(
0.0
,
xx2
-
xx1
+
1
)
h
=
np
.
maximum
(
0.0
,
yy2
-
yy1
+
1
)
inter
=
w
*
h
ovr
=
inter
/
(
areas
[
i
]
+
areas
[
order
[
1
:]]
-
inter
)
inds
=
np
.
where
(
ovr
<=
thresh
)[
0
]
order
=
order
[
inds
+
1
]
filtered_results
.
append
(
results
[
i
])
return
filtered_results
def
sort_output_by_scores
(
self
,
outputs_list
,
scores_list
):
scores_list
=
np
.
array
(
scores_list
)
order
=
scores_list
.
argsort
()[::
-
1
]
outputs
=
[]
for
idx
in
order
:
outputs
.
append
(
outputs_list
[
idx
])
return
outputs
def
predict
(
self
,
img
):
all_det_results
=
self
.
det_predictor
.
predict
(
img
)
results
=
self
.
append_self
(
all_det_results
,
img
.
shape
)
outputs_list
=
[]
scores_list
=
[]
for
result
in
results
:
preds
=
{}
xmin
,
ymin
,
xmax
,
ymax
=
result
[
"bbox"
].
astype
(
"int"
)
crop_img
=
img
[
ymin
:
ymax
,
xmin
:
xmax
,
:].
copy
()
rec_results
=
self
.
rec_predictor
.
predict
(
crop_img
)
scores
,
docs
=
self
.
Searcher
.
search
(
rec_results
,
self
.
return_k
)
outputs_list
.
append
(
self
.
id_map
[
docs
[
0
][
0
]].
split
()[
1
])
scores_list
.
append
(
scores
[
0
][
0
])
outputs
=
self
.
sort_output_by_scores
(
outputs_list
,
scores_list
)
return
outputs
def
get_recall
(
gth
,
pred
):
assert
len
(
gth
)
==
len
(
pred
)
recall_list
=
[
0
]
*
len
(
pred
[
0
])
for
g
,
p
in
zip
(
gth
,
pred
):
for
i
in
range
(
len
(
pred
[
0
])):
if
g
in
p
[:
i
+
1
]:
recall_list
[
i
]
+=
1
recall_list
=
[
x
/
len
(
pred
)
for
x
in
recall_list
]
return
recall_list
def
main
(
config
):
# build gallery
assert
"IndexProcess"
in
config
.
keys
(),
"Index config not found ... "
operation_method
=
config
[
"IndexProcess"
].
get
(
"index_operation"
,
"new"
).
lower
()
assert
operation_method
==
"new"
,
"The operation should be 'new' during evaluating."
GalleryBuilder
(
config
)
syster_predictor
=
SystemPredictor
(
config
)
# get images
assert
"Eval"
in
config
.
keys
(),
"Eval config not found ... "
eval_imgs_list
,
eval_gth
=
get_image_and_label_list
(
config
[
"Eval"
][
"image_root"
],
config
[
"Eval"
][
"cls_label_path"
])
# create output file
assert
"output_dir"
in
config
[
'Eval'
].
keys
(
),
"Output dir config not found ... "
output_dir
=
config
[
'Eval'
][
"output_dir"
]
if
os
.
path
.
exists
(
output_dir
)
is
False
:
os
.
mkdir
(
output_dir
)
results_file
=
open
(
os
.
path
.
join
(
output_dir
,
'eval_resutls.txt'
),
'a+'
)
results_file
.
write
(
"Dataset name: %s
\n
"
%
(
config
[
'Eval'
][
'name'
]))
# evaluation
predict
=
[]
for
img_name
in
eval_imgs_list
:
img
=
cv2
.
imread
(
img_name
)
img
=
img
[:,
:,
::
-
1
]
output
=
syster_predictor
.
predict
(
img
)
predict
.
append
(
output
)
recall_list
=
get_recall
(
eval_gth
,
predict
)
for
i
,
x
in
enumerate
(
recall_list
):
print
(
"recal_{}: {:0.4f}"
.
format
(
i
+
1
,
x
))
results_file
.
write
(
"recal_{}: {:0.4f}
\n
"
.
format
(
i
+
1
,
x
))
results_file
.
write
(
'
\n
'
)
if
__name__
==
"__main__"
:
args
=
config
.
parse_args
()
config
=
config
.
get_config
(
args
.
config
,
overrides
=
args
.
override
,
show
=
True
)
main
(
config
)
deploy/utils/get_image_list.py
浏览文件 @
59a6cfc3
...
...
@@ -47,3 +47,15 @@ def get_image_list_from_label_file(image_path, label_file_path):
imgs_lists
.
append
(
os
.
path
.
join
(
image_path
,
image_name
))
gt_labels
.
append
(
int
(
label
))
return
imgs_lists
,
gt_labels
def
get_image_and_label_list
(
image_path
,
label_file_path
):
imgs_lists
=
[]
gt_labels
=
[]
with
open
(
label_file_path
,
"r"
)
as
fin
:
lines
=
fin
.
readlines
()
for
line
in
lines
:
image_name
,
label
=
line
.
strip
(
"
\n
"
).
split
()
imgs_lists
.
append
(
os
.
path
.
join
(
image_path
,
image_name
))
gt_labels
.
append
(
label
)
return
imgs_lists
,
gt_labels
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录