**计算机系统的介绍

一 概要

  传统的鱼类图像识别往往存在识别速度慢,识别率低,误判率,漏检率高等问题。随着现代信息社会,新科技,新技术,新设施的发展以及深度学习算法框架的完善,许多基于深度学习的水下鱼类图像识别算法被提出,例如:基于R-CNN深度学习的鱼类目标检测算法、基于水下图像底层特征的鱼类目标检测等算法,但通常都因为水下环境恶劣、可见性差、拍摄图片品质差等因素导致最终识别效果很差。本文将深度学习优秀的学习能力以及可移植性好等优点运用于水下模糊环境的鱼类识别领域,开展了基于深度学习的水下模糊环境下鱼类识别研究。目前YOL v5在目标检测领域从速度和精度综合来看,是明显优于其它先进的目标检测算法如:EfficientDet、SSD、Fast R-CNN等。所以本文提出一种基于YOLOv5算法的水下模糊环境下鱼类识别模型。本文的主要工作和成果如下:(1)本文拍摄并制作了共计3595张水下模糊环境下的同种鱼类图片数据。为了克服水下模糊环境下拍摄图片整体光照强度低、可视范围小、水下背景模糊、杂质多等问题,首先,在预处理阶段采用暗通道先验算法,以提高图像的清晰度、明度,减少图片品质导致人工数据集标注的误差。(2)针对YOLOv5算法召回率低、mAP(平均准确度)低的问题,研究采用xxxxxx。实验结果验证了本文基于改进YOLOv5算法的水下模糊环境下鱼类识别模型的有效性。
关键词:鱼类鉴别;目标检测;YOLO;深度学习

二、目标检测方法

1.2.2.1两阶段目标检测算法

两阶段目标检测算法准确率较高,而One-Stage算法较为快速。Two-Stage算法的目标检测任务分为两个阶段,第一阶段首先尝试识别并预测物体位置,第二步则加工第一次的检测结果来获取目标图像更准确的坐标信息,然后再依次对每个候选区进行单阶段目标识别。
R-CNN为Ross Girshick 首次应用的利用替补区换掉传统滑动窗口的目标检测算法[3],这个算法总共需要进行三个过程,首先基于Selective Search(选择性搜索)生成一些候选的区域即Proposals;然后对于这些候选区进行长和宽的归一化后,输入到CNN中提取特征,最后,利用SVM (support vector machine)分类模型结合NMS (non - maximum suppression),利用窗口评分来抑制每类对象的非最大值,并提出重叠建议框。最后,得到各类回归校正后得分最高的窗口,并得到区域边界,以判断候选区域中是否有目标以及目标的类别。该算法需要大量的特征提取,计算量大,耗时长。
Ross Girshick在R-CNN的基础上提出了Fast R-CNN目标检测算法[4]。该算法将特征获取和分类放在在一个网络中进行联合训练。使用RoI-Pooling层代替了空间金字塔池化操作,加速了CNN提取特征的过程,RoI Pooling是利用一个固定尺寸的矩形框将特征进行分割,得到不同候选区域,继而把这里的候选区域的特殊性质传入Softmax分类器和位置回归函数里面。这样的方式把在网络中加入了多任务函数边框回归,完成了端到端目标检测算法。
任少卿, 何凯明等人为了解决曾经有目标检测算法检测速度迟缓的麻烦,制订了 Faster R-CNN目标检测算法[5]。 该方法使用了RPN(Region Proposal Network)区域建议网络代替了Selective Search,极大地提高了生成Proposals的速率。整个算法大致可分为两个步骤:第一步是在滑动窗口上生成大小和长度与宽度比率不同的锚框,设置IoU的阈值,并根据Ground Truth(正确地)校准这些锚框。标记)的标志。因此,传递到RPN网络的样本数据将分类为锚框坐标以及每个锚框中是否有对象(两个分类标签)。 RPN网络将每个样本映射到一个概率值和四个坐标值。概率值反映了锚框具有对象的概率,并且使用四个坐标值进行回归以定义对象的位置。最后,将两个分类和坐标回归的损失统一起来,作为RPN网络的目标训练。 RPN所获得的区域建议书根据概率值进行筛选后,经过类似的标记过程,然后传递到R-CNN子网中进行多分类和坐标回归,并且多任务损失也被用于组合分类损失函数和回归损失函数。
RPN所获得的区域建议书根据概率值进行筛选后,经过类似的标记过程,然后传递到R-CNN子网中进行多分类和坐标回归,并且多任务损失也被用于组合分类损失函数和回归损失函数。
RPN所获得的区域建议书根据概率值进行筛选后,经过类似的标记过程,然后传递到R-CNN子网中进行多分类和坐标回归,并且多任务损失也被用于组合分类损失函数和回归损失函数。 该方法避免了上述方法的对大量候选区域进行检测的操作,减少了目标检测的时间。

