杨 亚, 徐增丙, 王 锐, 廖 剑
(1. 武汉科技大学机械自动化学院,湖北 武汉 430081; 2. 武汉科技大学冶金装备及其控制教育部重点实验室,湖北 武汉 430081; 3. 武汉市农业科学院,湖北 武汉 430065)
农业监测是实施智能化精细农业的一个重要环节。在蘑菇生产过程中,蘑菇的采摘及分类是最后一道重要工序,传统方法都靠人工判断蘑菇是否成熟,然后再进行采摘和分类,这不仅对人工经验要求极高,而且增加了劳动强度,不利于蘑菇智能化种植的推广。
近年来,随着深度学习技术的飞速发展,很多研究人员将深度学习技术应用到了农作物的检测和识别方面[1]。基于深度神经网络(deep neural networks,DNN)的方法可以自动学习特征表示,不再需要人工提取特征。DIAS P A 等[2]使用卷积神经网络(convolutional neural network,CNN)和支持向量机(support vector machine,SVM)相结合的方法来提取复杂背景下苹果花的特征。有学者将R-CNN(regions with CNN features)网络用于温室作物图像中检测成熟和未成熟的草莓[3-4]。还有学者使用Faster R-CNN 网络利用RGB、NIR 图像及它们的组合来检测不同的水果(甜瓜、鳄梨、芒果和橙子等)[5-6]。也有学者提出基于ResNet-101 的RFCN(region-based fully convolutional networks) 网络用于疏果前苹果识别[7-8]。SONG Y 等[9]提出了一种检测和计算温室中辣椒数量的方法。利用上述方法虽然能较好地检测和识别出农作物,但精度不高,只是输出农作物周围的检测框,并没有农作物的具体轮廓,而且农作物的单体分割效果不佳。
本文在做蘑菇的检测和识别任务时,使用了Mask R-CNN 网络,不仅提升了蘑菇检测的准确度,能较好地区分出成熟与未成熟的蘑菇,同时由于Mask R-CNN网络具有良好的实例分割性能,对有遮挡或重叠的蘑菇也能进行精准地单体分割[10]。
Mask R-CNN 是由HE 等[10]在2017 年提出的一种新的目标检测模型,不仅能实现对物体的检测,同时还能对物体实现精准的实例分割。Mask R-CNN 算法流程如图1 所示。首先,将输入的彩色图像利用ResNet50+FPN 的特征提取网络来提取图像特征。其次,将提取的图像特征输入到RPN(region proposal network)网络,RPN 网络对所有的感兴趣区域通过Anchor 机制进行筛选得到最终的候选区域。然后,使用基于双线性插值的RoIAlign 池化层,得到特征点连续的特征向量。最后,将特征向量输入到两个并行的结构分支,第1 个分支经过FC 层得到边界框和类别,第2 个分支通过FCN网络获得Mask 图,两个分支合并得到最终的检测结果。
图1 Mask R-CNN 算法流程Fig. 1 Algorithm flow of Mask R-CNN
经典Mask R-CNN 采用的是ResNet101+FPN 网络对图像进行特征提取,而本文只是对同类蘑菇进行检测和识别,因此将ResNet101 替换为ResNet50,以减少计算参数,同时防止过拟合。ResNet50+FPN 网络结构如图2所示。
图2 ResNet50 与FPN 网络结构Fig. 2 Network structure of ResNet50 and FPN
从结构图中可看出,ResNet50 分为从Stage0~Stage4 共5 个阶段,每个阶段经过卷积后会输出尺寸不同的特征图。其中Stage0 可以看作对Input 进行预处理,因其占用内存过大,不参与构建FPN 网络,其余4 个阶段生成的特征图M1~M4 被用来构建FPN 网络,这是一个自底向上的前馈计算过程,底层的特征层通过1×1 的卷积得到与上一层相同的通道数。接着是一个自顶向下的特征映射过程,上层的特征层通过2 倍的最近邻上采样得到与下一层特征层一样的宽和高,再经过横向连接得到融合后的新特征层。然后,将融合后的特征层经过一个3×3 的卷积来消除上采样的混叠现象。最后,对特征图P4 采用0.5 倍的下采样得到特征图像P5,将P1~P5 输入到RPN 网络。
RPN 是在Faster R-CNN 网络中首次被提出来的,它替换了之前R-CNN 和Fast R-CNN 网络中选择性搜索的算法,真正实现了目标检测中端到端的计算,在提升检测精度的同时大大提高了检测速度[11]。RPN 网络结构如图3 所示。首先,使用3×3 的卷积滑动窗口对特征图上的特征点进行扫描遍历,每次滑动生成9 种不同大小和纵横比的锚框,目的是尽可能多地包含该特征点所映射的目标。接着有两个1×1 卷积的并行分支,一个分支对锚框使用softmax 进行二分类,判断锚框为前景还是背景;另一个分支对锚框进行BBox 回归操作,对锚框的位置进行微调。最后,Proposal 层对两个分支的结果进行处理,保留前景得分高的锚框,并进行非极大值抑制处理,得到最终的RoIs。
图3 RPN 网络结构Fig. 3 Network structure RPN
为了保证实例分割的精准度,在Mask R-CNN 中采用RoIAlign 层替代了Faster R-CNN 中的RoIPooling 层,取消了量化和整数化操作。RoIAlign 原理如图4 所示。虚线表示feature map,实线表示RoI,可看出特征图上的RoI 被分为2×2 个bin,在每个bin 中平均采样得到4个点的位置,并通过双线性插值的方法计算这4 个点对应的像素值,然后对这4 个点的像素值进行最大或平均池化,得到该bin 的像素值,并生成2×2 的特征图。
图4 RoIAlign 原理Fig. 4 Schematic diagram of RoIAlign
FCN(全卷积)网络能够准确地分割图像中的目标,它是一种包含卷积和反卷积的端到端、点到点的网络。对输入的图像进行卷积后,可通过反卷积对最后一个卷积层的特征图进行上采样,使其恢复成输入时的尺寸,从而可对每个像素点进行分类,使目标物体的边缘信息更加准确,以此实现目标物的精准分割。
Mask R-CNN 的损失函数如式(1)所示。
损失函数是平均二值交叉熵损失函数,可对每个像素采用sigmoid 函数进行二分类。mask 分支对每一个RoI 都有k×m2维度的输出,k为类别数,m2代表二值mask 分辨率,为m×m。若某个RoI 的类别为k,则Lmask仅定义在第k个mask 上,其他类别对应的mask 不参与损失计算。
算法流程如图5 所示。首先,对蘑菇图像进行采集,将采集到的图像划分为训练集和测试集;然后,对训练集进行手工标注,将蘑菇分为成熟和未成熟两类,并生成json 文件开始训练网络;最后,对训练好的模型用测试集进行测试,输出结果并进行相应的分析。
图5 算法流程Fig. 5 Algorithm flow
以蘑菇为研究对象,为了获得训练样本,在湖北省某公司的蘑菇培育大棚中进行蘑菇图片的采集工作。拍摄设备为海康威视品牌的工业摄像机,最高像素为500 万,为了防止拍摄过程中相机抖动造成图片模糊,将相机布置在云台上。本文是对蘑菇的成熟度做出预测,而蘑菇的成熟度是依据蘑菇菌褶的开伞程度决定的,菌褶开了代表蘑菇已成熟,菌褶没开代表蘑菇未成熟,因此从图6a 中可判断出左边的蘑菇未成熟,右边的两个蘑菇已成熟。为了得到菌褶部位的特征,将相机斜向上对蘑菇进行拍摄,图像分辨率设为2 448×2 448,以png 格式进行存储。同时,为了获得蘑菇样本的多样性,到不同环境的培育棚对蘑菇进行拍摄,获得图片2 000 多张,经筛选后为2 000 张,将其中1 800 张作为训练样本,200 张作为测试集。
利用开源软件Labelme 对原始图片进行手动标注,图像标注示例过程如图6 所示。在图6d 中共有3 类标签,标签0 代表背景,标签1 代表未成熟的蘑菇,标签2 代表成熟的蘑菇。标注完成后,训练样本被保存为json 格式文件,再通过Labelme 软件将json 文件转换为训练时所需要的标签文件。
图6 图像标注示例过程Fig. 6 Example process of image annotation
主要训练环境:Windows10 64 位操作系统,处理器是Inter(R) Core(TM) i9-10900k,显卡是NVIDIA Quadro RTX4000,Python 版本为3.6,Tensorflow-gpu 版本为1.14,Keras 版本为2.1.5,cuda 版本为10.0,cudnn版本为7.4。
主要训练参数:学习率为0.001,动量值为0.9,学习衰减率为0.000 1,训练epochs 次数为20 次。为了减少对模型的计算量,在训练时将图像分辨率重新标定为1 024×800。由于显卡显存的限制,训练时每次只能对一张图片进行处理。
模型训练完成后,挑选测试图片对模型进行测试,测试效果如图7 所示。从图中可看出右下角的蘑菇被判定为成熟状态,成熟概率为0.090 8,实际可看出该蘑菇的菌褶部位已逐渐开伞,因此判断无误;其余4 个蘑菇均被判定为未成熟状态,左边2 个及上面的1 个蘑菇未成熟概率均为1,右边的蘑菇未成熟概率为0.091 9,实际也可看出这4 个蘑菇的菌褶完全未开伞,因此判断也无误。同时,检测了Mask R-CNN 的分割性能,从图中可看出,即使有蘑菇存在重叠或遮挡现象,也能将每个蘑菇单独分割出来,证明了Mask R-CNN 模型实例分割的优越性。
图7 Mask R-CNN 检测结果Fig. 7 Detection results of Mask R-CNN
为了说明Mask R-CNN 网络能提高目标检测的精度和准度,与Faster R-CNN 网络进行对比,用两个模型对同一张蘑菇图片进行检测,检测效果如图8 所示。两图对比可看出,Mask R-CNN 在引入mask 分支后,检测精度和准度相比于Faster R-CNN 都有所提高,Faster R-CNN 对有遮挡和重叠的蘑菇分割出现偏差。
图8 检测效果对比Fig. 8 Comparison of detection results
用200 张测试集图片分别对两种网络模型进行测试,结果如表1 所示。虽然Mask R-CNN 单图检测时间更长,但对蘑菇成熟度的判别精度更高。
表1 蘑菇目标检测统计结果Tab. 1 Detection statistics of mushroom target
针对传统的神经网络对农作物进行检测与识别时具有识别精度低、鲁棒性差等缺点,在对蘑菇培育棚中的蘑菇目标进行成熟度检测时,首次提出一种基于Mask R-CNN 网络的检测蘑菇成熟度的方法,与Faster R-CNN 对比后得出,Mask R-CNN 模型检测、识别准确率更高。同时,Mask R-CNN 在引入mask 分支后,对有遮挡或重叠的蘑菇分割更为精准。
本文方法不足之处在于没有输出蘑菇的相关尺寸,无法利用尺寸信息判断蘑菇的长势,在今后的研究中,将处理这些问题。