diff --git a/PaddleCV/video/README.md b/PaddleCV/video/README.md index 303d063a6d031a2978d66dabeb4250713d7f8d62..eedeb79d45449ccfc9b18a001a2495e5c1b02f61 100644 --- a/PaddleCV/video/README.md +++ b/PaddleCV/video/README.md @@ -38,18 +38,18 @@ ``` bash export CUDA_VISIBLE_DEVICES=0 -python train.py --model-name=STNET +python train.py --model_name=STNET --config=./configs/stnet.txt - --save-dir=checkpoints + --save_dir=checkpoints ``` 多卡训练: ``` bash 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 - --save-dir=checkpoints + --save_dir=checkpoints ``` 视频模型库同时提供了快速训练脚本,脚本位于`scripts/train`目录下,可通过如下命令启动训练: diff --git a/PaddleCV/video/models/attention_cluster/README.md b/PaddleCV/video/models/attention_cluster/README.md index 6e27bde7adea3d5f08749f099f87e0632b02d62e..6314f2d027430e8466b5d9aeefecab2772a91a79 100644 --- a/PaddleCV/video/models/attention_cluster/README.md +++ b/PaddleCV/video/models/attention_cluster/README.md @@ -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 - --save-dir=checkpoints - --log-interval=10 - --valid-interval=1 + --save_dir=checkpoints + --log_interval=10 + --valid_interval=1 bash scripts/train/train_attention_cluster.sh @@ -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 - --log-interval=1 + --log_interval=1 --weights=$PATH_TO_WEIGHTS bash scripts/test/test_attention_cluster.sh @@ -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 - --log-interval=1 - --weights=$PATH_TO_WEIGHTS + --log_interval=1 + --weights=$PATH_TO_WEIGHTS --filelist=$FILELIST - 模型推断结果存储于`AttentionCluster_infer_result`中,通过`pickle`格式存储。 @@ -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 - diff --git a/PaddleCV/video/models/attention_lstm/README.md b/PaddleCV/video/models/attention_lstm/README.md index 6458edb7d674ea2329a1f5d1b596c45e023a3f51..50a835b7d7e9736d5ee23f17967d187392257303 100644 --- a/PaddleCV/video/models/attention_lstm/README.md +++ b/PaddleCV/video/models/attention_lstm/README.md @@ -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 - --save-dir=checkpoints - --log-interval=10 - --valid-interval=1 + --save_dir=checkpoints + --log_interval=10 + --valid_interval=1 bash scripts/train/train_attention_lstm.sh @@ -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 - --log-interval=1 + --log_interval=1 --weights=$PATH_TO_WEIGHTS bash scripts/test/test_attention_lstm.sh @@ -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 - --log-interval=1 - --weights=$PATH_TO_WEIGHTS + --log_interval=1 + --weights=$PATH_TO_WEIGHTS --filelist=$FILELIST - 模型推断结果存储于`AttentionLSTM_infer_result`中,通过`pickle`格式存储。 @@ -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 - [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 - diff --git a/PaddleCV/video/models/nonlocal_model/README.md b/PaddleCV/video/models/nonlocal_model/README.md index 4f58cee9fa03e4df214dd9e4343afbb998c19e5a..ec5411bc65c32979eba5579b179ef163e709d3c4 100644 --- a/PaddleCV/video/models/nonlocal_model/README.md +++ b/PaddleCV/video/models/nonlocal_model/README.md @@ -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 - --save-dir=checkpoints - --log-interval=10 - --valid-interval=1 + --save_dir=checkpoints + --log_interval=10 + --valid_interval=1 bash scripts/train/train_nonlocal.sh @@ -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 - --log-interval=1 + --log_interval=1 --weights=$PATH_TO_WEIGHTS bash scripts/test/test_nonlocal.sh diff --git a/PaddleCV/video/models/nonlocal_model/nonlocal_model.py b/PaddleCV/video/models/nonlocal_model/nonlocal_model.py index be0d7f691d8df52019cce80e66cbfc43c0e370c9..689106c11d07eb6170e9f2ee3a5a35ec47fa96df 100644 --- a/PaddleCV/video/models/nonlocal_model/nonlocal_model.py +++ b/PaddleCV/video/models/nonlocal_model/nonlocal_model.py @@ -14,11 +14,10 @@ import os import numpy as np -import cPickle import paddle.fluid as fluid from ..model import ModelBase -import resnet_video +from . import resnet_video from .nonlocal_utils import load_params_from_file import logging diff --git a/PaddleCV/video/models/nonlocal_model/resnet_helper.py b/PaddleCV/video/models/nonlocal_model/resnet_helper.py index 8ba6a3bc1110e89696e82cce2ed83b4344d29235..1fb5c747ac5a9ecc3dd072444e4ae2cd475b931a 100644 --- a/PaddleCV/video/models/nonlocal_model/resnet_helper.py +++ b/PaddleCV/video/models/nonlocal_model/resnet_helper.py @@ -21,7 +21,7 @@ import paddle.fluid as fluid from paddle.fluid import ParamAttr import numpy as np -import nonlocal_helper +from . import nonlocal_helper def Conv3dAffine(blob_in, diff --git a/PaddleCV/video/models/nonlocal_model/resnet_video.py b/PaddleCV/video/models/nonlocal_model/resnet_video.py index 5cfd63ee40fa7227e78ecfddcd936e53bc31d0ec..6a0717566f491f7f0b472ab666aea5dff9392471 100644 --- a/PaddleCV/video/models/nonlocal_model/resnet_video.py +++ b/PaddleCV/video/models/nonlocal_model/resnet_video.py @@ -19,7 +19,7 @@ from __future__ import division import paddle.fluid as fluid from paddle.fluid.param_attr import ParamAttr -import resnet_helper +from . import resnet_helper import logging logger = logging.getLogger(__name__) diff --git a/PaddleCV/video/models/stnet/README.md b/PaddleCV/video/models/stnet/README.md index 2b849ae7ce68f218309b028204269940d702043d..15fe1ef3b458678b016167e197a00fc7fa3d8239 100644 --- a/PaddleCV/video/models/stnet/README.md +++ b/PaddleCV/video/models/stnet/README.md @@ -30,11 +30,11 @@ StNet的训练数据采用由DeepMind公布的Kinetics-400动作识别数据集 数据准备完毕后,可以通过如下两种方式启动训练: - python train.py --model-name=STNET + python train.py --model_name=STNET --config=./configs/stnet.txt - --save-dir=checkpoints - --log-interval=10 - --valid-interval=1 + --save_dir=checkpoints + --log_interval=10 + --valid_interval=1 bash scripts/train/train_stnet.sh @@ -62,9 +62,9 @@ StNet的训练数据采用由DeepMind公布的Kinetics-400动作识别数据集 可通过如下两种方式进行模型评估: - python test.py --model-name=STNET + python test.py --model_name=STNET --config=configs/stnet.txt - --log-interval=1 + --log_interval=1 --weights=$PATH_TO_WEIGHTS bash scripts/test/test__stnet.sh @@ -92,10 +92,10 @@ StNet的训练数据采用由DeepMind公布的Kinetics-400动作识别数据集 可通过如下命令进行模型推断: - python infer.py --model-name=stnet + python infer.py --model_name=stnet --config=configs/stnet.txt - --log-interval=1 - --weights=$PATH_TO_WEIGHTS + --log_interval=1 + --weights=$PATH_TO_WEIGHTS --filelist=$FILELIST - 模型推断结果存储于`STNET_infer_result`中,通过`pickle`格式存储。 diff --git a/PaddleCV/video/models/tsm/README.md b/PaddleCV/video/models/tsm/README.md index 191d4dbc709be5f208c759e201e3f9f6caaa0aa2..0fe81f7d1019f86988366eea15b10d514b82fa0c 100644 --- a/PaddleCV/video/models/tsm/README.md +++ b/PaddleCV/video/models/tsm/README.md @@ -1,92 +1,91 @@ -# TSM 视频分类模型 - ---- -## 内容 - -- [模型简介](#模型简介) -- [数据准备](#数据准备) -- [模型训练](#模型训练) -- [模型评估](#模型评估) -- [模型推断](#模型推断) -- [参考论文](#参考论文) - - -## 模型简介 - -Temporal Shift Module是由MIT和IBM Watson AI Lab的Ji Lin,Chuang Gan等人提出的通过时间位移来提高网络视频理解能力的模块,其位移操作原理如下图所示。 - -

-
-Temporal shift module -

- -上图中矩阵表示特征图中的temporal和channel维度,通过将一部分的channel在temporal维度上向前位移一步,一部分的channel在temporal维度上向后位移一步,位移后的空缺补零。通过这种方式在特征图中引入temporal维度上的上下文交互,提高在时间维度上的视频理解能力。 - -TSM模型是将Temporal Shift Module插入到ResNet网络中构建的视频分类模型,本模型库实现版本为以ResNet-50作为主干网络的TSM模型。 - -详细内容请参考论文[Temporal Shift Module for Efficient Video Understanding](https://arxiv.org/abs/1811.08383v1) - -## 数据准备 - -TSM的训练数据采用由DeepMind公布的Kinetics-400动作识别数据集。数据下载及准备请参考[数据说明](../../dataset/README.md) - -## 模型训练 - -数据准备完毕后,可以通过如下两种方式启动训练: - - python train.py --model-name=TSM - --config=./configs/tsm.txt - --save-dir=checkpoints - --log-interval=10 - --valid-interval=1 - - bash scripts/train/train_tsm.sh - -- 可下载已发布模型[model](https://paddlemodels.bj.bcebos.com/video_classification/tsm_kinetics.tar.gz)通过`--resume`指定权重存放路径进行finetune等开发 - -**数据读取器说明:** 模型读取Kinetics-400数据集中的`mp4`数据,每条数据抽取`seg_num`段,每段抽取1帧图像,对每帧图像做随机增强后,缩放至`target_size`。 - -**训练策略:** - -* 采用Momentum优化算法训练,momentum=0.9 -* 权重衰减系数为1e-4 - -## 模型评估 - -可通过如下两种方式进行模型评估: - - python test.py --model-name=TSM - --config=configs/tsm.txt - --log-interval=1 - --weights=$PATH_TO_WEIGHTS - - bash scripts/test/test_tsm.sh - -- 使用`scripts/test/test_tsm.sh`进行评估时,需要修改脚本中的`--weights`参数指定需要评估的权重。 - -- 若未指定`--weights`参数,脚本会下载已发布模型[model](https://paddlemodels.bj.bcebos.com/video_classification/tsm_kinetics.tar.gz)进行评估 - -当取如下参数时,在Kinetics400的validation数据集下评估精度如下: - -| seg\_num | target\_size | Top-1 | -| :------: | :----------: | :----: | -| 8 | 224 | 0.70 | - -## 模型推断 - -可通过如下命令进行模型推断: - - python infer.py --model-name=TSM - --config=configs/tsm.txt - --log-interval=1 - --weights=$PATH_TO_WEIGHTS - --filelist=$FILELIST - -- 模型推断结果存储于`TSM_infer_result`中,通过`pickle`格式存储。 - -- 若未指定`--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 - +# TSM 视频分类模型 + +--- +## 内容 + +- [模型简介](#模型简介) +- [数据准备](#数据准备) +- [模型训练](#模型训练) +- [模型评估](#模型评估) +- [模型推断](#模型推断) +- [参考论文](#参考论文) + + +## 模型简介 + +Temporal Shift Module是由MIT和IBM Watson AI Lab的Ji Lin,Chuang Gan等人提出的通过时间位移来提高网络视频理解能力的模块,其位移操作原理如下图所示。 + +

+
+Temporal shift module +

+ +上图中矩阵表示特征图中的temporal和channel维度,通过将一部分的channel在temporal维度上向前位移一步,一部分的channel在temporal维度上向后位移一步,位移后的空缺补零。通过这种方式在特征图中引入temporal维度上的上下文交互,提高在时间维度上的视频理解能力。 + +TSM模型是将Temporal Shift Module插入到ResNet网络中构建的视频分类模型,本模型库实现版本为以ResNet-50作为主干网络的TSM模型。 + +详细内容请参考论文[Temporal Shift Module for Efficient Video Understanding](https://arxiv.org/abs/1811.08383v1) + +## 数据准备 + +TSM的训练数据采用由DeepMind公布的Kinetics-400动作识别数据集。数据下载及准备请参考[数据说明](../../dataset/README.md) + +## 模型训练 + +数据准备完毕后,可以通过如下两种方式启动训练: + + python train.py --model_name=TSM + --config=./configs/tsm.txt + --save_dir=checkpoints + --log_interval=10 + --valid_interval=1 + + bash scripts/train/train_tsm.sh + +- 可下载已发布模型[model](https://paddlemodels.bj.bcebos.com/video_classification/tsm_kinetics.tar.gz)通过`--resume`指定权重存放路径进行finetune等开发 + +**数据读取器说明:** 模型读取Kinetics-400数据集中的`mp4`数据,每条数据抽取`seg_num`段,每段抽取1帧图像,对每帧图像做随机增强后,缩放至`target_size`。 + +**训练策略:** + +* 采用Momentum优化算法训练,momentum=0.9 +* 权重衰减系数为1e-4 + +## 模型评估 + +可通过如下两种方式进行模型评估: + + python test.py --model_name=TSM + --config=configs/tsm.txt + --log_interval=1 + --weights=$PATH_TO_WEIGHTS + + bash scripts/test/test_tsm.sh + +- 使用`scripts/test/test_tsm.sh`进行评估时,需要修改脚本中的`--weights`参数指定需要评估的权重。 + +- 若未指定`--weights`参数,脚本会下载已发布模型[model](https://paddlemodels.bj.bcebos.com/video_classification/tsm_kinetics.tar.gz)进行评估 + +当取如下参数时,在Kinetics400的validation数据集下评估精度如下: + +| seg\_num | target\_size | Top-1 | +| :------: | :----------: | :----: | +| 8 | 224 | 0.70 | + +## 模型推断 + +可通过如下命令进行模型推断: + + python infer.py --model_name=TSM + --config=configs/tsm.txt + --log_interval=1 + --weights=$PATH_TO_WEIGHTS + --filelist=$FILELIST + +- 模型推断结果存储于`TSM_infer_result`中,通过`pickle`格式存储。 + +- 若未指定`--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 diff --git a/PaddleCV/video/models/tsn/README.md b/PaddleCV/video/models/tsn/README.md index 6b030d9b7008fa320347a75cb2d897df48c50a83..800fdf95fd9d16282420ace1dc71085ff83e6091 100644 --- a/PaddleCV/video/models/tsn/README.md +++ b/PaddleCV/video/models/tsn/README.md @@ -25,11 +25,11 @@ TSN的训练数据采用由DeepMind公布的Kinetics-400动作识别数据集。 数据准备完毕后,可以通过如下两种方式启动训练: - python train.py --model-name=TSN + python train.py --model_name=TSN --config=./configs/tsn.txt - --save-dir=checkpoints - --log-interval=10 - --valid-interval=1 + --save_dir=checkpoints + --log_interval=10 + --valid_interval=1 bash scripts/train/train_tsn.sh @@ -47,9 +47,9 @@ TSN的训练数据采用由DeepMind公布的Kinetics-400动作识别数据集。 可通过如下两种方式进行模型评估: - python test.py --model-name=TSN + python test.py --model_name=TSN --config=configs/tsn.txt - --log-interval=1 + --log_interval=1 --weights=$PATH_TO_WEIGHTS bash scripts/test/test_tsn.sh @@ -69,10 +69,10 @@ TSN的训练数据采用由DeepMind公布的Kinetics-400动作识别数据集。 可通过如下命令进行模型推断: - python infer.py --model-name=TSN + python infer.py --model_name=TSN --config=configs/tsn.txt - --log-interval=1 - --weights=$PATH_TO_WEIGHTS + --log_interval=1 + --weights=$PATH_TO_WEIGHTS --filelist=$FILELIST - 模型推断结果存储于`TSN_infer_result`中,通过`pickle`格式存储。