facebook怎么查看个人facebook二维码怎么生成

输入一方面指输入的数据类型和格式,也包括数据增强的相关操作。 

双流网络中,空间网络通道的输入格式通常为单RGB图像或者是多帧RGB堆叠。

空间流上 改进 提取关键帧

空间网络主要捕捉视频帧中重要的物体特征。 目前大部分公开数据集其实可以仅仅依赖单图像帧就可以完成对视频的分类, 而且往往不需要分割,那么,在这种情况下, 空间网络的输入就存在着很大的冗余,并且可能引入额外的噪声。 

是否可以提取出视频中的关键帧来提升分类的水平呢?下面这篇论文就提出了一种提取关键帧的方法。

虽然上面的方法可以集成到一个网络中训练, 但是思路是按照图像分类算法RCNN中需要分步先提出候选框,挑选出关键帧。 既然挑选前需要输入整个视频,可不可以省略挑选这个步骤, 直接在卷积/池化操作时,重点关注那些关键帧,而忽视那些冗余帧呢? 去年就有人提出这样的解决方法。 
注:AdaScan的效果一般,关键帧的质量比上面的Key Volume Mining效果要差一点。不过模型整体比较简单。 

时间流 上输入的改进 光流信息

输入方面,空间网络目前主要集中在关键帧的研究上。 而对于temporal通道而言,则是更多人的关注焦点。 首先,光流的提取需要消耗大量的计算力和时间(有论文中提到几乎占据整个训练时间的90%); 其次,光流包含的未必是最优的的运动特征。 

cnn网络自学习 光流提取

那么,光流这种运动特征可不可以由网络自己学呢? 
该论文主要参考了flownet,即使用神经网络学习生成光流图,然后作为temporal网络的输入。 该方法提升了光流的质量,而且模型大小也比flownet小很多。 有论文证明,光流质量的提高,尤其是对于边缘微小运动光流的提升,对分类有关键作用。 另一方面,该论文中也比较了其余的输入格式,如RGB diff。但效果没有光流好。 

目前,除了可以考虑尝试新的数据增强方法外,如何训练出替代光流的运动特征应该是接下来的发展趋势之一。

这里连接主要是指双流网络中时空信息的交互。 一种是单个网络内部各层之间的交互,如ResNet/Inception; 一种是双流网络之间的交互,包括不同fusion方式的探索,目前值得考虑的是参照ResNet的结构,连接双流网络。 
空间和时序网络的主体都是ResNet, 
行为识别的关键就在于如何很好的融合空间和时序上的特征。 作者发现,传统双流网络虽然在最后有fusion的过程,但训练中确实单独训练的, 最终结果的失误预测往往仅来源于某一网络,并且空间/时序网络各有所长。 论文分析了错误分类的原因: 空间网络在视频背景相似度高的时候容易失误, 那么能否通过交互,实现两个网络的互补呢? 

该论文重点在于STCB模块,详情请参阅论文。

通过结构化的时间金字塔对每个行为实例的时间结构进行建模。 包含两个分类器:用于分类行为(针对recognition)和确定完整性(针对localization)。 集成到统一的网络中,可以以端到端的方式高效地进行训练。 

这两篇论文从pooling的层面提高了双流的交互能力

基于ResNet的结构探索新的双流连接方式

CDC 用于未修剪视频中精确时间动作定位的卷积-反-卷积网络

基于3D卷积C3D做帧分类,然后预测存在行为的视频段并分类

五篇Untrimmed(精细分割)相关论文论文汇总简介

CDC网络[13]是在C3D网络基础上,借鉴了FCN的思想。 在C3D网络的后面增加了时间维度的上采样操作,做到了帧预测(frame level labeling)。 

1、第一次将卷积、反卷积操作应用到行为检测领域,CDC同时在空间下采样,在时间域上上采样。

3DCNN能够很好的学习时空的高级语义抽象,但是丢失了时间上的细粒度, 众所周知的C3D架构输出视频的时序长度减小了8倍 在像素级语义分割中,反卷积被证明是一种有效的图像和视频上采样的方法, 用于产生与输入相同分辨率的输出。 对于时序定位问题,输出的时序长度应该和输入视频一致, 但是输出大小应该被减小到1x1。 经过C3D网络后,时间域上L下采样到 L/8, 空间上图像的大小由 112x112下采样到了4x4 CDC6: 时间域上上采样到 L/4, 空间上继续下采样到 1x1 CDC8:时间域上上采样到 L,而且全连接层用的是 4096xK+1, K是类别数 对于任意的输入视频L,先进行Proposal,然后用3D-pooling,最后进行分类和回归操作。 文章主要贡献点有以下3个。1、可以针对任意长度视频、任意长度行为进行端到端的检测2、速度很快(是目前网络的5倍),通过共享Progposal generation 和Classification网络的C3D参数3、作者测试了3个不同的数据集,效果都很好,显示了通用性。

