Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleClas
提交
b1c5eeff
P
PaddleClas
项目概览
PaddlePaddle
/
PaddleClas
接近 2 年 前同步成功
通知
116
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看板
提交
b1c5eeff
编写于
6月 15, 2021
作者:
D
dongshuilong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add feature_learning doc and modify vehicle,logo doc
上级
f1065839
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
173 addition
and
280 deletion
+173
-280
docs/images/recognotion/vehicle/CompCars.png
docs/images/recognotion/vehicle/CompCars.png
+0
-0
docs/zh_CN/application/feature_learning.md
docs/zh_CN/application/feature_learning.md
+168
-0
docs/zh_CN/application/logo_recognition.md
docs/zh_CN/application/logo_recognition.md
+3
-139
docs/zh_CN/application/vehicle_fine_grained_classfication.md
docs/zh_CN/application/vehicle_fine_grained_classfication.md
+1
-1
docs/zh_CN/application/vehicle_reid.md
docs/zh_CN/application/vehicle_reid.md
+1
-140
未找到文件。
docs/images/recognotion/vehicle/CompCars.png
查看替换文件 @
f1065839
浏览文件 @
b1c5eeff
1.4 MB
|
W:
|
H:
258.5 KB
|
W:
|
H:
2-up
Swipe
Onion skin
docs/zh_CN/application/feature_learning.md
0 → 100644
浏览文件 @
b1c5eeff
# 特征学习
此部分主要是针对
`RecModel`
的训练模式进行说明。
`RecModel`
的训练模式,主要是为了支持车辆识别(车辆细分类、ReID)、Logo识别、动漫人物识别、商品识别等特征学习的应用。与在
`ImageNet`
上训练普通的分类网络不同的是,此训练模式,主要有以下特征
-
支持对
`backbone`
的输出进行截断,即支持提取任意中间层的特征信息
-
支持在
`backbone`
的feature输出层后,添加可配置的网络层,即
`Neck`
部分
-
支持
`ArcMargin`
等
`metric learning`
相关loss函数,提升特征学习能力
## yaml文件说明
`RecModel`
的训练模式与普通分类训练的配置类似,配置文件主要分为以下几个部分:
### 全局设置部分
```
yaml
Global
:
# 如为null则从头开始训练。若指定中间训练保存的状态地址,则继续训练
checkpoints
:
null
# pretrained model路径或者 bool类型
pretrained_model
:
null
# 模型保存路径
output_dir
:
"
./output/"
device
:
"
gpu"
class_num
:
30671
# 保存模型的粒度,每个epoch保存一次
save_interval
:
1
eval_during_train
:
True
eval_interval
:
1
# 训练的epoch数
epochs
:
160
# log输出频率
print_batch_step
:
10
# 是否使用visualdl库
use_visualdl
:
False
# used for static mode and model export
image_shape
:
[
3
,
224
,
224
]
save_inference_dir
:
"
./inference"
# 使用retrival的方式进行评测
eval_mode
:
"
retrieval"
```
### 数据部分
```
yaml
DataLoader
:
Train
:
dataset
:
# 具体使用的Dataset的的名称
name
:
"
VeriWild"
# 使用此数据集的具体参数
image_root
:
"
/work/dataset/VeRI-Wild/images/"
cls_label_path
:
"
/work/dataset/VeRI-Wild/train_test_split/train_list_start0.txt"
# 图像增广策略:ResizeImage、RandFlipImage等
transform_ops
:
-
ResizeImage
:
size
:
224
-
RandFlipImage
:
flip_code
:
1
-
AugMix
:
prob
:
0.5
-
NormalizeImage
:
scale
:
0.00392157
mean
:
[
0.485
,
0.456
,
0.406
]
std
:
[
0.229
,
0.224
,
0.225
]
order
:
'
'
-
RandomErasing
:
EPSILON
:
0.5
sl
:
0.02
sh
:
0.4
r1
:
0.3
mean
:
[
0.
,
0.
,
0.
]
sampler
:
name
:
DistributedRandomIdentitySampler
batch_size
:
128
num_instances
:
2
drop_last
:
False
shuffle
:
True
loader
:
num_workers
:
6
use_shared_memory
:
False
```
`val dataset`
设置与
`train dataset`
除图像增广策略外,设置基本一致
### Backbone的具体设置
```
yaml
Arch
:
# 使用RecModel模式进行训练
name
:
"
RecModel"
# 导出inference model的具体配置
infer_output_key
:
"
features"
infer_add_softmax
:
False
# 使用的Backbone
Backbone
:
name
:
"
ResNet50"
pretrained
:
True
# 使用此层作为Backbone的feature输出,name为ResNet50的full_name
BackboneStopLayer
:
name
:
"
adaptive_avg_pool2d_0"
# Backbone的基础上,新增网络层。此模型添加1x1的卷积层(embedding)
Neck
:
name
:
"
VehicleNeck"
in_channels
:
2048
out_channels
:
512
# 增加ArcMargin, 即ArcLoss的具体实现
Head
:
name
:
"
ArcMargin"
embedding_size
:
512
class_num
:
431
margin
:
0.15
scale
:
32
```
`Neck`
部分为在
`bacbone`
基础上,添加的网络层,可根据需求添加。 如在ReID任务中,添加一个输出长度为512的
`embedding`
层,可由此部分实现。需注意的是,
`Neck`
部分需对应好
`BackboneStopLayer`
层的输出维度。一般来说,
`Neck`
部分为网络的最终特征输出层。
`Head`
部分主要是为了支持
`metric learning`
等具体loss函数,如
`ArcMargin`
(
[
ArcFace Loss
](
https://arxiv.org/abs/1801.07698
)
的fc层的具体实现),在完成训练后,一般将此部分剔除。
### Loss的设置
```
yaml
Loss
:
Train
:
-
CELoss
:
weight
:
1.0
-
SupConLoss
:
weight
:
1.0
# SupConLoss的具体参数
views
:
2
Eval
:
-
CELoss
:
weight
:
1.0
```
训练时同时使用
`CELoss`
和
`SupConLoss`
,权重比例为
`1:1`
,测试时只使用
`CELoss`
### 优化器设置
```
yaml
Optimizer
:
# 使用的优化器名称
name
:
Momentum
# 优化器具体参数
momentum
:
0.9
lr
:
# 使用的学习率调节具体名称
name
:
MultiStepDecay
# 学习率调节算法具体参数
learning_rate
:
0.01
milestones
:
[
30
,
60
,
70
,
80
,
90
,
100
,
120
,
140
]
gamma
:
0.5
verbose
:
False
last_epoch
:
-1
regularizer
:
name
:
'
L2'
coeff
:
0.0005
```
### Eval Metric设置
```
yaml
Metric
:
Eval
:
# 使用Recallk和mAP两种评价指标
-
Recallk
:
topk
:
[
1
,
5
]
-
mAP
:
{}
```
docs/zh_CN/application/logo_recognition.md
浏览文件 @
b1c5eeff
...
@@ -25,43 +25,6 @@ LogoDet-3K数据集是具有完整标注的Logo数据集,有3000个标识类
...
@@ -25,43 +25,6 @@ LogoDet-3K数据集是具有完整标注的Logo数据集,有3000个标识类
-
Normlize:归一化到0~1
-
Normlize:归一化到0~1
-
[
RandomErasing
](
https://arxiv.org/pdf/1708.04896v2.pdf
)
-
[
RandomErasing
](
https://arxiv.org/pdf/1708.04896v2.pdf
)
在配置文件中设置如下,详见
`transform_ops`
部分:
```
yaml
DataLoader
:
Train
:
dataset
:
# 具体使用的Dataset的的名称
name
:
"
LogoDataset"
# 使用此数据集的具体参数
image_root
:
"
dataset/LogoDet-3K-crop/train/"
cls_label_path
:
"
dataset/LogoDet-3K-crop/LogoDet-3K+train.txt"
# 图像增广策略:ResizeImage、RandFlipImage等
transform_ops
:
-
ResizeImage
:
size
:
224
-
RandFlipImage
:
flip_code
:
1
-
AugMix
:
prob
:
0.5
-
NormalizeImage
:
scale
:
0.00392157
mean
:
[
0.485
,
0.456
,
0.406
]
std
:
[
0.229
,
0.224
,
0.225
]
order
:
'
'
-
RandomErasing
:
EPSILON
:
0.5
sampler
:
name
:
DistributedRandomIdentitySampler
batch_size
:
128
num_instances
:
2
drop_last
:
False
shuffle
:
True
loader
:
num_workers
:
6
use_shared_memory
:
False
```
## Backbone的具体设置
## Backbone的具体设置
具体是用
`ResNet50`
作为backbone,主要做了如下修改:
具体是用
`ResNet50`
作为backbone,主要做了如下修改:
...
@@ -74,111 +37,12 @@ DataLoader:
...
@@ -74,111 +37,12 @@ DataLoader:
具体代码:
[
ResNet50_last_stage_stride1
](
../../../ppcls/arch/backbone/variant_models/resnet_variant.py
)
具体代码:
[
ResNet50_last_stage_stride1
](
../../../ppcls/arch/backbone/variant_models/resnet_variant.py
)
在配置文件中Backbone设置如下:
```
yaml
Arch
:
# 使用RecModel模型进行训练,目前支持普通ImageNet和RecModel两个方式
name
:
"
RecModel"
# 导出inference model的具体配置
infer_output_key
:
"
features"
infer_add_softmax
:
False
# 使用的Backbone
Backbone
:
name
:
"
ResNet50_last_stage_stride1"
pretrained
:
True
# 使用此层作为Backbone的feature输出,name为具体层的full_name
BackboneStopLayer
:
name
:
"
adaptive_avg_pool2d_0"
# Backbone的基础上,新增网络层。此模型添加1x1的卷积层(embedding)
Neck
:
name
:
"
VehicleNeck"
in_channels
:
2048
out_channels
:
512
# 增加CircleMargin head
Head
:
name
:
"
CircleMargin"
margin
:
0.35
scale
:
64
embedding_size
:
512
```
## Loss的设置
## Loss的设置
在Logo识别中,使用了
[
Pairwise Cosface + CircleMargin
](
https://arxiv.org/abs/2002.10857
)
联合训练,其中权重比例为1:1
在Logo识别中,使用了
[
Pairwise Cosface + CircleMargin
](
https://arxiv.org/abs/2002.10857
)
联合训练,其中权重比例为1:1
具体代码详见:
[
PairwiseCosface
](
../../../ppcls/loss/pairwisecosface.py
)
、
[
CircleMargin
](
../../../ppcls/arch/gears/circlemargin.py
)
具体代码详见:
[
PairwiseCosface
](
../../../ppcls/loss/pairwisecosface.py
)
、
[
CircleMargin
](
../../../ppcls/arch/gears/circlemargin.py
)
在配置文件中设置如下:
```
yaml
其他部分参数,详见
[
配置文件
](
../../../ppcls/configs/Logo/ResNet50_ReID.yaml
)
。
Loss
:
Train
:
-
CELoss
:
weight
:
1.0
-
PairwiseCosface
:
margin
:
0.35
gamma
:
64
weight
:
1.0
Eval
:
-
CELoss
:
weight
:
1.0
```
## 其他相关设置
### Optimizer设置
```
yaml
Optimizer
:
# 使用的优化器名称
name
:
Momentum
# 优化器具体参数
momentum
:
0.9
lr
:
# 使用的学习率调节具体名称
name
:
Cosine
# 学习率调节算法具体参数
learning_rate
:
0.01
regularizer
:
name
:
'
L2'
coeff
:
0.0001
```
### Eval Metric设置
```
yaml
Metric
:
Eval
:
# 使用Recallk和mAP两种评价指标
-
Recallk
:
topk
:
[
1
,
5
]
-
mAP
:
{}
```
### 其他超参数设置
```
yaml
Global
:
# 如为null则从头开始训练。若指定中间训练保存的状态地址,则继续训练
checkpoints
:
null
pretrained_model
:
null
output_dir
:
"
./output/"
device
:
"
gpu"
class_num
:
3000
# 保存模型的粒度,每个epoch保存一次
save_interval
:
1
eval_during_train
:
True
eval_interval
:
1
# 训练的epoch数
epochs
:
120
# log输出频率
print_batch_step
:
10
# 是否使用visualdl库
use_visualdl
:
False
# used for static mode and model export
image_shape
:
[
3
,
224
,
224
]
save_inference_dir
:
"
./inference"
# 使用retrival的方式进行评测
eval_mode
:
"
retrieval"
```
docs/zh_CN/application/vehicle_fine_grained_classfication.md
浏览文件 @
b1c5eeff
...
@@ -11,7 +11,7 @@
...
@@ -11,7 +11,7 @@
## 数据集
## 数据集
在此demo中,使用
[
CompCars
](
http://mmlab.ie.cuhk.edu.hk/datasets/comp_cars/index.html
)
作为训练数据集。
在此demo中,使用
[
CompCars
](
http://mmlab.ie.cuhk.edu.hk/datasets/comp_cars/index.html
)
作为训练数据集。
<img
src=
"../../images/recognotion/vehicle/CompCars.png"
style=
"zoom:50%;"
/>
<img
src=
"../../images/recognotion/vehicle/CompCars.png"
/>
图像主要来自网络和监控数据,其中网络数据包含163个汽车制造商、1716个汽车型号的汽车。共
**136,726**
张全车图像,
**27,618**
张部分车图像。其中网络汽车数据包含bounding box、视角、5个属性(最大速度、排量、车门数、车座数、汽车类型)。监控数据包含
**50,000**
张前视角图像。
图像主要来自网络和监控数据,其中网络数据包含163个汽车制造商、1716个汽车型号的汽车。共
**136,726**
张全车图像,
**27,618**
张部分车图像。其中网络汽车数据包含bounding box、视角、5个属性(最大速度、排量、车门数、车座数、汽车类型)。监控数据包含
**50,000**
张前视角图像。
值得注意的是,此数据集中需要根据自己的需要生成不同的label,如本demo中,将不同年份生产的相同型号的车辆视为同一类,因此,类别总数为:431类。
值得注意的是,此数据集中需要根据自己的需要生成不同的label,如本demo中,将不同年份生产的相同型号的车辆视为同一类,因此,类别总数为:431类。
...
...
docs/zh_CN/application/vehicle_reid.md
浏览文件 @
b1c5eeff
...
@@ -19,155 +19,16 @@ ReID,也就是 Re-identification,其定义是利用算法,在图像库中
...
@@ -19,155 +19,16 @@ ReID,也就是 Re-identification,其定义是利用算法,在图像库中
-
Normlize:归一化到0~1
-
Normlize:归一化到0~1
-
[
RandomErasing
](
https://arxiv.org/pdf/1708.04896v2.pdf
)
-
[
RandomErasing
](
https://arxiv.org/pdf/1708.04896v2.pdf
)
在配置文件中设置如下,详见
`transform_ops`
部分:
```
yaml
DataLoader
:
Train
:
dataset
:
# 具体使用的Dataset的的名称
name
:
"
VeriWild"
# 使用此数据集的具体参数
image_root
:
"
/work/dataset/VeRI-Wild/images/"
cls_label_path
:
"
/work/dataset/VeRI-Wild/train_test_split/train_list_start0.txt"
# 图像增广策略:ResizeImage、RandFlipImage等
transform_ops
:
-
ResizeImage
:
size
:
224
-
RandFlipImage
:
flip_code
:
1
-
AugMix
:
prob
:
0.5
-
NormalizeImage
:
scale
:
0.00392157
mean
:
[
0.485
,
0.456
,
0.406
]
std
:
[
0.229
,
0.224
,
0.225
]
order
:
'
'
-
RandomErasing
:
EPSILON
:
0.5
sl
:
0.02
sh
:
0.4
r1
:
0.3
mean
:
[
0.
,
0.
,
0.
]
sampler
:
name
:
DistributedRandomIdentitySampler
batch_size
:
128
num_instances
:
2
drop_last
:
False
shuffle
:
True
loader
:
num_workers
:
6
use_shared_memory
:
False
```
## Backbone的具体设置
## Backbone的具体设置
具体是用
`ResNet50`
作为backbone,但在
`ResNet50`
基础上做了如下修改:
具体是用
`ResNet50`
作为backbone,但在
`ResNet50`
基础上做了如下修改:
-
对Last Stage(第4个stage),没有做下采样,即第4个stage的feature map和第3个stage的feature map大小一致,都是14x14。
-
对Last Stage(第4个stage),没有做下采样,即第4个stage的feature map和第3个stage的feature map大小一致,都是14x14。
-
在最后加入一个embedding 层,即1x1的卷积层,特征维度为512
-
在最后加入一个embedding 层,即1x1的卷积层,特征维度为512
具体代码:
[
ResNet50_last_stage_stride1
](
../../../ppcls/arch/backbone/variant_models/resnet_variant.py
)
具体代码:
[
ResNet50_last_stage_stride1
](
../../../ppcls/arch/backbone/variant_models/resnet_variant.py
)
在配置文件中Backbone设置如下:
```
yaml
Arch
:
# 使用RecModel模型进行训练,目前支持普通ImageNet和RecModel两个方式
name
:
"
RecModel"
# 导出inference model的具体配置
infer_output_key
:
"
features"
infer_add_softmax
:
False
# 使用的Backbone
Backbone
:
name
:
"
ResNet50_last_stage_stride1"
pretrained
:
True
# 使用此层作为Backbone的feature输出,name为具体层的full_name
BackboneStopLayer
:
name
:
"
adaptive_avg_pool2d_0"
# Backbone的基础上,新增网络层。此模型添加1x1的卷积层(embedding)
Neck
:
name
:
"
VehicleNeck"
in_channels
:
2048
out_channels
:
512
# 增加ArcMargin, 即ArcLoss的具体实现
Head
:
name
:
"
ArcMargin"
embedding_size
:
512
class_num
:
431
margin
:
0.15
scale
:
32
```
## Loss的设置
## Loss的设置
车辆ReID中,使用了
[
SupConLoss
](
https://arxiv.org/abs/2004.11362
)
+
[
ArcLoss
](
https://arxiv.org/abs/1801.07698
)
,其中权重比例为1:1
车辆ReID中,使用了
[
SupConLoss
](
https://arxiv.org/abs/2004.11362
)
+
[
ArcLoss
](
https://arxiv.org/abs/1801.07698
)
,其中权重比例为1:1
具体代码详见:
[
SupConLoss代码
](
../../../ppcls/loss/supconloss.py
)
、
[
ArcLoss代码
](
../../../ppcls/arch/gears/arcmargin.py
)
具体代码详见:
[
SupConLoss代码
](
../../../ppcls/loss/supconloss.py
)
、
[
ArcLoss代码
](
../../../ppcls/arch/gears/arcmargin.py
)
在配置文件中设置如下:
```
yaml
Loss
:
Train
:
-
CELoss
:
weight
:
1.0
-
SupConLoss
:
weight
:
1.0
# SupConLoss的具体参数
views
:
2
Eval
:
-
CELoss
:
weight
:
1.0
```
## 其他相关设置
### Optimizer设置
```
yaml
Optimizer
:
# 使用的优化器名称
name
:
Momentum
# 优化器具体参数
momentum
:
0.9
lr
:
# 使用的学习率调节具体名称
name
:
MultiStepDecay
# 学习率调节算法具体参数
learning_rate
:
0.01
milestones
:
[
30
,
60
,
70
,
80
,
90
,
100
,
120
,
140
]
gamma
:
0.5
verbose
:
False
last_epoch
:
-1
regularizer
:
name
:
'
L2'
coeff
:
0.0005
```
### Eval Metric设置
```
yaml
Metric
:
Eval
:
# 使用Recallk和mAP两种评价指标
-
Recallk
:
topk
:
[
1
,
5
]
-
mAP
:
{}
```
### 其他超参数设置
```
yaml
其他部分的具体设置,详见
[
配置文件
](
../../../ppcls/configs/Vehicle/ResNet50_ReID.yaml
)
。
Global
:
# 如为null则从头开始训练。若指定中间训练保存的状态地址,则继续训练
checkpoints
:
null
pretrained_model
:
null
output_dir
:
"
./output/"
device
:
"
gpu"
class_num
:
30671
# 保存模型的粒度,每个epoch保存一次
save_interval
:
1
eval_during_train
:
True
eval_interval
:
1
# 训练的epoch数
epochs
:
160
# log输出频率
print_batch_step
:
10
# 是否使用visualdl库
use_visualdl
:
False
# used for static mode and model export
image_shape
:
[
3
,
224
,
224
]
save_inference_dir
:
"
./inference"
# 使用retrival的方式进行评测
eval_mode
:
"
retrieval"
```
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录