Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleClas
提交
96d659c7
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看板
提交
96d659c7
编写于
5月 14, 2022
作者:
C
cuicheng01
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add run.sh
上级
b513670a
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
302 addition
and
0 deletion
+302
-0
tools/run.sh
tools/run.sh
+302
-0
未找到文件。
tools/run.sh
0 → 100644
浏览文件 @
96d659c7
#!/usr/bin/env bash
GPU_IDS
=
"0,1,2,3"
# Basic Config
CONFIG
=
"ppcls/configs/cls_demo/person/PPLCNet/PPLCNet_x1_0.yaml"
EPOCHS
=
1
OUTPUT
=
"output_debug4"
STATUS_LOG
=
"
${
OUTPUT
}
/status_result.log"
RESULT
=
"
${
OUTPUT
}
/result.log"
# Search Options
LR_LIST
=(
0.0075 0.01 0.0125
)
RESOLUTION_LIST
=(
176 192 224
)
RA_PROB_LIST
=(
0.0 0.1 0.5
)
RE_PROB_LIST
=(
0.0 0.1 0.5
)
LR_MULT_LIST
=(
[
0.0,0.2,0.4,0.6,0.8,1.0]
[
0.0,0.4,0.4,0.8,0.8,1.0]
)
TEACHER_LIST
=(
"ResNet101_vd"
"ResNet50_vd"
)
# Train Mode
declare
-A
MODE_MAP
MODE_MAP
=([
"search_lr"
]=
1
[
"search_resolution"
]=
1
[
"search_ra_prob"
]=
1
[
"search_re_prob"
]=
1
[
"search_lr_mult_list"
]=
1
[
"search_teacher"
]=
1
[
"train_distillation_model"
]=
1
)
export
CUDA_VISIBLE_DEVICES
=
${
GPU_IDS
}
function
status_check
(){
last_status
=
$1
# the exit code
run_command
=
$2
run_log
=
$3
if
[
$last_status
-eq
0
]
;
then
echo
-e
"
\0
33[33m Run successfully with command -
${
run_command
}
!
\0
33[0m"
|
tee
-a
${
run_log
}
else
echo
-e
"
\0
33[33m Run failed with command -
${
run_command
}
!
\0
33[0m"
|
tee
-a
${
run_log
}
fi
}
function
get_max_value
(){
array
=(
$*
)
max
=
${
array
[0]
}
index
=
0
for
((
i
=
0
;
i<
${#
array
[*]-1
}
;
i++
))
;
do
if
[[
$(
echo
"
${
array
[
$i
]
}
>
$max
"
|bc
)
-eq
1
]]
;
then
max
=
${
array
[
$i
]
}
index
=
${
i
}
else
continue
fi
done
echo
${
max
}
echo
${
index
}
}
function
get_best_info
(){
_parameter
=
$1
params_index
=
2
if
[[
${
_parameter
}
==
"TEACHER"
]]
;
then
params_index
=
3
fi
parameters_list
=
$(
find
${
OUTPUT
}
/
${
_parameter
}*
-name
train.log |
awk
-v
params_index
=
${
params_index
}
-F
"/"
'{print $params_index}'
)
metric_list
=
$(
find
${
OUTPUT
}
/
${
_parameter
}*
-name
train.log | xargs
cat
|
grep
"best"
|
grep
"Epoch
${
EPOCHS
}
"
|
awk
-F
" "
'{print substr($NF,0,7)}'
)
best_info
=
$(
get_max_value
${
metric_list
[*]
}
)
best_metric
=
$(
echo
$best_info
|
awk
-F
" "
'{print $1}'
)
best_index
=
$(
echo
$best_info
|
awk
-F
" "
'{print $2}'
)
best_parameter
=
$(
echo
$parameters_list
|
awk
-v
best
=
$((
$best_index
+
1
))
'{print $best}'
|
awk
-F
"_"
'{print $2}'
)
echo
${
best_metric
}
echo
${
best_parameter
}
}
function
search_lr
(){
for
lr
in
${
LR_LIST
[*]
}
;
do
cmd_train
=
"python3.7 -m paddle.distributed.launch --gpus=
${
GPU_IDS
}
tools/train.py
\
-c
${
CONFIG
}
\
-o Global.output_dir=
${
OUTPUT
}
/LR_
${
lr
}
\
-o Optimizer.lr.learning_rate=
${
lr
}
\
-o Global.epochs=
${
EPOCHS
}
"
eval
${
cmd_train
}
status_check
$?
"
${
cmd_train
}
"
"
${
STATUS_LOG
}
"
cmd
=
"find
${
OUTPUT
}
-name epoch* | xargs rm -rf"
eval
${
cmd
}
done
}
function
search_resolution
(){
_lr
=
$1
for
resolution
in
${
RESOLUTION_LIST
[*]
}
;
do
cmd_train
=
"python3.7 -m paddle.distributed.launch --gpus=
${
GPU_IDS
}
tools/train.py
\
-c
${
CONFIG
}
\
-o Global.output_dir=
${
OUTPUT
}
/RESOLUTION_
${
resolution
}
\
-o Optimizer.lr.learning_rate=
${
_lr
}
\
-o Global.epochs=
${
EPOCHS
}
\
-o DataLoader.Train.dataset.transform_ops.1.RandCropImage.size=
${
resolution
}
"
eval
${
cmd_train
}
status_check
$?
"
${
cmd_train
}
"
"
${
STATUS_LOG
}
"
cmd
=
"find
${
OUTPUT
}
-name epoch* | xargs rm -rf"
eval
${
cmd
}
done
}
function
search_ra_prob
(){
_lr
=
$1
_resolution
=
$2
for
ra_prob
in
${
RA_PROB_LIST
[*]
}
;
do
cmd_train
=
"python3.7 -m paddle.distributed.launch --gpus=
${
GPU_IDS
}
tools/train.py
\
-c
${
CONFIG
}
\
-o Global.output_dir=
${
OUTPUT
}
/RA_
${
ra_prob
}
\
-o Optimizer.lr.learning_rate=
${
_lr
}
\
-o Global.epochs=
${
EPOCHS
}
\
-o DataLoader.Train.dataset.transform_ops.3.TimmAutoAugment.prob=
${
ra_prob
}
\
-o DataLoader.Train.dataset.transform_ops.1.RandCropImage.size=
${
_resolution
}
\
-o DataLoader.Train.dataset.transform_ops.3.TimmAutoAugment.img_size=
${
_resolution
}
"
eval
${
cmd_train
}
status_check
$?
"
${
cmd_train
}
"
"
${
STATUS_LOG
}
"
cmd
=
"find
${
OUTPUT
}
-name epoch* | xargs rm -rf"
eval
${
cmd
}
done
}
function
search_re_prob
(){
_lr
=
$1
_resolution
=
$2
_ra_prob
=
$3
for
re_prob
in
${
RE_PROB_LIST
[*]
}
;
do
cmd_train
=
"python3.7 -m paddle.distributed.launch --gpus=
${
GPU_IDS
}
tools/train.py
\
-c
${
CONFIG
}
\
-o Global.output_dir=
${
OUTPUT
}
/RE_
${
re_prob
}
\
-o Optimizer.lr.learning_rate=
${
_lr
}
\
-o Global.epochs=
${
EPOCHS
}
\
-o DataLoader.Train.dataset.transform_ops.3.TimmAutoAugment.prob=
${
_ra_prob
}
\
-o DataLoader.Train.dataset.transform_ops.5.RandomErasing.EPSILON=
${
re_prob
}
\
-o DataLoader.Train.dataset.transform_ops.1.RandCropImage.size=
${
_resolution
}
\
-o DataLoader.Train.dataset.transform_ops.3.TimmAutoAugment.img_size=
${
_resolution
}
"
eval
${
cmd_train
}
status_check
$?
"
${
cmd_train
}
"
"
${
STATUS_LOG
}
"
cmd
=
"find
${
OUTPUT
}
-name epoch* | xargs rm -rf"
eval
${
cmd
}
done
}
function
search_lr_mult_list
(){
_lr
=
$1
_resolution
=
$2
_ra_prob
=
$3
_re_prob
=
$4
for
lr_mult
in
${
LR_MULT_LIST
[*]
}
;
do
cmd_train
=
"python3.7 -m paddle.distributed.launch --gpus=
${
GPU_IDS
}
tools/train.py
\
-c
${
CONFIG
}
\
-o Global.output_dir=
${
OUTPUT
}
/LR_MULT_
${
lr_mult
}
\
-o Optimizer.lr.learning_rate=
${
_lr
}
\
-o Global.epochs=
${
EPOCHS
}
\
-o DataLoader.Train.dataset.transform_ops.3.TimmAutoAugment.prob=
${
_ra_prob
}
\
-o DataLoader.Train.dataset.transform_ops.5.RandomErasing.EPSILON=
${
_re_prob
}
\
-o DataLoader.Train.dataset.transform_ops.1.RandCropImage.size=
${
_resolution
}
\
-o DataLoader.Train.dataset.transform_ops.3.TimmAutoAugment.img_size=
${
_resolution
}
\
-o Arch.lr_mult_list=
${
lr_mult
}
"
eval
${
cmd_train
}
status_check
$?
"
${
cmd_train
}
"
"
${
STATUS_LOG
}
"
cmd
=
"find
${
OUTPUT
}
-name epoch* | xargs rm -rf"
eval
${
cmd
}
done
}
function
search_teacher
(){
_lr
=
$1
_resolution
=
$2
_ra_prob
=
$3
_re_prob
=
$4
for
teacher
in
${
TEACHER_LIST
[*]
}
;
do
cmd_train
=
"python3.7 -m paddle.distributed.launch --gpus=
${
GPU_IDS
}
tools/train.py
\
-c
${
CONFIG
}
\
-o Global.output_dir=
${
OUTPUT
}
/TEACHER_
${
teacher
}
\
-o Optimizer.lr.learning_rate=
${
_lr
}
\
-o Global.epochs=
${
EPOCHS
}
\
-o DataLoader.Train.dataset.transform_ops.3.TimmAutoAugment.prob=
${
_ra_prob
}
\
-o DataLoader.Train.dataset.transform_ops.5.RandomErasing.EPSILON=
${
_re_prob
}
\
-o DataLoader.Train.dataset.transform_ops.1.RandCropImage.size=
${
_resolution
}
\
-o DataLoader.Train.dataset.transform_ops.3.TimmAutoAugment.img_size=
${
_resolution
}
\
-o Arch.name=
${
teacher
}
"
eval
${
cmd_train
}
status_check
$?
"
${
cmd_train
}
"
"
${
STATUS_LOG
}
"
cmd
=
"find
${
OUTPUT
}
/* -name epoch* | xargs rm -rf"
eval
${
cmd
}
done
}
# train the model for knowledge distillation
function
train_distillation_model
(){
_lr
=
$1
_resolution
=
$2
_ra_prob
=
$3
_re_prob
=
$4
_lr_mult
=
$5
teacher
=
$6
t_pretrained_model
=
"
${
OUTPUT
}
/TEACHER_
${
teacher
}
/
${
teacher
}
/best_model"
config
=
"ppcls/configs/cls_demo/person/Distillation/PPLCNet_x1_0_distillation.yaml"
combined_label_list
=
"./dataset/person/train_list_for_distill.txt"
cmd_train
=
"python3.7 -m paddle.distributed.launch
\
--gpus=
${
GPU_IDS
}
\
tools/train.py -c
${
config
}
\
-o Global.output_dir=
${
OUTPUT
}
/kd_teacher
\
-o Optimizer.lr.learning_rate=
${
_lr
}
\
-o Global.epochs=
${
EPOCHS
}
\
-o DataLoader.Train.dataset.transform_ops.3.TimmAutoAugment.prob=
${
_ra_prob
}
\
-o DataLoader.Train.dataset.transform_ops.5.RandomErasing.EPSILON=
${
_re_prob
}
\
-o DataLoader.Train.dataset.transform_ops.1.RandCropImage.size=
${
_resolution
}
\
-o DataLoader.Train.dataset.transform_ops.3.TimmAutoAugment.img_size=
${
_resolution
}
\
-o DataLoader.Train.dataset.cls_label_path=
${
combined_label_list
}
\
-o Arch.models.0.Teacher.name="
${
teacher
}
"
\
-o Arch.models.0.Teacher.pretrained="
${
t_pretrained_model
}
"
\
-o Arch.models.1.Student.lr_mult_list=
${
_lr_mult
}
"
eval
${
cmd_train
}
status_check
$?
"
${
cmd_train
}
"
"
${
STATUS_LOG
}
"
cmd
=
"find
${
OUTPUT
}
-name epoch* | xargs rm -rf"
eval
${
cmd
}
}
######## Train PaddleClas ########
rm
-rf
${
OUTPUT
}
# Train and get best lr
best_lr
=
0.01
if
[[
${
MODE_MAP
[
"search_lr"
]
}
-eq
1
]]
;
then
search_lr
best_info
=
$(
get_best_info
"LR_[0-9]"
)
best_metric
=
$(
echo
$best_info
|
awk
-F
" "
'{print $1}'
)
best_lr
=
$(
echo
$best_info
|
awk
-F
" "
'{print $2}'
)
echo
"The best lr is
${
best_lr
}
, and the best metric is
${
best_metric
}
"
>>
${
RESULT
}
fi
# Train and get best resolution
best_resolution
=
192
if
[[
${
MODE_MAP
[
"search_resolution"
]
}
-eq
1
]]
;
then
search_resolution
"
${
best_lr
}
"
best_info
=
$(
get_best_info
"RESOLUTION"
)
best_metric
=
$(
echo
$best_info
|
awk
-F
" "
'{print $1}'
)
best_resolution
=
$(
echo
$best_info
|
awk
-F
" "
'{print $2}'
)
echo
"The best resolution is
${
best_resolution
}
, and the best metric is
${
best_metric
}
"
>>
${
RESULT
}
fi
# Train and get best ra_prob
best_ra_prob
=
0.0
if
[[
${
MODE_MAP
[
"search_ra_prob"
]
}
-eq
1
]]
;
then
search_ra_prob
"
${
best_lr
}
"
"
${
best_resolution
}
"
best_info
=
$(
get_best_info
"RA"
)
best_metric
=
$(
echo
$best_info
|
awk
-F
" "
'{print $1}'
)
best_ra_prob
=
$(
echo
$best_info
|
awk
-F
" "
'{print $2}'
)
echo
"The best ra_prob is
${
best_ra_prob
}
, and the best metric is
${
best_metric
}
"
>>
${
RESULT
}
fi
# Train and get best re_prob
best_re_prob
=
0.1
if
[[
${
MODE_MAP
[
"search_re_prob"
]
}
-eq
1
]]
;
then
search_re_prob
"
${
best_lr
}
"
"
${
best_resolution
}
"
"
${
best_ra_prob
}
"
best_info
=
$(
get_best_info
"RE"
)
best_metric
=
$(
echo
$best_info
|
awk
-F
" "
'{print $1}'
)
best_re_prob
=
$(
echo
$best_info
|
awk
-F
" "
'{print $2}'
)
echo
"The best re_prob is
${
best_re_prob
}
, and the best metric is
${
best_metric
}
"
>>
${
RESULT
}
fi
# Train and get best lr_mult_list
best_lr_mult_list
=[
1.0,1.0,1.0,1.0,1.0,1.0]
if
[[
${
MODE_MAP
[
"search_lr_mult_list"
]
}
-eq
1
]]
;
then
search_lr_mult_list
"
${
best_lr
}
"
"
${
best_resolution
}
"
"
${
best_ra_prob
}
"
"
${
best_re_prob
}
"
best_info
=
$(
get_best_info
"LR_MULT"
)
best_metric
=
$(
echo
$best_info
|
awk
-F
" "
'{print $1}'
)
best_lr_mult_list
=
$(
echo
$best_info
|
awk
-F
" "
'{print $2}'
)
echo
"The best lr_mult_list is
${
best_lr_mult_list
}
, and the best metric is
${
best_metric
}
"
>>
${
RESULT
}
fi
# train and get best teacher
best_teacher
=
"ResNet101_vd"
if
[[
${
MODE_MAP
[
"search_teacher"
]
}
-eq
1
]]
;
then
search_teacher
"
${
best_lr
}
"
"
${
best_resolution
}
"
"
${
best_ra_prob
}
"
"
${
best_re_prob
}
"
best_info
=
$(
get_best_info
"TEACHER"
)
best_metric
=
$(
echo
$best_info
|
awk
-F
" "
'{print $1}'
)
best_teacher
=
$(
echo
$best_info
|
awk
-F
" "
'{print $2}'
)
echo
"The best teacher is
${
best_teacher
}
, and the best metric is
${
best_metric
}
"
>>
${
RESULT
}
fi
# train the distillation model
if
[[
${
MODE_MAP
[
"train_distillation_model"
]
}
-eq
1
]]
;
then
train_distillation_model
"
${
best_lr
}
"
"
${
best_resolution
}
"
"
${
best_ra_prob
}
"
"
${
best_re_prob
}
"
"
${
best_lr_mult_list
}
"
${
best_teacher
}
best_info
=
$(
get_best_info
"kd_teacher/DistillationModel"
)
best_metric
=
$(
echo
$best_info
|
awk
-F
" "
'{print $1}'
)
echo
"the distillation best metric is
${
best_metric
}
, it is global best metric!"
>>
${
RESULT
}
fi
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录