diff --git a/docs/zh_CN/image_recognition_pipeline/feature_extraction.md b/docs/zh_CN/image_recognition_pipeline/feature_extraction.md index cc66cbcaa40344265feff5a2a83f3538d940dad1..a447521f646e91fd940cb15aa16217a06d86cb76 100644 --- a/docs/zh_CN/image_recognition_pipeline/feature_extraction.md +++ b/docs/zh_CN/image_recognition_pipeline/feature_extraction.md @@ -17,7 +17,7 @@ | :------------: | :-------------: | :-------: | :-------: | :--------: | | Aliproduct | 2498771 | 50030 | 商品 | [地址](https://retailvisionworkshop.github.io/recognition_challenge_2020/) | | GLDv2 | 1580470 | 81313 | 地标 | [地址](https://github.com/cvdfoundation/google-landmark) | -| VeRI-Wild | 277797 | 30671 | 车辆 | [地址](https://github.com/guishijin/veri-wild) | +| VeRI-Wild | 277797 | 30671 | 车辆 | [地址](https://github.com/PKU-IMRE/VERI-Wild)| | LogoDet-3K | 155427 | 3000 | Logo | [地址](https://github.com/Wangjing1551/LogoDet-3K-Dataset) | | iCartoonFace | 389678 | 5013 | 动漫人物 | [地址](http://challenge.ai.iqiyi.com/detail?raceId=5def69ace9fcf68aef76a75d) | | SOP | 59551 | 11318 | 商品 | [地址](https://cvgl.stanford.edu/projects/lifted_struct/) | @@ -28,8 +28,10 @@ | 模型 | Aliproduct | VeRI-Wild | LogoDet-3K | iCartoonFace | SOP | Inshop | Latency(ms) | | :----------: | :---------: | :-------: | :-------: | :--------: | :--------: | :--------: | :--------: | PP-LCNet-2.5x | 0.839 | 0.888 | 0.861 | 0.841 | 0.793 | 0.892 | 5.0 -* 采用的评测指标为`Recall@1` -* 速度评测机器的CPU具体信息为:`Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz`,速度指标为开启 mkldnn ,线程数设置为 10 测试得到。 +* 采用的评测指标为:`Recall@1`; +* 速度评测机器的CPU具体信息为:`Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz`; +* 速度指标的评测条件为: 开启MKLDNN, 线程数设置为10; +* 预训练模型地址:[通用识别预训练模型](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/pretrain/general_PPLCNet_x2_5_pretrained_v1.0.pdparams) # 4. 自定义特征提取 自定义特征提取,是指依据自己的任务,重新训练特征提取模型。主要包含如下四个步骤:1)数据准备;2)模型训练;3)模型评估;4)模型推理。 @@ -37,6 +39,7 @@ PP-LCNet-2.5x | 0.839 | 0.888 | 0.861 | 0.841 | 0.793 | 0.892 | 5.0 首先,需要基于任务定制自己的数据集。数据集格式参见[格式说明](https://github.com/PaddlePaddle/PaddleClas/blob/develop/docs/zh_CN/data_preparation/recognition_dataset.md#%E6%95%B0%E6%8D%AE%E9%9B%86%E6%A0%BC%E5%BC%8F%E8%AF%B4%E6%98%8E) ## 4.2 模型训练 +在启动模型训练之前,需要在配置文件中修改数据配置相关的内容, 主要包括数据集的地址以及类别数量。 - 单机单卡训练 ```shell export CUDA_VISIBLE_DEVICES=0 @@ -45,27 +48,35 @@ python tools/train.py -c ppcls/configs/GeneralRecognition/GeneralRecognition_PPL - 单机多卡训练 ```shell export CUDA_VISIBLE_DEVICES=0,1,2,3 -python -m paddle.distributed.launch - --gpus="0,1,2,3" tools/train.py +python -m paddle.distributed.launch \ + --gpus="0,1,2,3" tools/train.py \ -c ppcls/configs/GeneralRecognition/GeneralRecognition_PPLCNet_x2_5.yaml ``` **注意:** 配置文件中默认采用`在线评估`的方式,如果你想加快训练速度,去除`在线评估`,只需要在上述命令后面,增加`-o eval_during_train=False`。 -训练完毕后,在output目录下会生成最终模型文件`latest.pd*`,`best_model.pd*`和训练日志文件`train.log`。 +训练完毕后,在output目录下会生成最终模型文件`latest.pd*`,`best_model.pd*`和训练日志文件`train.log`。`best_model`用来存储当前评测指标下 +的最佳模型。`latest`用来存储最新的模型, 方便在任务中断的情况下从断点位置启动训练,断点重训命令如下所示: +```shell +export CUDA_VISIBLE_DEVICES=0,1,2,3 +python -m paddle.distributed.launch \ + --gpus="0,1,2,3" tools/train.py \ + -c ppcls/configs/GeneralRecognition/GeneralRecognition_PPLCNet_x2_5.yaml \ + -o Global.checkpoint="output/RecModel/latest" +``` ## 4.3 模型评估 - 单卡评估 ```shell export CUDA_VISIBLE_DEVICES=0 python tools/eval.py -c ppcls/configs/GeneralRecognition/GeneralRecognition_PPLCNet_x2_5.yaml \ -\ -o Global.pretrained_model="output/RecModel/best_model" +-o Global.pretrained_model="output/RecModel/best_model" ``` - 多卡评估 ```shell export CUDA_VISIBLE_DEVICES=0,1,2,3 -python -m paddle.distributed.launch - --gpus="0,1,2,3" tools/eval.py - -c ppcls/configs/GeneralRecognition/GeneralRecognition_PPLCNet_x2_5.yaml +python -m paddle.distributed.launch \ + --gpus="0,1,2,3" tools/eval.py \ + -c ppcls/configs/GeneralRecognition/GeneralRecognition_PPLCNet_x2_5.yaml \ -o Global.pretrained_model="output/RecModel/best_model" ``` **推荐:** 建议使用多卡评估。多卡评估方式可以利用多卡并行计算快速得到整体数据集的特征集合,能够加速评估的过程。 @@ -74,14 +85,20 @@ python -m paddle.distributed.launch 推理过程包括两个步骤: 1)导出推理模型; 2)获取特征向量 ### 4.4.1 导出推理模型 ``` -python tools/export_model -c ppcls/configs/GeneralRecognition/GeneralRecognition_PPLCNet_x2_5.yaml -o Global.pretrained_model="output/RecModel/best_model" +python tools/export_model \ +-c ppcls/configs/GeneralRecognition/GeneralRecognition_PPLCNet_x2_5.yaml \ +-o Global.pretrained_model="output/RecModel/best_model" ``` -生成的推理模型位于`inference`目录,名字为`inference.pd*` - +生成的推理模型位于`inference`目录,里面包含三个文件,分别为`inference.pdmodel`、`inference.pdiparams`、`inference.pdiparams.info`。 +其中: `inference.pdmodel`用来存储推理模型的结构, `inference.pdiparams`和 `inference.pdiparams.info`用来存储推理模型相关的参数信息。 ### 4.4.2 获取特征向量 ``` cd deploy -python python/predict_rec.py -c configs/inference_rec.yaml -o Global.rec_inference_model_dir="../inference" +python python/predict_rec.py \ +-c configs/inference_rec.yaml \ +-o Global.rec_inference_model_dir="../inference" ``` 得到的特征输出格式如下图所示: ![](../../images/feature_extraction_output.png) + +在实际使用过程中,单纯得到特征往往并不能够满足业务的需求。如果想进一步通过特征来进行图像识别,可以参照文档[图像识别流程]()和[向量检索]()。