6

行为识别常用提取特征

 3 years ago
source link: https://bbs.cvmart.net/articles/354
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

行为识别常用提取特征

2年前 ⋅ 3914 ⋅ 3 ⋅ 0

写在前面:一直以来,极市得到了许许多多开发者的关注和支持,极市的成长离不开各位开发者的见证,为此我们特开设极市开发者祝愿帖,期待听到您真实的心声和建议~φ (> ω<*) :

极市开发者祝愿活动 (有奖回馈)

本文为中科院计算所的博士研究生王晋东整理的行为识别常用提取特征,还包括可用数据集、python和matlab提取特征代码、自动提取时间序列特征的库等,希望对做行为识别方面研究的小伙伴有帮助~
来源:行为识别常用哪种特征提取?

一、关于提特征的问题,主要是时域和频域特征,用滑动窗口提取特征,比如平均数、方差、过零率等,还有傅里叶变换后的幅度、频率、均值等。


二、可用数据集:来自UCI的一个行为识别数据集,可用来练手:UCI Machine Learning Repository: Daily and Sports Activities Data Set


三、我写的python和matlab提取特征代码:行为识别(时间序列)特征提取代码

四、最近刚发现一个自动提取时间序列特征的库,可以省不少事,地址在这里:blue-yonder/tsfresh
Matlab版本的在这里:https://github.com/benfulcher/hctsa


下面以行为识别中最常用的加速度为例,分别从滑动窗口、时域特征、频域特征三部分做简单的分析。




0.滑动窗口

滑动窗口由两个关键变量构成:窗口大小(windowssize)和滑动步长(step)。其中,窗口大小指的是一次处理的数据量。假设传感器采样频率为f\text{Hz},那么一个窗口大小通常设定为2f,步长为f
在实际应用中,我们一般选择的窗口大小为2的指数次:
\text{windowsize}=2^{ceil({log_{2}(2*f)})}
这样能保证提取频域特征时,傅里叶变换的顺利进行。




1.合成加速度

加速度计通常有三轴读数(x,y,z),分别表示三个方向的加速度值。在实际应用中,除去一些特定的动作需要使用特定的单轴来辨别方向之外,通常我们是将三轴加速度合成为一个加速度值(合成加速度),之后的特征提取与分类全以合成加速度为初始数据进行。这样在确保精度的同时,减少了计算复杂性。
a_i表示合成加速度,a^x_i,a^y_i,a^z_i分别表示三轴加速度计读数,i\in\{1,2,...,n\}表示第i条加速度计读数,合成加速度的计算方式为:
a_i=\sqrt{(a^x_i)^2 + (a^y_i)^2 +(a^z_i)^2}




2.时域特征

时域特征(time domain features)是指,在序列随时间变化的过程中,所具有的与时间相关的一些特征。我们用n来表示一个时间窗口的大小(即窗口内数据的行数),用i来表示第i行数据,常用的时域特征如下:




2.1.均值mean

计算公式:mean=\frac{1}{n} \sum_{i=1}^{n}{a_i}
Matlab中可用的函数:mean()
Python中可用的函数:numpy.mean()




2.2.标准差std

计算公式:std = \sqrt{\frac{1}{n} \sum_{i=1}^{n}{(a_i - mean)^2} }(根号下写成\frac{1}{n-1}亦可).
Matlab中可用的函数:std()
Python中可用的函数:std()




2.3.众数mode

一般来说,一组数据中,出现次数最多的数就叫这组数据的众数。例如:1,2,3,3,4的众数是3。
但是,如果有两个或两个以上个数出现次数都是最多的,那么这几个数都是这组数据的众数。例如:1,2,2,3,3,4的众数是2和3。
还有,如果所有数据出现的次数都一样,那么这组数据没有众数。例如:1,2,3,4,5没有众数。
为了计算方便,如果有多个众数,我们取平均作为惟一的众数。
Matlab中可用的函数:mode()
Python中可用的函数:mode()




2.4.最大值max

一个窗口内的最大值。
计算公式:max=\max{(a_i)},i\in\{1,2,...,n\}
Matlab中可用的函数:max()
Python中可用的函数:max()




2.5.最小值min

一个窗口内的最小值。
计算公式:min=\min{(a_i)},i\in\{1,2,...,n\}
Matlab中可用的函数:min()
Python中可用的函数:min()




2.6.范围range

一个窗口内最大值与最小值的差。
计算公式:range=|max-min|
Matlab中可用的函数:abs(max()-min())
Python中可用的函数:abs(max()-min())




2.7.过均值点个数above\_mean

