精华内容
下载资源
问答
  • 人类活动识别
    千次阅读
    2019-04-24 20:22:12


    人类活动识别(Human Activity Recognition)是一项具有挑战性的时间序列分类任务。

    它涉及到基于传感器数据预测人的移动。为了适应机器学习模型,传统上涉及到从信号处理到根据原始数据正确设计特征的深度领域专业知识和方法。

    近年来,卷积神经网络和循环神经网络等深度学习方法已经显示出通过从原始传感器数据中自动学习特征的能力,甚至取得了最先进的成果。

    在这篇文章中,您将看到人类活动识别中的问题,以及在此问题上有优秀表现的深度学习方法。

    读完这篇文章,你就会知道:

    1. 活动识别是根据传感器数据(如智能手机中的加速度计)预测人的运动的问题,通常是在室内。
    2. 传感器数据流通常被分割成称为窗口的子序列,每个窗口都与一个更广泛的活动相关联,称为滑动窗口方法。
    3. 卷积神经网络和长短期记忆网络,或许两者同时使用,最适合从原始传感器数据中学习特征并预测相关运动。

    概述

    这篇文章分为五个部分; 他们是:

    • 人类活动识别
    • 神经网络建模的好处
    • 监督学习数据表示
    • 卷积神经网络模型
    • 递归神经网络模型

    人类活动识别

    人类活动识别(简称HAR)是涉及基于传感器数据识别人的特定运动或动作的广泛研究领域。

    这些运动通常是指在室内进行的特定活动,例如走动,说话,站立和坐着。它们也可能是更明确的活动,例如在厨房或工厂车间进行的某些类型的活动。

    传感器数据可以远程记录,如视频、雷达或其他无线方法。或者,数据可以直接记录在可携带设备上,例如通过携带定制硬件或带有加速度计和陀螺仪的智能手机。

    基于传感器的活动识别从大量低水平传感器数据中探寻关于人类活动的深层次知识
    -Deep Learning for Sensor-based Activity Recognition: A Survey, 2018.

    从历史上看,用于活动识别的传感器数据具有挑战性且收集成本高,需要定制硬件。现在,用于健身和健康监测的智能手机和其他个人跟踪设备便宜又普遍。因此,来自这些设备的传感器数据收集起来更便宜更常见,是一般活动识别问题的更常研究的版本。

    我们的目标是根据传感器数据的快照(通常是来自一种或少量传感器类型的数据)来预测活动。一般来说,这个问题被定义为单变量或多变量时间序列分类任务。

    这是一个具有挑战性的问题,因为没有明显或直接的方式将记录的传感器数据与特定的人类活动相关联,并且不同受试者执行同一个活动都可能有显着不同,导致所记录的传感器数据也会有很大的差别。

    我们的目的是记录特定测试者的传感器数据和相应的活动,根据这些数据拟合一个模型,然后使用生成的模型对未经测试者的传感器数据进行活动分类。

    神经网络建模的好处

    传统上,采用信号处理领域的方法对采集到的传感器数据进行分析和提取。

    这些方法用于特征工程,创建特定于域的,特定于传感器或特定于信号处理的特征以及原始数据的视图。然后用处理后的数据训练统计和机器学习模型。

    此方法的局限性在于分析原始数据所需的信号处理和领域专业知识,以及拟合模型所需的特征提取工程。每种新的数据集或传感器模式都需要这种专业知识。实质上,它昂贵且不可扩展。

    然而,在大多数日常HAR任务中,这些方法可能严重依赖于启发式手工特征提取,其通常受到人类领域知识的限制。此外,这些方法只能学习浅层特征,导致无监督和增量任务的性能下降。由于这些限制,传统[模式识别]方法在分类准确性和模型泛化方面的性能受到限制。
    -Deep Learning for Sensor-based Activity Recognition: A Survey, 2018.

    理想情况下,学习方法能够直接得从原始数据中学习到进行准确预测所需的特征。这将使新的问题、新的数据集和新的传感器模式能够快速、廉价地被采用。

    现在,深度神经网络模型已经开始如人们期待的那样实现特征学习,并且在人类活动识别上取得优异的结果。它们能够在原始传感器数据上自动执行特征学习,并且能够在手工提取的特定于域的特征上拟合出好的模型。

    […],在深度学习模型中,特征提取和模型构建过程往往是同时进行的。这些功能可以通过网络自动学习,而不是手动设计。此外,深层神经网络还可以提取深层的高层表示,使其更适合于复杂的活动识别任务。
    -Deep Learning for Sensor-based Activity Recognition: A Survey, 2018.

    神经网络有两种主要方法适用于时间序列分类,并且已经证明使用来自商用智能手机和健身追踪设备的传感器数据在活动识别方面表现良好。它们是卷积神经网络模型和递归神经网络模型。

    推荐将RNN和LSTM用于识别具有自然顺序的短期活动,而CNN更擅长推断长期重复性活动。原因是RNN可以利用传感器读数之间的时间顺序关系,CNN更能够学习递归模式中包含的深层特征。
    -Deep Learning for Sensor-based Activity Recognition: A Survey, 2018.

    监督学习数据表示

    在我们深入研究可用于人类活动识别的特定神经网络之前,我们需要讨论数据准备。

    适用于时间序列分类的两种类型的神经网络都需要以特定方式准备数据以匹配于模型。也就是说,以“监督学习”方式允许模型将信号数据与活动类相关联。

    一种直接的数据准备方法,既可用于手工特征提取的经典机器学习方法,也可用于神经网络。它将输入的信号数据分成信号窗口,其中给定窗口可能有一到几秒的观测数据,这通常被称为“滑动窗口”。

    人类活动识别旨在从传感器捕获的一组观察数据中推断出一个或多个人的行为。通常,这是通过用于特征提取的特定大小滑动窗口方法来实现的,其中两个参数必须是固定的:窗口的大小和移位。
    — A Dynamic Sliding Window Approach for Activity Recognition, 2011

    每个窗口还与特定活动相关联。给定的数据窗口可以具有多个变量,例如加速度计传感器的x,y和z轴,让我们用一个例子来具体说明这一点。

    我们有10分钟的传感器数据,表示如下:
    在这里插入图片描述
    如果数据以8Hz的频率进行记录,则意味着执行活动一秒钟将有八行数据。

    我们可以将一秒钟的数据当作一个窗口的数据,也就是说8Hz的传感器将有8行数据。如果我们有x,y和z三个数据维度,那意味着我们将有3个变量。数据窗口将是具有八个时间步长和三个特征的二维阵列。

    一个窗口代表一个样本。一分钟的数据代表480个传感器数据点,或者60个8个时间步长的窗口。10分钟的数据总共可以用4800个数据点或者600个数据窗口来表示。

    可以方便地根据样本或窗口的数量,窗口中的时间步数以及在每个时间步观察到的特征的数量来描述我们准备的传感器数据的形状。
    在这里插入图片描述
    我们以8Hz的频率记录的10分钟加速度计数据的示例将被表示为具有以下尺寸的三维阵列:
    在这里插入图片描述
    没有最佳窗口大小,它实际上取决于所使用的特定模型,收集的传感器数据的性质以及被分类的活动。

    窗口的大小和模型的大小之间有紧密的关系。较大的窗口适用于训练速度较慢的大型模型,而较小的窗口则更适用于易于拟合的较小模型。

    直观地,减小窗口大小能够更快检测活动,以及减少的资源和能量需求。相反,通常考虑使用大数据窗口来识别复杂的活动。
    — Window Size Impact in Human Activity Recognition, 2014.

    然而,通常使用一到两秒的传感器数据来对活动的当前片段进行分类。

    从结果来看,减少的窗口(2秒或更少)被证明提供了更准确的检测性能。事实上,对于非常短的窗口(0.25-0.5秒),可以获得最精确的识别器,从而实现对大多数活动的完美识别。与通常认为的相反,这项研究表明,大窗口尺寸并不一定能转化为更好的识别性能。
    — Window Size Impact in Human Activity Recognition, 2014.

    将传感器数据流拆分为窗口可能会导致窗口错过一个活动到另一个活动的转换。因此,通常情况下,将数据拆分为重叠窗口,这样在重叠50%的情况下,使得窗口的前半部分包含来自前一窗口的后半部分的观察结果。

    […]不正确的长度可能会截断活动实例。 在许多情况下,错误会出现在活动的开头或结束, 当窗口与一个活动的结尾和下一个活动的开头重叠时。 在其他情况下,如果窗口长度太短可能无法为识别过程提供最佳信息。
    — A Dynamic Sliding Window Approach for Activity Recognition, 2011

    目前还不清楚给定问题是否需要具有重叠的窗口。

    在采用神经网络模型时,使用重叠(例如50%重叠)将使训练数据的大小加倍,这可能有助于较小数据集的建模,但也可能导致模型过度拟合训练数据集。

    对于某些应用,允许相邻窗口之间的重叠; 但是,这种使用频率较低。
    — Window Size Impact in Human Activity Recognition, 2014.

    卷积神经网络模型

    卷积神经网络模型(简称CNN)是一种深度神经网络,它被开发用于图像数据,例如,如手写识别。

    事实证明,经过大规模培训他们在挑战计算机视觉问题时非常有效,例如识别和定位图像中的对象以及自动描述图像内容。

    它们是由两种主要类型的元素组成的模型:卷积层和池化层。

    卷积层读取输入,例如一张二维图像或一个一维信号,它使用卷积核每次读取一小段数据并逐步跨越整个输入字段。每次读取都会生成投影到滤镜图上的输入,并表示输入的内部解释。

    池化层采用特征图投影并使用信号平均或信号最大化处理方法提取到最基本的元素。

    卷积和池化层可以在深度上不断重复,提供输入信号的多层抽象。

    这些网络的输出通常是一个或多个全连接层,用于解释已读取的内容并将此内部表示映射到类值。

    有关卷积神经网络的更多信息,参阅以下帖子:

    机器学习卷积神经网络的速成课程

    CNN可以应用于人类活动识别。

    CNN模型学习将给定的信号数据窗口映射成一个活动,在该映射中,模型读取每个数据窗口并准备窗口的内部表示。

    当应用于像HAR这样的时间序列分类时,与其他模型相比,CNN具有两个优点:局部依赖性和尺度不变性。局部依赖性意味着HAR中临近的信号可能是相关的,而尺度不变性是指不同步长或频率的尺度不变。
    - 基于传感器的活动识别的深度学习:2018年的一项调查。

    使用CNN进行HAR的第一项重要工作是Ming Zeng等人在2014年的论文“使用移动传感器进行人类活动识别的卷积神经网络”。

    在此论文中,作者为加速度计数据开发了一个简单的CNN模型,其中加速度计数据的每个轴被输入到单独的卷积层,池化层,然后在被隐藏的全连接层解释之前连接起来。

    从论文中得到的图清楚地显示了模型的拓扑结构。它提供了一个很好的模板,说明CNN如何用于HAR问题和一般的时间序列分类。
    加速度计数据的CNN模型描述摘自“使用移动传感器进行人类活动识别的卷积神经网络”
    有许多方法可以模拟CNN的HAR问题。一个有趣的例子是Heeryon Cho和Sang Min Yoon在他们的2018年论文,题为“Divide and Conquer-Based 1D CNN Human Activity Recognition Using Test Data Sharpening”。

    在这篇论文中,他们将活动划分为涉及运动的活动,称为“动态”,以及主体静止的活动,称为“静态”,然后开发CNN模型以区分这两个主要类别。然后,在每个类中,开发模型以区分该类型的活动,例如动态的“行走”和静态的“坐”。
    将活动分离为动态或静态,摘自“Divide and Conquer-Based 1D CNN Human Activity Recognition Using Test Data Sharpening”
    他们将此称为两阶段建模方法。

    我们不是直接使用单个6级分类器识别单个活动,而是应用分而治之的方法并构建一个两阶段活动识别过程,其中首先使用二元分类器来识别抽象活动,即动态和静态活动,然后使用两个3级分类器识别单个活动。
    — Divide and Conquer-Based 1D CNN Human Activity Recognition Using Test Data Sharpening, 2018.

    相当大的CNN模型被开发出来,从而使作者能够在具有挑战性的标准人类活动识别数据集上获得最先进的结果。

    另一个有趣的方法是由Wenchao Jiang和Zhaozheng Yin在2015年题为“Human Activity Recognition Using Wearable Sensors by Deep Convolutional Neural Networks”的论文中提出的。

    它们不是在信号数据上使用一维的CNN网络,而是将信号数据组合在一起,创建“图像”,然后将其输入到二维的CNN网络中,并将其作为图像数据进行处理,并沿信号时间轴和信号变量(特别是加速度计和陀螺仪数据)进行卷积。

    首先,将原始信号逐行堆叠成信号图像[…]。在信号图像中,每个信号序列都有机会与每个其他序列相邻,这使得DCNN能够提取相邻信号之间的隐藏相关性。然后,将2D离散傅里叶变换(DFT)应用于信号图像,并选择其幅度作为我们的活动图像。
    –Human Activity Recognition Using Wearable Sensors by Deep Convolutional Neural Networks,2015

    下面描述了将原始传感器数据处理成图像,然后从图像处理成“活动图像”,即离散傅立叶变换的结果。
    在这里插入图片描述
    最后,另一篇关于这一主题的好论文是Charissa Ann Ronao和Sung Bae Cho于2016年发表的题为“使用深度学习神经网络的智能手机传感器进行人类活动识别”的论文。

    实验表明,convnets确实能在每一个附加层中得到相关的、更复杂的特征,尽管随着每个附加层的增加,特征复杂度水平的差异会减小。可以利用更宽的局部相关时间跨度(1×9-1×14),并且低池化大小(1×2 -1×3)被证明是有益的。
    –使用深度学习神经网络的智能手机传感器进行人类活动识别, 2016

    有用的是,它们还为CNN模型提供了完整的超参数配置,这可能为新的HAR和其他序列分类问题提供了一个有用的起点,总结如下。
    在这里插入图片描述

    递归神经网络模型

    递归神经网络(简称RNN)是一种旨在从序列数据中学习的神经网络,如随时间变化的观察序列或句子中的单词序列。

    一种特殊类型的RNN称为长短期记忆网络(简称LSTM),可能是使用最广泛的RNN,因为它的精心设计克服了在序列数据集上训练出稳定RNN的一般性难题。

    当执行手写识别、语言建模和机器翻译等大规模的训练任务时,LSTM已被证明对挑战序列预测问题有效。

    LSTM模型中的一个层由特殊单元组成,这些单元具有控制输入、输出和循环连接的门,这些门的权重是已知的。每个LSTM单元还具有内部存储器或状态,这些存储器或状态累计作为输入序列被读取,并且可以被网络用作局部变量或存储器寄存器。

    有关长期短期记忆网络的更多信息,请参阅帖子:

    Crash Course in Recurrent Neural Networks for Deep Learning

    与可以读取输入序列的CNN一样,LSTM读取输入观察序列并开发其自己的输入序列的内部表示。与CNN不同的是,LSTM的培训方式是特别关注输入序列中随时间步骤产生的观测和预测错误,称为随时间的反向传播。

    有关随时间反向传播的更多信息,请参阅帖子:

    A Gentle Introduction to Backpropagation Through Time

    LSTMS可以应用于人类活动识别问题。

    LSTM学习将传感器数据的每个窗口映射成一个活动,在训练中,一次一个地读取输入序列中的观测值,其中每个时间步可能包含一个或多个变量(例如并行序列)。

    简单的LSTM模型在HAR问题上的应用有限。

    其中一个例子是Abdulmajid Murad和Jae-Young Pyun在其2017年题为“Deep Recurrent Neural Networks for Human Activity Recognition”的论文中提出的。

    重要的是,在论文中,他们评论了CNN要求在固定大小窗口上操作传感器数据的局限性,这是LSTM没有严格限制的。

    但是,卷积内核的大小限制了捕获的数据样本之间的依赖关系范围的大小。因此,典型的模型不适用于作为大范围活动识别的配置,并且需要固定长度的输入窗口。
    — Deep Recurrent Neural Networks for Human Activity Recognition, 2017.

    他们使用前向(正常)和双向(双向LSTM)处理序列数据两种方式研究了LSTM的使用。有趣的是,LSTM预测传感器数据的子序列的每个输入时间步的活动,然后将其聚合,以预测窗口的活动。

    每个时间步都会有一个分数来预测在时间t发生的活动类型。然后将各个得分合并为单个预测来获得对整个窗口T的预测。
    — Deep Recurrent Neural Networks for Human Activity Recognition, 2017.

    从该论文中截取的如下图例展示了其LSTM模型,其后的全连接层用于解释原始传感器数据的内部表示。
    在这里插入图片描述
    在HAR问题上将CNN与LSTM结合使用可能更常见,组合成CNN-LSTM模型或ConvLSTM模型。

    此结合的模式下,使用CNN模型从原始样本数据的子序列中提取特征,然后由LSTM解释来自CNN的每个子序列的输出特征并聚合成最终结果。

    这方面的一个例子是2016年由Francisco Javier Ordonez和Daniel Roggen撰写的题为“Deep Convolutional and LSTM Recurrent Neural Networks for Multimodal Wearable Activity Recognition”的论文。

    我们为可穿戴活动识别引入了一个新的DNN框架,我们将其称为DeepConvLSTM。该架构结合了卷积层和递归层。卷积层充当特征提取器,并在特征映射中提供输入传感器数据的抽象表示。循环层模拟特征图激活的时间动态。
    — Deep Convolutional and LSTM Recurrent Neural Networks for Multimodal Wearable Activity Recognition, 2016.

    他使用一个深度网络体系结构,有四个卷积层,没有任何池化层,接着是两个LSTM层,用于在多个时间步中解释提取的特征。

    作者声称,移除池化层是其模型体系结构的关键部分,其中在卷积层之后使用池化层会干扰卷积层学习对原始传感器数据进行下采样的能力。

    在文献中,CNN框架通常连续地包括卷积和池化层,作为降低数据复杂性和引入平移不变特征的措施。然而,这种方法并不是架构的严格组成部分,并且在时间序列域中[…],DeepConvLSTM不包括池化操作,因为网络的输入受到滑动窗口机制的约束[…],这一事实限制了限制了数据降采样的可能性,因为DeepConvLSTM需要由递归层处理数据序列。然而,在没有滑动窗口要求的情况下,池化机制可能有助于覆盖更深层的不同传感器数据时间尺度。
    — Deep Convolutional and LSTM Recurrent Neural Networks for Multimodal Wearable Activity Recognition, 2016.

    从论文文中截取的下图使体系结构更加清晰。请注意,图中的第6层和第7层实际上是LSTM层。
    在这里插入图片描述

    原文链接地址。

    更多相关内容
  • 人类活动识别

    2021-02-26 13:06:19
    人类活动识别 该项目将建立一个模型,以预测人类的活动,例如步行,步行上楼,步行到楼下,坐着,站立或躺下。 该数据集是从30个人(在此数据集中称为主题)收集的,他们使用智能手机在腰间执行不同的活动。 数据...
  • 人类活动识别 获取数据课程的人类活动识别项目 目的 该项目的目的是获取和清理与人类活动识别项目相关的数据。 详情请见: : 内容 该存储库包含脚本,这些脚本将为人类活动识别实验获取原始数据,并通过多次转换...
  • 为了实现对智能家居中人类日常生活活动(ADLS) 的识别,将使用径向基函数RBF 神经网络来进行人类活动识别。并使用志愿者在智能家居试验台执行活动搜集到的数据对算法的准确率进行评估。实验结果表明,选择合...
  • 使用智能手机数据集和LSTM RNN的人类活动识别(HAR)。 将运动类型分为以下六类: 步行, WALKING_UPSTAIRS, WALKING_DOWNSTAIRS, 坐下常设, 铺设。 与传统方法相比,使用具有长短期记忆单元(LSTM)的递归神经...
  • LSTM用于人类活动识别使用智能手机传感器数据集(腰部连接的手机)基于LSTM的人类活动识别。 将运动类型分为以下六类: 步行, WALKING_UPSTAIRS, WALKING_DOWNSTAIRS, 坐下常设, 铺设。数据集可以从下载数据集...
  • 人类活动识别 此存储库包含人类活动识别 (HAR) 项目的脚本
  • 用于人类活动识别的LSTM使用智能手机数据集和LSTM RNN进行人类活动识别。 将运动类型分为以下六类:行走,行走,坐下,坐着,用于人类活动识别的LSTM使用智能手机数据集和LSTM RNN进行人类活动识别(HAR)。 在以下...
  • 标题作者日期输出自述文件流行音乐2015 年 2 月 23 日,星期一html_document #Backgroun 目前所有数据科学中最令人兴奋的领域之一是可穿戴计算 - 请参阅此处的示例。 Fitbit、Nike 和 Jawbone Up 等公司正在竞相开发...
  • 针对人类活动识别中存在的检测不确定问题,改进了马尔可夫逻辑网络(MLN)中势函数的计算方法。即软化一阶逻辑中关系运算符,使特征函数的取值范围从布尔值扩展到[0,1]区间;计算传感器事件的可信度,来获取所对应...
  • 时间序列分类01:人类活动识别深度学习模型综述

    千次阅读 多人点赞 2020-04-11 15:32:26
    本文介绍了人类活动识别相关领域的建模方法和理论研究。

    【时间序列预测/分类】 全系列60篇由浅入深的博文汇总:传送门


    本文介绍了人类活动识别相关领域的建模方法和理论研究。



    前言

    人类活动识别(Human activity recognition,简称HAR)是一项具有挑战性的时间序列分类任务。它使用基于传感器的数据来预测人类的活动,传统上的识别方法需要很强的专业知识,涉及信号处理、特征工程等。近年来,使用卷积神经网络和递归神经网络等深度学习方法已经显示出了从原始传感器数据中自动学习特征的能力,甚至达到了最新的效果。本文介绍了在人类活动识别问题上,性能比较先进的深度学习方法。

    • 活动识别是根据传感器数据(如智能手机中的加速计)来预测人的活动的问题。
    • 传感器数据流通常被分成称为窗口的子序列,每个窗口都与更广泛的活动相关联,称为滑动窗口方法
    • CNN和LSTM相结合,最适合从原始传感器数据中学习特征和预测相关运动。

    在这里插入图片描述

    Brussels, Belgium, photo by Mārtiņš Zemlickis


    相关论文

    【HAR 01】:A Public Domain Dataset for Human Activity Recognition Using Smartphones
    【HAR 02】:Activity Recognition using Cell Phone Accelerometers

    分别对应两个不同的实验室和不同的数据集。

    • UCI-HAR数据集(9轴传感器数据)出自出自第一篇论文相关的实验室;
    • 第二篇论文相关的实验室也有自己的数据集(3轴传感器数据)。

    1. 人类活动识别简介

    人类活动识别是一个广泛的研究领域,它涉及基于传感器数据识别人的特定运动。动作通常是典型活动,如步行、站立、坐着、躺下、上下楼梯等。它们也可能是更集中的活动,例如在厨房或工厂车间执行的那些类型的活动。传感器数据可以被远程记录,例如视频,雷达或其他无线方法。或者,可以通过携带定制硬件或带有加速度计和陀螺仪的智能手机将数据直接记录在对象上。


    从历史上看,用于活动识别的传感器数据具有挑战性,并且收集起来很耗时耗力,而且可能需要自定义硬件。现在,用于健身和健康监控的智能手机以及其他个人跟踪设备的普遍使用,使得来自这些设备的传感器数据更容易获取,因此针对人类活动识别的研究工作主要针对这些硬件手机的数据开展。问题是根据传感器数据来预测活动的类别,传感器数据通常是一维或者多维的数据。通常,可以将此问题建模成单变量或多变量时间序列分类任务。


    这是一个具有挑战性的问题,因为没有明显或直接的方式将记录的传感器数据与特定的人类活动相关联,并且每个对象可能执行的活动具有明显的变化,从而导致记录的传感器数据发生变化。目的是记录特定对象的传感器数据和相应的活动,从该数据中拟合模型,并对模型进行概括,以根据其传感器数据对新的未见对象的活动进行分类。

    在这里插入图片描述

    Prishtina, photo by Gentrit Sylejmani

    2. 使用神经网络进行建模的优势

    传统上,使用信号处理领域的方法对所收集传感器数据进行分析和提取特征。此此类方法用于特征工程,创建特定于域,特定于传感器或特定于信号处理的特征以及原始数据的视图。然后在经过处理的数据上训练和评估机器学习模型。这种方法的局限性在于分析原始数据和设计适合模型的功能需要信号处理和相关领域的专业知识。每个新的数据集或传感器数据都需要这种专业知识。在大多数日常HAR任务中,这些方法可能严重依赖于启发式手工特征提取,这通常受到人为领域知识的限制。此外,这些方法只能学习浅层特征,从而导致无人监督和增量任务的性能下降,即需要人为做特征工程,训练好的模型泛化能力差。 由于这些缺陷,传统的模式识别方法的性能在在人类活动识别任务上的分类准确性和模型的泛化能力受到限制。
    在这里插入图片描述
    理想情况下,可以使用学习方法来自动学习直接从原始数据进行准确预测所需的特征。这使得新的问题,新的数据集和新的传感器模式被快速而廉价地采用。最近,深度神经网络模型已经开始展现其特征提取的能力,并正在获得人类活动识别任务的最优性能。它们能够从原始传感器数据执行自动特征学习,并且性能优于使用特征工程训练的模型。

    特征提取和模型构建过程通常在深度学习模型中同时执行。这些功能可以通过网络自动学习,而无需手动设计。此外,深度神经网络还可以提取深层的高级表示,这使其更适合复杂的活动识别任务。

    卷积神经网络模型和递归神经网络模型适合处理时间序列分类任务,并且已经证明在从智能手机和健身设备上收集的数据中进行活动识别的性能表现不俗。建议使用RNN和LSTM来识别具有自然顺序的短期活动,而CNN可以更好地推断长期重复活动。原因是RNN可以利用传感器读数之间的时间顺序关系,而CNN更有能力学习递归模式中包含的深层特征。


    3. 监督学习的数据准备

    在深入研究可用于人类活动识别的特定神经网络之前,需要讨论数据准备。适于时间序列分类的两种类型的神经网络都要求以特定方式准备数据以便拟合模型。也就是说,通过“监督学习”的方式,该模型可以将信号数据与活动类别相关联。一种简单的数据准备方法,既用于手工特征的经典机器学习方法,又用于神经网络,涉及将输入信号数据划分为信号窗口,这个窗口按照指定步长和指定宽度对原数据进行截取,使得一个样本中包含窗口宽度大小的采样数据,这种划分样本的方法称为 滑动窗口(sliding window


    人类活动识别旨在从传感器捕获的一组观察结果中推断一个或多个人的活动。通常,这是通过固定长度的滑动窗口方法进行特征提取的,其中必须固定两个参数:滑动窗口的宽度和滑动步长。

    每个窗口数据(样本)与特定活动关联(带标签)。给定的数据窗口可能具有多个变量,例如加速度传感器的x,y和z轴。通过一个例子来具体说明。假设我们有10分钟的传感器数据,类似如下:

    x,    y,    z,    activity
    1.1,  2.1,  0.1,  1
    1.2,  2.2,  0.2,  1
    1.3,  2.3,  0.3,  1
    ...
    

    如果采样频率为20Hz(一秒采样20次),一次采样作为一行。如果窗口宽度为1s,则意味着窗口截取了20行采样数据。如果采集的传感器数据包括x,y,z轴的加速度,则意味着有3个变量(特征)。因此,一个滑动窗口是有20个时间步长和3个特征的二维数组,称为一个样本。一分钟的采样数据有3×20×60个采样值,或者说有60个窗口宽度为20的滑动窗口。10分钟的采样数据有10×3×20×60个采样值,或者说有600个滑动窗口。注意:窗口个数并不等同于样本个数,样本个数与滑动窗口的宽度和滑动步长都有关。只有当滑动窗口的滑动步长等于窗口宽度时,窗口个数才等于样本个数,相当于将采样数据等分为窗口宽度大小的样本,并且是无重叠划分。画个图吧。


    在这里插入图片描述


    将传感器采样数据重采样为样本之后,数据集的shape变为:

    [samples, timesteps, features]
    

    对上文中举的例子来说,数据集的shape为:

    [600, 20, 3]
    

    滑动窗口的宽度(大小)不是固定不变的,它取决于所使用的模型,所收集的传感器数据的性质以及所要解决的分类问题。窗口的宽度和模型的大小相关联。较大的窗口宽度适用于训练较慢的复杂模型,而较小的窗口适合训练较小模型。

    直观上来说,减小窗口大小可加快活动检测速度,减少资源使用。相反,通常使用较大的窗口宽度识别复杂的活动。


    识别人类的活动,通常需要1到2秒的传感器数据。有研究表明,较小的窗口宽度(2秒或更短)可提供最准确的检测性能。实际上,对于非常短的窗口(0.25-0.5s),可以获得最精确的识别器,从而可以完美识别大多数活动。与通常的想法相反,这项研究表明,较大的窗口宽度不一定能转化为更好的识别性能。


    将传感器数据拆分为多个窗口可能会导致某些窗口错过从一项活动到另一项活动的过渡的风险。因此,传统上通常将数据拆分为有重叠的窗口,以使窗口的前半部分包含来自前一个窗口后半部分的观测值(重叠率为50%)。不正确的长度可能会截断活动实例。在许多情况下,当窗口与一个活动的结束和下一个活动的开始重叠时,错误就会出现在活动的开始或结束处。在其他情况下,窗口长度可能太短,无法为识别过程提供最佳信息。


    目前尚不清楚给定问题是否需要重叠窗口。在采用神经网络模型时,使用重叠(例如50%重叠)会使训练数据的大小增加一倍,这可能有助于对较小的数据集进行建模,但也可能导致模型过度拟合训练数据集。


    4. 卷积神经网络模型

    卷积神经网络模型(CNN)是一种深层神经网络,专门为处理图像数据而开发,例如手写识别。最近,CNN可以应用于人类活动识别数据。 CNN模型学习将给定的信号数据窗口映射到一个活动,在该活动中,模型跨数据的每个窗口读取并准备该窗口的内部表示。

    当CNN应用于HAR等时间序列分类时,它有两个优点:局部依赖性和尺度不变性。局部依赖意味着HAR中的邻近信号可能是相关的,而尺度不变性是指不同的空间或频率下的尺度不变性。

    使用CNN进行HAR的第一项重要工作是由Ming Zeng等人在其2014年的论文《Convolutional Neural Networks for Human Activity Recognition using Mobile Sensors》,文中建立了一个简单的加速度计数据CNN模型,将加速度计数据的每一个轴分别送入单独的卷积层、池化层,然后级联(concatenated)起来,再由全连接层解释。下图显示了模型的拓扑结构。它为CNN如何用于HAR问题和时间序列分类提供了一个很好的模板。
    在这里插入图片描述
    有许多方法可以使用CNN建模HAR问题。一个有趣的例子是Heeryon Cho和Sang Min Yoon在其2018年的论文中,题为《Divide and Conquer-Based 1D CNN Human Activity Recognition Using Test Data Sharpening》。在其中,他们将活动分为涉及运动的活动(称为动态)和活动对象静止的活动(称为静态),然后开发CNN模型以区分这两个主要类别。然后,在每个类别中,开发模型以区分该类型的活动,例如动态行走和静态静坐。
    在这里插入图片描述
    文中提到:“我们不是使用单个6类分类器直接识别单个活动,而是采用分而治之的方法,将识别过程分为两个阶段,首先使用二分类器识别抽象活动,即动态和静态活动;然后使用两个3类分类器识别各个活动。”
    在这里插入图片描述


    有相当多的CNN模型正在开发,这反过来使作者可以在具有挑战性的标准人类活动识别数据集上做相关的应用研究。在2015年的一篇论文中提出了另一种有趣的方法,论文名为《Human Activity Recognition Using Wearable Sensors by Deep Convolutional Neural Networks》。它们不是在信号数据上使用一维CNN,而是将信号数据组合在一起以创建图像,然后将其馈送到2D CNN,并作为图像数据进行处理,并沿着信号的时间轴和信号变量(特别是加速度计和陀螺仪)进行卷积数据。

    文中提到:“首先,原始信号逐行堆叠到信号图像中。在信号图像中,每个信号序列都有机会与其他每个序列相邻,这使DCNN能够提取相邻信号之间的隐藏相关性。然后,将二维离散傅里叶变换(DFT)应用于信号图像,并选择其幅度作为我们的活动图像。”
    在这里插入图片描述


    下面是离散傅里叶变换结果的原始传感器数据到图像的处理,然后是从图像到活动图像的处理。关于该主题的另一篇好论文是2016年发表的题为《Human activity recognition with smartphone sensors using deep learning neural networks》。对CNN的使用进行了仔细的研究,结果表明,较大的内核大小的信号数据非常有用,而且池化层的作用有限。

    文中提到:“实验表明,卷积确实在每个附加层上都派生了相关且更复杂的特征,但特征复杂度的差异却随着每增加一层而减小。较宽的时间跨度(1×9-1×14)和较低的池化尺寸(1×2-1×3)是有利的。

    有用的是,它们还为CNN模型提供了完整的超参数配置,可以为新的HAR和其他序列分类问题提供有用的起点,如下图所示。
    在这里插入图片描述


    5. 递归神经网络模型

    长期的长期记忆网络(简称LSTM)经验证可有效解决诸如手写识别,语言建模和机器翻译之类的任务,以及具有挑战性的序列预测问题。LSTM可以应用于人类活动识别问题。 LSTM学习将传感器数据的每个窗口映射到一个活动,在该活动中一次读取一次输入序列中的观察值,其中每个时间步长可以包含一个或多个变量(例如并行序列)。

    简单的LSTM模型在HAR问题上的应用有限。在2017年发表的论文《Deep Recurrent Neural
    Networks for Human Activity Recognition》中,评论了CNN的局限性,即CNN要求在传感器数据的固定大小的窗口上运行,而LSTM并没有严格限制。

    文中提到:“但是,卷积核的大小限制了数据样本之间的依存关系捕获范围。结果,典型模型不适用于多种活动识别配置,并且需要固定长度的输入窗口。”

    他们探索了使用LSTM来处理序列数据的正向和双向LSTM。LSTM预测传感器数据子序列的每个输入时间步长的活动,然后将其汇总以预测窗口的活动。

    文中提到:“每个时间步长都有一个分数,预测在时间t发生的活动类型。通过将各个分数合并到单个预测中来获得整个窗口T的预测。”

    下图取自该论文,提供了LSTM模型的描述,其后是用于解释原始传感器数据内部表示的完全连接的层。
    在这里插入图片描述


    在CNN-LSTM模型或ConvLSTM模型中,在HAR问题上将LSTM与CNN结合使用可能更为常见。在这里,使用CNN模型从原始样本数据的子序列中提取特征,然后由LSTM汇总解释每个子序列的CNN输出特征。例如,在2016年发表的论文《Deep Convolutional and LSTM Recurrent Neural Networks for Multimodal Wearable Activity Recognition》。

    文中提到:“我们为可穿戴活动识别引入了一个新的DNN框架,我们将其称为DeepConvLSTM。这种架构结合了卷积层和循环层。卷积层充当特征提取器,并在特征图中提供输入传感器数据的抽象表示。循环图层为特征图激活的时间动态建模。”

    一个深层网络体系结构用于四个卷积层,没有任何池化层,然后是两个LSTM层,用于在多个时间步上解释提取的特征。作者提到,删除池化层是其模型体系结构的关键部分,其中在卷积层之后使用池化层会干扰卷积层学习对原始传感器数据进行降采样的能力。

    在文献中,CNN框架通常依次包含卷积和池化层,以此来降低数据复杂性并引入翻译不变性特征。尽管如此,这种方法并不是严格的体系结构的一部分,并且在时间序列域中,DeepConvLSTM不包括池化操作,因为网络的输入受到滑动窗口机制的限制,因此考虑到DeepConvLSTM要求数据序列由递归层处理,因此限制了对数据进行下采样的可能性。但是,如果不需要滑动窗口,池化机制可以用于覆盖更深层的不同传感器数据时间尺度。

    下图取自论文,使体系结构更加清晰。注意,图像中的第6层和第7层实际上是LSTM层。
    在这里插入图片描述


    6. 人类活动识别任务面临的挑战

    许多机器学习方法已被应用于人类活动识别中。然而,这一领域仍面临许多技术挑战。一些挑战与其他模式识别领域(如计算机视觉和自然语言处理)共享,而一些挑战是基于传感器的活动识别所特有的,需要专门的方法用于实际应用。这里列出了活动识别社区应该应对的几类挑战。

    • 第一个挑战是特征提取的困难。活动识别基本上是一个分类任务,因此它与其他分类问题(即特征提取)有着共同的挑战。对于基于传感器的活动识别,由于存在活动间的相似性,特征提取更加困难。不同的活动可能具有相似的特征(例如,步行和跑步)。因此,很难产生可区分的特征来唯一地表示活动。

    • 训练和评估需要大量带注释的数据样本。然而,收集和标注传感器数据耗时耗力。因此,基于传感器的活动识别面临着显著的挑战。此外,一些突发或意外活动(如意外坠落)的数据尤其难以获取,这导致了另一个挑战,即类别不平衡

    • 人类活动识别涉及三个因素:用户、时间和传感器。首先,活动模式依赖于人。不同的用户可能有不同的活动风格。第二,活动随着时间的推移而变化。假设用户在很长一段时间内保持其活动模式不变是不切实际的。此外,新的活动很可能在使用时出现。第三,各种传感器设备在人体或环境中被随机配置。传感器的组成和布局对活动激发的数据有着显著的影响。这三个因素都导致了用于活动识别的传感器数据的异质性,这种情况迫切需要缓解。

    • 数据关联的复杂性是使识别具有挑战性的另一个原因。数据关联是指数据关联了多少用户和多少活动。在复杂的数据关联驱动下,活动识别面临许多具体的挑战。第一个挑战可以在复合活动中看到。大多数活动识别任务都是基于简单的活动,比如走路和坐着。然而,记录人类日常生活的更有意义的方法是由一系列简单活动组成的复合活动。例如,“洗手”可以表示为{打开水龙头、肥皂、搓手、关闭水龙头}。复合活动带来的一个挑战是数据分割。复合活动可以定义为一系列活动。因此,精确的活动识别在很大程度上依赖于精确的数据分割技术。同时进行的活动显示了第三个挑战。并发活动发生在用户同时参与多个活动时,例如在观看电视时接听电话。多用户活动也与数据关联的复杂性有关。当多个用户参与一组活动时,识别是很困难的,这通常发生在多个居民的场景中。

    • 另一个需要关注的因素是人类活动识别系统的可行性。由于人类活动识别与人类的日常生活十分接近,因此需要努力使系统为广大用户所接受。首先,系统应该是资源密集型的,这样它就适合便携式设备,并且能够给出即时响应。因此,计算成本问题应该得到解决。其次,由于识别系统不断记录用户的生活,存在个人信息泄露的风险。因此,隐私权是另一个需要解决的问题,以使该系统在私人空间中可行。

    • 与图像或文本不同,用于活动识别的感官数据复杂且不可读。此外,由于传感器固有的缺陷,传感器数据不可避免地包含了大量的噪声信息。因此,可靠的识别解决方案应该具有对感官数据的可解释性,并且能够理解数据的哪一部分有助于识别,哪一部分会恶化识别。


    7. 深度学习方法的优势

    许多以前的工作在人类活动识别中采用了机器学习方法。它们高度依赖于特征提取技术,包括时频变换、统计方法和符号表示。然而,提取的特征是精心设计和启发式的。目前还没有一种通用的、系统的特征提取方法来有效地提取人类活动中的可识别特征。近年来,在计算机视觉、自然语言处理和语音处理等领域,深度学习在模拟复杂数据的高级抽象方面取得了显著的进展。早期的研究检验了深度学习在人类活动识别中的有效性之后,相关的研究在这一领域兴起。随着深度学习在人类活动识别中的必然发展,针对具体的挑战进行了最新的工作。然而,深度学习由于其突飞猛进的成功、繁杂的创新和缺乏理论支持,仍然面临着研究者不愿意接受的困境。因此,尽管人类活动认知面临挑战,但仍有必要论证深度学习在人类活动认知中的可行性和成功背后的原因

    • 深度学习最吸引人的特点是“深度”。深层模型的逐层结构允许可伸缩地从简单到抽象的特征学习。此外,像GPU这样的高级计算资源为深度模型提供了从复杂数据中学习描述性特征的强大能力。卓越的学习能力也使活动识别系统能够深入分析多模态感知数据,实现精确识别。
    • 深层神经网络的不同结构从多个角度编码特征。例如,卷积神经网络(CNN)能够捕获多模态感知数据的局部连接,而局部性引入的平移不变性可以实现精确识别。递归神经网络(RNNs)提取时间依赖关系,通过时间间隔递增学习信息,适合于人类活动识别中的感官数据流。
    • 深层神经网络是可分离的,可以灵活地组合成具有一个整体优化功能的统一网络,这使得允许各种深层学习技术,包括深层转移学习、深层主动学习、深层注意机制和其他不是系统的而是有效的解决方案。采用这些技巧的作品迎合了深度学习中的各种挑战。

    Deep Learning Models for Human Activity Recognition
    Convolutional Neural Networks for Human Activity Recognition using Mobile Sensors,2014
    Deep Convolutional and LSTM Recurrent Neural Networks for MultimodalWearable Activity Recognition,2016
    Deep Recurrent Neural Networks for Human Activity Recognition,2017
    Deep Learning for Sensor-based Activity Recognition: A Survey,2018
    Divide and Conquer-Based 1D CNN Human Activity Recognition Using T est Data Sharpening,2018
    Deep Learning for Sensor-based Human Activity Recognition: Overview, Challenges and Opportunities,2020

    展开全文
  • 它由使用TensorFlow的堆叠式残余双向LSTM细胞(RNN)组成的人类活动识别(HAR)组成。 它类似于“ ”中使用的体系结构,而没有注意力机制,而只有编码器部分。 实际上,我们在开始考虑将残余连接应用于LSTM时就...
  • CNN用于人类活动识别 博客文章的。 所需工具 在开发过程中使用Python 2.7,并且需要以下库来运行笔记本中提供的代码: 张量流 脾气暴躁的 Matplotlib 大熊猫 数据集 可以从以下下载用于模型训练的WISDM ...
  • 我们在本文中解决人类活动识别的主要挑战之一:灵活性。 我们在这项工作中的目标是提出人工碳氢化合物网络,作为人类活动识别系统中一种新颖的灵活方法。 为了评估基于人工烃网络的分类器的性能,设计了针对用户...
  • 使用智能手机数据集和 LSTM RNN 的人类活动识别 (HAR)。将运动类型分为六类: 步行, WALKING_UPSTAIRS, WALKING_DOWNSTAIRS, 坐着, 常设, 铺设。 与经典方法相比,使用带有长短期记忆单元 (LSTM) 的循环神经...
  • 基于WiFi信号的人类活动识别的理解和建模
  • 项目:使用智能手机数据进行人类活动识别 “”课程的项目是阅读“ 并编写程序以执行多个数据集的转换并输出整洁的数据集 您可以在降价文件阅读有关数据和分析的更多信息。 安装 从以下链接下载数据 解压缩文件...
  • 在 R 中使用智能手机清理用于人类活动识别的数据集 客观的 该项目的目标是收集、处理和清理数据集以用于以后的分析。 关于数据集 该数据集代表从三星 Galaxy S 智能手机的加速度计收集的数据。 获取数据的提供了完整...
  • “使用智能手机进行人类活动识别的公共领域数据集。” 第 21 届欧洲人工神经网络、计算智能和机器学习研讨会,ESANN 2013。比利时布鲁日,2013 年 4 月 24-26 日。 注意:您不必下载脚本即可工作。
  • 利用主题模型进行基于CSI的人类活动识别
  • 基于可穿戴传感器的人类活动识别的自动标记框架
  • 模式识别是一个有趣的研究领域,尤其是人类活动识别(HAR)。 HAR 研究的目的是使用统计技术从不同传感器获取的信息中自动检测人类活动。 尽管 HAR 付出了巨大的努力,但由于高维问题,它仍然是一项具有挑战性的任务...
  • 作者:Adrian Rosebrock翻译:吴振东校对:赵春光本文约5700字,建议阅读16分钟。这篇教程会告诉你如何利用OpenCV和深度学习来实现人类动作识别。通过阅读这篇教程,你可...

    作者:Adrian Rosebrock

    翻译:吴振东

    校对:赵春光

    本文约5700字,建议阅读16分钟。

    这篇教程会告诉你如何利用OpenCV和深度学习来实现人类动作识别。

    通过阅读这篇教程,你可以学到如何利用OpenCV和深度学习来实现人类动作识别。

    我们实现的人类活动识别模型可以识别超过400类活动,其中准确率在78.4-94.5%之间(取决于任务类别)。 比如,活动类别的可包括:

    1. Archery 射箭

    2. arm wrestling 掰手腕

    3. baking cookies 烤饼干

    4. counting money 数钱

    5. driving tractor 开拖拉机

    6. eating hotdog 吃热狗

    7. flying kite 放风筝

    8. getting a tattoo 刺纹身

    9. grooming horse 给马梳毛

    10. hugging 拥抱

    11. ice skating 溜冰

    12. juggling fire 火焰杂耍

    13. kissing 亲吻

    14. laughing 大笑

    15. motorcycling 骑摩托车

    16. news anchoring 播报新闻

    17. opening present 拆礼物

    18. playing guitar 弹吉他

    19. playing tennis 打网球

    20. robot dancing机械人跳舞

    21. sailing 开帆船

    22. scuba diving 潜水

    23. snowboarding 单板滑雪

    24. tasting beer 喝啤酒

    25. trimming beard 修剪胡子

    26. using computer使用电脑

    27. washing dishes 洗盘子

    28. welding 焊接

    29. yoga 练瑜伽

    30. …and more! 其他

    人类活动识别可用于的实践应用包括:

    • 给硬盘中的视频数据集自动分类/分组。

    • 训练或监察新员工准确地完成任务(例如做披萨时的步骤和流程是否合适,其中包括揉面团、上烤炉加热、加盐、加芝士、加馅料等等)。

    • 验证食品的服务生从洗手间出来或手工处理食物时有没有洗手,以免出现交叉污染(比如说鸡肉上的沙门氏菌)。

    • 检查酒吧或饭店里的顾客没有被过度服务(灌酒)。

    想要学习如何利用OpenCV和深度学习来实现人类动作检测,请继续阅读本教程。

    在这篇教程的第一部分,我们先来讨论下Kinetics数据集,该数据集用来训练人类活动识别模型。

    在那之后我们可以聊聊如何来扩展ResNet, 该网络通常使用2D核函数,而我们将采用3D核函数,这样就引入了活动识别模型可利用的时空维度成分。

    接下来我们将会实现两种版本的人类活动识别,使用的都是OpenCV库和Python编程语言。

    最后,我们应用人类活动识别模型到几个视频样例上,并看一下验证结果。

    Kinetics数据集

    图1:教程中所采用的人类活动识别深度学习模型是利用Kinetics 400数据集来完成预训练的

     

    我们的人类活动识别模型是利用Kinetics 400数据集来完成训练的。

    该数据集包括:

    • 400种人类活动识别分类。

    • 每个类别至少400个视频片段(下载自YouTube)。

    • 一共有300,000个视频。

    你可以点击这一链接来查询该模型可以识别的类型名单:

    https://github.com/opencv/opencv/blob/master/samples/data/dnn/action_recongnition_kinetics.txt

    想要了解关于该数据集的更多信息,包括是如何去整合数据,请参考Kay 等人在2017年发表的论文《The Kinetics Human Action Video Dataset》。

    《The Kinetics Human Action Video Dataset》

    https://arxiv.org/abs/1705.06950

    用于人类动作识别的3D ResNet

    图2:深度神经网络利用ImageNet在图像识别上的进度已经使深度学习在活动识别方面趋于成功(在视频方向),在这篇教程中,我们会利用OpenCV进行深度学习的活动识别(照片源自Hara等人的论文) 

     

    我们用于人类活动识别的模型来自于Hara 等人在2018年发表于CVPR的论文《Can Spatiotemporal 3D CNNs Retrace the History of 2D CNNs and ImageNet》

    该论文作者对现有的最先进的2D结构(比如说ResNet,ResNeXt,DenseNet等)进行了探索,将它们扩展为3D核函数从而用于视频分类。

    《Can Spatiotemporal 3D CNNs Retrace the History of 2D CNNs and ImageNet》

    https://arxiv.org/abs/1711.09577

    上述文章的作者认为:

    • 这些网络架构都成功地应用到了图像分类中。

    • 经过大规模数据集ImageNet的训练,这些模型都达到了非常高的准确率。

    • Kinetics数据集的规范同样足够大。

    …,因此这些网络架构也应该可以适用于视频分类,通过:1.改变输入集的维度来引入时空维度上的信息;2.在这些网络架构中使用3D核函数。

    事实证明上述文章的作者的观点是正确的!

    通过改变输出集的维度和卷积核的维度,上述作者获得了如下效果:

    • 在Kinetics测试数据集上的准确率是78.4%。

    • 在UCF-101测试数据集上的准确率是94.5%。

    • 在HMDB-51测试数据集上的准确率是70.2%。

    这些结果与利用ImageNet训练的最先进的模型所发布的R1准确率近似,因此这证明了这些模型架构可以用于视频分类,只需要简单地加上时空信息以及用3D核函数来代替2D核函数。

    下载OpenCV人类活动识别模型

    图3:利用OpenCV和深度学习实现人类活动识别所需文件

    对于接下来的教程,你所需要下载的有:

    • 人类活动模型

    • Python + OpenCV源代码

    • 用于视频分类的样例

    你可以在公众号中下载含有全部内容的压缩文件。一旦完成下载,你可以继续阅读本教程。

    项目结构

    让我们来检查一下项目文件:

    我们的项目包含三个附属文件:

    • action_recognition_kinetics.txt : Kinetics数据集的类别标签。

    • resnet-34_kinetics.onx : Hara 等人提出的人类活动识别卷积神经网络,并已利用Kinetics数据集完成预训练和序列化。

    • example_activities.mp4 :一段用于测试人类活动识别的剪辑片段合集。

    我们将会回顾一下两个Python脚本,每一个都会接收上面三个文件作为输入:

    • human_activity_reco.py :我们的人类活动识别脚本每次将N帧图像作为取样,用于活动分类预测。

    • human_activity_reco_deque.py :一个类似的人类活动识别脚本,使用了一个移动平均数队列。这个脚本跑起来要更慢,不管怎样,我在这里提供这个实现方式,这样你就可以对其进行试验并从中学到一些东西。

    利用OpenCV的人类活动识别实现

    让我们开始使用OpenCV来完成人类活动识别实现。这一实现是基于OpenCV的官方样例,而我又进行了一些调整(都位于这个和下个样例中),并新增了一些注释(对代码的作用进行了详细的解释)。

    打开human_activity_reco.py文件,来看一下下面这段代码:

    2-6行是引入包。对于今天这份教程,你需要安装OpenCV4和imutils。如果你没有安装OpenCV的话,利用pip install opencv指令来进行安装。

    pip install opencv

    https://www.pyimagesearch.com/2018/09/19/pip-install-opencv/

    10-16行来解析指令行参数:

    • --model :训练人类活动识别模型的路径。

    • --classes :活动识别类别标签文档的路径。

    • --input 一个用于存放输入视频文件的可选路径。这个参数并没有包括在命令行之内,你的网络是想头也可以在这里被调用。

    从这里开始我们来执行初始化:

    第21行是加载文本文件中的类别标签。

    第22和23行定义采样持续时长(用于分类的帧数)和采样尺寸(每一帧的空间维度大小)。

    接下来,我们将会加载并初始化人类活动识别模型:

    第27行利用OpenCV的DNN模块来读取PyTorch中预训练的人类活动识别模型。

    第31行是对我们的视频流进行实例化,或者是选择一个视频文件,或者是使用网络摄像头。

    我们现在准备开始对帧图像进行循环,并执行人类活动识别:

    第34行开始循环我们的帧图像,其中帧的批处理将会经过神经网络(第37行)。

    第40-53行用于从我们的视频流中构建帧的批处理。第52行将对每一帧图像调整尺寸至400像素宽,而且保持原长宽比不变。

    让我们创建自己的输入帧的二进制对象blob,我们此后把它交给人类活动识别卷积网络来处理:

    第56-60行是从输入帧列表中创建二进制blob对象。

    请注意我们用了blobFromImages (复数形式),而不是blobFromImage (单数形式)作为函数——原因是我们构建了一个多幅图片的批次来进入人类活动识别网络,从而获取了时空信息。

    如果你在代码中插入一行 print(blob.shape)的指令,你会注意到这个blob的维度是这样的:

    (1, 3, 16, 112, 112)

    让我们对这组维度有一个更清楚的了解:

    • 1:批次维度。我们只有单个数据点经过网络(“单个数据点”在这里代表着N帧图像经过网络只为了获得单个类别)。

    • 3:输入帧图像的通道数。

    • 16: 每一个blob中帧图像的总数量。

    • 112(第一个):帧图像的高度。

    • 112(第二个):帧图像的宽度。

    至此,我们已经做好了执行人类活动识别推断的准备,然后在给每一帧图像标注上预测的标签,并将预测结果展示在屏幕上:

    第64和65行将blob通过网络,获得输出列表(预测结果)。

    随后我们选取最高的预测结果作为这个blob的标签(第66行)。

    利用这个标签,我们可以抽取出帧图像列表中每个帧图像的预测结果(69-73行),显示输出帧图像,直到按下q键时就打破循环并退出。

    一个利用双队列(Deque)数据结构的人类活动实现的替代品

    在上一章节关于的人类活动识别中,你从会注意到这几行代码:

    这一实现意味着:

    • 程序会去从我们的输入视频中读取全部SAMPLE_DURATION帧数的图像。

    • 程序会将所有帧图像输入到人类活动识别模型中来获得输出。

    • 接着程序会读取另外一部分SAMPLE_DURATION帧数的图像,然后继续重复这个过程。

    因此,我们的程序实现并不是一个移动的预测。

    与之相反,它只是简单地抓取一个样本的帧图像,然后进行分类,然后再去处理下一批次。上一批次的任意一帧图像都是被丢弃的。

    我们之所以这样做是为了提高处理速度。

    如果我们给每一帧单独分类的话,那我们执行脚步的时间就会被拉长。

    这说明,通过deque数据结构来进行移动帧图像预测可以获得更好的结果,因为它不会放弃前面全部的帧图像——移动帧图像预测只会丢弃列表中最早进入的帧图像,为那新到的帧图像腾出空间。

    为了更好的展示为什么这个问题会与推断速度相关,让我们设想一个含有N帧图像的视频文件:

    • 如果我们用移动帧图像预测,我们进行N次分类,即每1帧图像都进行1次(当然是等deque数据结构被填满时)。

    • 如果我们不用移动图像预测,我们只需要进行 N /SAMPLE_DURATION次分类,这会显著地缩短程序执行一个视频流的总时间。

    图4:移动预测(蓝色)利用一个完全填充的FIFO队列窗口来进行预测

    批次预测(红色)不需要一帧一帧地移动。移动预测需要更多的计算力,但对于利用OpenCV和深度学习的人类活动识别来说会有更好的效果。

    OpenCV的这一dnn模块并不被大多数GPU(包括英伟达的GPU)所支持,我建议你不要对于大多数应用来说还是不要使用移动帧预测。

    在今天这篇教程的.zip文件中,你会找到一个名为human_activity_reco_deque.py的文件,这一文件包括一个利用移动帧预测的人类活动识别实现。

    这一个脚本与上一个非常相似,我把它放在这里是让你去尝试一下:

    引入的库与之前是完全相同的,除了需要再加上Python中collections 模块的deque 实现(第二行)。

    在第28行,我们初始化了一个FIFO帧队列,其中最大的长度等于我们的采样时长。我们的“先进先出”(FIFO)队列将会自动弹出最先进入的帧并接收新的帧。我们针对帧队列进行移动推断。

    其余所有的代码都是相同的,接下来让我们来检查一下处理帧图像的循环:

    第41-57行与我们之前的脚本是不一样的。

    在上一个版本的脚本中,我们抽取了一个带有SAMPLE_DURATION数量帧的一个批次,然后再在这个批次上进行推断。

    在这个脚本中,我们依旧是以批次为单位进行推断,但现在是移动批次。不同点就在我们在第52行把帧图像放入到了FIFO队列里。如上文介绍,这个队列拥有maxlen 个单位的采样时长,而且队列的头部永远是我们的视频流的当前帧。一旦这个队列被填满,旧的帧图像就会被这个FIFO双端队列实现自动弹出。 

    这个移动实现的结果就是一旦当队列被填满,每一个给出的帧图像(对于第一帧图像来说例外)就会被“触碰”(被包含在移动批次里)一次以上。这个方法的效率要低一些;但是它却能获得更高的活动识别准确率,特别是当视频或现场的活动周期性改变时。

    第56和57使得我们的帧队列在做出任何推断之前,把帧对列填充好。(例如在图4蓝色区域的前16帧所显示的)。

    一旦这个队列被填满,我们将可以执行一个移动的人类活动识别预测:

    这一段代码块包含的每一行代码与我们之前的脚本是相同的,在这里我们进行了以下操作:

    • 从我们的帧队列中创建了一个blob。

    • 进行了推断,并获得了blob中概率最高的预测。

    • 用平均移动队列所生成的人类活动识别标签对当前帧图像进行注释和显示。

    • 一旦按下q键,程序将会退出。

    人类活动识别在实际应用中的结果

    让我们看看人类活动识别在实际应用中的结果。

    在这里,打开terminal,执行以下命令:

    请注意我们的人类活动识别模型要求的OpenCV最低版本是4.1.2.

    如果你使用的OpenCV版本过低,那么就会收到以下报错信息:

    如果你收到以上信息,说明你需要更新你的OpenCV版本至4.1.2以上。

    下面这个例子就是我们的模型正确地给这段视频打上“瑜伽”的标签。

    请注意我们的模型在识别时对预测是“瑜伽”还是“拉伸腿部”犹豫不决——当你在做下犬式姿势时,这两个动作术语从技术层面来看都是正确的。从定义上来讲,你在做瑜伽的同时,也是在拉伸腿部。

    在下一个样例中,人类活动识别模型正确地预测出了这是在做“滑板运动”。

    你可以看到模型也会把这个活动预测为“跑酷”。滑滑板的人在栏杆上跳跃,这很像是跑酷者可能的动作。

    有人饿了吗?

    如果谁饿了,一定会对这个“做披萨”感兴趣:

    但在你吃披萨前,请确保你已经“洗手”:

    如果你沉浸于“喝啤酒”,你最好注意一下饮酒量,酒吧侍者有可能会把你灌醉:

    你可以看出,我们的人类活动识别模型可能不够完美,但是考虑到本技术上的简单性(只是将ResNet的2D输入改为3D),它的表现还是不错的。

    人类活动识别问题还远远没有解决,但在深度学习和卷积神经网络的帮助下,我们已经朝这个方向迈出了一大步。

    总结

    在这篇教程中告诉你如何用OpenCV和深度学习来实现人类活动识别。

    为了完成这一任务,我们借助了Kinetics数据集对人类活动识别模型进行了预训练,这一数据集包含400-700种人类活动(取决于你使用的数据集的版本)和超过300,000个视频剪辑。

    我们使用的模型是带有变动的ResNet, 改动的方面是用3D核函数代替了原本的2D滤镜,使得模型具有了可用于活动识别的时间维度成分。

    想要了解更多,你可以阅读Hara等人在2018年发表的论文《Can Spatiotemporal 3D CNNs Retrace the History of 2D CNNs and ImageNet》

    最后,我们用OpenCV和Hara等人的在PyTorch上的实现OpenCV的dnn模型,生成了人类活动识别模型。

    基于我们所取得的结果,我们可以看出这个模型可能不够完美,但是表现还是不错的。

    原文标题:

    Human Activity Recognition with OpenCV and Deep Learning

    原文链接:

    https://www.pyimagesearch.com/2019/11/25/human-activity-recognition-with-opencv-and-deep-learning/

    编辑:王菁

    校对:林亦霖

    译者简介

    吴振东,法国洛林大学计算机与决策专业硕士。现从事人工智能和大数据相关工作,以成为数据科学家为终生奋斗目标。来自山东济南,不会开挖掘机,但写得了Java、Python和PPT。

    翻译组招募信息

    工作内容:需要一颗细致的心,将选取好的外文文章翻译成流畅的中文。如果你是数据科学/统计学/计算机类的留学生,或在海外从事相关工作,或对自己外语水平有信心的朋友欢迎加入翻译小组。

    你能得到:定期的翻译培训提高志愿者的翻译水平,提高对于数据科学前沿的认知,海外的朋友可以和国内技术应用发展保持联系,THU数据派产学研的背景为志愿者带来好的发展机遇。

    其他福利:来自于名企的数据科学工作者,北大清华以及海外等名校学生他们都将成为你在翻译小组的伙伴。

    点击文末“阅读原文”加入数据派团队~

    转载须知

    如需转载,请在开篇显著位置注明作者和出处(转自:数据派ID:datapi),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

    发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。


    点击“阅读原文”拥抱组织

    展开全文
  • 智能手机_活动_识别针对 Coursera 类 getdata-013 的 UCI 智能手机人类活动识别研究分析。 这项研究由 UCI 提供,更多信息可以在中找到。学习概述这些实验是在 19-48 岁年龄段的 30 名志愿者中进行的。 每个人在腰部...
  • 真棒人类活动识别 1.数据集 机会[ ] PAMAP2 [ ] 2.带代码的文件 2020年 潜在的独立激励,用于基于传感器的通用跨人活动识别[论文] []( AAAI 2021 ) 通过自适应时空转移学习进行跨数据集活动识别[] [代码]( ...
  • 使用智能手机数据集的人类活动识别 要运行此脚本,请首先确保输入数据在您的工作目录中可用。 输入数据集可。 下载文件后,将其解压缩到您的工作目录中(目录“ UCI HAR Dataset”应位于工作目录中)。 该脚本取决...
  • 使用智能手机整洁数据集识别人类活动 的结构在。 然后定义要解决的或问题。 接下来的。... 来自: 使用智能手机的人类活动识别 执照: 必须通过引用以下出版物 [1] 来确认在出版物中使用此数据集 [1] Da
  • UCI-Human-Activity-Recognition-Tidy-Data 获取和清理 UCI 人类活动识别数据集:脚本和操作方法日期:“2015 年 6 月 18 日” 在此存储库中:在此自述文件的下方,您将找到原始数据及其托管网站的链接。 run_...
  • 基于加权肢体特征的人类活动识别

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,586
精华内容 13,834
关键字:

人类活动识别

友情链接: ad630.rar