1.算法描述
实时的人群异常行为识别是一项极具挑战的工作,具有较高的现实意义和社会需求,快速准确地判断出异常行为并及时预警,一直是我们探索的方向。传统的机器学习算法虽然具有较好的行为识别效果,但是算法的性能严重依赖于人工设计特征,且特征的采用依赖于特定的问题,这就使得算法的泛化能力不足。卷积神经网络作为一种深度模型,因其不需要手动设计特征,可直接作用于原始输入的特性,具有更强的学习和表达能力,在图像识别领域应用广泛。但是CNN中的BP神经网络分类器易导致模型陷入局部最优且收敛速度慢,会对模型精度带来负面影响,而广义回归神经网络(GRNN)仅有一个变量,具有较好的函数逼近能力,不需要迭代,在应用方面效果较优。
C3D 模型是由最初的3D CNN网络发展而来,包括8个卷积层、5个池化层、2个全连接层以及1个 Softmax 输出层。其中每个卷积核尺寸为 ,步长为 ,且对应一张特征map。每次卷积处理前,需要对图像序列作距离为1的填充处理,将图像的长、宽和序列长各向两端扩展一个单元,使得卷积前后的图像尺寸不变。除第一层的池化核大小和步长设为 外,其余池化层的窗口长度和步长均设为 ,防止过早地合并时序信息,并且保持原有固定的16帧输入结构。有资料显示,C3D模型每秒可处理42个16帧的视频输入,换算成无重叠的情况下的fps为672,可见C3D的处理速度比较快。
方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。在一副图像中,局部目标的表象和形状(appearance and shape)能够被梯度或边缘的方向密度分布很好地描述。(本质:梯度的统计信息,而梯度主要存在于边缘的地方)。
HOG特征提取方法就是将一个image(你要检测的目标或者扫描窗口):
1)灰度化(将图像看做一个x,y,z(灰度)的三维图像);
2)采用Gamma校正法对输入图像进行颜色空间的标准化(归一化);目的是调节图像的对比度,降低图像局部的阴影和光照变化所造成的影响,同时可以抑制噪音的干扰;
3)计算图像每个像素的梯度(包括大小和方向);主要是为了捕获轮廓信息,同时进一步弱化光照的干扰。
4)将图像划分成小cells(例如6*6像素/cell);
5)统计每个cell的梯度直方图(不同梯度的个数),即可形成每个cell的descriptor;
6)将每几个cell组成一个block(例如3*3个cell/block),一个block内所有cell的特征descriptor串联起来便得到该block的HOG特征descriptor。
7)将图像image内的所有block的HOG特征descriptor串联起来就可以得到该image(你要检测的目标)的HOG特征descriptor了。这个就是最终的可供分类使用的特征向量了。
GRNN,即General Regression Neural Network,中文全称为广义回归神经网络,是由The Lockheed Palo Alto研究实验室在1991年提出的。GRNN是一种新型的基于非线性回归理论的神经网络模型。GRNN是建立在非参数核回归基础之上的,该神经网络是以测试样本为后验条件,并从观测样本中计算得到自变量和因变量之间的概率密度函数,然后在计算出因变量关于自变量的回归值。由于GRNN不需要规定模型的类型,只需要设置神经网络的光滑因子参数,GRNN神经网络的光滑因子参数的取值对神经网络的输出影响较大,当光滑因子参数较大的时候,其对应的神经元所覆盖的输入区域就越大;当光滑因子参数较小的时候,神经网络对应的径向基函数曲线较陡,因此神经网络输出结果更接近期望值,但此时光滑度越差。由于GRNN广义回归神经网络是基于非线性核回归分析的神经网络,因此,对于任意一个非独立变量y,其相对于独立变量x的回归分析的过程是计算具有最大概率值y。现假设随机变量x和y的联合概率密度函数为f (x ,y),已知x的观测值为X,则y相对于X的回归,即条件均值为:
从图3的结构图可知,GRNN神经网络的输入层神经元数目和输入样本的维度是相同的,即每一个神经元将输入信号直接传递给GRNN神经网络的隐含层中。GRNN神经网络的模式层的神经元数目和学习训练样本的数目相同,即每一个神经元都分别对应着一个不同的学习训练样本.
2.仿真效果预览
matlab2022a仿真结果如下:
3.MATLAB核心程序
function y2 = func_feature1(I1,I2,I3);
FX_Number = 9; %9个方向
Angle = 180;%角度
CellSize = 8; %分割大小8X8
FilterSize = 0; %高斯低通滤波器大小
FilterDelta = 0; %标准偏差
move_pixel = 8; %移动像素
%3D卷积核得到空时间特征,输入前后两帧视频信息
Images(:,:,1)=I1;
Images(:,:,2)=I2;
Images(:,:,3)=I3;
%但是硬核特征计算,替换为hog法,效果更好
%3D卷积核进行卷积
%获得每一帧的特征
%input—>H1
y1 = [func_HOG_Feature(I1,move_pixel,FX_Number,Angle,CellSize,FilterSize,FilterDelta,32)]';
y2 = [func_HOG_Feature(I2,move_pixel,FX_Number,Angle,CellSize,FilterSize,FilterDelta,32)]';
y3 = [func_HOG_Feature(I3,move_pixel,FX_Number,Angle,CellSize,FilterSize,FilterDelta,32)]';
%H1—>C2
y1th = tanh(y1);
y2th = tanh(y2);
y3th = tanh(y3);
%C2—>S3
y1th2 = y1th(1:2:end);
y2th2 = y2th(1:2:end);
y3th2 = y3th(1:2:end);
%out
G1 = conv(y1th2,y2th2,'same');
G2 = conv(y1th2,y3th2,'same');
G3 = conv(y2th2,y3th2,'same');
G = G1+G2+G3;
y = [G];