李庆旭 王巧华 顾 伟 施 行 马美湖
(1.华中农业大学工学院, 武汉 430070; 2.农业农村部长江中下游农业装备重点实验室, 武汉 430070;3.国家蛋品研发中心, 武汉 430070)
根据2018年中国畜牧业协会与世界粮农组织(FAO)提供的数据,世界肉鸭出栏量约47.4亿只,蛋鸭存栏量约1.87亿只,我国鸭养殖占世界鸭养殖量的74.3%[1]。这表明我国鸭蛋孵化行业每年需要孵化数十亿只鸭苗才能满足国内养殖需求。但目前国内种鸭的养殖方式以散养为主,导致种鸭蛋的自然受精率低于80%[2]。在孵化过程中若不能将无精蛋及时剔除,不仅会对受精蛋造成污染,而且会造成资源的巨大浪费。当前国内鸭蛋孵化行业判别无精蛋的主要方法是在孵化7 d左右时通过人工照蛋的方式完成,费时、费力,且剔除出来的无精蛋已丧失食用价值,造成巨大浪费。因此,研究孵化早期鸭蛋的受精信息及无损检测与判别具有重要价值和实际意义。
目前,国内外对禽蛋孵化的研究主要集中在鸡蛋孵化方面,研究人员尝试使用机器视觉[3-6]、光谱技术[7-10]、生物电[11-12]等技术手段,结合机器学习方法,实现对孵化早期受精鸡蛋的无损检测。但是针对孵化早期鸭蛋受精信息的研究却鲜有报道。与种鸡蛋相比,种鸭蛋孵化早期受精信息的无损检测难度明显增加。主要原因有:种鸭的养殖方式主要为散养,种鸭蛋的蛋壳表面会有很多难以去除的污渍,导致采集到的图像信息被污渍遮挡;种鸭蛋的蛋壳厚度差异很大(种鸡蛋的蛋壳差异相对较小),导致光源选择难度大大增加。张伟等[13]将机器视觉和敲击振动相结合,建立了LVQ神经网络判别模型,在机器视觉方面仅提取了种蛋的颜色特征,实现了对种鸭蛋孵化5 d时的受精蛋与无精蛋的无损判别,但检测孵化时间还有待提前,以及检测装置的实用性还有待改进。
卷积神经网络(CNN)通过引入权值共享和局部连接等机制,使其能够自动提取特征并表达特征,进而实现端对端的处理方式,智能优势明显。目前CNN在农业检测领域也有较广泛的应用[14-18],但将CNN应用于禽蛋无损检测尚未见报道。本文经过反复试验研究,在Alexnet卷积神经网络基础上,针对种鸭蛋孵化第3天的图像,构建适用于图像识别的卷积神经网络。
试验选取湖北省神丹种鸭养殖基地的缙云麻鸭种蛋2 665枚作为试验材料。
将种鸭蛋清洗并消毒,消毒方法为:将种蛋浸泡在0.5%的高锰酸钾溶液中1~2 min后取出晾干。将晾干后的种蛋进行编号并放入自动孵化箱内孵化。每隔24 h采集一次图像。并在孵化10 d后对种蛋进行破壳处理,蛋壳内有网状血丝判定为受精蛋,坏死的血圈蛋以及无血丝的种蛋判别为不可孵化种蛋(无精蛋)。
种鸭蛋透射图像采集系统设置在孵化车间,由暗箱、光源、相机、镜头、有孔传送带、暗箱支架及计算机组成(图1),相机为JAI AD-080GE型工业相机,分辨率为1 024像素×768像素,帧率为30 f/s,选择Kowa公司的LM6NC3型镜头。光源为5 W的正白光LED灯。种鸭蛋放置于暗箱内,物距、焦距和光圈在采集过程中均保持不变。
图1 图像采集系统原理图Fig.1 Image acquisition system1.计算机 2.数据传输线 3.相机及镜头 4.暗箱 5.种鸭蛋 6.有孔传输带 7.光源 8.暗箱支架
图3 无精蛋原始图像Fig.3 Unfertilized egg original images
受精蛋的原始图像如图2所示,无精蛋的原始图像如图3所示。根据孵化经验,受精鸭蛋在孵化第3天蛋黄部分会出现类似于樱桃形状的珠子。对比图2和图3,发现受精蛋与无精蛋的蛋黄颜色和形状存在差异,但也存在几乎无差异的情况,如图2c与图3b。有孵化经验的技术人员在种鸭蛋孵化第3天,肉眼识别准确率在80%左右,这说明使用卷积神经网络建立种鸭蛋孵化3 d的判别模型是可能的。本文共采集受精蛋图像1 326幅,无精蛋图像1 339幅。
图2 受精蛋原始图像Fig.2 Fertilized egg original images
采集到的原始图像尺寸为1 024像素×768像素,如果将原始图像直接输入卷积神经网络会增加网络的训练时间。由于原始图像含有背景干扰,为了提高神经网络的训练和收敛速度,将原始图像裁剪成尺寸为380像素×350像素的图像,再将裁剪后的图像尺寸调整为224像素×224像素,裁剪后的图像如图4所示。此外为了加快模型的收敛速度,将调整后的图像进行归一化操作。本文使用的图像预处理工具为Python3.5+Pillow。
2.2.1Alexnet神经网络
Alexnet神经网络是由HINTON和KRIZHEVSKY设计的8层神经网络[19],包括5个卷积层、3个全连接层、3个池化层,卷积层主要用于自动提取特征,池化层对卷积层提取的特征图进行降维,以减少模型的参数量,全连接层通过大量神经元之间的相互连接将卷积或池化操作得到的特征图重新组成完整的图,具体结构如图5所示。
图4 裁剪后的图像Fig.4 Cropped images
图5 Alexnet神经网络结构图Fig.5 Alexnet neural network structure diagram
Alexnet神经网络使用ReLU非线性激活函数解决网络过深时梯度弥散问题。此外,Alexnet神经网络引入局部响应归一化层(LRN)和dropout层,可以防止模型过拟合。
2.2.2种鸭蛋受精信息识别网络
Alexnet神经网络虽然已被应用在很多领域[20-22],但是其学习参数有6×107个,神经元数量有6.5×105个,导致Alexnet神经网络训练速度过慢且存在一定程度的过拟合[23-24]。Alexnet神经网络的数据集建立在ImageNet上,本文充分对比种鸭蛋孵化3 d时的图像和ImageNet数据集的图像质量差异,相比ImageNet数据集种鸭蛋孵化3 d的图像背景更加简单,干扰因素更少,图像的特征(种蛋的蛋黄部分)更加清晰,这些差异使得本文的卷积神经网络参数量可以适当减少。故本文对Alexnet神经网络进行了改进,将 Alexnet神经网络的卷积层1的卷积核尺寸由11×11改为5×5,更改后感受野的范围不变但是参数量大幅减少。由于种鸭蛋孵化3 d的图像特征比较明显,可以适当减少卷积核个数,提取的特征数量略有减少,但是可以减少参数量加快模型的收敛,故将卷积核数量改为64个,可大大减少学习参数的数量。由于卷积层1已经将参数量大幅减少,为了防止模型参数过少导致欠拟合,故将本层的卷积核数量改为192,可增加提取的特征数。由于参数过多容易造成过拟合,故本文用卷积核(核数量为1 024)尺寸为6×6的卷积层代替全连接层1,可以避免过拟合,用卷积核(核数量为1 024)尺寸为1×1的卷积层代替全连接层2;由于本文将孵化3 d的种鸭蛋图像分为受精和无精两类,故将最后的输出层输出类别改为2个;改进后的Alexnet神经网络既可以减少神经元的数量,又可以避免由于参数过多造成的过拟合。
改进后的Alexnet神经网络具体实现过程如下:将种鸭蛋孵化3 d的原始图像调整为224像素×224像素后输入到卷积层1,卷积层1的卷积核尺寸为5×5,卷积核数量为64个,卷积后的输出特征尺寸为55×55×64;卷积层1的输出特征图进入到池化层1,其核尺寸为3×3,步长设置为2,池化后的输出特征尺寸为27×27×64。池化层1的输出特征图进入到卷积层2,其卷积核尺寸为5×5,卷积核数量为192个,卷积后的输出特征尺寸为27×27×192。卷积层2的输出特征图输入到池化层2,其核尺寸为3×3,步长设置为2,池化后的输出特征尺寸为13×13×192。池化层2的输出特征图进入到卷积层3,其卷积核尺寸为3×3,卷积核数量为384个,卷积后的输出特征尺寸为13×13×384。卷积层3的输出特征图输入到卷积层4,其卷积核尺寸为3×3,卷积核数量为384个,卷积后的输出特征尺寸为13×13×384。卷积层4的输出特征图输入到卷积层5,其卷积核尺寸为3×3,卷积核数量为256个,卷积后的输出特征尺寸为13×13×256。卷积层5的输出特征图输入到池化层3,其核尺寸为3×3,步长设置为2,池化后的输出特征尺寸为6×6×256。池化层3的输出特征图输入到卷积层6,其卷积核尺寸为6×6,卷积核数量为1 024个,卷积后的输出特征尺寸为1×1×1 024。卷积层6的输出特征图输入到卷积层7,其卷积核尺寸为1×1,卷积核数量为1 024个,卷积后的输出特征尺寸为1×1×1 024。卷积层7的输出特征图输入到输出层,最后经过softmax函数输出受精和无精两类的二维得分矩阵。改进后的Alexnet神经网络结构如图6所示。
图6 改进后的Alexnet神经网络结构图Fig.6 Improved Alexnet neural network structure diagram
改进后的Alexnet神经网络共8层,7个卷积层和1个输出层。在每个卷积层后都使用ReLU非线性激活函数,卷积层1和卷积层2后使用局部响应归一化层[25-26](LRN),在卷积层6、7后使用dropout层来防止过拟合。ReLU激活函数可以将数据变成稀疏矩阵,可以加快模型的收敛速度,其实现公式如下
(1)
LRN层可以对输入的局部区域进行归一化处理,可一定程度提高模型的精度,其具体实现公式如下
(2)
N——卷积核数量
n、k、α、β——常量
j——平方累加索引
dropout层可以提高模型的泛化能力,通过随机关闭一些神经元来达到防止网络过拟合的效果[27]。
2.2.3模型训练
系统的硬件为 AMD Ryzen Threadripper 2920X CPU,主频3.5 GHz,内存为128 GB, NIVIDIA GeForce RTX 2080Ti GPU;软件平台为CUDA Toolkit 9.2+CUDNN V9.2+Python 3.5+Tensorflow-GPU 1.8.0。由于深度学习需要大量的数据进行训练,本文在采集得到的2 665幅种鸭蛋孵化3 d的图像中抽取2 400幅图像(受精和无精各1 200幅图像)用于训练,剩下的265幅图像用于测试。本文训练和测试时均使用GPU加速。
模型训练的本质是通过反向传播不断迭代使得定义的损失函数(Loss function)不断减小。本文采用自适应时刻估计法(Adaptive moment estimation)实现迭代过程中寻找最优梯度下降方向。学习率更新方法为指数衰减法,可以兼顾模型的稳定性和训练速度。
采用均值平方差计算分类损失,用来表达预测值与实际值的差异。损失函数公式如下
(3)
式中m——样本数
yt——第t个样本的真实值
pret——第t个样本的预测值
初始学习率(Learning rate)设置为0.000 1,训练的批次样本数(Batch size)设置为16,网络模型的权重参数和偏置参数初值用均值μ为0、标准偏差σ为0.01的截断正态分布随机生成。模型的训练和测试流程如图7所示。
图7 模型训练和测试流程Fig.7 Model training and testing process
图8 loss变化曲线Fig.8 Changing curve of loss
模型在训练次数达到20 000次后结束训练并保存,训练过程中的损失函数变化如图8所示。训练过程中每训练20次保存1次loss,故loss曲线不够平滑。从loss曲线可以看出,在训练的前12 000次时loss处于振荡状态,在训练12 000次后loss开始迅速下降,并维持在很低水平,表明模型在训练12 000次后开始收敛。将训练集2 400幅图像(受精和无精各1 200幅)和测试集265幅图像(受精126幅图像,无精139幅图像)输入训练好的模型进行验证。为了对比Eggnet神经网络和Alexnet神经网络在判别种鸭蛋孵化3 d受精信息的性能差异,本文也将数据输入Alexnet神经网络进行训练,训练参数设置与Eggnet神经网络相同。两个网络的验证结果如表1所示。
分别对比两者的训练集准确率、测试集准确率和测试集召回率,发现Alexnet神经网络和Eggnet神经网络均未出现过拟合现象。其中Alexnet神经网络对训练集的2 400幅图像错判了5幅(受精蛋错判了5个,无精蛋错判0个),对测试集的265幅图像错判了3幅(受精蛋错判0个,无精蛋错判3个)。Eggnet神经网络对训练集的2 400幅图像错判了2幅(受精蛋错判了2个,无精蛋错判0个),对测试集的265幅图像错判了3幅(受精蛋错判2个,无精蛋错判1个)。两者虽然在训练集和测试集的精度上区别不大,但是对比两者的召回率发现,Eggnet神经网络在判别种鸭蛋孵化3 d的受精信息方面的性能略优于Alexnet神经网络。且两者的训练时间差别较大,Eggnet神经网络由于学习参数和神经元数量大大减少,训练时间仅为Alexnet神经网络的1/3。单枚种蛋检测时间仅为0.24 s,能够满足在线检测的速度要求。
表1 模型测试结果Tab.1 Model test results
图9 模型验证流程图Fig.9 Model verification process
为了验证Eggnet神经网络的泛化能力,本文进行了验证试验,试验条件与之前保持相同。验证试验共采集得到640幅种鸭蛋图像,其中受精蛋与无精蛋图像各320幅。先将图像裁剪且将尺寸调整为224像素×224像素,然后将图像进行归一化处理,最后传递给训练好的Eggnet模型,模型输出最终判别结果。判别过程如图9所示,判别结果表明,320枚受精蛋错判了6枚,受精蛋判别准确率为98.13%,320枚无精蛋错判了7枚,无精蛋判别准确率为97.81%。验证试验精度达到97.97%,表明Eggnet神经网络具有较好的泛化能力,模型的可靠性和效率较佳。
(1)采用端对端的卷积神经网络,不必手工提取特征,解决了传统识别方法在提取特征时费时、费力的问题。
(2)卷积神经网络可以很好地对孵化3 d的种鸭蛋受精信息进行自动提取,并且能够将受精信息较好地表达出来,测试集准确率达到了98.87%,验证准确率达到了97.97%,能够满足在线检测的精度要求。
(3)通过将Alexnet神经网络的卷积核尺寸改小,全连接层用卷积层代替,可以大大减少模型学习参数和神经元的数量。Eggnet神经网络的训练时间仅为Alexnet神经网络的1/3。
(4)在卷积神经网络中加入LRN层和dropout可以加快模型收敛并抑制模型的过拟合。