1.2.2.2单阶段目标检测算法

与两阶段目标检测算法不同,单阶段目标检测算法将物体分类和物体定位放在一个步骤,没有生成候选区过程,直接从图片获得预测结果,也被称为Region-free方法,不仅简化了目标检测的整个过程,同时大大减少了目标检测所需的时间,在检测处理速度上更加满足现实实际需求。
YOLOv1(You Only Look Once)[5]把没有剪裁过的图片作为网络的输入,把图像划分成的几个部分,所有的网格来说,研究时都把他当做有B个边框(含有所有边框是目标的置信度和所有边框区域在不同的类别上面的概率),在前面的基础上我们能得道个目标窗口,再按照IoU阈值排出很少有可能性的目标窗口,最后一步是NMS删除冗余窗口即。输出结果不仅仅有各种类别的置信度,还有预测框的位置坐标。该方法一个网格只预测两个框,因此无法对小目标和靠得很近的物体进行有效的检测。
SSD算法[5]把YOLOv1算法没有很好的检测性能这个方面改良升级了,检测速度不降低的同时还在增强了检测算法的性能。该算法对先验框的尺寸进行了固定,每个特征中有固定个数的先验框以进行检测,同时,该算法考虑到低层特 征中小目标特征较为明显,使用了多个尺度的特征来进行检测,以解决YOLOv1算法 中的小目标检测较差的问题。
YOLOv2(Redmon J et al. )为YOLOv1算法的一个多个问题补丁加强的版本,该方法设计了一个新的特征提取网络来提取图像的特征,并使用聚类算法来确定 先验框的尺寸,同时用于检测的特征尺寸为13×13,对小目标检测具有更好的性能。 此外,在训练时使用多个尺度的图像对网络进行训练,使网络更能适应多个尺度的目标。
YOLOv3(Redmon J et al. )算法是YOLOv2算法很多方面的改良加强版。在该算法中设计了一个特征提取能力更强的Darknet-53网络,并对聚类算法进行 了改进以获取更加精确的先验框尺寸。此外,引入了特征金字塔结构实现了多尺度检测,使模型的检测性能显著提升,同时检测速度未降低。和它的性能差不多的时候,和SSD比较起来, 整整快了三倍。
目标检测到现在为止依旧为计算机视觉领域比较积极的学术方向,单阶段检测算法与两阶段检测算法均取得了很多喜人的成果,然而和以上的其它算法比较来说,YOLOv3算法在目标检测领域的性能更加优越,达到了速度和准确率的平衡,从运算速度上看,能达到接近实时的表现,从检测效果上看,有着较高的准确率。

1.2.3水下目标检测算法

