陈虹伶,张建勋,朱佳宝,郑集元
(重庆理工大学 计算机科学与工程学院, 重庆 400054)
猪肉因其纤维细软、结缔组织较少等原因[1],一直以来是人们最主要的肉类选择。2017年全球猪肉产量为11 103.4万吨,较2015年的10 996.9万吨增长0.97%。而随着人们生活水平的不断提高,消费者对肉质的要求也不断提高。猪肉不仅要健康,而且要有营养价值和口感。决定猪肉品质的因素有很多,主要包括遗传、环境等,但其中对于评价整头猪的肉质最准确的标准还是猪眼肌区域(俗称里脊肉)[2]脂肪含量的高低情况。当脂肪含量合适且分布均匀时,营养价值高,口感好。而评价其脂肪含量高低情况的2个关键指标又是其猪眼肌面积和背膘厚度,猪眼肌面积指猪最后肋骨处背最长肌横截面的面积,背膘厚度是皮肤到背最长肌的外筋膜的距离。猪背膘厚和眼肌面积与猪瘦肉率直接相关,在猪眼肌区域的质量检测和评价上作为2项重要的指标参数深受重视,其精确测定具有重要意义。猪眼肌脂肪含量的检测判断也就成为判断猪肉营养价值的一个十分重要的指标,也成为了研究人员的研究重点。
以往对于检测猪肉脂肪含量的方法通常有以下3类:第1类是感官检测法,通俗讲就是检测人员根据自己的实践经验来判断猪肉的质量,但缺点是容易受到主观因素的影响,效率低、精度不高,从而很大范围限制了该种检测方法的应用。第2类是理化检测法,最经典的一种方法为索氏提取法[3],其主要原理是利用脂溶剂抽提。这种方法能够比较客观、准确地检测出与猪肉脂肪相关的参数指标,精度也比较高,但缺点是必须屠宰生猪、进行抽样检测,对检测对象具有很大破坏性。第三类是计算机视觉测定方法,例如超声波检测。国外,爱荷华州立大学Hassen等也研究了利用超声波图像来活体预测特定品种的猪和牛的肌内脂肪含量,其研究结果显示:超声波检测方法最大的优点就是在不破坏检测目标的前提下获得相应的参数指标[4]。但由于该技术的局限性,其方法对于不同猪种的鲁棒性不够[1]。
2013年,有人运用传统算法,利用灰度共生矩阵算法对猪眼肌B超图像提取纹理特征量,再将提取的特征向量作为输入数据,用多项式核函数和RBF核函数以及相应的参数组合设计了支持向量机分类器,从而得到猪眼肌脂肪含量检测的分类结果[5]。在传统的机器学习算法中,通常将图像特征与分类或回归分开,而且特征的提取规则往往是由人工设定的。实际应用中,当数据量过大且数据较复杂时,这种方式提取到的特征往往并不具有代表性,无法表示不同类别数据间的独特性,因此也就限制了识别精度。
相对于传统算法,本文采用深度学习可以从大数据中自动学习特征的表示,其可以包含成千上万的参数。深层的网络结构通过一些简单的非线性映射关系组合以及更高层次的转换,实现复杂函数的逼近,逐渐由低层到高层,使得特征的表示越来越抽象,对原始数据的刻画就更本质[6]。通过构建神经网络可以将特征与回归优化两者结合,达到更方便快捷的目的。
基于卷积神经网络(CNN)的深度学习表现出色,在世界各大计算机视觉挑战赛中取得了优异的成绩[7]。深度卷积神经网络实现的B超图像的生猪脂肪含量检测充分利用了图形处理器(graphics processing unit,GPU)等现代硬件优势,实时性更高,模型的泛化能力和鲁棒性也得到了显著增强。因此,深度卷积神经网络为B超图像的生猪脂肪含量检测的应用提供了较好的思路。
本文主要从4个核心方面进行研究:首先是B超图像的获取,然后对B超图像进行预处理,接着开展CNN网络训练,最后进行脂肪含量检测。如图1所示。
本文的实验数据来自重庆市畜牧科学研究院历时2年采集到的135组生猪眼肌B超图像,采用的B超设备是德国进口兽用全数字B超仪。
每一组数据的获得,都要经过如下步骤:首先,用B超仪对准生猪的背部,多次获取眼肌区域的B超图像,筛选出图像清晰的作为最终保存的样本图像;然后,屠宰该头生猪,对背部猪眼肌区域肉质进行理化的检测以及相关的测量,并记录检测数据[5]。
图1 猪眼肌B超图像脂肪含量检测流程
获取的B超图像形状为245×309。根据大量B超图像可以归纳出眼肌区域都在图片上部分,为了提高准确性,故对获取的数据进行预处理。由于活体背膘厚测量起止点位于B超影像中亮白弧线中间点的纵线上,起点为影像中最上端亮白弧线顶部的上缘(通常为弧线的中间),止点为眼肌上缘筋膜层形成的白色亮带中间点,如图2所示。本文对活体背膘厚测量时将图片高截取1/2,宽左截取30 pt,右截取30 pt。将图片重新统一设置大小为127×249。
图2 背膘厚度
活体眼肌面积测量起止点位于影像中眼肌筋膜层形成的,近似椭圆形的亮白弧线上,此亮白弧线上的任意一点均可作为起点,止点应与起点完全重合,如图3所示。由于对眼肌面积测量时不用考虑最上端到眼肌边缘距离,将图片高的顶部截取15 pt,底截取1/2,宽左截取30 pt,右截取30 pt。将图片重新统一设置大小为112×249。
由于深度学习具备需要大数据学习的特征,所以对数据集进行增强,本文利用图像旋转10°,左右裁剪30 pt,左右翻转等方法将135组生猪眼肌B超图像增加到4 050张,对应以其眼肌面积与背膘厚度作为标签。数据的比例分配是随机挑选70%作为训练集,30%作为测试集。
图3 眼肌面积
卷积神经网络是模仿视觉神经中单细胞和复杂细胞的视觉信息处理过程,包含卷积层、激励层、池化层和全连接层等多层神经网络[8]。它不需要任何精确的数学表达式来表达输入和输出,只需要大量的数据集来学习输入与输出之间的映射关系。第1层一般是卷积层,本文设计一个二维卷积层Conv 2D对二维输入进行滑动窗卷积,其中预测猪眼肌面积时输入形状参数为112×249×3,预测背膘厚度时输入形状参数为127×249×3。B超图片为3通道,卷积核的数目为32,卷积核的大小为3×3。设计一个二维池化层MaxPooling2D,其中池化核的参数为2×2。Activation激活层对一个层的输出施加激活函数。为了从卷积层过渡到全连接层,加入Flatten层来将输入“压平”,即把多维的输入一维化。为了防止过拟合,加入Dropout,在训练过程中每次更新参数时可以随机断开0.5的输入神经元连接。本文选择CNN模型时,首先参照人脸关键点检测的模型搭建,最初为3层网络,再经过一层一层增加网络层,最后发现5层的卷积神经网络的损失函数最小,效果最好。
对于学习率,首先选择0.1,希望损失函数能快速下降,从最开始的4 152很快下降到589,最后下降到17,但是又发现波动比较大。后将学习率逐步调小,直到当学习率为0.01时,用tensorbord显示损失函数的变化情况,发现最开始下降很明显,大约在30回合后接近饱和状态,后面的震荡和抖动都非常微小。选择的小批量数据大小,也经过多次测试,按照选择最快性能提升的小批量数据大小进行优化,最终确定为32。根据在一段时间内损失函数不再下降时就停止,在网络训练的时候,初始阶段使用10回合不下降规则,然后逐渐地选择更久的回合,比如20回合不下降就停止,以此类推。
损失函数主要根据预测结果,衡量出模型预测能力的好坏。开始阶段,本文选择常用的MSE作为损失函数,发现损失函数下降波动比较大,易受局外点的影响。接着尝试Huber,效果也不明显。又因为log-cosh损失函数是一种应用于回归问题中的损失函数,计算方式是预测误差的双曲余弦的对数。其优点是对于很小的误差来说,log(cosh(x))与(x2)/2很相近;而对于很大的误差,则与abs(x)-log2很相近。也就是说,log-cosh损失函数在拥有MSE和Huber的所有优点的同时,还不会受局外点的太多影响,且在每一个点都是二次可导的。经过多次实验比较最终确定log-cosh损失函数。
表1 网络模型结构超参数
因为CPU的内部结构异常复杂,而GPU面对的则是类型高度统一的、相互无依赖的大规模数据和不需要被打断的纯净的计算环境。所以GPU在大规模并发计算中越来越突出,应用范围逐渐变得广泛,成为近年来的热点话题之一。CPU与GPU呈现不同的结构,如图4、5所示。
图4 CPU结构
图5 GPU结构
其中,绿色的是计算单元,橙红色的是存储单元,黄色的是控制单元。在计算速度方面,GPU已经远远走在了 CPU的前面,且 GPU的价格也相对较低,使得运用 GPU进行科学运算具有很高的性价比[9]。同时,在大数据中可以利用SLI技术使用多个显卡同时进行科学运算,计算能力得到成倍提高。
根据预测出的眼肌面积与背膘厚度与给定的公式进行计算,从而得出猪肉脂肪含量评估猪肉的质量。
本文将基于深度学习的卷积神经网络实验模型与最先进的方法进行比较,包括支持向量机算法设计的实验模型和BP神经网络[4]算法实验模型。为了公平比较,本文在相同的输入标记下测试卷积神经网络实验模型、支持向量机算法设计的实验模型和BP神经网络算法实验模型。实验数据一共获得135组猪眼肌B超图像以及对应的已检测脂肪含量数据。将数据增广为4 050组,随机将其中3 000组用于训练,剩余1 050组用于测试。这里,BP神经网络算法实验模型将输入节点数设计为12个,输出节点设计为3个,将输出层的每1个结点的输出值设为0或1,将训练数据集分为脂肪含量过低、脂肪含量合适、脂肪含量过高3类,隐含层设计为1层,层内的结点数确定为25个,正确识别率可达60%。支持向量机算法设计的实验模型将训练数据集分为脂肪含量过低、脂肪含量合适、脂肪含量过高3类,每2类样本设计1个SVM进行训练,每2个分类设计1个SVM进行训练,将2类分别记为1和-1,正确识别率可达89%。而卷积神经网络实验模型采用5层卷积层、5层池化层和2层全连接层,为了提高网络对猪眼肌B超图像脂肪含量检测分类的准确率,在实验中本文设定网络的学习速率为0.01,损失函数为Log-cosh,batch-size取32。在实验中本文用 3 000组训练样本数据集对网络进行反复训练,经过训练后网络达到稳定,正确识别率可达95%。3种实验模型的识别率见表2。
表2 BP神经网络、SVM与CNN识别率比较
本文基于深度学习的猪眼肌脂肪含量检测实验硬件平台为Intel(R)core(TM)i5-6400 CPU E7500 @ 2.70 GHz 2.71 GHz;内存为8.00 GB;操作系统为Windows 10,64位。因为训练数据比较大,花费时间较长。为提高数据处理能力,本文在后来的实验中应用了GPU加速器,采用的GPU为NVIDIA GEFORCE GTX 1080、内存为8.00 GB、GPU的核心频率为1 607/1 733 MHz。二者的实验情况比较见表3。
表3 CNN模型在CPU与GPU下的时间比较
本文采用基于深度学习的B超生猪脂肪含量检测方法是无损检测方法。首先,对数据进行预处理;然后,构建神经网络CNN模型,将图片导入模型进行训练,利用回归算法预测出猪眼肌面积和背膘厚度;最后,根据公式计算出猪肉脂肪含量。结合提取特征与预测,更方便、高效,准确率也更高。限于现在的条件,未来可以在以下两个方面做进一步加强:第一,本文所提供的数据集只有135组生猪眼肌筛选后比较清晰的B超图片,数据集比较有限,普遍性不够高,今后应进一步扩大数据集;第二,除了对生猪脂肪含量进行检测,基于深度学习的B超脂肪含量检测方法还可以为其他领域提供检测思路,如牛肉、羊肉,甚至运动员的脂肪含量检测,进一步拓展本文的应用价值。