Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleClas
提交
2ef671f6
P
PaddleClas
项目概览
PaddlePaddle
/
PaddleClas
大约 1 年 前同步成功
通知
115
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看板
提交
2ef671f6
编写于
10月 29, 2021
作者:
D
dongshuilong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix hyperlink for model_training and slim docs
上级
a5d0e37b
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
32 addition
and
26 deletion
+32
-26
docs/images/algorithm_introduction/fpgm.png
docs/images/algorithm_introduction/fpgm.png
+0
-0
docs/images/algorithm_introduction/quantization.jpg
docs/images/algorithm_introduction/quantization.jpg
+0
-0
docs/images/algorithm_introduction/quantization_formula.png
docs/images/algorithm_introduction/quantization_formula.png
+0
-0
docs/images/algorithm_introduction/quantization_formula_slim.png
...ages/algorithm_introduction/quantization_formula_slim.png
+0
-0
docs/zh_CN_tmp/advanced_tutorials/model_prune_quantization.md
.../zh_CN_tmp/advanced_tutorials/model_prune_quantization.md
+8
-6
docs/zh_CN_tmp/algorithm_introduction/model_prune_quantization.md
...CN_tmp/algorithm_introduction/model_prune_quantization.md
+8
-4
docs/zh_CN_tmp/models_training/classification.md
docs/zh_CN_tmp/models_training/classification.md
+9
-9
docs/zh_CN_tmp/models_training/recognition.md
docs/zh_CN_tmp/models_training/recognition.md
+7
-7
未找到文件。
docs/
zh_CN_tmp
/algorithm_introduction/fpgm.png
→
docs/
images
/algorithm_introduction/fpgm.png
浏览文件 @
2ef671f6
文件已移动
docs/
zh_CN_tmp
/algorithm_introduction/quantization.jpg
→
docs/
images
/algorithm_introduction/quantization.jpg
浏览文件 @
2ef671f6
文件已移动
docs/
zh_CN_tmp
/algorithm_introduction/quantization_formula.png
→
docs/
images
/algorithm_introduction/quantization_formula.png
浏览文件 @
2ef671f6
文件已移动
docs/
zh_CN_tmp
/algorithm_introduction/quantization_formula_slim.png
→
docs/
images
/algorithm_introduction/quantization_formula_slim.png
浏览文件 @
2ef671f6
文件已移动
docs/zh_CN_tmp/advanced_tutorials/model_prune_quantization.md
浏览文件 @
2ef671f6
...
...
@@ -10,7 +10,7 @@
本教程将介绍如何使用飞桨模型压缩库PaddleSlim做PaddleClas模型的压缩,即裁剪、量化功能。
[
PaddleSlim
](
https://github.com/PaddlePaddle/PaddleSlim
)
集成了模型剪枝、量化(包括量化训练和离线量化)、蒸馏和神经网络搜索等多种业界常用且领先的模型压缩功能,如果您感兴趣,可以关注并了解。
在开始本教程之前,建议先了解
[
PaddleClas模型的训练方法
](
../
../zh_CN/tutorials/getting_started
.md
)
以及
[
PaddleSlim
](
https://paddleslim.readthedocs.io/zh_CN/latest/index.html
)
,相关裁剪、量化方法可以参考
[
模型裁剪量化算法介绍文档
](
../algorithm_introduction/model_prune_quantization.md
)
。
在开始本教程之前,建议先了解
[
PaddleClas模型的训练方法
](
../
models_training/classification
.md
)
以及
[
PaddleSlim
](
https://paddleslim.readthedocs.io/zh_CN/latest/index.html
)
,相关裁剪、量化方法可以参考
[
模型裁剪量化算法介绍文档
](
../algorithm_introduction/model_prune_quantization.md
)
。
## 快速开始
...
...
@@ -41,7 +41,7 @@ python3.7 setup.py install
### 2. 准备训练好的模型
PaddleClas提供了一系列训练好的
[
模型
](
../
../zh_CN/models/models_intro.md
)
,如果待量化的模型不在列表中,需要按照
[
常规训练
](
../../zh_CN/tutorials/getting_started
.md
)
方法得到训练好的模型。
PaddleClas提供了一系列训练好的
[
模型
](
../
models/models_intro.md
)
,如果待量化的模型不在列表中,需要按照
[
常规训练
](
../models_training/classification
.md
)
方法得到训练好的模型。
### 3. 模型裁剪、量化
...
...
@@ -69,7 +69,7 @@ cd PaddleClas
python3.7 tools/train.py
-c
ppcls/configs/slim/ResNet50_vd_quantization.yaml
-o
Global.device
=
cpu
```
其中
`yaml`
文件解析详见
[
参考文档
](
../
../zh_CN/tutorials
/config_description.md
)
。为了保证精度,
`yaml`
文件中已经使用
`pretrained model`
.
其中
`yaml`
文件解析详见
[
参考文档
](
../
models_training
/config_description.md
)
。为了保证精度,
`yaml`
文件中已经使用
`pretrained model`
.
*
单机多卡/多机多卡启动
...
...
@@ -84,7 +84,7 @@ python3.7 -m paddle.distributed.launch \
##### 3.1.2 离线量化
**注意**
:目前离线量化,必须使用已经训练好的模型,导出的
`inference model`
进行量化。一般模型导出
`inference model`
可参考
[
教程
](
../
../zh_CN/inference
.md
)
.
**注意**
:目前离线量化,必须使用已经训练好的模型,导出的
`inference model`
进行量化。一般模型导出
`inference model`
可参考
[
教程
](
../
inference_deployment/export_model
.md
)
.
一般来说,离线量化损失模型精度较多。
...
...
@@ -134,8 +134,10 @@ python3.7 tools/export.py \
### 5. 模型部署
上述步骤导出的模型可以通过PaddleLite的opt模型转换工具完成模型转换。
模型部署的可参考
[
移动端模型部署
](
../../../deploy/lite/readme.md
)
上述步骤导出的模型可以直接使用inferecne 进行部署,参考
[
inference部署
](
../inference_deployment/
)
。
也通过PaddleLite的opt模型转换工具,完成inference模型到移动端模型转换,用于移动端的模型部署。
移动端模型部署的可参考
[
移动端模型部署
](
../../../deploy/lite/readme.md
)
## 训练超参数建议
...
...
docs/zh_CN_tmp/algorithm_introduction/model_prune_quantization.md
浏览文件 @
2ef671f6
...
...
@@ -14,23 +14,26 @@
**PACT量化(PArameterized Clipping acTivation**
是一种新的量化方法,该方法通过在量化激活值之前去掉一些离群点,将模型量化带来的精度损失降到最低,甚至比原模型准确率更高。提出方法的背景是作者发现:“在运用权重量化方案来量化activation时,激活值的量化结果和全精度结果相差较大”。作者发现,activation的量化可能引起的误差很大(相较于weight基本在 0到1范围内,activation的值的范围是无限大的,这是RELU的结果),所以提出
**截断式RELU**
的激活函数。该截断的上界,即$α$ 是可学习的参数,这保证了每层能够通过训练学习到不一样的量化范围,最大程度降低量化带来的舍入误差。其中量化的示意图如下图所示,
**PACT**
解决问题的方法是,不断裁剪激活值范围,使得激活值分布收窄,从而降低量化映射损失。
**PACT**
通过对激活数值做裁剪,从而减少激活分布中的离群点,使量化模型能够得到一个更合理的量化scale,降低量化损失。
<div
align=
"center"
>
<img
src=
"./quantization.jpg"
width =
"600"
/>
<img
src=
".
./../images/algorithm_introduction
/quantization.jpg"
width =
"600"
/>
</div>
**PACT**
量化公式如下:
<div
align=
"center"
>
<img
src=
"./quantization_formula.png"
width =
"800"
height=
"100"
/>
<img
src=
".
./../images/algorithm_introduction
/quantization_formula.png"
width =
"800"
height=
"100"
/>
</div>
可以看出PACT思想是用上述量化代替
*ReLU*
函数,对大于零的部分进行一个截断操作,截断阈值为$a$。但是在
*PaddleSlim*
中对上述公式做了进一步的改进,其改进如下:
<div
align=
"center"
>
<img
src=
"./quantization_formula_slim.png"
width =
"550"
height=
"120"
/>
<img
src=
".
./../images/algorithm_introduction
/quantization_formula_slim.png"
width =
"550"
height=
"120"
/>
</div>
经过如上改进后,在激活值和待量化的OP(卷积,全连接等)之间插入
*PACT*
预处理,不只对大于0的分布进行截断,同时也对小于0的部分做同样的限制,从而更好地得到待量化的范围,降低量化损失。同时,截断阈值是一个可训练的参数,在量化训练过程中,模型会自动的找到一个合理的截断阈值,从而进一步降低量化精度损失。
算法具体参数请参考PaddleSlim中
[
参数介绍
](
https://github.com/PaddlePaddle/PaddleSlim/blob/release/2.0.0/docs/zh_cn/api_cn/dygraph/quanter/qat.rst#qat
)
。
...
...
@@ -45,9 +48,10 @@
基于此,
**FPGM**
利用层中filter的几何中心特性,由于那些靠近中心的filter可以被其它的表达,因而可以将其剔除,从而避免了上面提到的两点剪枝条件,从信息的冗余度出发,而不是选择范数少的进行剪枝。下图展示了
**FPGM**
方法与之前方法的不同,具体细节请详看
[
论文
](
https://openaccess.thecvf.com/content_CVPR_2019/papers/He_Filter_Pruning_via_Geometric_Median_for_Deep_Convolutional_Neural_Networks_CVPR_2019_paper.pdf
)
。
<div
align=
"center"
>
<img
src=
"./fpgm.png"
width =
"600"
/>
<img
src=
".
./../images/algorithm_introduction
/fpgm.png"
width =
"600"
/>
</div>
算法具体参数请参考PaddleSlim中
[
参数介绍
](
https://github.com/PaddlePaddle/PaddleSlim/blob/release/2.0.0/docs/zh_cn/api_cn/dygraph/pruners/fpgm_filter_pruner.rst#fpgmfilterpruner
)
。
docs/zh_CN_tmp/models_training/classification.md
浏览文件 @
2ef671f6
...
...
@@ -6,7 +6,7 @@
图像分类是计算机视觉里很基础但又重要的一个领域,其研究成果一直影响着计算机视觉甚至深度学习的发展,图像分类有很多子领域,如多标签分类、细粒度分类等,此处只对单标签图像分类做一个简述。
具体图像分类算法介绍详见
[
文档
](
../algorithm_introduction/
classificaiton_models
.md
)
。
具体图像分类算法介绍详见
[
文档
](
../algorithm_introduction/
image_classification
.md
)
。
## 一、数据集介绍
...
...
@@ -24,15 +24,15 @@ CIFAR-10数据集由10个类的60000个彩色图像组成,图像分辨率为32
### 2.1 数据及其预处理
数据的质量及数量往往可以决定一个模型的好坏。在图像分类领域,数据包括图像及标签。在大部分情形下,带有标签的数据比较匮乏,所以数量很难达到使模型饱和的程度,为了可以使模型学习更多的图像特征,图像数据在进入模型之前要经过很多图像变换或者数据增强,来保证输入图像数据的多样性,从而保证模型有更好的泛化能力。PaddleClas提供了训练ImageNet-1k的标准图像变换,也提供了
8中数据增强的方法,相关代码可以
[
数据处理
](
../../../ppcls/data/preprocess
)
,配置文件可以参考
[
数据增强配置文件
](
../../../ppcls/configs/ImageNet/DataAugment
)
。
数据的质量及数量往往可以决定一个模型的好坏。在图像分类领域,数据包括图像及标签。在大部分情形下,带有标签的数据比较匮乏,所以数量很难达到使模型饱和的程度,为了可以使模型学习更多的图像特征,图像数据在进入模型之前要经过很多图像变换或者数据增强,来保证输入图像数据的多样性,从而保证模型有更好的泛化能力。PaddleClas提供了训练ImageNet-1k的标准图像变换,也提供了
多种数据增强的方法,相关代码可以
[
数据处理
](
../../../ppcls/data/preprocess
)
,配置文件可以参考
[
数据增强配置文件
](
../../../ppcls/configs/ImageNet/DataAugment
)
, 相关数据增强算法详见数据
[
增强介绍文档
](
../algorithm_introduction/DataAugmentation.md
)
。
### 2.2 模型准备
在数据确定后,模型往往决定了最终算法精度的上限,在图像分类领域,经典的模型层出不穷,PaddleClas提供了35个系列共164个ImageNet预训练模型。具体的精度、速度等指标请参考
[
骨干网络和预训练模型库
](
../
ImageNet_models_cn
.md
)
。
在数据确定后,模型往往决定了最终算法精度的上限,在图像分类领域,经典的模型层出不穷,PaddleClas提供了35个系列共164个ImageNet预训练模型。具体的精度、速度等指标请参考
[
骨干网络和预训练模型库
](
../
algorithm_introduction/ImageNet_models
.md
)
。
### 2.3 模型训练
在准备好数据、模型后,便可以开始迭代模型并更新模型的参数。经过多次迭代最终可以得到训练好的模型来做图像分类任务。图像分类的训练过程需要很多经验,涉及很多超参数的设置,PaddleClas提供了一些列的
[
训练调优方法
](
.
./models/Tricks
.md
)
,可以快速助你获得高精度的模型。
在准备好数据、模型后,便可以开始迭代模型并更新模型的参数。经过多次迭代最终可以得到训练好的模型来做图像分类任务。图像分类的训练过程需要很多经验,涉及很多超参数的设置,PaddleClas提供了一些列的
[
训练调优方法
](
.
/train_strategy
.md
)
,可以快速助你获得高精度的模型。
### 2.4 模型评估
...
...
@@ -40,7 +40,7 @@ CIFAR-10数据集由10个类的60000个彩色图像组成,图像分辨率为32
## 三、使用方法介绍
请参考
[
安装指南
](
../
../zh_CN/tutorials/install.md
)
配置运行环境,并根据
[
快速开始
](
../../zh_CN/tutorials/quick_start_new_user
.md
)
文档准备flower102数据集,本章节下面所有的实验均以flower102数据集为例。
请参考
[
安装指南
](
../
installation/install_paddleclas.md
)
配置运行环境,并根据
[
快速开始
](
../quick_start/quick_start_classification
.md
)
文档准备flower102数据集,本章节下面所有的实验均以flower102数据集为例。
PaddleClas目前支持的训练/评估环境如下:
```
shell
...
...
@@ -109,7 +109,7 @@ python3 tools/train.py \
其中
`Arch.pretrained`
设置为
`True`
表示加载ImageNet的预训练模型,此外,
`Arch.pretrained`
也可以指定具体的模型权重文件的地址,使用时需要换成自己的预训练模型权重文件的路径。
我们也提供了大量基于
`ImageNet-1k`
数据集的预训练模型,模型列表及下载地址详见
[
模型库概览
](
../
models/models_intro
.md
)
。
我们也提供了大量基于
`ImageNet-1k`
数据集的预训练模型,模型列表及下载地址详见
[
模型库概览
](
../
algorithm_introduction/ImageNet_models
.md
)
。
<a
name=
"3.1.3"
></a>
...
...
@@ -162,7 +162,7 @@ python3 tools/eval.py \
*
`Arch.name`
:模型名称
*
`Global.pretrained_model`
:待评估的模型预训练模型文件路径
**注意:**
在加载待评估模型时,需要指定模型文件的路径,但无需包含文件后缀名,PaddleClas会自动补齐
`.pdparams`
的后缀,如
[
1.3 模型恢复训练
](
#
1.3
)
。
**注意:**
在加载待评估模型时,需要指定模型文件的路径,但无需包含文件后缀名,PaddleClas会自动补齐
`.pdparams`
的后缀,如
[
3.1.3 模型恢复训练
](
#3.
1.3
)
。
<a
name=
"3.2"
></a>
...
...
@@ -234,10 +234,10 @@ python3 -m paddle.distributed.launch \
-o
Global.pretrained_model
=
./output/MobileNetV3_large_x1_0/best_model
```
参数说明详见
[
1.4 模型评估
](
#1.4
)
。
参数说明详见
[
3.1.4 模型评估
](
#3.1.4
)
。
<a
name=
"model_infer"
></a>
### 3.3 使用预训练模型进行模型预测
模型训练完成之后,可以加载训练得到的预训练模型,进行模型预测。在模型库的
`tools/infer/infer.py`
中提供了完整的示例,只需执行下述命令即可完成模型预测:
...
...
docs/zh_CN_tmp/models_training/recognition.md
浏览文件 @
2ef671f6
...
...
@@ -13,20 +13,20 @@
<div
align=
"center"
>
<img
src=
"../../images/structure.png"
width =
"400"
/>
</div>
体验整体图像识别系统,或查看特征库建立方法,详见
[
图像识别快速开始文档
](
../
../zh_CN/tutorials
/quick_start_recognition.md
)
。其中,图像识别快速开始文档主要讲解整体流程的使用过程。以下内容,主要对上述三个步骤的训练部分进行介绍。
体验整体图像识别系统,或查看特征库建立方法,详见
[
图像识别快速开始文档
](
../
quick_start
/quick_start_recognition.md
)
。其中,图像识别快速开始文档主要讲解整体流程的使用过程。以下内容,主要对上述三个步骤的训练部分进行介绍。
首先,请参考
[
安装指南
](
.
/install
.md
)
配置运行环境。
首先,请参考
[
安装指南
](
.
./installation/install_paddleclas
.md
)
配置运行环境。
具体目录如下:
-
[
主体检测
](
#主体检测
)
-
[
特征模型训练
](
特征模型训练
)
-
[
特征模型训练
](
#
特征模型训练
)
-
[
2.1. 特征模型数据准备与处理
](
#特征模型数据准备与处理
)
-
[
2. 特征模型基于单卡GPU上的训练与评估
](
#特征模型基于单卡GPU上的训练与评估
)
-
[
2.1 特征模型训练
](
#特征模型训练
)
-
[
2.2 特征模型恢复训练
](
#模型恢复训练
)
-
[
2.2 特征模型恢复训练
](
#
特征
模型恢复训练
)
-
[
2.3 特征模型评估
](
#特征模型评估
)
-
[
3. 特征模型导出inference模型
](
#特征导出inference模型
)
-
[
3. 特征模型导出inference模型
](
#特征
模型
导出inference模型
)
-
[
特征检索
](
#特征检索
)
-
[
基础知识
](
#基础知识
)
...
...
@@ -44,7 +44,6 @@
更多关于 PaddleClas 中提供的主体检测的模型介绍与下载请参考:
[
主体检测教程
](
../image_recognition_pipeline/mainbody_detection.md
)
。
<a
name=
"特征模型训练"
></a>
## 二、特征模型训练
...
...
@@ -312,9 +311,10 @@ pip install faiss-cpu==1.7.1post2
<a
name=
"度量学习"
></a>
-
度量学习(Metric Learning)
度量学习研究如何在一个特定的任务上学习一个距离函数,使得该距离函数能够帮助基于近邻的算法 (kNN、k-means等) 取得较好的性能。深度度量学习 (Deep Metric Learning )是度量学习的一种方法,它的目标是学习一个从原始特征到低维稠密的向量空间 (嵌入空间,embedding space) 的映射,使得同类对象在嵌入空间上使用常用的距离函数 (欧氏距离、cosine距离等) 计算的距离比较近,而不同类的对象之间的距离则比较远。深度度量学习在计算机视觉领域取得了非常多的成功的应用,比如人脸识别、商品识别、图像检索、行人重识别等。
度量学习研究如何在一个特定的任务上学习一个距离函数,使得该距离函数能够帮助基于近邻的算法 (kNN、k-means等) 取得较好的性能。深度度量学习 (Deep Metric Learning )是度量学习的一种方法,它的目标是学习一个从原始特征到低维稠密的向量空间 (嵌入空间,embedding space) 的映射,使得同类对象在嵌入空间上使用常用的距离函数 (欧氏距离、cosine距离等) 计算的距离比较近,而不同类的对象之间的距离则比较远。深度度量学习在计算机视觉领域取得了非常多的成功的应用,比如人脸识别、商品识别、图像检索、行人重识别等。
更详细的介绍请参考
[
此文档
](
../algorithm_introduction/metric_learning.md
)
。
<a
name=
"图像检索数据集介绍"
></a>
-
图像检索数据集介绍
-
训练集合(train dataset):用来训练模型,使模型能够学习该集合的图像特征。
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录