水下目标检测是通过对水下光学信息进行分析,检测到水下图像或者视频中感兴趣的目标。近年来,各国研究人员对水下目标检测已经进行了大量的研究。
国外对水下目标检测方法的研究开展较早,并提出了一些代表性的方法。文献(WhiteDJetal.2006)针对同一种类的但品种不同的鱼进行了研究,使用机器学习算法实现了不同品种的鱼的分类。文献(BazeilleSetal.2007)对水下颜色的变化模型进行了分析,并采用颜色特征进行水下目标检测,但对图像序列的一致性没有考虑。文献(AlsmadiMKetal.2010)对BP分类器进行了改进,使用Memetic算法对其进行优化,对提取的特征进行分类,达到了84%的准确率。文献(ChristianBetal.2010)提出了一种水下目标分割方法,该方法基于主动轮廓,在目标的颜色跟背景不接近的情况下取得了比较满意的结果,但当两者接近时,检测结果会变得比较差。文献(Marlindiaetal.2011)利用Randon变换检测水下目标并对目标几何形状进行重构,因为目标几何形状由直线连接形成,在检测得到直线后,采用直线方程以计算边的角度和数目,进而重构得到目标几何形状。文献(BeijbomOetal.2012)提出在多尺度上采用颜色特征跟纹理特征检测水下珊瑚目标,实验结果表明,该方法对跨越年份和位置的水下珊瑚的覆盖率进行了准确的估计,为可靠的水下珊瑚礁图像的注释打下了坚实的基础。文献(ShihavuddinasASMetal.2012)提出利用视觉显著性对水下视频进行检测,将单帧图像跟邻帧图像的均值做差,然后利用显著性算法对目标进行检测,速度上获得了较大突破,精度上依旧达不到预期。文献(KimDetal.2014)提出一种水下目标的检测方法,该方法的对象选择基于多模板、图像分割基于颜色,并通过实验验证了该方法的性能。文献(HsiaoYHetal.2014)通过对水下图像的底层特征进行提取,并采用稀疏表达方法来设计分类器,以对真实的水下非限制的环境中的鱼类目标进行检测识别,准确率达到81.8%,但是实时性比较差。文献(CutterRGetal.2015)采用Haar-like特征与多个级联分类器以检测海底非限制环境中的岩石鱼类目标,准确率达到89%,但在光照条件比较差、背景比较复杂、分辨率比较低、噪声比较大、非正常姿态的非限制环境中的检测结果比较差,误检率比较高。文献(ChuangMetal.2016)采用相位傅里叶变换方法对鱼的纹理特征进行提取,并通过实验验证了该方法对纹理特征提取的优异性,但只对其感兴趣的目标的轮廓相对敏感。
中国关于水下目标检测反面仅仅对很少的物种进行了调查,没有形成一个完整体系。冯占国等(2007)利用不变性特征对水下目标进行检测,该方法生成了基于区域矩的仿射变换不变量,用来克服水下的不确定因素为目标检测带来的影响。张铭钧等(2009)使用灰度-梯度恒等矩完成于水下目标的测试,这个方式采用应用梯度特征来填补灰度特征空间信息,对研究结果的准确性有重要影响。但在深水区域目标的灰度信息不够显著,检测的准确率也比较低。李涛等(2010)对模糊熵的概念提出了新的表达,并改进了可自动选取阀值的PSO方法(朱炜等2007),以实现对水下图像的分割。张志强等(2011)对淡水鱼的分类问题进行了研究。首先使用图像处理技术处理图像,然后使用淡水鱼图像的颜色分量和长短轴比值等特征来表示淡水鱼图像,并利用这些特征实现了4种淡水鱼的识别。万鹏等(2012)得出了一种以神经递质调节机制的认识鱼类的方式。首先对鱼图像进行分析,将鱼体图像进行切分,然后采用切分后鱼体的平均宽度和鱼体的长度的比值来表示鱼体特征,最后使用反向传播神经网络对两种鱼类进行了分类,分类准确率为92.5%。董欣(2013)利用注意机制以解决水下图像视觉模糊与目标颜色失真导致检测困难,但该方法只考虑了水下图像的颜色特征的恢复和增强,对颜色特征变化不明显的方向与亮度特征的变化情况没有考虑,通用性较差。马伟英(2014)结合偏振信息和Itti模型(IttiLetal.1998)以实现对水下目标的检测。实验结果证明了该方法在一定程度上可以克服水下复杂环境对于目标检测的不利影响,有效提升了水下目标的检测精度。吴一全等(2014)寻找到了在最小二乘法为基础的认识鱼类的方式。并使用Krawtchouk矩、灰度共生矩阵以及蜂群算法对该识别算法进行优化,实现了5种鱼类的识别。郭传鑫等(2015)对显著图与GrabCut算法进行融合,以实现对水下图像的分割。但是该方法的运行速度比较慢,无法达到实时性。吴健辉等(2016)采用鱼体背部弯曲潜能算法,对鱼鲫(Carassiusauratus)、草鱼(Ctenopharyn godonidellus)、团头鲂、鲤四种淡水鱼进行了识别研究,基本上能准确实现四种鱼体的分类识别。乔曦(2017)提出一种分割评估水下图像的方法,该方法基于主动轮廓且自动定位,实验结果表明,该方法优于文献(Otsuetal.1979)提出的方法和文献(Chanetal.2001)提出的主动轮廓方法。同时该方法可以对水下目标快速进行自动定位,并精确分割水下目标。然而,还是不能实现好速度的准时。基于计算机视觉的水下目标检测的研究已经取得了重大进展,但是依然存在各种各样的问题。这些方法都是传统的基于人类经验的检测方法,会导致重要特征缺失,分类准确率低。此外,由于水下环境的复杂性,这些方法只能够应用在特定环境,无法适用不同场景,同时上述方法的检测速度和准确率也需要进一步的提升。

1.3.2技术路线

在这里插入图片描述

图1-1技术路线图

三、 相关知识

2.1YOLOv5模型

