基于特征融合的FL-BCNN鱼类识别算法研究
2023-09-04张亚婷李海涛
葛 艳 张亚婷 李海涛
(青岛科技大学信息科学技术学院 山东 青岛 266061)
0 引 言
鱼类识别是了解海洋生态系统和生物多样性的一项重要任务。可以通过自动鱼类识别,监测和评估鱼类种群以及分析海洋环境的变化来帮助科学家获得某些特定鱼类的分布。由于在复杂的海洋环境中很多鱼类的水下图像不清晰,并且存在训练图像的数量不平衡的问题,因此正确识别鱼类通常具有挑战性。
已有很多学者开展了对鱼类识别算法的研究工作。张志强等[1]提取鱼类图像中的各个颜色分量及长短轴之比作为分类特征。姚润璐等[2]则从图像中分割出鱼背、鱼尾等部位的图像块,以此为基础提取相关性更强的特征。随着机器学习技术的发展,一些具有数据学习能力的网络模型被引入到海洋鱼类识别研究中。Fabic等[3]将图像划分为小块,对每块计算颜色直方图,通过各块的直方图分布特征来区分背景和目标。相比上述传统的鱼类识别方法,近年来兴起的深度学习方法在人体行为识别以及海洋鱼类识别等方面取得了较好的效果。Sun等[4]采用深度学习方法和超分辨率方法明确学习相对低分辨率图像的区别性特征。Chuang等[5]提出一个水下鱼类识别框架,由完全无监督的特征学习技术和错误弹性分类器组成。张俊龙等[6]对鱼类图片的预处理进行了改进,并提出了权重化特征的卷积。以上研究的开展为卷积神经网络应用于海洋鱼类识别提供了参考性和可行性依据。
目前采用深度学习方法进行海洋鱼类识别仍然面临一些问题。例如,鱼类图像训练数据的样本量不均匀以及样本质量较差问题,会影响海洋鱼类识别模型的训练和识别的准确率。此外,很多鱼类存在类内差异大、类间差异小的问题,使鱼类识别任务更具有挑战性。这也正是细粒度图像识别存在的问题。鱼类图像因为拍摄时的姿态、角度和光线等因素的影响,往往会造成同一种鱼的图像差异较大。而有些鱼类从外观和形态上看起来也非常相似,难以区分,因此,鱼类识别也属于细粒度图像分类识别的一种特例。细粒度图像的识别需要寻找有高度区分性的区域,并从这些局部区域中提取图像特征用于进行细粒度特征学习[7]。目前,常见的细粒度图像识别算法有基于强监督的Part-based R-CNN[8]和基于弱监督的Bilinear CNN。基于强监督的识别算法需要进行人工标注,其标注代价过高。
基于以上分析,本文采用基于弱监督的Bilinear CNN作为深度学习的框架,提出一种基于特征融合的FL-BCNN鱼类识别算法。为了解决特征不明显的问题,该方法通过融合不同卷积层的特征,提高细粒度特征的表达能力。利用焦点损失函数解决样本数据不平衡的问题,提高水下鱼类图像的识别能力。实验结果表明,本文算法在公开的F4K(15)数据集上有较好的识别准确率。
1 双线性卷积神经网络
双线性神经网络Bilinear CNN(B-CNN)是2015年由Lin等学者提出的一种针对细粒度图像识别的卷积神经网络。B-CNN由两个基于CNN的特征提取器组成[9]。B-CNN可以模仿人类大脑在进行视觉处理时的两个过程,一个CNN根据物体特征识别物体又称为局部特征提取器,另一个CNN发现物体的位置,又称为局部位置检测器。因此,在鱼类识别中,一个CNN可以提取特定位置如鱼体或尾巴的特征,另一个可以识别该位置,通过两个CNN的组合就可以提高鱼类细粒度图像的识别率。
本文把B-CNN作为鱼类识别的基础网络模型,并在此基础上进一步改进以提升鱼类识别的效果。B-CNN的主要结构如图1所示。
图1 Bilinear CNN结构
一个B-CNN模型由四元组构成,B=(fA,fB,P,C),其中:fA、fB是分别经过StreamA和StreamB得到的特征;P为Pooling操作;C为分类器。双线性卷积网络对特征的每一个位置l进行如下计算:
bilinear(l,I,fA,fB)=fA(l,I)TfB(l,I)=XXT=
(1)
式中:X表示一幅图像的特征图经展开后的特征矩阵,X∈Rd×N,其中N表示图像特征图中包含的特征数目,d表示图像特征图的通道数目;xi则表示X中的第i行即特征图中第i个通道,xi∈R1×N。从fA(l,I)TfB(l,I)可以看出,B-CNN通过外积运算可以得到矩阵中的每个元素,而且矩阵中每个元素均为通道之间的内积,从而可以捕获特征通道之间的成对相关性,并且可以对某些特征之间的相互作用进行建模。
2 FL-BCNN鱼类识别算法
为了解决鱼类图像训练数据的样本量不均匀、样本质量较差、鱼类间差异小等问题,本文提出基于特征融合的FL-BCNN鱼类识别算法。
本文算法将海洋鱼类图像的数据集通过改进后的B-CNN模型进行特征融合,接着将融合后的特征向量传递给全连接层,再通过Softmax层对全连接层的输出结果进行归一化,最后将归一化后的分类结果通过损失函数来判断预测值与真实值的偏差。图2为基于特征融合的FL-BCNN鱼类识别算法的流程。
图2 基于特征融合的FL-BCNN鱼类识别算法流程
2.1 基于特征融合的FL-BCNN模型
FL-BCNN模型对不同卷积层特征进行融合,增强特征提取网络之间的空间联系,提高特征表达能力。此外,该模型采用焦点损失(Focal loss)函数,使其聚焦于难训练的样本,对于简单的、容易分类的样本,给予的损失权重较低,这样可以解决数据样本不平衡的问题,从而提高模型的准确度。图3为本文提出的基于特征融合的FL-BCNN模型的网络结构。
图3 FL-BCNN网络结构
在该模型中,Stream A和Stream B分别使用VGG-16作为特征提取网络,通过13个卷积层和4个池化层执行位置检测和特征提取。其中13个卷积层均使用3×3尺寸的卷积核,相同的卷积核尺寸可以使得前一层卷积核的张量与后一层的卷积核张量保持相同的宽和高,4个池化层均使用2×2的池化核进行池化。
本文在B-CNN的基础上基于特征融合的思想对特征提取网络Stream B进行了改进,再使用焦点损失函数(Focal loss)来判断模型的优劣。
2.2 特征融合
在卷积神经网络中,浅层网络结构学习到了图像的轮廓、纹理等特征,而深层网络结构则可以学习一些较为抽象的语义信息。但是随着网络的加深,每一层都会丢失一些信息,那么到最后一层丢失的信息就会过多,导致识别的结果不准确。为了解决多层卷积神经网络语义丢失的问题,就产生了多尺度特征融合的方案。Densenet[10]借鉴了残差网络[11]的融合思想,不同层次间的融合跨度更大,它与之前所有的网络层都有连接,对于一些已经学习到的特征,它不需要进行重复学习,因此网络中得到的参数较少。
受Densenet与残差网络的启发,在本文的网络结构中,对B-CNN中负责特征提取的子网络Stream B,即VGG-16进行了改进,将最后一层卷积的输出与前面conv4卷积块的输出、conv5_1的输出做外积,以此达到融合不同层次的特征的目的。详细的改进步骤如下:
步骤1将conv4和conv5_1的输出分别与最后一层的输出进行外积相乘,得到B2和B3。
步骤2将B2、B3与两个特征提取网络外积相乘得到的B1进行相加融合得到Bilinear vector(BV)。
步骤4对第三步中获得的向量执行L2归一化,并将其发送到全连接的层。
在实验中,将conv5_3输出的三维向量分别与其他卷积层上的输出做外积。由于不同卷积层上输出的特征大小并不一致,因此经过通道位置变换(Transpose)和重新调整大小(Reshape)进行尺寸的调节,并最终连接(Contact)在一起得到特征融合后的向量。特征融合的过程如图4所示。
图4 特征融合过程示意图
2.3 焦点损失函数
在B-CNN基础模型中采用标准的交叉熵损失函数,该损失函数使用经过归一化指数函数Softmax激活后的概率分布作为输入,刻画预测分类和真实结果之间的相似度。Softmax的公式如下:
(2)
式中:exi为第i个类别的得分。Softmax激活函数可以得到0-1范围内的分类概率。
交叉熵损失函数的公式为:
(3)
式中:Pi是经过Softmax得到的预测结果;yi代表真实值。交叉熵损失函数刻画的是实际输出的概率与期望输出的概率的距离,即交叉熵的值越小,两个概率分布就越接近。交叉熵损失函数适用于图像多分类的场景,在图像多分类任务中取得很好的效果。
但是,在鱼类样本数据集的类别比例不均衡时,如果采用标准的交叉熵损失函数,在训练过程中极易出现过拟合现象,影响模型的准确率和收敛速度。Lin等[12]提出了应用于密集物体检测任务的焦点损失函数(Focal loss),并提出在基于二值分类的交叉熵中引入Focal loss,降低了容易分类的样本的权重,解决了样本数据集类别不均衡产生的一系列问题。在本文的研究中利用焦点损失函数在给定的数据集高度不平衡的情况下训练FL-BCNN鱼类识别模型。Focal loss的函数形式为:
FL(Pi)=-αi(1-Pi)γlog(Pi)
(4)
式中:Pi为经过Softmax的输出的模型估计概率,Pi越大代表越容易分类;γ是一个指数,经过指数化后1-Pi变得更小;αi为平衡因子;-log(Pi)为交叉熵函数。这样越简单越容易分类的样本,FL(Pi)的值就越小,那么loss的权重就越小,这样就可以使模型更好地聚焦于难训练的样本进行训练。
根据式(4)可以得到Focal Loss的反向传播公式为:
(5)
在本文提出的FL-BCNN鱼类识别模型中,对超参数γ的选取做了如下研究:当γ=0时,FL函数等于标准的交叉熵函数,即FL函数无意义;当γ=5时,简单易分的样本权重过小,对简单样本的学习产生影响,不利于模型的学习。因此,我们在[0,5]之间折中γ=2,并通过实验验证了当γ=2时,对容易分类的样本进行指数化最适合本实验中的鱼类识别模型。
2.4 学习策略
2.4.1迁移学习
迁移学习是一种机器学习技术,可在特定数据集上使用经过训练的卷积神经网络,并将其迁移到其他数据集。迁移学习的目的是在不能在短时间内获得大量有效数据的前提下,获得泛化能力强、准确性高的模型。在本文的实验中,由于所采用的数据集中水下鱼类视频和图像数据仍然较少,因此在本文中使用了迁移学习的思想,把在其他领域已经训练好的模型,再用鱼类的图片数据集进行学习训练,可以有效地提高模型的准确性。本文使用在Imagenet数据集上已经预训练好的模型进行迁移学习。
2.4.2Dropout方法
训练一个更复杂的神经网络,当参数过多且训练数据较少时,很容易产生过度拟合。文献[13-14]中提出了Dropout方法。 该方法是在神经网络执行前向传播时让某个神经元以一定的概率停止工作,相当于让一部分的特征检测器停止工作。该方法可以提高网络的泛化能力,从而有效地抑制过度拟合的发生。
在本文提出的细粒度鱼类图像识别模型中,由于B-CNN的特征提取器选择了VGG-16网络,尽管其网络结构并不复杂,但是包含的权重数目很大,包括卷积核权重和全连接层的权重,容易产生较多的参数。因此,本文在全连接层之前使用Dropout方法来抛弃一些参数,可以在一定程度上避免该鱼类识别模型出现过拟合的现象。
3 实验及结果分析
3.1 数据集
F4k数据集是由Fish for knowledge项目组制作的一个公开数据集,该数据集建立的样本均从真实海洋环境中采集,以台湾南湾、蓝屿等观测台收集的鱼类图像作为研究对象。F4k数据集包含23种鱼类,共27 370幅图像。其中数量最多的一类包含12 112幅图像,数量最少的一类只有16幅图像。由于该数据集是从实况视频中截取的鱼类画面,因此有大量重复的图像。采用人工的方式将大多数重复的图像筛选出去,同时采用水平翻转、旋转平移等数据增强的手段扩充数据集,最终选取15类鱼类,9 345幅图片按照7∶2∶1的比例划分为训练集、验证集和测试集进行鱼类识别模型的训练与验证。其中最多的一类图片数量为1 000幅,最少的一类为145幅。数据集示例如图5所示。
图5 数据集样本示例
3.2 实验环境
本文利用TensorFlow在Ubuntu16.04系统下使用GPU进行训练。实验所用机器的硬件配置为:处理器为Intel Core i7-7700,内存8 GB,显卡为NVIDIA GEFORCE GTX 1050Ti。软件环境为:Ubuntu 16.04,Python3.6,TensorFlow,scikit-learn,keras等。
3.3 实验结果
在实验中,使用本文提出的FL-BCNN模型对F4k数据集中选取的15类鱼类、9 345幅图片进行训练与验证。其中,batch size为32,学习率使用0.01,动量因子为0.9,迭代次数最大为5 000,当损失达到收敛后,在验证集上验证最终的模型性能。本实验用准确率(accuracy)和混淆矩阵(Confusion Matrix)作为评价指标。最终通过测试集的验证,得出模型的准确率为97.68%。图6是特征提取的conv5_3卷积层激活图的可视化结果,可以看出该模型在conv5_3学习到的特征已经具有很强的辨识性。例如背景部分完全没有激活度,而在鱼尾或是鱼鳍等比较关键的、细节性的位置则激活度较强,因此该模型可以有效地对关键特征进行识别。
图6 conv5_3的可视化结果
图7是实验中四种鱼的最终的识别结果,由图片和图片上方预测的鱼类名称组成。
图7 模型的识别结果
可以看出该模型对水下鱼类的识别效果表现较好,可以快速准确地识别出某种鱼类。该模型对15种鱼类在验证集上的识别准确率如图8所示。
图8 在F4k(15)上得到的混淆矩阵
图8中横坐标为预测值,纵坐标为真实值,根据在数据集上得到的混淆矩阵可以看到对于不同种类的分类效果,对角线上的单元格颜色越深说明准确率越高,识别效果越好。可以看到除了编号为2的Chromis chrysura类外,其他类别的准确率都较高。在图5给出的数据集样本示例中可以发现,2号Chromis chrysura类与5号Acanthurus nigrofuscus类相似度极高,并且几乎没有纹理特征,因此,Chromis chrysura类有时会被错分为Acanthurus nigrofuscus类。
3.4 B-CNN与FL-BCNN的实验结果对比
在相同数据集上对原始的B-CNN和本文提出的引入了特征融合与Focal loss的FL-BCNN上进行了鱼类识别对比实验。实验结果如表1和图9所示。
表1 B-CNN和FL-BCNN的实验结果
(a) B-CNN训练损失曲线
从表1中我们可以看出,在原始的B-CNN模型中添加特征融合并将损失函数替换为Focal loss时,准确率高出4.71百分点,并且在GPU上运行时,每迭代一次运行时间减少了0.02s。
从图9中可以发现,增加了特征融合与Focal loss之后,训练的损失曲线的收敛速度明显加快,并且相比较原始的B-CNN,可以达到更小的收敛值,从而验证了基于特征融合的FL-BCNN模型的有效性。
3.5 与已有的鱼类图像识别算法的对比
为了进一步验证本文算法的有效性,本文选取了基于分类回归树的方法CART[15],基于使用拒绝选项的强制平衡优化树的方法BEDTR[16]、卷积神经网络VGG-16[17]、双线性卷积神经网络B-CNN、基于特征融合的FL-BCNN算法在数据集F4K(15)上进行对比实验。实验结果如表2所示。
表2 实验结果对比
可以看出,在相同的数据集上,FL-BCNN方法取得了最好的性能,与其他算法相比分别高出10.68百分点、0.18百分点、5.96百分点、4.71百分点。同时从结果来看,B-CNN方法优于VGG-16,说明相比于传统的深度学习的卷积神经网络,B-CNN更适应于细粒度图像识别。FL-BCNN方法要优于VGG-16和B-CNN,使得识别的准确率和模型的收敛速度进一步提升,说明利用特征融合和Focal loss解决细粒度特征不明显和样本数据类别不均衡的问题有助于提升模型的识别准确率。
4 结 语
本文提出一个基于特征融合和双线性卷积神经网络的鱼类细粒度识别算法。该方法将神经网络中不同通道上的特征进行融合,解决了由于水下图像质量差而造成的细粒度特征不明显的问题。同时利用焦点损失函数来解决样本数据集中数据不均衡的问题。该算法与已有的鱼类细粒度识别算法相比,提高了识别的准确率和模型的收敛速度,验证了本文算法的高效性。
鱼类细粒度图像仍面临着由于水下拍摄造成的分辨率低的特点,今后将尝试与超分辨率算法相结合,提高水下鱼类图像的分辨率,增强鱼类图像的细节特征,进一步提升识别的准确率。