基于斑马鱼图像特征的鱼群检测算法

2022-04-25 07:36郭贵松张小虎
应用光学 2022年2期
关键词:鱼群鱼头斑马鱼

郭贵松,林 彬,杨 夏,张小虎

(中山大学 航空航天学院,广东 广州 510006)

引言

生物集群运动一直是自然科学研究中的热门领域,其包含丰富的社会学信息,可用于理解群体智能的机理,启发新一代的人工智能的发展。近年来,计算机硬件的提升和计算机视觉技术的发展为群体动物检测与跟踪提供了重要的技术支撑[1]。斑马鱼作为一种经典的模式生物,由于其结构简单、容易喂养等特点,被广泛用作研究群体行为的对象[2]。国内外有一些关于用计算机视觉方式检测斑马鱼的工作,可以分为两类,传统的检测方法与深度学习检测方法。

早期的斑马鱼检测主要通过人工标注获取斑马鱼位置[3-4],但是该方法存在效率低、易出错的问题。朱佩儒[1]等人提出了基于统计学习的鱼头检测器,算法利用鱼头与鱼眼的特征来检测鱼头,无需减除背景,鲁棒性较好,但易出现错检,需要对检测结果进行过滤处理。Qian 等[5]提出一种鱼头检测算法,通过AFMM[6](augmented fast marching method)算法提取目标骨架线,结合鱼体形态信息及Hessian 矩阵多尺度分析法获取到鱼头位置,结合极值检测及椭圆拟合方法完成鱼运动方向的检测,该方法可有效实现对鱼群的检测与跟踪,但受方法特性限制,需要手动设置多项参数。针对简单遮挡情况下的斑马鱼检测,Kato 等[7]提出了用形态学腐蚀和膨胀算法分割靠近的鱼,但当遮挡严重时,该算法不能有效地将目标分割,因此只能把不能分开的区域当成个体处理,这对检测与跟踪的准确性和完整性影响很大。

随着计算机视觉的不断发展,基于深度学习的目标检测算法由于其突出的学习和表征能力,已经广泛应用于各类目标检测任务中[8]。目标检测速度较快的是one-stage 法,如:SSD[9](single shot multibox detector)和YOLO[10](you only look once)都是在图片不同位置采用多种尺度和长宽比进行抽样,通过卷积神经网络提取特征,然后进行分类和回归[11]。Liu[12]等人提出一种多尺度输入的快速目标检测网络,对YOLOv4 的主干网络进行修改,提高了网络针对鱼群的检测准确率。Liu[13]等人提出一种基于并行双分支结构的YOLOv4 网络,实现对鱼类的实时检测与跟踪,检测网络能够在复杂显示海洋环境下提供较好的检测性能。Romero等[14]提出一种自动标注的深度学习检测跟踪方法IdtrackerAI,利用阈值分割法检测目标,并用CNN(convolutional neural network)分类网络标记斑马鱼,但其在鱼群遮挡频繁的情况下表现不佳,需要提高遮挡情况下的鱼群检测与跟踪能力。

上述方法存在一定不足,主要有:1)传统检测方法检测率低,鱼群遮挡情况下漏检高,深度学习检测方法虽比传统方法检测能力强,但对目标整体检测时忽略了目标特征;2)深度学习检测方法制作训练集费时费力,人工成本高。基于以上问题,本文提出了基于斑马鱼图像特征的鱼群检测算法,该算法包括两部分:1)基于目标图像特征的自动标注算法,自动提取目标图像数据,用于生成训练数据集;2)利用Yolo v4 检测器检测实现鱼群的检测,相较于现有的鱼群检测算法,取得了更好的实验效果。

1 目标形体特征及成像特性分析

鱼群检测任务中,数量巨大且具有高度相似性的个体密集分布在图像中,目标间常常存在局部遮挡问题,如图1所示。若以目标整体作为检测目标,往往会导致漏检和错检。因此,本文以图1所示斑马鱼为例,针对其形体及成像特性进行分析以设计相应的检测方法。

