APP下载

基于FTVGG16卷积神经网络的鱼类识别方法

2019-06-04陈英义龚川洋刘烨琦方晓敏

农业机械学报 2019年5期
关键词:集上鱼类准确率

陈英义 龚川洋 刘烨琦 方晓敏

(1.中国农业大学信息与电气工程学院, 北京 100083; 2.农业农村部信息获取技术重点实验室, 北京 100083; 3.北京农业物联网工程技术研究中心, 北京 100083)

0 引言

鱼类的计算机视觉识别一直是该领域的研究热点,多年来,许多学者对其进行了深入研究,尤其是基于颜色、形状、纹理等图像内容的鱼类识别研究较多,并取得了较大进展。STRACHAN等[1]利用鱼的形状进行分类。LARSEN等[2]使用线性判别分析方法(Latent dirichlet allocation,LDA)对鱼种形状和纹理特征进行分类,准确率为76%。HUANG等[3]提出BGOT(Balance guaranteed optimized tree)算法,对采集的10个鱼种3 179幅图像数据进行分类,准确率为95%。吴一全等[4]提出基于最小二乘支持向量机(Least squares support vector machine, LSSVM)的识别方法,准确率为95.83%以上。杜伟东等[5]提出了基于支持向量机(Support vector machine,SVM)的决策融合鱼类识别方法,准确率在90%以上。

图1 鱼类图像样本Fig.1 Fish image samples

但是,随着机器视觉技术的发展,数据量剧增,基于内容的识别方法在特征提取方面存在的计算复杂、特征不可迁移性[6]等问题愈发突出。特别是对图像中存在目标小、他物遮挡、光线干扰等情况的图像识别上,存在识别准确率低或运算效率低等问题,不能满足实际需求。深度学习[7]中卷积神经网络[8,11](Convolutional neural network, CNN)的出现已经彻底改变了图像识别[8-9]、语音识别[10]以及大数据处理在农业中的应用方式。刘德营等[12]提出了一种基于卷积神经网络的白背飞虱自动识别方法;傅隆生等[13]提出了一种基于Let-Net5[14]卷积神经网络的田间多簇猕猴桃果实图像识别深度学习模型;王璨等[15]提出了一种基于卷积神经网络提取多尺度分层特征的田间玉米杂草识别方法,为本研究的开展提供了新思路。

本文在上述研究成果的基础上,通过分析已有的VGG16[16]卷积神经网络模型良好的图像特征提取功能,设计FTVGG16卷积神经网络,提高复杂应用场景鱼类目标的识别精度,为构建可靠、精准、快速的鱼类识别系统提供理论基础。

1 材料与方法

1.1 图像获取

图像数据来自大自然保护协会提供的远洋捕捞船上摄像头拍摄的场景[17]。该协会提供了3 777幅带标注的鱼类图像和1 000幅不带标注的鱼类图像。部分海鱼类图像示例如图1所示,图像包含8类目标,其中7类是不同种类的海鱼(目标)和1类不包括鱼类目标的背景,每幅图像只属于某一类别,构建的FTVGG16模型需要识别出每幅图像中包含的鱼类目标。

1.2 图像预处理

在深度学习领域,通过对图像进行预处理可以增强数据样本,进而提高模型性能。本文图像预处理主要包括:

(1)图像像素值处理,即将JPG格式的图像转换为RGB三通道的矩阵向量存储。映射图像像素值从[0,255]到[0,1],这样处理可以使模型在使用激活函数时,避免神经元进入“死区”而导致神经元失活,最终使卷积神经网络获得比较快的收敛速度。

(2)图像空间尺度变换,即将图像进行随机缩放、平移、旋转、镜像、随机裁剪。

(3)图像均值与方差均衡,即样本归一化。图像预处理的结果示例如图2所示。预处理后图像尺寸为600像素×600像素。

图2 鱼类图像预处理示例Fig.2 Illustration of fish image processing

1.3 试验方法设计

模型训练采用的环境是Ubuntu 16.04LTS操作系统、运行内存为16GB、NVIDIA 1080 Ti显卡GPU、并行CUDA[18]编程平台,Keras[19]的深度学习框架和Python 3.6.5编程语言。试验方法设计包括模型训练、测试、对比验证。

