diff --git a/README_ch.md b/README_ch.md index 2ca73fdc5b2c1b1e504cf4ec8eef2d0dcb13deb4..351fbf4454160a5c60e242eef7e589c98838505f 100644 --- a/README_ch.md +++ b/README_ch.md @@ -127,21 +127,26 @@ PULC融合了骨干网络、数据增广、蒸馏等多种前沿算法,可以 PaddleClas提供了覆盖人、车、OCR场景九大常见任务的分类模型,CPU推理3ms,精度比肩SwinTransformer。 -## PP-ShiTu图像识别系统 + +## PP-ShiTuV2图像识别系统 + +在 **[PP-ShiTu](https://arxiv.org/pdf/2111.00775.pdf)** 的基础上,我们针对数据集、特征提取模块进行了优化,加入了更多数据集和更为通用的优化策略,使得模型的检索精度在多种常见场景下得到显著提升。更多细节请参考 **[PP-ShiTuV2](./docs/zh_CN/PPShiTu/PPShiTu_introduction.md)**
- +
-PP-ShiTu是一个实用的轻量级通用图像识别系统,主要由主体检测、特征学习和向量检索三个模块组成。该系统从骨干网络选择和调整、损失函数的选择、数据增强、学习率变换策略、正则化参数选择、预训练模型使用以及模型裁剪量化8个方面,采用多种策略,对各个模块的模型进行优化,最终得到在CPU上仅0.2s即可完成10w+库的图像识别的系统。更多细节请参考[PP-ShiTu技术方案](https://arxiv.org/pdf/2111.00775.pdf)。 +* PP-ShiTu 是一个实用的轻量级通用图像识别系统,主要由主体检测、特征学习和向量检索三个模块组成。该系统从骨干网络选择和调整、损失函数的选择、数据增强、学习率变换策略、正则化参数选择、预训练模型使用以及模型裁剪量化8个方面,采用多种策略,对各个模块的模型进行优化,最终得到在CPU上仅0.2s即可完成10w+库的图像识别的系统。更多细节请参考 [PP-ShiTu技术方案](https://arxiv.org/pdf/2111.00775.pdf)。 + ## PULC实用图像分类模型效果展示
+ ## PP-ShiTu图像识别系统效果展示 - 瓶装饮料识别
@@ -177,6 +182,7 @@ PP-ShiTu是一个实用的轻量级通用图像识别系统,主要由主体检 + ## 贡献代码 我们非常欢迎你为PaddleClas贡献代码,也十分感谢你的反馈。 如果想为PaddleCLas贡献代码,可以参考[贡献指南](./docs/zh_CN/advanced_tutorials/how_to_contribute.md)。 diff --git a/README_en.md b/README_en.md index 4bf960e57f2e56972f889c4bcf6a6d715b903477..1efd9e4e3b85f446ec584d051ba1af2b36403c11 100644 --- a/README_en.md +++ b/README_en.md @@ -105,7 +105,7 @@ PULC models inference within 3ms on CPU devices, with accuracy comparable with S ## Introduction to Image Recognition Systems
- +
Image recognition can be divided into three steps: diff --git a/docs/images/structure.png b/docs/images/structure.png index 3855dde313a2e923db24423eb5ce4aee2013125c..14948bd4214f4cb321e9a6b9819f2a42ba3ac385 100644 Binary files a/docs/images/structure.png and b/docs/images/structure.png differ diff --git a/docs/zh_CN/PPShiTu/PPShiTuV2_introduction.md b/docs/zh_CN/PPShiTu/PPShiTuV2_introduction.md new file mode 100644 index 0000000000000000000000000000000000000000..770ac828a8b7558b1385a2a12edf2964a5aa8c84 --- /dev/null +++ b/docs/zh_CN/PPShiTu/PPShiTuV2_introduction.md @@ -0,0 +1,151 @@ +## PP-ShiTuV2图像识别系统 + +## 目录 + +- [PP-ShiTuV2简介](#pp-shituv2简介) + - [数据集介绍](#数据集介绍) + - [模型训练](#模型训练) + - [模型评估](#模型评估) + - [模型推理](#模型推理) +- [模块介绍](#模块介绍) + - [主体检测模型](#主体检测模型) + - [特征提取模型](#特征提取模型) + - [训练数据集优化与扩充](#训练数据集优化与扩充) + - [骨干网络优化](#骨干网络优化) + - [网络结构优化](#网络结构优化) + - [数据增强优化](#数据增强优化) +- [参考文献](#参考文献) + +## PP-ShiTuV2简介 + +PP-ShiTuV2 是基于 PP-ShiTuV1 改进的一个实用轻量级通用图像识别系统,相比 PP-ShiTuV1 具有更高的识别精度、更强的泛化能力以及相近的推理速度*。该系统主要针对**训练数据集**、特征提取两个部分进行优化,使用了更优的骨干网络、损失函数与训练策略。使得 PP-ShiTuV2 在多个实际应用场景上的检索性能有显著提升。 + +
+ +
+ +### 数据集介绍 + +我们将训练数据进行了合理扩充与优化,更多细节请参考 [PP-ShiTuV2 数据集](../image_recognition_pipeline/feature_extraction.md#42-pp-shituv2)。 + +下面以 [PP-ShiTuV2](../image_recognition_pipeline/feature_extraction.md#42-pp-shituv2) 的数据集为例,介绍 PP-ShiTuV2 模型的训练、评估、推理流程。 + +### 模型训练 + +首先下载好 [PP-ShiTuV2 数据集](../image_recognition_pipeline/feature_extraction.md#42-pp-shituv2) 中的16个数据集并手动进行合并、生成标注文本文件 `train_reg_all_data_v2.txt`,最后放置到 `dataset` 目录下。 + +合并后的文件夹结构如下所示: + +```python +dataset/ +├── Aliproduct/ # Aliproduct数据集文件夹 +├── SOP/ # SOPt数据集文件夹 +├── ... +├── Products-10k/ # Products-10k数据集文件夹 +├── ... +└── train_reg_all_data_v2.txt # 标注文本文件 +``` +生成的 `train_reg_all_data_v2.txt` 内容如下所示: + +```log +... +Aliproduct/train/50029/1766228.jpg 50029 +Aliproduct/train/50029/1764348.jpg 50029 +... +Products-10k/train/88823.jpg 186440 +Products-10k/train/88824.jpg 186440 +... +``` + +然后在终端运行以下命令进行训练: + +```shell +# 使用0号GPU进行单卡训练 +export CUDA_VISIBLE_DEVICES=0 +python3.7 tools/train.py \ +-c ./ppcls/configs/GeneralRecognitionV2/GeneralRecognitionV2_PPLCNetV2_base.yaml + +# 使用0,1,2,3,4,5,6,7号GPU进行8卡分布式训练 +export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 +python3.7 -m paddle.distributed.launch tools/train.py \ +-c ./ppcls/configs/GeneralRecognitionV2/GeneralRecognitionV2_PPLCNetV2_base.yaml +``` +**注:** 在训练时默认会开启`eval_during_train`,每训练完 `eval_interval` 个epoch就会在配置文件中 `Eval` 指定的数据集上(默认为 Aliproduct )进行模型评估并计算得到参考指标。 + +### 模型评估 + +参考 [模型评估](../image_recognition_pipeline/feature_extraction.md#53-模型评估) + +### 模型推理 + +参考 [模型推理](../image_recognition_pipeline/feature_extraction.md#54-模型推理) + +## 模块介绍 + +### 主体检测模型 + +主体检测模型使用 `PicoDet-LCNet_x2_5`,详细信息参考:[picodet_lcnet_x2_5_640_mainbody](../image_recognition_pipeline/mainbody_detection.md)。 + +### 特征提取模型 + +#### 训练数据集优化与扩充 + +在 PP-ShiTuV1 所用训练数据集的基础上,我们去掉了使用范围较小的 iCartoonFace 数据集,同时加入了更多常见、使用范围更广的数据集,如 bird400、Cars、Products-10k、fruits-262。 + +#### 骨干网络优化 + +我们将骨干网络从 `PPLCNet_x2_5` 替换成了 [`PPLCNetV2_base`](../models/PP-LCNetV2.md),相比 `PPLCNet_x2_5`, `PPLCNetV2_base` 基本保持了较高的分类精度,并减少了40%的推理时间*。 + +**注:** *推理环境基于 Intel(R) Xeon(R) Gold 6271C CPU @ 2.60GHz 硬件平台,OpenVINO 推理平台。 + +#### 网络结构优化 + +我们对 `PPLCNetV2_base` 结构做了微调,并加入了在行人重检测、地标检索、人脸识别等任务上较为通用有效的优化调整。主要包括以下几点: + +1. `PPLCNetV2_base` 结构微调:实验发现网络末尾的 [`ReLU`](../../../ppcls/arch/backbone/legendary_models/pp_lcnet_v2.py#L322) 对检索性能有较大影响, [`FC`](../../../ppcls/arch/backbone/legendary_models/pp_lcnet_v2.py#L325) 也会导致检索性能轻微掉点,因此我们去掉了 BackBone 末尾的 `ReLU` 和 `FC`。 + +2. `last stride=1`:只将最后一个 stage 的 stride 改为1,即不进行下采样,以此增加最后输出的特征图的语义信息,同时不对推理速度产生太大影响。 + +3. `BN Neck`:在全局池化层后加入一个 `BatchNorm1D` 结构,对特征向量的每个维度进行标准化,让 `CELoss` 与 `TripletAngularMarginLoss` 在不同的分布下进行优化,使得模型更快地收敛。 + + | 模型 | training data | recall@1%(mAP%) | + | :----------------------------------------------------------------- | :---------------- | :-------------- | + | PP-ShiTuV1 | PP-ShiTuV1 数据集 | 63.0(51.5) | + | PP-ShiTuV1+`PPLCNetV2_base`+`last_stride=1`+`BNNeck`+`TripletLoss` | PP-ShiTuV1 数据集 | 72.3(60.5) | + +4. `TripletAngularMarginLoss`:我们基于原始的 `TripletLoss` (困难三元组损失)进行了改进,将优化目标从 L2 欧几里得空间更换成余弦空间,并额外加入了 anchor 与 positive/negtive 之间的硬性距离约束,让训练与测试的目标更加接近,提升模型的泛化能力。 + + | 模型 | training data | recall@1%(mAP%) | + | :------------------------------------------------------------------------------ | :---------------- | :-------------- | + | PP-ShiTuV1+`PPLCNetV2_base`+`last_stride=1`+`BNNeck`+`TripletLoss` | PP-ShiTuV2 数据集 | 71.9(60.2) | + | PP-ShiTuV1+`PPLCNetV2_base`+`last_stride=1`+`BNNeck`+`TripletAngularMarginLoss` | PP-ShiTuV2 数据集 | 73.7(61.0) | + +#### 数据增强优化 + +我们考虑到实际相机拍摄时目标主体可能出现一定的旋转而不一定能保持正立状态,因此我们在数据增强中加入了适当的 [随机旋转增强](../../../ppcls/configs/GeneralRecognitionV2/GeneralRecognitionV2_PPLCNetV2_base.yaml#L117),以提升模型在真实场景中的检索能力。 + +结合以上3个优化点,最终在多个数据集的实验结果如下: + + | 模型 | training data | product* | + | :--------- | :---------------- | :------------------ | + | - | - | recall@1%(mAP%) | + | PP-ShiTuV1 | PP-ShiTuV2 数据集 | 63.0(51.5) | + | PP-ShiTuV2 | PP-ShiTuV2 数据集 | 73.7(61.0) | + + | 模型 | training data | Aliproduct | VeRI-Wild | LogoDet-3k | iCartoonFace | SOP | Inshop | + | :--------- | :---------------- | :-------------- | :-------------- | :-------------- | :-------------- | :-------------- | :-------------- | + | - | - | recall@1%(mAP%) | recall@1%(mAP%) | recall@1%(mAP%) | recall@1%(mAP%) | recall@1%(mAP%) | recall@1%(mAP%) | + | PP-ShiTuV1 | PP-ShiTuV2 数据集 | 83.9(83.2) | 88.7(60.1) | 86.1(73.6) | 84.1(72.3) | 79.7(58.6) | 89.1(69.4) | + | PP-ShiTuV2 | PP-ShiTuV2 数据集 | 84.2(83.3) | 87.8(68.8) | 88.0(63.2) | 53.6(27.5) | 77.6(55.3) | 90.8(74.3) | + + | 模型 | training data | gldv2 | imdb_face | iNat | instre | sketch | sop* | + | :--------- | :---------------- | :-------------- | :-------------- | :-------------- | :-------------- | :-------------- | :-------------- | + | - | - | recall@1%(mAP%) | recall@1%(mAP%) | recall@1%(mAP%) | recall@1%(mAP%) | recall@1%(mAP%) | recall@1%(mAP%) | + | PP-ShiTuV1 | PP-ShiTuV2 数据集 | 98.2(91.6) | 28.8(8.42) | 12.6(6.1) | 72.0(50.4) | 27.9(9.5) | 97.6(90.3) | + | PP-ShiTuV2 | PP-ShiTuV2 数据集 | 98.1(90.5) | 35.9(11.2) | 38.6(23.9) | 87.7(71.4) | 39.3(15.6) | 98.3(90.9) | + +**注:** product数据集是为了验证PP-ShiTu的泛化性能而制作的数据集,所有的数据都没有在训练和测试集中出现。该数据包含8个大类(人脸、化妆品、地标、红酒、手表、车、运动鞋、饮料),299个小类。测试时,使用299个小类的标签进行测试;sop数据集来自[GPR1200: A Benchmark for General-Purpose Content-Based Image Retrieval](https://arxiv.org/abs/2111.13122),可视为“SOP”数据集的子集。 + +## 参考文献 +1. Schall, Konstantin, et al. "GPR1200: A Benchmark for General-Purpose Content-Based Image Retrieval." International Conference on Multimedia Modeling. Springer, Cham, 2022. +2. Luo, Hao, et al. "A strong baseline and batch normalization neck for deep person re-identification." IEEE Transactions on Multimedia 22.10 (2019): 2597-2609. diff --git a/docs/zh_CN/PPShiTu/PPShiTu_introduction.md b/docs/zh_CN/PPShiTu/PPShiTu_introduction.md new file mode 100644 index 0000000000000000000000000000000000000000..9abca1e24a45063e60fd8f6858be6c8515d91172 --- /dev/null +++ b/docs/zh_CN/PPShiTu/PPShiTu_introduction.md @@ -0,0 +1,23 @@ +## PP-ShiTuV2图像识别系统 + +## 目录 + +- [1. PULC方案简介](#1) +- [2. 数据准备](#2) + - [2.1 数据集格式说明](#2.1) + - [2.2 标注文件生成](#2.2) +- [3. 使用标准分类配置进行训练](#3) + - [3.1 骨干网络PP-LCNet](#3.1) + - [3.2 SSLD预训练权重](#3.2) + - [3.3 EDA数据增强策略](#3.3) + - [3.4 SKL-UGI模型蒸馏](#3.4) + - [3.5 总结](#3.5) +- [4. 超参搜索](#4) + - [4.1 基于默认配置搜索](#4.1) + - [4.2 自定义搜索配置](#4.2) + +## PP-ShiTuV2简介 + +PP-ShiTuV2 是基于 PP-ShiTuV1 改进的一个实用轻量级通用图像识别系统,相比 PP-ShiTuV1 具有更高的识别精度、更强的泛化能力以及更快的推理速度*。该系统主要针对训练数据集、主体检测、特征提取三个部分进行优化,各自使用了更优的骨干网络、损失函数与训练策略。使得 PP-ShiTuV2 在多个实际应用场景上的检索性能有显著提升。 + +## 数据集介绍 diff --git a/docs/zh_CN/algorithm_introduction/reid.md b/docs/zh_CN/algorithm_introduction/reid.md index f8c8705ac59e9950b14587730c971b81e81f48b3..1affe41824e772606f3231b19bac0d20210ba570 100644 --- a/docs/zh_CN/algorithm_introduction/reid.md +++ b/docs/zh_CN/algorithm_introduction/reid.md @@ -344,7 +344,7 @@ PaddleClas 提供了基于 Paddle2ONNX 来完成 inference 模型转换 ONNX 模 #### 5.1 方法总结与对比 -上述算法能快速地迁移至多数的ReID模型中,能进一步提升ReID模型的性能。 +上述算法能快速地迁移至多数的ReID模型中(参考 [PP-ShiTuV2](../PPShiTu/PPShiTuV2_introduction.md) ),能进一步提升ReID模型的性能, #### 5.2 使用建议/FAQ diff --git a/docs/zh_CN/image_recognition_pipeline/feature_extraction.md b/docs/zh_CN/image_recognition_pipeline/feature_extraction.md index 5f2a246250135705b37c9c6cb6c8b89263bf71c7..b17725a59b988513f758bd002b688eaefa55eb64 100644 --- a/docs/zh_CN/image_recognition_pipeline/feature_extraction.md +++ b/docs/zh_CN/image_recognition_pipeline/feature_extraction.md @@ -120,7 +120,7 @@ Loss 部分选用 [Cross entropy loss](../../../ppcls/loss/celoss.py) 和 [Tripl ### 4.2 PP-ShiTuV2 -训练数据为如下 16 个公开数据集的汇总: +我们对原有的训练数据进行了合理扩充与优化,最终使用如下 16 个公开数据集的汇总: | 数据集 | 数据量 | 类别数 | 场景 | 数据集地址 | | :--------------------- | :-----: | :------: | :---: | :----------------------------------------------------------------------------------: | @@ -130,17 +130,17 @@ Loss 部分选用 [Cross entropy loss](../../../ppcls/loss/celoss.py) 和 [Tripl | LogoDet-3K | 155427 | 3000 | Logo | [地址](https://github.com/Wangjing1551/LogoDet-3K-Dataset) | | SOP | 59551 | 11318 | 商品 | [地址](https://cvgl.stanford.edu/projects/lifted_struct/) | | Inshop | 25882 | 3997 | 商品 | [地址](http://mmlab.ie.cuhk.edu.hk/projects/DeepFashion.html) | -| bird400 | 58388 | 400 | 商品 | [地址](https://www.kaggle.com/datasets/gpiosenka/100-bird-species) | -| 104flows | 12753 | 104 | 商品 | [地址](https://www.robots.ox.ac.uk/~vgg/data/flowers/102/) | -| Cars | 58315 | 112 | 商品 | [地址](https://ai.stanford.edu/~jkrause/cars/car_dataset.html) | +| bird400 | 58388 | 400 | 鸟类 | [地址](https://www.kaggle.com/datasets/gpiosenka/100-bird-species) | +| 104flows | 12753 | 104 | 花类 | [地址](https://www.robots.ox.ac.uk/~vgg/data/flowers/102/) | +| Cars | 58315 | 112 | 车辆 | [地址](https://ai.stanford.edu/~jkrause/cars/car_dataset.html) | | Fashion Product Images | 44441 | 47 | 商品 | [地址](https://www.kaggle.com/datasets/paramaggarwal/fashion-product-images-dataset) | -| flowerrecognition | 24123 | 59 | 商品 | [地址](https://www.kaggle.com/datasets/aymenktari/flowerrecognition) | -| food-101 | 101000 | 101 | 商品 | [地址](https://data.vision.ee.ethz.ch/cvl/datasets_extra/food-101/) | -| fruits-262 | 225639 | 262 | 商品 | [地址](https://www.kaggle.com/datasets/aelchimminut/fruits262) | -| inaturalist | 265213 | 1010 | 商品 | [地址](https://github.com/visipedia/inat_comp/tree/master/2017) | -| indoor-scenes | 15588 | 67 | 商品 | [地址](https://www.kaggle.com/datasets/itsahmad/indoor-scenes-cvpr-2019) | +| flowerrecognition | 24123 | 59 | 花类 | [地址](https://www.kaggle.com/datasets/aymenktari/flowerrecognition) | +| food-101 | 101000 | 101 | 食物 | [地址](https://data.vision.ee.ethz.ch/cvl/datasets_extra/food-101/) | +| fruits-262 | 225639 | 262 | 水果 | [地址](https://www.kaggle.com/datasets/aelchimminut/fruits262) | +| inaturalist | 265213 | 1010 | 自然 | [地址](https://github.com/visipedia/inat_comp/tree/master/2017) | +| indoor-scenes | 15588 | 67 | 室内 | [地址](https://www.kaggle.com/datasets/itsahmad/indoor-scenes-cvpr-2019) | | Products-10k | 141931 | 9691 | 商品 | [地址](https://products-10k.github.io/) | -| CompCars | 16016 | 431 | 商品 | [地址](http://​​​​​​http://ai.stanford.edu/~jkrause/cars/car_dataset.html​) | +| CompCars | 16016 | 431 | 车辆 | [地址](http://​​​​​​http://ai.stanford.edu/~jkrause/cars/car_dataset.html​) | | **Total** | **6M** | **192K** | - | - | 最终的模型精度指标如下表所示: