袁红春,史经伟
(上海海洋大学信息学院,上海 201306)
金枪鱼远洋渔业中,渔获量统计普遍采用人工计数[1-2],不仅人工成本高、效率低[3-4],还会出现统计偏差等现象。使用自动计数方法可以有效提高效率,但目前针对金枪鱼延绳钓渔业的渔获量自动统计研究还较少。传统方法使用计数传感器等硬件设备,船员等移动物体经常会自动计入,计数误差较大,而错误的渔获量统计会直接影响到渔业资源评估[5]与金枪鱼渔情预报的准确性[6],且不能识别鱼的种类、硬件成本昂贵[7]。随着计算机视觉技术的发展,基于深度学习的目标检测算法成为主流解决方案[8-11],可以实现无接触计数,提高计数效率,解放人力。
Albuquerque等[12]提出了一种基于Blob跟踪和高斯混合的鱼类计数方法,设计了一条计数线,当鱼停留时间满足一定时长后进行计数,并使用卡尔曼滤波跟踪来避免重复计数。这种方法存在如下缺点:首先,当鱼停留在计数线上的时间超过读取时间间隔时,卡尔曼滤波器不能实现去重;其次,当鱼被遮挡并重新跟踪时,容易产生漏计问题。Yu等[13]提出了一种基于特征提取模块和注意力机制的深度学习网络模型来实现养殖鱼类的计数,该模型由特征提取模块、注意力模块和密度图模块组成。该模型对静态图片中的鱼计数的准确率为97%,但忽略实际生产过程中由于鱼的自由游动导致的重复计数问题。此外,该模型比较复杂,无法识别鱼类和提供不同鱼类数量的统计,对动态视频计数也缺乏支持。吴必朗等[14]提出了改进的Deepsort追踪算法和虚拟计数线的方式对鱼道内通过的鱼进行计数,计数准确率仅为71%,这是由于Deepsort跟踪算法对于遮挡问题处理能力较差[15],且对于外观差异较大的识别对象比较敏感,而同种鱼类的外形差异较小,无法稳定跟踪目标[16],其次,如果鱼类在通过计数线时突然消失,将会导致漏计。综上可知,已有研究在出现遮挡时,模型提取目标特征能力较差,易出现目标遗失问题[17],导致计数偏差。虽然可以通过引入注意力机制提高检测模型的网络性能,但是现有注意力机制还不足以解决上述问题[18],同时计数线与跟踪算法也无法弥补检测算法遗失目标时产生的计数偏差。陈子文等[19]在数据预处理阶段提出自适应图片裁切算法,使用YOLOv5算法对养殖虾进行检测与计数,扩展了数据集,减少了数据特征的丢失,但对拍摄设备要求较高,对低分辨率的图片与大体型目标不友好,易将图片变得模糊丢失细节,也会将大型目标裁剪为多份,使网络学习时产生混淆。
综上可知,目前普遍使用的计数算法多为Deepsort跟踪算法,检测算法YOLOv5、YOLOv5s、YOLOv7等与Deepsort的结合计数方法,以及虚拟计数线,其中YOLO系列与Deepsort的结合方法在不同计数领域被广泛使用[2,14,18-21]。
针对上述方法的局限性与数据集的特点,提出了一种改进的YOLOv7-tiny的轻量化检测模型DP-YOLO,通过可变形卷积DCNv2提升骨干网络对金枪鱼不规则形体的特征提取能力,通过PConv降低模型的计算量,提高检测速度。为解决已有计数线存在的问题,设计了一条具有矫正和缓冲功能的动态双向计数线,称为“动态检测门”。以上改进提升YOLOv7-tiny 在真实金枪鱼延绳钓捕捞中检测的平均精度和计数性能指标。
延绳钓常用来捕获海洋中的中大型动物[22],每隔一段时间需要人工将捕获的鱼从海中经过甲板上拖入货舱[23]。本研究数据集与深圳市联成远洋渔业有限公司合作采集,于2021年9月在其远洋延绳钓渔船上使用具有夜视摄像功能的720 px高清摄像头固定于渔船上方俯视拍摄数据,采集了40段不同时间段和不同光照下的捕捞数据,视频的帧率为30FPS,图片与视频大小皆为1 280 px×720 px,如图1所示。
图1 数据集示例Fig.1 Data set example
在真实捕捞作业中金枪鱼与船员皆处于运动状态,对金枪鱼的检测和计数有较高的准确性和实时性要求,YOLO系列具有计算成本小、推理速度快且保证性能的优点[24-25]。其中YOLOv7同体量下比其他YOLO系列模型精度更高,能学习更多特征[26],比YOLOv5检测速度快1.2倍[27]。YOLOv7精度较高,但参数量较大,实际捕捞过程中,为每艘渔船搭载高性能显卡的设备成本较高,无法使用低成本边缘计算机实现现场部署,在现有条件下无法运行YOLOv7模型,无法满足计数的实时性,而轻量级YOLOv7-tiny模型的计算量仅为YOLOv7的1/7[17],适合在边缘设备上运行[28]。
DP-YOLO基于YOLOv7-tiny改进,其结构如图2所示,分为骨干网络和头部网络两部分。数据输入时,模型会对数据进行Mosaic数据增强[29]、自适应调整输入图片为3通道大小为640 px×640 px的特征图、自适应锚框等数据预处理工作;骨干网络负责金枪鱼的特征提取;头部网络通过骨干网络中输出的3层不同大小的特征图,经过特征融合输出3个检测层,分别检测不同大小的目标;最后输出包括金枪鱼类别的置信度和锚框位置。
图2 DP-YOLO结构图Fig.2 DP-YOLO structure diagram
为解决金枪鱼鱼体不规则、易变化,外形特征难以提取导致后续的计数误差,在骨干网络中,通过将DCNv2嵌入在高效层聚合网络ELAN中实现D2模块,提升了对金枪鱼外形特征的提取能力;为缓解加入D2模块导致模型检测速度下降问题,使用PConv替换骨干网络中的常规卷积有效减少了模型的计算量,提升了模型的检测速度,使得该模型可以在边缘设备上运行。综上可知,DP-YOLO模型通过加强不规则形状的特征提取的能力,提高了对易变形鱼体的学习能力,通过减少参数量和内存访问次数,提高检测速度,实时性和准确性的改善为检测门算法的计数效果提供了先决条件。
YOLOv7-tiny使用Mosica数据增强技术增加特征图的特征丰度,提升骨干网络的特征提取能力,但在金枪鱼捕捞环境中,金枪鱼外形易变,昼夜光照条件不同,模型中的预处理技术无法有效提取该类问题下金枪鱼的外形特征。为解决上述问题,使用可变形卷积DCNv2,可以有效提取金枪鱼外形的特征[30-31]。
图3显示了DCNv2与常规卷积的工作原理,假设卷积核大小为3 px×3 px,以金枪鱼鱼鳍为例,绿色阴影部分为卷积的特征提取像素,常规卷积只能提取矩形范围内的像素特征,需多次卷积才能提取鱼鳍的外形特征,但DCNv2使得卷积核可以根据输入特征图的内容进行自适应空间变形,通过学习位置偏移量实时调整采样位置,从而更好适应形变物体。
图3 常规卷积(a)和DCNv2(b)的卷积过程Fig.3 The process of regular convolutions (a) and DCNv2(b)
使用额外的回归网络来学习每个像素位置的偏移量,使卷积中心从固定位置移动到自适应位置,更好地适应了输入数据的特征分布。因此在相同卷积次数下,相较常规卷积,有较快的特征提取能力。YOLOv7中的高效层聚合网络ELAN是一种高效的网络架构,使用残差结构将每个中间层得到的特征图都在最后一层聚合进行特征融合,能提取不同卷积得到的特征图和不同通道下的特征,同时将DCNv2嵌入ELAN网络中组成D2模块,D2模块中通过连续使用DCNv2卷积可以在不同尺度上与感受野上提取特征,并将它们融合,能够捕捉到不同层次的细节和结构信息,从而提高特征提取的准确性与鲁棒性。D2模块结构如图4所示,使用LeakyRelu激活函数替代原来的Relu函数,将所有负值权重改为非零斜率,扩大了Relu函数的范围,减少环境因素产生的金枪鱼漏检问题。
图4 D2模块Fig.4 D2 module
D2模块提升了骨干网络的特征提取能力,但增加了较多计算量与检测时的内存访问次数,使模型检测时间增加。由于金枪鱼捕捞是一个动态过程,对检测速度要求较高,为了使模型能够部署在资源受限的船载边缘设备上,使用PConv代替常规卷积,减少模型的计算量的同时提升硬件设备的每秒浮点运算次数,达到更低的检测延迟。DP-YOLO提高了特征提取能力,降低了骨干网络的计算量,同时优化硬件性能,提高了模型速度,保证金枪鱼计数的准确性与实时性,适合现场部署,降低船载硬件成本。
(1)
C=h×w×k2×c2
(2)
M=h×w×2c+k2×c2
(3)
式(1)中:显示了检测延迟L与模型计算量f、硬件每秒浮点运算次数F的关系。式(2)与式(3)中:两式分别计算卷积的计算量C和卷积过程中的内存访问次数M,其中h、w分别为输入特征图的高度和宽度。c是卷积的通道数量,k是卷积核的大小。
由式(1)知,检测速度与模型计算量与设备单位时间的浮点运算次数有关,前者导致模型计算时间的延长,后者频繁访问内存会导致硬件的处理性能下降,故较大的模型计算量和频繁的内存访问会导致延迟增加。因为PConv的通道数c为常规卷积的1/4,由式(2)知,PConv计算量仅为常规卷积的1/16,极大降低了模型的计算量;由式(3)知,PConv的内存访问次数约为常规卷积的1/4,使硬件的性能提升约4倍左右。因此PConv通过减少自身的计算量和内存访问次数,同时优化了模型与硬件性能,减少了一定延迟,提高了模型的检测速度。
由于金枪鱼捕捞视频是连续的,但目标检测模型按每帧图片单独提取检测,仅使用目标检测模型计算锚框的个数[32-33],无法判断不同帧的金枪鱼是否为同一条,却将每帧中的鱼都计算在内,导致该场景下的金枪鱼统计不具可行性,因此引入一条计数线,金枪鱼经过时进行计数。
计数线提高了计数的可行性,解决了将每帧中金枪鱼都计算在内的问题,但船员的捕鱼行为会为金枪鱼造成大面积长时间的遮挡,不论将计数线置于何处,经常在目标通过计数线的时间段被遮挡,导致无法判断是否经过计数线。受到点、直线位置关系的启发,设计了检测门算法,若金枪鱼经过检测门瞬间被遮挡,如图5所示,在第n帧在A点第一次识别到金枪鱼,在第n+δf帧再次在A’检测到目标,即第n帧与第n+δf帧是检测到目标的相邻两帧,该算法可以观察到金枪鱼在检测到的相邻两帧中是否位于检测门的两侧,如果位于两侧则说明金枪鱼经过计数线,位于同侧则说明还未经过检测门,解决了金枪鱼被遮挡造成漏计的问题。
图5 对遮挡金枪鱼计数的可行性示意图Fig.5 Schematic of the feasibility of counting blocked tuna
捕捞中有些死鱼和较小的金枪鱼因没有价值或遵守捕捞规范,会被重新投入海中,目标将会反向经过检测门,此时真实的数量是减少的,为实现渔获量的自动增减,设计了双向检测门,金枪鱼进出检测门的次数分别记作nin、nout,两者的差值矫正视为渔获物统计量可以有效检测到被重新投入海中的金枪鱼,加入矫正功能提升了计数的灵活性。
船员拖拽金枪鱼时,由于金枪鱼力量较大,常常产生剧烈反抗,可能会在检测门上反复冲撞,虽然双向检测门识别并矫正计数量,但是摄像头由于设备性能和存储大小限制,只能拍摄30 FPS的视频,如果金枪鱼一直位于检测门附近反抗,反复进出双向检测门由于视频两帧卡顿偶尔会出现误差,但长时间的捕捞作业会放大误差。为解决上述问题,得益于目标不用与检测门碰撞计数的特点,为双向检测门设计了缓冲函数,如公式(4)所示。
(4)
式中:b是由d变量表示的缓冲函数,d表示金枪鱼中点目标到检测门的距离,offset表示最小接受距离的偏置,若金枪鱼与检测门的距离的像素点过小,即使两帧之间金枪鱼位于检测门两侧也不会计数,解决了金枪鱼反抗时反复撞门造成的计数误差,也节约了算力。
由于捕捞中经常会出现下雨的夜晚,夜视成像很差,或部分金枪鱼被拖拽太快,以至模型未在检测门前检测到金枪鱼,如图6所示,金枪鱼经过检测门L1时没有被检测到,那么它将一直位于检测门的下方,这样,即使被拖进货舱也不会被计算在内。因此,在以上改进基础上设计了动态检测门,若发生上述问题,将原来的检测门平移至A点下方,形成新的检测门L2,避免发生漏计。
图6 动态检测门的原理Fig.6 Principle of Dynamic Detection Gate
考虑到数据集的特点和算法要求,将数据预处理的过程分为以下3个步骤:
(1)由于视频数据集是40个低价值密度的视频,需要对含有金枪鱼的视频片段进行截取,针对其中8个含有不同种类以及天气环境的视频按照帧数划分为图像,得到2 155幅图像,图片大小为1 280 px×720 px,剩余的32个视频将作为计数测试。
(2)由于YOLOv7-tiny的图片输入要求,通过深度学习中最常用的数据集标注软件LabelImg[34]对数据集进行标注为6类,分别为白天和夜晚不同时间段的黄鳍金枪鱼、大眼金枪鱼和旗鱼,同时将图片调整为640 px×640 px的大小。
(3)将训练集和测试集划分为总数据量的80%和20%,分别为1 724张和431张图像。
在Windows 10系统上使用PyTorch深度学习框架开展试验。计算机硬件配置包括NVIDIA GeForce RTX 3090 24GB GPU,第12代英特尔(R)酷睿(TM) i9-12900K和128GB ARM。用于训练的超参数设置如下:权值衰减系数为0.000 5,学习率为0.01,迭代次数为150,批处理大小设置为64。
本研究从模型检测精度、模型复杂度与检测速度三方面评估目标检测模型,分别使用mAP0.5、参数量、浮点运算次数(FLOPs)、计算时间、每秒传输帧数FPS评价指标。平均精度(Average Precision)是使用积分运算准确率和召回率曲线下的面积,可以综合反映模型在不同金枪鱼类别上的识别能力,其公式为:
(5)
为体现模型在所有类别上的识别能力,各类AP数值平均后得到mAP(mean Average Precision)。本研究是通过目标检测模型和动态检测门的两阶段计数算法,预测锚框与真实锚框的匹配度极大影响了后续计数的准确性,因此使用标记锚框和预测锚框交并比(IoU)大于0.5的平均精度mAP0.5作为模型精度评价指标,表示在IoU取值为0.5时,计算出的mAP。
模型参数量表示模型中需要学习的权重数量,用来衡量模型复杂度,参数量的大小是影响模型检测速度的重要原因之一,浮点运算次数FLOPs表示模型在推断过程中需要执行浮点运算的数量,用于衡量模型的计算量,FLOPs较大会延迟推理时间,不适合部署在边缘设备上,无法满足渔船的实际应用,两者作为模型复杂度的评价指标。
计算时间表示模型在推理每张图片时所用的时间,FPS表示每秒传输帧率,二者作为模型检测速度的评价指标。
本研究从计数数量、计数误差、错计误差(Error Counting Error,ECE)、重复计数(Repeat Counting,RC)和漏计数量(Missing Counting,MC)评估计数方法。计数数量表示计数方法的计数总量,计数误差表示方法计数总量与实际数量的比值,但由于漏计和重复计数互相修正会导致整体计数误差较小,不能客观反映技术方法的能力,提出错计误差评估指标ECE,其公式为:
(6)
式中:S表示实际目标数量,R与M分别表示重复计数与漏计的目标数量,使用ECE可以直观地反映计数方法的整体反映计数方法的性能,关注重复计数、漏计带来的计数误差影响。
为验证对YOLOv7-tiny改进的有效性,设计以下消融试验:各模型的训练参数和数据保持一致,逐步为YOLOv7-tiny模型加入PConv卷积、D2模块,分别训练模型作对比,如表1所示,结果表明PConv和D2模块都提升了基准模型的性能,反映了加入模块的有效性,D2模块的模型在精度提升上效果很大,但是增加了较大的计算量,计算速度明显变缓。
表1 消融试验Tab.1 Ablation experiment
PConv具有模型轻量化并提升计算速度的效果,使用该卷积替换常规卷积大幅减少模型的计算量,缓解了D2模块带来的速度劣势,提高了模型检测速度。因此,通过结合PConv和D2模块,DP-YOLO降低了3.3%的参数,减少了23.7%的FLOPs和2.1%计算时间,提高了5.3%的平均精度和2.3%的FPS。试验结果表明,DP-YOLO相比原模型具有精度高、模型复杂度低、检测速度快的优势,可以更好满足金枪鱼延绳钓渔船上的现场部署。
D2模块能够较为准确地学习到金枪鱼的外形特性,所以聚焦区域更为收敛,可以有效降低背景噪音,提升置信度,减少了误检或漏检,为直观展示该模块优势,设计以下可视化试验:保持训练数据与超参数不变,训练不同模型并对同一张图像检测,生成不同对应的可视化热图。图7为YOLOv7-tiny和两个经过改进后的YOLOv7-tiny热图,其中红色区域表示模型在识别物体时应该关注的部分。与图7(c)和图7(d)相比,图7(b)的红色部分更集中在目标的右侧,同时0.84的置信度也远远高于后两者的0.68。另外,后两者更多关注了左侧船员这一错误目标。试验表明, DP-YOLO中基于DCNv2的D2模块受外界环境因素影响较小,可以更好地聚焦于目标。
图7 不同YOLOv7-tiny模型的热图可视化Fig.7 Feature heat maps of variousYOLOv7-tiny
为反映不同检测门对计数性能的影响,设计了消融试验:使用DP-YOLO模型检测目标,依次为检测门加入矫正功能(Correction,C)、缓冲函数(Buffer Function,B)和动态功能(Dynamic,D),检测门中缓冲函数的offset设置为5。使用剩余32条视频数据试验,其中共捕获49条金枪鱼,1条金枪鱼由于死鱼被重新投入海中,实际捕获48条金枪鱼。
如表2所示,试验结果显示普通的检测门在存在遮挡和金枪鱼反抗时,易导致很大计数误差,这两种情况导致了2.5倍的计数误差。为解决上述问题,在检测门中引入矫正功能和缓冲函数。添加矫正功能大幅度提高了计数准确度,误差降低至33%,再使用缓冲函数,误差再减少15%。然而,9条金枪鱼由于被拖拽速度过快,无法在预设检测门前检测到,这导致了9条鱼的漏计,最后引入动态检测门以良好的效果解决了这个问题,计数准确率达到了97.9%。试验结果表明,本研究提出的动态检测门可以有效地解决遮挡问题,避免目标挣扎造成的重复计数问题,解决了渔船上金枪鱼的自动计数问题。
表2 检测门消融试验Tab.2 Ablation test results of detection gate
由于Deepsort算法、YOLOv5s、YOLOv7与Deepsort结合算法、计数线算法被普遍应用到各领域计数的研究中,且被证明有较好的效果,为比较所提方法与上述方法的计数效果与验证所提方法在本领域中的有效性,设计试验如下:第一阶段探究已有计数方法与所提方法在32段金枪鱼捕捞视频中的计数性能,与现有YOLOv5s结合计数线、YOLOv7-tiny结合Deepsort的先进计数方法对测试视频计数作对比。第二阶段探究计数线、Deepsort与动态检测门的计数性能,设计试验如下:保持检测模型相同,使用DP-YOLO模型分别结合计数线、Deepsort与动态检测门对测试视频计数作对比。各检测模型使用同一数据集训练,各训练参数设置相同,所有试验结果如表3所示。
表3 计数方法对比试验Tab.3 Comparative test results of counting methods
首先,分析已有计数算法的性能表现。表中①数据显示,仅使用Deepsort跟踪模型计数,对外观特征差异较小的同类金枪鱼不能做到稳定跟踪,经常对同一条鱼重复计数。表中②③数据显示,在目标检测模型中引入计数线和Deepsort解决了目标检测模型处理视频计数的可行性,但无法处理遮挡问题,造成较多的漏计数量。由①②③数据知,先进计数算法虽然降低了计数误差,但错计误差较大,表明已有计数方法不能满足金枪鱼渔业的统计要求,突出了错计误差在评估计数方法时的客观性。
其次,分析检测模型性能对计数结果产生的影响。表中②与④,③与⑤两组数据显示,检测模型的性能也会对计数效果产生较大影响,DP-YOLO模型相比YOLOv5s与YOLOv7有更好的检测性能,使用同样的计数线与Deepsort算法,但达到了更好的计数效果。
最后,为客观评估动态检测门的计数性能,表中④⑤⑥数据显示,保持检测算法不变,提出的动态检测门算法计数效果领先于计数线和Deepsort,改善了遮挡问题导致的漏计,解决了金枪鱼反抗导致的重复计数问题,错计误差降低至2.1%,分别领先计数线和Deepsort算法43.7%和10.4%。
试验结果表明,本研究所提检测模型性能较优,计数方法的计数偏差小于已有计数方法,计数更为精准,适合金枪鱼延绳钓渔业的渔获物自动统计任务。
为了解所提计数算法的分类精度与计数性能,设计以下测试模拟真实捕捞环境:使用DP-YOLO模型对剩余长达10 h的32段视频实时视频检测和计数,结果如表4所示,其中BE、YF、SF分别表示大眼金枪鱼、黄鳍金枪鱼和旗鱼,day和night分别表示金枪鱼捕捉的时间(白天或者夜晚)。计数精度达到97.9%,1条重新被扔进海里的鱼也成功区分。
表4 金枪鱼计数试验Tab.4 Experiment of counting tunas
但是,两条在夜间捕获的黄鳍金枪鱼被错误地归类为两条大眼金枪鱼,由于一条大眼金枪鱼目标较小且在暴雨的夜晚能见度很差,因此夜晚的大眼金枪鱼漏计了一条,导致夜晚的黄鳍金枪鱼缺失了两条,大眼金枪鱼多计入一条,因此,在32段视频中,金枪鱼分类准确率为95.8%。
提出了一种基于DP-YOLO模型与动态检测门算法的两阶段计数方法, D2模块拥有卷积核自适应变形与位置偏移量参数高效学习的特点,连续使用DCNv2能够达到多尺度特征融合的效果,它通过卷积核的变形获得不同的感受野,同时LeakyRelu激活函数扩大参数学习范围避免细节丢失,因此D2模块提高了骨干网络中对于金枪鱼外形特征提取的能力。由于常规卷积存在的特征冗余问题明显,卷积后输出大量相似特征的特征图,造成计算资源的浪费,PConv只对1/4通道数的特征图进行常规卷积操作,对剩余通道直接向后传递,输出特征图的大小与数量不变,避免特征图冗余的同时减少了浮点计算次数,提高了模型检测速度,使得模型能够在边缘设备运行。为解决金枪鱼目标的遮挡导致的计数误差,设计了动态检测门,计数效果领先于现有方法,可为金枪鱼延绳钓渔船的渔获量统计提供现场部署,降低人力与时间成本。但是,算法还有一些不足之处,试验数据表明在处理夜间图片时,模型的目标识别能力有所下降,容易将大眼金枪鱼和黄鳍金枪鱼混淆。由于夜视摄像头拍摄的视频在夜间模糊不清,呈绿色。因此,可以引入夜视图像增强技术提高改进的YOLOv7-tiny性能。