Skip to content

Latest commit

 

History

History
70 lines (45 loc) · 3.17 KB

deep_hashing.md

File metadata and controls

70 lines (45 loc) · 3.17 KB

哈希编码

最近邻搜索是指在数据库中查找与查询数据距离最近的点,在计算机视觉、推荐系统、机器学习等领域中广泛使用。在PP-ShiTu中,输入图像经过主体检测模型去掉背景后,再经过特征提取模型提取特征,之后经过检索得到输入图像的类别。在这个过程中,一般来说,提取的特征是float32数据类型。当离线特征库中存储的feature比较多时,就占用较大的存储空间,同时检索过程也会变慢。如果利用哈希编码将特征由float32转成0或者1表示的二值特征,那么不仅降低存储空间,同时也能大大加快检索速度。

哈希编码,主要用在PP-ShiTu特征提取模型部分,将模型输出特征直接二值化。即训练特征提取模型时,将模型的输出映射到二值空间。

注意,由于使用二值特征表示图像特征,精度可能会下降,请根据实际情况,酌情使用。

目录

1. 特征模型二值特征训练

注意,此模块目前只支持PP-ShiTuV1,PP-ShiTuV2暂未适配。

1.1 PP-ShiTu特征提取模型二值训练

PP-ShiTu特征提取模型二值特征模型,配置文件位于ppcls/configs/GeneralRecognition/GeneralRecognition_PPLCNet_x2_5_binary.yaml,相关训练方法如下。

# 单卡 GPU
python3.7 tools/train.py \
-c ./ppcls/configs/GeneralRecognition/GeneralRecognition_PPLCNet_x2_5_binary.yaml \
-o Arch.Backbone.pretrained=True \
-o Global.device=gpu

# 多卡 GPU
export CUDA_VISIBLE_DEVICES=0,1,2,3
python3.7 -m paddle.distributed.launch tools/train.py \
-c ppcls/configs/GeneralRecognition/GeneralRecognition_PPLCNet_x2_5_binary.yaml \
-o Arch.Backbone.pretrained=True \
-o Global.device=gpu

其中数据准备模型评估等,请参考此文档

1.2 其他特征模型二值训练

其他二值特征训练模型的配置文件位于ppcls/configs/DeepHash/文件夹下,此文件夹下的相关配置文件主要是复现相关deep hashing相关算法。包括:DCH, DSHSD, LCDSH三种算法。这三种算法相关介绍,详见Deep Hashing相关算法介绍

相关训练方法,请参考分类模型训练文档

2. 检索算法配置

在PP-ShiTu中使用二值特征,部署及离线推理配置请参考deploy/configs/inference_general_binary.yaml。配置文件中相关参数介绍请参考向量检索文档.

其中需值得注意的是,二值检索相关配置应设置如下:

IndexProcess:
  index_method: "FLAT" # supported: HNSW32, IVF, Flat
  delimiter: "\t"
  dist_type: "hamming"
  hamming_radius: 100

其中hamming_radius可以根据自己实际精度要求,适当调节。