一种基于fpga的运动目标识别系统及方法
技术领域
本发明涉及图像处理
技术领域
,尤其涉及一种基于FPGA的运动目标识别系统及方法。技术背景
运动目标识别,作为图像处理
技术领域
的基本问题之一,它的任务是利用计算机视觉技术和数字图像处理技术来对获取的视频进行自动分析处理进而判断其中是否有运动目标存在,运动目标识别在公共安全、智能导航、视频监控、航空航天、医学处理、工业生产等领域均有重要的应用。随着深度学习技术的兴起与迅速发展,基于深度学习的运动目标识别算法引起了广泛的关注以及得到了很大的发展,相对于传统的运动目标识别算法,基于深度学习的运动目标识别算法的性能更优。随着运动目标识别准确率和实时性的提高,深度学习算法的计算复杂度和内存需求也急剧增加,当前的通用处理器无法满足其计算需求,而现场可编程门阵列(Field-Programmable Gate Array,FPGA)作为一种高性能、低功耗的可编程芯片,可以适用于小批量流式应用,很适合处理深度学习的推断阶段,能大大缩短开发周期。因此,将FPGA用于运动目标的识别可以更好的达到实时的检测速度和低功耗运行状态,从而适应运动目标识别的现实应用场景。
发明内容
:本发明要解决的技术问题是:本发明提出一种基于FPGA的运动目标识别系统及方法,可以实时有效的对运动物体进行定位并且对运动物体进行准确的识别,解决现在运动目标识别装置识别速度慢、功耗高的问题。
本发明的技术方案是:
一种基于FPGA的运动目标识别系统,包括数据信号采集模块、数据信号预处理模块、目标识别模块和数据信号显示模块。
所诉的数据信号采集模块包括CMOS摄像头、数据转换单元、采集数据存储单元和采集模块控制单元。
所述的数据信号预处理模块包括滤波单元、边缘检测单元、运动目标定位单元和预处理数据存储单元。
所述的目标识别模块包括前处理单元、量化单元、神经网络检测单元和后处理单元。
所述的数据信号显示模块包括显示数据存储单元、显示模块控制单元以及VGA显示器。
首先由数据信号采集模块负责对目标区域进行实时的视频图像采集,将采集到的视频图像转换为转化成灰度图像,并且存储到采集数据存储单元中;接着由数据信号预处理模块将采集数据存储单元存储的视频图像数据有序读出,经过中值滤波处理后即可去除噪声,得到包含运动目标和背景的全部灰度信息,再经过边缘检测处理后得到实时的二值化图像,再利用帧间差分的方法将视频序列中的运动目标提取出来,完成运动目标标定框的定位,并且将完成定位的数据存储到预处理数据存储单元中;然后由目标识别模块负责将预处理数据存储单元中的运动目标标定框里的内容作为待测图像,将待测图像输入神经网络检测单元利用图像识别神经网络完成对待测图像的识别,并且将识别结果存储在显示数据存储单元中;最后由数据信号显示模块将显示数据存储单元中针对视频序列的运动目标的识别结果展示出来。
一种基于FPGA的运动目标识别方法,包括以下步骤:
步骤一:由数据信号采集模块完成对目标区域实时的视频图像采集,将采集到的数据图像进行数据格式的转换和存储。
步骤二:由数据信号预处理模块负责将采集数据存储单元存储的视频序列图像数据有序读出,经过中值滤波去噪、边缘检测得到实时的二值化图像,再利用帧间差分的方法提取运动目标,完成运动目标标定框的定位,并进行存储。
步骤三:通过目标识别模块将预处理数据存储单元中的运动目标标定框里的内容作为待测图像,经过前处理单元、量化单元,然后利用神经网络检测单元对待测图像进行识别,并经过后处理单元将识别结果进行存储。
步骤四:由数据信号显示模块通过显示模块控制单元将存储在显示数据存储单元中的数据依次取出,进而将针对视频序列中运动目标的识别结果通过VGA显示器进行展示。
步骤一具体方法如下:
首先采集模块控制单元控制CMOS摄像头对目标区域进行实时的拍摄,以获取实时的视频序列,然后由于CMOS摄像头的输出格式为RGB格式,所以需要在数据转换单元中将RGB格式转化为YCbCr格式,得到视频序列的灰度图像。具体公式如下:
式中:Y表示亮度信号,并将其作为图像像素的灰度,Cb表示RGB输入信号蓝色部分与RGB信号亮度值之间的差异,Cr表示RGB输入信号红色部分与RGB信号亮度值之间的差异,R、G、B分别表示红、绿、蓝三种颜色分量的灰度值。
然后将YCbCr格式的视频序列图像存放至采集数据存储单元中。
步骤二具体方法如下:
首先数据信号预处理模块将采集数据存储单元中的视频序列原始灰度图像取出至滤波单元中,利用中值滤波的方法对视频序列原始灰度图像进行滤波处理,避免环境变化和噪声干扰的影响,消除视频序列原始灰度图像中的椒盐噪声,防止图像信噪比较低且质量下降。具体实现方式如下:
f(x,y)=median{g(s,t)} s,t∈Sxy
式中,g(s,t)为视频序列原始灰度图像,f(x,y)为滤波后的灰度图像,Sxy为滤波窗口。选择一个含有(2n+1)*(2n+1)个奇数点的掩膜窗口,n为正整数,将窗口的中点放置在原始灰度图像某一像素点,对窗口中所有的数值按照大小排序,选取中间值代替图像这一像素点的原有值,进而将窗口滑动至下一个像素点,直至遍历整幅图像,即可去除噪声,得到包含运动目标和背景的全部灰度信息。
然后由边缘检测单元利用边缘检测算子将经过滤波处理后的视频序列灰度图像中的边缘轮廓检测出来并作为特征信息,具体实现方式如下:
选择1个3*3的卷积窗口,如下:
代表图像像素点(x,y)的8邻域Pij,设置0°、45°、90°、135°四个梯度方向的边缘检测算子,如下:
将四个边缘检测算子分别与Pij进行卷积运算,得到四个方向的梯度值,如下:
T0=(P31+2P32+P33)-(P11+2P12+P13)
T45=(P23+2P33+P32)-(P12+2P11+P21)
T90=(P13+2P23+P33)-(P11+2P21+P31)
T135=(P12+2P13+P23)-(P21+2P31+P32)
最终合成的梯度T(x,y)取四个梯度值中的最大值,如下:
T(x,y)=max(T0,T45,T90,T135)
进而根据图像像素点(x,y)的8邻域Pij设置图像边缘动态阈值t(x,y),如下:
将图像边缘动态阈值t(x,y)与该窗口对应的梯度值T(x,y)相比较,即可得到视频序列二值化边缘图像,如下:
接着由运动目标定位单元利用帧间差分的方法,比较视频序列中连续的两帧图像中所有相对应的像素点的值。公式如下:
di(x,y)=|hi(x,y)-hi-1(x,y)|
式中,hi(x,y)表示视频序列的当前第i帧图像像素点(x,y)的像素值,hi-1(x,y)表示前一帧图像该点的值,di(x,y)为差分值。将得到的差分值通过差分动态阈值J比较来判断是否存在运动物体。若差分值di(x,y)大于差分动态阈值J就认为该点对应的位置发生了运动,若差分值di(x,y)小于差分动态阈值J则将该点隐藏,即可完成对运动目标的提取,得到只包含运动目标的二值化图像,并将只包含运动目标的二值化图像的边缘作为运动目标标定框。
公式如下:
式中差分动态阈值J取连续两帧图像的像素点均值[hi(x,y)+hi-1(x,y)]/2。
最后将完成运动目标定位的数据存储到预处理数据单元中以便于目标识别模块随时进行数据的读取和存储。
步骤三具体方法如下:
首先目标识别模块将预处理数据存储单元中的数据取出放入前处理单元中,提取数据内容中运动目标定位框里的内容作为待测图像,将待测图像的像素除以256转化到[0,1]区间,按照待测图像的长宽比例调整到416*416大小,不足处填充0.5,即可得到416*416*3的图像数组,并将处理后的待测图像数组存放至片上缓存中。
然后由量化单元对经过前处理单元的待测图像的输入特征图以及神经网络检测单元中所使用的图像识别神经网络的卷积核权重进行定点量化,并存入片上缓存中,量化方式如下:
xfixed=(int)(xfloat*2q)
xfloat=(float)(xfixed*2-q)
式中,xfixed表示定点数,xfloat表示浮点数,q表示定点数的位宽。
接着由神经网络检测单元将片上缓存中的数据取出,利用卷积神经网络模型识别出目标信息,输出包含运动目标物体类别信息的数组。最后由后处理单元根据待测图像的长宽比将包含运动目标物体类别信息的数组恢复到待测图像尺寸,完成图像的识别,并将识别结果写入显示数据存储单元。
进一步的,所述的神经网络检测单元的图像识别神经网络采用,YOLOv2神经网络;YOLOv2总共由32层组成,其中包括23个卷积层,5个最大池化层,2个路由层,1个重排序层以及1个最后的检测。卷积层功能是对输入层的特征图利用对应的卷积核进行卷积来实现特征的提取;池化层采用最大池化的方法对输入特征图降采样,降低特征图的规模,同时也具有保持某种不变性的功能,一般跟在卷积层后;路由层将多层的输出特征图级联,作为下一层的输入特征图,实质是将多维度的特征信息简单融合;重排序层对输入特征图在邻域内按位置抽样,相同位置的像素输出形成子图;检测层作为YOLOv2卷积神经网络最后一层负责将检测的结果进行类比和输出。
本发明有益效果如下:
本发明提出一种基于FPGA的运动目标识别系统及方法,充分利用FPGA的运算资源和视频相邻帧的关联性,更加快速的完成针对视频序列中运动物体进行定位并识别出物体的类别,更好的达到实时的检测速度和低功耗运行状态,从而适应运动目标识别的室外应用场景。
附图说明
图1是本发明实施例的硬件实现平台框图;
图2是本发明的流程图。
具体实施方式
下面根据本发明实施例中的附图对本发明实施例中的方法进行完整、清楚、细致的描述,使得本发明的目的和效果变得更加明显。
如图1所示,本发明所述的一种基于FPGA的运动目标识别系统,包括数据信号采集模块、数据信号预处理模块、目标识别模块和数据信号显示模块。
所诉的数据信号采集模块包括CMOS摄像头、数据转换单元、采集数据存储单元和采集模块控制单元。
所述的数据信号预处理模块包括滤波单元、边缘检测单元、运动目标定位单元和预处理数据存储单元。
所述的目标识别模块包括前处理单元、量化单元、神经网络检测单元和后处理单元。
所述的数据信号显示模块包括显示数据存储单元、显示模块控制单元以及VGA显示器。
首先由数据信号采集模块负责对目标区域进行实时的视频图像采集,将采集到的视频图像转换为转化成灰度图像,并且存储到采集数据存储单元中;接着由数据信号预处理模块将采集数据存储单元存储的视频图像数据有序读出,经过中值滤波处理后即可去除噪声,得到包含运动目标和背景的全部灰度信息,再经过边缘检测处理后得到实时的二值化图像,再利用帧间差分的方法将视频序列中的运动目标提取出来,完成运动目标标定框的定位,并且将完成定位的数据存储到预处理数据存储单元中;然后由目标识别模块负责将预处理数据存储单元中的运动目标标定框里的内容作为待测图像,将待测图像输入神经网络检测单元利用图像识别神经网络完成对待测图像的识别,并且将识别结果存储在显示数据存储单元中;最后由数据信号显示模块将显示数据存储单元中针对视频序列的运动目标的识别结果展示出来。
如图2所示,一种基于FPGA的运动目标识别方法,包括以下步骤:
步骤一:由数据信号采集模块完成对目标区域实时的视频图像采集,将采集到的数据图像进行数据格式的转换和存储。
首先采集模块控制单元控制CMOS摄像头对目标区域进行实时的拍摄,以获取实时的视频序列,然后由于CMOS摄像头的输出格式为RGB格式,所以需要在数据转换单元中将RGB格式转化为YCbCr格式,得到视频序列的灰度图像。具体公式如下:
式中:Y表示亮度信号,并将其作为图像像素的灰度,Cb表示RGB输入信号蓝色部分与RGB信号亮度值之间的差异,Cr表示RGB输入信号红色部分与RGB信号亮度值之间的差异,R、G、B分别表示红、绿、蓝三种颜色分量的灰度值。
然后将YCbCr格式的视频序列图像存放至采集数据存储单元中,以便于数据信号预处理模块随时进行数据的读取和存储。
步骤二:由数据信号预处理模块负责将采集数据存储单元存储的视频序列图像数据有序读出,经过中值滤波去噪、边缘检测得到实时的二值化图像,再利用帧间差分的方法提取运动目标,完成运动目标标定框的定位,并进行存储。
首先数据信号预处理模块将采集数据存储单元中的视频序列原始灰度图像取出至滤波单元中,利用中值滤波的方法对视频序列原始灰度图像进行滤波处理,避免环境变化和噪声干扰的影响,消除视频序列原始灰度图像中的椒盐噪声,防止图像信噪比较低且质量下降。具体实现方式如下:
f(x,y)=median{g(s,t)} s,t∈Sxy
式中,g(s,t)为视频序列原始灰度图像,f(x,y)为滤波后的灰度图像,Sxy为滤波窗口。选择一个含有(2n+1)*(2n+1)个奇数点的掩膜窗口,n为正整数,将窗口的中点放置在原始灰度图像某一像素点,对窗口中所有的数值按照大小排序,选取中间值代替图像这一像素点的原有值,进而将窗口滑动至下一个像素点,直至遍历整幅图像,即可去除噪声,得到包含运动目标和背景的全部灰度信息。
然后由边缘检测单元利用边缘检测算子将经过滤波处理后的视频序列灰度图像中的边缘轮廓检测出来并作为特征信息,可以滤除大量无效信息,减少运动目标提取过程中的干扰。具体实现方式如下:
选择1个3*3的卷积窗口,如下:
代表图像像素点(x,y)的8邻域Pij,设置0°、45°、90°、135°四个梯度方向的边缘检测算子,如下:
将四个边缘检测算子分别与Pij进行卷积运算,得到四个方向的梯度值,如下:
T0=(P31+2P32+P33)-(P11+2P12+P13)
T45=(P23+2P33+P32)-(P12+2P11+P21)
T90=(P13+2P23+P33)-(P11+2P21+P31)
T135=(P12+2P13+P23)-(P21+2P31+P32)
最终合成的梯度T(x,y)取四个梯度值中的最大值,如下:
T(x,y)=max(T0,T45,T90,T135)
进而根据图像像素点(x,y)的8邻域Pij设置图像边缘动态阈值t(x,y),如下:
将图像边缘动态阈值t(x,y)与该窗口对应的梯度值T(x,y)相比较,即可得到视频序列二值化边缘图像,如下:
接着由运动目标定位单元利用帧间差分的方法,比较视频序列中连续的两帧图像中所有相对应的像素点的值。公式如下:
di(x,y)=|hi(x,y)-hi-1(x,y)|
式中,hi(x,y)表示视频序列的当前第i帧图像像素点(x,y)的像素值,hi-1(x,y)表示前一帧图像该点的值,di(x,y)为差分值。将得到的差分值通过差分动态阈值J比较来判断是否存在运动物体。若差分值di(x,y)大于差分动态阈值J就认为该点对应的位置发生了运动,若差分值di(x,y)小于差分动态阈值J则将该点隐藏,即可完成对运动目标的提取,得到只包含运动目标的二值化图像,并将只包含运动目标的二值化图像的边缘作为运动目标标定框。
公式如下:
式中差分动态阈值J取连续两帧图像的像素点均值[hi(x,y)+hi-1(x,y)]/2。
最后将完成运动目标定位的数据存储到预处理数据单元中以便于目标识别模块随时进行数据的读取和存储。
步骤三:通过目标识别模块将预处理数据存储单元中的运动目标标定框里的内容作为待测图像,经过前处理单元、量化单元,然后利用神经网络检测单元对待测图像进行识别,并经过后处理单元将识别结果进行存储。
根据神经网络检测单元所使用的卷积神经网络结构、参数量、运算量以及整个运动目标识别系统所需的功耗、检测速度、应用场景,选择YOLOv2卷积神经网络作为识别图像中物体类别的神经网络应用到FPGA中,YOLOv2神经网络由卷积层、池化层、路由层和重排序层构成。
首先目标识别模块将预处理数据存储单元中的数据取出放入前处理单元中,提取数据内容中运动目标定位框里的内容作为待测图像,将待测图像的像素除以256转化到[0,1]区间,按照待测图像的长宽比例调整到416*416大小,不足处填充0.5,即可得到416*416*3的图像数组,并将处理后的待测图像数组存放至片上缓存中。
然后由量化单元对经过前处理单元的待测图像的输入特征图以及YOLOv2卷积神经网络的卷积核权重进行定点量化,并存入片上缓存中,量化方式如下:
xfixed=(int)(xfloat*2q)
xfloat=(float)(xfixed*2-q)
式中,xfixed表示定点数,xfloat表示浮点数,q表示定点数的位宽。经过量化,可以在保持准确率不变的前提下,减少传输数据量,减少计算耗费的资源。
接着由神经网络检测单元将片上缓存中的数据取出,经YOLOv2神经网络模型识别出目标信息,输出大小为13*13*425,包含运动目标物体类别信息的图像数组。YOLOv2总共由32层组成,其中涉及23个卷积层(conv),5个最大池化层(max),2个路由层(route),1个重排序层(reorg)以及1个最后的检测层(detection)。卷积层主要功能是对输入层的特征图利用对应的卷积核进行卷积来实现特征的提取;池化层采用最大池化的方法对输入特征图降采样,降低特征图的规模,同时也具有保持某种不变性(旋转、平移、伸缩等)的功能,一般跟在卷积层后;路由层将多层的输出特征图级联,作为下一层的输入特征图,实质是将多维度的特征信息简单融合;重排序层对输入特征图在邻域内按位置抽样,相同位置的像素输出形成子图;检测层作为YOLOv2卷积神经网络最后一层负责将检测的结果进行类比和输出。
最后由后处理单元根据待测图像的长宽比将13*13*425的图像数组恢复到待测图像尺寸,完成图像的识别,并将识别结果写入数据存储单元。
步骤四:由数据信号显示模块通过显示模块控制单元将存储在显示数据存储单元中的数据依次取出,进而将针对视频序列中运动目标的识别结果通过VGA显示器进行展示。
表1是YOLOv2卷积神经网络的网络结构。
- 上一篇:石墨接头机器人自动装卡簧、装栓机
- 下一篇:一种相似度计算方法和多目标跟踪方法