0%

sys.argv

sys模块是很常用的模块, 它封装了与python解释器相关的数据,例如sys.modules里面有已经加载了的所有模块信息,sys.path里面是PYTHONPATH的内容,而sys.argv则封装了传入的参数数据。 使用sys.argv接收上面第一个命令中包含的参数方式如下:

1
2
3
import sys

print(sys.argv[0],sys.argv[1],sys.argv[2])

其中sys.argv[0]是该脚本的名称,sys.argv[1]才是第一个参数,sys.argv是一个列表

用这种方式,命令行调用方式为:

python script.py parameter1 parameter2

argparse

1
2
3
4
5
6
7
8
9
10
11
import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')

args = parser.parse_args()
print(args.accumulate(args.integers))

安装

参照 https://github.com/PaddlePaddle/PaddleVideo/blob/develop/docs/zh-CN/install.md

注意这里创建虚拟环境的时候要使用python=3.7,因为3.7之后的版本,paddleVideo只支持Linux系统。

其他要求: cuda >= 10.1, cuDNN >= 7.6.4

安装完paddlepaddle之后,再安装paddleVideo

快速开始

这里官方教程写的不是很详细,安装完之后让直接用命令行方式启动程序,因为paddleVideo这个库里面有三个inference模型,分别是

1
2
3
Inference models that Paddle provides are listed as follows:

{'TSN', 'ppTSM', 'TSM'}

这里安装好环境之后,直接命令行是会报错的,因为还没有下载模型参数以及label,会报'If you want to use your own model, Please input model_file as model path!'的错误。

这时候进入python环境,跑以下程序:

1
2
3
4
5
from ppvideo import PaddleVideo
clas = PaddleVideo(model_name='ppTSM',use_gpu=False,use_tensorrt=False)
video_file='data/example.avi'
result=clas.predict(video_file)
print(result)

当你enter第二句话的时候,程序就会开始下载InferenceModel,大概有90.6兆,下载完之后再执行下面几行的程序,其中video_file这里要注意一下,程序里是相对路径。

下载的模型会放在 C:\Users\XXXX\.paddlevideo_inference\inference_model\ppTSM

下载的label的txt在'D:\\XXXXX\\anaconda_envs\\paddleVideo\\lib\\site-packages\\ppvideo\\tools\\../data/k400/Kinetics-400_label_list.txt'也就是虚拟环境那个ppvideo里

训练attention-lstm模型

前两节安装完之后,快速开始是为了测试安装正确与否。paddleVideo只有attention-lstm模型,并没有提供在youtube-8m上训练后的参数和label。所以这部分我们使用paddle框架来自己训练。

下载youtube-8m数据集并转换为paddlepaddle处理的格式

整个数据集包含3844个训练数据文件和3844个验证数据文件(TFRecord格式)

在linux系统下用curl下载,在windows下可以利用git的bash命令行的方式下载:

1
2
3
4
5
curl data.yt8m.org/download.py | partition=2/frame/train mirror=asia python

curl data.yt8m.org/download.py | partition=2/frame/validate mirror=asia python

curl data.yt8m.org/download.py | partition=2/frame/test mirror=asia python

数据下载完成之后,因为paddlepaddle需要使用pickle的数据格式,所以需要用https://github.com/PaddlePaddle/PaddleVideo/该官方仓库里data/yt8m下的脚本tf2pkl.py脚本进行转换。tf2pkl.py文件运行时需要两个参数,分别是数据源tf文件存放路径和转化后的pkl文件存放路径。

由于TFRecord文件的读取需要用到Tensorflow,用户要先安装Tensorflow,或者在安装有Tensorflow的环境中转化完数据,再拷贝到data/dataset/youtube8m/pkl目录下。为了避免和PaddlePaddle环境冲突,建议先在其他地方转化完成再将数据拷贝过来。

上面在转换数据格式的时候还要注意,tf2pkl.py文件用的tensorflow是1.X的版本,用2.0之后版本的需要重新创建虚拟环境,如果不想麻烦,可以直接在这个paddleVideo的虚拟环境里面安装tensorflow-gpu==1.14.0

这里如果安装的是gpu版本,需要有对应的cuda版本支持,1.14.0需要10.0的cuda,我的服务器是11.2的cuda,所以这里我就直接安装的是cpu版本的tensorflow。其他的版本支持请查阅:https://www.tensorflow.org/install/source#gpu

  • 在linux中命令:
1
2
python tf2pkl.py ./tf/train ./pkl/train
python tf2pkl.py ./tf/val ./pkl/val
  • 在windows中我的方案:

我看到tf2pkl.py脚本里是用sys命令行的方式调用的,然后他整个脚本都是在linux的模式下的模式。其中有几个地方改动一下就可以适用于windows:

  1. 删掉以下几行:
1
2
3
# assert (len(sys.argv) == 3)
# source_dir = sys.argv[1]
# target_dir = sys.argv[2]

禁用命令行调用的模式

  1. 将record_dir 变成你想转化的文件的文件夹的路径,比如\data\dataset\youtube8m\tf
  2. 将main函数中将outputdir路径改成你要存储pickle文件的文件夹的路径。

完成上述步骤之后,直接在IDE中运行tf2pkl.py就可以开始转化文件了。

1
export CUDA_VISIBLE_DEVICES=1

设置静态文件根目录

_config.yml中有个urlroot参数 如果你部署的地址是http://yoursite.com/child,需要设置下面两个参数。

1
2
3
url: 'http://yoursite.com/child' // 部署的域名
root: '/child/' // 部署的根目录
12

设置资源文件夹

资源(Asset)代表 source 文件夹中除了文章以外的所有文件,例如图片、CSS、JS 文件等。比方说,如果你的Hexo项目中只有少量图片,那最简单的方法就是将它们放在 source/images 文件夹中。然后通过类似于 ![](/images/image.jpg) 的方法访问它们。

< !--more-->

文章资源文件夹 对于那些想要更有规律地提供图片和其他资源以及想要将他们的资源分布在各个文章上的人来说,Hexo也提供了更组织化的方式来管理资源。这个稍微有些复杂但是管理资源非常方便的功能可以通过config.yml 文件中的 post_asset_folder 选项设为 true 来打开

1
2
3
_config.yml
post_asset_folder: true
12

当资源文件管理功能打开后,Hexo将会在你每一次通过 hexo new [layout] <title> 命令创建新文章时自动创建一个文件夹。这个资源文件夹将会有与这个 markdown 文件一样的名字。将所有与你的文章有关的资源放在这个关联文件夹中之后,你可以通过相对路径来引用它们,这样你就得到了一个更简单而且方便得多的工作流。

相对路径引用的标签插件 通过常规的 markdown 语法和相对路径来引用图片和其它资源可能会导致它们在存档页或者主页上显示不正确。在Hexo 2时代,社区创建了很多插件来解决这个问题。但是,随着Hexo 3 的发布,许多新的标签插件被加入到了核心代码中。这使得你可以更简单地在文章中引用你的资源。

1
2
3
4
{% asset_path slug %}
{% asset_img slug [title] %}
{% asset_link slug [title] %}
123

比如说:当你打开文章资源文件夹功能后,你把一个 example.jpg 图片放在了你的资源文件夹中,如果通过使用相对路径的常规 markdown 语法 ![](/example.jpg) ,它将 不会 出现在首页上。(但是它会在文章中按你期待的方式工作)

正确的引用图片方式是使用下列的标签插件而不是 markdown :

1
2
{% asset_img example.jpg avatar %}
1

通过这种方式,图片将会同时出现在文章和主页以及归档页中。通过{% asset_img 图片名称 图片说明 %}