Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleClas
提交
ef2fd19b
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看板
未验证
提交
ef2fd19b
编写于
9月 17, 2021
作者:
C
cuicheng01
提交者:
GitHub
9月 17, 2021
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #1243 from RainFrost1/arcmargin
fix pact bug for circlemargin arcmargin cosmargin
上级
9bc2041e
bd68a9cb
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
456 addition
and
41 deletion
+456
-41
.gitignore
.gitignore
+2
-1
ppcls/arch/gears/arcmargin.py
ppcls/arch/gears/arcmargin.py
+7
-12
ppcls/arch/gears/circlemargin.py
ppcls/arch/gears/circlemargin.py
+8
-9
ppcls/arch/gears/cosmargin.py
ppcls/arch/gears/cosmargin.py
+7
-11
ppcls/configs/Vehicle/ResNet50.yaml
ppcls/configs/Vehicle/ResNet50.yaml
+1
-5
ppcls/configs/Vehicle/ResNet50_ReID.yaml
ppcls/configs/Vehicle/ResNet50_ReID.yaml
+0
-1
ppcls/configs/slim/ResNet50_vehicle_cls_prune.yaml
ppcls/configs/slim/ResNet50_vehicle_cls_prune.yaml
+135
-0
ppcls/configs/slim/ResNet50_vehicle_cls_quantization.yaml
ppcls/configs/slim/ResNet50_vehicle_cls_quantization.yaml
+134
-0
ppcls/configs/slim/ResNet50_vehicle_reid_prune.yaml
ppcls/configs/slim/ResNet50_vehicle_reid_prune.yaml
+1
-2
ppcls/configs/slim/ResNet50_vehicle_reid_quantization.yaml
ppcls/configs/slim/ResNet50_vehicle_reid_quantization.yaml
+161
-0
未找到文件。
.gitignore
浏览文件 @
ef2fd19b
...
...
@@ -3,10 +3,11 @@ __pycache__/
*.sw*
*/workerlog*
checkpoints/
output/
output
*
/
pretrained/
.ipynb_checkpoints/
*.ipynb*
_build/
build/
log/
nohup.out
ppcls/arch/gears/arcmargin.py
浏览文件 @
ef2fd19b
...
...
@@ -24,30 +24,25 @@ class ArcMargin(nn.Layer):
margin
=
0.5
,
scale
=
80.0
,
easy_margin
=
False
):
super
(
ArcMargin
,
self
).
__init__
()
super
().
__init__
()
self
.
embedding_size
=
embedding_size
self
.
class_num
=
class_num
self
.
margin
=
margin
self
.
scale
=
scale
self
.
easy_margin
=
easy_margin
weight_attr
=
paddle
.
ParamAttr
(
initializer
=
paddle
.
nn
.
initializer
.
XavierNormal
())
self
.
fc
=
nn
.
Linear
(
self
.
embedding_size
,
self
.
class_num
,
weight_attr
=
weight_attr
,
bias_attr
=
False
)
self
.
weight
=
self
.
create_parameter
(
shape
=
[
self
.
embedding_size
,
self
.
class_num
],
is_bias
=
False
,
default_initializer
=
paddle
.
nn
.
initializer
.
XavierNormal
())
def
forward
(
self
,
input
,
label
=
None
):
input_norm
=
paddle
.
sqrt
(
paddle
.
sum
(
paddle
.
square
(
input
),
axis
=
1
,
keepdim
=
True
))
input
=
paddle
.
divide
(
input
,
input_norm
)
weight
=
self
.
fc
.
weight
weight_norm
=
paddle
.
sqrt
(
paddle
.
sum
(
paddle
.
square
(
weight
),
axis
=
0
,
keepdim
=
True
))
weight
=
paddle
.
divide
(
weight
,
weight_norm
)
paddle
.
sum
(
paddle
.
square
(
self
.
weight
),
axis
=
0
,
keepdim
=
True
))
weight
=
paddle
.
divide
(
self
.
weight
,
weight_norm
)
cos
=
paddle
.
matmul
(
input
,
weight
)
if
not
self
.
training
or
label
is
None
:
...
...
ppcls/arch/gears/circlemargin.py
浏览文件 @
ef2fd19b
...
...
@@ -26,20 +26,19 @@ class CircleMargin(nn.Layer):
self
.
embedding_size
=
embedding_size
self
.
class_num
=
class_num
weight_attr
=
paddle
.
ParamAtt
r
(
initializer
=
paddle
.
nn
.
initializer
.
XavierNormal
())
self
.
fc
=
paddle
.
nn
.
Linear
(
self
.
embedding_size
,
self
.
class_num
,
weight_attr
=
weight_attr
)
self
.
weight
=
self
.
create_paramete
r
(
shape
=
[
self
.
embedding_size
,
self
.
class_num
],
is_bias
=
False
,
default_initializer
=
paddle
.
nn
.
initializer
.
XavierNormal
()
)
def
forward
(
self
,
input
,
label
):
feat_norm
=
paddle
.
sqrt
(
paddle
.
sum
(
paddle
.
square
(
input
),
axis
=
1
,
keepdim
=
True
))
input
=
paddle
.
divide
(
input
,
feat_norm
)
weight
=
self
.
fc
.
weight
weight_norm
=
paddle
.
sqrt
(
paddle
.
sum
(
paddle
.
square
(
weight
),
axis
=
0
,
keepdim
=
True
))
weight
=
paddle
.
divide
(
weight
,
weight_norm
)
paddle
.
sum
(
paddle
.
square
(
self
.
weight
),
axis
=
0
,
keepdim
=
True
))
weight
=
paddle
.
divide
(
self
.
weight
,
weight_norm
)
logits
=
paddle
.
matmul
(
input
,
weight
)
if
not
self
.
training
or
label
is
None
:
...
...
@@ -49,9 +48,9 @@ class CircleMargin(nn.Layer):
alpha_n
=
paddle
.
clip
(
logits
.
detach
()
+
self
.
margin
,
min
=
0.
)
delta_p
=
1
-
self
.
margin
delta_n
=
self
.
margin
m_hot
=
F
.
one_hot
(
label
.
reshape
([
-
1
]),
num_classes
=
logits
.
shape
[
1
])
logits_p
=
alpha_p
*
(
logits
-
delta_p
)
logits_n
=
alpha_n
*
(
logits
-
delta_n
)
pre_logits
=
logits_p
*
m_hot
+
logits_n
*
(
1
-
m_hot
)
...
...
ppcls/arch/gears/cosmargin.py
浏览文件 @
ef2fd19b
...
...
@@ -25,13 +25,10 @@ class CosMargin(paddle.nn.Layer):
self
.
embedding_size
=
embedding_size
self
.
class_num
=
class_num
weight_attr
=
paddle
.
ParamAttr
(
initializer
=
paddle
.
nn
.
initializer
.
XavierNormal
())
self
.
fc
=
nn
.
Linear
(
self
.
embedding_size
,
self
.
class_num
,
weight_attr
=
weight_attr
,
bias_attr
=
False
)
self
.
weight
=
self
.
create_parameter
(
shape
=
[
self
.
embedding_size
,
self
.
class_num
],
is_bias
=
False
,
default_initializer
=
paddle
.
nn
.
initializer
.
XavierNormal
())
def
forward
(
self
,
input
,
label
):
label
.
stop_gradient
=
True
...
...
@@ -40,15 +37,14 @@ class CosMargin(paddle.nn.Layer):
paddle
.
sum
(
paddle
.
square
(
input
),
axis
=
1
,
keepdim
=
True
))
input
=
paddle
.
divide
(
input
,
input_norm
)
weight
=
self
.
fc
.
weight
weight_norm
=
paddle
.
sqrt
(
paddle
.
sum
(
paddle
.
square
(
weight
),
axis
=
0
,
keepdim
=
True
))
weight
=
paddle
.
divide
(
weight
,
weight_norm
)
paddle
.
sum
(
paddle
.
square
(
self
.
weight
),
axis
=
0
,
keepdim
=
True
))
weight
=
paddle
.
divide
(
self
.
weight
,
weight_norm
)
cos
=
paddle
.
matmul
(
input
,
weight
)
if
not
self
.
training
or
label
is
None
:
return
cos
cos_m
=
cos
-
self
.
margin
one_hot
=
paddle
.
nn
.
functional
.
one_hot
(
label
,
self
.
class_num
)
...
...
ppcls/configs/Vehicle/ResNet50.yaml
浏览文件 @
ef2fd19b
...
...
@@ -51,12 +51,8 @@ Optimizer:
name
:
Momentum
momentum
:
0.9
lr
:
name
:
MultiStepDecay
name
:
Cosine
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
...
...
ppcls/configs/Vehicle/ResNet50_ReID.yaml
浏览文件 @
ef2fd19b
...
...
@@ -54,7 +54,6 @@ Optimizer:
lr
:
name
:
Cosine
learning_rate
:
0.01
last_epoch
:
-1
regularizer
:
name
:
'
L2'
coeff
:
0.0005
...
...
ppcls/configs/slim/ResNet50_vehicle_cls_prune.yaml
0 → 100644
浏览文件 @
ef2fd19b
# global configs
Global
:
checkpoints
:
null
pretrained_model
:
null
output_dir
:
"
./output_vehicle_cls_prune/"
device
:
"
gpu"
save_interval
:
1
eval_during_train
:
True
eval_interval
:
1
epochs
:
160
print_batch_step
:
10
use_visualdl
:
False
# used for static mode and model export
image_shape
:
[
3
,
224
,
224
]
save_inference_dir
:
"
./inference"
Slim
:
prune
:
name
:
fpgm
pruned_ratio
:
0.3
# model architecture
Arch
:
name
:
"
RecModel"
infer_output_key
:
"
features"
infer_add_softmax
:
False
Backbone
:
name
:
"
ResNet50_last_stage_stride1"
pretrained
:
True
BackboneStopLayer
:
name
:
"
adaptive_avg_pool2d_0"
Neck
:
name
:
"
VehicleNeck"
in_channels
:
2048
out_channels
:
512
Head
:
name
:
"
ArcMargin"
embedding_size
:
512
class_num
:
431
margin
:
0.15
scale
:
32
# loss function config for traing/eval process
Loss
:
Train
:
-
CELoss
:
weight
:
1.0
-
SupConLoss
:
weight
:
1.0
views
:
2
Eval
:
-
CELoss
:
weight
:
1.0
Optimizer
:
name
:
Momentum
momentum
:
0.9
lr
:
name
:
Cosine
learning_rate
:
0.01
regularizer
:
name
:
'
L2'
coeff
:
0.0005
# data loader for train and eval
DataLoader
:
Train
:
dataset
:
name
:
"
CompCars"
image_root
:
"
./dataset/CompCars/image/"
label_root
:
"
./dataset/CompCars/label/"
bbox_crop
:
True
cls_label_path
:
"
./dataset/CompCars/train_test_split/classification/train_label.txt"
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
:
8
use_shared_memory
:
True
Eval
:
dataset
:
name
:
"
CompCars"
image_root
:
"
./dataset/CompCars/image/"
label_root
:
"
./dataset/CompCars/label/"
cls_label_path
:
"
./dataset/CompCars/train_test_split/classification/test_label.txt"
bbox_crop
:
True
transform_ops
:
-
ResizeImage
:
size
:
224
-
NormalizeImage
:
scale
:
0.00392157
mean
:
[
0.485
,
0.456
,
0.406
]
std
:
[
0.229
,
0.224
,
0.225
]
order
:
'
'
sampler
:
name
:
DistributedBatchSampler
batch_size
:
128
drop_last
:
False
shuffle
:
False
loader
:
num_workers
:
8
use_shared_memory
:
True
Metric
:
Train
:
-
TopkAcc
:
topk
:
[
1
,
5
]
Eval
:
-
TopkAcc
:
topk
:
[
1
,
5
]
ppcls/configs/slim/ResNet50_vehicle_cls_quantization.yaml
0 → 100644
浏览文件 @
ef2fd19b
# global configs
Global
:
checkpoints
:
null
pretrained_model
:
null
output_dir
:
"
./output_vehicle_cls_pact/"
device
:
"
gpu"
save_interval
:
1
eval_during_train
:
True
eval_interval
:
1
epochs
:
80
print_batch_step
:
10
use_visualdl
:
False
# used for static mode and model export
image_shape
:
[
3
,
224
,
224
]
save_inference_dir
:
"
./inference"
Slim
:
quant
:
name
:
pact
# model architecture
Arch
:
name
:
"
RecModel"
infer_output_key
:
"
features"
infer_add_softmax
:
False
Backbone
:
name
:
"
ResNet50_last_stage_stride1"
pretrained
:
True
BackboneStopLayer
:
name
:
"
adaptive_avg_pool2d_0"
Neck
:
name
:
"
VehicleNeck"
in_channels
:
2048
out_channels
:
512
Head
:
name
:
"
ArcMargin"
embedding_size
:
512
class_num
:
431
margin
:
0.15
scale
:
32
# loss function config for traing/eval process
Loss
:
Train
:
-
CELoss
:
weight
:
1.0
-
SupConLoss
:
weight
:
1.0
views
:
2
Eval
:
-
CELoss
:
weight
:
1.0
Optimizer
:
name
:
Momentum
momentum
:
0.9
lr
:
name
:
Cosine
learning_rate
:
0.001
regularizer
:
name
:
'
L2'
coeff
:
0.0005
# data loader for train and eval
DataLoader
:
Train
:
dataset
:
name
:
"
CompCars"
image_root
:
"
./dataset/CompCars/image/"
label_root
:
"
./dataset/CompCars/label/"
bbox_crop
:
True
cls_label_path
:
"
./dataset/CompCars/train_test_split/classification/train_label.txt"
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
:
8
use_shared_memory
:
True
Eval
:
dataset
:
name
:
"
CompCars"
image_root
:
"
./dataset/CompCars/image/"
label_root
:
"
./dataset/CompCars/label/"
cls_label_path
:
"
./dataset/CompCars/train_test_split/classification/test_label.txt"
bbox_crop
:
True
transform_ops
:
-
ResizeImage
:
size
:
224
-
NormalizeImage
:
scale
:
0.00392157
mean
:
[
0.485
,
0.456
,
0.406
]
std
:
[
0.229
,
0.224
,
0.225
]
order
:
'
'
sampler
:
name
:
DistributedBatchSampler
batch_size
:
128
drop_last
:
False
shuffle
:
False
loader
:
num_workers
:
8
use_shared_memory
:
True
Metric
:
Train
:
-
TopkAcc
:
topk
:
[
1
,
5
]
Eval
:
-
TopkAcc
:
topk
:
[
1
,
5
]
ppcls/configs/slim/ResNet50_vehicle_reid_prune.yaml
浏览文件 @
ef2fd19b
...
...
@@ -2,7 +2,7 @@
Global
:
checkpoints
:
null
pretrained_model
:
null
output_dir
:
"
./output/"
output_dir
:
"
./output
_fpgm
/"
device
:
"
gpu"
save_interval
:
1
eval_during_train
:
True
...
...
@@ -61,7 +61,6 @@ Optimizer:
lr
:
name
:
Cosine
learning_rate
:
0.01
last_epoch
:
-1
regularizer
:
name
:
'
L2'
coeff
:
0.0005
...
...
ppcls/configs/slim/ResNet50_vehicle_reid_quantization.yaml
0 → 100644
浏览文件 @
ef2fd19b
# global configs
Global
:
checkpoints
:
null
pretrained_model
:
null
output_dir
:
"
./output_vehicle_reid_pact/"
device
:
"
gpu"
save_interval
:
1
eval_during_train
:
True
eval_interval
:
1
epochs
:
40
print_batch_step
:
10
use_visualdl
:
False
# used for static mode and model export
image_shape
:
[
3
,
224
,
224
]
save_inference_dir
:
"
./inference"
eval_mode
:
"
retrieval"
# for quantizaiton or prune model
Slim
:
## for prune
quant
:
name
:
pact
# model architecture
Arch
:
name
:
"
RecModel"
infer_output_key
:
"
features"
infer_add_softmax
:
False
Backbone
:
name
:
"
ResNet50_last_stage_stride1"
pretrained
:
True
BackboneStopLayer
:
name
:
"
adaptive_avg_pool2d_0"
Neck
:
name
:
"
VehicleNeck"
in_channels
:
2048
out_channels
:
512
Head
:
name
:
"
ArcMargin"
embedding_size
:
512
class_num
:
30671
margin
:
0.15
scale
:
32
# loss function config for traing/eval process
Loss
:
Train
:
-
CELoss
:
weight
:
1.0
-
SupConLoss
:
weight
:
1.0
views
:
2
Eval
:
-
CELoss
:
weight
:
1.0
Optimizer
:
name
:
Momentum
momentum
:
0.9
lr
:
name
:
Cosine
learning_rate
:
0.001
regularizer
:
name
:
'
L2'
coeff
:
0.0005
# data loader for train and eval
DataLoader
:
Train
:
dataset
:
name
:
"
VeriWild"
image_root
:
"
./dataset/VeRI-Wild/images/"
cls_label_path
:
"
./dataset/VeRI-Wild/train_test_split/train_list_start0.txt"
transform_ops
:
-
DecodeImage
:
to_rgb
:
True
channel_first
:
False
-
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
:
64
num_instances
:
2
drop_last
:
False
shuffle
:
True
loader
:
num_workers
:
6
use_shared_memory
:
True
Eval
:
Query
:
dataset
:
name
:
"
VeriWild"
image_root
:
"
./dataset/VeRI-Wild/images"
cls_label_path
:
"
./dataset/VeRI-Wild/train_test_split/test_3000_id_query.txt"
transform_ops
:
-
DecodeImage
:
to_rgb
:
True
channel_first
:
False
-
ResizeImage
:
size
:
224
-
NormalizeImage
:
scale
:
0.00392157
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
:
6
use_shared_memory
:
True
Gallery
:
dataset
:
name
:
"
VeriWild"
image_root
:
"
./dataset/VeRI-Wild/images"
cls_label_path
:
"
./dataset/VeRI-Wild/train_test_split/test_3000_id.txt"
transform_ops
:
-
DecodeImage
:
to_rgb
:
True
channel_first
:
False
-
ResizeImage
:
size
:
224
-
NormalizeImage
:
scale
:
0.00392157
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
:
6
use_shared_memory
:
True
Metric
:
Eval
:
-
Recallk
:
topk
:
[
1
,
5
]
-
mAP
:
{}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录