(1)模型训练:经过预处理后的图像输入到卷积神经网络进行训练,保存训练后的模型参数与结构。模型训练采用k折交叉验证的方式,k取5,将整个数据集的1/k作为测试集,每个模型训练k次,测试k次,误差取k次的平均值,选择误差最小的模型。5折交叉验证示意图如图3所示。数据集的划分使用Python脚本程序,提供划分数据集的比例,程序自动切分数据集以及随机打乱样本。模型每次训练都会随机地从数据集中划分80%的训练集和20%的验证集。2 953幅图像作为训练集,用来训练模型,741幅图像作为验证集,用于调优模型参数、验证模型,1 000幅不带标注的图像作为测试集,用来评价模型在未知数据集上的泛化性能,数据集划分示例如表1所示。

图3 5折交叉验证数据集划分Fig.3 Five cross validation data set split

(2)模型测试:将测试图像输入到模型,获取输出分类结果,选取概率最大的目标。基于5折交叉验证方法,最后的预测结果为5次预测结果的平均值。

表1 训练和验证数据集Tab.1 Summarization training set and validation set

(3)对比验证:为验证本模型的识别效果,本文分别选择VGG16、VGG19[16]、ResNet50[20]进行对比。

2 FTVGG16卷积神经网络的鱼类个体识别

2.1 FTVGG16网络模型的构建

FTVGG16网络由5个卷积块、3个全连接层、1个softmax层构成。每个卷积块由卷积层Conv、批规范层(Batch normalization,BN)[21]、池化层Pool组成,每个卷积块中的卷积层数和卷积核的参数不同。例如,在第1个卷积块中,“Conv1_64×2” 代表第1个卷积层中有64个卷积核,“×2”代表对上一层的输出进行两次相同的卷积操作运算,卷积后的输出进入BN层,BN层的输出进入激活层,激活层的输出进入最大池化层Pool,后续卷积块进行相同的操作。图像作为卷积神经网络的输入,依次经过卷积层、批规范层、池化层、全连接层,最后的输出经过分类的softmax层进行概率空间映射,输出每种鱼的置信度,从而给出分类结果,FTVGG16网络架构示例如图4所示。

图4 FTVGG16网络架构Fig.4 Neural network framework of FTVGG16

2.1.1卷积层设计

FTVGG16卷积神经网络有13个卷积层,每个卷积层中的卷积核尺寸是3×3,卷积核的移动步幅为1个像素,像素填充为“0”值填充边界,这样处理能够使卷积前后图像的尺寸保持不变,尽量让卷积核感受图像的边缘信息,每个卷积层中的卷积核数量不固定,卷积核的数量依次为64、128、256、512。

2.1.2批规范层设计

FTVGG16卷积神经网络在训练过程中每层输入分布一直在改变, 通过在FTVGG16网络每个卷积层后面添加批规范层,使得激活值输出的各个维度的均值为0,方差为1,尺度缩放和平移操作为了还原最初的输入,批规范化有助于规范化模型,使卷积神经网络更容易学习到数据的分布规律,计算公式为

(1)

(2)

(3)

(4)

式中xi——第i个训练样本

m——批量化数目

μB——样本均值σB——样本方差

ε——误差项

yi——线性映射以后的值

γ、β——模型学习参数

BNγ,β(xi)——输出

2.1.3池化层设计

FTVGG16卷积神经网络有5个池化层,这里使用最大池化层max-pooling,池化层主要用于减少图像维度的特征值。池化层的卷积核尺寸是2×2,卷积核的移动步长为2像素,像素不填充,图像经过max-pooling 后尺寸会减小到原来的一半。

2.1.4全连接层设计

FTVGG16网络的全连接层为Fc1、Fc2、Fc3、softmax,全连接层输出的神经元个数分别为4 096、4 096、1 000、8。Fc3全连接层的输出经过softmax层的映射,将实值映射为0到1之间的数值,即等价于输出每个类别的概率。

2.1.5Dropout层设计

Dropout[22]是指在模型训练过程中,对于神经元按照一定的概率暂时从网络中丢弃。对于随机梯度下降来说,由于是随机丢弃,每批次梯度下降(Batch gradient descent,BGD)都在训练不同的网络。Dropout在神经网络训练的过程中随机抛弃隐藏层的神经元,断开神经元的连接,在神经网络反向传播更新参数时,断开的神经元不参与参数的更新。该技术能够有效地防止神经网络过拟合。分别在全连接层Fc1、Fc2后面加入Dropout层,Dropout参数设置为0.5,表示有一半的神经元不参与训练。

