Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
models
提交
9e963ac2
M
models
项目概览
PaddlePaddle
/
models
1 年多 前同步成功
通知
222
Star
6828
Fork
2962
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
602
列表
看板
标记
里程碑
合并请求
255
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
models
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
602
Issue
602
列表
看板
标记
里程碑
合并请求
255
合并请求
255
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
9e963ac2
编写于
8月 31, 2020
作者:
L
LiuChaoXD
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add tsn 2020-08-31
上级
5df67047
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
68 addition
and
22 deletion
+68
-22
dygraph/tsn/README.md
dygraph/tsn/README.md
+5
-5
dygraph/tsn/multi_gpus_run.sh
dygraph/tsn/multi_gpus_run.sh
+1
-1
dygraph/tsn/multi_tsn.yaml
dygraph/tsn/multi_tsn.yaml
+2
-2
dygraph/tsn/single_gpu_run.sh
dygraph/tsn/single_gpu_run.sh
+1
-1
dygraph/tsn/single_tsn.yaml
dygraph/tsn/single_tsn.yaml
+42
-0
dygraph/tsn/train.py
dygraph/tsn/train.py
+17
-13
未找到文件。
dygraph/tsn/README.md
浏览文件 @
9e963ac2
...
...
@@ -57,20 +57,20 @@ TSN的训练数据采用UCF101动作识别数据集。数据下载及准备请
1.
多卡训练
```
bash
bash multi_gpus_run.sh
./configs/tsn.yaml
bash multi_gpus_run.sh
```
多卡训练所使用的gpu可以通过如下方式设置:
-
修改
`multi_gpus_run.sh`
中
`export CUDA_VISIBLE_DEVICES=0,1,2,3`
(默认为0,1,2,3表示使用0,1,2,3卡号的gpu进行训练)
-
注意:
若修改了batchsize则学习率也要做相应的修改,规则为大batchsize用大lr,即同倍数增长缩小关系。例如,默认batchsize=128,lr=0.001,若batchsize=64,lr=0.0005
-
注意:
多卡训练的参数配置文件为
`multi_tsn.yaml`
。若修改了batchsize则学习率也要做相应的修改,规则为大batchsize用大lr,即同倍数增长缩小关系。例如,默认四卡batchsize=128,lr=0.001,若batchsize=64,lr=0.0005。
2.
单卡训练
```
bash
bash single_gpu_run.sh
./configs/tsn.yaml
bash single_gpu_run.sh
```
单卡训练所使用的gpu可以通过如下方式设置:
-
修改
`run.sh`
中的
`export CUDA_VISIBLE_DEVICES=0`
(表示使用gpu 0 进行模型训练)
-
注意:
若修改了batchsize则学习率也要做相应的修改,规则为大batchsize用大lr,即同倍数增长缩小关系。例如,默认batchsize=128,lr=0.001,若batchsize=64,lr=0.000
5
-
修改
`
single_gpu_
run.sh`
中的
`export CUDA_VISIBLE_DEVICES=0`
(表示使用gpu 0 进行模型训练)
-
注意:
单卡训练的参数配置文件为
`single_gpu_run.sh`
。若修改了batchsize则学习率也要做相应的修改,规则为大batchsize用大lr,即同倍数增长缩小关系。默认单卡batchsize=64,lr=0.0005;若batchsize=32,lr=0.0002
5
## 模型评估
可通过如下方式进行模型评估:
...
...
dygraph/tsn/multi_gpus_run.sh
浏览文件 @
9e963ac2
configs
=
"./tsn.yaml"
configs
=
"./
multi_
tsn.yaml"
pretrain
=
""
# set pretrain model path if needed
resume
=
""
# set checkpoints model path if u want to resume training
save_dir
=
""
...
...
dygraph/tsn/tsn.yaml
→
dygraph/tsn/
multi_
tsn.yaml
浏览文件 @
9e963ac2
...
...
@@ -15,7 +15,7 @@ TRAIN:
target_size
:
224
num_reader_threads
:
12
buf_size
:
1024
batch_size
:
256
batch_size
:
128
use_gpu
:
True
filelist
:
"
./data/dataset/ucf101/ucf101_train_split_1_rawframes.txt"
learning_rate
:
0.001
...
...
@@ -23,7 +23,7 @@ TRAIN:
decay_epochs
:
[
30
,
60
]
l2_weight_decay
:
1e-4
momentum
:
0.9
total_videos
:
9738
#239781
total_videos
:
9738
VALID
:
short_size
:
256
...
...
dygraph/tsn/single_gpu_run.sh
浏览文件 @
9e963ac2
configs
=
"tsn.yaml"
configs
=
"
single_
tsn.yaml"
pretrain
=
""
# set pretrain model path if needed
resume
=
""
# set checkpoints model path if u want to resume training
save_dir
=
""
...
...
dygraph/tsn/single_tsn.yaml
0 → 100644
浏览文件 @
9e963ac2
MODEL
:
name
:
"
TSN"
format
:
"
frames"
# support for "frames" or "videos"
num_classes
:
101
seg_num
:
3
seglen
:
1
image_mean
:
[
0.485
,
0.456
,
0.406
]
image_std
:
[
0.229
,
0.224
,
0.225
]
num_layers
:
50
topk
:
5
TRAIN
:
epoch
:
80
short_size
:
256
target_size
:
224
num_reader_threads
:
12
buf_size
:
1024
batch_size
:
64
use_gpu
:
True
filelist
:
"
./data/dataset/ucf101/ucf101_train_split_1_rawframes.txt"
learning_rate
:
0.0005
learning_rate_decay
:
0.1
decay_epochs
:
[
30
,
60
]
l2_weight_decay
:
1e-4
momentum
:
0.9
total_videos
:
9738
VALID
:
short_size
:
256
target_size
:
224
num_reader_threads
:
12
buf_size
:
1024
batch_size
:
128
filelist
:
"
./data/dataset/ucf101/ucf101_val_split_1_rawframes.txt"
TEST
:
short_size
:
256
target_size
:
224
num_reader_threads
:
12
buf_size
:
1024
batch_size
:
64
filelist
:
"
./data/dataset/ucf101/ucf101_val_split_1_rawframes.txt"
\ No newline at end of file
dygraph/tsn/train.py
浏览文件 @
9e963ac2
...
...
@@ -181,14 +181,17 @@ def val(epoch, model, cfg, args):
acc_top1
=
fluid
.
layers
.
accuracy
(
input
=
outputs
,
label
=
labels
,
k
=
1
)
acc_top5
=
fluid
.
layers
.
accuracy
(
input
=
outputs
,
label
=
labels
,
k
=
5
)
total_loss
+=
avg_loss
.
numpy
()[
0
]
dy_out
=
avg_loss
.
numpy
()[
0
]
total_loss
+=
dy_out
total_acc1
+=
acc_top1
.
numpy
()[
0
]
total_acc5
+=
acc_top5
.
numpy
()[
0
]
total_sample
+=
1
print
(
'TEST Epoch {}, iter {}, loss = {}, acc1 {}, acc5 {}'
.
format
(
epoch
,
batch_id
,
avg_loss
.
numpy
()[
0
],
acc_top1
.
numpy
()[
0
],
acc_top5
.
numpy
()[
0
]))
if
batch_id
%
5
==
0
:
print
(
"TEST Epoch {}, iter {}, loss={:.5f}, acc1 {:.5f}, acc5 {:.5f}"
.
format
(
epoch
,
batch_id
,
total_loss
/
total_sample
,
total_acc1
/
total_sample
,
total_acc5
/
total_sample
))
print
(
'Finish loss {} , acc1 {} , acc5 {}'
.
format
(
total_loss
/
total_sample
,
total_acc1
/
total_sample
,
total_acc5
/
...
...
@@ -297,6 +300,7 @@ def train(args):
input
=
outputs
,
label
=
labels
,
k
=
1
)
acc_top5
=
fluid
.
layers
.
accuracy
(
input
=
outputs
,
label
=
labels
,
k
=
5
)
dy_out
=
avg_loss
.
numpy
()[
0
]
if
use_data_parallel
:
# (data_parallel step5/6)
...
...
@@ -309,16 +313,16 @@ def train(args):
optimizer
.
minimize
(
avg_loss
)
video_model
.
clear_gradients
()
total_loss
+=
avg_loss
.
numpy
()[
0
]
total_loss
+=
dy_out
total_acc1
+=
acc_top1
.
numpy
()[
0
]
total_acc5
+=
acc_top5
.
numpy
()[
0
]
total_sample
+=
1
train_batch_cost
=
time
.
time
()
-
batch_start
print
(
'TRAIN Epoch: {}, iter: {}, batch_cost: {:
.5f} s, reader_cost: {: .5f} s loss={: .6f}, acc1 {: .6f}, acc5 {: .6f}
\t
'
.
'TRAIN Epoch: {}, iter: {}, batch_cost: {:
.5f} s, reader_cost: {:.5f} s, loss={:.6f}, acc1 {:.6f}, acc5 {:.6f}
'
.
format
(
epoch
,
batch_id
,
train_batch_cost
,
train_reader_cost
,
avg_loss
.
numpy
()[
0
]
,
acc_top1
.
numpy
()[
0
],
acc_top5
.
numpy
()[
0
]
))
total_loss
/
total_sample
,
total_acc1
/
total_sample
,
total_acc5
/
total_sample
))
batch_start
=
time
.
time
()
print
(
...
...
@@ -349,11 +353,11 @@ def train(args):
else
:
if
val_acc
>
best_acc
:
best_acc
=
val_acc
if
fluid
.
dygraph
.
parallel
.
Env
().
local_rank
==
0
:
if
not
os
.
path
.
isdir
(
args
.
weights
):
os
.
makedirs
(
args
.
weights
)
fluid
.
dygraph
.
save_dygraph
(
video_model
.
state_dict
(),
args
.
weights
+
"/final"
)
if
fluid
.
dygraph
.
parallel
.
Env
().
local_rank
==
0
:
if
not
os
.
path
.
isdir
(
args
.
weights
):
os
.
makedirs
(
args
.
weights
)
fluid
.
dygraph
.
save_dygraph
(
video_model
.
state_dict
(),
args
.
weights
+
"/final"
)
else
:
if
fluid
.
dygraph
.
parallel
.
Env
().
local_rank
==
0
:
if
not
os
.
path
.
isdir
(
args
.
weights
):
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录