摘要:
随着人口老龄化问题日益严重,老年人的安全问题变得愈加重要,而对老年人安全问题威胁最大的便是老年人的跌倒问题,因此本文提出了一种基于关节点提取以及 SVM 分类器的老年人跌倒检测算法。首先,通过改进的 yolo 算法检测出视频帧图像中的人所在的位置, 然后将单个人的图像送入的 openpose 算法中获得这个人的关节信息。之后,再通过 SVM 分类 器对获得到的关节点信息进行分类,以得到这个人所处的状态(此处我们将人可能处于的状态分为了 4 类——正常状态、跌倒状态、平躺状态以及其他状态)。对于整段视频我们便得到一个状态序列集,之后对这个状态序列集进行分析便能够检测出视频中是否有跌倒事件发生。经实验对比,我们的方法对于单人存在的场景有着 98%以上的准确率,并且对于多人存在的场景有着一定的鲁棒性。
关键词:yolo; openpose; SVM; 关节点提取;跌倒检测
本文的算法流程:
1.yolo目标检测(以后说):
2.openpose关键点检测(见我之前的博客):
3.SVM分类器:
4.状态分析:
为判断视频中是否有跌倒存在,需要进一步对前面的svm分类出的状态进行分析。
(1)关键状态提取
各个状态对跌倒检测的重要程度不一样,赋予它们不同的权重值。
正常状态是Pnomal,跌倒状态表示为Pfalling,平躺状态时Play,其他状态为Pothers。
各个阶段的重要程度公式:
Pfalling>Play>Pothers>Pnormal
根据重要程度给各阶段赋值:Wfalling=4,Wlay=3,Wothers=2,Wnormal=1.
对于每一帧图像,我们根据如上赋予权重值,权重值最大的状态为关键状态。
(2)噪声去除.
对于一段视频数据,通过前一步的关键状态提取,我们得到一个由每一帧图像中的关键状态所组成的一个状态序列。因为前面我们所采用的svm分类器,对于人状态分类的准确性没有达到100%,因此一定会存在噪声。
由于在视频中帧图像是一个连续的过程,因此在一个连续的同一状态序列下,是不会在中间突变出另一个状态的,利用这一点我们可以对噪声点进行过滤。
(3)状态集简化
通过上一章节,我们得到的状态序列是由多个连续想通过的状态组成,因此我们在此对状态集进行简化,将多个连续相同的状态抽象成一个状态,公式如下:
(4) 跌倒事件判断
经过前几步的处理,在此处我们只需要判断简化后的状态序列中是否存在连续的跌倒状态和平躺状态即可。
即在状态序列中存在{Pfalling,Play}这样的序列对,即可判断此段视频中有跌倒事件法伤,否则没有。
5.实验结果和分析:
两个指标,分别是敏感性和特异性:
其中TP为跌倒事件发生同时检测出有跌倒事件发生但没有检测到的视频数量;
FP为实际上没有跌倒事件发生但却检测为有跌倒发生的数量;
TN(真反例)为视频中没有跌倒事件发生同时也检测为没有跌倒发生的视频数量。
实验结果对比如表1所示,我们在两个数据集上进行了实验对比。
其中 Lei2 fall detection dataset数据集场景较为简单,并且视频中只有一个人。
而High quality fall simulation dataset数据集的场景较为复杂,并且存在多人。
由表1可见,本文所述方法在场景中只有一个人时,其表现要逊色与其他方法,,但从 sensitivity 和 specificity 的值来看,其 准确率还是很可观的。在场景中存在多个人 时,本方法的表现是要优于其余两种方法 的,可见本方法对场景中存在多个人的情况 下具有不错的鲁棒性。
6.总结:
本文提出了一种基于关节点提取的的 老年人跌倒检测算法。实验结果表明,本方 法对与单人存在的场景具有很好的检测准 确率,并且对于场景中存在多个人的情况有
很好的鲁棒性。但另一方面,本方法对于多 人场景下的跌倒检测 sen 与 spc 值均在 70% 左右,因此仍有很大的改进空间。这一方面 还需进一步的探索。