基于动态骨骼的动作识别方法ST-GCN

解读:基于动态骨骼的动作识别方法ST-GCN(时空图卷积网络模型)

2018年04月09日 01:14:14 我是婉君的 阅读数 16076更多

分类专栏: 计算机视觉 论文

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/qq_36893052/article/details/79860328

解读:基于动态骨骼的动作识别方法ST-GCN(时空图卷积网络模型)

本文为 AAAI 2018 录用论文「Spatial Temporal Graph Convolutional Networks for Skeleton Based Action Recognition」,香港中文大学提出一种时空图卷积网络,并利用它们进行人类行为识别。这种算法基于人类关节位置的时间序列表示而对动态骨骼建模,并将图卷积扩展为时空图卷积网络而捕捉这种时空的变化关系。

ST-GCN 时空图卷积网络模型 
作者:颜思捷,熊元骏,林达华

文章链接:https://arxiv.org/abs/1801.07455

Github 代码:https://github.com/yysijie/st-gcn?

一、简介

近日,香港中大-商汤科技联合实验室的最新 AAAI 会议论文「Spatial Temporal Graph Convolution Networks for Skeleton Based Action Recognition」提出了一种新的 ST-GCN,即时空图卷积网络模型,用于解决基于人体骨架关键点的人类动作识别问题。该方法除了思路新颖之外,在标准的动作识别数据集上也取得了较大的性能提升。 
Touch headSitting down这里写图片描述这里写图片描述 
图1 ST-GCN 最末卷积层的响应可视化结果图

近年来,人类动作识别已经成为一个活跃的研究领域,它在视频理解中起着重要的作用。一般而言,人类行为识别有着多种模态(Simonyan and Zisserman 2014; Tran et al. 2015; Wang, Qiao, and Tang 2015; Wang et al. 2016; Zhao et al. 2017),例如外观、深度、光流和身体骨骼(Du, Wang, and Wang 2015; Liu et al. 2016)等。在这些模态当中,动态人类骨骼通常能与其他模态相辅相成,传达重要信息。然而,比起外观和光流建模,动态骨骼建模受到的关注较少。在这篇论文中,作者系统地研究这种模态,旨在开发一种原则性且有效的方法模拟动态骨骼,并利用它们进行人类行为识别。 
在 2D 或 3D 坐标形式下,动态骨骼模态可以自然地由人类关节位置的时间序列表示。然后,通过分析其动作模式可以做到人类行为识别。早期基于骨骼进行动作识别的方法只是在各个时间步骤使用关节坐标形成特征向量,并对其进行时序分析 (Wang et al. 2012; Fernando et al. 2015)。但这些方法能力有限,因为它们没有明确利用人类关节的空间关系,而这种空间关系对理解人类行为而言至关重要。最近,研究者开发了试图利用关节间自然连接的新方法 (Shahroudy et al. 2016; Du, Wang, and Wang 2015)。这些方法的改进令人鼓舞,表明了骨骼连通性的重要性。然而,现有的大多数方法依赖手动划分的部分或手动设定的规则来分析空间模式。因此,为特定应用设计的模型难以在其他任务中推广。 
为了跨越上述限制,我们需要一种新方法自动捕捉关节的空间构型、时间动态中所嵌入的模式。这就是深度神经网络的力量。然而,如前所述,骨骼并未以 2D 或 3D 网格的方式展现,而是以图像的形式展现。这就使得使用诸如卷积网络等已证实的模型变得困难。最近,将卷积神经网络(CNN)泛化到任意结构图形的图卷积网络(GCN)得到了越来越多的关注,而且被成功应用于图像分类 (Bruna et al. 2014)、文献分类 (Defferrard, Bresson, and Vandergheynst 2016)、半监督学习 (Kipf and Welling 2017) 等领域。但是,顺着这条思路,大部分前人的工作都把输入假定为一个固定的图形。GCN 在大规模数据集上的动态图模型应用,例如人类骨骼序列,还有待探索。 
这里写图片描述 
图2 NTU-RGBD 数据集上建立的时空图示例 
在本文中,通过将图卷积网络扩展到时空图模型,设计用于行为识别的骨骼序列通用表示,称为时空图卷积网络(ST-GCN)。如图 2 所示,该模型是在骨骼图序列上制定的,其中每个节点对应于人体的一个关节。图中存在两种类型的边,即符合关节的自然连接的空间边(spatial edge)和在连续的时间步骤中连接相同关节的时间边(temporal edge)。在此基础上构建多层的时空图卷积,它允许信息沿着空间和时间两个维度进行整合。 
ST-GCN 的层次性消除了手动划分部分或遍历规则的需要。这不仅能获得更强的表达能力和更高的性能(如我们的实验所示),而且还使其易于在不同的环境中推广。在通用 GCN 公式化的基础上,我们还基于图像模型的灵感研究设计了图卷积核的新策略。 
这项工作的主要贡献在于三个方面:1)我们提出 ST-GCN,一个基于图的动态骨骼建模方法,这是首个用以完成本任务的基于图形的神经网络的应用。2)我们提出了在 ST-GCN 中设计卷积核的几个原则,旨在满足骨骼建模的具体要求。3)在基于骨骼动作识别的两个大规模数据集上,我们的模型与先前使用的手动分配部分或遍历规则的方法相比,需要相当少的手动设计,实现了更优越的性能。