R-C3D网络可以分为4个部分

1、特征提取网络:对于输入任意长度的视频使用C3D进行特征提取; 
骨干网络作者选择了C3D网络,经过C3D网络的5层卷积后, 这里不同于C3D网络的是,R-C3D允许任意长度的视频L作为输入。 

2、时序候选区段提取网络

类似于Faster R-CNN中的RPN,用来提取一系列可能存在目标的候选框。 这里是提取一系列可能存在行为的候选时序。 
 Step1:候选时序生成 
 
 

文章将分类和回归联合,而且联合两个子网络。分类采用softmax,回归采用smooth L1。

非局部网络优势:在深层神经网络中,捕获长期依赖关系是至关重要的。对于连续的数据(例如演讲中语言),循环操作是时间域上长期依赖问题的主要解决方案。对于图像数据,长距离依赖关系是对大量的卷积操作形成的大的感受野进行建模的。 

卷积操作或循环操作都是处理空间或者时间上的局部邻域的。

将非局部操作作为一个高效的、简单的、通用的组件,并用深度神经网络捕捉长距离依赖关系。

非局部操作在视频分类应用中的有效性。


本文首发微信公众号:前端先锋
欢迎关注,每天都给你推送新鲜的前端技术文章


了解什么是 DevOps 的关键在于搞清楚 DevOps 的意图,即创建高质量的软件,同时在团队之间进行更快速、更可靠的沟通和协作。至于团队,我们可以参考这两个:开发团队IT运营团队

实际上并不是因为这两个团队的合作提供了更好的软件,而是由于“开发” 和 “运维” 团队之间的协作导致了软件的不断改进并以更快的速度进行交付。不要忘记 DevOps 工具在自动化方面所起的作用。他们在基础上支持整个 DevOps 的结构。

这种“一体”的感觉是由开发和运维工程师之间的技能组合、实践的桥接以及自动化(DevOps)工具的实现引起的。世界各地的先进的公司都采用了 DevOps 方法来彻底改进它们的性能、安全性和团队动态。

在本文中,让我们了解什么是 DevOps,以及为什么它是如此的重要!我们将会先回顾是什么导致了软件开发方法向 DevOps 演变的,然后探索什么是 DevOps 及其生命周期,并通过评估 Facebook 等顶级公司是怎样使用 DevOps 方法的。

为了响应业务需求,DevOps 从现有的软件开发策略和方法发展而来。让我们简要地看一下这些模型是如何演变的,以及它们最适合的场景有哪些。

缓慢而繁琐的瀑布模型演变成了敏捷开发,开发团队在短短的不到两周的时间内冲刺他们的工作。拥有如此短的发布周期将有助于开发团队及时处理客户的反馈,并将其在修复下一版本的错误时一并修改。虽然这种敏捷SCRUM方法为开发带来了灵活性,但在运营方面却失去了敏捷实践的速度。开发人员和运营工程师之间所缺乏的协作仍然会减缓开发过程和发布。 DevOps 的诞生源于对更的好协作和更快的交付的需求。 DevOps 可以实现持续软件交付,能够简单、更快速的解决问题。

DevOps 是一种软件开发方法,涉及软件在整个开发生命周期中的持续开发、持续测试、持续集成、持续部署和持续监控。这些活动只能在 DevOps 中实现,而不是敏捷或瀑布方法,这就是为什么 Facebook 和其他顶级公司选择 DevOps 作为其业务目标的前进方向。 DevOps 是在较短的开发周期内开发高质量软件的首选方法,可以提高客户满意度。

如果不了解 DevOps 生命周期,那么你对 DevOps 的理解是不完整的。现在让我们看一下 DevOps 生命周期,并探讨它们如何与下图所示的软件开发阶段相关联。

这是 DevOps 生命周期中不断开发软件的阶段。与瀑布模型不同,软件可交付的成果被分解为多个短期开发周期的冲刺,在很短的时间内开发并交付。这个阶段涉及编码和构建,并使用 GitSVN 等工具来维护代码的不同版本,以及 AntMavenGradle 等工具用于将代码构建或打包成可执行文件,然后就可以转发给 QA 进行测试了。

这是针对开发的软件不断测试 Bug 的阶段。对于连续测试,可以使用自动化测试工具,如 SeleniumTestNGJUnit等。这些工具允许 QA 并行地对多个代码库进行彻底的测试,以确保功能中没有缺陷。在这个阶段,使用 Docker 容器来动态模拟“测试环境”也是首选。代码经过测试后,会不断与现有代码进行集成。

这是将支持新功能的代码与现有代码进行集成的阶段。由于软件的不断发展,更新的代码需要与系统一起连续集成,以便将变化反映给最终用户。更改后的代码还应确保在运行时环境中没有错误,允许我们对更改进行测试并检查它对其他更改的反应。