YOLO(you only look once)为一个很有研究价值的one-stage方法。顾名思义,这种识别方法只需要扫描一次,就可以实时输出待测图中物体的位置以及类别。将检测问题转换为回归问题。通过一个CNN网络就可以完成特征提取,然后转换成预测的中心位置(x,y)、高(h)、宽(w)以及类别,从而完成对视频以及图像的实时检测。
YOLO是采用一个CNN的模型来实现目标检测的,具体做法是:首先将输入的图片切割成的网络,共有S2个grid。每个grid只能识别出一个物体,如果这个物体只能在grid内,那就与滑动窗口法无异了。但YOLO则是只需要检测物体中心点是否落在此grid内。继而,所有的grid均要计算得出B个bounding boxs,存在五个不定量,他们是待测物体中心的坐标(x,y)和bounding boxs的高(h)与宽(w),还有此次预测的置信度(confidence score)。置信度分为两部分,一部分是bounding boxes内有特征对象的概率大小记为,另一部分是bounding boxes的准确度,准确度一般由预测框和实际框的IOU(intersection over union,交并比)来表示,一般记为。置信度即为准确度与的乘积。只剩下了分类的方面没有明确了,于所有的grid来说,它都会将C个类别的预测过程得到的概率给出来,它说明的是从这个小室负责预测的bounding boxes目标可以归纳在每一个概率数据里面。将前文所有的结论和数据全部结合起来。实现了只需要扫描一次,就可以实时输出待测图中物体的位置以及类别的目的。
YLOLv5则采用了更轻量级的网络结构以及内置的超参优化策略实现了整体性能更为强大的目标检测算法。它把YOLOv4搭载的Darknet变换为pytorch。实现了140 FPS 的快速检测。出于邻域的正样本anchor匹配方式的想法,把正样本的数目提高了。而且YOLOv5能够作用于数据加载器让所有的批训练数据都被运输,还应用mosaic加强对数据组的练习。继而让模型训练里存在问题最大的“小目标识别问题”,解决了,让它的小物体检测能力提升。YOLOv5的网络结构如图2-1所示。

在这里插入图片描述

图2-1
从图片能够得到YOLOv5的网络结构可以分成输入端、Backbone、Neck、Prediction4个。

四、2.1.1YOLO网络架构

(1)Mosaic数据增强

YOLOv5使用和前一版v4一模一样的Mosaic方法来提高数据。实现方式是:先随机读取4张图片,分别对所读取图片进行随机缩放、裁剪、翻转、色域变化等操作后,再随机分布进行拼接从而实现图片的组合和边界框的组合。如果数据集不会被改变,存在特别多的数据集被检测,还让模型学习变得不再简单,特别是里面的不系统缩放让目标变得更复杂了,给还可以提高网络的鲁棒性。这样还可以达到减少GPU的目标,一般的扩充数据组同样能进行这个操作,然而事实却是每个每台计算机仅存一个GPU,所以MOSAIC的学习过程里,能够一起对四张图片的数据计量,让Mini batch要少的数据,只一个GPU就够用了,而且最后结果不差。
自适应锚框重计算
YOLO中对于包括数据在内的全部的预训练数据集,均包含规定了相应长宽的锚框。在网络训练中,网络在初始锚架的基础上输出预测帧,与实际帧的ground truth进行比较,计算两者的差值,然后反向更新网络参数。YOLOv3网络模型采用K-means聚类方法,对训练样本已标注过的边界框的尺寸进行聚类,确定最合适的先验框的尺寸,以提升预测边界框和真实目标的重合率。
所以在使用时我们不能忽视初始锚框产生的效应,就像YOLO5于coco数据库里最开始应用的的锚框参考为下图2-2所示。在,YOLOv3、YOLO4里,对其中每一组结果进行应用的时候,我们一般会使用特别的软件来求出初始锚框的数值。然而YOLOv5里面把这个算法加入到代码中,在各次应用时,搜寻所有计算机数据组里面效果最好的,能被应用的最佳锚框值。
在这里插入图片描述

图2-1

(2)自适应图片缩放

如今现存的目标检测算法里,一般是把尺寸有差别的图片剪裁作用到同样的尺寸,然后再将一样尺寸的图片放到一个共用的检测网络里。YOLO算法中一般都是416×416,608×608等等规格。但由于实际情况中,原始图片的长宽比不同就会导致填充黑边的比较多,就会出现信息冗余,降低推理的速度。而YOLOv5则是依赖datasets.py的letterbox函数把最初需要处理的照片智能化地放缩来达到减少黑点的目的,让数据应用的负担减轻,而且还提高的最后的处理速度。

(3)Focus

从输入端拿到的原始特征图一般都比较大,直接进行卷积计算量会非常大。而YOLOv5的Focus主要是先对特征图进行间隔slice(切分),然后再进行组合,这样后续操作的特征图的大小就会小很多。便于后续处理的加速。
可以把它解释为yolov2内存在ReOrg(多尺度) + Conv操作,还能说成亚像素卷积的非正方向的机制,用通俗点的话说也为将结果划成四块,所有的结果都能看做放大一倍收集来的,再使用channel(通道)把它们结合起来,结尾使用卷积操作。让数据的流失范围降到最低的同时收集样本应该说是它具备的最大优势。我们在这里应用的最初权重文件YOLOv5s则把最初的608×608×3大小的可视文件加在Focus结构,经过切片工作就制得304×304×12的图像,w和h就由608减小成304,让之后的工作变得事半功倍。

Logo

更多推荐