Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleClas
提交
c03a66bf
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看板
提交
c03a66bf
编写于
8月 26, 2022
作者:
H
HydrogenSulfate
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Rename variable names that may be confused in retrieval.py
上级
2f5c0c71
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
23 addition
and
17 deletion
+23
-17
ppcls/engine/evaluation/retrieval.py
ppcls/engine/evaluation/retrieval.py
+23
-17
未找到文件。
ppcls/engine/evaluation/retrieval.py
浏览文件 @
c03a66bf
...
...
@@ -25,32 +25,35 @@ from ppcls.utils import logger
def
retrieval_eval
(
engine
,
epoch_id
=
0
):
engine
.
model
.
eval
()
# step1. build gallery
# step1. build
query &
gallery
if
engine
.
gallery_query_dataloader
is
not
None
:
gallery_feas
,
gallery_img_id
,
gallery_unique_id
=
cal_feature
(
engine
,
name
=
'gallery_query'
)
query_feas
,
query_img_id
,
query_
query
_id
=
gallery_feas
,
gallery_img_id
,
gallery_unique_id
query_feas
,
query_img_id
,
query_
unique
_id
=
gallery_feas
,
gallery_img_id
,
gallery_unique_id
else
:
gallery_feas
,
gallery_img_id
,
gallery_unique_id
=
cal_feature
(
engine
,
name
=
'gallery'
)
query_feas
,
query_img_id
,
query_
query
_id
=
cal_feature
(
query_feas
,
query_img_id
,
query_
unique
_id
=
cal_feature
(
engine
,
name
=
'query'
)
# step2.
do evaluation
# step2.
split data into blocks so as to save memory
sim_block_size
=
engine
.
config
[
"Global"
].
get
(
"sim_block_size"
,
64
)
sections
=
[
sim_block_size
]
*
(
len
(
query_feas
)
//
sim_block_size
)
if
len
(
query_feas
)
%
sim_block_size
:
sections
.
append
(
len
(
query_feas
)
%
sim_block_size
)
fea_blocks
=
paddle
.
split
(
query_feas
,
num_or_sections
=
sections
)
if
query_
query
_id
is
not
None
:
query_id_blocks
=
paddle
.
split
(
query_
query
_id
,
num_or_sections
=
sections
)
image
_id_blocks
=
paddle
.
split
(
query_img_id
,
num_or_sections
=
sections
)
if
query_
unique
_id
is
not
None
:
query_
unique_
id_blocks
=
paddle
.
split
(
query_
unique
_id
,
num_or_sections
=
sections
)
query_img
_id_blocks
=
paddle
.
split
(
query_img_id
,
num_or_sections
=
sections
)
metric_key
=
None
# step3. do evaluation
if
engine
.
eval_loss_func
is
None
:
metric_dict
=
{
metric_key
:
0.
}
else
:
# do evaluation with re-ranking(k-reciprocal)
reranking_flag
=
engine
.
config
[
'Global'
].
get
(
're_ranking'
,
False
)
logger
.
info
(
f
"re_ranking=
{
reranking_flag
}
"
)
metric_dict
=
dict
()
...
...
@@ -70,9 +73,9 @@ def retrieval_eval(engine, epoch_id=0):
query_feas
,
gallery_feas
,
k1
=
20
,
k2
=
6
,
lambda_value
=
0.3
)
# compute keep mask
query_id_mask
=
(
query_query
_id
!=
gallery_unique_id
.
t
())
unique_id_mask
=
(
query_unique
_id
!=
gallery_unique_id
.
t
())
image_id_mask
=
(
query_img_id
!=
gallery_img_id
.
t
())
keep_mask
=
paddle
.
logical_or
(
query_id_mask
,
imag
e_id_mask
)
keep_mask
=
paddle
.
logical_or
(
image_id_mask
,
uniqu
e_id_mask
)
# set inf(1e9) distance to those exist in gallery
distmat
=
distmat
*
keep_mask
.
astype
(
"float32"
)
...
...
@@ -85,24 +88,27 @@ def retrieval_eval(engine, epoch_id=0):
for
key
in
metric_tmp
:
metric_dict
[
key
]
=
metric_tmp
[
key
]
else
:
# do evaluation without re-ranking
for
block_idx
,
block_fea
in
enumerate
(
fea_blocks
):
similarity_matrix
=
paddle
.
matmul
(
block_fea
,
gallery_feas
,
transpose_y
=
True
)
# [n,m]
if
query_query_id
is
not
None
:
query_id_block
=
query_id_blocks
[
block_idx
]
query_id_mask
=
(
query_id_block
!=
gallery_unique_id
.
t
())
if
query_unique_id
is
not
None
:
query_unique_id_block
=
query_unique_id_blocks
[
block_idx
]
unique_id_mask
=
(
query_unique_id_block
!=
gallery_unique_id
.
t
())
image_id_block
=
image
_id_blocks
[
block_idx
]
image_id_mask
=
(
image
_id_block
!=
gallery_img_id
.
t
())
query_img_id_block
=
query_img
_id_blocks
[
block_idx
]
image_id_mask
=
(
query_img
_id_block
!=
gallery_img_id
.
t
())
keep_mask
=
paddle
.
logical_or
(
query_id_mask
,
image_id_mask
)
keep_mask
=
paddle
.
logical_or
(
image_id_mask
,
unique_id_mask
)
similarity_matrix
=
similarity_matrix
*
keep_mask
.
astype
(
"float32"
)
else
:
keep_mask
=
None
metric_tmp
=
engine
.
eval_metric_func
(
similarity_matrix
,
image
_id_blocks
[
block_idx
],
similarity_matrix
,
query_img
_id_blocks
[
block_idx
],
gallery_img_id
,
keep_mask
)
for
key
in
metric_tmp
:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录