以某只斑马鱼为目标,如图2所示,图2(a)为斑马鱼原图,图2(b)、2(c)、2(d)分别为目标的灰度梯度图、成像灰度正视图与成像灰度侧视图,图2(b)与2(d)使用加粗红圈标注出鱼头位置,黑圈标注出鱼尾的位置。针对目标进行形体及成像特性分析,可得到如下结论:1)鱼头轮廓呈椭圆形,鱼尾轮廓呈尖状;2)鱼头相较于鱼尾通常具有较低的灰度值与较高的梯度值。

根据上述分析得出目标不同部位在图像中存在一定的差异性,因此本文采用局部检测及骨架约束的方式实现目标整体的检测。相较于整体检测方式,该方法有3 个优点:

1)降低目标间的遮挡率。图3 中展示了斑马鱼在图像中相互遮挡的不同阶段,图3(a)~图3(d)为两个斑马鱼在游动过程中出线遮挡事件的情况,图中加粗红圈代表鱼头,黑圈代表鱼尾。图3(a)为遮挡事件发生前,目标分离;图3(b)与3(c)为遮挡事件发生中,目标交叉遮挡;图3(d)为遮挡事件发生后,目标分离。可以看出,头尾相比于整个鱼体具有更小的粒度,因此其被遮挡的概率低,对于检测的影响较小。

2)保证目标特征的稳定性。图4 展示了斑马鱼在游动过程中的不同姿态,目标在游动过程鱼体和鱼尾形变较大,而图中红框框出的头部更为稳定,针对其的检测具有更好的鲁棒性。

3)提供更多的信息。例如,鱼头方向能够为算法提供鱼的前进方向;利用头尾之间的距离信息能够使鱼群跟踪算法更加鲁棒。

2 YOLOv4 检测网络

针对图像中鱼群在分布密集且各个体在运动过程中存在姿态、位置动态变化的问题,深度学习检测方法相比于传统方法具有更高的鲁棒性。YOLOv4[15]在目标检测中展现了强大而高效的检测能力,且其结构简单、易于优化,在单个GPU 上便能满足训练要求。因此,本文采用了基于YOLOv4的检测网络对目标进行检测,整体网络结构如图5所示。

YOLOv4 的头部模块(head)由多个密集模块(dense block)与卷积池化层(pooling)组合而成,其中每个密集模块包含多个卷积层。每一卷积层的输入包含前一层的输入、之前所有层的输出和原始输入。主干网络(Backbone)采用了具有CSP(cross-stage partial connections)结构的Darknet53。

颈部(Neck)模块用于连接特征提取网络的主干网络和头部模块,使网络能够识别不同尺度的目标。YOLOv4 的颈部部分采用了空间金字塔池化层(spatial pyramid pooling,SPP)和路径聚合网络(path aggregation network,PANet)结构[16]。空间金字塔池化层替代了YOLOv4 中的池化层,保留了输出的空间尺寸大小,通过对尺度不同的滑动卷积核进行了最大池化,将来自不同尺度大小的核的特征图连接起来作为输出[17]。YOLOv4 中的空间金字塔池化层实现了局部与全局特征的融合,提高了目标分类的准确率。路径聚合网络采用了自底向上的思路在较低层中进行信息增强,同时通过使用微小的全连接层增加掩膜预测,进而提高信息的多样性,达到更好的特征传递效果。

YOLOv4 通过双线性插值将不同尺寸的图片统一到固定大小(608×608像素)作为输入,采用了Mosaic 数据增强的方式,将随机选取4 张训练图像通过缩放后进行组合拼接,生成新的训练图像,提高了训练样本的多样性。

特征检测层采用像素大小为19×19、38×38和76×76的三尺度检测方式,用3 个不同尺度检测层搭配检测不同大小的目标,根据实际目标大小确定使用哪个检测层来检测。

3 基于斑马鱼特征的头尾自动标注算法

YOLOv4 检测有一个必不可少的步骤是标注训练集,采用手动标注数据,会耗费大量精力。针对以上问题,提出一种基于目标形体特性的自动标注算法,从而高效稳定地生成训练集。