二、ST-GCN

当我们运动的时候,人体在小范围运动的关节称之为“body parts”。现在基于骨骼点的动作识别方法都是具有在建模中具有明确的身体部分。相对于整个骨架,我们主要的改进是在建关键轨迹模型中建立有限制的部位“local regions”,并形成一个多层骨骼序列的表示。在例如图像目标识别任务中,分层表示与局部化通常由CNN的特性来表示。这种思路使得我们也想在基于骨骼点的动作识别中使用。所以我们创造了ST-GCN模型。

2.1 通道

基于骨骼的数据可以从运动捕捉设备或视频的姿态估计算法中获得。通常来说,数据是一系列的帧,每一帧都有一组联合坐标。给定 2D 或 3D 坐标系下的身体关节序列,我们就能构造一个时空图。其中,人体关节对应图的节点,人体身体结构的连通性和时间上的连通性对应图的两类边。因此,ST-GCN 的输入是图节点的联合坐标向量。这可以被认为是一个基于图像的 CNN 模拟,其中输入由 2D 图像网格上的像素强度矢量形成。对输入数据应用多层的时空图卷积操作,可以生成更高级别的特征图。然后,它将被标准的 SoftMax 分类器分类到相应的动作类别。整个模型用反向传播进行端对端方式的训练。现在,我们将介绍 ST-GCN 模型的各个部分。

2.2 骨骼图结构

通常使用每一帧每一个人体骨骼的2D或者3D坐标来表示骨骼序列。之前基于骨骼点的动作识别是通过,每一帧中所有的关节向量链接成一个特征向量。再本文中,使用时空卷积图去形成多层骨骼序列的表达。构建骨骼时空图G = (V,E),帧数为T,关节点数为N. 
在图中,节点矩阵集合V={vti|t=1,...,T,i=1,...N}V={vti|t=1,...,T,i=1,...N},包括骨骼序列上的所有的关节点。当ST-GCN作为输入的时候,关键点上的第t帧、第i个关节点的特征向量F(vti)F(vti)是由坐标点坐标以及置信度组成。使用两步构建骨骼序列的时空图。第一步,帧与帧之间的边表示人体对应骨骼点的时序关系;第二步,在每一帧内部,按照人体的自然骨架连接关系构造空间图。这种链接的建立是依靠自然结构的,没有人工手动设计的。这个模型也支持不同数量的骨骼点集上使用。例如,Kinect dataset,我们使用openpose工具在2D姿态估计中得到18个骨骼点,在NTU-RCB+D数据集上,我们是用3D骨骼跟踪的输出作为本模型的输入,产生25个骨骼点。STGCN可以在两种情况下运行,并提供一致的卓越性能。 图1中示出了构建的空间时间图的示例。 
正式上,边的集合E有两个子集组成,第一个子集是每一帧帧内骨骼点的链接Es={vtivtj|(i,j)∈H}Es={vtivtj|(i,j)∈H},H表示人体骨骼点集合。第二个子集表示不同帧间的链接,EF={vtiv(t+1)i}EF={vtiv(t+1)i}。因此E_F中的每一个边代表一个特定的关节随着时间推移其轨迹。

2.3 Spatial Graph Convolutional Neural Network