综上,设计FTVGG16卷积层网络参数如表2所示。

2.2 FTVGG16网络的优化

2.2.1FTVGG16网络参数的优化

FTVGG16采用Leaky-ReLU[23]激活函数,它的随机梯度下降[24](Stochastic gradient descent,SGD)收敛速度比sigmod、tanh 快,因为是线性的,而且只需要一个阈值就可以得到激活值,不需要进行复杂的运算。

2.2.2损失函数优化

由于识别的是多类别鱼类,故使用多类别交叉熵[25]作为损失函数,其表达式为

表2 FTVGG16卷积层网络参数Tab.2 Layers parameters summarization of FTVGG16’s convolutional networks

(5)

式中l——损失函数N——样本总数

tnk——标注的真实值第n个样本的第k个属性的值,采用one-hot编码

ynk——卷积神经网络预测值第n个样本的第k个属性的值

防止模型过拟合,在损失函数加上正则化项,最终的损失函数表达式为

(6)

式中wi,j——第i层神经元与第j层神经元全连接权重

α——调节因子 ⟸——赋值操作

2.3 FTVGG16网络模型的训练过程

FTVGG16卷积神经网络采用Adam[26](Adaptive moment estimation)优化算法进行训练。Adam利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率,模型训练过程如图5所示。

图5 FTVGG16训练流程图Fig.5 Training flow chart of FTVGG16

系统训练过程步骤如下:

(1)利用Keras框架中的生成器函数,设置批尺寸batch_size为32,通过数据流的形式,从训练样本中每次提取32个样本参与训练,初始学习率learning_rate设置为0.000 01,步长step设置为0.001,训练总轮数epoch设置为50,每次通过生成器从内存中取出batch_size个样本参与一次梯度下降的参数更新,交叉熵损失函数l中的调节因子设置为0.4,模型训练参数值如表3所示。

表3 FTVGG16模型训练参数Tab.3 FTVGG16 model training parameters values

(2)在训练集上进行训练,并且在验证集上获取测试结果。模型训练使用了“早停”技术[27]防止过拟合,随着迭代轮数的增加,如果发现验证误差上升,则停止训练,将停止之后的权重作为模型的最终参数。

(3)神经网络通过前向传播得到预测值,计算预测值和实际值误差,如果误差满足系统所设阈值,终止训练迭代;否则继续进行训练,直至达到系统设置训练轮数上限,停止训练。

(4)返回步骤(1),循环训练。

3 测试结果与分析

3.1 FTVGG16识别结果分析

FTVGG16模型经过24轮训练,在训练集上的准确率为99.43%,在验证集上的准确率为95.89%,模型训练到第30轮时,训练集上的误差几乎降至零,验证集上的误差也接近0.2,说明设计的网络结构和优化算法可以使模型快速收敛,从而达到较高的准确率和较低的误差。此外,模型在验证集上的误差没有上升,说明设计的FTVGG16模型没有出现过拟合,能够较优进行图像识别,FTVGG16模型在训练集和验证集上的准确率、误差如图6所示。FTVGG16模型在训练集、验证集上的测试结果如表4所示。测试结果包括模型的准确率、误差、训练轮数和每轮训练时间。

图6 FTVGG16在训练集和验证集上训练的准确率和误差Fig.6 Accuracy and error of FTVGG16 on training set and validation set

数据集准确率/%误差训练轮数每轮训练时间/s训练集99.430.03462499.40验证集95.890.14722499.40

3.2 FTVGG16与其他模型对比

为了验证FTVGG16模型的识别效果,对比了其他卷积神经网络模型。对比方法均采用5折交叉验证法,比较的预测结果为5次预测结果取平均。不同模型(FTVGG16、VGG16、VGG19、ResNet50)在训练集、验证集上的测试结果如表5所示。结果表明:FTVGG16模型在训练集上的准确率为99.43%,误差为0.034 6;在验证集上的准确率为95.89%,误差为0.147 2,在训练集和验证集上的平均准确率为97.66%,明显高于其他模型的准确率。