图6 为斑马鱼训练集,如图6(a)与6(b)所示,斑马鱼训练集包含两种情况:个体(未交叉)与交叉。由于斑马鱼交叉情况复杂,通过传统图像算法难以鲁棒地提取交叉情况的头尾位置,而个体鱼外观特征(像素面积、轮廓等)稳定,更易于定位鱼头尾,所以本文使用头尾提取算法自动获取个体鱼的头尾位置,用于制作训练集,如图6(c)所示,绿色方框为鱼头位置,红色加粗方框为鱼尾位置。由于斑马鱼游动过程中存在个体与交叉两种情况,单独的个体鱼训练集难以满足训练集的多样性要求,可以结合平移目标算法,将两个个体鱼平移到同一位置,模拟斑马鱼交叉场景,如图6(d)所示,为将两个个体斑马鱼平移进行模拟交叉。将图6(c)和6(d)训练集用于训练YOLOv4 网络,借助YOLOv4 网络来检测自动标注算法难以有效解决的复杂交叉数据。

自标注流程如图7所示,主要为步骤如下:

1)目标自动分割 采用Otsu 自适应分割算法分割目标;

2)个体提取 通过像素面积过滤获得个体斑马鱼;

3)轮廓提取 获取目标轮廓,通过目标轮廓曲率判断斑马鱼头尾点位置;

4)骨架提取 获取目标骨架,简化目标模型;

5)头尾提取 通过骨架并结合斑马鱼头尾占比,获取头尾图像;

6)训练数据增强 将个体鱼进行算法合成,形成仿真的交叉鱼图像,并将合成的交叉鱼图像作为训练集,提高训练集的多样性。

3.1 目标自动分割

本文的测试视频中仅包含鱼体游动的目标及静止的背景,且目标在一定区域内停留时间较短(当运动目标经过某一像素点时,该点的像素值会发生显著变化)。因此,本文采用背景差分法检测目标。背景差分法首先选取背景中的一幅或几幅图像的平均作为背景图像,然后把后面的序列图像当前帧和背景图像相减,进行背景消去。若所得到的像素数大于某一图像分割阈值T,则为运动目标区域,反之则为背景区域[18]。本文采用Otsu自适应分割算法[19]确定图像分割阈值T。目标检测流程如图8所示,图8(a)为目标原图,图8(b)为背景重建图,图8(c)为原图与背景图差分之后并通过阈值分割后得到的结果图。

3.2 个体提取

通过3.1 节的目标分割算法,获取的目标可分为两种情况,如图9所示。个体鱼为单个斑马鱼像素集合,交叉鱼为两个及以上的斑马鱼像素集合。由于个体鱼外观特征(像素面积、轮廓等)稳定,相比于交叉鱼更易于提取鱼头尾,所以本文使用个体鱼提取头尾。个体鱼与交叉鱼的分类可以通过像素面积判断。

首先计算个体鱼的平均像素面积,设第m帧中经过目标分割后得到的目标总数等于鱼群数量,此时可以保证每个图像块为个体块,计算获取个体块的平均像素面积amean:

式中:amean为个体鱼平均像素面积;amj为第m帧图像中,通过背景减除法获取得到的j个图像块的像素面积;n为鱼群数量。

通过个体鱼平均像素面积区分个体块与交叉块,如(2)式:

式中:amean为平均像素面积;aij为第i帧图像中,通过背景减除法获取得到的j个图像块的像素面积;Tm为面积差阈值;Jij为0 时为个体块,否则为交叉块。

3.3 轮廓提取

如图10所示,鱼头通常呈现为宽圆形( U形),而尾巴部分显示一个锐利的尖端( V形)。由于曲率代表曲线弯曲程度,曲率越大代表越弯曲,因此尾部节点曲率最大,头部节点曲率次大。

对于个体鱼,设轮廓为点集合P,点集能形成一个曲线,曲率的倒数就是曲率半径:

式中:k为曲率;Δθ为切线方向角的变化;l为弧长;r为曲率半径。

设轮廓上某点为p,那么点p的曲率k的表达式为

