基于ResNet50和迁移学习的红鳍东方鲀病鱼检测方法
2021-08-26张方言周弈志胥婧雯李海清程思奇吴俊峰
张方言,赵 梦,周弈志,胥婧雯,李海清,程思奇,吴俊峰,于 红
(1 大连海洋大学信息工程学院,辽宁 大连 116023;2 设施渔业教育部重点实验室,辽宁 大连 116023;3 辽宁省海洋信息技术重点实验室,辽宁 大连 116023)
红鳍东方鲀(Takifugurubripes)是一种名贵的海水鱼,是近年来工厂化循环水养殖的主要品种。随着养殖规模不断扩大和养殖密度不断提高,病害问题时有发生,如果不能及时检测病鱼,将会导致疾病蔓延,给养殖企业带来巨大的经济损失[1-2]。
红鳍东方鲀受细菌感染后会在皮肤表面出现变色或腐烂等现象[3],传统的红鳍东方鲀病鱼检测主要通过养殖技术人员人工观察进行判断,一方面耗费人力,另一方面不能保证及时性和准确性。随着人工智能技术的发展,机器视觉在鱼类检测方面得到了广泛的应用[4-6]。孟祥辉等[7]提出了一种基于机器视觉的养殖大黄鱼弧菌病检测技术,对大黄鱼的图像信息进行处理,把大黄鱼的颜色空间转换到HSV或者HIS空间,提取大黄鱼的图像颜色直方图,最后通过分析颜色直方图发现病鱼。胡静等[8]提出一种基于机器视觉的鲤科病鱼图像快速处理方法,通过对病鱼皮肤图像进行特征提取和鱼类常见病病斑图像分割,从而设计出一种病鱼彩色图像快速处理方法。这两项工作均采用传统的机器视觉方法进行病鱼检测,检测的准确率不够高。随着深度学习的发展,深度学习在目标检测[9-11]方面取得了显著的成效。Chen等[12]提出的基于深度学习的自动鱼类分类系统,在鱼类分类中取得了良好的成效;Chuang等[13]提出水下鱼物种识别的有监督和无监督的特征提取方法,在鱼类物种识别中取得了良好的效果;陈英义等[14]提出基于FTVGG16卷积神经网络的鱼类识别方法,对鱼类特征进行提取,在鱼类识别中取得了良好的成效; Iqbal等[15]提出一种使用深度卷积神经网络对鱼类进行识别和分类的自动化系统,为鱼类的检测和分类提供了新方法;Chhabra等[16]提出的一种用于鱼类自动分类检测的深度学习方法,采用混合深度学习模型对鱼类进行分类检测,为鱼类的分类检测提供了新思路;贾宇霞等[17]提出的基于显著性增强和迁移学习的鱼类识别研究,为鱼类的识别提供了新手段。上述研究结果表明,这些利用深度学习技术的图像识别案例预示着深度学习在红鳍东方鲀病鱼检测中的可能性,并为红鳍东方鲀病鱼的识别提供了理论依据。
然而深度学习需要大量的数据,并且要求训练集、验证集和测试集符合一定的数据分布,在红鳍东方鲀病鱼识别领域,存在着可用的红鳍东方鲀病鱼数据较少、检测准确率不高等问题。提出了一种基于ResNet50和迁移学习的红鳍东方鲀病鱼检测方法。
1 材料与方法
1.1 原始图像的获取
本研究主要对红鳍东方鲀健康鱼和病鱼进行分类检测,因此需要搜集红鳍东方鲀健康鱼和病鱼图像数据。数据主要来自红鳍东方鲀养殖场水下摄像头拍摄、手机拍摄和在网上下载,共获取数据样本850幅,水下摄像头和手机拍摄图片共650幅,网上下载200幅。其中红鳍东方鲀病鱼图片136幅,健康红鳍东方鲀图片714幅。在拍摄过程中,拍摄了红鳍东方鲀不同位置和不同姿态的图片。部分拍摄的健康红鳍东方鲀示例如图1a所示,图1b是网上下载的健康红鳍东方鲀,图1c是手机拍摄的红鳍东方鲀病鱼。
图1 红鳍东方鲀示例Fig 1 Example of Takifugu rubripes
1.2 数据预处理
由于原始数据来源不一,尺寸不同,格式有差异,无法放在同一个模型中训练,为了保证数据的规格、尺寸相同,格式一致,需要进行数据预处理,主要包括以下预处理方法:
(1)图像样本归一化:由于拍摄的红鳍东方鲀图像和网上下载的图像尺寸不同,而卷积神经网络模型要求输入图片尺寸相同,以便卷积层对图像进行卷积处理,因此,使用OpenCV中的cv2.resize()函数将数据集中所有的红鳍东方鲀图像数据进行归一化处理,尺寸统一224×224(像素)。
(2)图像像素值处理:由于不同图像数据的格式不同,为了保证数据格式的一致性,将JPG格式的图像转换为RGB三通道的矩阵向量存储。
1.3 数据增广
由于原始数据样本数比较少,特别是病鱼样本获取困难,而样本数量少将会大大影响深度学习的学习效果,因此需要采用数据增广[18-19]的方式增加病鱼样本数,根据红鳍东方鲀养殖环境的特点和病鱼发病的症状特点,提出了翻转、色度变化、明暗变化、旋转、随机裁剪和添加噪声等数据增广方法。
(1)翻转:对图像进行水平翻转、垂直翻转和先水平翻转再垂直翻转。(2)色度变化:色度增强因子为0.5,对图像色度进行改变。(3)明暗变化:明暗增强因子为0.4和1.6,对图片的亮度进行改变。(4)旋转:分别对图片进行30°和60°旋转。(5)随机裁剪:对图片进行不同部位的裁剪。(6)添加噪声:对图片加入信噪比为0.9的椒盐噪声或者高斯噪声。
对图片进行翻转、旋转和随机裁剪,模拟采集样本时拍摄的随机性;色度的变化、明暗变化和饱和度变化,模拟光照和颜色的差异,并保证图片符合现实拍摄情况;添加噪声,模拟拍摄时产生的噪声。通过数据增广,把数据集扩充至2 461张,其中病鱼数量为421张,健康鱼数量为2 040张。数据预处理结果示例如图2所示。
图2 部分预处理图片Fig.2 Partial preprocessing images
对训练集、验证集和测试集按照6∶2∶2的比例进行划分,即从扩充后的2 461幅图片中选取健康的红鳍东方鲀1 224幅图片和红鳍东方鲀病鱼253幅图片进行标注,作为训练集,408幅健康红鳍东方鲀图片和84幅红鳍东方鲀病鱼图片作为验证集,其余的408幅健康红鳍东方鲀图片和84幅红鳍东方鲀病鱼图片作为测试集。
2 基于ResNet50网络和迁移学习的红鳍东方鲀病鱼检测
2.1 模型结构
针对传统机器学习在目标识别方面的性能不足、人工提取特征复杂性高、深度学习在网络深度较深时会出现网络退化、卷积过程中造成图片缩小会导致信息缺失以及红鳍东方鲀病鱼样本少等问题,提出了一种基于ResNet50网络和迁移学习的红鳍东方鲀病鱼检测方法。因为深度学习需要用大量的数据进行训练才能取得较好的效果,而现实生活中可用的红鳍东方鲀病鱼样本数量较少,直接使用深度学习模型训练难以取得好的效果,而迁移学习是解决小样本学习的有效方法[20-22]。为解决红鳍东方鲀病鱼检测样本少的问题, 采用了迁移学习的方法优化红鳍东方鲀病鱼检测模型。
考虑到迁移的源数据需要有足够大量的样本数据,因此选择ImageNet数据集[23]作为源数据,虽然ImageNet数据集与红鳍东方鲀图像数据集存在差异,但是ImageNet数据量足够大,而且图像的边缘、颜色和纹理特征是不变的、通用的,可以用ImageNet学习图像的底层特征,再将学习到的底层特征迁移到红鳍东方鲀病鱼检测模型中,因此提出基于ResNet50和迁移学习的红鳍东方鲀病鱼检测模型,模型结构如图3所示。首先,在ImageNet数据集上对ResNet50深度学习网络模型进行预训练;其次,将ResNet50深度学习网络模型卷积模块学习到的边缘、颜色和纹理这些图像共有的底层特征,迁移到用于检测红鳍东方鲀病鱼的网络模型的残差网络层作为初始化参数;然后,把提取到的特征图作为输入对红鳍东方鲀病鱼检测模型进行训练,并在ResNet50网络结构的最后一层卷积层后加入反卷积层将图像恢复到原像素空间内,以达到恢复细节信息的目的;最后,连接3个全连接层以增强模型的特征表达能力。主要包括预训练、迁移学习、反卷积和病鱼检测4个步骤,下面详细阐述每一部分的具体内容。
图3 基于ResNet50网络和迁移学习红鳍东方鲀病鱼检测模型Fig.3 Detection model of Takifugu rubripes based on ResNet50 and Transfer learning
2.2 预训练
由于深度学习需要大量训练数据,红鳍东方鲀病鱼数量较少,所以采用了迁移学习的方法,在迁移学习的过程中首先要进行预训练,预训练过程为:在大型数据集ImageNet上利用ResNet50网络进行预训练,从而得到预训练权重作为网络的初始化参数。RestNet50残差网络[24-25]是在现有训练深度网络基础上,提出的一种具有易优化、计算负担小等优点的残差学习框架。残差的设计是用来解决退化和梯度问题,使得网络的性能在深度增加的同时也得以提升,而且残差块中的跳跃连接采用的是恒等映射,并没有引入额外参数,也没增加计算复杂度,因此采用ResNet50网络对红鳍东方鲀病鱼进行预训练。
RestNet50中包含了49个卷积层和1个全连接层,第二阶段至第五阶段中的IDBLOCK 是不改变维度的残差块,CONVBLOCK是添加维度的残差块,每个残差块包含3个卷积层,所以有1+3×(3+4+6+3)=49个卷积层,结构如图4所示。其中CONV是卷积操作,Batch Norm是正则化处理,也就是常说的BN,ReLU是激活函数,MAXPOOL和AvgPOOL是最大池化层和平均池化层。由图4可看出ResNet50是由多个残差块堆叠起来的,用这些残差块可以训练深层网络。
图4 ResNet50模型Fig.4 ResNet50 model
残差块如图5所示,其中x表示输入,F(x)表示残差块在第二层激活函数之前的输出,W1和W2表示第一层和第二层的权重,H(x)是最后残差块的输出,在第二层输出值激活前加入x,该路径称作shortcut连接。
图5 残差块Fig.5 Residual Block
当没有shortcut(即图5右侧从x到⊕的箭头)时,残差块就是一个普通的两层网络,此时学习的目标是H(x)=F(x),如图5所示,第二层网络在激活函数之前的输出为H(x),如果在该两层网络中,最优的输出就是输入x,那么对于没有 shortcut的传统网络,就需要将其优化成H(x)=x;对于残差网络结构,其学习的目标是H(x)=F(x)+x,如果最优输出是x,则只需要将F(x)=H(x)-x优化为0,即此时网络只需使得H(x)=x,也就是恒等映射,其定义如公式(1)和公式(2)所示。
F(x)=W2g(W1x)
(1)
H(x)=F(x)+x
(2)
式中:W1和W2表示第一层和第二层的权重,表示ReLU激活函数。此时只需要把F(x)=0,就可以转化成前面所说的恒等映射函数,即:H(x)=0。此时,问题转换成残差函数问题,其定义如公式(3)所示。
F(x)=H(x)-x
(3)
在ResNet50残差网络中,通过使用16个残差块的堆叠,构建出了深度达到50层的卷积神经网络,从而使得网络对图像的特征提取能力更强,识别准确率也更高。而且残差块中捷径连接采用恒等映射,使得其中一层输出可以跨过几层作为后面某一层的输出,直接进行恒等映射操作,没有引入额外的参数和计算复杂度,因此用包含16个残差块堆叠的ResNet50残差网络进行预训练。
2.3 迁移学习
迁移学习[26]是指把已经训练好的模型参数迁移到新的模型上帮助训练,主要思想是通过在一个已有的大型数据集上预训练一个CNN,然后使用预训练好的CNN权重作为初始化权值,迁移到目标数据集上进行训练和微调,在没有足够样本的情况下,训练过程中容易出现训练困难和过拟合问题,迁移学习可以解决由于样本少而出现问题。为了解决红鳍东方鲀病鱼样本少的问题,提出基于ResNet50网络和迁移学习的红鳍东方鲀病鱼识别方法,在ImageNet数据集上进行迁移,相对于红鳍东方鲀病鱼数据集,ImageNet数据集数据量和种类都非常丰富,尽管ImageNet数据集中红鳍东方鲀病鱼图片数量不多,但是主要通过颜色和纹理等特征对红鳍东方鲀病鱼识别,因此特征迁移模型更多的关注还是特征学习的能力。所以用ImageNet数据集作为源数据可以提取到更多的图像空间信息特征,即颜色特征和纹理边缘特征等,从而迁移到红鳍东方鲀病鱼识别的问题上。首先将已在ImageNet数据上预训练好的ResNet50网络中全连接层之前部分保留参数迁移过来,然后采用训练模型全层的迁移学习方法对输入的红鳍东方鲀病鱼和健康鱼数据集进行训练,从而得到基于ResNet50网络和迁移学习的红鳍东方鲀病鱼检测模型,最后进行模型预测。
2.4 反卷积
反卷积[27-30](deconvolution)也称为转置卷积,卷积操作是将图片经过卷积后得到特征图,而反卷积操作刚好相反,现假设输入图片为x,特征图为y,卷积操作可表示为y=Cx根据矩阵的运算性质可知,反卷积的过程则是x=CTy。采用卷积过程中转置后的卷积核对特征图进行反卷积,并且由于其相反于卷积操作的特性还可以将特征图放大。之所以使用反卷积是因为卷积核池化的过程中,会使特征图变得越来越小,并且卷积层数越多,特征图就越小,使用反卷积保证了特征信息尽可能少的丢失。卷积操作尺寸的公式如下:
(4)
现在通过反卷积将特征图还原到原图尺寸大小,计算公式为:
i=s(o-1)+k-2p
(5)
式中:o表示输出特征图尺寸,i表示输入特征图尺寸,k表示卷积核尺寸,s表示步长,p表示边缘扩充。
反卷积对每一步长的图片进行放大的示意图如下所示,其中图6 a表示对卷积后的第1个像素点进行放大;图6 b表示对第2个像素点进行放大;图6 c表示对第3个像素进行放大;图6 d表示对第4个像素点进行放大。
图6 反卷积示意图Fig.6 Schematic diagram of deconvolution
提出的模型在ResNet50网络的最后一层卷积池化后加入反卷积层,利用反卷积网络对特征图进行上采样并学习特征,最后将特征图上采样到原图像的像素空间,使得特征图得以恢复,运用反卷积这一特性来补偿细节信息,从而使网络学习到更多的特征信息,准确进行特征提取,然后计算损失反馈到网络中训练,对红鳍东方鲀图像进行检测。加入反卷积后,逐渐将特征图放大到原图大小,一方面保证了特征图信息尽可能少的丢失,另一方面反卷积层也要进行特征学习,帮助更准确地完成红鳍东方鲀病鱼的检测。
2.5 红鳍东方鲀病鱼检测
基于ResNet50网络和迁移学习的红鳍东方鲀病鱼检测,首先在建立的红鳍东方鲀数据集上完成红鳍东方鲀病鱼检测模型的训练,然后将测试集图片输入到训练完成的检测模型,如果是红鳍东方鲀病鱼,则输出红鳍东方鲀病鱼及预测准确率,如果不是红鳍东方鲀病鱼,则检测结果为非病鱼。
3 试验
3.1 试验环境
试验环境为intel xeon E5-2630 v3 2.4GHZ处理器,6 GB内存,操作系统为Ubuntu16.04 LTS 64 bit。软件选择Anaconda python 3.6,开源深度学习框架pytorch,版本为1.1.0。
3.2 评价标准
试验评价病鱼检测准确率(accuracy)如公式(6)所示。
(6)
式中:A表示准确率(%),A的值越大代表模型的性能越好;x表示检测正确样本数(条);y表示检测样本总数(条)。
3.3 试验方案设计
为验证本研究中所提出的方法对鱼类病鱼检测的结果,设计了以下对比试验:(1)对载入权重后训练所有参数(训练预训练网络全层)与冻结ResNet50其他层参数只训练全连接层进行对比试验。(2)运用迁移学习ResNet50网络和在ResNet50网络模型的基础上对其进行优化,在特征提取模块运用残差网络层加反卷积层进行试验对比。(3)分别在ResNet18、ResNet34、ResNet101和ResNet152等不同深度残差网络上进行试验得出检测结果与本研究基于ResNet50和迁移学习的方法进行对比。(4)本研究方法分别与PD2SE-Net计算机辅助植物病害诊断和严重程度估计网络[31]、多尺度融合卷积神经网络的黄瓜病害叶片图像分割方法[32]、改进Faster R-CNN的田间苦瓜叶部病害检测[33]中的方法进行对比试验。
3.4 试验结果
为了验证基于ResNet50网络和迁移学习的红鳍东方鲀病鱼检测模型的性能,本研究在训练过程中选择Adam优化算法进行训练;其中Dropout设置为0.5,避免过拟合现象的发生;初始学习率lr设置为0.000 1;设置批尺寸batch_size设置为8,即每次从训练样本中提取8个样本进行训练;训练总轮数epoch设置为40,每次通过生成器从内存中取出batch_size个样本参与一次梯度下降的参数更新。使用以上参数进行试验,试验结果如图7所示,在训练过程中,本研究方法的每次epoch的accuracy和loss都达到了一个很好的结果,loss得到了一个很好的收敛,红鳍东方鲀病鱼检测精度达到了99%。由accuracy的曲线可以看出,基于ResNet50网络和迁移学习的红鳍东方鲀病鱼检测中,在第11次迭代之后准确率就保持不变了,说明所提出的方法并不需要很多次迭代就能达到一个很好的效果,迁移学习降低了训练成本,加快了训练速度。
图7 准确率和loss值变化曲线Fig.7 Curve of accuracy and loss value
经试验表明:冻结ResNet50其他层参数只训练全连接层准确率为94.6%,运用训练全部层的迁移学习的方法对红鳍东方鲀病鱼检测的准确率达到了98.6%,表明了本研究所用数据集和ImageNet数据集,还是有一定的差别,只对全连接层进行训练只学习了一些底层特征,无法把病鱼特征全部表达出来,然而对其重新训练全部层,使得模型不但学习到了一些共有的底层特征,而且使得模型对病鱼的特征表达能力更强;运用迁移学习ResNet50网络的方法准确率为98.6%,然而,加入反卷积层后,在红鳍东方鲀病鱼的检测上准确率达到了99%,准确率提高了0.4%,说明在特征提取模块采用残差网络加反卷积层,有效地学习了在卷积过程中图片缩小的过程中丢失的一些信息,反卷积的过程中,使得丢失的信息得到了补偿,从而使得模型精度有所提升;在ResNet18、ResNet34、ResNet101、ResNet152及基于ResNet50和迁移学习的方法准确率分别是88.2%、92.4%、92.8%、93.4%和99%。从试验结果可以看出,与不同深度残差网络进行对比,本研究方法在红鳍东方鲀病鱼检测上精确度达到了99%,高于其他不同深度的残差网络,表明了本研究方法,相对于其他不同深度的残差网络,在病鱼的特征提取能力上更强,病鱼的检测精度也更高,对红鳍东方鲀病鱼的检测上有着很好的效果;(4)PD2SE-Net:计算机辅助植物病害诊断和严重程度估计网络、多尺度融合卷积神经网络的黄瓜病害叶片图像分割方法、改进Faster R-CNN的田间苦瓜叶部病害检测中的方法准确率分别是98%、92%和86%,而本研究方法准确度达到了99%,与其相比,本研究方法解决了样本少和过拟合的问题,提高了病鱼检测的准确率,使得网络在学习病鱼特征时,网络对病鱼特征的表达能力更强,具有较好的泛化性。
通过以上对比试验表明,本研究方法可达99%的精度,但是仍存在约1%的误差,影响因素主要有以下几方面:(1)数据量较少,深度学习是以海量数据作为支撑的,运用迁移学习的方法在一定程度上解决了数据少的问题,但是,由于整体数据量较少,因此还有一些红鳍东方鲀病鱼特征无法识别,从而产生误差。(2)水中拍摄噪声影响,由于有些图片来源于水中拍摄,从而产生一些噪声,如气泡等,对红鳍东方鲀表面产生影响,导致模型检测产生误差。(3)红鳍东方鲀病鱼特征表现不明显,通过模型对测试集进行检测,并对召回测试集中的检测结果进行分析。发现有些病鱼特征表现不明显,使得模型误识别,产生误差。
4 结论
为了解决红鳍东方鲀病鱼样本少和准确率不高的问题,提出一种基于ResNet50网络和迁移学习的红鳍东方鲀病鱼检测方法。本研究方法可以自动地提取病鱼特征,并且模型对病鱼检测达到了一个很好的效果,解决了传统人工检测病鱼耗时耗力的问题,为检测红鳍东方鲀病鱼提供了有效指导和思路。但是,模型仍存在一点误差,下一步工作主要为以下两方面:(1)对所构建的红鳍东方鲀病鱼数据集进行扩充,建立一个更大、病鱼种类更多的数据集进行训练,提高模型的泛化性。(2)对模型结构和参数进一步优化,提高模型对红鳍东方鲀病鱼检测的准确率。
□