[0051] 一种基于混合高斯模型和神经网络的行人摔倒检测方法,如图1所示,具体步骤如下:
[0052] 步骤(1).提取视频中的前景区域:
[0053] (1‑1).每帧图像转化为灰度图,并使用混合高斯模型提取前景:将第一帧图像设为背景,混合高斯模型对此背景进行建模,之后每一帧图像读入后遍历每个像素点;将不符合背景模型的像素点判定为前景区域的像素点,将其设为255;符合背景模型的像素点的像素值设为0;最终形成此帧图像前景区域的掩膜。
[0054] (1‑2).合并掩膜:将每N帧图像形成的掩膜进行矩阵逻辑操作中的或操作,并对结果进行形态学的先闭后开操作,用于减少噪声和填补空洞,最终找到前景区域的具体位置;N=10~30。
[0055] (1‑3).输出:每读入N帧图像输出1帧输出图像,所述的输出图像为仅前景区域保持原有像素值,背景区域像素值全为0的前景区域图像,具体实现如下:
[0056] (k·N+1)帧图像与其对应的掩膜图像进行矩阵逻辑操作中的与操作,并将形成的图像作为输出图像,k=2,3,4,5,6,…;(k·N+1)帧图像对应的掩膜图像是(k‑1)N帧图像到k·N帧图像合并形成的掩膜。
[0057] 以此图像作为输出使得alphapose神经网络只会对可能存在行人的前景区域进行检测,减少了需要检测的图像的面积,能有效的减轻alphapose神经网络的计算负担,提高运行速度。
[0058] 步骤(2).利用alphapose神经网络进行行人检测和骨骼检测:
[0059] (2‑1).准备行人检测数据集和单人骨骼检测数据集:
[0060] 行人检测数据集:从互联网上下载已经公开的官方的行人数据集,例如:Caltech行人数据库、coco行人数据集、INRIA数据集。
[0061] 单人骨骼提取数据集:采用人工合成数据的方式生成,具体如下:
[0062] 下载已经公开的二维骨架数据集,从骨架数据集中随机抽取骨架数据,并根据骨骼距离函数进行聚类,得到336个具有代表性的二维骨架图像;
[0063] 根据二维骨架图像,使用一些开源的3D合成软件生成做此336个动作的3D人体模型,且要求3D合成软件能合成不同身高、体重、性别的人体模型,且能匹配不同的穿着和背景、摄像头拍摄角度,用于增加数据集的多样性,增加单人骨骼提取神经网络的泛化性;
[0064] 根据生成的数据标注骨骼关键点的坐标。
[0065] 采用人工合成数据的方式能有效的解决缺少大量人体骨骼数据的问题,且能根据实际问题合成特定情况下的数据,灵活性好。
[0066] (2‑2).训练yolov3行人检测神经网络,并进行检测:
[0067] 训练:所述的yolov3行人检测神经网络只检测行人,其训练集即为行人检测数据集。
[0068] 检测:将步骤(1)中输出图像输入训练后的行人检测神经网络,检测是否有行人;若有,则得到每个检测出的行人的外接矩形框顶点坐标,提取此矩形框内的图像;若没有,则进行下一帧图像的行人检测。
[0069] (2‑3).训练单人骨骼检测网络,并进行检测:
[0070] 训练:使用单人骨骼提取数据集进行单人骨骼检测网络的训练。
[0071] 检测:用已经训练好的单人骨骼检测网络检测提取的的各个矩形框内的图像,输出此帧图像中每个行人的骨骼关键点坐标数据,并根据之前帧的骨骼检测结果拼接形成每个行人的骨骼时间序列图,具体实现方法如下:
[0072] 形成第i帧图像中第n人单帧骨骼矩阵:分别选择左肩、右肩、左髋、右髋参照坐标点拼接形成骨骼的矩阵。
[0073] 例如,选择此人左肩 为参照点,计算此人所有骨骼关节与其相对距离,形成1行36列矩阵:
[0074]其中,
[0075] 分别表示图像中第n人骨骼中左踝的y坐标轴值和x坐标轴值;
[0076] 分别表示图像中第n人骨骼中右踝的y坐标轴值和x坐标轴值;
[0077] Yn,nose、Xn,nose分别表示图像中第n人骨骼中鼻子的y坐标轴值和x坐标轴值;
[0078] Yn,neck、Xn,neck分别表示图像中第n人骨骼脖子的y坐标轴值和x坐标轴值;
[0079] 分别表示图像中第n人骨骼中左肩的y坐标轴值和x坐标轴值;
[0080] 分别表示图像中第n人骨骼中右肩的y坐标轴值和x坐标轴值;
[0081] 分别表示图像中第n人骨骼左肘的y坐标轴值和x坐标轴值;
[0082] 分别表示图像中第n人骨骼中右肘的y坐标轴值和x坐标轴值;
[0083] 分别表示图像中第n人骨骼中左腕的y坐标轴值和x坐标轴值;
[0084] 分别表示图像中第n人骨骼中右腕的y坐标轴值和x坐标轴值;
[0085] 分别表示图像中第n人骨骼中左髋的y坐标轴值和x坐标轴值;
[0086] 分别表示图像中第n人骨骼中右髋的y坐标轴值和x坐标轴值;
[0087] 分别表示图像中第n人骨骼中左膝的y坐标轴值和x坐标轴值;
[0088] 分别表示图像中第n人骨骼中右膝的y坐标轴值和x坐标轴值;
[0089] 分别表示图像中第n人骨骼中左耳的y坐标轴值和x坐标轴值;
[0090] 分别表示图像中第n人骨骼中右耳的y坐标轴值和x坐标轴值;
[0091] 分别表示图像中第n人骨骼中左眼的y坐标轴值和x坐标轴值;
[0092] 分别表示图像中第n人骨骼中右眼的y坐标轴值和x坐标轴值。
[0093] 其他3个由于采用不同参照点最终形成的矩形也可以用同样方法形成。拼接这4个矩阵形成一个1行144列的单帧骨骼矩阵 其中,
[0094] 表示以第n个人左肩 为参照点,计算此人所有骨骼关节与参照点相对距离,最终拼接形成的矩阵;
[0095] 表示以第n个人右肩 为参照点,计算此人所有骨骼关节与参照点相对距离,最终拼接形成的矩阵;
[0096] 表示以第n个人左髋 为参照点,计算此人所有骨骼关节与参照点相对距离,最终拼接形成的矩阵;
[0097] 表示以第n个人右髋 为参照点,计算此人所有骨骼关节与参照点相对距离,最终拼接形成的矩阵。
[0098] 对单帧骨骼矩阵进行0到255之间的归一化。
[0099] 同时,更新第n人的骨骼时间序列:在读入视频之前,先初始化第n个人的骨骼时间序列图Fn为空矩阵[];在从第1帧到第i帧的读入视频过程中,依次按列往Fn尾部加入此帧图像形成的第n人单帧骨骼矩阵:当i≤imax,按列往Fn尾部加入i帧图像形成的第n人单帧骨骼矩阵;当i>imax,按列往F尾部加入i帧图像形成的第n人单帧骨骼矩阵,同时移除此骨骼时间序列中最早加入的单帧骨骼矩阵,始终保持Fn为imax行144列矩阵,即形成如下形式的Fn:
[0100] imax为设定参数,一般情况下设置为144即可。
[0101] (2‑4).关键点初分类:
[0102] 对单人骨骼检测网络输出的各个行人的骨骼关键点坐标数据进行判断;根据此行人的骨骼关键点坐标数据画出骨骼,并计算此骨骼的外接矩形的宽高比,若大于设定阈值τ1,则根据下式对此人骨骼数据进行判断,若满足,则判定为疑似摔倒,将此人骨骼时间序列图输出到步骤(3),τ1=0.7~0.8;
[0103] 其中,
[0104] 分别表示图像中第n人骨骼中左踝的y坐标轴值和x坐标轴值;
[0105] 分别表示图像中第n人骨骼中右踝的y坐标轴值和x坐标轴值;
[0106] 表示图像中第n人骨骼中左髋的y坐标轴值;
[0107] 表示图像中第n人骨骼中右髋的y坐标轴值;
[0108] Yn,neck、Xn,neck分别表示图像中第n人骨骼中脖子的y坐标轴值和x坐标轴值;
[0109] 分别表示图像中第n人骨骼中左膝的y坐标轴值和x坐标轴值;
[0110] 分别表示图像中第n人骨骼中右膝的y坐标轴值和x坐标轴值。
[0111] 步骤(3).采用MobileNet网络对疑似摔倒骨骼的序列图进行分类:
[0112] (3‑1).制作训练集:
[0113] 采集(2‑4)输出的疑似摔倒的行人的骨骼序列图,并对这些骨骼序列图进行人为标注:摔倒标注为0,误判标注为1;所述的误判包含下蹲,弯腰等一系列疑似摔倒的动作形成的骨骼序列图。
[0114] (3‑2).构建MobileNet网络进行训练并检测:
[0115] MobileNet网络共28层,0‑26层为系列卷积层,最后一层为全连接层,其卷积层的卷积核都为1x1或3x3,这使得此网络拥有极少的参数和快速的前向传播速度。卷积层经过7x7的平均池化后与1024x1000的全连接层连接。最后一层为分类层,构建一个1024x2的分类层即可,并采用softmax获得类别概率。
[0116] 训练:加载网络上下载的训练好的MobileNet网络权重,使用(3‑1)中数据集训练网络,先只训练最后一层分类层,当损失函数的下降率低于设定阈值τ2(τ2=3~6%,本实施例中τ2=5%)后,再对所有层进行训练。优化器设置为RMSProp,并在每m次迭代后学习率下降10%;损失函数采用交叉熵损失函数。
[0117] 检测:将(2‑4)判定为疑似摔倒输出的骨骼时间序列图输入完成训练的此MobileNet网络进行分类,若判定为摔倒,则进行报警。