式中:xi与yi为p点的x与y坐标;xi+1与yi+1、xi+2与分别为p点左右临近点的x与y坐标;为两点之间的距离;arctan为切线方向角之差。设K为目标轮廓的曲率集合,设k1为轮廓上最大的曲率,对应点p1即为目标尾部点,设k2为轮廓上次大的曲率,对应点p2即为目标头部点。

根据上述轮廓曲率法计算头尾节点位置,算法提取效果如图11所示,图11(a)为经过目标提取后得到的个体鱼,图11(b)为个体鱼经过轮廓曲率法后得到的结果图,其中左下方红色点为鱼头位置,右上方蓝色点为鱼尾位置。

3.4 骨架提取

斑马鱼主干由头、身、尾3 部分肢体构成,可以将鱼的拓扑结构简化为“两点一线”,即头部和尾部两点以及骨架线。选用骨架线来简化目标,骨架线在保持目标的长短、弯曲、姿态等信息的前提下实现了模型的简化,使得表示更加简单、清晰。本文选取基于距离变换的骨架提取方法[20],通过以上算法提取个体鱼骨架,并使用曲线拟合骨架点,结果如图12所示。

3.5 头尾提取

提取骨架后,将骨架信息结合个体与头尾部点位置信息,可以获取头尾部图像。将鱼分为3 个部分,以鱼的鱼鳃后缘为头部分界线,腹部靠近尾部的鱼鳍为尾部分界线,中间部分为腹部[21]。对鱼进行切线分析可测得鱼体各个部分的长度比例,如表1所示。

表1 鱼体各部分比例表Table 1 Proportion of each part of fish body

利用比例信息,结合鱼体骨架线的长度信息,可获取得到头尾部图像,如图13所示。

3.6 训练数据增强

为了保证训练数据的多样性以及网络在交叉鱼检测上的泛化能力,本文将目标提取获取个体鱼进行算法合成,形成仿真的交叉鱼图像,并将合成的交叉鱼图像作为训练集,提高训练集的多样性,有利于后续训练。算法流程如下所示:

1)质点计算:计算个体块fishi,j与fishi,j+1的像素质心,记为(xi,j,yi,j)与(xi,j+1,yi,j+1),其中fishi,j表示第i帧图像中使用目标检测获取到的第j个个体鱼图像块;

2)移动量计算:将(xi,j+1,yi,j+1)移动至与(xi,j,yi,j)重合,计算移动量xmov和ymov,如(5)式所示:

3)掩膜运算:将fishi,j+1个体块二值化,取反后(0 变1,1 变0)作为掩膜,将掩膜加上为位移量(xmov,ymov),与fishi,j进行按位与运算,将fishi,j+1移动到fishi,j上的像素值提前置为0,方便后续像素叠加操作;

4)移动并叠加:根据移动量,将fishi,j+1个体块的所有像素加上为位移量(xmov,ymov),将fishi,j+1叠加到fishi,j上;

如图14所示,图14(a)与14(b)使用目标检测算法获取得到的个体鱼fish1与fish2,通过以上算法将fish1移动到fish2上,即可得到图14(d)所示的交叉数据块,图14(c)为交叉块的三维图,图14(c)和14(d)中加粗红圈为fish1,黄圈为fish2。

5)计算移动后的头尾位置:设移动前fishi,j头部bounding box 坐标为(xhi,j,yhi,j,whi,j,hhi,j),尾部为(xti,j,yti,j,wti,j,hti,j),fishi,j+1头部bounding box 坐标为(xhi,j+1,yhi,j+1,whi,j+1,hhi,j+1),尾部为(xti,j+1,yti,j+1,wti,j+1,hti,j+1),fishi,j+1的移动量为xmov和ymov,将fishi,j+1移动到fishi,j上。移动后fishi,j头尾部位置不变,fishi,j+1尾部bounding box 坐标为(xti,j,yti,j,wti,j,hti,j)和(xti,j+1+xmov,yti,j+1+ymov,wti,j+1,hti,j+1)。

经过上述算法,获取得到斑马鱼头尾对应的bounding box 坐标信息,利用坐标信息即可用于构建深度学习训练集。

