基于改进型YOLOv4的病死金鲳鱼识别方法
2022-01-06俞国燕罗樱桐梁贻察侯明鑫
俞国燕,罗樱桐,王 林,梁贻察,侯明鑫
(1 广东海洋大学机械与动力工程学院,广东 湛江 524088;2 广东省海洋装备及制造工程技术研究中心,广东 湛江 524088 3 南方海洋科学与工程广东省实验室,广东 湛江 524013)
浅滩养殖是渔业养殖中重要分支。受温度、水质和养殖密度等因素影响,金鲳鱼浅滩养殖存在一定程度的病死率。为更好地分析病死金鲳鱼因素,实现高质量养殖已成为新的研究热点。随着视觉检测技术逐步成熟,简便的相机模块能够实现病死鱼的实时监测,从而大大降低劳动力成本。
目前国内外关于病死金鲳鱼研究较少,但是机器视觉在水产养殖领域已经有了一定的进展。在水产养殖中,设计多模块网络能够有效实现养殖鱼的自动计数,其中特征提取模块负责增强特征的描述,注意力模块识别图像中关键信息以及密度图模块将统计鱼群的分布并在以上两个模块下实现自动计数。该方法在满足精度要求同时实现了鲁棒性目标检测[1]。
近几年,深度学习逐渐兴起,因其精确检测效果与高鲁棒性被广泛利用在视觉识别场景中。俞伟冲等[2]为实现准确识别水下海胆、海参和扇贝3种珍品,使用MobileNet-SSD(MobileNet-Single Shot MultiBox Detector)小模型网络对目标进行快速检测。但是在密集目标识别中存在明显的漏检现象。王珂力等[3]提出改进的SSD(Single Shot MultiBox Detector)网络,在一定程度上提高了小目标水产动物的识别准确度,但是该网络在检测重叠目标中准确度较低。
在近几年目标检测算法中,基于改进型YOLO算法[4-6]被广泛应用行人检测[7]、车辆检测[8-9]以及水果检测[10-12]等方面上。赵德安等[13]在水下河蟹识别中,分析水下光线衰减大、视野模糊等问题,提出了数据增强Retinex算法,并结合YOLOv3模型对河蟹识别与定位;类似的还有在水产养殖生物检测中YOLO融合算法的研究[14-19],这些算法都在某特定场景中提升了目标检测性能与鲁棒性。但是受日照光线的影响,离线校准的视觉传感器难以稳定获取颜色纹理信息;同时在风浪冲击所产生的水雾也会导致图像退化,低对比度和细节丢失的浅滩复杂环境下[20],上述方法在浅滩养殖场景检测死鱼中均不适用。
在复杂浅滩养殖环境下,为提高病死金鲳鱼定位检测精度与特征细化能力,本研究提出一种基于YOLOv4[21]的改进算法。其中YOLOv4-v2为基于损失函数与多尺度特征层模块的创新,通过与YOLOv4算法对比评估该算法的可靠性以及在复杂浅滩养殖环境下的鲁棒性能;YOLOv4-v1模块是基于YOLOv4-v2算法基础上加入Super模块,对比YOLOv4-v2模型凸显Super结构在本文场景下的特征细化与特征增强优越性。在评估方案上选择平均精度、精确率、召回率等指标对3种模型在第3节试验中对比分析与探讨。
1 图像数据与开发环境
1.1 试验环境
YOLOv4-v1目标识别算法在配置为64核数Intel W-2145 CPU 3.7GHZ与显卡型号为GeForce RTX 2070的操作系统Windows10上,通过Anaconda环境管理器安装相关工具包,在Pycharm编译器实现Python代码编辑的同时,在Pytorch架构上实现算法的训练与测试。
1.2 图像数据采集
识别对象主要为病死金鲳鱼(学名卵形鲳鯵),数据集采集地点为广东省湛江市东海岛,图像采集使用尼康(Nikon)D7500单反相机多角度且远近尺度拍摄所得。在浅滩养殖中,由于潮起潮落使得一部分病死鱼分布在沙滩上而另一部分漂浮在水面,试验中通过上述光感相机搜集到的1 400张病死鱼图像作为本研究的数据集。为了增强数据集的多样性以及模型在养殖场景中分类性能,设置检测类别分别为病死态与存活态金鲳鱼两类。本研究主要分析死鱼检测结果。并统一为三通道416×416规格图像。同时,在1 400幅数据集样本中随机筛选1 200(90%)幅图像作为训练集数据,其余200(10%)幅作为训练验证集(trianval)。利用for与if函数,对重复出现在训练集与trianval中的图像标记写入到trianval与测试集中,否则写入到trianval与验证集。
1.3 标注工具与方法
本研究标签制作采用LabelImg软件[22],通过人工交互方式对图像中目标进行标记,而标注的目的是生成网络学习的目标样本(图1)。标注的方法是在labelImg软件中,设定好数据集样本与目标样本文件目录,在读取每幅图像中对病死态与存活态金鲳鱼以矩形框的形式实现目标坐标的定位与边界框的绘制,并给定不同对象唯一dead_fish或fish标签。标注后目标信息保存为与图像同名的XML文件,其内容包含当前图像各目标的标签信息以及绘制框左上角与右下角坐标信息等。
图1 浅滩环境下病死金鲳鱼图像示例Fig.1 Example of an image of a dead golden pomfret in a shallow sea environment
2 方法
2.1 数据处理
为了保证网络在训练样本中能够收敛到全局最优点或者在该平衡点附近来回震荡。图像在输入网络前通过以下3种算法对数据进行预处理:
(1)Mosaic数据增强函数。在浅滩环境会受到诸如海浪遮挡等对传回图像的噪声干扰,在图像中加入10%模糊度的马赛克信息,用以降低网络对离线环境特征信息的依赖,从而提高模型在实时识别中的准确度与泛化能力。
(2)余弦退火算法。在训练初期快速跳出局部最优点以逼近全局最优,而后逐渐降低学习率。该算法既能防止模型过拟合,同时加快了网络的收敛效率。
(3)标签平滑算法。该算法将网络评估的置信度结果以一定的阈值偏离0与1。在分类任务上,Loss在迭代中不断变小,分类标签与真实标签在One-Hot维度的绝对值误差将不断趋近于0,在极端情况下会造成模型的过拟合,因此引入适当的平滑参数值可提升模型的鲁棒性与泛化能力。根据相关文献的查找[23-26]与浅滩场景下的多次试验,本研究平滑参数取0.005时模型具有最优预测性能。
2.2 基于YOLOv4改进算法分析
2.2.1 Tanh-v1激活函数
在Super结构中,激活函数设计对网络的性能至关重要。Tanh函数虽然具有良好的收敛性能,但是随着网络不断加深,模型可能会出现梯度消失的情况;在不影响收敛速率下,本研究采用基于Tanh改进的Tanh-v1激活函数[27],为防止梯度消失,对基于分层残差修正的权重矩阵正则化,在低层特征与高层特征通过非线性形式融合,该操作能够更好地表达目标各边界,轮廓特征。
(1)
2.2.2 损失函数的定义
本研究YOLOv4-v1网络采用二元交叉熵(Binary Cross Entropy,BCE)损失函数[28]:
(2)
本研究中的总损失函数Losstotal分割为以下3种损失函数进行说明[29-30]。
目标框定位评价采用的损失函数:
(3)
(4)
目标框置信度评价采用损失函数:
(5)
dead_fish与fish的标签分类评价采用损失函数:
(6)
式中:m′ —最大置信度先验框;lk(m′)—通过Sigmoid选取第k个最大置信度先验框;K—选取的先验框个数。l′k(m′)函数表示对第k个最大置信度先验框进行标签平滑化。具体Sigmoid函数:
(7)
其中标签平滑函数:
(8)
式中:n—分类数2(因分dead_fish和fish两类)。ls—平滑系数,m′k—第k个目标的最大置信度先验框。
最终由式(3)、式(4)、式(5)得YOLOv4-v1总的损失函数:
Ltotal=i·Losscls+j·Lossconf+k·Lossloc
(9)
式中:i、j、k分别表示对应3个置信度评价的特征系数,这里3个常数均取1。
2.2.3 YOLOv4-v1网络设计结构图
YOLOv4-v1网络总结构模型见图2,其中Conv为卷积模块,ResBlockBoby0~4为残差卷积块。设计主要以3×3的卷积核进行提取,通过该小规格的卷积核一方面可以大大减少训练时的网络参数量,降低模型的复杂度;另一方面能够从原始图像中抓取目标特征信息。
图2 YOLOv4-v1网络结构图Fig.2 YOLOv4-v1 Network Structure Diagram
在CSPDarkNet53网络中并行输出4层特征层的同时,对104×104×128特征层输入到Super编码结构中,采用3×3的下采样,防止病死鱼边缘信息的丢失,生成的特征图通过Tanh-v1函数归一化缩放为6×6×1024。该步骤分离出了4种程度不同的特征集成图,一方面为解码网络中特征信息拼接用以提取出更多病死鱼轮廓与纹理信息,从而解决日照变化中光源对目标检测干扰做准备;另一方面在主方向特征少的ResBlockBody1层输出中,引入了Super网络结构(图3),其中Conv0~3为3×3卷积模块作特征提取,Conv4为全连接卷积层,UpSample 0~3为上采样层,Connection 0~3作卷积与上采样层的特征整合。通过串联多组卷积与池化处理,对该特征图在扩张维度下深度提取信息,用以解决同一类别重叠对象的分离问题。在Super解码中使用扩边处理(padding=1,即图像四周填充一圈0),利用特征拼接算法在标准归一化和RGB通道分割下实现灰度化处理,从解码结构上采样层与编码结构卷积层特征信息的拼接,并通过整合后的特征图进行图像重建。
图3 Super网络结构图Fig.3 Super Network Structure Diagram
因此重建后特征图会在很大程度上过滤因水雾造成的模糊与函数生成的模糊干扰的影响,以及解决图像退化后对比度低,病死鱼部分纹理不清晰与关键细节丢失等问题,使得网络在自适应学习中得到更好的检测效果。最后经由SPP(Spatial Pyramid Pooling)网络卷积池化处理,输出13×13×21,26×26×21,52×52×21,104×104×21四种不同规格特征图,每个特征图前两个数值代表特征层的高与宽像素大小,第3个数值对应每一个特征小网格存在的3个可选框,每个可选框又包含7个参数类型,分别是可选框的高与宽,左上角位置坐标,是否存在检测目标以及该目标的种类总共21个参数信息。
2.2.4 YOLOv4-v1网络流程图
为了更清晰表达本文网络模型在创新Super结构上的特征处理过程,具体的流程图如图4所示。其中当图像经过图像增强输入到CSPDarkNet53结构块中,特征的提取以递归的形式,在Resblockbody1到Resblockbody4的过程通过残差内嵌的形式,将特征信息依次压缩与细化,即将目标的主成分信息尽可能地保留。在PaNet模块中,一方面,输入104×104×128特征块以不同数目的卷积与上采样多模态处理,通过规范化通道数后依次输出四层多尺度特征图。另一方面,输入104×104×21特征块经由Super中编码解码处理,在第一部分对输入权重矩阵与3×3过滤器卷积运算,输出的64通道特征参数信息以Tanh-v1的形式进行激活,并在对应通道上实现2×2的最大池化,依次类推,最后在编码器中得到的13×13×1024的特征模块。在解码器中利用下采样与拼接算法,将将对应尺度的特征图进行拼接,最终输出为104×104×21特征信息。
图4 图像处理过程和Super网络流程图Fig 4 Image processing process and Super network flow chart
2.2.5 YOLOv4-v2网络模型
YOLOv4-v2模型区别于YOLOv4模型,使用Tanh-v1代替Relu激活,并且新增Resblockbody1特征层信息并行到PaNet模块中,该层中包含的边界信息因为池化程度最小,因此在特征整合后模型对于目标的识别有更多的边界特征信息可提供参照。此外,该模型与YOLOv4-v1的唯一区别在于没有引入Super结构模块。
3 试验与分析
3.1 试验方案设计
3.2 评价函数
3种算法的实现均基于死鱼数据集,在YOLOv4官网预训练权重参数模型上训练10 000次均耗时3 h,从图5可知在采用余弦退火学习率下,训练损失值在8 500次左右已基本稳定。每10次训练输出一次的验证损失在830次左右已基本稳定。为保证模型在最优值附近震荡,设置每执行完236次(1个Epoch)则学习率变为原来的92%,从而使训练能够进一步收敛。
图5 YOLOv4-v1训练与验证损失Fig.5 Training and validation loss of YOLOv4-v1
(10)
(11)
(12)
(13)
(14)
式中:tp(True Precsion)—正确识别死鱼的目标数;fp(False Precsion)—误测死鱼数;fn(False Negative)—正确识别活鱼数;C为标记类别;m—某类别检测目标数量。p(Precsion)—某类别精确率;aj(Averge Precsion)—第j类目标的检测平均精确率。l—检测到的目标个数;pi—第i个目标检测精确率;ri—第i个目标检测召回率。
在死鱼验证集中,3种模型对死鱼检测结果见表1。由表1中tp和fp值比较可得本研究中YOLOv4-v1算法在同等数量目标框中所能识别正确的目标最多以及误判数目最少,在浅滩复杂环境中对死鱼能够达到有效识别要求。
表1 死鱼检测正确数与误检数Tab.1 Dead fish detection correct number and false detection number
3.3 试验图像对比分析
为了验证Super结构和ResBlockBody1网络块的复用对提高死鱼识别检测精度的有效性,试验分别采用YOLOv4模型,引用ResBlockBody1网络块的YOLOv4-v2模型以及同时引用Super和ResBlockBody1网络结构的YOLOv4-v1模型进行对比试验分析,对死鱼类别进行迭代分析。在复杂浅滩环境中金鲳鱼检测可视化结果如图6所示,其中红色方框为病死态金鲳鱼类别的检测精度结果,而蓝色方框为存活态金鲳鱼类别的检测精度结果。
图6 金鲳鱼检测可视化结果Fig.6 Visualized results of golden pomfret detection
3.4 模型检测结果对比
根据训练验证集中最优模型,在YOLOv4,YOLOv4-v1,YOLOv4-v2模型中分别选取训练损失和验证损失分别为3.34、3.65;1.95、3.40;1.92、3.65作为检测模型权重文件。在未参与训练的验证集中选取的117幅416×416图像的模型检测对比结果(表2)。在本研究中选择F1值,召回率以及漏检率等评价指标衡量模型的识别性能。YOLOv4-v1模型在mP值上相较于YOLOv4模型提升了3.36%,在召回率上提升了2.54%,F1值提升了0.56个百分点,同时检测速度也基本与之持平,通过该对比试验验证表明,在复杂的浅滩环境中,YOLOV4-v1网络能够更好地提取细化特征,增强模型的鲁棒性,在实际检测病死态金鲳鱼时能够达到实时与精准检测的效果;相比于YOLOv4-v2模型,Super模块的引入大大降低了漏检率,mP值提升了约1.00%,F1值上提升了0.46%的分数;同时在检验精度以及抗干扰能力上都有相应的提升;从另一角度分析,各指标的提升也证明了该模块在检测目标与提取目标的边缘特征上更具敏感性。通过YOLOv4-v2与YOLOv4的对比试验表明,改进的损失函数与多尺度特征图在一定程度上提升了检测精度,但是却牺牲了检测目标的稳定性,而Super模块能够很好地解决这个问题。综上所述,YOLOv4-v1模型在浅滩试验场景中具有实用性。
表2 各网络的损失与平均精度值Tab.2 The loss of each network and
3.5 评价指标结果对比
在病死鱼类别下,分别在YOLOv4,YOLOv4-v1,YOLOv4-v2模型下训练出来的精确率-召回率(P-R)曲线(图7)。从图7a,图7b,图7c对比可知YOLOv4-v1训练可得模型P-R曲线图最佳,即其所检测的识别框与标签绘制框重叠度最高。
图7 各模型P-R曲线图Fig.7 P-R Curve Diagram of Each Model
3.6 讨论分析
对比口罩佩戴的检测[35],本研究检测的难度在于风浪与雨雾造成的图像退化与低对比度,因此在边界与轮廓上定义相对模糊;对比小龙虾的检测[36],本研究检测难度在于金鲳鱼的颜色与轮廓与背景相融,因此增加了识别的准确性;同时,对比农业上的视觉检测[37-39],在浅滩环境下需要的实时性更高,金鲳鱼的位置会随浪潮的流动而发生变化,同时还会产生噪声影响。针对上述种种难题,YOLOv4-v1算法能够通过Super结构与多尺度方法优化图像特征从而获得高精度检测与高鲁棒性。最终取得98.31%的平均检测精度。对比更前沿的YOLOv5算法[40-41],本研究提出的YOLOv4-v1模型在检测速度与漏检率上有待优化。
4 结论
□