3.3 FTVGG16卷积神经网络可视化分析

3.3.1FTVGG16卷积神经网络特征图可视化

卷积神经网络中的卷积操作能够有效提取图像的特征[28],如图7所示。不同卷积层输出的特征由具体到抽象,Conv1_2和Conv2_2层的激活值输出仍保留大部分原始图像信息,靠后的Conv3_3、Conv4_3层输出更多地表达图像的线条、轮廓等抽象特征,最后的Conv5_3仅仅保留了图像的高阶像素信息。通过可视化卷积层的输出,有助于理解卷积神经网络的工作原理,从而更好地改善模型性能。

表5 不同模型在训练集、验证集上的测试结果Tab.5 Test results of different models on training set and validation set

3.3.2FTVGG16卷积神经网络卷积核特征可视化

卷积神经网络中的卷积核可以提取图像不同层次的特征,如图8所示。Conv1_2层中的卷积核可以提取图像像素特征,Conv2_2层中的卷积核可以提取图像的边缘特征,这种边缘特征经过组合可以很好地描述图像的边、角、线条、轮廓特征,靠后的Conv3_3、Conv4_3层中的卷积核更多地提取图像的纹理特征,最后的Conv5_1、Conv5_2中的卷积核通过组合靠前的卷积核提取的特征,重构出图像的形状特征。通过可视化卷积核的输出,可以更好地研究卷积核如何从图像中提取各个层次的抽象特征,进而更好地理解卷积神经网络的工作原理。

图7 FTVGG16部分卷积层输出可视化Fig.7 FTVGG16 partial convolution layers output visualization

图8 FTVGG16部分卷积核输出可视化Fig.8 FTVGG16 partial convolution kernels output visualization

3.4 FTVGG16卷积神经网络在Web中的部署应用

本文使用Python语言编写的轻量级Web应用框架Flask[29],将训练的深度学习模型FTVGG16迁移到实际生产环境,Flask 集成了WSGI(服务器网关接口),为Python应用程序或框架和Web服务器之间提供接口,同时Flask也集成了Jinja2模板引擎,能够快速搭建一个基于Web的应用。Fish identify 鱼类识别系统在部分图像上的测试结果如图9所示,Fish identify的鱼类平均识别精度达到了98%以上,表明系统能够满足实际使用的要求。

图9 鱼类图像的识别示例 Fig.9 Illustration of fish image recognition

4 结论

(1)从深度学习的角度,探讨了卷积神经网络在鱼类识别中的应用,通过分析已有的VGG16卷积神经网络模型良好的图像特征提取能力,设计了FTVGG16卷积神经网络。FTVGG16卷积神经网络由卷积层、批规范层、池化层、Dropout层、全连接层,softmax层组成,采用带有约束的正则权重项作为模型的损失函数,并使用Adam优化算法对模型的参数进行更新。FTVGG16网络在很大程度上能够克服训练的过拟合,收敛速度明显加快,训练时间明显减少,针对鱼类目标很小、背景干扰很强的图像,FTVGG16模型平均准确率为97.66%,对部分鱼的平均识别准确率达到了99.43%,模型具有较高的识别精度和鲁棒性。

(2)虽然FTVGG16模型在识别精度上达到了预期的效果,但是,实际运算过程中需要保存层与层之间的连接权重,会造成内存的负担,增大了计算成本,限制了系统响应。可以进一步从深度模型压缩加速方面进行改进,主要从模型参数修剪和共享、低秩分解、迁移/压缩卷积滤波器和知识精炼[30]方面压缩模型,进而训练一个更加紧凑的神经网络,以再现大型网络的输出结果。

猜你喜欢

集上鱼类准确率
GCD封闭集上的幂矩阵行列式间的整除性
乳腺超声检查诊断乳腺肿瘤的特异度及准确率分析
不同序列磁共振成像诊断脊柱损伤的临床准确率比较探讨
2015—2017 年宁夏各天气预报参考产品质量检验分析
颈椎病患者使用X线平片和CT影像诊断的临床准确率比照观察
基于互信息的多级特征选择算法
鱼类运动会
奇妙的古代动物 泥盆纪的鱼类
师如明灯,清凉温润
几道导数题引发的解题思考