一个窗口内超过均值点的数据个数。
计算公式:above\_mean=\sum_{i=1}^{n}\mathbb{I}(a_i>mean),其中\mathbb{I}(\cdot)是指示函数(indicator function),当括号里条件成立时取值为1,否则为0。




2.8.相关系数\rho

相关系数是指对于两个向量(比如x,y这两轴读数)之间的相关性。一般用在辨别一个方向的运动较多,不是很常用。
计算公式:\rho_{x,y}=\frac{cov(x,y)}{\sigma_x \sigma_y}
其中,cov(x,y)表示x,y的皮尔逊相关系数,\sigma_x,\sigma_y分别表示x,y的标准差。




2.9.信号幅值面积SMA

信号幅值面积(Signal Magnitude Area,SMA)指x,y,z三轴的加速度读数曲线分别与三个坐标轴围成的面积之和。一般来说,静止状态和运动状态下该特征比较明显。
计算公式:SMA=\frac{1}{t}\left(\int_{0}^{t}|x(t)|dt+\int_{0}^{t}|y(t)|dt+\int_{0}^{t}|z(t)|dt \right)
其中,t表示一个时间窗口的大小。由于涉及到积分运算,该特征一般不常用。




3.频域特征

频域特征(frequency domain features)通常被用来发现信号中的周期性信息。例如,跑步和走路都是典型的周期性运动。频域分析主要用快速傅里叶变换(Fast Fourier Transform,FFT)来计算。
Matlab中进行快速傅里叶变换的函数:FFT()

由于信号是一维的,对长度为n的信号进行傅里叶变换后,得到n个变换后的数值。频域特征就主要从这n个变换后的数值得到。为了方便理解,下面举例说明。
举例:原数据有8个:1,2,3,4,5,6,7,8.
经过FFT后得到以下8个数:
36.0000 + 0.0000i -4.0000 + 9.6569i -4.0000 + 4.0000i -4.0000 + 1.6569i
-4.0000 + 0.0000i -4.0000 - 1.6569i -4.0000 - 4.0000i -4.0000 - 9.6569i
从这8 个数中可以很明显地看到,第1个数最大,剩下7个数以第5个数为中心是对称的。这是傅里叶变换所决定的。所以在实际计算中,除去单独取第1个数以外,剩下的数可以只取一半。




3.1.直流分量DC

直流分量(Direct Current,DC)是傅里叶变换后的第一个分量,是这些信号的均值,一般要比其他的数大得多。




3.2.幅度

幅度就是变换后数据的绝对值。




3.3.功率谱密度PSD

功率谱密度(Power Spectral Density,PSD)用来描述数据在频域的能量分布。
功率谱密度分为幅度统计特征和形状统计特征这两种特征。



3.3.1 幅度统计特征

C(i)是第i个窗口的频率幅度值,N表示窗口数,则幅度统计特征的几个量计算方式如下:
a.均值mean:
\mu_{amp}=\frac{1}{N}\sum_{i=1}^{N}C(i)

b.标准差standard deviation:
\sigma_{amp}=\sqrt{\frac{1}{N}\sum_{i=1}^{N}[C(i)-\mu_{amp}]^2}

c.偏度skewness:
\gamma_{amp}=\frac{1}{N}\sum_{i=1}^{N}[\frac{C(i)-\mu_{amp}}{\sigma_{amp}}]^3

d.峰度kurtosis:
\gamma_{amp}=\frac{1}{N}\sum_{i=1}^{N}[\frac{C(i)-\mu_{amp}}{\sigma_{amp}}]^4-3




3.3.2 形状统计特征

C(i)是第i个窗口的频率幅度值,N表示窗口数,S=\sum_{i=1}^{N}C(i),则形状统计特征的几个量计算方式如下:
a.均值mean:
\mu_{shape}=\frac{1}{S}\sum_{i=1}^{N}iC(i)

b.标准差standard deviation:
\sigma_{shape}=\sqrt{\frac{1}{S}\sum_{i=1}^{N}(i-\mu_{shape})^2C(i)}

c.偏度skewness:
file
d.峰度kurtosis:
\gamma_{shape}=\frac{1}{S}\sum_{i=1}^{N}[\frac{i-\mu_{shape}}{\sigma_{shape}}]^4C(i)-3

ps.本周四(3月28日)晚,极市邀请了澳大利亚阿德莱德大学博士生王鑫龙,为我们分享联合点云分割中的实例和语义(CVPR2019),欢迎参与直播,与嘉宾一起互动交流~
详情请关注:CVPR2019 专题直播 | 王鑫龙:联合分割点云中的实例和语义

微信公众号: 极市平台(ID: extrememart )
每天推送最新CV干货


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK