diff --git a/README_ch.md b/README_ch.md
index a4c496eeb7478d724a1c1a87cea3209ab1f0c014..6ba1b44ebbe4c3c8c9a7d36d992d60b316ce06c9 100644
--- a/README_ch.md
+++ b/README_ch.md
@@ -60,19 +60,18 @@ PP-ShiTu图像识别快速体验:[点击这里](./docs/zh_CN/quick_start/quick
- [环境准备](docs/zh_CN/installation/install_paddleclas.md)
- [PP-ShiTuV2图像识别系统介绍](./docs/zh_CN/PPShiTu/PPShiTuV2_introduction.md)
- [图像识别快速体验](docs/zh_CN/quick_start/quick_start_recognition.md)
- - 模块介绍
+ - [20+应用场景库](docs/zh_CN/introduction/ppshitu_application_scenarios.md)
+ - 子模块算法介绍及模型训练
- [主体检测](./docs/zh_CN/image_recognition_pipeline/mainbody_detection.md)
- [特征提取模型](./docs/zh_CN/image_recognition_pipeline/feature_extraction.md)
- [向量检索](./docs/zh_CN/image_recognition_pipeline/vector_search.md)
- - [哈希编码](docs/zh_CN/image_recognition_pipeline/)
- - [模型训练](docs/zh_CN/models_training/recognition.md)
- - 推理部署
+ - [哈希编码](docs/zh_CN/image_recognition_pipeline/deep_hashing.md)
+ - PipeLine 推理部署
- [基于python预测引擎推理](docs/zh_CN/inference_deployment/python_deploy.md#2)
- [基于C++预测引擎推理](deploy/cpp_shitu/readme.md)
- [服务化部署](docs/zh_CN/inference_deployment/recognition_serving_deploy.md)
- [端侧部署](docs/zh_CN/inference_deployment/lite_shitu.md)
- [库管理工具](docs/zh_CN/inference_deployment/shitu_gallery_manager.md)
- - [20+应用场景库](docs/zh_CN/introduction/ppshitu_application_scenarios.md)
- [PULC超轻量图像分类实用方案](docs/zh_CN/PULC/PULC_train.md)
- [超轻量图像分类快速体验](docs/zh_CN/PULC/PULC_quickstart.md)
- [超轻量图像分类模型库](docs/zh_CN/PULC/PULC_model_list.md)
diff --git a/docs/images/deep_hash/DCH.png b/docs/images/deep_hash/DCH.png
new file mode 100644
index 0000000000000000000000000000000000000000..63cf004dac575c4b1badeca8883d9371c6a45eb9
Binary files /dev/null and b/docs/images/deep_hash/DCH.png differ
diff --git a/docs/images/deep_hash/DSHSD.png b/docs/images/deep_hash/DSHSD.png
new file mode 100644
index 0000000000000000000000000000000000000000..b4d0406990f7280d191c4d2f23be12a968d7b350
Binary files /dev/null and b/docs/images/deep_hash/DSHSD.png differ
diff --git a/docs/images/deep_hash/LCDSH.png b/docs/images/deep_hash/LCDSH.png
new file mode 100644
index 0000000000000000000000000000000000000000..4717283981f518a7764e28fe7c66102ee4c47ca0
Binary files /dev/null and b/docs/images/deep_hash/LCDSH.png differ
diff --git a/docs/zh_CN/algorithm_introduction/deep_hashing_introduction.md b/docs/zh_CN/algorithm_introduction/deep_hashing_introduction.md
new file mode 100644
index 0000000000000000000000000000000000000000..71b2e38155954634930467bc04bdb6bf031ed189
--- /dev/null
+++ b/docs/zh_CN/algorithm_introduction/deep_hashing_introduction.md
@@ -0,0 +1,63 @@
+# Deep Hashing算法介绍
+----
+## 目录
+
+* [1. 简介](#1)
+* [2. 算法介绍](#2)
+ * [2.1 DCH](#2.1)
+ * [2.2 DSHSD](#2.2)
+ * [2.3 LCDSH](#2.3)
+* [3. 快速体验](#3)
+* [4. 总结及建议](#4)
+
+
+## 1. 简介
+
+最近邻搜索是指在数据库中查找与查询数据距离最近的点,在计算机视觉、推荐系统、机器学习等领域中广泛使用。在PP-ShiTu中,输入图像经过主体检测模型去掉背景后,再经过特征提取模型提取特征,之后经过检索得到检索图像等类别。在这个过程中,一般来说,提取的特征是float32数据类型。当离线特征库中存储的feature比较多时,就占用较大的存储空间,同时检索过程也会变慢。如果利用哈希编码将特征由float32转成0或者1表示的二值特征,那么不仅降低存储空间,同时也能大大加快检索速度。
+
+
+## 2. 算法介绍
+
+目前PaddleClas中,主要复现了三种DeepHash的方法,分别是:[DCH](http://ise.thss.tsinghua.edu.cn/~mlong/doc/deep-cauchy-hashing-cvpr18.pdf),[DSHSD](https://ieeexplore.ieee.org/document/8648432/), [LCDSH](https://www.ijcai.org/Proceedings/2017/0499.pdf)。以下做简要介绍。
+
+
+## 2.1 DCH
+
+此方法基于柯西分布,提出一种成对的交叉熵损失函数,能够较好的得到紧密的hamming特征。在多个数据集上取得较好的结果。详见[论文](http://ise.thss.tsinghua.edu.cn/~mlong/doc/deep-cauchy-hashing-cvpr18.pdf)。方法示意图如下:
+
+
+
+
+
+
+## 2.2 DSHSD
+
+DSHSD主要创新点在于,在保证分布一致性的情况下消除差异。首先,作者利用平滑投影函数来放松离散约束,而不是使用任何量化正则化器,其中平滑量是可调整的。其次,在平滑投影和特征分布之间建立数学联系,以保持分布的一致性。进而提出了一种多语义信息融合方法,使hash码学习后能够保留更多的语义信息,从而加快训练收敛速度。其方法在在CIFAR-10、NUS-WIDE和ImageNet数据集上的大量实验表现良好。具体可查看[论文](https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=8648432)。
+
+
+
+
+
+
+## 2.3 LCDSH
+
+LCDSH是一种局部约束深度监督哈希算法。该方案通过学习图像对之间的相似特征使得,哈希码保持了DCNN特征的分布,从而有利于准确的图像检索。具体可查看[论文](https://www.ijcai.org/Proceedings/2017/0499.pdf)。
+
+
+
+
+
+
+## 3. 快速体验
+
+这个三个哈希算法的配置文件具体位置:
+`DCH`: ppcls/configs/DeepHash/DCH.yaml
+`DSHSD`: ppcls/configs/DeepHash/DSHSD.yaml
+`LCDSH`: ppcls/configs/DeepHash/LCDSH.yaml
+
+具体训练方法,请参考[分类模型训练文档](../models_training/classification.md)
+
+
+## 4. 总结及建议
+
+不同的DeepHash方法,具有不同特性。可以分别对不同的哈希方法进行尝试,选取最合适自己数据集的方法。
diff --git a/docs/zh_CN/image_recognition_pipeline/deep_hashing.md b/docs/zh_CN/image_recognition_pipeline/deep_hashing.md
new file mode 100644
index 0000000000000000000000000000000000000000..03413dac84e4b9974d03ad230a04e13171d8c01f
--- /dev/null
+++ b/docs/zh_CN/image_recognition_pipeline/deep_hashing.md
@@ -0,0 +1,70 @@
+# 哈希编码
+
+最近邻搜索是指在数据库中查找与查询数据距离最近的点,在计算机视觉、推荐系统、机器学习等领域中广泛使用。在`PP-ShiTu`中,输入图像经过主体检测模型去掉背景后,再经过特征提取模型提取特征,之后经过检索得到输入图像的类别。在这个过程中,一般来说,提取的特征是`float32`数据类型。当离线特征库中存储的`feature`比较多时,就占用较大的存储空间,同时检索过程也会变慢。如果利用`哈希编码`将特征由`float32`转成`0`或者`1`表示的二值特征,那么不仅降低存储空间,同时也能大大加快检索速度。
+
+哈希编码,主要用在`PP-ShiTu`的**特征提取模型**部分,将模型输出特征直接二值化。即训练特征提取模型时,将模型的输出映射到二值空间。
+
+注意,由于使用二值特征表示图像特征,精度可能会下降,请根据实际情况,酌情使用。
+
+
+## 目录
+
+- [1. 特征模型二值特征训练](#1)
+ - [1.1 PP-ShiTu特征提取模型二值训练](#1.1)
+ - [1.2 其他特征模型二值训练](#1.2)
+- [2. 检索算法配置](#2)
+
+
+
+## 1. 特征模型二值特征训练
+
+
+
+注意,此模块目前只支持`PP-ShiTuV1`,`PP-ShiTuV2`暂未适配。
+
+### 1.1 PP-ShiTu特征提取模型二值训练
+
+PP-ShiTu特征提取模型二值特征模型,配置文件位于`ppcls/configs/GeneralRecognition/GeneralRecognition_PPLCNet_x2_5_binary.yaml`,相关训练方法如下。
+
+```shell
+# 单卡 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
+```
+
+其中`数据准备`、`模型评估`等,请参考[此文档](https://github.com/PaddlePaddle/PaddleClas/blob/release/2.4/docs/zh_CN/models_training/recognition.md)。
+
+
+
+### 1.2 其他特征模型二值训练
+
+其他二值特征训练模型的配置文件位于`ppcls/configs/DeepHash/`文件夹下,此文件夹下的相关配置文件主要是复现相关`deep hashing`相关算法。包括:`DCH, DSHSD, LCDSH`三种算法。这三种算法相关介绍,详见[Deep Hashing相关算法介绍](../algorithm_introduction/deep_hashing_introduction.md)。
+
+相关训练方法,请参考[分类模型训练文档](../models_training/classification.md)。
+
+
+
+## 2. 检索算法配置
+
+在PP-ShiTu中使用二值特征,部署及离线推理配置请参考`deploy/configs/inference_general_binary.yaml`。配置文件中相关参数介绍请参考[向量检索文档](./vector_search.md).
+
+其中需值得注意的是,二值检索相关配置应设置如下:
+
+```yaml
+IndexProcess:
+ index_method: "FLAT" # supported: HNSW32, IVF, Flat
+ delimiter: "\t"
+ dist_type: "hamming"
+ hamming_radius: 100
+```
+
+其中`hamming_radius`可以根据自己实际精度要求,适当调节。
diff --git a/docs/zh_CN/image_recognition_pipeline/mainbody_detection.md b/docs/zh_CN/image_recognition_pipeline/mainbody_detection.md
index c2c6d884fe560ecb1231a7caf8ff43a875de890f..5434a464c56cb20bf203a98261ac834101263efd 100644
--- a/docs/zh_CN/image_recognition_pipeline/mainbody_detection.md
+++ b/docs/zh_CN/image_recognition_pipeline/mainbody_detection.md
@@ -70,9 +70,9 @@ PicoDet 由 [PaddleDetection](https://github.com/PaddlePaddle/PaddleDetection)
- [ATSS](https://arxiv.org/abs/1912.02424)及[SimOTA](https://arxiv.org/abs/2107.08430) 标签分配策略
-更多关于 PicoDet 的优化细节与 benchmark 可以参考 [PicoDet 系列模型介绍](https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.5/configs/picodet)。
+更多关于 PicoDet 的优化细节与 benchmark 可以参考 [PicoDet 系列模型介绍](https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.3/configs/picodet)。
-在轻量级主体检测任务中,为了更好地兼顾检测速度与效果,我们使用 PPLCNet_x2_5 作为主体检测模型的骨干网络,同时将训练与预测的图像尺度修改为了 640x640,其余配置与 [picodet_lcnet_1_5x_416_coco.yml](https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.5/configs/picodet/picodet_l_416_coco_lcnet.yml) 完全一致。将数据集更换为自定义的主体检测数据集,进行训练,最终得到检测模型。
+在轻量级主体检测任务中,为了更好地兼顾检测速度与效果,我们使用 PPLCNet_x2_5 作为主体检测模型的骨干网络,同时将训练与预测的图像尺度修改为了 640x640,其余配置与 [picodet_l_416_coco.yml](https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.3/configs/picodet/picodet_l_416_coco.yml) 完全一致。将数据集更换为自定义的主体检测数据集,进行训练,最终得到检测模型。
@@ -89,19 +89,20 @@ PicoDet 由 [PaddleDetection](https://github.com/PaddlePaddle/PaddleDetection)
```shell
cd
git clone https://github.com/PaddlePaddle/PaddleDetection.git
-
cd PaddleDetection
+# 切换到2.3分支
+git checkout release/2.3
# 安装其他依赖
pip install -r requirements.txt
```
-更多安装教程,请参考: [安装文档](https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.5/docs/tutorials/INSTALL_cn.md)
+更多安装教程,请参考: [安装文档](https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.3/docs/tutorials/INSTALL_cn.md)
### 3.2 数据准备
-对于自定义数据集,首先需要将自己的数据集修改为 COCO 格式,可以参考[自定义检测数据集教程](https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.5/docs/tutorials/data)制作 COCO 格式的数据集。
+对于自定义数据集,首先需要将自己的数据集修改为 COCO 格式,可以参考[自定义检测数据集教程](https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.3/docs/tutorials/PrepareDataSet.md)制作 COCO 格式的数据集。
主体检测任务中,所有的检测框均属于前景,在这里需要将标注文件中,检测框的 `category_id` 修改为 1,同时将整个标注文件中的 `categories` 映射表修改为下面的格式,即整个类别映射表中只包含`前景`类别。
@@ -113,7 +114,7 @@ pip install -r requirements.txt
### 3.3 配置文件改动和说明
-我们使用 [mainbody_detection/picodet_lcnet_x2_5_640_mainbody.yml](https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.5/configs/picodet/legacy_model/application/mainbody_detection/picodet_lcnet_x2_5_640_mainbody.yml) 配置进行训练,配置文件摘要如下:
+我们使用 [mainbody_detection/picodet_lcnet_x2_5_640_mainbody.yml](https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.3/configs/picodet/application/mainbody_detection/picodet_lcnet_x2_5_640_mainbody.yml) 配置进行训练,配置文件摘要如下:
![](../../images/det/PaddleDetection_config.png)
@@ -144,14 +145,14 @@ PaddleDetection 提供了单卡/多卡训练模式,满足用户多种训练需
```bash
# windows 和 Mac 下不需要执行该命令
export CUDA_VISIBLE_DEVICES=0
-python tools/train.py -c configs/picodet/legacy_model/application/mainbody_detection/picodet_lcnet_x2_5_640_mainbody.yml
+python tools/train.py -c configs/picodet/application/mainbody_detection/picodet_lcnet_x2_5_640_mainbody.yml
```
* GPU 多卡训练
```bash
export CUDA_VISIBLE_DEVICES=0,1,2,3
-python -m paddle.distributed.launch --gpus 0,1,2,3 tools/train.py -c configs/picodet/legacy_model/application/mainbody_detection/picodet_lcnet_x2_5_640_mainbody.yml --eval
+python -m paddle.distributed.launch --gpus 0,1,2,3 tools/train.py -c configs/picodet/legacy_model/mainbody_detection/picodet_lcnet_x2_5_640_mainbody.yml --eval
```
--eval:表示边训练边验证。
@@ -163,7 +164,7 @@ python -m paddle.distributed.launch --gpus 0,1,2,3 tools/train.py -c configs/pic
```bash
export CUDA_VISIBLE_DEVICES=0
# 指定 pretrain_weights 参数,加载通用的主体检测预训练模型
-python tools/train.py -c configs/picodet/legacy_model/application/mainbody_detection/picodet_lcnet_x2_5_640_mainbody.yml -o pretrain_weights=https://paddledet.bj.bcebos.com/models/picodet_lcnet_x2_5_640_mainbody.pdparams
+python tools/train.py -c configs/picodet/application/mainbody_detection/picodet_lcnet_x2_5_640_mainbody.yml -o pretrain_weights=https://paddledet.bj.bcebos.com/models/picodet_lcnet_x2_5_640_mainbody.pdparams
```
* 模型恢复训练
@@ -172,7 +173,7 @@ python tools/train.py -c configs/picodet/legacy_model/application/mainbody_detec
```bash
export CUDA_VISIBLE_DEVICES=0,1,2,3
-python -m paddle.distributed.launch --gpus 0,1,2,3 tools/train.py -c configs/picodet/legacy_model/application/mainbody_detection/picodet_lcnet_x2_5_640_mainbody.yml --eval -r output/picodet_lcnet_x2_5_640_mainbody/20
+python -m paddle.distributed.launch --gpus 0,1,2,3 tools/train.py -c configs/picodet/application/mainbody_detection/picodet_lcnet_x2_5_640_mainbody.yml --eval -r output/picodet_lcnet_x2_5_640_mainbody/20
```
注意:
@@ -189,7 +190,7 @@ python -m paddle.distributed.launch --gpus 0,1,2,3 tools/train.py -c configs/pic
```bash
export CUDA_VISIBLE_DEVICES=0
-python tools/infer.py -c configs/picodet/legacy_model/application/mainbody_detection/picodet_lcnet_x2_5_640_mainbody.yml --infer_img=your_image_path.jpg --output_dir=infer_output/ --draw_threshold=0.5 -o weights=output/picodet_lcnet_x2_5_640_mainbody/model_final
+python tools/infer.py -c configs/picodet/application/mainbody_detection/picodet_lcnet_x2_5_640_mainbody.yml --infer_img=your_image_path.jpg --output_dir=infer_output/ --draw_threshold=0.5 -o weights=output/picodet_lcnet_x2_5_640_mainbody/model_final
```
`--draw_threshold` 是个可选参数. 根据 [NMS](https://ieeexplore.ieee.org/document/1699659) 的计算,不同阈值会产生不同的结果 `keep_top_k` 表示设置输出目标的最大数量,默认值为 100,用户可以根据自己的实际情况进行设定。
@@ -204,7 +205,7 @@ python tools/infer.py -c configs/picodet/legacy_model/application/mainbody_detec
执行导出模型脚本:
```bash
-python tools/export_model.py -c configs/picodet/legacy_model/application/mainbody_detection/picodet_lcnet_x2_5_640_mainbody.yml --output_dir=./inference -o weights=output/picodet_lcnet_x2_5_640_mainbody/model_final.pdparams
+python tools/export_model.py -c configs/picodet/application/mainbody_detection/picodet_lcnet_x2_5_640_mainbody.yml --output_dir=./inference -o weights=output/picodet_lcnet_x2_5_640_mainbody/model_final.pdparams
```
预测模型会导出到 `inference/picodet_lcnet_x2_5_640_mainbody` 目录下,分别为 `infer_cfg.yml` (预测不需要), `model.pdiparams`, `model.pdiparams.info`, `model.pdmodel` 。
@@ -224,7 +225,7 @@ python tools/export_model.py -c configs/picodet/legacy_model/application/mainbod
### 4.3 其他推理方式
-其他推理方法,如C++推理部署、PaddleServing部署等请参考[检测模型推理部署](https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.5/deploy/README.md)。
+其他推理方法,如C++推理部署、PaddleServing部署等请参考[检测模型推理部署](https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.3/deploy/README.md)。
### FAQ
diff --git a/docs/zh_CN/inference_deployment/lite_shitu.md b/docs/zh_CN/inference_deployment/lite_shitu.md
index c9c1ca4d3c11316cb5684944f9f3c6dcf4474ca0..24effa306da769b65f988221b67422b73d0d3fca 100644
--- a/docs/zh_CN/inference_deployment/lite_shitu.md
+++ b/docs/zh_CN/inference_deployment/lite_shitu.md
@@ -198,8 +198,10 @@ cd $code_path
git clone https://github.com/PaddlePaddle/PaddleDetection.git
# 进入PaddleDetection根目录
cd PaddleDetection
+# 切换到2.3分支
+git checkout release/2.3
# 将预训练模型导出为inference模型
-python tools/export_model.py -c configs/picodet/legacy_model/application/mainbody_detection/picodet_lcnet_x2_5_640_mainbody.yml -o weights=https://paddledet.bj.bcebos.com/models/picodet_lcnet_x2_5_640_mainbody.pdparams export_post_process=False --output_dir=inference
+python tools/export_model.py -c configs/picodet/application/mainbody_detection/picodet_lcnet_x2_5_640_mainbody.yml -o weights=https://paddledet.bj.bcebos.com/models/picodet_lcnet_x2_5_640_mainbody.pdparams export_post_process=False --output_dir=inference
# 将inference模型转化为Paddle-Lite优化模型
paddle_lite_opt --model_file=inference/picodet_lcnet_x2_5_640_mainbody/model.pdmodel --param_file=inference/picodet_lcnet_x2_5_640_mainbody/model.pdiparams --optimize_out=inference/picodet_lcnet_x2_5_640_mainbody/mainbody_det
# 将转好的模型复制到lite_shitu目录下
diff --git a/docs/zh_CN/inference_deployment/shitu_gallery_manager.md b/docs/zh_CN/inference_deployment/shitu_gallery_manager.md
index 0f8a4594f2b9d024ccb7c2a084cd6a1286eec5ff..4023ff9c4e87a79c33d30fdbc16d4f479a88f51b 100644
--- a/docs/zh_CN/inference_deployment/shitu_gallery_manager.md
+++ b/docs/zh_CN/inference_deployment/shitu_gallery_manager.md
@@ -2,6 +2,12 @@
本工具是PP-ShiTu的离线库管理工具,主要功能包括:新建图像库、更改图像库、建立索引库、更新索引库等功能。此工具是为了用户能够可视化的管理图像及对应的index库,用户可根据实际情况,灵活的增删改查相应的gallery图像库及索引文件,在提升用户体验的同时,辅助PP-ShiTu在实际应用的过程中达到更好的效果。
+目前此工具支持平台包括:
+
+- Mac
+- Windows
+- Linux(注意,由于linux输入法问题,可能无法支持中文)
+
## 目录
- [1. 功能介绍](#1)