基于关键点检测的鱼类游动轨迹提取
2024-03-12石小涛黄志勇威力斯
石小涛,马 欣,2 ,黄志勇,,胡 晓,2 ,威力斯
(1.三峡大学 湖北省鱼类过坝技术国际科技合作基地,湖北 宜昌 443002; 2.三峡大学 水利与环境学院,湖北 宜昌 443002;3.三峡大学 计算机与信息学院,湖北 宜昌 443002)
0 引 言
对鱼道进行监测是判断鱼道过鱼效果的前提,也是后续优化鱼道设计的依据[1]。目前鱼道过鱼效果监测的主要研究方法是通过录制高帧视频,采用软件技术对视频处理后得到鱼类的游动轨迹,然后将鱼类游动轨迹与鱼道池室内水力因子的空间分布叠加,量化分析鱼类对鱼道水力特性的偏好范围,为优化鱼道的水力设计指标提供依据[2]。因此,从鱼道监测视频中提取出鱼类的游动轨迹是指导鱼道水力设计的前提。由于鱼道监测视频处理的复杂性和后处理数据的不可复用性,当前针对鱼道监测视频作后处理提取鱼类游动轨迹的软件技术往往不能兼顾轨迹提取的效率和准确度。
现有的基于视频处理,提取鱼类轨迹的方法主要有:
(1)借助标记软件人为手动连续点击鼠标标记视频中鱼的关键点实现轨迹的手动提取,如柯森繁等[3]使用Logger Pro32软件手动标记视频中鱼的尾部点,手动提取了鱼的尾部轨迹用于分析鱼的摆尾频率。
(2)使用传统计算机视觉方法识别鱼类目标并计算出鱼体形心点从而实现鱼类轨迹的自动提取,如刘星桥等[4]使用最大类间方差(Otsu)阈值分割得到二值图像,基于Canny边缘检测算法提取出了鱼体轮廓并根据图像原点几何不变矩原理计算出了鱼类的形心点,连接各视频帧中的鱼类形心点得到了鱼类轨迹。
(3)基于无关键点识别的深度学习算法识别出鱼类目标并用矩形框进行定位,跟踪矩形框的几何中心实现轨迹的提取,如Li等[5]利用深度学习目标检测模型Faster RCNN[6]检测出图像中的鱼类目标并用矩形边界框定位了鱼类目标在图像中的位置,根据边界框几何中心随时间的变化提取出了鱼类游动轨迹。使用Logger Pro软件手动提取的鱼类轨迹精度高,但需人为手动连续点击鼠标进行形心点的标定,且只能根据标记结果提取本次标记视频中的鱼类轨迹,不能复用到其他视频,导致劳动强度大、耗时长且效率低;传统计算机视觉可以通过图像处理算法自动获取鱼类轨迹,识别鱼体目标时依靠目标物体与背景之间的差异来进行识别,比如:物体的灰度、颜色、边缘、纹理等特征,但鱼类姿态变化、遮挡、光照强度等环境的干扰使得提取的特征不能复用[7],而且该方法提取轨迹的步骤多、耗时较长,无法实时获取鱼类的游动轨迹;基于无关键点识别的深度学习算法能通过卷积神经网络自动学习鱼类目标最明显的特征[8],检测精度受环境改变的影响较小,学习到的特征能够迁移到其他监测视频中进行复用,轨迹提取步骤少,只需输入鱼类视频即可端到端提取鱼类轨迹,轨迹提取的效率和准确率都有了很大程度的提升。但使用边界框几何中心作为鱼的关键点来提取轨迹,当鱼大幅度改变游动姿态如摆尾时,边界框的几何中心会偏离鱼体导致提取的轨迹与鱼类实际的游动轨迹存在一定的偏差,从而对鱼道的水力优化设计造成干扰。
鉴于此,本研究基于人脸关键点识别算法RetinaFace[9],通过改进骨干网络、特征金字塔网络、上下文建模网络、损失函数、重新编解码鱼类关键点等改进措施,构建了鱼类关键点检测的深度学习模型;用Resnet50骨干网络的预训练参数初始化模型以及为鱼类关键点添加了额外的监督训练使得鱼类关键点检测模型能快速准确地识别出鱼类的关键点;使用数据关联方法关联前后帧的鱼类关键点,根据关键点坐标随视频帧的变化提取鱼类的游动轨迹。
1 鱼类关键点检测模型
1.1 数据集制作
目前,常用的鱼类数据集是Fish4Knowledge[10]数据集和3D-Zef斑马鱼数据集[11]。这些数据集中仅有鱼类目标的位置标注,并没有鱼体关键点的标注。因此本研究在MOT Challenge的3D-Zef斑马鱼数据集中随机挑选了3 000张斑马鱼图片,使用Computer Vision Annotation Tool (CVAT)在线标注工具不仅对数据集中斑马鱼的位置进行标注还为斑马鱼的头部点和形心点添加了额外的手工标注,用最小矩形框标定出数据集里每张图片中的鱼类目标,用可区分颜色的点标记每张图片中鱼体的头部点和形心点,并设置特定的标签区分每条鱼的头部点和形心点。使用CVAT标注工具将数据集标注完成后,在导出数据集标注时,CVAT标注工具会将鱼类目标的分类、鱼类目标所在位置坐标和鱼体关键点坐标保存到XML文件中。导出数据集标注后,编写脚本解析XML文件,将XML文件中的鱼类目标的类别、关键点坐标以及位置坐标提取出来作为模型的输入。当由于鱼体相互遮挡,或者鱼类图像较为模糊无法标记其关键点时,将其关键点坐标设置为-1,并按照8∶2∶2的划分比例将鱼体关键点数据集划分为训练集、验证集和测试集。数据集共标注了6 000个鱼类目标和约12 000个鱼体关键点,数据集的标注示例如表1所示。
表1 鱼体关键点数据集标注示例
1.2 构建鱼类关键点检测模型
为了实现鱼体关键点的检测并提高关键点检测的速度与精度,本研究在RetinaFace算法的基础上,采取以下改进措施构建了鱼类关键点检测模型:①采用更轻量的ResNet-50骨干网络[12]替换原算法中的ResNet-152,作为提取鱼类特征的骨干网络,并利用Restnet50的预训练参数初始化鱼类关键点检测模型;②以Resnet50骨干网络的最后3层的输出作为有效特征层重新构建了特征金字塔网络;③在上下文建模网络中将2个3×3卷积得到的特征进行融合替代原算法中的可变形卷积;④优化锚框的尺寸和数量以适应不同尺寸鱼类目标的识别;⑤编码和解码鱼类的关键点(头部点和形心点);⑥基于对鱼类关键点空间分布的分析重构了损失函数。改进后得到鱼体关键点检测模型的网络结构如图1所示,整个模型由骨干网络、特征金字塔网络、上下文建模网络和多任务联合预测头4个部分组成。
图1 鱼体关键点检测模型网络结构
1.2.1 特征金字塔网络的构建
原RetinaFace对于输入大小为640像素×640像素的图像,特征金字塔由6个特征层(P2—P6)构成,以适应不同大小人脸的识别。对于鱼类目标的识别,通过对数据集中鱼类图像的尺寸和实际过鱼视频中不同的鱼类目标尺寸大小不一的情况进行分析,发现图像中不同的鱼类目标虽然尺寸有变化但相对于原图的比例较为适中,没有出现鱼类目标占满整个视频画面或鱼类目标在视频画面中占比特别小的情况,因此移除原特征金字塔网络中用于检测特大目标的特征层P2和检测特小目标的特征图P6;为了能检测出过鱼视频中不同尺寸的鱼类目标,使用P3(105×105×256)、P4(53×53×256),P5(27×27×256)3个尺寸(尺寸单位均为像素)的特征图来构建特征金字塔以适应大、中、小3个尺度鱼类目标的识别与定位。
1.2.2 上下文建模网络的构建
本研究借鉴了InceptionV2-V3[13]和SSH[14]算法的思想改进了上下文建模网络,通过2个3×3的卷积和3个3×3的卷积并联替换原上下文建模网络中的可变形卷积,并作为多任务联合预测中各预测头的输入。通过该方法构建的上下文建模网络相比于可变形卷积,在卷积层感受野不受明显影响的同时节省了计算空间。改进后的上下文建模网络结构如图2所示。
图2 上下文建模网络结构
1.2.3 锚框的优化
设置过多的锚框会带来的更大的计算开销和导致模型训练时由于正负样本极度不均衡带来更高的假阳性风险,同时为了保证特征金字塔中的3个有效特征层的尺寸适中以适应鱼类目标的检测,所以将输入图像尺寸改为840像素×840像素,并对特征金字塔中3个尺寸分别为105像素×105像素、53像素×53像素、27像素×27像素的P3、P4和P5特征层设置2个锚框,锚框的尺度步长按照8、16、32的比例逐步递增使得锚框在特定尺寸的特征图上均匀分布,网络能通过不同的锚框对不同尺度的鱼类目标进行回归预测。改进后,布置在各层级特征图上的锚框尺度如表2所示。
表2 改进后锚框的尺寸及数目
1.2.4 多任务联合损失的构建
不同于人脸及其关键点的检测任务,鱼类关键点数据集中并没有密集的鱼体关键点空间分布,所以本文基于原RetinaFace损失函数的设计,同时借鉴了SSD算法中的多框损失函数[15](Multibox Loss),舍弃了原RetinaFace损失函数中的密集损失函数,保留了分类损失、检测框回归损失和关键点回归损失。改进后的损失函数表示为
(1)
1.3 鱼类关键点的编码和解码
模型在检测鱼类目标及其关键点时,不是直接检测鱼类目标及其关键点的位置,而是检测鱼类目标预测框(Predict)与鱼类目标真实位置边界框(Ground Truth)的偏移量和关键点预测结果相对于鱼真实关键点位置的偏移量,然后根据这个偏移量进行某种形式的归一化,这个过程称为鱼目标及其关键点的编码。关键点编码过程如图3所示。
图3 鱼类关键点编码过程
平移:
(2)
(3)
尺度缩放:
(4)
(5)
将鱼目标框编码后,鱼的关键点只需按照与真实框中心点的相对位置来进行编码即可。鱼关键点的编码公式为:
(6)
(7)
鱼目标及其关键点的解码是编码的反向过程,根据编码公式反向求解可得到鱼目标及其关键点的解码结果。
1.4 鱼类目标及关键点的数据关联
使用鱼类关键点检测模型检测出鱼类目标检测框和关键点后,视频或图片序列中前后两帧的检测框和关键点的关联并不明确,此时需要把这些检测框和关键点按时间信息连接起来才能确定某一条鱼的游动轨迹。前后两帧中检测框和关键点的数据关联需要预测运动目标状态,计算关联代价矩阵,然后根据关联代价矩阵将检测框和关键点匹配。
1.4.1 鱼类目标运动预测
1.4.2 计算关联代价矩阵
由于鱼类目标的运动是连续的,同一条鱼的卡尔曼滤波预测值和观测值在大小、形状和空间上都比较接近,所以使用交并比来作为预测值与观测值的关联度量,分别计算前后帧中每个检测框与预测框的交并比从而得到关联代价矩阵。
1.4.3 基于关联代价矩阵匹配鱼类关键点
匈牙利算法已广泛应用于检测框的关联度匹配任务, 它能够解决二分图的最大匹配问题, 根据视频前一帧鱼类目标检测框与后一帧的跟踪框的关联代价进行逐一匹配将得到一个最大匹配, 然后根据最大匹配使用检测框替代跟踪框, 得到整个时间序列里的检测框运动轨迹, 将这些检测框里的关键点连接起来就能得到鱼类运动目标的游动轨迹。
2 结果与分析
2.1 鱼类关键点检测模型的性能评价
本文将鱼体关键点数据集中20%的图片用于测试分析,共计600张。评估指标采用目标检测领域常用的平均精度AP(Average Precision)、平均精度均值mAP(mean Average Precision)和每秒帧率FPS(Frame Per Second)来客观评价本文算法对鱼类目标以及鱼体关键点的检测性能。AP和mAP的计算公式分别为:
(8)
(9)
式中:n表示类别的个数,在本文中,n=2表示某一个类别;p表示准确率;r表示召回率。
在评估鱼类关键点的识别精度时,用TensorBoard绘制的鱼类关键点识别平均精度均值曲线如图4所示。
图4 鱼类关键点识别平均精度均值
每秒帧率(FPS)用来评估目标检测的速度,即每秒内可以处理的图片数量,推理时间越短,速度越快。经测试,单幅图像中鱼类目标及其关键点的识别速度为0.031 3 s,FPS约为32.04帧/s。在鱼类轨迹提取研究中,FPS>25帧/s即可认为满足实时的要求。
本研究方法测试图片的分辨率为2 704像素×1 520像素,在显存为12 G的RTX3060 GPU上的评估数据如表3所示。
表3 鱼类关键点检测模型评估结果
2.2 本研究方法与人工标记方法的对比
图5 本研究方法提取轨迹与手动标记的实际轨迹的对比
2.3 本研究方法与传统计算机视觉方法的对比
轨迹提取流程的复杂程度决定了轨迹提取的效率,本研究方法与传统计算机视觉方法提取鱼类轨迹的流程如图6所示。从图6可看出本研究方法提取鱼类轨迹时,输入鱼类图像识别出鱼类关键点并关联后即可输出鱼类轨迹,而传统计算机视觉方法[15]在识别出鱼类目标后还需经过形态学处理、标记连通区域、边缘检测提取鱼体轮廓、根据鱼体轮廓计算形心点等步骤才能输出鱼类轨迹,轨迹提取步骤多、耗时长。基于该方法[4]处理单幅图像平均需要90 ms,而本研究方法处理单幅图像的平均帧率为32帧/s,约为31 ms。处理单幅图像所需时间如图7所示;图8和表4为2种方法提取轨迹的对比试验结果。本研究方法提取第1条鱼的轨迹MREx为0.065%、MREy为0.112%,略低于计算机方法的0.093%、0.144%;第2条鱼的轨迹MREx为0.092%、MREy为0.011%,略低于计算机视觉的0.123%、0.237%。
图6 2种轨迹提取方法的差别
图7 传统计算机视觉方法与本研究方法单幅图像处理速度对比
图8 本研究方法提取轨迹与传统计算机视觉方法提取轨迹的对比
表4 传统计算机视觉与鱼体关键点检测提取轨迹对比试验结果
2.4 本研究方法与无关键点识别深度学习方法的对比
无关键点识别的深度学习算法[5]采用两阶段(Two Stage)检测器检测视频中的鱼类目标, 在检测鱼类目标时需要先生成可能包含待检测鱼类目标的预选框(Proposal), 再对生成的预选框进行分类和位置修正, 因为需要进行多次检测与分类流程, 所以使用该方法检测鱼类目标的速度相对较慢, 使用该方法检测鱼类目标的速度为64 ms; 而本研究方法采用单阶段(One Stage)检测器检测鱼类目标, 仅需将输入图像送入网络一次即可一次性检测出图像中的所有鱼类目标,检测速度相对较快, 使用本研究方法检测鱼类目标的速度为31 ms。 2种方法处理单幅图像的速度对比如图9所示。
图9 无关键点识别方法与本研究方法单幅图像处理速度对比
无关键点识别的深度学习算法[5]能够较为准确地识别并定位鱼类目标,并将鱼类目标位置边界框的几何中心近似为鱼的关键点来提取鱼类的游动轨迹,但由于边界框的几何中心点不是鱼类的形心点或头部点,当鱼大幅度改变游动姿态如摆尾时,边界框的几何中心会偏离鱼体,根据偏离鱼体的几何中心点提取出的鱼类轨迹与实际的鱼类轨迹存在一定的偏差;表5和图10为2种方法提取轨迹准确率的对比试验结果。本研究方法提取第1条鱼的轨迹MREx为0.065%、MREy为0.112%,低于无关键点识别深度学习方法的4.089%、2.094%;提取第2条鱼的轨迹MREx为0.092%、MREy为0.011%,低于无关键点识别深度学习方法的3.641%、2.115%。
图10 本研究方法提取轨迹与无关键点识别方法提取轨迹的对比
表5 无关键点识别与鱼体关键点检测提取轨迹对比试验结果
3 结 论
本研究针对现有鱼类轨迹提取方法不能兼顾效率和准确率的问题,基于人脸关键点识别算法RetinaFace作了相应改进,构建了基于鱼类关键点识别与定位的鱼类轨迹提取模型。结果表明,基于鱼类关键点检测模型能够高效准确地获取鱼类游动轨迹。本研究的主要结论如下:
(1)本研究方法识别鱼类目标及其关键点的准确率、召回率、平均精度均值分别为97.12%、95.72%、96.42%,FPS为32帧/s,输入鱼类视频图像即可实时获取鱼类游动轨迹。
(2)通过与现有的鱼类轨迹提取方法对比,本研究提取鱼类轨迹的方法在轨迹提取的效率和准确率2个方面都有明显的优势,达到了兼顾轨迹提取效率和准确率的目的,以期为未来鱼道的过鱼效果监测研究提供参考。