Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleClas
提交
bcf37d28
P
PaddleClas
项目概览
PaddlePaddle
/
PaddleClas
大约 2 年 前同步成功
通知
118
Star
4999
Fork
1114
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
19
列表
看板
标记
里程碑
合并请求
6
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleClas
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
19
Issue
19
列表
看板
标记
里程碑
合并请求
6
合并请求
6
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
bcf37d28
编写于
6月 13, 2022
作者:
H
HydrogenSulfate
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'develop' into add_cpp_serving
上级
d505cf5a
c5aaedf0
变更
26
展开全部
显示空白变更内容
内联
并排
Showing
26 changed file
with
1748 addition
and
239 deletion
+1748
-239
README_ch.md
README_ch.md
+12
-21
deploy/configs/PULC/car_exists/inference_car_exists.yaml
deploy/configs/PULC/car_exists/inference_car_exists.yaml
+36
-0
deploy/configs/PULC/car_exists/inference_person_exists.yaml
deploy/configs/PULC/car_exists/inference_person_exists.yaml
+36
-0
deploy/images/PULC/car_exists/objects365_00001507.jpeg
deploy/images/PULC/car_exists/objects365_00001507.jpeg
+0
-0
deploy/images/PULC/car_exists/objects365_00001521.jpeg
deploy/images/PULC/car_exists/objects365_00001521.jpeg
+0
-0
docs/images/PULC/docs/car_exists_data_demo.jpeg
docs/images/PULC/docs/car_exists_data_demo.jpeg
+0
-0
docs/zh_CN/PULC/PULC_car_exists.md
docs/zh_CN/PULC/PULC_car_exists.md
+447
-0
docs/zh_CN/PULC/PULC_language_classification.md
docs/zh_CN/PULC/PULC_language_classification.md
+6
-4
docs/zh_CN/PULC/PULC_model_list.md
docs/zh_CN/PULC/PULC_model_list.md
+2
-2
docs/zh_CN/PULC/PULC_person_attribute.md
docs/zh_CN/PULC/PULC_person_attribute.md
+15
-15
docs/zh_CN/PULC/PULC_person_exists.md
docs/zh_CN/PULC/PULC_person_exists.md
+47
-47
docs/zh_CN/PULC/PULC_quickstart.md
docs/zh_CN/PULC/PULC_quickstart.md
+31
-11
docs/zh_CN/PULC/PULC_safety_helmet.md
docs/zh_CN/PULC/PULC_safety_helmet.md
+9
-8
docs/zh_CN/PULC/PULC_text_image_orientation.md
docs/zh_CN/PULC/PULC_text_image_orientation.md
+8
-6
docs/zh_CN/PULC/PULC_textline_orientation.md
docs/zh_CN/PULC/PULC_textline_orientation.md
+52
-52
docs/zh_CN/PULC/PULC_traffic_sign.md
docs/zh_CN/PULC/PULC_traffic_sign.md
+5
-5
docs/zh_CN/PULC/PULC_train.md
docs/zh_CN/PULC/PULC_train.md
+205
-60
docs/zh_CN/PULC/PULC_vehicle_attribute.md
docs/zh_CN/PULC/PULC_vehicle_attribute.md
+4
-4
docs/zh_CN/advanced_tutorials/ssld.md
docs/zh_CN/advanced_tutorials/ssld.md
+8
-0
ppcls/configs/PULC/car_exists/MobileNetV3_small_x0_35.yaml
ppcls/configs/PULC/car_exists/MobileNetV3_small_x0_35.yaml
+139
-0
ppcls/configs/PULC/car_exists/PPLCNet_x1_0.yaml
ppcls/configs/PULC/car_exists/PPLCNet_x1_0.yaml
+152
-0
ppcls/configs/PULC/car_exists/PPLCNet_x1_0_distillation.yaml
ppcls/configs/PULC/car_exists/PPLCNet_x1_0_distillation.yaml
+169
-0
ppcls/configs/PULC/car_exists/PPLCNet_x1_0_search.yaml
ppcls/configs/PULC/car_exists/PPLCNet_x1_0_search.yaml
+152
-0
ppcls/configs/PULC/car_exists/SwinTransformer_tiny_patch4_window7_224.yaml
...C/car_exists/SwinTransformer_tiny_patch4_window7_224.yaml
+169
-0
ppcls/configs/PULC/car_exists/search.yaml
ppcls/configs/PULC/car_exists/search.yaml
+40
-0
ppcls/configs/PULC/person_exists/PPLCNet_x1_0.yaml
ppcls/configs/PULC/person_exists/PPLCNet_x1_0.yaml
+4
-4
未找到文件。
README_ch.md
浏览文件 @
bcf37d28
...
...
@@ -22,22 +22,17 @@ PP-ShiTu图像识别系统效果展示
## 近期更新
-
🔥️ 2022.6.15 发布
PULC超轻量图像分类方案
,CPU推理3ms,精度比肩SwinTransformer,覆盖人、车、OCR场景九大常见任务。
-
🔥️ 2022.6.15 发布
[
PULC超轻量图像分类实用方案
](
docs/zh_CN/PULC/PULC_train.md
)
,CPU推理3ms,精度比肩SwinTransformer,覆盖人、车、OCR场景九大常见任务。
-
2022.5.26
[
飞桨产业实践范例直播课
](
http://aglc.cn/v-c4FAR
)
,解读
**超轻量重点区域人员出入管理方案**
。
-
2022.5.23 新增
[
人员出入管理范例库
](
https://aistudio.baidu.com/aistudio/projectdetail/4094475
)
,具体内容可以在 AI Stuio 上体验。
-
2022.5.20 上线
[
PP-HGNet
](
./docs/zh_CN/models/PP-HGNet.md
)
,
[
PP-LCNet
v2
](
./docs/zh_CN/models/PP-LCNetV2.md
)
。
-
2022.5.20 上线
[
PP-HGNet
](
./docs/zh_CN/models/PP-HGNet.md
)
,
[
PP-LCNetv2
](
./docs/zh_CN/models/PP-LCNetV2.md
)
。
-
2022.4.21 新增 CVPR2022 oral论文
[
MixFormer
](
https://arxiv.org/pdf/2204.02557.pdf
)
相关
[
代码
](
https://github.com/PaddlePaddle/PaddleClas/pull/1820/files
)
。
-
2022.1.27 全面升级文档;新增
[
PaddleServing C++ pipeline部署方式
](
./deploy/paddleserving
)
和
[
18M图像识别安卓部署Demo
](
./deploy/lite_shitu
)
。
-
2021.11.1 发布
[
PP-ShiTu技术报告
](
https://arxiv.org/pdf/2111.00775.pdf
)
,新增饮料识别demo。
-
2021.10.23 发布轻量级图像识别系统PP-ShiTu,CPU上0.2s即可完成在10w+库的图像识别。
[
点击这里
](
./docs/zh_CN/quick_start/quick_start_recognition.md
)
立即体验。
-
2021.09.17 发布PP-LCNet系列超轻量骨干网络模型, 在Intel CPU上,单张图像预测速度约5ms,ImageNet-1K数据集上Top1识别准确率达到80.82%,超越ResNet152的模型效果。PP-LCNet的介绍可以参考
[
论文
](
https://arxiv.org/pdf/2109.15099.pdf
)
, 或者
[
PP-LCNet模型介绍
](
docs/zh_CN/models/PP-LCNet.md
)
,相关指标和预训练权重可以从
[
这里
](
docs/zh_CN/algorithm_introduction/ImageNet_models.md
)
下载。
-
[
more
](
./docs/zh_CN/others/update_history.md
)
## 特性
支持多种图像分类、识别相关算法,在此基础上打造
[
PULC超轻量图像分类方案
](
docs/zh_CN/PULC/PULC_person_exists.md
)
和
[
PP-ShiTu图像识别系统
](
./docs/zh_CN/quick_start/quick_start_recognition.md
)
。


