saving.h

xiaoxiao2021-02-27  137

大家知道FLANN库提供关于ANN问题的多种算法,包括KDTREE,KMEANS,HIERARCHICAL_CLUSTERING,等多种算法,我们要将我们训练好的模型存储,就需要一个文件头来存储我们模型的基本信息,saving.h这个头文件就定义了这样一个结构体:

struct IndexHeader;

成员变量:

char signature[16]; char version[16]; flann_datatype_t data_type; flann_algorithm_t index_type; flann_distance_t distance_type; size_t rows; size_t cols;

version存储的是本FLANN版本信息,我使用的是1.8.4 data_type 存储的是模型使用的数据类型。 index_type 指明的是模型使用的算法。 distance_type 指明该算法所用的距离类型(比如L1,L2等)。 rows 指明模型points的数量。 cols 指明points的大小。

成员方法:

IndexHeader(); serialize(Archive & ar);

IndexHeader()为构造函数,主要初始化version,和signature。 serialize是序列化本检索头,当Archive类型是LoadArchive时,将LoadArchive中stream对应的文件中的检索头,加载到本检索头中。当Archive类型是SaveArchive是,将本检索头存储到SaveArchive对应的文件中。LOAD或SAVE的顺序为,signature,version,data_type ,index_type,rows,cols。 不熟悉ARCHIVE类的,可参考Archive

方法

void save_header(FILE * stream, const Index & index);

该方法是根据index(我们也可以称作模型)来创建相应的检索头,并将检索头存储带stream对应的文件中。

方法

inline IndexHeader load_header(FILE * stream);

该方法是从文件流stream中,创建返回一个检索头。

namespace serialization { ENUM_SERIALIZER(flann_algorithm_t); ENUM_SERIALIZER(flann_centers_init_t); ENUM_SERIALIZER(flann_log_level_t); ENUM_SERIALIZER(flann_datatype_t); }

这四个define,是定义对flann_algorithm_t,flann_centers_init_t,flann_log_level_t,flann_datatype_t这四种类型的序列化。

转载请注明原文地址: https://www.6miu.com/read-14037.html

最新回复(0)