郑志强,胡 鑫,翁 智,王雨禾,程 曦
(内蒙古大学电子信息工程学院,呼和浩特 010021)
(*通信作者wzhi@imu.edu.cn)
畜牧业是农业的重要组成部分,智能化管理是提升畜牧业发展质量的重要手段,因此动物个体智能识别技术的研究成为了学者们的关注热点。相较于耳标与烙印,基于生物特征的个体识别技术因其对动物健康更有利而得到人们的重视。其中图像识别是最主要的实现方式,它在大数据支撑下对网络进行自主学习优化,通过深度学习对目标图像数据进行生物特征提取,完成个体识别,因此从图像数据中精准提取目标个体的生物特征成为实现高精度动物个体识别的关键。
在基于图像的动物个体识别中,传统方法是提取目标个体的颜色[1]、形状[2]和纹理[3]等特征完成个体识别,而虹膜特征则是较为准确的差异化特征。方超等[4]提出利用边缘特征对牛眼虹膜进行精准定位,进而提取虹膜特征实现牛个体识别;Lu等[5]通过几何方法拟合分割牛眼虹膜,提取局部特征与全局特征并编码作为识别特征;Barron等[6]利用双视网膜系统进行绵羊个体识别,采用基于OR 逻辑运算符和匹配分数求和的决策准则提高准确率。传统的虹膜算法已经取得一定成果,但仍面临着小样本导致的泛化能力不足、鲁棒性不强、算法设计较复杂等问题。
在这样的需求下,神经网络出现在人们的视野中。神经网络是通过对大量的数据进行深度学习,分析每一类别图像的像素排布规律,最后自动对该类图像进行特征提取识别。目前神经网络被广泛应用于生活的各个领域,如机器翻译[7]、唇语识别[8]、视频换脸[9]等。人们也开始将神经网络应用于畜牧业,如Trokielewicz 等[10]利用卷积神经网络提取马匹的虹膜特征与眼部特征来完成马匹身份识别;Nguyen 等[11]则对野生动物图像使用卷积神经网络进行特征提取并完成分类;de Arruda 等[12]首先利用热图像与SLIC(Simple Linear Iterative Clustering)分割算法完成对目标的定位,然后利用卷积神经网络提取RGB 图像中定位区域的特征信息,完成对野生动物的分类。
基于虹膜图像的个体身份识别不会损害动物的健康,且虹膜特征具有个体差异,识别精度更高,但是相关数据的采集较为困难,除了需要专业设备,动物个体对眼部图像采集也有一定的抗拒性,难以配合完成;同时,动物眼部睫毛遮挡、采集时的光照等也会降低图像质量,使得虹膜特征不易提取,所以基于虹膜特征的动物个体识别的实用性不高。为此,本文提出了一种新的实用性较高的识别方式,利用DenseNe(tDense convolutional Network)[13]对整个牛眼图像进行特征提取识别,同时针对小数据集的情况对DenseNet 进行改进,提高了网络对小数据特征的提取能力,增强网络的泛化能力和迁移性,改进后的网络更加经济便利,能方便应用于畜牧场。
DenseNet[13]是Huang 等于2017 年提出的最优深度模型,该网络借鉴了ResNet[14]与GoogLeNet[15]的优点,将跨连接充分应用到了模块内的每一个特征层,即任一卷积层的输入直接包含了前面所有卷积层的输出,特征得到充分复用,高低层次的特征融合使得网络具有较强的抗过拟合性能,且参数量更小,跨连接的应用也缓解了层数加深而导致的梯度消失问题。DenseNet 结构的核心为DenseBlock 和Transition layer,Huang 等[13]提出三种基本结构分别为DenseNet、DenseNet-B和DenseNet-BC。DenseNet-B 是在DenseNet 的基础上,在DenseBlock 内部加入了1×1 的卷积核,旨在降低每一层的输入特征图的维度,减少计算量;DenseNet-BC 结构基于DenseNet-B,在Transition layer 内加入一个压缩率参数θ,根据不同的实际需求设置参数值,可以将上一个DenseBlock 输出的特征图维度降低相应的比例,有效减少由于网路层数增加产生的巨大计算量。因此,本文采用DenseNet-BC 网络。该网络整体流程结构如图1 所示,结构核心为DenseBlock 和Transition layer。
图1 DenseNet-BC网络整体流程结构Fig.1 DenseNet-BC network overall process structure
DenseNet-BC 网络结构首先采用7×7 卷积对输入图像进行初步的下采样和降维,再对多个DenseBlock 与Transition layer 依次进行级联实现特征提取,最后利用提取到的特征完成分类。DenseBlock 模块的网络结构如图2 所示,由四个Denselayer 连接组成,其中每一层均实现了稠密连接,层内包含批归一化层(Batch Normalization,BN)、激活函数、卷积层,由1×1 卷积核构成的卷积层实现通道降维、减少计算量。DenseBlock 模块内的稠密连接指任一层的输入特征包含了模块内前面所有层的输出特征,卷积层输入计算公式为:
图2 DenseBlock内部结构Fig.2 DenseBlock internal structure
其中:I2、I3、I4、I5分别表示H2、H3、H4、H5的输入;k0表示最开始的输入特征图通道数;k表示网络的通道增长率。根据式(1)~(4)可以看出:DenseNet通过对DenseBlock 模块内前面所有层的输出特征通过拼接得到当前层的输入特征;同样,当前层的输出特征也是模块内后面所有层的输入特征的一部分,卷积层输出特征的高频复用,极大地增强了不同层次特征的融合利用;同时跨连接也可以避免梯度消失问题,为了防止大量特征拼接导致计算成本过高,任一层的输出特征都通过降维得到较小的通道维度。
Transition Layer 的应用主要是为了降低稠密模块输出特征维度,避免拼接操作造成的特征通道维度过大,同时要实现特征下采样以输入下一稠密模块进行特征提取。Transition Layer 通过1×1 的卷积核实现特征通道降维,通过2×2 平均池化层实现特征下采样,而通道降维的相关参数为压缩率θ,θ是一个0~1 的参数,代表降维的比例,本文θ取0.5,即将通过卷积核后的特征图数量减少一半。
本文针对牛眼部图像提取特征完成个体识别,所以除了形状、颜色等特征外,需要进行语义特征提取,较深的网络提取到的特征更完整,但是计算量大,导致识别速度慢,因此采用DenseNet-BC 结构作为识别网络框架。本文经过实验发现DenseNet-BC 架构的网络识别准确率不高,故对DenseNet-BC结构作出改进。首先,借鉴原始的DenseNet-BC 结构,本文搭建了一个共71 层的DenseNet-BC 网络架构,如图3 所示,网络的输入数据为224×224的RGB牛眼图像。
图3 DenseNet-71结构Fig.3 DenseNet-71 structure
牛眼图像输入DenseNet-71 后会首先经过卷积层实现对输入图像的降维以及下采样,通过对比识别准确率,卷积核尺寸为5×5 时,网络的特征提取效果会比7×7 卷积核更好,所以网络输入的滤波器的卷积核选择5×5。
Denselayer 选用的激活函数是修正线性单元(Rectified Linear Unit,ReLU),该函数在负半轴置零使得其具有良好的稀疏性,而在非负区间则是稳定输出的线性函数。计算公式为:
根据式(5)可以看出,当产生负梯度时,ReLU 函数的输出值为零,即神经元不被激活,神经元死亡。激活函数的输入为BN层的输出,所以激活函数的输入最大值为1,而当输入值趋近于0 时,经过多次反向传播,则会出现梯度消失问题。为了解决ReLU 的梯度消失,本文根据函数特性采用了缩放指数线性单元(Scaled exponential Linear Unit,SeLU)激活函数[16],计算公式为:
其中:λ=1.050 700 987 355 480 493 419 334 985 294 6,α=1.673 263 242 354 377 284 817 042 991 671 7,是Klambauer 经过大量计量验证得出的值。根据式(6)可以看出,SeLU 的正半轴输出略大于输入,因此可以放大较小的输入值,SeLU 的负半轴不同于ReLU 的直接置零输出方式,而是输出一个略小于0 的值,避免了神经元死亡,这也同时保持了ReLU 的单侧抑制效果,具有良好的稀疏性,避免因小样本和网络层过深引起的梯度消失问题,使网络更好地应用在小数据样本研究中,在深层网络中即使加入噪声也能快速收敛到均值为0、方差为1。
原始的DenseNet-BC 中包含了Dropout 层,Dropout 通过随机置零多个网络神经元降低神经元之间的共适应关系,抑制过拟合的发生,等同于将输入图像中的部分像素信息置零,降低神经元对局部特征的依赖性。效果如图4 所示,图4(a)中的牛眼区域对应图4(b)中灰色区域,图4(b)中的标记代表该位置被置零。
图4 Dropout效果图Fig.4 Dropout effect
网络通过卷积实现对图像数据的特征提取,因为卷积操作的特定实现方式,使得特征信息之间具有一定的相互影响,Dropout 可以通过置零神经元放弃部分特征,但在卷积层后会因为特征间的相互影响而仍学习到冗余特征,并传入到下一层,因此Dropout对于卷积层的效果较为一般。若DenseNet内部采用大量跨层直连,会出现大量冗余无效的牛眼特征,会导致识别准确率下降,为此本文转而采用更完善的DropBlock来代替Dropout。DropBlock[17]模块是谷歌团队于2018 年提出的一个针对卷积神经网络的正则化模块,效果如图5 所示。DropBlock 会随机将特征的某一连通区域置零,强制网络学习其余区域的特征,以此来实现卷积层的正则化,提高抗过拟合能力。
图5 DropBlock效果图Fig.5 DropBlock effect
DropBlock 模块包含两个重要的参数:block_size和γ。其中block_size表示的是准备丢弃的方块尺寸,一般网络会取3、5、7。当block_size=1时,DropBlock变为传统的Dropout模块;当block_size=7时,效果最好。参数γ表示的是丢弃的语义信息激活单元块的概率,计算公式为:
其中:keep_prob表示将单元块保留的概率;feat_size表示特征图大小。
在DropBlock模块中网络会随机舍弃部分牛眼特征,通过深层网络的多次提取,最终会得到最优特征并作为识别特征。改进前后的Denselayer 如图6 所示,图6(a)表示原始的Denselayer,图6(b)表示使用SeLU 与DropBlock 的Denselayer改进层。由于使用SeLU 代替ReLU、使用DropBlock 代替Dropout,这增强了Denselayer 的抗过拟合能力,保障了模型的鲁棒性。
图6 Denselayer内部结构Fig.6 Denselayer internal structure
本文所用DenseNet-71 结构中包含4 个DenseBlock 模块,但模块内部包含的Denselayer 层的个数不同,4 个DenseBlock内包含的Denselayer 个数分别为3、6、12、12,输入特征的通道超参数设置为64,通道增长率设置为32。
实验所用数据来源于牧场实地采集,其中截取牛眼区域作为实验数据集,实验环境为Windows 10 的64 位系统,采用Pytorch 作为深度学习框架,编程语言采用Python。计算机内存为32 GB,搭载Intel Core i9-9900K,3.6 GHz x8 CPU 处理器,并采用英伟达Quadro P6000显卡加速图像处理。网络一共训练300个epoch,初始学习率为10-3,batch_size为132。
大型数据集的建立耗时耗力且网络迁移成本高,所以选取小型数据集对网络进行训练。通常畜牧场的牛只数量为60~1 000,所以选取10 头牛作为数据集进行训练。相较于60~1 000 头牛的数量,10 头牛是小数据集。本次实验所使用的数据选自于科尔沁左翼后旗的西门塔尔牛,采集牛眼图像时对每头牛的每只眼睛从不同角度进行拍摄、裁剪,得到150张图像,每头牛共300 张牛眼图像,选取其中的240 张作为训练集与验证集,其余60 张作为测试集。网络训练时,会首先通过不同角度旋转来进行扩充数据,实现数据增强,牛眼图像数据集部分图像如图7所示。
图7 牛眼图像数据集示例Fig.7 Examples of cattle eye image dataset
本次实验的评价指标包括精确率PR(Precision Rate)、召回率RR(Recall Rate)和准确率AR(Accuracy Rate)。各个指标计算公式如下:
其中:真阳TP(True Positives),表示的是正确的牛眼样本被目标检测器判别为正确的牛眼的样本数量;假阳FP(False Positives),表示的是错误的牛眼样本被目标检测器判别为正确的牛眼的样本数量;假阴FN(False Negatives),表示的是正确的牛眼样本被目标检测器判别为错误的牛眼的样本数量;真阴TN(True Negatives),表示的是错误的牛眼样本被目标检测器判别为错误的牛眼的样本数量;Z表示正确样本数;C表示错误样本数。牛眼识别分类效果越好,表示提取到的牛眼特征更加精确,所以特征提取算法的目标是提高准确率。由于本次实验数据集包含10 头牛,所以对精确率、召回率和准确率均取平均值。
由于数据集的小样本特点与DenseNet-71的深层特点,为了防止过拟合、提升网络的泛化能力与鲁棒性,本文网络优化了激活函数与Dropout 层。激活函数会影响到网络的抗过拟合能力,因此应在保障特征稀疏性的同时进一步优化激活函数,而Dropout 层在本文小数据的情况下,未能有效地抑制过拟合,因此本文网络针对激活函数与Dropout 层进行改进。表1 是对基础DenseNet-71 使用不同激活函数进行识别结果对比,总共做了五组实验,包括ReLU、ReLU6、ELU(Exponential Linear Unit)、LeakyReLU 和SeLU,内部采用的Dropout模块。从表1可知,使用SeLU激活函数识别准确率最高且比原始的ReLU 函数识别准确率提高了1.51 个百分点,平均精确率比改进前提高了2.91 个百分点,改进后的网络精度有所提升。
表1 激活函数对比实验结果 单位:%Tab.1 Comparison experiment result of activation function unit:%
本文对DropBlock 与Dropout 也进行了对比实验,为了控制变量,实验中使用SeLU 作为激活函数,实验结果如表2 所示。从表2可以看出,DropBlock模块比Dropout识别准确率高1.01 个百分点,精确率与召回率均有增加,这说明随机舍弃部分区域特征可以更好地增强卷积层的抗过拟合能力。
表2 Dropout与DropBlock对比实验结果 单位:%Tab.2 Comparison experiment result of Dropout and DropBlock unit:%
为了更好地解释改进后DenseNet-71的优势,本文进行如下的消融实验,将改进后的DenseNet-71 与原始的DenseNet-71 进行对比实验,实验结果如表3 所示。从表3 可以发现,与原始的DenseNet 相比,单独使用SeLU 激活函数和DropBlock时,准确率均有提高;二者同时使用时提高了2.52 个百分点。
表3 改进前后DenseNet-71对比实验结果Tab.3 Comparison experiment result of DenseNet-71 before and after improvement
DropBlock 可以有效地增强网络的鲁棒性与泛化能力,而在网络的不同部位使用DropBlock 也同样会得到不同的网络性能,本文通过在不同位置添加、删减、移动DropBlock来得到模块最优位置。一共做了四组实验,DenseNet_0 表示去掉DropBlock,DenseNet_1 表示DropBlock 在激活函数的前面,DenseNet_2 表 示DropBlock在卷积层前面,DenseNet_3 表示DropBlock 在卷积层后面,实验结果如表4所示。从表4可知,DenseNet_0的准确率最低,DenseNet_3准确率最高,在卷积层后使用DropBlock模块可以使网络达到最优的效果。
表4 不同DropBlock位置对比实验结果 单位:%Tab.4 Comparison experiment results of different DropBlock locations unit:%
值得注意的是,DenseBlock 通过内部的多个卷积组对特征进行提取、降维与拼接融合。对每个DenseBlock 内部的卷积组个数进行设计调整,具体的调整方法如表5 所示,激活函数为SeLU,使用DropBlock。从表5 可以看出,DenseNet-71 准确率最高,且参数量明显低于其他几个模型,DenseNet-71 模型参数量近似为DenseNet-121 的一半。实验结果表明,本文选定的结构能以较小的参数量得到较高的识别准确率。
表5 不同Denselayer配置对比实验结果Tab.5 Comparison experiment results of different Denselayer settings
为了检验改进后的DenseNet 在牛眼特征提取识别优于其他网络,对改进后的DenseNet 与现有网络进行对比,共做了五组实验,具体识别网络包括VGG-19、GoogLeNet、ResNet-18、DenseNet-121 和改进后的DenseNet-71,具体结果如表6 所示。从表6 可以看出,改进后的DenseNet-71 在准确率上优于其他几个神经网络,与经典的DenseNet-121 相比准确率提高2.14 个百分点。改进后的DenseNet-71 虽然识别准确率仅比GoogLeNet 高出1.22 个百分点,但是网络的大小约缩减了3/4。同时,由表1 可知,改进前网络的准确率、精确率和召回率 分 别 为94.95%、94.79% 和94.96%,采 用SeLU 和DropBlock 改进后,网络的准确率、精确率和召回率分别提升了2.52个百分点、3.32个百分点和2.94个百分点。
表6 识别网络对比实验结果Tab.6 Comparison experiment results of recognition network
针对牛眼图像特征提取识别,本文提出了一种牛眼特征提取网络算法,通过密集连接提取牛眼特征,利用SeLU 和DropBlock 加强网络的抗过拟合性和鲁棒性。本文所提网络能对牛眼进行高精度识别,为牛个体识别系统的智能化提供理论基础。