面向生产的红鳍东方鲀识别与计数系统的研究与实现

2020-07-05 06:15李卫
装备维修技术 2020年26期

李卫

摘 要:近年来,计算机视觉技术在海洋水产养殖领域中不断发展并且使用率也越来越高,这其中鱼类图片的检索在鱼类种群研究和鱼类行为分析中发挥了不可或缺的作用,随着在海洋水产养殖领域中计算机视觉技术的不断发展,鱼类成像在鱼类资源和行为分析任务中发挥了重要任务。开发本系统的目的便是为了帮助用户更好,更简便地使用各类识别算法,并且可以对识别结果进行对比。

关键词:计算机视觉技术;红鳍东方鲀识别;计数系统的研究

1 研究内容

面向生产的红鳍东方鲀识别与计数系统是参考现有系统改进而来,但迫于时间压力和精力有限,系统设计中只嵌入了YOLO与MCNN两种识别算法,目前有选择图片,上传图片,添加参数,显示结果等功能。

服务器与浏览器的通信方式中包含多种方式,通常我们会使用HTTP网络请求的方式来进行数据的管理,通过Restful的方式实现一个和多个请求。通过自己制定请求规则来解决前后端数据的一致性的问题。

在系统的研发时,通过之前软件工程的思想,将整个软件开发流程中可行性研究,需求分析,软件设计,编码实现到最终的功能测试,每个环节都作了充分的了解与调研,获得极为有价值的经验。并且学会了调试等诸多开发技巧,如断点、输出等功能。

2 开发工具介绍

2.1  Eclipse

Eclipse的插件机制是轻型软件组件化架构。,Eclipse使用插件来提供所有的附加功能,例如支持Java以外的其他语言。目前已有的但还未安装到Eclipse中的插件已经能够支持C/C++(CDT)、Perl、Ruby,Python、telnet和数据库开发。插件架构能够支持将任意的扩展加入到 现有环境中现有的插件已经可以满足本系统的开发。

2.2  Pycharm

Pycharm不仅是一款python集成开发环境同时也支持前端开发,作为一款集成开发环境其具有的功能也十分全面。Pycharm作为本系统的开发软件,省去了安装python插件的步骤,只需要安装框架后便可以进行开发。

3 相关算法介绍

近几年来,目标检测算法取得了很大的突破。比较流行的算法可以分为两类,一类是基于Region Proposal的R-CNN系算法(R-CNN,Fast R-CNN, Faster R-CNN),它们是two-stage的,需要先使用启发式方法(selective search)或者CNN网络(RPN)产生Region Proposal,然后再在Region Proposal上做分类与回归。而另一类是Yolo,SSD这类one-stage算法,其仅仅使用一个CNN网络直接预测不同目标的类别与位置。第一类方法是准确度高一些,但是速度慢,而第二类算法是速度快,但是准确性要低一些。本文首先介绍的是Yolo1算法,其全称是You Only Look Once: Unified, Real-Time Object Detection,You Only Look Once说的是只需要一次CNN运算,Unified指的是这是一个统一的框架,提供end-to-end的预测,而Real-Time体现是Yolo算法速度快,可以达到实时。Yolo-v1的性能是差于后来的SSD算法的,但是Yolo后来也继续进行改进,产生了Yolo9000算法,和Yolov3。

公共场合中通过摄像机实现人数计数具有重要的研究价值。比如: 候车大厅中人群计数的结果,可优化公共交通的调度。公共场合中采用摄像机实现人群计数在智能安防领域具有重要价值。因此, 人群计数(Crowd Counting)或者人群密度估计(Crowd Density Estimation)是计算机视觉和智能视频监控领域的重要研究内容。人群计数的通常的方法大致可以分为三种:

3.1 行人检测 : 这种方法比较直接,在人群较稀疏的场景中,通过检测视频中的每一个行人,进而得到人群计数的结果,一般是用基于外观和运动特征的boosting,贝叶斯模型为基础的分割,或集成的自顶向下和自底向上的处理,这种方法在人群拥挤情况下不大奏效,需要运用到基于部件模型(如DPM)的检测器来克服人群拥挤遮挡的问题。

3.2 视觉特征轨迹聚类:对于视频监控,一般用KLT跟踪器和聚类的方法,通过轨迹聚类得到的数目来估计人数。

3.3 基于特征的回归: 建立图像特征和图像人数的回归模型, 通过测量图像特征从而估计场景中的人数。由于拥挤情况下采用直接法容易受到遮挡等难点问题的影响,而间接法从人群的整体特征出发,具有大规模人群计数的能力。

当前阶段人群计数的主要问题有以下几点:

在大多数现有的工作中,前景分割是必不可少的,但前景分割是项艰巨任务;人群的密度和分布会有显著变化,需要一种有效的特征来针对图像中人群规模可能有显著变化的情况。

基于以上问题,《Single-Image Crowd Counting via Multi-Column Convolutional Neural Network》这篇文章的作者提出了一个基于CNN的新框架用于任意单幅图像上的人群计数。MCNN包含了三列具有不同滤波器大小的卷积神经网络。所做贡献如下:

3.4 多列架构的原因是:三列对应于不同大小的感受野(大,中,小),使每个列卷积神经网络的功能对由于透视或不同的图像分辨率造成的人/头大小变化是自适应的。

3.5 用一个1*1滤波器的卷积层代替了完全连接的层,因此模型的输入图像可以是任意大小的,避免了失真。网络的直接输出是一个人群密度估计图,从中可以得到的整体计数。

3.6 收集了一個新的数据集用于人群计数方法的评价。比现有的数据集包含更复杂的情况,能更好地测试方法性能。

4 主体架构设计与实现

在开始正式编程之前首先要完成系统的主体架构设计,这样编程才会更有目的性,达到的效果才会更加准确,由于现有的两种算法Yolo与MCNN使用了python语言,因此后端编程使用了flask框架,前端则使用了jQuery框架,他们共有的特点就是简洁,轻量,既可以很好地完成系统设计,又不会有太多冗杂的功能。

总结

该系统的开发宗旨是将多种识别算法集成在一个系统当中,有些类似于Eclipse的“万物皆插件”的宗旨,本系统主要分为选择图片,上传图片,生产参数列表,原始图像显示和识别结果显示这五大模块,实现对图像的识别与结果输出。

(克拉玛依职业技术学院信息工程系,新疆 克拉玛依 834000)