4 实验验证

4.1 实验系统与数据集

实验系统图主要由5 部分组成:遮光帘、LED灯条、外框支架、器皿及拍摄装置,如图15所示。图中:1 为遮光帘,用于防止外界光照的影响;2 为LED 灯条,用于提供稳定的照明;3 为支架,外框支架用于固定遮光帘,拍摄装置用于固定相机拍摄图像;4 为器皿,大小为65 cm × 45 cm,用于放置鱼群;5 为实验使用的高速相机Basler acA1440-220uc,其分辨率为1 440×1 080像素,帧率为100 帧/s,镜头FL-CC0614A-2M - F1.4 / 6 mm),相机固定于容器上方,垂直于水面。

实验计算机处理器为Intel i7,内存大小为32 G,实验拍摄目标为20 条斑马鱼。为了验证算法真实检测数据的获取是通过人工标注在每帧的位置,标注过程通过自动标注软件辅助完成。利用上述设备采集4 组数据集,结果如表2所示。

表2 鱼群检测结果Table 2 Detection results of fish stock

4.2 头尾自动标注算法验证

图16 为头尾自动标注算法标注结果图,图16(a)与16(b)分别为自动标注算法获取到的鱼头与鱼尾训练集。可以看出,自动标注算法获取到的鱼头尾训练集标注结果精度高。

为验证自动标注算法对斑马鱼鱼头尾检测的有效性,选用500 条斑马鱼作为测试数据,使用传统检测算法和自动标注算法进行对比,实验结果如表3所示。质点距离法[22]依赖于头和尾的完整性,因此对目标分割要求较高,易受环境亮度的影响,并且计算过程需要遍历轮廓节点,时间复杂度高。由于鱼头的稳定性,模板匹配针对鱼头标注率高于本文标注算法2.00%,但对于形变大的鱼尾标注率低,并且模板匹配涉及到遍历搜索,时间复杂度高。本文自动标注算法有效地利用了斑马鱼目标的外形特征,相比于质点距离法和模板匹配法,在总标注率上分别提升了1.40%和3.00%。因此从算法鲁棒性与性能上衡量,本文自动标注算法性能更佳。

表3 头尾自动标注算法标注效果对比Table 3 Comparison of annotation effects between head and tail automatic annotation algorithms %

为了对比自动标注算法生成的训练集训练YOLO v4 模型的效果,针对同一个数据集,选用4 种标注方法获取规格大小接近的4 组训练集,分别训练YOLOv4 网络,并使用mAP(mean average precision)作为衡量YOLOv4 模型好坏的评价指标。图17 为YOLOv4 模型的训练效果对比图,图17(a)~17(d)分别为4 种标注方法获取的训练集训练Yolo v4 的结果。

表4 为4 种标注方法的结果对比。可以看出,虽然人工标注方法mAP 值最高,但是标注时间远大于其他三者。含个体数据和模拟交叉数据的训练集比只含个体数据的训练集mAP 高7.10%,这是由于模拟交叉数据提高了网络对斑马鱼交叉情况下的检测能力。由于自动标注算法存在标注错误(如标注类别错误、标注框位置不准)的情况,加入人工校正(先校正个体的标注错误,再由校正后的个体数据生成模拟交叉数据)后,网络mAP 提高了6.90%。相比于人工标注方法,自动标注(真实个体+模拟交叉)结合人工校正方法在牺牲1.00%mAP 的基础上,标注时间减少了93.11%。综上所述,本文设计的自动标注算法结合人工校正的方法能够有效提升标注效率,且标注数据训练模型具备良好的mAP。

表4 标注方法训练效果对比Table 4 Comparison of training effects of annotation methods

4.3 检测实验效果与分析

为了进一步验证本文提出算法的检测性能,与经典的阈值分割算法与深度学习检测跟踪算法IdtrackerAI算法进行对比。

在鱼群目标检测过程中,需要量化提出的检测方法性能,采用准确率P与召回率R衡量鱼群检测效果[23]。定义如下:

