【OAK开源项目教程】跌倒检测难做?教你一个开外挂般的做法

编辑:OAK中国
来源:oakchina.cn
版权说明:转载请注明出处

前言

Hello,大家好,这里是OAK中国,我是助手君。

本期内容教大家👇👇👇,别忘了点赞👍收藏⭐️哦!

为什么要做跌倒检测?

世界卫生组织报告指出,全球每年有30余万人死于跌倒,其中一半是60岁以上老人。在我国,跌倒已成为65岁以上老人伤害死亡的“头号杀手”。

对于老人来说,摔倒无疑是对健康的一大威胁。最近,北京市疾控中心公布的抽样调查结果显示:60至69岁老年人每年跌倒发生率为9.8%,70至79岁为15.7%,80岁以上为22.7%,每增长10岁,跌倒发生率会升高0.5倍左右。

因此,设计一种保护人体隐私的情况下监控人体是否摔倒,并且在人体摔倒后第一时间实现报警就变得非常有意义。

我们通过OAK-D这一人工智能利器,结合Movenet神经网络进行姿态识别,全连接层分类网络实现对摔倒的姿态进行分类,实现摔倒报警。它可以实时采集人体关节姿态数据进行摔倒判断,全部识别在OAK相机中完成,不会将人体影像数据传输出去,保护老人的隐私。

如何做跌倒检测?

传统做法面临的问题

在典型的跌倒检测方法中,从视觉数据中检测出人的行为,并学习特征来区分跌倒和其他活动。现有的方法大多利用从视频数据中提取的基于物理外观的特征来表示跌倒。然而,基于外观的特征在实际环境中的泛化性较差,因为外观特征的变化较大,不同的摄像机视角不同并且背景杂乱。此外,由于大规模公共跌倒数据集的不可用性,大多数现有的跌倒检测器都是使用模拟环境或使用受限数据集(由于隐私问题不能公开共享)进行训练和评估的。因此,这些方法并没有表现出在未见过的真实世界环境中进行跌倒检测的泛化能力。

OAK如何打破传统做法的局限

OAK-D智能相机可以为跌倒检测提供低成本的解决方案。它们不会对人体健康造成感官上的副作用,也不会像使用可穿戴设备的系统那样影响老年人的日常活动。

提出一种基于人体姿态的跌倒表示法,该表示法与场景中人物的外观特征、背景、光照条件和空间位置无关。实验表明,在基于2D姿态和3D姿态的跌倒表示上训练的神经网络模型能够成功地推广到了未知的现实环境中进行跌倒识别。
提出了3D姿态估计和跌倒识别的神经网络模型,该模型对部分遮挡具有鲁棒性。实验表明,本文的模型成功地从被遮挡的身体部位恢复了关节信息,并从不完整的输入数据中准确识别了跌倒姿态。
在公开的跌倒数据集上评估了本文的算法模型,其中证明了仅使用合成数据进行训练时,本文的框架显示了对未知的真实世界数据的跌倒识别的出色泛化能力。

OAK在此类应用上的优势

与现有的方法相比,OAK工作的不同之处在于:首先,OAK的框架学习是基于姿态的跌倒特征,这使得框架能够成功地从纯合成数据中学习到的跌倒识别知识迁移到具有未知背景和不同人类角色的真实世界数据中。OAK的框架结合了2D和3D姿态知识,使得框架能够成功地处理2D姿态的模糊性(在单个OAK相机的情况下),而不需要多个摄像机。最后,3D姿态估计和跌倒识别的神经网络模型对姿态数据中的缺失信息具有弹性。这使得框架能够准确地从人的姿势中分辨出跌倒和不跌倒的情况。

请添加图片描述

OAK-D相机的总体工作流程

请添加图片描述

一、模型训练部分:

1.1 准备好姿势检测模型 MoveNet

使用 Katsuya Hyodo 提供的转换好的模型 请添加图片描述

1.2 使用 MoveNet 对人体的 RGB 图片数据集进行识别得到人体姿态骨骼数据集

使用 MoveNet 模型输出的 17 个人体关节点画出骨骼图(类似于火柴人)
请添加图片描述

1.3 将骨骼数据集分为训练集与测试集

请添加图片描述

1.4 使用我们准备好的骨骼数据集,在pytorch下训练全连接层神经网络

使用 pytorch 构建全连接层:(可参考:https://pytorch.org/tutorials/beginner/basics/quickstart_tutorial.html,或者可以使用我们提供的Jupyter notebook

self.sequential = nn.Sequential(
    nn.Linear(16384,100),# 输入为 128x128 的 灰度图
    nn.ReLU(),
    nn.Linear(100,2),
    nn.Softmax(dim=1)
)

因为我们最终要将全连接层神经网络放在OAK-D相机里的 Myriad X 芯片里运行,所以我们要将pytorch训练好的神经网络模型转换成blob文件。我们的转换步骤是先将 pytorch 模型导出到 onnx模型,再将onnx模型转换成openvino支持的格式,在OpenVino下再生成OAK-D需要的blob模型文件 :

示例:

以下是将pytorch模型转化为onnx模型的命令:

model = SomeModel()
# Input to the model
x = torch.randn(1, 3, 128, 128)# Export the model
torch.onnx.export(torch_model,x, "model.onnx", input_names = ['input'],output_names = ['output']

以下是将ONNX模型转换成OpenVino模型的命令:

onnx -> OpenVino

python3 mo.py --input_model model.onnx --data_type FP16

最后我们再用OpenVino工具,将OpenVino模型编译成OAK-D相机支持的blob文件。

OpenVino -> OAK:

./compile_tool -m [INSERT PATH TO MODEL XML FILE] -ip U8 -d MYRIAD -VPU_NUMBER_OF_SHAVES 4 -VPU_NUMBER_OF_CMX_SLICES 4

模型训练好后,我们要开始部署我们的模型到OAK相机上。

二、部署工作

2.1 依据 MoveNet 结果生成骨骼图

点这里进入代码

2.2 把骨骼图片传入全连接层

点这里进入代码

2.3 全连接层对骨骼进行判断

点这里进入代码

2.4 输出骨骼状态(fall or normal),并使用宽高比进行辅助判断

点这里进入代码

检验我们的结果

在OAK-D相机中运行代码,效果如下:

50种跌倒姿势检测[【OAK实际应用】

想了解更多OAK?

快速了解OAK功能
视频版——OAK介绍
全站最详细OpenCV AI开发套件OAK(OpenCV AI Kit)介绍

参考资料

https://docs.oakchina.cn/en/latest/
https://www.oakchina.cn/selection-guide/


OAK中国
| OpenCV AI Kit在中国区的官方代理商和技术服务商
| 追踪AI技术和产品新动态

戳「+关注」获取最新资讯↗↗

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值