提交 843514fd 编写于 作者: S SunGaofeng

fix - and _ mismatch, fix python3 bug in nonlocal codes

上级 397e3a8a
...@@ -38,18 +38,18 @@ ...@@ -38,18 +38,18 @@
``` bash ``` bash
export CUDA_VISIBLE_DEVICES=0 export CUDA_VISIBLE_DEVICES=0
python train.py --model-name=STNET python train.py --model_name=STNET
--config=./configs/stnet.txt --config=./configs/stnet.txt
--save-dir=checkpoints --save_dir=checkpoints
``` ```
多卡训练: 多卡训练:
``` bash ``` bash
export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
python train.py --model-name=STNET python train.py --model_name=STNET
--config=./configs/stnet.txt --config=./configs/stnet.txt
--save-dir=checkpoints --save_dir=checkpoints
``` ```
视频模型库同时提供了快速训练脚本,脚本位于`scripts/train`目录下,可通过如下命令启动训练: 视频模型库同时提供了快速训练脚本,脚本位于`scripts/train`目录下,可通过如下命令启动训练:
......
...@@ -32,11 +32,11 @@ Attention Cluster模型使用2nd-Youtube-8M数据集, 数据下载及准备请 ...@@ -32,11 +32,11 @@ Attention Cluster模型使用2nd-Youtube-8M数据集, 数据下载及准备请
数据准备完毕后,可以通过如下两种方式启动训练: 数据准备完毕后,可以通过如下两种方式启动训练:
python train.py --model-name=AttentionCluster python train.py --model_name=AttentionCluster
--config=./configs/attention_cluster.txt --config=./configs/attention_cluster.txt
--save-dir=checkpoints --save_dir=checkpoints
--log-interval=10 --log_interval=10
--valid-interval=1 --valid_interval=1
bash scripts/train/train_attention_cluster.sh bash scripts/train/train_attention_cluster.sh
...@@ -56,9 +56,9 @@ Attention Cluster模型使用2nd-Youtube-8M数据集, 数据下载及准备请 ...@@ -56,9 +56,9 @@ Attention Cluster模型使用2nd-Youtube-8M数据集, 数据下载及准备请
可通过如下两种方式进行模型评估: 可通过如下两种方式进行模型评估:
python test.py --model-name=AttentionCluster python test.py --model_name=AttentionCluster
--config=configs/attention_cluster.txt --config=configs/attention_cluster.txt
--log-interval=1 --log_interval=1
--weights=$PATH_TO_WEIGHTS --weights=$PATH_TO_WEIGHTS
bash scripts/test/test_attention_cluster.sh bash scripts/test/test_attention_cluster.sh
...@@ -89,10 +89,10 @@ Attention Cluster模型使用2nd-Youtube-8M数据集, 数据下载及准备请 ...@@ -89,10 +89,10 @@ Attention Cluster模型使用2nd-Youtube-8M数据集, 数据下载及准备请
可通过如下命令进行模型推断: 可通过如下命令进行模型推断:
python infer.py --model-name=attention_cluster python infer.py --model_name=attention_cluster
--config=configs/attention_cluster.txt --config=configs/attention_cluster.txt
--log-interval=1 --log_interval=1
--weights=$PATH_TO_WEIGHTS --weights=$PATH_TO_WEIGHTS
--filelist=$FILELIST --filelist=$FILELIST
- 模型推断结果存储于`AttentionCluster_infer_result`中,通过`pickle`格式存储。 - 模型推断结果存储于`AttentionCluster_infer_result`中,通过`pickle`格式存储。
...@@ -102,4 +102,3 @@ Attention Cluster模型使用2nd-Youtube-8M数据集, 数据下载及准备请 ...@@ -102,4 +102,3 @@ Attention Cluster模型使用2nd-Youtube-8M数据集, 数据下载及准备请
## 参考论文 ## 参考论文
- [Attention Clusters: Purely Attention Based Local Feature Integration for Video Classification](https://arxiv.org/abs/1711.09550), Xiang Long, Chuang Gan, Gerard de Melo, Jiajun Wu, Xiao Liu, Shilei Wen - [Attention Clusters: Purely Attention Based Local Feature Integration for Video Classification](https://arxiv.org/abs/1711.09550), Xiang Long, Chuang Gan, Gerard de Melo, Jiajun Wu, Xiao Liu, Shilei Wen
...@@ -26,11 +26,11 @@ AttentionLSTM模型使用2nd-Youtube-8M数据集,关于数据部分请参考[ ...@@ -26,11 +26,11 @@ AttentionLSTM模型使用2nd-Youtube-8M数据集,关于数据部分请参考[
数据准备完毕后,可以通过如下两种方式启动训练: 数据准备完毕后,可以通过如下两种方式启动训练:
python train.py --model-name=AttentionLSTM python train.py --model_name=AttentionLSTM
--config=./configs/attention_lstm.txt --config=./configs/attention_lstm.txt
--save-dir=checkpoints --save_dir=checkpoints
--log-interval=10 --log_interval=10
--valid-interval=1 --valid_interval=1
bash scripts/train/train_attention_lstm.sh bash scripts/train/train_attention_lstm.sh
...@@ -42,9 +42,9 @@ AttentionLSTM模型使用2nd-Youtube-8M数据集,关于数据部分请参考[ ...@@ -42,9 +42,9 @@ AttentionLSTM模型使用2nd-Youtube-8M数据集,关于数据部分请参考[
## 模型评估 ## 模型评估
可通过如下两种方式进行模型评估: 可通过如下两种方式进行模型评估:
python test.py --model-name=AttentionLSTM python test.py --model_name=AttentionLSTM
--config=configs/attention_lstm.txt --config=configs/attention_lstm.txt
--log-interval=1 --log_interval=1
--weights=$PATH_TO_WEIGHTS --weights=$PATH_TO_WEIGHTS
bash scripts/test/test_attention_lstm.sh bash scripts/test/test_attention_lstm.sh
...@@ -75,10 +75,10 @@ AttentionLSTM模型使用2nd-Youtube-8M数据集,关于数据部分请参考[ ...@@ -75,10 +75,10 @@ AttentionLSTM模型使用2nd-Youtube-8M数据集,关于数据部分请参考[
可通过如下命令进行模型推断: 可通过如下命令进行模型推断:
python infer.py --model-name=attention_lstm python infer.py --model_name=attention_lstm
--config=configs/attention_lstm.txt --config=configs/attention_lstm.txt
--log-interval=1 --log_interval=1
--weights=$PATH_TO_WEIGHTS --weights=$PATH_TO_WEIGHTS
--filelist=$FILELIST --filelist=$FILELIST
- 模型推断结果存储于`AttentionLSTM_infer_result`中,通过`pickle`格式存储。 - 模型推断结果存储于`AttentionLSTM_infer_result`中,通过`pickle`格式存储。
...@@ -90,4 +90,3 @@ AttentionLSTM模型使用2nd-Youtube-8M数据集,关于数据部分请参考[ ...@@ -90,4 +90,3 @@ AttentionLSTM模型使用2nd-Youtube-8M数据集,关于数据部分请参考[
- [Beyond Short Snippets: Deep Networks for Video Classification](https://arxiv.org/abs/1503.08909) Joe Yue-Hei Ng, Matthew Hausknecht, Sudheendra Vijayanarasimhan, Oriol Vinyals, Rajat Monga, George Toderici - [Beyond Short Snippets: Deep Networks for Video Classification](https://arxiv.org/abs/1503.08909) Joe Yue-Hei Ng, Matthew Hausknecht, Sudheendra Vijayanarasimhan, Oriol Vinyals, Rajat Monga, George Toderici
- [Attention Clusters: Purely Attention Based Local Feature Integration for Video Classification](https://arxiv.org/abs/1711.09550), Xiang Long, Chuang Gan, Gerard de Melo, Jiajun Wu, Xiao Liu, Shilei Wen - [Attention Clusters: Purely Attention Based Local Feature Integration for Video Classification](https://arxiv.org/abs/1711.09550), Xiang Long, Chuang Gan, Gerard de Melo, Jiajun Wu, Xiao Liu, Shilei Wen
...@@ -88,11 +88,11 @@ Non-local模型的训练数据采用由DeepMind公布的Kinetics-400动作识别 ...@@ -88,11 +88,11 @@ Non-local模型的训练数据采用由DeepMind公布的Kinetics-400动作识别
数据准备完毕后,可以通过如下两种方式启动训练: 数据准备完毕后,可以通过如下两种方式启动训练:
python train.py --model-name=NONLOCAL python train.py --model_name=NONLOCAL
--config=./configs/nonlocal.txt --config=./configs/nonlocal.txt
--save-dir=checkpoints --save_dir=checkpoints
--log-interval=10 --log_interval=10
--valid-interval=1 --valid_interval=1
bash scripts/train/train_nonlocal.sh bash scripts/train/train_nonlocal.sh
...@@ -113,9 +113,9 @@ Non-local模型的训练数据采用由DeepMind公布的Kinetics-400动作识别 ...@@ -113,9 +113,9 @@ Non-local模型的训练数据采用由DeepMind公布的Kinetics-400动作识别
可通过如下两种方式进行模型评估: 可通过如下两种方式进行模型评估:
python test.py --model-name=NONLOCAL python test.py --model_name=NONLOCAL
--config=configs/nonlocal.txt --config=configs/nonlocal.txt
--log-interval=1 --log_interval=1
--weights=$PATH_TO_WEIGHTS --weights=$PATH_TO_WEIGHTS
bash scripts/test/test_nonlocal.sh bash scripts/test/test_nonlocal.sh
......
...@@ -14,11 +14,10 @@ ...@@ -14,11 +14,10 @@
import os import os
import numpy as np import numpy as np
import cPickle
import paddle.fluid as fluid import paddle.fluid as fluid
from ..model import ModelBase from ..model import ModelBase
import resnet_video from . import resnet_video
from .nonlocal_utils import load_params_from_file from .nonlocal_utils import load_params_from_file
import logging import logging
......
...@@ -21,7 +21,7 @@ import paddle.fluid as fluid ...@@ -21,7 +21,7 @@ import paddle.fluid as fluid
from paddle.fluid import ParamAttr from paddle.fluid import ParamAttr
import numpy as np import numpy as np
import nonlocal_helper from . import nonlocal_helper
def Conv3dAffine(blob_in, def Conv3dAffine(blob_in,
......
...@@ -19,7 +19,7 @@ from __future__ import division ...@@ -19,7 +19,7 @@ from __future__ import division
import paddle.fluid as fluid import paddle.fluid as fluid
from paddle.fluid.param_attr import ParamAttr from paddle.fluid.param_attr import ParamAttr
import resnet_helper from . import resnet_helper
import logging import logging
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
......
...@@ -30,11 +30,11 @@ StNet的训练数据采用由DeepMind公布的Kinetics-400动作识别数据集 ...@@ -30,11 +30,11 @@ StNet的训练数据采用由DeepMind公布的Kinetics-400动作识别数据集
数据准备完毕后,可以通过如下两种方式启动训练: 数据准备完毕后,可以通过如下两种方式启动训练:
python train.py --model-name=STNET python train.py --model_name=STNET
--config=./configs/stnet.txt --config=./configs/stnet.txt
--save-dir=checkpoints --save_dir=checkpoints
--log-interval=10 --log_interval=10
--valid-interval=1 --valid_interval=1
bash scripts/train/train_stnet.sh bash scripts/train/train_stnet.sh
...@@ -62,9 +62,9 @@ StNet的训练数据采用由DeepMind公布的Kinetics-400动作识别数据集 ...@@ -62,9 +62,9 @@ StNet的训练数据采用由DeepMind公布的Kinetics-400动作识别数据集
可通过如下两种方式进行模型评估: 可通过如下两种方式进行模型评估:
python test.py --model-name=STNET python test.py --model_name=STNET
--config=configs/stnet.txt --config=configs/stnet.txt
--log-interval=1 --log_interval=1
--weights=$PATH_TO_WEIGHTS --weights=$PATH_TO_WEIGHTS
bash scripts/test/test__stnet.sh bash scripts/test/test__stnet.sh
...@@ -92,10 +92,10 @@ StNet的训练数据采用由DeepMind公布的Kinetics-400动作识别数据集 ...@@ -92,10 +92,10 @@ StNet的训练数据采用由DeepMind公布的Kinetics-400动作识别数据集
可通过如下命令进行模型推断: 可通过如下命令进行模型推断:
python infer.py --model-name=stnet python infer.py --model_name=stnet
--config=configs/stnet.txt --config=configs/stnet.txt
--log-interval=1 --log_interval=1
--weights=$PATH_TO_WEIGHTS --weights=$PATH_TO_WEIGHTS
--filelist=$FILELIST --filelist=$FILELIST
- 模型推断结果存储于`STNET_infer_result`中,通过`pickle`格式存储。 - 模型推断结果存储于`STNET_infer_result`中,通过`pickle`格式存储。
......
# TSM 视频分类模型 # TSM 视频分类模型
--- ---
## 内容 ## 内容
- [模型简介](#模型简介) - [模型简介](#模型简介)
- [数据准备](#数据准备) - [数据准备](#数据准备)
- [模型训练](#模型训练) - [模型训练](#模型训练)
- [模型评估](#模型评估) - [模型评估](#模型评估)
- [模型推断](#模型推断) - [模型推断](#模型推断)
- [参考论文](#参考论文) - [参考论文](#参考论文)
## 模型简介 ## 模型简介
Temporal Shift Module是由MIT和IBM Watson AI Lab的Ji Lin,Chuang Gan等人提出的通过时间位移来提高网络视频理解能力的模块,其位移操作原理如下图所示。 Temporal Shift Module是由MIT和IBM Watson AI Lab的Ji Lin,Chuang Gan等人提出的通过时间位移来提高网络视频理解能力的模块,其位移操作原理如下图所示。
<p align="center"> <p align="center">
<img src="../../images/temporal_shift.png" height=250 width=800 hspace='10'/> <br /> <img src="../../images/temporal_shift.png" height=250 width=800 hspace='10'/> <br />
Temporal shift module Temporal shift module
</p> </p>
上图中矩阵表示特征图中的temporal和channel维度,通过将一部分的channel在temporal维度上向前位移一步,一部分的channel在temporal维度上向后位移一步,位移后的空缺补零。通过这种方式在特征图中引入temporal维度上的上下文交互,提高在时间维度上的视频理解能力。 上图中矩阵表示特征图中的temporal和channel维度,通过将一部分的channel在temporal维度上向前位移一步,一部分的channel在temporal维度上向后位移一步,位移后的空缺补零。通过这种方式在特征图中引入temporal维度上的上下文交互,提高在时间维度上的视频理解能力。
TSM模型是将Temporal Shift Module插入到ResNet网络中构建的视频分类模型,本模型库实现版本为以ResNet-50作为主干网络的TSM模型。 TSM模型是将Temporal Shift Module插入到ResNet网络中构建的视频分类模型,本模型库实现版本为以ResNet-50作为主干网络的TSM模型。
详细内容请参考论文[Temporal Shift Module for Efficient Video Understanding](https://arxiv.org/abs/1811.08383v1) 详细内容请参考论文[Temporal Shift Module for Efficient Video Understanding](https://arxiv.org/abs/1811.08383v1)
## 数据准备 ## 数据准备
TSM的训练数据采用由DeepMind公布的Kinetics-400动作识别数据集。数据下载及准备请参考[数据说明](../../dataset/README.md) TSM的训练数据采用由DeepMind公布的Kinetics-400动作识别数据集。数据下载及准备请参考[数据说明](../../dataset/README.md)
## 模型训练 ## 模型训练
数据准备完毕后,可以通过如下两种方式启动训练: 数据准备完毕后,可以通过如下两种方式启动训练:
python train.py --model-name=TSM python train.py --model_name=TSM
--config=./configs/tsm.txt --config=./configs/tsm.txt
--save-dir=checkpoints --save_dir=checkpoints
--log-interval=10 --log_interval=10
--valid-interval=1 --valid_interval=1
bash scripts/train/train_tsm.sh bash scripts/train/train_tsm.sh
- 可下载已发布模型[model](https://paddlemodels.bj.bcebos.com/video_classification/tsm_kinetics.tar.gz)通过`--resume`指定权重存放路径进行finetune等开发 - 可下载已发布模型[model](https://paddlemodels.bj.bcebos.com/video_classification/tsm_kinetics.tar.gz)通过`--resume`指定权重存放路径进行finetune等开发
**数据读取器说明:** 模型读取Kinetics-400数据集中的`mp4`数据,每条数据抽取`seg_num`段,每段抽取1帧图像,对每帧图像做随机增强后,缩放至`target_size` **数据读取器说明:** 模型读取Kinetics-400数据集中的`mp4`数据,每条数据抽取`seg_num`段,每段抽取1帧图像,对每帧图像做随机增强后,缩放至`target_size`
**训练策略:** **训练策略:**
* 采用Momentum优化算法训练,momentum=0.9 * 采用Momentum优化算法训练,momentum=0.9
* 权重衰减系数为1e-4 * 权重衰减系数为1e-4
## 模型评估 ## 模型评估
可通过如下两种方式进行模型评估: 可通过如下两种方式进行模型评估:
python test.py --model-name=TSM python test.py --model_name=TSM
--config=configs/tsm.txt --config=configs/tsm.txt
--log-interval=1 --log_interval=1
--weights=$PATH_TO_WEIGHTS --weights=$PATH_TO_WEIGHTS
bash scripts/test/test_tsm.sh bash scripts/test/test_tsm.sh
- 使用`scripts/test/test_tsm.sh`进行评估时,需要修改脚本中的`--weights`参数指定需要评估的权重。 - 使用`scripts/test/test_tsm.sh`进行评估时,需要修改脚本中的`--weights`参数指定需要评估的权重。
- 若未指定`--weights`参数,脚本会下载已发布模型[model](https://paddlemodels.bj.bcebos.com/video_classification/tsm_kinetics.tar.gz)进行评估 - 若未指定`--weights`参数,脚本会下载已发布模型[model](https://paddlemodels.bj.bcebos.com/video_classification/tsm_kinetics.tar.gz)进行评估
当取如下参数时,在Kinetics400的validation数据集下评估精度如下: 当取如下参数时,在Kinetics400的validation数据集下评估精度如下:
| seg\_num | target\_size | Top-1 | | seg\_num | target\_size | Top-1 |
| :------: | :----------: | :----: | | :------: | :----------: | :----: |
| 8 | 224 | 0.70 | | 8 | 224 | 0.70 |
## 模型推断 ## 模型推断
可通过如下命令进行模型推断: 可通过如下命令进行模型推断:
python infer.py --model-name=TSM python infer.py --model_name=TSM
--config=configs/tsm.txt --config=configs/tsm.txt
--log-interval=1 --log_interval=1
--weights=$PATH_TO_WEIGHTS --weights=$PATH_TO_WEIGHTS
--filelist=$FILELIST --filelist=$FILELIST
- 模型推断结果存储于`TSM_infer_result`中,通过`pickle`格式存储。 - 模型推断结果存储于`TSM_infer_result`中,通过`pickle`格式存储。
- 若未指定`--weights`参数,脚本会下载已发布模型[model](https://paddlemodels.bj.bcebos.com/video_classification/tsm_kinetics.tar.gz)进行推断 - 若未指定`--weights`参数,脚本会下载已发布模型[model](https://paddlemodels.bj.bcebos.com/video_classification/tsm_kinetics.tar.gz)进行推断
## 参考论文 ## 参考论文
- [Temporal Shift Module for Efficient Video Understanding](https://arxiv.org/abs/1811.08383v1), Ji Lin, Chuang Gan, Song Han - [Temporal Shift Module for Efficient Video Understanding](https://arxiv.org/abs/1811.08383v1), Ji Lin, Chuang Gan, Song Han
...@@ -25,11 +25,11 @@ TSN的训练数据采用由DeepMind公布的Kinetics-400动作识别数据集。 ...@@ -25,11 +25,11 @@ TSN的训练数据采用由DeepMind公布的Kinetics-400动作识别数据集。
数据准备完毕后,可以通过如下两种方式启动训练: 数据准备完毕后,可以通过如下两种方式启动训练:
python train.py --model-name=TSN python train.py --model_name=TSN
--config=./configs/tsn.txt --config=./configs/tsn.txt
--save-dir=checkpoints --save_dir=checkpoints
--log-interval=10 --log_interval=10
--valid-interval=1 --valid_interval=1
bash scripts/train/train_tsn.sh bash scripts/train/train_tsn.sh
...@@ -47,9 +47,9 @@ TSN的训练数据采用由DeepMind公布的Kinetics-400动作识别数据集。 ...@@ -47,9 +47,9 @@ TSN的训练数据采用由DeepMind公布的Kinetics-400动作识别数据集。
可通过如下两种方式进行模型评估: 可通过如下两种方式进行模型评估:
python test.py --model-name=TSN python test.py --model_name=TSN
--config=configs/tsn.txt --config=configs/tsn.txt
--log-interval=1 --log_interval=1
--weights=$PATH_TO_WEIGHTS --weights=$PATH_TO_WEIGHTS
bash scripts/test/test_tsn.sh bash scripts/test/test_tsn.sh
...@@ -69,10 +69,10 @@ TSN的训练数据采用由DeepMind公布的Kinetics-400动作识别数据集。 ...@@ -69,10 +69,10 @@ TSN的训练数据采用由DeepMind公布的Kinetics-400动作识别数据集。
可通过如下命令进行模型推断: 可通过如下命令进行模型推断:
python infer.py --model-name=TSN python infer.py --model_name=TSN
--config=configs/tsn.txt --config=configs/tsn.txt
--log-interval=1 --log_interval=1
--weights=$PATH_TO_WEIGHTS --weights=$PATH_TO_WEIGHTS
--filelist=$FILELIST --filelist=$FILELIST
- 模型推断结果存储于`TSN_infer_result`中,通过`pickle`格式存储。 - 模型推断结果存储于`TSN_infer_result`中,通过`pickle`格式存储。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册