式中:TP为被正确检测的个体鱼目标总数;FP为被错检为鱼体的目标个数;FN代表未检测到的鱼目标总数。

此外,为了更好地评估在鱼体发生遮挡情况下的检测性能,采用遮挡率OR、遮挡检测率ODR这2 个评估标准进行评价[24]。定义分别如下:

式中:NoT代表目标总数;NoO代表重叠事件发生的目标个数;NoSD代表重叠事件发生后成功检测的目标个数。

图18 为鱼群检测结果对比图,其中:图18(a1)测试图1 来自于数据集4,目标分散;图18(a2)测试图2 来自于数据集1,目标遮挡;图18(b1)、18(c1)、18(d1)与18(e1)为各种算法检测(a1)的检测结果;图18(b2)、18(c2)、18(d2)与18(e2)为各种算法检测(a2)的检测结果。

表5 为本文算法与其他检测算法检测率结果。测试图1 中目标分散情况下,IdtrackerAI 检测与阈值分割均达到了90% 的检测率,YOLOv4 检测鱼头尾可以达到97.5%的检测率。测试图2 中目标遮挡的情况下,YOLOv4 检测鱼头尾可以达到72.5%的检测率,在检测率方面相比于IdtrackerAI检测与阈值分割分别提高了42.5%与52.5%,验证了YOLOv4 头尾检测器的可行性与鲁棒性。基于斑马鱼图像特征的鱼群检测算法,由于使用头尾检测鱼群,通过细粒度的检测来降低目标(鱼头、鱼尾)被完全遮挡的概率,因此在遮挡情况下具有更好的检测效果。

表5 本文算法与其他检测算法检测率结果Table 5 Detection rate results of proposed algorithm and other detection algorithms

表6 为本文检测算法与IdtrackerAI算法的检测效果对比。实验证明,无论是在目标遮挡还是目标分散的情况下,本文检测算法具有更高的召回率R、遮挡检测率ODR。以数据1 为例,目标遮挡率OR为42.72%,本文算法相比于IdtrackerAI 在召回率R、遮挡检测率ODR方面提高了8.04%与18.8%。图19 为数据集1 中连续帧下本文算法检测结果,验证了本文在遮挡下检测方法的可行性。YOLO检测存在错检,而IdtrackerAI 检测基于阈值分割方法,错检概率更低,在准确率P上IdtrackerAI 相比于本文算法高出5.52%,但错检的问题可以简单地通过目标在的连续性来校正。

表6 鱼群检测结果Table 6 Fish stock detection results

总体而言,本文算法大幅度提升了在遮挡情况下的遮挡检测率ODR;同时,对于不同背景下的目标具有较高的鲁棒性,相比于传统斑马鱼检测算法,具有较为明显的优势。

5 结论

为了解决深度学习对目标整体的检测忽略了目标的特征且制作训练集人工成本高的问题,本文提出了基于斑马鱼图像特征的自动标注算法,用于自动生成YOLOv4 训练集,通过实验表明自动标注算法标注正确率达到87%以上,并且自动标注算法结合人工校正方法能够在只牺牲1.00% mAP的基础上,在标注时间上减少93.11%。为了解决鱼群密集目标检测中目标存在局部遮挡导致的漏检问题,本文利用YOLOv4 网络进行鱼头尾检测,该检测器能快速、准确检测鱼头尾的位置,即使在鱼体遮挡情况下,也能很好地工作。通过实验对本文算法进行了验证,在目标遮挡率为42.72%的情况下,相比于IdtrackerAI,本文算法的召回率R、遮挡检测率ODR分别提高了8.04%与18.8%,对比实验结果表明本文提出的算法具有更优的性能。

猜你喜欢
鱼群鱼头斑马鱼
渔夫、鱼头怪和阿拉丁
一碗鱼头面的江湖自由
小斑马鱼历险记
人工鱼群算法在雷达探测器射频端电路设计中的应用
买鱼头的学问
鱼群漩涡
瓜蒌不同部位对斑马鱼促血管生成及心脏保护作用
朱梦琪??《鱼群》
吃鱼头
小斑马鱼的奇遇