## 欢迎加入技术交流群
...
...
@@ -51,24 +46,24 @@ PP-ShiTu图像识别系统效果展示
## 快速体验
PULC超轻量图像分类方案快速体验:
[
点击这里
](
docs/zh_CN/PULC/PULC_quickstart.md
)
。
PULC超轻量图像分类方案快速体验:
[
点击这里
](
docs/zh_CN/PULC/PULC_quickstart.md
)
PP-ShiTu图像识别快速体验:
[
点击这里
](
./docs/zh_CN/quick_start/quick_start_recognition.md
)
。
PP-ShiTu图像识别快速体验:
[
点击这里
](
./docs/zh_CN/quick_start/quick_start_recognition.md
)
## 文档教程
-
[
环境准备
](
docs/zh_CN/installation/install_paddleclas.md
)
-
PULC超轻量图像分类实用方案 文档更新中
-
[
超轻量图像分类模型库
](
docs/zh_CN/
installation
/PULC_model_list.md
)
-
[
PULC超轻量图像分类实用方案
](
docs/zh_CN/PULC/PULC_train.md
)
-
[
超轻量图像分类模型库
](
docs/zh_CN/
PULC
/PULC_model_list.md
)
-
[
PULC有人/无人分类模型
](
docs/zh_CN/PULC/PULC_person_exists.md
)
-
[
PULC人体属性识别模型
](
docs/zh_CN/PULC/PULC_person_attribute.md
)
-
[
PULC佩戴安全帽分类模型
](
docs/zh_CN/PULC/PULC_safety_helmet.md
)
-
[
PULC交通标志分类模型
](
docs/zh_CN/PULC/PULC_traffic_sign.md
)
-
[
PULC车辆属性识别模型
](
docs/zh_CN/PULC/PULC_vehicle_attribute.md
)
-
PULC有车/无车分类模型 文档更新中
-
[
PULC有车/无车分类模型
](
docs/zh_CN/PULC/PULC_car_exists.md
)
-
[
PULC含文字图像方向分类模型
](
docs/zh_CN/PULC/PULC_text_image_orientation.md
)
-
[
PULC文本行方向分类模型
](
docs/zh_CN/PULC/PULC_textline_orientation.md
)
-
[
PULC语种分类模型
](
docs/zh_CN/PULC/PULC_language_classification.md
)
-
模型训练 文档更新中
-
[
模型训练
](
docs/zh_CN/PULC/PULC_train.md
)
-
推理部署
-
[
基于python预测引擎推理
](
docs/zh_CN/inference_deployment/python_deploy.md#1
)
-
[
基于C++预测引擎推理
](
docs/zh_CN/inference_deployment/cpp_deploy.md
)
...
...
@@ -89,19 +84,16 @@ PP-ShiTu图像识别快速体验:[点击这里](./docs/zh_CN/quick_start/quick
-
[
基于C++预测引擎推理
](
deploy/cpp_shitu/readme.md
)
-
[
服务化部署
](
docs/zh_CN/inference_deployment/paddle_serving_deploy.md
)
-
[
端侧部署
](
deploy/lite_shitu/README.md
)
-
模型压缩 文档更新中
-
PP系列骨干网络模型
-
[
PP-HGNet
](
docs/zh_CN/models/PP-HGNet.md
)
-
[
PP-LCNet
v2
](
docs/zh_CN/models/PP-LCNetV2.md
)
-
[
PP-LCNetv2
](
docs/zh_CN/models/PP-LCNetV2.md
)
-
[
PP-LCNet
](
docs/zh_CN/models/PP-LCNet.md
)
-
[
SSLD半监督知识蒸馏方案
](
docs/zh_CN/advanced_tutorials/ssld.md
)
-
前沿算法
-
[
骨干网络和预训练模型库
](
docs/zh_CN/algorithm_introduction/ImageNet_models.md
)
-
[
度量学习
](
docs/zh_CN/algorithm_introduction/metric_learning.md
)
-
ReID 文档更新中
-
向量检索 文档更新中
-
哈希特征 文档更新中
-
[
模型蒸馏
](
docs/zh_CN/algorithm_introduction/model_prune_quantization.md
)
-
[
模型压缩
](
docs/zh_CN/algorithm_introduction/model_prune_quantization.md
)
-
[
模型蒸馏
](
docs/zh_CN/algorithm_introduction/knowledge_distillation.md
)
-
[
数据增强
](
docs/zh_CN/advanced_tutorials/DataAugmentation.md
)
-
[
产业实用范例库
](
docs/zh_CN/samples
)
-
[
30分钟快速体验图像分类
](
docs/zh_CN/quick_start/quick_start_classification_new_user.md
)
...
...
@@ -110,7 +102,6 @@ PP-ShiTu图像识别快速体验:[点击这里](./docs/zh_CN/quick_start/quick
-
[
图像分类精选问题
](
docs/zh_CN/faq_series/faq_selected_30.md
)
-
[
图像分类FAQ第一季
](
docs/zh_CN/faq_series/faq_2020_s1.md
)
-
[
图像分类FAQ第二季
](
docs/zh_CN/faq_series/faq_2021_s1.md
)
-
PaddleClas结构解析 文档更新中
-
[
社区贡献指南
](
./docs/zh_CN/advanced_tutorials/how_to_contribute.md
)
-
[
许可证书
](
#许可证书
)
-
[
贡献代码
](
#贡献代码
)
...
...
deploy/configs/PULC/car_exists/inference_car_exists.yaml
0 → 100644
浏览文件 @
bcf37d28
Global
:
infer_imgs
:
"
./images/PULC/car_exists/objects365_00001507.jpeg"
inference_model_dir
:
"
./models/car_exists_infer"
batch_size
:
1
use_gpu
:
True
enable_mkldnn
:
False
cpu_num_threads
:
10
enable_benchmark
:
True
use_fp16
:
False
ir_optim
:
True
use_tensorrt
:
False
gpu_mem
:
8000
enable_profile
:
False
PreProcess
:
transform_ops
:
-
ResizeImage
:
resize_short
:
256
-
CropImage
:
size
:
224
-
NormalizeImage
:
scale
:
0.00392157
mean
:
[
0.485
,
0.456
,
0.406
]
std
:
[
0.229
,
0.224
,
0.225
]
order
:
'
'
channel_num
:
3
-
ToCHWImage
:
PostProcess
:
main_indicator
:
ThreshOutput
ThreshOutput
:
threshold
:
0.5
label_0
:
nocar
label_1
:
contains_car
SavePreLabel
:
save_dir
:
./pre_label/
deploy/configs/PULC/car_exists/inference_person_exists.yaml
0 → 100644
浏览文件 @
bcf37d28
Global
:
infer_imgs
:
"
./images/PULC/car_exists/objects365_00001507.jpeg"
inference_model_dir
:
"
./models/car_exists_infer"
batch_size
:
1
use_gpu
:
True
enable_mkldnn
:
False
cpu_num_threads
:
10
enable_benchmark
:
True
use_fp16
:
False
ir_optim
:
True
use_tensorrt
:
False
gpu_mem
:
8000
enable_profile
:
False
PreProcess
:
transform_ops
:
-
ResizeImage
:
resize_short
:
256
-
CropImage
:
size
:
224
-
NormalizeImage
:
scale
:
0.00392157
mean
:
[
0.485
,
0.456
,
0.406
]
std
:
[
0.229
,
0.224
,
0.225
]
order
:
'
'
channel_num
:
3
-
ToCHWImage
:
PostProcess
:
main_indicator
:
ThreshOutput
ThreshOutput
:
threshold
:
0.5
label_0
:
nocar
label_1
:
contains_car
SavePreLabel
:
save_dir
:
./pre_label/
deploy/images/PULC/car_exists/objects365_00001507.jpeg
0 → 100644
浏览文件 @
bcf37d28
157.1 KB
deploy/images/PULC/car_exists/objects365_00001521.jpeg
0 → 100644
浏览文件 @
bcf37d28
178.0 KB
docs/images/PULC/docs/car_exists_data_demo.jpeg
0 → 100644
浏览文件 @
bcf37d28
157.1 KB
docs/zh_CN/PULC/PULC_car_exists.md
0 → 100644
浏览文件 @
bcf37d28
此差异已折叠。
点击以展开。
docs/zh_CN/PULC/PULC_language_classification.md
浏览文件 @
bcf37d28
...
...
@@ -50,7 +50,9 @@
从表中可以看出,backbone 为 SwinTranformer_tiny 时精度比较高,但是推理速度较慢。将 backboone 替换为轻量级模型 MobileNetV3_small_x0_35 后,速度提升明显,但精度有了大幅下降。将 backbone 替换为 PPLCNet_x1_0 且调整预处理输入尺寸和网络的下采样stride时,速度略为提升,同时精度较 MobileNetV3_large_x1_0 高2.43个百分点。在此基础上,使用 SSLD 预训练模型后,在不改变推理速度的前提下,精度可以提升 0.35 个百分点,进一步地,当融合EDA策略后,精度可以再提升 0.42 个百分点,最后,在使用 SKL-UGI 知识蒸馏后,精度可以继续提升 0.14 个百分点。此时,PPLCNet_x1_0 超过了 SwinTranformer_tiny 模型的精度,并且速度有了明显提升。关于 PULC 的训练方法和推理部署方法将在下面详细介绍。
**备注:**
关于PPLCNet的介绍可以参考
[
PPLCNet介绍
](
../models/PP-LCNet.md
)
,相关论文可以查阅
[
PPLCNet paper
](
https://arxiv.org/abs/2109.15099
)
。
**备注:**
*
关于PP-LCNet的介绍可以参考
[
PP-LCNet介绍
](
../models/PP-LCNet.md
)
,相关论文可以查阅
[
PP-LCNet paper
](
https://arxiv.org/abs/2109.15099
)
。
<a
name=
"2"
></a>
...
...
@@ -238,7 +240,7 @@ python3 tools/infer.py \
### 4.1 SKL-UGI 知识蒸馏
SKL-UGI 知识蒸馏是 PaddleClas 提出的一种简单有效的知识蒸馏方法,关于该方法的介绍,可以参考
[
SKL-UGI 知识蒸馏
](
@ruoyu
)
。
SKL-UGI 知识蒸馏是 PaddleClas 提出的一种简单有效的知识蒸馏方法,关于该方法的介绍,可以参考
[
SKL-UGI 知识蒸馏
](
../advanced_tutorials/ssld.md
)
。
<a
name=
"4.1.1"
></a>
...
...
@@ -280,7 +282,7 @@ python3 -m paddle.distributed.launch \
## 5. 超参搜索
在
[
3.2 节
](
#3.2
)
和
[
4.1 节
](
#4.1
)
所使用的超参数是根据 PaddleClas 提供的
`SHAS 超参数搜索策略`
搜索得到的,如果希望在自己的数据集上得到更好的结果,可以参考
[
SHAS 超参数搜索策略
](
#TODO
)
来获得更好的训练超参数。
在
[
3.2 节
](
#3.2
)
和
[
4.1 节
](
#4.1
)
所使用的超参数是根据 PaddleClas 提供的
`SHAS 超参数搜索策略`
搜索得到的,如果希望在自己的数据集上得到更好的结果,可以参考
[
SHAS 超参数搜索策略
](
PULC_train.md#4-超参搜索
)
来获得更好的训练超参数。
**备注:**
此部分内容是可选内容,搜索过程需要较长的时间,您可以根据自己的硬件情况来选择执行。如果没有更换数据集,可以忽略此节内容。
...
...
@@ -421,4 +423,4 @@ PaddleClas 提供了基于 Paddle Lite 来完成模型端侧部署的示例,
Paddle2ONNX 支持将 PaddlePaddle 模型格式转化到 ONNX 模型格式。通过 ONNX 可以完成将 Paddle 模型到多种推理引擎的部署,包括TensorRT/OpenVINO/MNN/TNN/NCNN,以及其它对 ONNX 开源格式进行支持的推理引擎或硬件。更多关于 Paddle2ONNX 的介绍,可以参考
[
Paddle2ONNX 代码仓库
](
https://github.com/PaddlePaddle/Paddle2ONNX
)
。
PaddleClas 提供了基于 Paddle2ONNX 来完成 inference 模型转换 ONNX 模型并作推理预测的示例,您可以参考
[
Paddle2ONNX 模型转换与预测
](
@shuilong
)
来完成相应的部署工作。
PaddleClas 提供了基于 Paddle2ONNX 来完成 inference 模型转换 ONNX 模型并作推理预测的示例,您可以参考
[
Paddle2ONNX 模型转换与预测
](
../../../deploy/paddle2onnx/readme.md
)
来完成相应的部署工作。
docs/zh_CN/PULC/PULC_model_list.md
浏览文件 @
bcf37d28
...
...
@@ -12,7 +12,7 @@
| safety_helmet |
[
PULC佩戴安全帽分类模型
](
PULC_safety_helmet.md
)
| 99.38 |6.5M|2.03ms|
[
推理模型
](
https://paddleclas.bj.bcebos.com/models/PULC/inference/safety_helmet_infer.tar
)
/
[
预训练模型
](
https://paddleclas.bj.bcebos.com/models/PULC/pretrained/safety_helmet_pretrained.pdparams
)
|
| traffic_sign |
[
PULC交通标志分类模型
](
PULC_traffic_sign.md
)
| 98.35 |8.2M|2.10ms|
[
推理模型
](
https://paddleclas.bj.bcebos.com/models/PULC/inference/traffic_sign_infer.tar
)
/
[
预训练模型
](
https://paddleclas.bj.bcebos.com/models/PULC/pretrained/traffic_sign_pretrained.pdparams
)
|
| vehicle_attribute |
[
PULC车辆属性识别模型
](
PULC_vehicle_attribute.md
)
| 90.81 |7.2M|2.36ms|
[
推理模型
](
https://paddleclas.bj.bcebos.com/models/PULC/inference/vehicle_attribute_infer.tar
)
/
[
预训练模型
](
https://paddleclas.bj.bcebos.com/models/PULC/pretrained/vehicle_attribute_pretrained.pdparams
)
|
|
vehicle_exists |PULC有车/无车分类模型 | 95.72 | 6.6M | 2.38ms |
[
推理模型
](
https://paddleclas.bj.bcebos.com/models/PULC/inference/vehicle_exists_infer.tar
)
/
[
预训练模型
](
https://paddleclas.bj.bcebos.com/models/PULC/pretrained/vehicle
_exists_pretrained.pdparams
)
|
|
car_exists |
[
PULC有车/无车分类模型
](
PULC_car_exists.md
)
| 95.92 | 6.6M | 2.38ms |
[
推理模型
](
https://paddleclas.bj.bcebos.com/models/PULC/inference/car_exists_infer.tar
)
/
[
预训练模型
](
https://paddleclas.bj.bcebos.com/models/PULC/pretrained/car
_exists_pretrained.pdparams
)
|
| text_image_orientation |
[
PULC含文字图像方向分类模型
](
PULC_text_image_orientation.md
)
| 99.06 | 6.5M | 2.16ms |
[
推理模型
](
https://paddleclas.bj.bcebos.com/models/PULC/inference/text_image_orientation_infer.tar
)
/
[
预训练模型
](
https://paddleclas.bj.bcebos.com/models/PULC/pretrained/text_image_orientation_pretrained.pdparams
)
|
| textline_orientation |
[
PULC文本行方向分类模型
](
PULC_textline_orientation.md
)
| 96.01 |6.5M|2.72ms|
[
推理模型
](
https://paddleclas.bj.bcebos.com/models/PULC/inference/textline_orientation_infer.tar
)
/
[
预训练模型
](
https://paddleclas.bj.bcebos.com/models/PULC/pretrained/textline_orientation_pretrained.pdparams
)
|
| language_classification |
[
PULC语种分类模型
](
PULC_language_classification.md
)
| 99.26 |6.5M|2.58ms|
[
推理模型
](
https://paddleclas.bj.bcebos.com/models/PULC/inference/language_classification_infer.tar
)
/
[
预训练模型
](
https://paddleclas.bj.bcebos.com/models/PULC/pretrained/language_classification_pretrained.pdparams
)
|
...
...
@@ -22,4 +22,4 @@
*
以上所有的模型的 backbone 均为 PPLCNet_x1_0,部分模型大小不同是由于分类的输出大小不同导致的,推理耗时是基于Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz 测试得到,其中测试过程开启 MKLDNN 加速策略,线程数为10。速度测试过程会有轻微波动。
*
person_exists、safety_helmet、vehicle_exists 的评测指标为 TprAtFpr,person_attribute、vehicle_attribute的评测指标为ma、traffic_sign、text_image_orientation、textline_orientation、language_classification的评测指标为Top-1 Acc。
\ No newline at end of file
*
person_exists、safety_helmet、car_exists 的评测指标为 TprAtFpr,person_attribute、vehicle_attribute的评测指标为ma、traffic_sign、text_image_orientation、textline_orientation、language_classification的评测指标为Top-1 Acc。
docs/zh_CN/PULC/PULC_person_attribute.md
浏览文件 @
bcf37d28
...
...
@@ -56,7 +56,7 @@
**备注:**
*
关于PP
LCNet的介绍可以参考
[
PPLCNet介绍
](
../models/PP-LCNet.md
)
,相关论文可以查阅
[
PP
LCNet paper
](
https://arxiv.org/abs/2109.15099
)
。
*
关于PP
-LCNet的介绍可以参考
[
PP-LCNet介绍
](
../models/PP-LCNet.md
)
,相关论文可以查阅
[
PP-
LCNet paper
](
https://arxiv.org/abs/2109.15099
)
。
<a
name=
"2"
></a>
...
...
@@ -251,7 +251,7 @@ python3 tools/infer.py \
### 4.1 SKL-UGI 知识蒸馏
SKL-UGI 知识蒸馏是 PaddleClas 提出的一种简单有效的知识蒸馏方法,关于该方法的介绍,可以参考
[
SKL-UGI 知识蒸馏
](
@ruoyu
)
。
SKL-UGI 知识蒸馏是 PaddleClas 提出的一种简单有效的知识蒸馏方法,关于该方法的介绍,可以参考
[
SKL-UGI 知识蒸馏
](
../advanced_tutorials/ssld.md
)
。
<a
name=
"4.1.1"
></a>
...
...
@@ -292,7 +292,7 @@ python3 -m paddle.distributed.launch \
## 5. 超参搜索
在
[
3.2 节
](
#3.2
)
和
[
4.1 节
](
#4.1
)
所使用的超参数是根据 PaddleClas 提供的
`SHAS 超参数搜索策略`
搜索得到的,如果希望在自己的数据集上得到更好的结果,可以参考
[
SHAS 超参数搜索策略
](
#TODO
)
来获得更好的训练超参数。
在
[
3.2 节
](
#3.2
)
和
[
4.1 节
](
#4.1
)
所使用的超参数是根据 PaddleClas 提供的
`SHAS 超参数搜索策略`
搜索得到的,如果希望在自己的数据集上得到更好的结果,可以参考
[
SHAS 超参数搜索策略
](
PULC_train.md#4-超参搜索
)
来获得更好的训练超参数。
**备注:**
此部分内容是可选内容,搜索过程需要较长的时间,您可以根据自己的硬件情况来选择执行。如果没有更换数据集,可以忽略此节内容。
...
...
@@ -428,4 +428,4 @@ PaddleClas 提供了基于 Paddle Lite 来完成模型端侧部署的示例,
Paddle2ONNX 支持将 PaddlePaddle 模型格式转化到 ONNX 模型格式。通过 ONNX 可以完成将 Paddle 模型到多种推理引擎的部署,包括TensorRT/OpenVINO/MNN/TNN/NCNN,以及其它对 ONNX 开源格式进行支持的推理引擎或硬件。更多关于 Paddle2ONNX 的介绍,可以参考
[
Paddle2ONNX 代码仓库
](
https://github.com/PaddlePaddle/Paddle2ONNX
)
。
PaddleClas 提供了基于 Paddle2ONNX 来完成 inference 模型转换 ONNX 模型并作推理预测的示例,您可以参考
[
Paddle2ONNX 模型转换与预测
](
@shuilong
)
来完成相应的部署工作。
PaddleClas 提供了基于 Paddle2ONNX 来完成 inference 模型转换 ONNX 模型并作推理预测的示例,您可以参考
[
Paddle2ONNX 模型转换与预测
](
../../../deploy/paddle2onnx/readme.md
)
来完成相应的部署工作。
docs/zh_CN/PULC/PULC_person_exists.md
浏览文件 @
bcf37d28
...
...
@@ -58,7 +58,7 @@
**备注:**
*
`Tpr`
指标的介绍可以参考
[
3.2 小节
](
#3.2
)
的备注部分,延时是基于 Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz 测试得到,开启 MKLDNN 加速策略,线程数为10。
*
关于
PPLCNet 的介绍可以参考
[
PPLCNet 介绍
](
../models/PP-LCNet.md
)
,相关论文可以查阅
[
PP
LCNet paper
](
https://arxiv.org/abs/2109.15099
)
。
*
关于
PP-LCNet的介绍可以参考
[
PP-LCNet介绍
](
../models/PP-LCNet.md
)
,相关论文可以查阅
[
PP-
LCNet paper
](
https://arxiv.org/abs/2109.15099
)
。
<a
name=
"2"
></a>
...
...
@@ -190,7 +190,7 @@ cd ../
*
关于
`train_list.txt`
、
`val_list.txt`
的格式说明,可以参考
[
PaddleClas 分类数据集格式说明
](
../data_preparation/classification_dataset.md#1-数据集格式说明
)
。
*
关于如何得到蒸馏的标签文件可以参考
[
知识蒸馏标签获得方法
](
@ruoyu
)
。
*
关于如何得到蒸馏的标签文件可以参考
[
知识蒸馏标签获得方法
](
../advanced_tutorials/ssld.md#3.2
)
。
<a
name=
"3.3"
></a>
...
...
@@ -239,13 +239,13 @@ python3 tools/eval.py \
```
python
python3
tools
/
infer
.
py
\
-
c
.
/
ppcls
/
configs
/
PULC
/
person_exists
/
PPLCNet_x1_0
.
yaml
\
-
o
Global
.
pretrained_model
=
output
/
PPLCNet_x1_0
/
best_model
\
-
o
Global
.
pretrained_model
=
output
/
PPLCNet_x1_0
/
best_model
```
输出结果如下:
```
[{'class_ids': [
0], 'scores': [0.9878496769815683], 'label_names': ['nobody'], 'file_name': './dataset/person_exists/val/objects365_01780637
.jpg'}]
[{'class_ids': [
1], 'scores': [0.9999976], 'label_names': ['someone'], 'file_name': 'deploy/images/PULC/person_exists/objects365_02035329
.jpg'}]
```
**备注:**
...
...
@@ -265,7 +265,7 @@ python3 tools/infer.py \
### 4.1 SKL-UGI 知识蒸馏
SKL-UGI 知识蒸馏是 PaddleClas 提出的一种简单有效的知识蒸馏方法,关于该方法的介绍,可以参考
[
SKL-UGI 知识蒸馏
](
@ruoyu
)
。
SKL-UGI 知识蒸馏是 PaddleClas 提出的一种简单有效的知识蒸馏方法,关于该方法的介绍,可以参考
[
SKL-UGI 知识蒸馏
](
../advanced_tutorials/ssld.md
)
。
<a
name=
"4.1.1"
></a>
...
...
@@ -278,7 +278,7 @@ export CUDA_VISIBLE_DEVICES=0,1,2,3
python3
-m
paddle.distributed.launch
\
--gpus
=
"0,1,2,3"
\
tools/train.py
\
-c
./ppcls/configs/PULC/person_exists/PPLCNet
/PPLCNet
_x1_0.yaml
\
-c
./ppcls/configs/PULC/person_exists/PPLCNet_x1_0.yaml
\
-o
Arch.name
=
ResNet101_vd
```
...
...
@@ -306,7 +306,7 @@ python3 -m paddle.distributed.launch \
## 5. 超参搜索
在
[
3.2 节
](
#3.2
)
和
[
4.1 节
](
#4.1
)
所使用的超参数是根据 PaddleClas 提供的
`SHAS 超参数搜索策略`
搜索得到的,如果希望在自己的数据集上得到更好的结果,可以参考
[
SHAS 超参数搜索策略
](
#TODO
)
来获得更好的训练超参数。
在
[
3.2 节
](
#3.2
)
和
[
4.1 节
](
#4.1
)
所使用的超参数是根据 PaddleClas 提供的
`SHAS 超参数搜索策略`
搜索得到的,如果希望在自己的数据集上得到更好的结果,可以参考
[
SHAS 超参数搜索策略
](
PULC_train.md#4-超参搜索
)
来获得更好的训练超参数。
**备注:**
此部分内容是可选内容,搜索过程需要较长的时间,您可以根据自己的硬件情况来选择执行。如果没有更换数据集,可以忽略此节内容。
...
...
@@ -447,4 +447,4 @@ PaddleClas 提供了基于 Paddle Lite 来完成模型端侧部署的示例,
Paddle2ONNX 支持将 PaddlePaddle 模型格式转化到 ONNX 模型格式。通过 ONNX 可以完成将 Paddle 模型到多种推理引擎的部署,包括TensorRT/OpenVINO/MNN/TNN/NCNN,以及其它对 ONNX 开源格式进行支持的推理引擎或硬件。更多关于 Paddle2ONNX 的介绍,可以参考
[
Paddle2ONNX 代码仓库
](
https://github.com/PaddlePaddle/Paddle2ONNX
)
。
PaddleClas 提供了基于 Paddle2ONNX 来完成 inference 模型转换 ONNX 模型并作推理预测的示例,您可以参考
[
Paddle2ONNX 模型转换与预测
](
@shuilong
)
来完成相应的部署工作。
PaddleClas 提供了基于 Paddle2ONNX 来完成 inference 模型转换 ONNX 模型并作推理预测的示例,您可以参考
[
Paddle2ONNX 模型转换与预测
](
../../../deploy/paddle2onnx/readme.md
)
来完成相应的部署工作。
docs/zh_CN/PULC/PULC_quickstart.md
浏览文件 @
bcf37d28
...
...
@@ -12,6 +12,7 @@
-
[
2. 快速体验
](
#2
)
-
[
2.1 命令行使用
](
#2.1
)
-
[
2.2 Python脚本使用
](
#2.2
)
-
[
2.3 模型列表
](
#2.3
)
-
[
3.小结
](
#3
)
<a
name=
"1"
></a>
...
...
@@ -24,15 +25,15 @@
-
您的机器安装的是 CUDA9 或 CUDA10,请运行以下命令安装
```
bash
python3
-m
pip
install
paddlepaddle-gpu
-i
https://mirror.baidu.com/pypi/simple
```
```
bash
python3
-m
pip
install
paddlepaddle-gpu
-i
https://mirror.baidu.com/pypi/simple
```
-
您的机器是CPU,请运行以下命令安装
```
bash
python3
-m
pip
install
paddlepaddle
-i
https://mirror.baidu.com/pypi/simple
```
```
bash
python3
-m
pip
install
paddlepaddle
-i
https://mirror.baidu.com/pypi/simple
```
更多的版本需求,请参照
[
飞桨官网安装文档
](
https://www.paddlepaddle.org.cn/install/quick
)
中的说明进行操作。
...
...
@@ -41,14 +42,16 @@
### 1.2 安装 PaddleClas whl 包
```
bash
pip
install
paddleclas
pip
3
install
paddleclas
```
<a
name=
"2"
></a>
## 2. 快速体验
PaddleClas 提供了一系列测试图片,里边包含人、车、OCR等方向的多个场景大的demo数据。点击
[
这里
](
https://paddleclas.bj.bcebos.com/data/PULC/pulc_demo_imgs.zip
)
下载并解压,然后在终端中切换到相应目录。
PaddleClas 提供了一系列测试图片,里边包含人、车、OCR等方向的多个场景大的demo数据。点击
[
这里
](
https://paddleclas.bj.bcebos.com/data/PULC/pulc_demo_imgs.zip
)
下载并解压,然后在终端中切换到相应目录。
<a
name=
"2.1"
></a>
...
...
@@ -73,7 +76,7 @@ Predict complete!
若预测结果为
`nobody`
,表示该图中没有人,若预测结果为
`someone`
,则表示该图中有人。此处预测结果为
`nobody`
,表示该图中没有人。
**备注**
: 更换其他预测的数据时,只需要改变
`--infer_imgs=xx`
中的字段即可,支持传入整个文件夹,如需要替换模型,更改
`--model_name`
中的模型名字即可,模型名字可以参考
[
模型库
](
./PULC_model_list.md
)
。
**备注**
: 更换其他预测的数据时,只需要改变
`--infer_imgs=xx`
中的字段即可,支持传入整个文件夹,如需要替换模型,更改
`--model_name`
中的模型名字即可,模型名字可以参考
[
2.3 模型列表
](
#2.3
)
。
<a
name=
"2.2"
></a>
...
...
@@ -95,8 +98,25 @@ print(next(result))
[{'class_ids': [0], 'scores': [0.9955421453341842], 'label_names': ['nobody'], 'filename': 'pulc_demo_imgs/person_exists/objects365_01780782.jpg'}]
```
**备注**
:
`model.predict()`
为可迭代对象(
`generator`
),因此需要使用
`next()`
函数或
`for`
循环对其迭代调用。每次调用将以
`batch_size`
为单位进行一次预测,并返回预测结果, 默认
`batch_size`
为 1,如果需要更改
`batch_size`
,实例化模型时,需要指定
`batch_size`
,如
`model = paddleclas.PaddleClas(model_name="person_exists", batch_size=2)`
。更换其他模型只需要替换
`model_name`
,
`model_name`
,可以参考
[
模型库
](
./PULC_model_list.md
)
。
**备注**
:
`model.predict()`
为可迭代对象(
`generator`
),因此需要使用
`next()`
函数或
`for`
循环对其迭代调用。每次调用将以
`batch_size`
为单位进行一次预测,并返回预测结果, 默认
`batch_size`
为 1,如果需要更改
`batch_size`
,实例化模型时,需要指定
`batch_size`
,如
`model = paddleclas.PaddleClas(model_name="person_exists", batch_size=2)`
。更换其他模型只需要替换
`model_name`
,
`model_name`
,可以参考
[
2.3 模型列表
](
#2.3
)
。
<a
name=
"2.3"
></a>
### 2.3 模型列表
PULC 系列模型的名称和简介如下:
|模型名称|模型简介|
| --- | --- |
| person_exists | PULC有人/无人分类模型 |
| person_attribute | PULC人体属性识别模型 |
| safety_helmet | PULC佩戴安全帽分类模型 |
| traffic_sign | PULC交通标志分类模型 |
| vehicle_attribute | PULC车辆属性识别模型 |
| car_exists | PULC有车/无车分类模型 |
| text_image_orientation | PULC含文字图像方向分类模型 |
| textline_orientation | PULC文本行方向分类模型 |
| language_classification | PULC语种分类模型 |
<a
name=
"3"
></a>
...
...
@@ -104,7 +124,7 @@ print(next(result))
通过本节内容,相信您已经熟练掌握 PaddleClas whl 包的 PULC 模型使用方法并获得了初步效果。
PULC 方法产出的系列模型在人、车、OCR等方向的多个场景中均验证有效,用超轻量模型就可实现与 SwinTransformer 模型接近的精度,预测速度提高 40+ 倍。并且打通数据、模型训练、压缩和推理部署全流程,
您可以参考
[
文档教程
](
./PULC_train.md
)
,正式开启 PULC 的体验之旅
。
PULC 方法产出的系列模型在人、车、OCR等方向的多个场景中均验证有效,用超轻量模型就可实现与 SwinTransformer 模型接近的精度,预测速度提高 40+ 倍。并且打通数据、模型训练、压缩和推理部署全流程,
具体地,您可以参考
[
PULC有人/无人分类模型
](
PULC_person_exists.md
)
、
[
PULC人体属性识别模型
](
PULC_person_attribute.md
)
、
[
PULC佩戴安全帽分类模型
](
PULC_safety_helmet.md
)
、
[
PULC交通标志分类模型
](
PULC_traffic_sign.md
)
、
[
PULC车辆属性识别模型
](
PULC_vehicle_attribute.md
)
、
[
PULC有车/无车分类模型
](
PULC_car_exists.md
)
、
[
PULC含文字图像方向分类模型
](
PULC_text_image_orientation.md
)
、
[
PULC文本行方向分类模型
](
PULC_textline_orientation.md
)
、
[
PULC语种分类模型
](
PULC_language_classification.md
)
。
...
...
docs/zh_CN/PULC/PULC_safety_helmet.md
浏览文件 @
bcf37d28
...
...
@@ -44,18 +44,19 @@
|-------|-----------|----------|---------------|---------------|
| SwinTranformer_tiny | 93.57 | 91.32 | 107 | 使用ImageNet预训练模型 |
| Res2Net200_vd_26w_4s | 98.92 | 80.99 | 284 | 使用ImageNet预训练模型 |
| MobileNetV3_small_x0_35 |
96.50
| 2.85 | 1.6 | 使用ImageNet预训练模型 |
| PPLCNet_x1_0 | 93.2
9
| 2.03 | 6.5 | 使用ImageNet预训练模型 |
| PPLCNet_x1_0 | 98.
07
| 2.03 | 6.5 | 使用SSLD预训练模型 |
| MobileNetV3_small_x0_35 |
84.83
| 2.85 | 1.6 | 使用ImageNet预训练模型 |
| PPLCNet_x1_0 | 93.2
7
| 2.03 | 6.5 | 使用ImageNet预训练模型 |
| PPLCNet_x1_0 | 98.
16
| 2.03 | 6.5 | 使用SSLD预训练模型 |
| PPLCNet_x1_0 | 99.30 | 2.03 | 6.5 | 使用SSLD预训练模型+EDA策略|
|
<b>
PPLCNet_x1_0
<b>
|
<b>
99.38
<b>
|
<b>
2.03
<b>
|
<b>
6.5
<b>
| 使用SSLD预训练模型+EDA策略+UDML知识蒸馏策略|
从表中可以看出,在使用服务器端大模型作为 backbone 时,SwinTranformer_tiny 精度较低,Res2Net200_vd_26w_4s 精度较高,但服务器端大模型推理速度普遍较慢。将 backboone 替换为轻量级模型 MobileNetV3_small_x0_35 后,速度可以大幅提升,但是精度显著降低。在将 backbone 替换为 PPLCNet_x1_0
,精度较 MobileNetV3_small_x0_35 提高约 30 个百分点,与此同时速度快 20% 以上。在此基础上,将 PPLCNet_x1_0 的预训练模型替换为 SSLD 预训练模型后,在对推理速度无影响的前提下,精度提升约 4.8 个百分点,进一步地使用 EDA 策略后,精度可以再提升 0.7 个百分点。此时,PPLCNet_x1_0 已经接近了 Res2Net200_vd_26w_4s 模型的精度,但是速度快 70+ 倍。最后,在使用 UDML 知识蒸馏后,精度可以再提升 0.5 个百分点。此时,PPLCNet_x1_0 已经超过了 Res2Net200_vd_26w_4s 模型的精度,但速度是其 70 余倍
。下面详细介绍关于 PULC 安全帽模型的训练方法和推理部署方法。
从表中可以看出,在使用服务器端大模型作为 backbone 时,SwinTranformer_tiny 精度较低,Res2Net200_vd_26w_4s 精度较高,但服务器端大模型推理速度普遍较慢。将 backboone 替换为轻量级模型 MobileNetV3_small_x0_35 后,速度可以大幅提升,但是精度显著降低。在将 backbone 替换为 PPLCNet_x1_0
后,精度较 MobileNetV3_small_x0_35 提高约 8.5 个百分点,与此同时速度快 20% 以上。在此基础上,将 PPLCNet_x1_0 的预训练模型替换为 SSLD 预训练模型后,在对推理速度无影响的前提下,精度提升约 4.9 个百分点,进一步地使用 EDA 策略后,精度可以再提升 1.1 个百分点。此时,PPLCNet_x1_0 已经超过 Res2Net200_vd_26w_4s 模型的精度,但是速度快 70+ 倍。最后,在使用 UDML 知识蒸馏后,精度可以再提升 0.08 个百分点
。下面详细介绍关于 PULC 安全帽模型的训练方法和推理部署方法。
**备注:**
*
`Tpr`
指标的介绍可以参考
[
3.3小节
](
#3.3
)
的备注部分,延时是基于 Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz 测试得到,开启MKLDNN加速策略,线程数为10。
*
关于PPLCNet的介绍可以参考
[
PPLCNet介绍
](
../models/PP-LCNet.md
)
,相关论文可以查阅
[
PPLCNet paper
](
https://arxiv.org/abs/2109.15099
)
。
*
关于PP-LCNet的介绍可以参考
[
PP-LCNet介绍
](
../models/PP-LCNet.md
)
,相关论文可以查阅
[
PP-LCNet paper
](
https://arxiv.org/abs/2109.15099
)
。
<a
name=
"2"
></a>
...
...
@@ -247,7 +248,7 @@ python3 tools/infer.py \
### 4.1 UDML 知识蒸馏
UDML 知识蒸馏是一种简单有效的知识蒸馏方法,关于该方法的介绍,可以参考
[
UDML 知识蒸馏
](
@ruoyu
)
。
UDML 知识蒸馏是一种简单有效的知识蒸馏方法,关于该方法的介绍,可以参考
[
UDML 知识蒸馏
](
../advanced_tutorials/knowledge_distillation.md#1.2.3
)
。
<a
name=
"4.1.1"
></a>
...
...
@@ -269,7 +270,7 @@ python3 -m paddle.distributed.launch \
## 5. 超参搜索
在
[
3.2 节
](
#3.2
)
和
[
4.1 节
](
#4.1
)
所使用的超参数是根据 PaddleClas 提供的
`SHAS 超参数搜索策略`
搜索得到的,如果希望在自己的数据集上得到更好的结果,可以参考
[
SHAS 超参数搜索策略
](
#TODO
)
来获得更好的训练超参数。
在
[
3.2 节
](
#3.2
)
和
[
4.1 节
](
#4.1
)
所使用的超参数是根据 PaddleClas 提供的
`SHAS 超参数搜索策略`
搜索得到的,如果希望在自己的数据集上得到更好的结果,可以参考
[
SHAS 超参数搜索策略
](
PULC_train.md#4-超参搜索
)
来获得更好的训练超参数。
**备注**
:此部分内容是可选内容,搜索过程需要较长的时间,您可以根据自己的硬件情况来选择执行。如果没有更换数据集,可以忽略此节内容。
...
...
@@ -409,4 +410,4 @@ PaddleClas 提供了基于 Paddle Lite 来完成模型端侧部署的示例,
Paddle2ONNX 支持将 PaddlePaddle 模型格式转化到 ONNX 模型格式。通过 ONNX 可以完成将 Paddle 模型到多种推理引擎的部署,包括TensorRT/OpenVINO/MNN/TNN/NCNN,以及其它对 ONNX 开源格式进行支持的推理引擎或硬件。更多关于 Paddle2ONNX 的介绍,可以参考
[
Paddle2ONNX 代码仓库
](
https://github.com/PaddlePaddle/Paddle2ONNX
)
。
PaddleClas 提供了基于 Paddle2ONNX 来完成 inference 模型转换 ONNX 模型并作推理预测的示例,您可以参考
[
Paddle2ONNX 模型转换与预测
](
@shuilong
)
来完成相应的部署工作。
PaddleClas 提供了基于 Paddle2ONNX 来完成 inference 模型转换 ONNX 模型并作推理预测的示例,您可以参考
[
Paddle2ONNX 模型转换与预测
](
../../../deploy/paddle2onnx/readme.md
)
来完成相应的部署工作。
docs/zh_CN/PULC/PULC_text_image_orientation.md
浏览文件 @
bcf37d28
...
...
@@ -49,7 +49,9 @@
从表中可以看出,backbone 为 SwinTranformer_tiny 时精度比较高,但是推理速度较慢。将 backboone 替换为轻量级模型 MobileNetV3_small_x0_35 后,速度提升明显,但精度有了大幅下降。将 backbone 替换为 PPLCNet_x1_0 时,速度略为提升,同时精度较 MobileNetV3_small_x0_35 高了 14.24 个百分点。在此基础上,使用 SSLD 预训练模型后,在不改变推理速度的前提下,精度可以提升 0.17 个百分点,进一步地,当使用SHAS超参数搜索策略搜索最优超参数后,精度可以再提升 1.04 个百分点。此时,PPLCNet_x1_0 与 SwinTranformer_tiny 的精度差别不大,但是速度明显变快。关于 PULC 的训练方法和推理部署方法将在下面详细介绍。
**备注:**
关于PPLCNet的介绍可以参考
[
PPLCNet介绍
](
../models/PP-LCNet.md
)
,相关论文可以查阅
[
PPLCNet paper
](
https://arxiv.org/abs/2109.15099
)
。
**备注:**
*
关于PP-LCNet的介绍可以参考
[
PP-LCNet介绍
](
../models/PP-LCNet.md
)
,相关论文可以查阅
[
PP-LCNet paper
](
https://arxiv.org/abs/2109.15099
)
。
<a
name=
"2"
></a>
...
...
@@ -183,13 +185,13 @@ cd ../
└── label_list.txt
```
其中
`img_0/`
、
`img_90/`
、
`img_180/`
和
`img_270/`
分别存放了4个角度的训练集和验证集数据。
`train_list.txt`
和
`test_list.txt`
分别为训练集和验证集的标签文件,
`train_list.txt.debug`
和
`test_list.txt.debug`
分别为训练集和验证集的
`debug`
标签文件,其分别是
`train_list.txt`
和
`test_list.txt`
的子集,用该文件可以快速体验本案例的流程。
`distill_data/`
是补充文字数据,该集合和
`train`
集合的混合数据用于本案例的
`SKL-UGI知识蒸馏策略`
,对应的训练标签文件为
`train_list_for_distill.txt`
。关于如何得到蒸馏的标签可以参考
[
知识蒸馏标签获得
](
@ruoyu
)
。
其中
`img_0/`
、
`img_90/`
、
`img_180/`
和
`img_270/`
分别存放了4个角度的训练集和验证集数据。
`train_list.txt`
和
`test_list.txt`
分别为训练集和验证集的标签文件,
`train_list.txt.debug`
和
`test_list.txt.debug`
分别为训练集和验证集的
`debug`
标签文件,其分别是
`train_list.txt`
和
`test_list.txt`
的子集,用该文件可以快速体验本案例的流程。
`distill_data/`
是补充文字数据,该集合和
`train`
集合的混合数据用于本案例的
`SKL-UGI知识蒸馏策略`
,对应的训练标签文件为
`train_list_for_distill.txt`
。关于如何得到蒸馏的标签可以参考
[
知识蒸馏标签获得
](
../advanced_tutorials/ssld.md#3.2
)
。
**备注:**
*
关于
`train_list.txt`
、
`val_list.txt`
的格式说明,可以参考
[
PaddleClas分类数据集格式说明
](
../data_preparation/classification_dataset.md#1-数据集格式说明
)
。
*
关于如何得到蒸馏的标签文件可以参考
[
知识蒸馏标签获得方法
](
@ruoyu
)
。
*
关于如何得到蒸馏的标签文件可以参考
[
知识蒸馏标签获得方法
](
../advanced_tutorials/ssld.md#3.2
)
。
<a
name=
"3.3"
></a>
...
...
@@ -255,7 +257,7 @@ python3 tools/infer.py \
### 4.1 SKL-UGI 知识蒸馏
SKL-UGI 知识蒸馏是 PaddleClas 提出的一种简单有效的知识蒸馏方法,关于该方法的介绍,可以参考
[
SKL-UGI 知识蒸馏
](
@ruoyu
)
。
SKL-UGI 知识蒸馏是 PaddleClas 提出的一种简单有效的知识蒸馏方法,关于该方法的介绍,可以参考
[
SKL-UGI 知识蒸馏
](
../advanced_tutorials/ssld.md
)
。
<a
name=
"4.1.1"
></a>
...
...
@@ -297,7 +299,7 @@ python3 -m paddle.distributed.launch \
## 5. 超参搜索
在
[
3.2 节
](
#3.2
)
和
[
4.1 节
](
#4.1
)
所使用的超参数是根据 PaddleClas 提供的
`SHAS 超参数搜索策略`
搜索得到的,如果希望在自己的数据集上得到更好的结果,可以参考
[
SHAS 超参数搜索策略
](
#TODO
)
来获得更好的训练超参数。
在
[
3.2 节
](
#3.2
)
和
[
4.1 节
](
#4.1
)
所使用的超参数是根据 PaddleClas 提供的
`SHAS 超参数搜索策略`
搜索得到的,如果希望在自己的数据集上得到更好的结果,可以参考
[
SHAS 超参数搜索策略
](
PULC_train.md#4-超参搜索
)
来获得更好的训练超参数。
**备注:**
此部分内容是可选内容,搜索过程需要较长的时间,您可以根据自己的硬件情况来选择执行。如果没有更换数据集,可以忽略此节内容。
...
...
@@ -435,4 +437,4 @@ PaddleClas 提供了基于 Paddle Lite 来完成模型端侧部署的示例,
Paddle2ONNX 支持将 PaddlePaddle 模型格式转化到 ONNX 模型格式。通过 ONNX 可以完成将 Paddle 模型到多种推理引擎的部署,包括TensorRT/OpenVINO/MNN/TNN/NCNN,以及其它对 ONNX 开源格式进行支持的推理引擎或硬件。更多关于 Paddle2ONNX 的介绍,可以参考
[
Paddle2ONNX 代码仓库
](
https://github.com/PaddlePaddle/Paddle2ONNX
)
。
PaddleClas 提供了基于 Paddle2ONNX 来完成 inference 模型转换 ONNX 模型并作推理预测的示例,您可以参考
[
Paddle2ONNX 模型转换与预测
](
@shuilong
)
来完成相应的部署工作。
PaddleClas 提供了基于 Paddle2ONNX 来完成 inference 模型转换 ONNX 模型并作推理预测的示例,您可以参考
[
Paddle2ONNX 模型转换与预测
](
../../../deploy/paddle2onnx/readme.md
)
来完成相应的部署工作。
docs/zh_CN/PULC/PULC_textline_orientation.md
浏览文件 @
bcf37d28
...
...
@@ -58,7 +58,7 @@
*
其中不带
\*
的模型表示分辨率为224x224,带
\*
的模型表示分辨率为48x192(h
*w),数据增强从网络中的 stride 改为 `[2, [2, 1], [2, 1], [2, 1], [2, 1]]`,其中,外层列表中的每一个元素代表网络结构下采样层的stride,该策略为 [PaddleOCR](https://github.com/PaddlePaddle/PaddleOCR) 提供的文本行方向分类器方案。带\*\*的模型表示分辨率为80x160(h*
w), 网络中的 stride 改为
`[2, [2, 1], [2, 1], [2, 1], [2, 1]]`
,其中,外层列表中的每一个元素代表网络结构下采样层的stride,此分辨率是经过
[
SHAS 超参数搜索策略
](
#TODO
)
搜索得到的。
*
延时是基于 Intel(R) Xeon(R) Gold 6148 CPU @ 2.40GHz 测试得到,开启 MKLDNN 加速策略,线程数为10。
*
关于PP
LCNet的介绍可以参考
[
PPLCNet介绍
](
../models/PP-LCNet.md
)
,相关论文可以查阅
[
PP
LCNet paper
](
https://arxiv.org/abs/2109.15099
)
。
*
关于PP
-LCNet的介绍可以参考
[
PP-LCNet介绍
](
../models/PP-LCNet.md
)
,相关论文可以查阅
[
PP-
LCNet paper
](
https://arxiv.org/abs/2109.15099
)
。
<a
name=
"2"
></a>
...
...
@@ -255,7 +255,7 @@ python3 tools/infer.py \
### 4.1 SKL-UGI 知识蒸馏
SKL-UGI 知识蒸馏是 PaddleClas 提出的一种简单有效的知识蒸馏方法,关于该方法的介绍,可以参考
[
SKL-UGI 知识蒸馏
](
@ruoyu
)
。
SKL-UGI 知识蒸馏是 PaddleClas 提出的一种简单有效的知识蒸馏方法,关于该方法的介绍,可以参考
[
SKL-UGI 知识蒸馏
](
../advanced_tutorials/ssld.md
)
。
<a
name=
"4.1.1"
></a>
...
...
@@ -296,7 +296,7 @@ python3 -m paddle.distributed.launch \
## 5. 超参搜索
在
[
3.2 节
](
#3.2
)
和
[
4.1 节
](
#4.1
)
所使用的超参数是根据 PaddleClas 提供的
`SHAS 超参数搜索策略`
搜索得到的,如果希望在自己的数据集上得到更好的结果,可以参考
[
SHAS 超参数搜索策略
](
#TODO
)
来获得更好的训练超参数。
在
[
3.2 节
](
#3.2
)
和
[
4.1 节
](
#4.1
)
所使用的超参数是根据 PaddleClas 提供的
`SHAS 超参数搜索策略`
搜索得到的,如果希望在自己的数据集上得到更好的结果,可以参考
[
SHAS 超参数搜索策略
](
PULC_train.md#4-超参搜索
)
来获得更好的训练超参数。
**备注:**
此部分内容是可选内容,搜索过程需要较长的时间,您可以根据自己的硬件情况来选择执行。
...
...
@@ -436,4 +436,4 @@ PaddleClas 提供了基于 Paddle Lite 来完成模型端侧部署的示例,
Paddle2ONNX 支持将 PaddlePaddle 模型格式转化到 ONNX 模型格式。通过 ONNX 可以完成将 Paddle 模型到多种推理引擎的部署,包括TensorRT/OpenVINO/MNN/TNN/NCNN,以及其它对 ONNX 开源格式进行支持的推理引擎或硬件。更多关于 Paddle2ONNX 的介绍,可以参考
[
Paddle2ONNX 代码仓库
](
https://github.com/PaddlePaddle/Paddle2ONNX
)
。
PaddleClas 提供了基于 Paddle2ONNX 来完成 inference 模型转换 ONNX 模型并作推理预测的示例,您可以参考
[
Paddle2ONNX 模型转换与预测
](
@shuilong
)
来完成相应的部署工作。
PaddleClas 提供了基于 Paddle2ONNX 来完成 inference 模型转换 ONNX 模型并作推理预测的示例,您可以参考
[
Paddle2ONNX 模型转换与预测
](
../../../deploy/paddle2onnx/readme.md
)
来完成相应的部署工作。
docs/zh_CN/PULC/PULC_traffic_sign.md
浏览文件 @
bcf37d28
...
...
@@ -55,7 +55,7 @@
**备注:**
*
关于PP
LCNet的介绍可以参考
[
PPLCNet介绍
](
../models/PP-LCNet.md
)
,相关论文可以查阅
[
PP
LCNet paper
](
https://arxiv.org/abs/2109.15099
)
。
*
关于PP
-LCNet的介绍可以参考
[
PP-LCNet介绍
](
../models/PP-LCNet.md
)
,相关论文可以查阅
[
PP-
LCNet paper
](
https://arxiv.org/abs/2109.15099
)
。
<a
name=
"2"
></a>
...
...
@@ -211,7 +211,7 @@ traffic_sign
*
关于
`label_list_train.txt`
、
`label_list_test.txt`
的格式说明,可以参考
[
PaddleClas分类数据集格式说明
](
../data_preparation/classification_dataset.md#1-数据集格式说明
)
。
*
关于如何得到蒸馏的标签文件可以参考
[
知识蒸馏标签获得方法
](
@ruoyu
)
。
*
关于如何得到蒸馏的标签文件可以参考
[
知识蒸馏标签获得方法
](
../advanced_tutorials/ssld.md
)
。
<a
name=
"3.3"
></a>
...
...
@@ -278,7 +278,7 @@ python3 tools/infer.py \
### 4.1 SKL-UGI 知识蒸馏
SKL-UGI 知识蒸馏是 PaddleClas 提出的一种简单有效的知识蒸馏方法,关于该方法的介绍,可以参考
[
SKL-UGI 知识蒸馏
](
@ruoyu
)
。
SKL-UGI 知识蒸馏是 PaddleClas 提出的一种简单有效的知识蒸馏方法,关于该方法的介绍,可以参考
[
SKL-UGI 知识蒸馏
](
../advanced_tutorials/ssld.md#3.2
)
。
<a
name=
"4.1.1"
></a>
...
...
@@ -319,7 +319,7 @@ python3 -m paddle.distributed.launch \
## 5. 超参搜索
在
[
3.2 节
](
#3.2
)
和
[
4.1 节
](
#4.1
)
所使用的超参数是根据 PaddleClas 提供的
`SHAS 超参数搜索策略`
搜索得到的,如果希望在自己的数据集上得到更好的结果,可以参考
[
SHAS 超参数搜索策略
](
#TODO
)
来获得更好的训练超参数。
在
[
3.2 节
](
#3.2
)
和
[
4.1 节
](
#4.1
)
所使用的超参数是根据 PaddleClas 提供的
`SHAS 超参数搜索策略`
搜索得到的,如果希望在自己的数据集上得到更好的结果,可以参考
[
SHAS 超参数搜索策略
](
PULC_train.md#4-超参搜索
)
来获得更好的训练超参数。
**备注:**
此部分内容是可选内容,搜索过程需要较长的时间,您可以根据自己的硬件情况来选择执行。如果没有更换数据集,可以忽略此节内容。
...
...
@@ -457,4 +457,4 @@ PaddleClas 提供了基于 Paddle Lite 来完成模型端侧部署的示例,
Paddle2ONNX 支持将 PaddlePaddle 模型格式转化到 ONNX 模型格式。通过 ONNX 可以完成将 Paddle 模型到多种推理引擎的部署,包括TensorRT/OpenVINO/MNN/TNN/NCNN,以及其它对 ONNX 开源格式进行支持的推理引擎或硬件。更多关于 Paddle2ONNX 的介绍,可以参考
[
Paddle2ONNX 代码仓库
](
https://github.com/PaddlePaddle/Paddle2ONNX
)
。
PaddleClas 提供了基于 Paddle2ONNX 来完成 inference 模型转换 ONNX 模型并作推理预测的示例,您可以参考
[
Paddle2ONNX 模型转换与预测
](
@shuilong
)
来完成相应的部署工作。
PaddleClas 提供了基于 Paddle2ONNX 来完成 inference 模型转换 ONNX 模型并作推理预测的示例,您可以参考
[
Paddle2ONNX 模型转换与预测
](
../../../deploy/paddle2onnx/readme.md
)
来完成相应的部署工作。
docs/zh_CN/PULC/PULC_train.md
浏览文件 @
bcf37d28
## 超轻量图像分类方案PULC
### 0. PULC方案简介
图像分类是计算机视觉的基础算法之一,是企业应用中最常见的算法,也是许多CV应用的重要组成部分。
近年来,骨干网络模型发展迅速,Imagenet的精度纪录被不断刷新。然而,这些模型在实用场景的表现有时却不尽如人意。
一方面,精度高的模型往往体积大,运算慢,常常难以满足实际部署需求;另一方面,选择了合适的模型之后,往往还需要经验丰富的工程师进行调参,
费时费力。PaddleClas为了解决企业应用难题,让分类模型的训练和调参更加容易,总结推出了实用轻量图像分类解决方案PULC。
PULC融合了骨干网络、数据增广、蒸馏等多种前沿算法,可以自动训练得到轻量且高精度的图像分类模型。
方案在人、车、OCR等方向的多个场景中均验证有效,用超轻量模型就可实现与SwinTransformer模型接近的精度,预测速度提高50倍。
------
## 目录
-
[
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
)
<a
name=
"1"
></a>
### 1. PULC方案简介
图像分类是计算机视觉的基础算法之一,是企业应用中最常见的算法,也是许多 CV 应用的重要组成部分。近年来,骨干网络模型发展迅速,ImageNet 的精度纪录被不断刷新。然而,这些模型在实用场景的表现有时却不尽如人意。一方面,精度高的模型往往体积大,运算慢,常常难以满足实际部署需求;另一方面,选择了合适的模型之后,往往还需要经验丰富的工程师进行调参,费时费力。PaddleClas 为了解决企业应用难题,让分类模型的训练和调参更加容易,总结推出了实用轻量图像分类解决方案(PULC, Practical Ultra Lightweight Classification)。PULC融合了骨干网络、数据增广、蒸馏等多种前沿算法,可以自动训练得到轻量且高精度的图像分类模型。
PULC 方案在人、车、OCR等方向的多个场景中均验证有效,用超轻量模型就可实现与SwinTransformer模型接近的精度,预测速度提高 40+ 倍。
<div
align=
"center"
>
<img
src=
"https://user-images.githubusercontent.com/19523330/17
2054976-e12d2c9b-439f-469d-b520-56bb5c3e6215.png"
/>
<img
src=
"https://user-images.githubusercontent.com/19523330/17
3011854-b10fcd7a-b799-4dfd-a1cf-9504952a3c44.png"
width =
"800"
/>
</div>
方案主要包括4部分,分别是:PP-LCNet轻量级骨干网络、SSLD预训练权重、数据增强策略集成和SKL-UGI知识蒸馏算法。此外,我们还采用了超参搜索的方法,高效优化训练中的超参数。
下面,我们以有人/无人场景为例,对方案进行说明。
方案主要包括 4 部分,分别是:PP-LCNet轻量级骨干网络、SSLD预训练权重、数据增强策略集成(EDA)和 SKL-UGI 知识蒸馏算法。此外,我们还采用了超参搜索的方法,高效优化训练中的超参数。下面,我们以有人/无人场景为例,对方案进行说明。
**注**
:针对一些特定场景,我们提供了基础的训练文档供参考,例如
[
有人/无人分类模型
](
PULC_person_exists.md
)
等,您可以在
[
这里
](
)找到这些文档。
如果这些文档中的方法不能满足您的需求,或者您需要自定义训练任务,您可以参考本文档。
**备注**
:针对一些特定场景,我们提供了基础的训练文档供参考,例如
[
有人/无人分类模型
](
PULC_person_exists.md
)
等,您可以在
[
这里
](
./PULC_model_list.md
)
找到这些文档。如果这些文档中的方法不能满足您的需求,或者您需要自定义训练任务,您可以参考本文档。
### 1. 数据准备
#### 1.1 数据集格式说明
<a
name=
"2"
></a>
PaddleClas 使用
`txt`
格式文件指定训练集和测试集,以有人无人场景为例,其中
`train_list.txt`
和
`val_list.txt`
的格式形如:
### 2. 数据准备
```
shell
<a
name=
"2.1"
></a>
#### 2.1 数据集格式说明
PaddleClas 使用
`txt`
格式文件指定训练集和测试集,以有人/无人场景为例,其中需要指定
`train_list.txt`
和
`val_list.txt`
当作训练集和验证集的数据标签,格式形如:
```
# 每一行采用"空格"分隔图像路径与标注
train/1.jpg 0
train/10.jpg 1
...
```
如果您想获取更多常用分类数据集的信息,可以参考文档
[
常见分类说明
](
../data_preparation/classification_dataset.md
)
。
// todo@cuicheng v2.4.1 1.2有人无人场景数据获取代码。整理obj365数据提取的数据并说明。
如果您想获取更多常用分类数据集的信息,可以参考文档可以参考
[
PaddleClas 分类数据集格式说明
](
../data_preparation/classification_dataset.md#1-数据集格式说明
)
。
<a
name=
"2.2"
></a>
#### 2.2 标注文件生成
#### 1.2 标注文件生成
如果您已经有实际场景中的数据,那么按照上节的格式进行标注即可。这里,我们提供了一个快速生成数据的脚本,您只需要将不同类别的数据分别放在文件夹中,运行脚本即可生成标注文件。
// todo 数据脚本。
### 2. 使用标准分类配置进行训练
#### 2.1 骨干网络PP-LCNet
PULC采用了轻量骨干网络PP-LCNet,相比同精度竞品速度快50%,您可以在
[
这里
](
../models/PP-LCNet.md
)
找到详细介绍。
首先,假设您存放数据的路径为
`./train`
,
`train/`
中包含了每个类别的数据,类别号从 0 开始,每个类别的文件夹中有具体的图像数据。
```
shell
train
├── 0
│ ├── 0.jpg
│ ├── 1.jpg
│ └── ...
└── 1
├── 0.jpg
├── 1.jpg
└── ...
└── ...
```
```
shell
tree
-r
-i
-f
train |
grep
-E
"jpg|JPG|jpeg|JPEG|png|PNG"
|
awk
-F
"/"
'{print $0" "$2}'
>
train_list.txt
```
其中,如果需要传入更多的数据类型,可以增加
`grep -E`
后的内容,
`$2`
中的
`2`
为类别号文件夹的层级。
**备注:**
以上为数据集获取和生成的方法介绍,这里您可以直接下载有人/无人场景数据快速开始体验。
进入 PaddleClas 目录。
```
cd path_to_PaddleClas
```
进入
`dataset/`
目录,下载并解压有人/无人场景的数据。
```
shell
cd
dataset
wget https://paddleclas.bj.bcebos.com/data/PULC/person_exists.tar
tar
-xf
person_exists.tar
cd
../
```
<a
name=
"3"
></a>
### 3. 使用标准分类配置进行训练
<a
name=
"3.1"
></a>
#### 3.1 骨干网络PP-LCNet
PULC采用了轻量骨干网络PP-LCNet,相比同精度竞品速度快50%,您可以在
[
PP-LCNet介绍
](
../models/PP-LCNet.md
)
查阅该骨干网络的详细介绍。
直接使用PP-LCNet训练的命令为:
**todo**
```
shell
export
CUDA_VISIBLE_DEVICES
=
0,1,2,3
python3
-m
paddle.distributed.launch
\
--gpus
=
"0,1,2,3"
\
tools/train.py
\
-c
./ppcls/configs/PULC/person_exists/PPLCNet_x1_0.yaml
```
为了方便性能对比,我们也提供了大模型 SwinTransformer 和轻量模型 MobileNetV3 的配置文件,您可以使用命令训练:
SwinTransformer:
```
shell
export
CUDA_VISIBLE_DEVICES
=
0,1,2,3
python3
-m
paddle.distributed.launch
\
--gpus
=
"0,1,2,3"
\
tools/train.py
\
-c
./ppcls/configs/PULC/person_exists/SwinTransformer_tiny_patch4_window7_224.yaml
```
MobileNetV3:
```
shell
export
CUDA_VISIBLE_DEVICES
=
0,1,2,3
python3
-m
paddle.distributed.launch
\
--gpus
=
"0,1,2,3"
\
tools/train.py
\
-c
./ppcls/configs/PULC/person_exists/MobileNetV3_small_x0_35.yaml
```
训练得到的模型精度对比如下表。
| 模型 | Tpr(%) | 延时(ms) | 存储(M) | 策略 |
|-------|-----------|----------|---------------|---------------|
| SwinTranformer_tiny | 95.69 | 95.30 | 107 | 使用 ImageNet 预训练模型 |
| MobileNetV3_small_x0_35 | 68.25 | 2.85 | 1.6 | 使用 ImageNet 预训练模型 |
| PPLCNet_x1_0 | 89.57 | 2.12 | 6.5 | 使用 ImageNet 预训练模型 |
从中可以看出,PP-LCNet 的速度比 SwinTransformer 快很多,但是精度也略低。下面我们通过一系列优化来提高 PP-LCNet 模型的精度。
<a
name=
"3.2"
></a>
#### 3.2 SSLD预训练权重
SSLD 是百度自研的半监督蒸馏算法,在 ImageNet 数据集上,模型精度可以提升 3-7 个点,您可以在
[
SSLD 介绍
](
../advanced_tutorials/ssld.md
)
找到详细介绍。我们发现,使用SSLD预训练权重,可以有效提升应用分类模型的精度。此外,在训练中使用更小的分辨率,可以有效提升模型精度。同时,我们也对学习率进行了优化。
基于以上三点改进,我们训练得到模型精度为 92.1%,提升 2.6%。
<a
name=
"3.3"
></a>
#### 3.3 EDA数据增强策略
为了方便性能对比,我们也提供了大模型SwinTransformer和轻量模型MobileNet的配置文件,您可以使用命令训练:
数据增强是视觉算法中常用的优化策略,可以对模型精度有明显提升。除了传统的 RandomCrop,RandomFlip 等方法之外,我们还应用了 RandomAugment 和 RandomErasing。您可以在
[
数据增强介绍
](
../advanced_tutorials/DataAugmentation.md
)
找到详细介绍。
由于这两种数据增强对图片的修改较大,使分类任务变难,在一些小数据集上可能会导致模型欠拟合,我们将提前设置好这两种方法启用的概率。
基于以上改进,我们训练得到模型精度为 93.43%,提升 1.3%。
**todo**
<a
name=
"3.4"
></a>
训练得到的模型精度对比如下表。从中可以看出,LCNet的速度比SwinTransformer快很多,但是精度也略低。
下面我们通过一系列优化来提高PP-LCNet模型的精度。
#### 3.4 SKL-UGI模型蒸馏
#### 2.2 SSLD预训练权重
SSLD是百度自研的半监督蒸馏算法,在ImageNet数据集上,模型精度可以提升3-7个点,您可以在
[
这里
](
../algorithm_introduction/#2
)
找到详细介绍。
我们发现,使用SSLD预训练权重,可以提升应用分类模型的精度。此外,使用SSLD预训练权重也有助于其他策略精度提升。
此外,根据
**todo**
,在训练中使用略低一点的分辨率,可以有效提升模型精度。同时,我们也对学习率进行了优化。
基于以上三点改进,我们训练得到模型精度为
**todo**
,提升
**todo**
。
模型蒸馏是一种可以有效提升小模型精度的方法,您可以在
[
知识蒸馏介绍
](
../advanced_tutorials/ssld.md
)
找到详细介绍。我们选择 ResNet101_vd 作为教师模型进行蒸馏。为了适应蒸馏过程,我们在此也对网络不同 stage 的学习率进行了调整。基于以上改进,我们训练得到模型精度为 95.6%,提升 1.4%。
#### 2.3 EDA数据增广策略
数据增广是视觉算法中常用的优化策略,可以对模型精度有明显提升。除了传统的RandomCrop,RandomFlip等方法之外,我们还应用了RandomAugment和RandomErasing。
您可以在
[
这里
](
../advanced_tutorials/DataAugmentation.md
)
找到详细介绍。
由于这两种数据增强对图片的修改较大,使任务变难,在一些小数据集上可能会导致模型欠拟合,我们将这两种方法启用的概率设为10%。
基于以上改进,我们训练得到模型精度为
**todo**
,提升
**todo**
。
<a
name=
"3.5"
></a>
#### 2.4 SKL-UGI模型蒸馏
模型蒸馏是一种可以有效提升小模型精度的方法,您可以在
[
这里
](
todo@ruoyu
)
找到详细介绍。
我们选择ResNet101作为教师模型进行蒸馏。
**todo @cuicheng,对lr_mult进行说明**
基于以上改进,我们训练得到模型精度为
**todo**
,提升:
**
todo。
#### 2.5 总结
经过以上方法优化,PP-LCNet最终精度达到
**todo**
,达到了大模型的精度水平。我们将实验结果总结如下表:
**todo**
我们在其他9个场景中也使用了同样的优化策略,得到如下结果:
**todo**
#### 3.5 总结
从结果可以看出,PULC优化方法在多个应用场景中均可提升模型精度。虽然并非每种方法都有正向收益,但是使用PULC可以大大减少模型优化的工作量,快速得到精度较高的模型。
经过以上方法优化,PP-LCNet最终精度达到 95.6%,达到了大模型的精度水平。我们将实验结果总结如下表:
| 模型 | Tpr(%) | 延时(ms) | 存储(M) | 策略 |
|-------|-----------|----------|---------------|---------------|
| SwinTranformer_tiny | 95.69 | 95.30 | 107 | 使用 ImageNet 预训练模型 |
| MobileNetV3_small_x0_35 | 68.25 | 2.85 | 1.6 | 使用 ImageNet 预训练模型 |
| PPLCNet_x1_0 | 89.57 | 2.12 | 6.5 | 使用 ImageNet 预训练模型 |
| PPLCNet_x1_0 | 92.10 | 2.12 | 6.5 | 使用 SSLD 预训练模型 |
| PPLCNet_x1_0 | 93.43 | 2.12 | 6.5 | 使用 SSLD 预训练模型+EDA 策略|
|
<b>
PPLCNet_x1_0
<b>
|
<b>
95.60
<b>
|
<b>
2.12
<b>
|
<b>
6.5
<b>
| 使用 SSLD 预训练模型+EDA 策略+SKL-UGI 知识蒸馏策略|
我们在其他 8 个场景中也使用了同样的优化策略,得到如下结果:
| 场景 | 大模型 | 大模型精度(%) | 小模型 | 小模型精度(%) |
|----------|----------|----------|----------|----------|
| 人体属性识别 | Res2Net200_vd | 81.25 | PPLCNet_x1_0 | 78.59 |
| 佩戴安全帽分类 | Res2Net200_vd| 98.92 | PPLCNet_x1_0 |99.38 |
| 交通标志分类 | SwinTransformer_tiny | 98.11 | PPLCNet_x1_0 | 98.35 |
| 车辆属性识别 | Res2Net200_vd_26w_4s | 91.36 | PPLCNet_x1_0 | 90.81 |
| 有车/无车分类 | SwinTransformer_tiny | 97.71 | PPLCNet_x1_0 | 95.92 |
| 含文字图像方向分类 | SwinTransformer_tiny |99.12 | PPLCNet_x1_0 | 99.06 |
| 文本行方向分类 | SwinTransformer_tiny | 93.61 | PPLCNet_x1_0 | 96.01 |
| 语种分类 | SwinTransformer_tiny | 98.12 | PPLCNet_x1_0 | 99.26 |
从结果可以看出,PULC 方案在多个应用场景中均可提升模型精度。使用 PULC 方案可以大大减少模型优化的工作量,快速得到精度较高的模型。
<a
name=
"4"
></a>
### 4. 超参搜索
### 3. 超参搜索
在上述训练过程中,我们调节了学习率、数据增广方法开启概率、分阶段学习率倍数等参数。
这些参数在不同场景中最优值可能并不相同。我们提供了一个快速超参搜索的脚本,将超参调优的过程自动化。
这个脚本会遍历搜索值列表中的参数来替代默认配置中的参数,依次训练,最终选择精度最高的模型所对应的参数作为搜索结果。
#### 3.1 基于默认配置搜索
配置文件
[
search.yaml
](
todo
)
定义了有人/无人场景超参搜索的配置,使用命令
**todo**
,可以使用默认的超参数搜索配置进行训练,最终可得训练结果为:
**todo**
#### 3.2 自定义搜索配置
<a
name=
"4.1"
></a>
#### 4.1 基于默认配置搜索
配置文件
[
search.yaml
](
../../ppcls/configs/PULC/person_exists/search.yaml
)
定义了有人/无人场景超参搜索的配置,使用如下命令即可完成超参数的搜索。
```
bash
python3 tools/search_strategy.py
-c
ppcls/configs/PULC/person_exists/search.yaml
```
**备注**
:关于搜索部分,我们也在不断优化,敬请期待。
<a
name=
"4.2"
></a>
#### 4.2 自定义搜索配置
您也可以根据训练结果或调参经验,修改超参搜索的配置。
修改
**todo**
字段,可以修改学习率搜索值列表;
修改
**todo**
字段,可以修改RandAugment开启概率的搜索值列表;
修改
`lrs`
中的
`search_values`
字段,可以修改学习率搜索值列表;
修改
`resolutions`
中的
`search_values`
字段,可以修改分辨率的搜索值列表;
修改
`ra_probs`
中的
`search_values`
字段,可以修改 RandAugment 开启概率的搜索值列表;
修改
`re_probs`
中的
`search_values`
字段,可以修改 RnadomErasing 开启概率的搜索值列表;
修改
**todo**
字段,可以修改RnadomErasing开启概率的
搜索值列表;
修改
`lr_mult_list`
中的
`search_values`
字段,可以修改 lr_mult
搜索值列表;
修改
**todo**
字段,可以修改lr_mult搜索值列表;
修改
`teacher`
中的
`search_values`
字段,可以修改教师模型的搜索列表。
修改
**todo**
字段,可以修改教师模型的搜索列表
。
搜索完成后,会在
`output/search_person_exists`
中生成最终的结果,其中,除
`search_res`
外
`output/search_person_exists`
中目录为对应的每个搜索的超参数的结果的权重和训练日志文件,
`search_res`
对应的是蒸馏后的结果,也就是最终的模型,该模型的权重保存在
`output/output_dir/search_person_exists/DistillationModel/best_model_student.pdparams`
。
docs/zh_CN/PULC/PULC_vehicle_attribute.md
浏览文件 @
bcf37d28
...
...
@@ -56,7 +56,7 @@
**备注:**
*
关于PP
LCNet的介绍可以参考
[
PPLCNet介绍
](
../models/PP-LCNet.md
)
,相关论文可以查阅
[
PP
LCNet paper
](
https://arxiv.org/abs/2109.15099
)
。
*
关于PP
-LCNet的介绍可以参考
[
PP-LCNet介绍
](
../models/PP-LCNet.md
)
,相关论文可以查阅
[
PP-
LCNet paper
](
https://arxiv.org/abs/2109.15099
)
。
<a
name=
"2"
></a>
...
...
@@ -271,7 +271,7 @@ python3 tools/infer.py \
### 4.1 SKL-UGI 知识蒸馏
SKL-UGI 知识蒸馏是 PaddleClas 提出的一种简单有效的知识蒸馏方法,关于该方法的介绍,可以参考
[
SKL-UGI 知识蒸馏
](
@ruoyu
)
。
SKL-UGI 知识蒸馏是 PaddleClas 提出的一种简单有效的知识蒸馏方法,关于该方法的介绍,可以参考
[
SKL-UGI 知识蒸馏
](
../advanced_tutorials/ssld.md
)
。
<a
name=
"4.1.1"
></a>
...
...
@@ -312,7 +312,7 @@ python3 -m paddle.distributed.launch \
## 5. 超参搜索
在
[
3.2 节
](
#3.2
)
和
[
4.1 节
](
#4.1
)
所使用的超参数是根据 PaddleClas 提供的
`SHAS 超参数搜索策略`
搜索得到的,如果希望在自己的数据集上得到更好的结果,可以参考
[
SHAS 超参数搜索策略
](
#TODO
)
来获得更好的训练超参数。
在
[
3.2 节
](
#3.2
)
和
[
4.1 节
](
#4.1
)
所使用的超参数是根据 PaddleClas 提供的
`SHAS 超参数搜索策略`
搜索得到的,如果希望在自己的数据集上得到更好的结果,可以参考
[
SHAS 超参数搜索策略
](
PULC_train.md#4-超参搜索
)
来获得更好的训练超参数。
**备注:**
此部分内容是可选内容,搜索过程需要较长的时间,您可以根据自己的硬件情况来选择执行。如果没有更换数据集,可以忽略此节内容。
...
...
@@ -451,4 +451,4 @@ PaddleClas 提供了基于 Paddle Lite 来完成模型端侧部署的示例,
Paddle2ONNX 支持将 PaddlePaddle 模型格式转化到 ONNX 模型格式。通过 ONNX 可以完成将 Paddle 模型到多种推理引擎的部署,包括TensorRT/OpenVINO/MNN/TNN/NCNN,以及其它对 ONNX 开源格式进行支持的推理引擎或硬件。更多关于 Paddle2ONNX 的介绍,可以参考
[
Paddle2ONNX 代码仓库
](
https://github.com/PaddlePaddle/Paddle2ONNX
)
。
PaddleClas 提供了基于 Paddle2ONNX 来完成 inference 模型转换 ONNX 模型并作推理预测的示例,您可以参考
[
Paddle2ONNX 模型转换与预测
](
@shuilong
)
来完成相应的部署工作。
PaddleClas 提供了基于 Paddle2ONNX 来完成 inference 模型转换 ONNX 模型并作推理预测的示例,您可以参考
[
Paddle2ONNX 模型转换与预测
](
../../../deploy/paddle2onnx/readme.md
)
来完成相应的部署工作。
docs/zh_CN/advanced_tutorials/ssld.md
浏览文件 @
bcf37d28
...
...
@@ -6,6 +6,7 @@
-
[
1. 算法介绍
](
#1
)
-
[
1.1 知识蒸馏简介
](
#1.1
)
-
[
1.2 SSLD蒸馏策略
](
#1.2
)
-
[
1.2 SKL-UGI蒸馏策略
](
#1.3
)
-
[
2. SSLD预训练模型库
](
#2
)
-
[
3. SSLD使用
](
#3
)
-
[
3.1 加载SSLD模型进行微调
](
#3.1
)
...
...
@@ -69,6 +70,13 @@ SSLD 蒸馏方案的一大特色就是无需使用图像的真值标签,因此
(4)将该数据集与 ImageNet1k 的训练集融合组成最终蒸馏模型所使用的数据集,数据量为 500 万。
<a
name=
"1.3"
></a>
此外,在无标注数据选择的过程中,我们发现使用更加通用的数据,即使不需要严格的数据筛选过程,也可以帮助知识蒸馏任务获得稳定的精度提升,因而提出了SKL-UGI (Symmetrical-KL Unlabeled General Images distillation)知识蒸馏方案。
通用数据可以使用ImageNet数据或者与场景相似的数据集。更多关于SKL-UGI的应用,请参考:
[
超轻量图像分类方案PULC使用教程
](
../PULC/PULC_train.md
)
。
<a
name=
"2"
></a>
## 2. 预训练模型库
...
...
ppcls/configs/PULC/car_exists/MobileNetV3_small_x0_35.yaml
0 → 100644
浏览文件 @
bcf37d28
# global configs
Global
:
checkpoints
:
null
pretrained_model
:
null
output_dir
:
./output/
device
:
gpu
save_interval
:
1
eval_during_train
:
True
eval_interval
:
1
start_eval_epoch
:
10
epochs
:
20
print_batch_step
:
10
use_visualdl
:
False
# used for static mode and model export
image_shape
:
[
3
,
224
,
224
]
save_inference_dir
:
./inference
# training model under @to_static
to_static
:
False
use_dali
:
False
# model architecture
Arch
:
name
:
MobileNetV3_small_x0_35
class_num
:
2
pretrained
:
True
use_sync_bn
:
True
# loss function config for traing/eval process
Loss
:
Train
:
-
CELoss
:
weight
:
1.0
epsilon
:
0.1
Eval
:
-
CELoss
:
weight
:
1.0
Optimizer
:
name
:
Momentum
momentum
:
0.9
lr
:
name
:
Cosine
learning_rate
:
0.05
warmup_epoch
:
5
regularizer
:
name
:
'
L2'
coeff
:
0.00001
# data loader for train and eval
DataLoader
:
Train
:
dataset
:
name
:
ImageNetDataset
image_root
:
./dataset/car_exists/
cls_label_path
:
./dataset/car_exists/train_list.txt
transform_ops
:
-
DecodeImage
:
to_rgb
:
True
channel_first
:
False
-
RandCropImage
:
size
:
224
-
RandFlipImage
:
flip_code
:
1
-
NormalizeImage
:
scale
:
1.0/255.0
mean
:
[
0.485
,
0.456
,
0.406
]
std
:
[
0.229
,
0.224
,
0.225
]
order
:
'
'
sampler
:
name
:
DistributedBatchSampler
batch_size
:
512
drop_last
:
False
shuffle
:
True
loader
:
num_workers
:
8
use_shared_memory
:
True
Eval
:
dataset
:
name
:
ImageNetDataset
image_root
:
./dataset/car_exists/
cls_label_path
:
./dataset/car_exists/val_list.txt
transform_ops
:
-
DecodeImage
:
to_rgb
:
True
channel_first
:
False
-
ResizeImage
:
resize_short
:
256
-
CropImage
:
size
:
224
-
NormalizeImage
:
scale
:
1.0/255.0
mean
:
[
0.485
,
0.456
,
0.406
]
std
:
[
0.229
,
0.224
,
0.225
]
order
:
'
'
sampler
:
name
:
DistributedBatchSampler
batch_size
:
64
drop_last
:
False
shuffle
:
False
loader
:
num_workers
:
4
use_shared_memory
:
True
Infer
:
infer_imgs
:
deploy/images/PULC/car_exists/objects365_00001507.jpeg
batch_size
:
10
transforms
:
-
DecodeImage
:
to_rgb
:
True
channel_first
:
False
-
ResizeImage
:
resize_short
:
256
-
CropImage
:
size
:
224
-
NormalizeImage
:
scale
:
1.0/255.0
mean
:
[
0.485
,
0.456
,
0.406
]
std
:
[
0.229
,
0.224
,
0.225
]
order
:
'
'
-
ToCHWImage
:
PostProcess
:
name
:
ThreshOutput
threshold
:
0.5
label_0
:
nobody
label_1
:
someone
Metric
:
Train
:
-
TopkAcc
:
topk
:
[
1
,
2
]
Eval
:
-
TprAtFpr
:
max_fpr
:
0.01
-
TopkAcc
:
topk
:
[
1
,
2
]
ppcls/configs/PULC/car_exists/PPLCNet_x1_0.yaml
0 → 100644
浏览文件 @
bcf37d28
# global configs
Global
:
checkpoints
:
null
pretrained_model
:
null
output_dir
:
./output/
device
:
gpu
save_interval
:
1
eval_during_train
:
True
eval_interval
:
1
start_eval_epoch
:
10
epochs
:
20
print_batch_step
:
10
use_visualdl
:
False
# used for static mode and model export
image_shape
:
[
3
,
224
,
224
]
save_inference_dir
:
./inference
# training model under @to_static
to_static
:
False
use_dali
:
False
# model architecture
Arch
:
name
:
PPLCNet_x1_0
class_num
:
2
pretrained
:
True
use_ssld
:
True
use_sync_bn
:
True
# loss function config for traing/eval process
Loss
:
Train
:
-
CELoss
:
weight
:
1.0
Eval
:
-
CELoss
:
weight
:
1.0
Optimizer
:
name
:
Momentum
momentum
:
0.9
lr
:
name
:
Cosine
learning_rate
:
0.0125
warmup_epoch
:
5
regularizer
:
name
:
'
L2'
coeff
:
0.00004
# data loader for train and eval
DataLoader
:
Train
:
dataset
:
name
:
ImageNetDataset
image_root
:
./dataset/car_exists/
cls_label_path
:
./dataset/car_exists/train_list.txt
transform_ops
:
-
DecodeImage
:
to_rgb
:
True
channel_first
:
False
-
RandCropImage
:
size
:
192
-
RandFlipImage
:
flip_code
:
1
-
TimmAutoAugment
:
prob
:
0.5
config_str
:
rand-m9-mstd0.5-inc1
interpolation
:
bicubic
img_size
:
192
-
NormalizeImage
:
scale
:
1.0/255.0
mean
:
[
0.485
,
0.456
,
0.406
]
std
:
[
0.229
,
0.224
,
0.225
]
order
:
'
'
-
RandomErasing
:
EPSILON
:
0.5
sl
:
0.02
sh
:
1.0/3.0
r1
:
0.3
attempt
:
10
use_log_aspect
:
True
mode
:
pixel
sampler
:
name
:
DistributedBatchSampler
batch_size
:
64
drop_last
:
False
shuffle
:
True
loader
:
num_workers
:
8
use_shared_memory
:
True
Eval
:
dataset
:
name
:
ImageNetDataset
image_root
:
./dataset/car_exists
cls_label_path
:
./dataset/car_exists/val_list.txt
transform_ops
:
-
DecodeImage
:
to_rgb
:
True
channel_first
:
False
-
ResizeImage
:
resize_short
:
256
-
CropImage
:
size
:
224
-
NormalizeImage
:
scale
:
1.0/255.0
mean
:
[
0.485
,
0.456
,
0.406
]
std
:
[
0.229
,
0.224
,
0.225
]
order
:
'
'
sampler
:
name
:
DistributedBatchSampler
batch_size
:
64
drop_last
:
False
shuffle
:
False
loader
:
num_workers
:
4
use_shared_memory
:
True
Infer
:
infer_imgs
:
deploy/images/PULC/car_exists/objects365_00001507.jpeg
batch_size
:
10
transforms
:
-
DecodeImage
:
to_rgb
:
True
channel_first
:
False
-
ResizeImage
:
resize_short
:
256
-
CropImage
:
size
:
224
-
NormalizeImage
:
scale
:
1.0/255.0
mean
:
[
0.485
,
0.456
,
0.406
]
std
:
[
0.229
,
0.224
,
0.225
]
order
:
'
'
-
ToCHWImage
:
PostProcess
:
name
:
ThreshOutput
threshold
:
0.9
label_0
:
nobody
label_1
:
someone
Metric
:
Train
:
-
TopkAcc
:
topk
:
[
1
,
2
]
Eval
:
-
TprAtFpr
:
max_fpr
:
0.01
-
TopkAcc
:
topk
:
[
1
,
2
]
ppcls/configs/PULC/car_exists/PPLCNet_x1_0_distillation.yaml
0 → 100644
浏览文件 @
bcf37d28
# global configs
Global
:
checkpoints
:
null
pretrained_model
:
null
output_dir
:
./output
device
:
gpu
save_interval
:
1
eval_during_train
:
True
start_eval_epoch
:
1
eval_interval
:
1
epochs
:
20
print_batch_step
:
10
use_visualdl
:
False
# used for static mode and model export
image_shape
:
[
3
,
224
,
224
]
save_inference_dir
:
./inference
# training model under @to_static
to_static
:
False
use_dali
:
False
# model architecture
Arch
:
name
:
"
DistillationModel"
class_num
:
&class_num
2
# if not null, its lengths should be same as models
pretrained_list
:
# if not null, its lengths should be same as models
freeze_params_list
:
-
True
-
False
use_sync_bn
:
True
models
:
-
Teacher
:
name
:
ResNet101_vd
class_num
:
*class_num
-
Student
:
name
:
PPLCNet_x1_0
class_num
:
*class_num
pretrained
:
True
use_ssld
:
True
infer_model_name
:
"
Student"
# loss function config for traing/eval process
Loss
:
Train
:
-
DistillationDMLLoss
:
weight
:
1.0
model_name_pairs
:
-
[
"
Student"
,
"
Teacher"
]
Eval
:
-
CELoss
:
weight
:
1.0
Optimizer
:
name
:
Momentum
momentum
:
0.9
lr
:
name
:
Cosine
learning_rate
:
0.01
warmup_epoch
:
5
regularizer
:
name
:
'
L2'
coeff
:
0.00004
# data loader for train and eval
DataLoader
:
Train
:
dataset
:
name
:
ImageNetDataset
image_root
:
./dataset/car_exists/
cls_label_path
:
./dataset/car_exists/train_list_for_distill.txt
transform_ops
:
-
DecodeImage
:
to_rgb
:
True
channel_first
:
False
-
RandCropImage
:
size
:
192
-
RandFlipImage
:
flip_code
:
1
-
TimmAutoAugment
:
prob
:
0.0
config_str
:
rand-m9-mstd0.5-inc1
interpolation
:
bicubic
img_size
:
192
-
NormalizeImage
:
scale
:
1.0/255.0
mean
:
[
0.485
,
0.456
,
0.406
]
std
:
[
0.229
,
0.224
,
0.225
]
order
:
'
'
-
RandomErasing
:
EPSILON
:
0.1
sl
:
0.02
sh
:
1.0/3.0
r1
:
0.3
attempt
:
10
use_log_aspect
:
True
mode
:
pixel
sampler
:
name
:
DistributedBatchSampler
batch_size
:
64
drop_last
:
False
shuffle
:
True
loader
:
num_workers
:
16
use_shared_memory
:
True
Eval
:
dataset
:
name
:
ImageNetDataset
image_root
:
./dataset/car_exists/
cls_label_path
:
./dataset/car_exists/val_list.txt
transform_ops
:
-
DecodeImage
:
to_rgb
:
True
channel_first
:
False
-
ResizeImage
:
resize_short
:
256
-
CropImage
:
size
:
224
-
NormalizeImage
:
scale
:
1.0/255.0
mean
:
[
0.485
,
0.456
,
0.406
]
std
:
[
0.229
,
0.224
,
0.225
]
order
:
'
'
sampler
:
name
:
DistributedBatchSampler
batch_size
:
64
drop_last
:
False
shuffle
:
False
loader
:
num_workers
:
4
use_shared_memory
:
True
Infer
:
infer_imgs
:
deploy/images/PULC/car_exists/objects365_00001507.jpeg
batch_size
:
10
transforms
:
-
DecodeImage
:
to_rgb
:
True
channel_first
:
False
-
ResizeImage
:
resize_short
:
256
-
CropImage
:
size
:
224
-
NormalizeImage
:
scale
:
1.0/255.0
mean
:
[
0.485
,
0.456
,
0.406
]
std
:
[
0.229
,
0.224
,
0.225
]
order
:
'
'
-
ToCHWImage
:
PostProcess
:
name
:
ThreshOutput
threshold
:
0.5
label_0
:
nobody
label_1
:
someone
Metric
:
Train
:
-
DistillationTopkAcc
:
model_key
:
"
Student"
topk
:
[
1
,
2
]
Eval
:
-
TprAtFpr
:
max_fpr
:
0.01
-
TopkAcc
:
topk
:
[
1
,
2
]
ppcls/configs/PULC/car_exists/PPLCNet_x1_0_search.yaml
0 → 100644
浏览文件 @
bcf37d28
# global configs
Global
:
checkpoints
:
null
pretrained_model
:
null
output_dir
:
./output/
device
:
gpu
save_interval
:
1
eval_during_train
:
True
eval_interval
:
1
start_eval_epoch
:
10
epochs
:
20
print_batch_step
:
10
use_visualdl
:
False
# used for static mode and model export
image_shape
:
[
3
,
224
,
224
]
save_inference_dir
:
./inference
# training model under @to_static
to_static
:
False
use_dali
:
False
# model architecture
Arch
:
name
:
PPLCNet_x1_0
class_num
:
2
pretrained
:
True
use_ssld
:
True
use_sync_bn
:
True
# loss function config for traing/eval process
Loss
:
Train
:
-
CELoss
:
weight
:
1.0
Eval
:
-
CELoss
:
weight
:
1.0
Optimizer
:
name
:
Momentum
momentum
:
0.9
lr
:
name
:
Cosine
learning_rate
:
0.01
warmup_epoch
:
5
regularizer
:
name
:
'
L2'
coeff
:
0.00004
# data loader for train and eval
DataLoader
:
Train
:
dataset
:
name
:
ImageNetDataset
image_root
:
./dataset/car_exists/
cls_label_path
:
./dataset/car_exists/train_list.txt
transform_ops
:
-
DecodeImage
:
to_rgb
:
True
channel_first
:
False
-
RandCropImage
:
size
:
224
-
RandFlipImage
:
flip_code
:
1
-
TimmAutoAugment
:
prob
:
0.0
config_str
:
rand-m9-mstd0.5-inc1
interpolation
:
bicubic
img_size
:
224
-
NormalizeImage
:
scale
:
1.0/255.0
mean
:
[
0.485
,
0.456
,
0.406
]
std
:
[
0.229
,
0.224
,
0.225
]
order
:
'
'
-
RandomErasing
:
EPSILON
:
0.0
sl
:
0.02
sh
:
1.0/3.0
r1
:
0.3
attempt
:
10
use_log_aspect
:
True
mode
:
pixel
sampler
:
name
:
DistributedBatchSampler
batch_size
:
64
drop_last
:
False
shuffle
:
True
loader
:
num_workers
:
8
use_shared_memory
:
True
Eval
:
dataset
:
name
:
ImageNetDataset
image_root
:
./dataset/car_exists/
cls_label_path
:
./dataset/car_exists/val_list.txt
transform_ops
:
-
DecodeImage
:
to_rgb
:
True
channel_first
:
False
-
ResizeImage
:
resize_short
:
256
-
CropImage
:
size
:
224
-
NormalizeImage
:
scale
:
1.0/255.0
mean
:
[
0.485
,
0.456
,
0.406
]
std
:
[
0.229
,
0.224
,
0.225
]
order
:
'
'
sampler
:
name
:
DistributedBatchSampler
batch_size
:
64
drop_last
:
False
shuffle
:
False
loader
:
num_workers
:
4
use_shared_memory
:
True
Infer
:
infer_imgs
:
deploy/images/PULC/car_exists/objects365_00001507.jpeg
batch_size
:
10
transforms
:
-
DecodeImage
:
to_rgb
:
True
channel_first
:
False
-
ResizeImage
:
resize_short
:
256
-
CropImage
:
size
:
224
-
NormalizeImage
:
scale
:
1.0/255.0
mean
:
[
0.485
,
0.456
,
0.406
]
std
:
[
0.229
,
0.224
,
0.225
]
order
:
'
'
-
ToCHWImage
:
PostProcess
:
name
:
ThreshOutput
threshold
:
0.5
label_0
:
nobody
label_1
:
someone
Metric
:
Train
:
-
TopkAcc
:
topk
:
[
1
,
2
]
Eval
:
-
TprAtFpr
:
max_fpr
:
0.01
-
TopkAcc
:
topk
:
[
1
,
2
]
ppcls/configs/PULC/car_exists/SwinTransformer_tiny_patch4_window7_224.yaml
0 → 100644
浏览文件 @
bcf37d28
# global configs
Global
:
checkpoints
:
null
pretrained_model
:
null
output_dir
:
./output/
device
:
gpu
save_interval
:
1
eval_during_train
:
True
eval_interval
:
1
start_eval_epoch
:
10
epochs
:
20
print_batch_step
:
10
use_visualdl
:
False
# used for static mode and model export
image_shape
:
[
3
,
224
,
224
]
save_inference_dir
:
./inference
# training model under @to_static
to_static
:
False
use_dali
:
False
# mixed precision training
AMP
:
scale_loss
:
128.0
use_dynamic_loss_scaling
:
True
# O1: mixed fp16
level
:
O1
# model architecture
Arch
:
name
:
SwinTransformer_tiny_patch4_window7_224
class_num
:
2
pretrained
:
True
# loss function config for traing/eval process
Loss
:
Train
:
-
CELoss
:
weight
:
1.0
epsilon
:
0.1
Eval
:
-
CELoss
:
weight
:
1.0
Optimizer
:
name
:
AdamW
beta1
:
0.9
beta2
:
0.999
epsilon
:
1e-8
weight_decay
:
0.05
no_weight_decay_name
:
absolute_pos_embed relative_position_bias_table .bias norm
one_dim_param_no_weight_decay
:
True
lr
:
name
:
Cosine
learning_rate
:
1e-4
eta_min
:
2e-6
warmup_epoch
:
5
warmup_start_lr
:
2e-7
# data loader for train and eval
DataLoader
:
Train
:
dataset
:
name
:
ImageNetDataset
image_root
:
./dataset/car_exists/
cls_label_path
:
./dataset/car_exists/train_list.txt
transform_ops
:
-
DecodeImage
:
to_rgb
:
True
channel_first
:
False
-
RandCropImage
:
size
:
224
interpolation
:
bicubic
backend
:
pil
-
RandFlipImage
:
flip_code
:
1
-
TimmAutoAugment
:
config_str
:
rand-m9-mstd0.5-inc1
interpolation
:
bicubic
img_size
:
224
-
NormalizeImage
:
scale
:
1.0/255.0
mean
:
[
0.485
,
0.456
,
0.406
]
std
:
[
0.229
,
0.224
,
0.225
]
order
:
'
'
-
RandomErasing
:
EPSILON
:
0.25
sl
:
0.02
sh
:
1.0/3.0
r1
:
0.3
attempt
:
10
use_log_aspect
:
True
mode
:
pixel
batch_transform_ops
:
-
OpSampler
:
MixupOperator
:
alpha
:
0.8
prob
:
0.5
CutmixOperator
:
alpha
:
1.0
prob
:
0.5
sampler
:
name
:
DistributedBatchSampler
batch_size
:
128
drop_last
:
False
shuffle
:
True
loader
:
num_workers
:
8
use_shared_memory
:
True
Eval
:
dataset
:
name
:
ImageNetDataset
image_root
:
./dataset/car_exists/
cls_label_path
:
./dataset/car_exists/val_list.txt
transform_ops
:
-
DecodeImage
:
to_rgb
:
True
channel_first
:
False
-
ResizeImage
:
resize_short
:
256
-
CropImage
:
size
:
224
-
NormalizeImage
:
scale
:
1.0/255.0
mean
:
[
0.485
,
0.456
,
0.406
]
std
:
[
0.229
,
0.224
,
0.225
]
order
:
'
'
sampler
:
name
:
DistributedBatchSampler
batch_size
:
64
drop_last
:
False
shuffle
:
False
loader
:
num_workers
:
8
use_shared_memory
:
True
Infer
:
infer_imgs
:
deploy/images/PULC/car_exists/objects365_00001507.jpeg
batch_size
:
10
transforms
:
-
DecodeImage
:
to_rgb
:
True
channel_first
:
False
-
ResizeImage
:
resize_short
:
256
-
CropImage
:
size
:
224
-
NormalizeImage
:
scale
:
1.0/255.0
mean
:
[
0.485
,
0.456
,
0.406
]
std
:
[
0.229
,
0.224
,
0.225
]
order
:
'
'
-
ToCHWImage
:
PostProcess
:
name
:
ThreshOutput
threshold
:
0.5
label_0
:
nobody
label_1
:
someone
Metric
:
Train
:
-
TopkAcc
:
topk
:
[
1
,
2
]
Eval
:
-
TprAtFpr
:
max_fpr
:
0.01
-
TopkAcc
:
topk
:
[
1
,
2
]
ppcls/configs/PULC/car_exists/search.yaml
0 → 100644
浏览文件 @
bcf37d28
base_config_file
:
ppcls/configs/PULC/person_exists/PPLCNet_x1_0_search.yaml
distill_config_file
:
ppcls/configs/PULC/person_exists/PPLCNet_x1_0_distillation.yaml
gpus
:
0,1,2,3
output_dir
:
output/search_person_cls
search_times
:
1
search_dict
:
-
search_key
:
lrs
replace_config
:
-
Optimizer.lr.learning_rate
search_values
:
[
0.0075
,
0.01
,
0.0125
]
-
search_key
:
resolutions
replace_config
:
-
DataLoader.Train.dataset.transform_ops.1.RandCropImage.size
-
DataLoader.Train.dataset.transform_ops.3.TimmAutoAugment.img_size
search_values
:
[
176
,
192
,
224
]
-
search_key
:
ra_probs
replace_config
:
-
DataLoader.Train.dataset.transform_ops.3.TimmAutoAugment.prob
search_values
:
[
0.0
,
0.1
,
0.5
]
-
search_key
:
re_probs
replace_config
:
-
DataLoader.Train.dataset.transform_ops.5.RandomErasing.EPSILON
search_values
:
[
0.0
,
0.1
,
0.5
]
-
search_key
:
lr_mult_list
replace_config
:
-
Arch.lr_mult_list
search_values
:
-
[
0.0
,
0.2
,
0.4
,
0.6
,
0.8
,
1.0
]
-
[
0.0
,
0.4
,
0.4
,
0.8
,
0.8
,
1.0
]
-
[
1.0
,
1.0
,
1.0
,
1.0
,
1.0
,
1.0
]
teacher
:
rm_keys
:
-
Arch.lr_mult_list
search_values
:
-
ResNet101_vd
-
ResNet50_vd
final_replace
:
Arch.lr_mult_list
:
Arch.models.1.Student.lr_mult_list
ppcls/configs/PULC/person_exists/PPLCNet_x1_0.yaml
浏览文件 @
bcf37d28
...
...
@@ -54,8 +54,8 @@ DataLoader:
Train
:
dataset
:
name
:
ImageNetDataset
image_root
:
./dataset/person/
cls_label_path
:
./dataset/person/train_list.txt
image_root
:
./dataset/person
_exists
/
cls_label_path
:
./dataset/person
_exists
/train_list.txt
transform_ops
:
-
DecodeImage
:
to_rgb
:
True
...
...
@@ -94,8 +94,8 @@ DataLoader:
Eval
:
dataset
:
name
:
ImageNetDataset
image_root
:
./dataset/person/
cls_label_path
:
./dataset/person/val_list.txt
image_root
:
./dataset/person
_exists
/
cls_label_path
:
./dataset/person
_exists
/val_list.txt
transform_ops
:
-
DecodeImage
:
to_rgb
:
True
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录