Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleClas
提交
4cd9dc0e
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看板
提交
4cd9dc0e
编写于
3月 06, 2023
作者:
Y
yunyaoXYY
提交者:
Walter
3月 07, 2023
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix faiss bug
上级
d0c01a97
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
60 addition
and
60 deletion
+60
-60
deploy/cpp_shitu/include/vector_search.h
deploy/cpp_shitu/include/vector_search.h
+30
-30
deploy/cpp_shitu/src/vector_search.cpp
deploy/cpp_shitu/src/vector_search.cpp
+30
-30
未找到文件。
deploy/cpp_shitu/include/vector_search.h
浏览文件 @
4cd9dc0e
...
...
@@ -26,45 +26,45 @@
#include <map>
struct
SearchResult
{
std
::
vector
<
faiss
::
Index
::
idx_t
>
I
;
std
::
vector
<
float
>
D
;
int
return_k
;
std
::
vector
<
faiss
::
idx_t
>
I
;
std
::
vector
<
float
>
D
;
int
return_k
;
};
class
VectorSearch
{
public:
explicit
VectorSearch
(
const
YAML
::
Node
&
config_file
)
{
// IndexProcess
this
->
index_dir
=
config_file
[
"IndexProcess"
][
"index_dir"
].
as
<
std
::
string
>
();
this
->
return_k
=
config_file
[
"IndexProcess"
][
"return_k"
].
as
<
int
>
();
this
->
score_thres
=
config_file
[
"IndexProcess"
][
"score_thres"
].
as
<
float
>
();
this
->
max_query_number
=
config_file
[
"Global"
][
"max_det_results"
].
as
<
int
>
()
+
1
;
LoadIdMap
();
LoadIndexFile
();
this
->
I
.
resize
(
this
->
return_k
*
this
->
max_query_number
);
this
->
D
.
resize
(
this
->
return_k
*
this
->
max_query_number
);
};
explicit
VectorSearch
(
const
YAML
::
Node
&
config_file
)
{
// IndexProcess
this
->
index_dir
=
config_file
[
"IndexProcess"
][
"index_dir"
].
as
<
std
::
string
>
();
this
->
return_k
=
config_file
[
"IndexProcess"
][
"return_k"
].
as
<
int
>
();
this
->
score_thres
=
config_file
[
"IndexProcess"
][
"score_thres"
].
as
<
float
>
();
this
->
max_query_number
=
config_file
[
"Global"
][
"max_det_results"
].
as
<
int
>
()
+
1
;
LoadIdMap
();
LoadIndexFile
();
this
->
I
.
resize
(
this
->
return_k
*
this
->
max_query_number
);
this
->
D
.
resize
(
this
->
return_k
*
this
->
max_query_number
);
};
void
LoadIdMap
();
void
LoadIdMap
();
void
LoadIndexFile
();
void
LoadIndexFile
();
const
SearchResult
&
Search
(
float
*
feature
,
int
query_number
);
const
SearchResult
&
Search
(
float
*
feature
,
int
query_number
);
const
std
::
string
&
GetLabel
(
faiss
::
Index
::
idx_t
ind
);
const
std
::
string
&
GetLabel
(
faiss
::
idx_t
ind
);
const
float
&
GetThreshold
()
{
return
this
->
score_thres
;
}
const
float
&
GetThreshold
()
{
return
this
->
score_thres
;
}
private:
std
::
string
index_dir
;
int
return_k
=
5
;
float
score_thres
=
0.5
;
std
::
map
<
long
int
,
std
::
string
>
id_map
;
faiss
::
Index
*
index
;
int
max_query_number
=
6
;
std
::
vector
<
float
>
D
;
std
::
vector
<
faiss
::
Index
::
idx_t
>
I
;
SearchResult
sr
;
std
::
string
index_dir
;
int
return_k
=
5
;
float
score_thres
=
0.5
;
std
::
map
<
long
int
,
std
::
string
>
id_map
;
faiss
::
Index
*
index
;
int
max_query_number
=
6
;
std
::
vector
<
float
>
D
;
std
::
vector
<
faiss
::
idx_t
>
I
;
SearchResult
sr
;
};
deploy/cpp_shitu/src/vector_search.cpp
浏览文件 @
4cd9dc0e
...
...
@@ -20,43 +20,43 @@
#include <regex>
void
VectorSearch
::
LoadIndexFile
()
{
std
::
string
file_path
=
this
->
index_dir
+
OS_PATH_SEP
+
"vector.index"
;
const
char
*
fname
=
file_path
.
c_str
();
this
->
index
=
faiss
::
read_index
(
fname
,
0
);
std
::
string
file_path
=
this
->
index_dir
+
OS_PATH_SEP
+
"vector.index"
;
const
char
*
fname
=
file_path
.
c_str
();
this
->
index
=
faiss
::
read_index
(
fname
,
0
);
}
void
VectorSearch
::
LoadIdMap
()
{
std
::
string
file_path
=
this
->
index_dir
+
OS_PATH_SEP
+
"id_map.txt"
;
std
::
ifstream
in
(
file_path
);
std
::
string
line
;
std
::
vector
<
std
::
string
>
m_vec
;
if
(
in
)
{
while
(
getline
(
in
,
line
))
{
std
::
regex
ws_re
(
"
\\
s+"
);
std
::
vector
<
std
::
string
>
v
(
std
::
sregex_token_iterator
(
line
.
begin
(),
line
.
end
(),
ws_re
,
-
1
),
std
::
sregex_token_iterator
());
if
(
v
.
size
()
!=
2
)
{
std
::
cout
<<
"The number of element for each line in : "
<<
file_path
<<
"must be 2, exit the program..."
<<
std
::
endl
;
exit
(
1
);
}
else
this
->
id_map
.
insert
(
std
::
pair
<
long
int
,
std
::
string
>
(
std
::
stol
(
v
[
0
],
nullptr
,
10
),
v
[
1
]));
}
std
::
string
file_path
=
this
->
index_dir
+
OS_PATH_SEP
+
"id_map.txt"
;
std
::
ifstream
in
(
file_path
);
std
::
string
line
;
std
::
vector
<
std
::
string
>
m_vec
;
if
(
in
)
{
while
(
getline
(
in
,
line
))
{
std
::
regex
ws_re
(
"
\\
s+"
);
std
::
vector
<
std
::
string
>
v
(
std
::
sregex_token_iterator
(
line
.
begin
(),
line
.
end
(),
ws_re
,
-
1
),
std
::
sregex_token_iterator
());
if
(
v
.
size
()
!=
2
)
{
std
::
cout
<<
"The number of element for each line in : "
<<
file_path
<<
"must be 2, exit the program..."
<<
std
::
endl
;
exit
(
1
);
}
else
this
->
id_map
.
insert
(
std
::
pair
<
long
int
,
std
::
string
>
(
std
::
stol
(
v
[
0
],
nullptr
,
10
),
v
[
1
]));
}
}
}
const
SearchResult
&
VectorSearch
::
Search
(
float
*
feature
,
int
query_number
)
{
this
->
D
.
resize
(
this
->
return_k
*
query_number
);
this
->
I
.
resize
(
this
->
return_k
*
query_number
);
this
->
index
->
search
(
query_number
,
feature
,
return_k
,
D
.
data
(),
I
.
data
());
this
->
sr
.
return_k
=
this
->
return_k
;
this
->
sr
.
D
=
this
->
D
;
this
->
sr
.
I
=
this
->
I
;
return
this
->
sr
;
this
->
D
.
resize
(
this
->
return_k
*
query_number
);
this
->
I
.
resize
(
this
->
return_k
*
query_number
);
this
->
index
->
search
(
query_number
,
feature
,
return_k
,
D
.
data
(),
I
.
data
());
this
->
sr
.
return_k
=
this
->
return_k
;
this
->
sr
.
D
=
this
->
D
;
this
->
sr
.
I
=
this
->
I
;
return
this
->
sr
;
}
const
std
::
string
&
VectorSearch
::
GetLabel
(
faiss
::
Index
::
idx_t
ind
)
{
return
this
->
id_map
.
at
(
ind
);
const
std
::
string
&
VectorSearch
::
GetLabel
(
faiss
::
idx_t
ind
)
{
return
this
->
id_map
.
at
(
ind
);
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录