薛永杰,巨志勇
(上海理工大学 光电信息与计算机工程学院,上海 200093)
海洋鱼类识别是一种物体识别技术,在鱼类种群保护和鱼类养殖等领域起着重要的作用。渔业捕捞需要通过分析各个种类鱼群的分布情况,因地制宜地做出相应的捕捞调整。因此,对海洋鱼类的种类鉴定和观察是非常重要的。海洋生物学家研究各种鱼类品种相似度,鱼类生命周期等也高度依赖于观察鱼类的种类及外观。在自然环境中,气候和环境的变化对鱼类物种和鱼类栖息地有较大的影响,所以通过人工方法在不同环境下采集鱼类样本图片是非常困难且耗时的。此外,在进行鱼类种类识别时通常会遇到图像含有噪声太大,图像分割不完整,被识别目标变形导致识别率低等问题。鱼类的种类鉴别已经成为一个具有挑战性的研究课题。
近年来,国家经济和渔业科技的发展日益提升,相关领域对鱼类物种的鉴定和识别的需求迅速增长。伴随着互联网和人工智能的发展,产生了许多基于机器学习的鱼类图像识别算法。文献[1]提出利用比较基础特征并采样识别鱼类。该方法虽然识别率较好,但是训练时间较长。文献[2]中提出利用稀疏表示的分类的最大概率局部排序方法识别鱼类,但算法中的参数需要人为预先设定。文献[3]提出了一种利用尺度不变特征变换方法,并由矢量量化直方图表示,但是如果应用于多个对象,则会使用除了目标以外的其它对象特征进行识别,可能导致识别错误。
随着科技的发展,GPU(Graphics Processing Unit)的图像处理能力得到了提升,训练深度复杂的神经网络也愈加容易。最初研究人员提出了AlexNet[4]、VGGNet[5]、GoogleNet[6]、ResNet[7]等深度学习模型,并使用正则化[8]、批量标准化[9]和残差学习[10]来避免过拟合或梯度弥散等问题。这些网络模型为之后的深度学习发展奠定了基础。陈英义[11]等基于迁移学习的海洋鱼类识别算法,通过将新鱼类识别模型与VGG16模型融合,将鱼类识别模型的准确率提高至97%以上。Hafiz T R等[12]对VGGNet模型进行了改进,在每个级别的训练上添加了4个卷积层以提高分类性能。部分学者提出了典型度和偏心率的数据分析用于无监督学习[13],也称为TEDA(Typicality and Eccentricity Data Analytics)。这些研究为基于深度学习进行的鱼类种类识别方法提供了理论基础和参考。
本文提出了一种基于改进AlexNet的鱼类识别算法。使用基于项的柔性注意力(Item-Wise Soft Attention)算法对优化后的AlexNet模型进行改进,并采用迁移学习[14-15]的方式,将经过大型数据库ImageNet预训练后的AlexNet模型迁移到鱼类识别模型上,以提升模型的识别率并减少训练时间。训练好的模型以apk格式的文件保存,可以直接应用于安卓系统中,实现对鱼类的精准分类。
本次实验使用的鱼类数据库为QUT_fish数据集。这个鱼类数据集包括从468种鱼类中收集到的3 960张图片。数据集中图片分为3类:自然环境、被捕获、去背景。自然环境类中的鱼类图片以各种自然环境为背景,并使用不同光照条件进行拍摄。被捕获类中鱼类图片拍摄背景和光照较为固定。去背景类型中的鱼类图片以白色为背景。本文选取40种不同鱼类作为研究对象,并使用旋转、平移、剪切等数据增广的手段使数据库数量增加为原来的4倍。部分鱼类样本如图1所示。
图1 鱼类样本实例
基于项的柔性注意力算法由两个部分组成:第一部分是主干部分,其功能是进行正常的卷积操作;第二部分是柔性注意力分支,也是该算法最重要的部分,由多层感知器、一个解码器和两个采样层组成。因为基于项的输入是要求包含明确的项的序列的,所以需将每张图片需要用文本形式描述,表示为单词编码序列如下
y={y1,…,yc},yi∈RK
(1)
其中,K是词表大小;c是描述文本的长度。在操作层面。原输入经过卷积网络(Convolutional Neural Network,CNN)处理后,转换为每一项都具有对应单独编码的序列。对于待处理的图像,经过卷积网络抽取其特征,在最后一个卷积层的输出可以产生L个向量,每一个向量是原图中一个区域的D维表示,也可以看成一个序列
α={α1,…,αL},αi∈RD
(2)
由柔性注意力机制分别对每个部分的特征赋予不同的权重,每个向量αi的权重αt,i计算式如下
eti=fatt(αi,ht-1)
(3)
(4)
其中,fatt为多层感知器,输入是向量αi和解码器上各时刻的状态ht-1。在计算好权重之后,注意力机制就可以对输入序列α进行选择。经过CNN处理后的编码,通过计算权值,对所有相进行线性加权合并,基于项的柔性注意力算法的输出如式(5)所示。
Zt=φ({αi},{at,i})
(5)
式中,Zt为经过注意力机制加工过的特征向量,把它输入到解码器,通过全连接层输出。这里柔性注意力采用求Zt期望的方式,也就是说φ是一个线性加权函数,求Zt期望的表达式为
(6)
深度卷积神经网络与其它传统方法相比有很多优点,尤其是径向基函数神经网络。卷积层的权值共享减少了参数的数量,从而更容易检测边缘、角和斑点。池化层的使用为所提取的特征的位置和位置的变化提供了不变性。用于鱼类识别的模型体系结构如图2所示。
图2 FAN鱼类图像识别模型
该模型是AlexNet的优化版本。首先,为提高鱼类种类识别的准确率,本文设计了多输入的模型结构,将第一层卷积层CV1分为CV1_a、CV1_b、CV1_c,作为3个图片输入口,各使用11×11的卷积核进行卷积,步长为4。这样设计的好处有两点:(1)不会额外增加运行时间。如果所有输入图片都相同,程序会将相同图片等效为一张,不会额外增加运行负担;(2)识别精准度提高。因为鱼类的背景种类繁多,变化复杂,利用多输入的形式能够包含更多信息,降低背景对识别图片的影响,提高了准确率。
其次,为了减少计算复杂度,解决占用内存多的问题,本文对AlexNet模型进行了调整,即在不影响精度的前提下减少了部分卷积层。在图片输入后,将输出的特征图融合为一。经过第一个卷积层,图片大小变为55×55×96。通过一个非饱和线性修正单元(Rectified Linear Units,ReLU)和核为3×3且步长为1的最大池化层(Max-Pooling)后,图像尺寸减小为27×27×96。第二卷积层以前一层的输出为输入,共产生256个特征图,卷积核的大小为5×5,步长为1。随后,通过ReLU和最大池化层,核大小为3×3,步长为2,输出图像大小为13×13×256。第3层和第4层卷积层相连接,卷积核大小为3×3,步长为1。第3个卷积层产生384个特征图,第4个卷积层使用256个特征图,其后连接一个最大池化层,核的大小为3×3,步长为2。该卷积层的输出通过两个全连接层,输出图片个数为4 096。
最后,将基于项的柔性注意力模块置于全连接层与输出层之间,构成改进AlexNet模型。模型的输出为n维,代表n种鱼类训练集种类概率,概率数值总和为1。改进AlexNet模型使用交叉熵损失函数衡量预测值与实际结果之间的差异性信息。交叉熵损失函数式如下
Hθ=-∑eP(e;θ)logq(e;θ)
(7)
其中,H为训练损失;e为训练样本;P为类别概率;θ为参数权重;q为改进AlexNet模型预测各类概率,其形为
(8)
其中,x为激励函数的输入;j表示被计算种类的序号。
利用模型迁移的方法,将AlexNet通过大型数据库 ImageNet训练后得到的图像识别知识移植到本文改进 AlexNet模型,得到鱼类识别模型Fish_AlexNet(FAN)。
迁移学习(Transfer Learning,TL)是一种能够将已经掌握的知识应用到类似领域中的学习方法。传统的机器学习方法需要大量样本,并且需要人为设置标签,耗费大量时间且效率不高。若直接使用没有标签的样本进行训练,得到的模型精度不高,而使用迁移学习能够很好地解决这些问题。其利用已经通过大量数据训练的模型,将得到对图形分类的共性特征迁移到目标任务上。
迁移学习主要可以分为4类:基于样本的迁移(Instance Based TL)、基于特征的迁移(Feature Based TL)、基于模型的迁移(Parameter Based TL)、基于关系的迁移(Relation Based TL)。这里采用模型迁移的方式将AlexNet改为用于鱼类种类识别的模型Fish_AlexNet(FAN)。FAN深度卷积网络模型由4个卷积模块、两个全连接层、基于项的柔性注意力层和输出层,其参数如表1所示。
表1 FAN模型参数
在FAN网络模型中,输入鱼类样本图片像素为227×227×3,在每一个卷积模块里都包含一个ReLU单元。CV1卷积核大小为[11×11],步长为4。CV2卷积核大小为[5×5],步长为1。CV3与CV4卷积核大小为[3×3],步长为1。使用[3×3]核,步长为2的最大池化层,上一层的输出作为下一层的输入。通过Softmax层输出的个数为m,其大小对应于选择的m种不同鱼类。
为了验证算法的有效性和稳定性,对QUT_fish_40数据集进行识别,并与ResNet[16-17]等算法进行比较。本文模型的训练与测试均基于开源机器学习框架TensorFlow完成。
算法的识别准确率由对鱼类图片的识别率计算得出,识别率计算式为
(9)
其中,Zt为待识别鱼类图片的个数;Za为正确识别的鱼类图片的个数;Rrec为算法识别率。
算法的性能由算法运行时间的平均值来衡量,平均识别耗时的计算式为
(10)
其中,t为平均识别耗时;tall为识别N张鱼类图片的总耗时;N表示算法运行的次数。
以QUT_fish_40数据集和对其通过数据增广得到的图片作为识别对象,在3种不同学习率(0.001,0.01,0.1)下对改进后的FAN模型与原始AlexNet模型进行对比测试。权值衰减率设置为0.000 2,并根据实际情况和训练时长,在测试和验证时将Batch设置为20,最大训练轮数设置为6 000。结果如表2所示。
表2 AlexNet模型与FAN模型比较结果
由表2可知,模型学习率的设置对于模型的识别准确率有重要影响。可以看出,在学习率为0.01时,FAN模型的验证准确率达到了95.91%,相较于准确率为84.51%的AlexNet模型提升了约11%。当学习率为0.1时,FAN模型的训练准确率与验证准确率分别达到了99.59%与97.43%,与AlexNet模型相比,验证准确率提升约4%。在学习率为0.001时,FAN与AlexNet获得结果都不理想。可见合适的学习率对模型识别准确率有着较大影响。造成准确率低下的原因是:在利用迁移学习时,网络模型中的一部分层已经过训练。如果此时再继续使用较小的学习率,很容易陷入局部最优解,或大幅增加训练时间,导致模型效果不佳。相反地,设置的学习率过大,容易导致忽略全局最优解,并且会导致收敛困难、梯度弥散。
分别在0.1和0.01学习率的条件下,对测试模型经过6 000次的迭代训练后,FAN与AlexNet模型的验证准确率都达到了84%以上。总体而言,本文提出的FAN模型算法相较于原始AlexNet有着更高的准确率。模型的训练损失如图3所示,纵轴为训练损失经过归一化处理后的值,横轴为模型迭代次数。由图可见FAN模型在3种不同学习率下迭代次数与训练损失值的关系。在迭代次数达到1 000次时,在0.1与0.01学习率下的FAN模型训练损失已经基本接近收敛稳定,与再经过5 000次迭代之后的训练损失率差别不大,说明训练达到了预期效果,并且在学习率为0.1时FAN模型取得最佳性能。
图3 FAN模型训练损失
这里采用罗汉鱼、伸口鱼、蓝唇鱼、燕尾龙4种不同鱼类识别结果为例,每种鱼类图片150张,一共600张鱼类图片。为了对比模型效果,分别使用尺度不变特征变换(Scale-Invariant Feature Transform, SIFT)[16]、深度残差网络(ResNet)[17]、AlexNet和本文FAN模型算法,对待识别的鱼类图片进行随机识别,各算法的识别率结果如表3和图4所示。
图4 不同算法的鱼类识别准确度
表3 不同模型下的鱼类图片识别率
其中,SIFT算法的准确识别率最低,仅为69.07%。造成识别率低下的主要原因是:SIFT算法通过比较图像中的关键点也就是局部特征来检测两幅图片的相似度,对于明亮变化和噪声具有良好的鲁棒性,但是同属不同种的鱼类拥有相似局部特征,导致SIFT算法难以精准识别。结合迁移学习的FAN算法达到了最高准确率97.53%,相较于AlexNet模型提高了2.91%。
在算法性能方面,从模型训练耗时和识别耗时两个方面来进行对比。由表4可以得出,使用了迁移学习的FAN模型训练时间最短。此外,由于使用了简化AlexNet模型,识别耗时相较于原始AlexNet模型减少了35%。
表4 不同识别算法的时间消耗
针对传统算法对于鱼类识别率低,难以提取特征点等问题,本文提出了基于改进的AlexNet鱼类识别算法。首先,对AlexNet网络模型进行了改进,改进后的AlexNet由4个卷积层和两个全连接层组成,减少了网络训练复杂度,避免了无效训练。其次,提出基于项的柔性注意力算法提升改进后的AlexNet精准度。最后,结合模型迁移的方法构成新的FAN网络模型。
在QUT_fish_40数据集上对本文提出算法进行了验证。结果表明,相较于原始AlexNet模型,本文算法训练时间更短,识别耗时减少了35%,识别准确率提升了4.08%,网络复杂程度更低,且易用于各种内存较小的移动设备。但本文的识别都是对单一鱼类进行识别,后续会进一步研究对多种鱼类的同时检测,以便将该方法应用在背景环境复杂、浑浊水域的实时水下鱼类识别领域。