Jenkins 是一种非常流行的工具,用于持续集成。使用 Jenkins 可以从 GIT 存储库中提取最新的代码修订版,并生成最终可以部署到测试或生产服务器的构建版本。它可以设置为在 GIT 存储库发生更改时自动触发新构建,也可以在单击按钮时手动触发。

它是将代码部署到生产环境的阶段。在这里,我们要确保在所有服务器上都能正确地部署代码。如果添加或引入了任何新功能,那么就应该准备好迎接更多的网站流量。因此 SysAdmin 还有责任对服务器进行扩展以便容纳更多的用户。

由于新代码是持续部署的,因此配置管理工具可以快速、频繁地执行任务。 PuppetChefSaltStackAnsible 是在这个阶段使用的一些流行工具。

容器化工具在部署阶段也发挥着重要作用。 DockerVagrant 是非常流行的工具,有助于在开发、测试、生产和构建环境中实现一致性。除此之外,它们还有助于轻松扩展和缩小实例。

这是 DevOps 生命周期中非常关键的阶段,旨在通过对软件的性能进行监控来提高软件的质量。这种做法涉及运维团队的参与,他们会监视用户活动中出现的 bug 和系统的不正当行为。这也可以通过使用专用监控工具来实现,该工具将持续监控应用程序性能指出问题所在。

相关的流行工具有 SplunkELK StackNagiosNewRelicSensu。这些工具可帮你密切监视程序和服务器,以主动检查系统的运行状况。它们还可以提高生产率并提高系统的可靠性,从而降低 IT 支持成本。发现的任何重大问题都可以随时报告给开发团队,以便可以在持续开发阶段进行修复。

这些 DevOps 阶段连续循环进行,直到达到所需的产品质量。下面给出的图表展示了在 DevOps 生命周期的不同阶段使用的工具。

我们已经知道了 DevOps 的重要性,并了解了它生命周期的不同阶段以及所涉及到的 DevOps 工具,接下来让我们研究一下 Facebook 的案例,并了解他们为何从敏捷迁移到 DevOps 的原因。我们将研究 Facebook 曾经在 2011年推出的新功能的案例,这些功能导致了他们对产品交付过程的重新评估,并采用了 DevOps 方法。

2011年,Facebook 向遍布全球的 5 亿用户推出了一系列新功能 —— 时间线、自动推荐和音乐功能。在发布后产生的巨大流量导致了服务器的崩溃。推出的新功能获得了用户的热烈响应,这就导致了新功能的有效性产生了不可预知结果,他们没有相关的预案。

这导致了 Facebook 对策略的评估和调整,从而推出了暗启动技术。基于 DevOps 原则,Facebook 为其新版本的发布创建了以下方法。

暗发布是在新功能完全发布之前先逐步推广到选定的一组用户的过程。这允许开发团队尽早获得用户反馈和测试错误,并且还可以测试基础架构性能。这种发布方法是持续交付的直接结果,有助于实现快速迭代的版本,以确保应用程序性能不会受到影响,并使用户可以很好地更新该版本。

在暗启动技术中,新功能通过专用的部署管道发布给小型用户群。在下面给出的 Facebook Dark Launch 图表中,你可以看到只打开了一个部署管道,将新功能部署到了一组选定用户。此时剩余的数百条管道全部关闭。持续监视已部署新功能的特定用户群以收集反馈并识别错误。这些错误和反馈将被纳入在同一用户群中的开发,测试和部署,直到功能变得稳定。一旦稳定之后,将会打开其他部署管道,把这些功能逐步的部署在其他用户群上。

Facebook 通过将代码包装在功能标记或功能切换中来实现此目的,该切换用于控制谁可以看到新功能以及何时能够查看。同时模拟向用户启动代码的全部效果,这可以提早暴露基础架构的痛点。在功能稳定之后,将会通过多个版本部署到其余用户。

这样,Facebook 就拥有了一个可控或稳定的机制,可以为其庞大的用户群开发新功能。相反,如果该功能没有得到很好的响应,他们可以选择回滚部署。这也有助于他们为部署准备服务器,因为他们可以预测网站上的用户活动,并且可以相应地对服务器进行扩展。上面给出的图表描述了如何在 Facebook 上进行黑暗发布。

Facebook、亚马逊、Netflix 和谷歌以及很多领先的科技巨头,在向所有人发布之前先用暗发布向一小部分用户发布和测试新功能。

DevOps 的目的是更快速、更可靠地创建质量更好的软件,同时开发和运维团队之间进行更多的沟通和协作。它也是一个自动化过程,允许进行快速、安全和高质量的软件开发和发布,同时保持所有利益相关者之间的循环。这就是为什么 DevOps 越来越受到青睐的原因。


本文首发微信公众号:前端先锋

欢迎扫描二维码关注公众号,每天都给你推送新鲜的前端技术文章


欢迎继续阅读本专栏其它高赞文章:


我要回帖

更多关于 facebook二维码怎么生成 的文章

 

随机推荐