在我们深入了解完整的ST-GCN之前,我们先看看在一个单一帧内的图CNN模型。在实例中,在时间t的单帧中,有N个关键点VtVt,骨骼内的边Es(t)={vtivtj|(i,j)∈H}Es(t)={vtivtj|(i,j)∈H}。从2D自然图像或特征图上的卷积运算的定义来看,它们可被视为二维网格。卷积操作输出的feature map也是一个2D网格。当选用步长为1及恰当的padding,可以使得输出faeture map与输入图像保持一样的大小。下述讨论建立在这种讨论上。设一个大小为K x K的卷积核,输入图像为finfin ,通道数为c。单个通道在位置x的输出: 
(1)

 

fout(x)=∑h=1K∑w=1Kfin(p(x,h,w)).w(h,w)fout(x)=∑h=1K∑w=1Kfin(p(x,h,w)).w(h,w)


sampling function p:Z2∗Z2→Z2Z2∗Z2→Z2表示位置x及其领域。在图像卷积中,p(x,h,w)=x+p‘(h,w)p(x,h,w)=x+p‘(h,w)。weight function w:Z2→RcZ2→Rc表示权重w提供c维实空间中的权向量,用于计算具有维度c的采样输入特征向量的内积。权重函数与输入x的位置无关。因此,输入图像上的所有滤镜权重都是共享的。图像域的标准卷积,通过对p(x)中的矩形网格进行编码来实现。将上述公式的卷及操作应用到空间图Vt的features map。其中feature mapftin:Vt→Rcfint:Vt→Rc为在图上的每一个节点。 
Sampling function 
在图上,sampling function p(h,w)被定义为中心像素x的领域像素。在图上,我们同样定义点vtivti领域集的sampling function B(vti)={vtj|d(vtj,vti≥D)}B(vti)={vtj|d(vtj,vti≥D)}。这里d(vtj,vtid(vtj,vti为vtjvtj到vtjvtj的最小路径。 
(2)

 

p(vti,vtj)=vtjp(vti,vtj)=vtj


本任务中D=1,即取距离为1的为领域集

 

Weight function 
与sampling function相比,权值函数更难以定义。 在二维卷积中,中心位置周围自然存在一个刚性网格。所以领域像素可以具有固定的空间顺序。 然后可以通过根据空间顺序索引(c; K; K)维度的张量来实现权重函数。对于像我们刚刚构建的图一般的图,没有这种规律的排布。 这个问题首先在(Niepert,Ahmed和Kutzkov,2016)中进行了研究,其中顺序是由根节点周围的领域图中的图标记过程定义的。我们遵循这个想法来构建我们的权重函数。 我们不是给每一个领域节点一个独特的标签,而是通过将一个骨骼点vtivti的邻居集B(vti)B(vti)划分成固定数量的K个子集来简化过程,其中每个子集都有一个数字标签。 
(3)

 

w(vti,vtj)=w′(lti(vtj))w(vti,vtj)=w′(lti(vtj))

 

Spatial Graph Convolution 
随着重新定义sampling function 与weight function,我们可以将公式1应用到图卷积上:

 

fout(vti)=∑vti∈B(vti)1Zti(vtj)∗fin(p(vti,vtj))∗w(vtivtj)fout(vti)=∑vti∈B(vti)1Zti(vtj)∗fin(p(vti,vtj))∗w(vtivtj)


这里正则化项Zti(vtj)=|{vtk|lti(vtk)=lti(vtj)}|Zti(vtj)=|{vtk|lti(vtk)=lti(vtj)}|等于相应子集的基数。这一项增加了不同子集的贡献。从公式2,3,4中我们可以得出: 
(5)

 

fout(vti)=∑vti∈B(vti)1Zti(vtj)∗w(lti(vtj))fout(vti)=∑vti∈B(vti)1Zti(vtj)∗w(lti(vtj))


值得注意的是,如果我们将图像视为常规2D网格,则该公式可以类似于标准2D卷积。 例如,为了类似于3x3卷积运算,我们在3x3中有一个9像素的领域。 以像素为中心的3格。 然后应该将邻居组分割成9个子集,每个子集有一个像素。

 

Spatial Temporal Modeling 
在定义了空间图CNN之后,我们现在开始进行在骨架序列时空动态进行建模。回想一下,在图的构建中,图的时间方面是通过在连续帧之间连接相同的关节来构建的。 这使我们能够定义一个非常简单的策略来将空间图CNN扩展到空间时间域。也就是说,我们将邻域的概念扩展为也包含时间连接的关节 
(6)

 

B(vti)={vqj|d(vtj,vti)≤K,|q−t|≤[Γ/2]}B(vti)={vqj|d(vtj,vti)≤K,|q−t|≤[Γ/2]}


参数��控制时间范围以包含在邻居图中,因此可以称为时间内核大小。为了完成ST图上的卷积运算,我们还需要sampling function与weight function,sampling function与空间图唯一的情况相同,并且权重功能,或者特别是标签图lST。 因为时间轴是有序的,所以我们直接修改标签映射lST,以便根据vti生成一个空间时间邻域 
(7)

 

lST(vqj)=ltj(vtj)+(q−t+[Γ/2]∗KlST(vqj)=ltj(vtj)+(q−t+[Γ/2]∗K

 

2.4 划分方式

给定空间时间图的高级表达式卷积,实施不同的划分策略得到标签地图。 在这项工作中,我们探讨了几种分区策略 为了简单起见,我们只讨论单个框架中的情况,因为它们可以使用方程式自然扩展到时空域。 
这里写图片描述 
图3 本文提出的用于构建卷积操作的分割策略。从左到右:(a)输入骨骼的框架示例。身体关节以蓝点表示。D=1 的卷积核感受野由红色的虚线画出。(b)单标签划分策略。其中近邻的所有节点标签相同(绿色)。(c)距离划分。这两个子集是距离为 0 的根节点本身,和距离为 1 的根节点相邻节点(蓝色)。(d)空间构型划分。根据节点到骨架重心(图中黑色十字)的距离和到根节点(绿色)的距离的比较进行标记。向心节点(蓝色)到骨架重心的距离比根节点到骨架重心的距离短,而离心节点(黄色)到骨架重心的距离比根节点长

第一种称为「唯一划分」(uni-labeling)。其与原始 GCN 相同,将节点的 1 邻域划分为一个子集。

第二种称为「基于距离的划分」(distance partitioning),它将节点的 1 邻域分为两个子集,即节点本身子集与邻节点子集。引入基于距离的划分使得我们可以分析骨架关键点之间的微分性质。

进一步,我们针对动作识别的特点,提出了第三种,「空间构型划分」(spatial configuration partitioning)。这种划分规则将节点的 1 邻域划分为 3 个子集,第一个子集为节点本身,第二个为空间位置上比本节点更靠近整个骨架重心的邻节点集合,第三个则为更远离重心的邻节点集合。建立这种划分规则在根据运动分析的研究中对向心运动与离心运动的定义。三种划分规则的示意图请见图 4。 
(8)

 

lti(vtj)=⎧⎩⎨⎪⎪0,1,2,if rj=ri if rj<ri if rj>rilti(vtj)={0,if rj=ri 1,if rj<ri 2,if rj>ri

 

3.5 使用ST-GCN

使用图卷积网络不仅仅只是将数据当做2D或者3D,还需要有些细节。 
通过图的邻接矩阵A与单位矩阵I表示单帧内的骨骼点的链接。在单帧内,使用第一种划分策略的ST-GCN的表示如下: 
(9) 
fout=Λ−12(A+I)Λ−12finWfout=Λ−12(A+I)Λ−12finW

这里Λii=∑j(Aij+Iij)Λii=∑j(Aij+Iij)。这里,多个输出通道的权重矢量被堆叠以形成权重矩阵W。实际上,在时空下,输入的特征图作为张量(C,V,T)维度。

三、网络结构与训练

这里写图片描述
图4 我们对视频进行姿态估计,并在骨骼序列上构建时空图。此后,对其应用多层时空图卷积操作(ST-GCN),并逐渐在图像上生成更高级的特征图。然后,利用标准的 Softmax 分类器,能将其分类到相应的操作类别中 
由于ST-GCN在不同节点上共享权重,因此保持输入数据的比例在不同节点上保持一致非常重要。在实验中,将数据进行正则化在输入到batch normalization。ST-GCN模型由九层时空图卷积组成。前三层输出64通道数,中间三层输出128通道,最后三层输出256层通道数。一共有9个时间卷积核,在每一个ST-GCN使用残差链接,使用dropout进行特征正则化处理,将一半的神经元进行dropout处理。第4、7层的时间卷积层设置为poling层。最后将输出的256个通道数的输出进行全局pooling,并由softmax进行分类。是由SGD进行优化,学习率设置为0.01,并每10个epoch迭代减小0.01。

四、实验

作者在两个性质迥异的骨架动作识别数据集上进行了实验来验证 ST-GCN 的性能。

第一个数据集是 Kinetics-Skeleton,它来自于最近由 Google DeepMind 贡献的 Kinetics 视频人类动作识别数据集。我们使用 OpenPose 姿态估计软件得到视频中所有的骨架关键点信息来构成 Kinetics-Skeleton。该数据集共有约 30 万个视频与 400 类动作。

第二个数据集是 NTU-RGB+D,这是三维骨架动作识别的标准测试数据集。它包含了用 Microsoft Kinect 采集的三维骨架序列。该数据集共有约 6 万个视频,60 个动作类别。这个数据集包含了两个测试协议,即跨表演人(X-Sub)与跨视角(X-View)协议。在两个数据集的三个测试协议上,ST-GCN 相比现有方法在识别精度上均有很大提高,具体结果可见表。

分类: 深度学习

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/547210.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pyTorch实现C3D模型的视频行为识别实践

1、3D卷积t简介 2、C3D模型原理与PyTorch实现 2.1、C3D模型结构 2.2、C3D视频动作识别&#xff08;附PyTorch代码&#xff09; 2.3、测试结果 参考 1、3D卷积的简介 在图像处理领域&#xff0c;被卷积的都是静态图像&#xff0c;所以使用2D卷积网络就足以。而在视频理解领域&…

HyperLPR Python3车牌识别系统的入门使用

概要 HyperLRP是一个开源的、基于深度学习高性能中文车牌识别库&#xff0c;由北京智云视图科技有限公司开发&#xff0c;支持PHP、C/C、Python语言&#xff0c;Windows/Mac/Linux/Android/IOS 平台。 github地址&#xff1a; https://github.com/zeusees/HyperLPR TODO 支…

java简单自定义Annotation

为什么80%的码农都做不了架构师&#xff1f;>>> 原文内容比较多&#xff0c;这里就简单地说一下。java 5以后增加了3个annotation&#xff0c; Override Deprecated SuppressWarnings 以上annotation用途就不说了。java中自定义annotation需要interface关键字和用到…

Tensorflow Object detection API 在 Windows10 配置

Tensorflow Object detection API 在 Windows10 下的配置不如在 Ubuntu 下配置方便&#xff0c;但还是有方法的&#xff0c;介绍一下我的配置流程。官方目标检测的demo中调用了大量的py文件&#xff0c;不利于项目的部署&#xff0c;因此我将其合并为两个文件 ##1.Tensorflow m…

使用jq的toggle函数实现全选功能遇到的问题

2019独角兽企业重金招聘Python工程师标准>>> 今天做网站后台管理的时候&#xff0c;要实现一个单选全选的功能&#xff0c;很简单的功能&#xff0c;不过&#xff0c;遇到了一个很诡异的问题&#xff0c;写出来跟大家分享下。 功能就不赘述了&#xff0c;大家都懂&…

GO国内镜像加速模块下载

众所周知&#xff0c;国内网络访问国外资源经常会出现不稳定的情况。 Go 生态系统中有着许多中国 Gopher 们无法获取的模块&#xff0c;比如最著名的 golang.org/x/...。并且在中国大陆从 GitHub 获取模块的速度也有点慢。 因此设置 CDN 加速代理就很有必要了&#xff0c;以下…

AbstractEndpoint 和 ProtocolHandler

2019独角兽企业重金招聘Python工程师标准>>> AbstractEndpoint 和 ProtocolHandler /** Licensed to the Apache Software Foundation (ASF) under one or more* contributor license agreements. See the NOTICE file distributed with* this work for additiona…

HOG + SVM 实现图片分类(python3)

前言 大家能看到这篇文章&#xff0c;想必对HOG还是有些了解了&#xff0c;那我就不赘述了&#xff0c;其实我自己不太懂&#xff0c;但是还是比刚开始好一些了。下面我的代码是参考这位博主的&#xff1a;点我查看 上面那位博主是用的cifar-10数据集&#xff0c;但是我们的数…

随机过程及其在金融领域中的应用 第三章 习题 及 答案

随机过程及其在金融领域中的应用 第三章 习题 及 答案 本文地址: http://blog.csdn.net/caroline_wendy/article/details/16879515 包含: 1, 2, 5, 15; 第1题: 第2题: 第5题: 第15题: 转载于:https://blog.51cto.com/spikeking/1388002

Fiddler手机抓包(iPhone)

Fiddler不但能截获各种浏览器发出的HTTP/HTTPS请求&#xff0c;也可以截获各种移动设备&#xff08;包括Andriod和IOS&#xff09;发出的HTTP/HTTPS请求。最关键的是&#xff0c;Fiddler还可以断点调试&#xff0c;修改Request和Response&#xff0c;而且即便抓包的是IOS设备&a…

python脚本去除文件名里的空格

原始文件名里很多空格&#xff0c;写了个python脚本去除文件名里的空格 import osfilepath"image" # 文件目录名 zimulus os.listdir(filepath)for musicname in zimulus:#改目录下的文件名oldmusicpath filepath \\ musicnamenewmusicname musicname.replace( …

eclipse打开文件所在目录

设置 添加扩展工具&#xff0c;添加步骤如下&#xff1a; Run-->External Tools-->External Tools Configurations... new 一个 programlocation 里面填 &#xff1a;C:/WINDOWS/explorer.exeArguments 里面填: ${container_loc}设置完成之后&#xff0c;选择文件&#…

python saml2 认证实例程序demo

# pip install pysaml2 from saml2.client import Saml2Client from saml2.config import Config as Saml2Configmetadata_filepath acs_endpoint_url entity_id# 获取跳转网址 saml_settings {metadata: {local: [authenticator_self.metadata_filepath]}, service: {sp: {end…

找回Kitkat的AppOps

2019独角兽企业重金招聘Python工程师标准>>> How to invoke AppOps in Android 4.4 KITKAT % adb shell am start -n com.android.settings/com.android.settings.Settings \ -e :android:show_fragment com.android.settings.applications.AppOpsSummary \ --activ…

win2003 sp2+iis 6.0上部署.net 2.0和.net 4.0网站的方法

网站环境 IIS6.0,操作系统Windows server2003 sp2,服务器之前已经部署了.net 2.0和asp的网站,现在要部署新开发的.net 4.0网站.本来认为很简单&#xff0c;却遇到了很多问题&#xff0c;下面详细描述下过程&#xff1a; 1.官网下载.net framework4.0,下载地址:http://www.micro…

python+opencv实现机器视觉基础技术(2)(宽度测量,缺陷检测,医学检测

本篇博客接着讲解机器视觉的有关技术和知识。包括宽度测量&#xff0c;缺陷检测&#xff0c;医学处理。 一&#xff1a;宽度测量 在传统的自动化生产中&#xff0c;对于尺寸的测量&#xff0c;典型的方法就是千分尺、游标卡尺、塞尺等。而这些测量手段测量精度低、速度慢&…

map 与 unordered_map

两者效率对比&#xff1a; #include <iostream> #include <string> #include <map> #include <unordered_map> #include <sys/time.h> #include <list>using namespace std;template<class T> void fun(const T& t, int sum) {f…

YOLO v3 安装并训练自己数据

文章目录 1. 安装1.1 模型安装1.2 运行Demo2.训练自己的数据集2.1数据集准备2.2修改配置文件2.2.1修改cfg/voc.data2.2.2修改data/voc.names2.2.3修改cfg/yolo-voc.cfg2.3 训练3. 测试3.1 单张图像测试3.2多张图像测试3.3 测试数据集测试mAP、recall等参数命令参数总结训练模型…

OpenStack-Mitaka 一键安装测试环境脚本

说明&#xff1a;这个脚本是采用Bash Shell编写&#xff0c;这个版本还只能作为测试环境搭建使用。 此脚本原形的发起人是网友&#xff1a;WuYuLiang.这里有他的博客链接: 第一版的链接: http://blog.csdn.net/wylfengyujiancheng/article/details/51137707 最新版链接: http:…

grunt使用小记之uglify:最全的uglify使用DEMO

grunt-contrib-uglify uglify是一个文件压缩插件&#xff0c;项目地址&#xff1a;https://github.com/gruntjs/grunt-contrib-uglify 本文将以一个DEMO来展示如何使用uglify插件。 DEMO环境 package.json: {"name": "grunt-demo","version": &q…