基于MobileNet的果蔬识别系统
2021-02-19陈怡帆
摘 要:我国疆域辽阔,土壤肥沃,气候温和,尤其是新疆地区,日照时間充足,盛产水果。造就了我国成为农业生产大国,每年进出口非常多的水果蔬菜。据了解,在大部分农贸市场都靠人工进行果蔬分类,工作量多且效率低下。提出一种基于MobileNet模型的果蔬识别系统,该系统可以快速进行果蔬识别。该项目用了传统CNN模型和更轻量化的MobileNet模型对12个不同品种的蔬果数据集进行训练,发现基于MobileNet模型的识别结果正确率更高。
关键词:深度学习;图像识别;卷积神经网络;MobileNet
中图分类号:TP391.4 文献标识码:A文章编号:2096-4706(2021)13-0155-04
Fruit and Vegetable Recognition System Based on MobileNet
CHEN Yifan
(School of Computer and Software, Jincheng College of Sichuan University, Chengdu, 611731, China)
Abstract: China has a vast territory, fertile soil and mild climate. Especially in Xinjiang, it has sufficient sunshine and is rich in fruits. As a result, China has become a large agricultural production country, importing and exporting a lot of fruits and vegetables every year. It is understood that in most farmers’ markets, fruits and vegetables are classified manually, which has a large of workload and low efficiency. Therefore, this paper puts forward a fruit and vegetable recognition system based on MobileNet model, which can quickly recognize fruits and vegetables. The project uses the traditional CNN model and the lighter MobileNet model to train the data sets of 12 different kinds of fruit and vegetable. It is found that the recognition result based on MobileNet model has a higher accuracy.
Keywords: deep learning; image recognition; convolutional neural network; MobileNet
0 引 言
近年来,随着社会的快速发展,经济贸易的逐渐扩大,我们国家已经成为了一个商品进出口大国,特别是农业商品,每年的进出口量非常之大。在调查过程中,发现国内大部分农贸市场并没有涉及有水果蔬菜识别领域的系统,大多数地方都采用人工工作,于是本实验项目设计了一个果蔬识别系统,预期可以用于果蔬识别及分类,有效提高农贸市场工作效率。该设计采用了卷积神经网络(CNN),CNN已经普遍应用在计算机视觉、自然语言处理领域,并且已经取得了不错的效果。所以在图像识别领域,必然离不开广泛使用的卷积神经网络。本项目使用了传统CNN和轻量级MobileNet网络模型,并借此调用数据集进行训练,再对训练后的两个模型进行测试,并对它们的结果进行对比。
1 MobileNet网络
1.1 什么是MobileNet网络
MobileNet网络是专注于移动端或者嵌入式设备中的轻量级CNN网络,相比传统神经网络,在准确率小幅降低的前提下大大减少了模型参数和运算量,具体可以在下面公式的推算中证明。MobileNet的基本单元是深度可分离卷积(depth wisese parable convolution),该操作又可以分为两个操作——深度卷积(depth wise convolution)和逐点卷积(point wise convolution)。
逐点卷积(pointwiseconvolution)其实就是普通的卷积,因为传统卷积核都是3×3的,但此时的point wise convolution操作采用了1×1的卷积。
1.2 与标准卷积网络的对比
图1展示了标准卷积和MobileNet的深度可分离卷积的两个组成—深度卷积和逐点卷积。
(c)逐点卷积
由上图我们可以看出:
对于图1(a)的标准卷积(standard convolution)计算量为 :
Dk×Dk×M×N×DF×DF
对于图1(b)的深度卷积计算量为:
Dk×Dk×M×DF×DF
对于图1(c)的逐点卷积计算量为:
M×N×DF×DF
最后我们将属于MobileNet网络的深度卷积和逐点卷积的计算量加起来除以标准卷积的计算量,可得以下式子:
由此式可以得出结论:当使用3×3的卷积核时,忽略极小项1/N,如果使用标准卷积,其计算量是可分离深度卷积的9倍。由此可知,如果使用MobileNet网络,其核心深度可分离卷积可大大帮助减少运算量,使其成为更轻量化的模型。
2 训练过程
2.1 数据集处理
本实验项目借助Tensorflow框架。对12个不同类别的果蔬数据集进行训练,为了提高模型的泛化能力,对数据集采用数据增强手段对数据集进行处理,从而得到更多的图像。通过数据分割,把数据分为训练集和测试集。因为训练集和验证集的数据不能一样,所以本实验划分训练集占80%,验证集占20%。对两个模型训练,都是先分别传入训练集的目录和测试集的目录,加载数据集,统一把数据图像处理成224x224的大小传入模型做训练,为了模型一次训练16张图片,batchsize设置为16,设置成16可以防止模型过拟合同时保证模型的训练速度更快。
2.2 构建模型
加载完数据集然后就是构建模型了,这是训练过程中最重要的一步。本实验对两个模型都做了归一化的处理,为了方便模型调整,把像素值0~255统一处理到0~1之间,但两个模型的优化器不一样,本次实验在传统CNN模型的训练中采用的是广泛使用的SGD优化器,而在MobileNet模型训练采用的是一个比较新型的Adam优化器。这两个优化器之间各有千秋,SGD优化器最大的缺点是loss下降速度慢,而且可能会在沟壑的两边持续震荡,停留在一个局部最优点。这一点可以在后面的图像中明显看出。而Adam是新出的优化器,经历了几代优化器(例如SGD、SGDM、NAG、AdaGrad、AdaDelta)才诞生,显然是前面几代优化器的集大成者。那么SGD-M在SGD基础上增加了一阶动量,AdaGrad和AdaDelta在SGD基础上增加了二阶动量。把一阶动量和二阶动量都用起来,就是Adam了。而在本实验项目的结果中可以通过后面的表格看出确实Adam优化器的下降函数曲线更快也更平稳,不会出现使用传统SGD优化器的问题。同时MobileNet的训练过程中采用了迁移学习的思想,因为是用MobileNet网络,所以该训练过程中采用了MobileNetV2的特征层,对主干模型的输出进行全局平均池化(这一步的目的是替代全连接层,可以减少参数数量,防止过拟合),然后通过全连接层映射到最后的分类目录上。两个模型的损失函数都采用交叉熵损失函数。该项目最重要的就是构建两个模型,下文给出实现上述操作的代码。
2.3 构建CNN模型
构建CNN模型的代码具体为:
def model_load(IMG_SHAPE=(224, 224, 3), class_num=12):
# 搭建模型
model = tf.keras.models.Sequential([
tf.keras.layers.experimental.preprocessing.Rescaling(1. / 255, input_shape=IMG_SHAPE),
# 卷积层,该卷积层的输出为32个通道,卷积核的大小是3*3,激活函数为relu
tf.keras.layers.Conv2D(32, (3, 3), activation=’relu’),
# 添加池化层,池化的kernel大小是2*2
tf.keras.layers.MaxPooling2D(2, 2),
# Add another convolution
# 卷积层,输出为64个通道,卷积核大小为3*3,激活函数为relu
tf.keras.layers.Conv2D(64, (3, 3), activation=’relu’),
# 池化层,最大池化,对2*2的区域进行池化操作
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation=’relu’),
# 通过softmax函数将模型输出为类名长度的神经元上,激活函数采用softmax对应概率值
tf.keras.layers.Dense(class_num, activation=’softmax’)
])
model.summary()
# 指明模型的训练参数,优化器为sgd优化器,损失函数为交叉熵损失函数
model.compile(optimizer=’sgd’, loss=’categorical_crossentropy’, metrics=[‘accuracy’])
return model
2.4 構建MobileNet模型
构建MobileNet模型的代码具体为:
def model_load(IMG_SHAPE=(224, 224, 3), class_num=12):
base_model = tf.keras.applications.MobileNetV2(input_shape=IMG_SHAPE,
include_top=False,
weights=’imagenet’)
base_model.trainable = False
model = tf.keras.models.Sequential([
# 进行归一化的处理
tf.keras.layers.experimental.preprocessing.Rescaling(1. / 127.5, offset=-1, input_shape=IMG_SHAPE),
base_model,
# 对主干模型的输出进行全局平均池化
tf.keras.layers.GlobalAveragePooling2D(),
tf.keras.layers.Dense(class_num, activation=’softmax’)
])
model.summary()
# 模型训练的优化器为adam优化器,模型的损失函数为交叉熵损失函数
model.compile(optimizer=’adam’, loss=’categorical_crossentropy’, metrics=[‘accuracy’])
return model
2.5 绘制训练图像
为了直观演示训练过程,训练完分别绘制两个模型训练过程的曲线。包括准确率和loss图像。图2是CNN的准确率和loss图像,图3是MobileNet训练的準确率和loss图像。
对上面两图分析,可以明显看出共同点,随着训练epoch(轮数)的增加,Accuracy(准确率)都是逐渐上升,CrossEntropyloss(交叉熵损失)也随训练轮次逐渐下降。但可以明显看出,图3的MobileNet模型训练中,它的准确率几乎是陡然上升,大概是只训练了5轮就大概达到了接近100%的正确率,而在图2模型的训练过程中,几乎是16轮训练完才勉强达到了75%的正确率。在loss下降的图像中可以看出MobileNet的下降是平稳快速无震荡,而CNN模型下降得慢而且有震荡。所以图像显示本实验对MobileNet的训练过程非常好,该曲线符合一般模型训练图像走势,并没有过拟合情况的发生。
3 实验分析及结果
3.1 实验分析
Heatmap作为目前最常见的一种可视化手段,因其丰富的色彩变化和生动饱满的信息表达被广泛应用于各种大数据分析场景,所以在测试模型的过程中选择了绘制heatmap图。模型训练好后我们调用模型对验证集的数据进行测试,测试完将结果显示在heatmap图上。该图可以直观反映对数据集的测试结果,如图4图5所示。同时可以对比两个模型训练结果及识别情况,图4是经典CNN模型的heatmap,图5是MobileNet模型的heatmap。
通过上面两图可以明显看出,在训练完CNN模型后,测试结果显示对蔬果识别并不准确,尤其是在对大葱、梨、西红柿等蔬果的识别,识别正确的概率非常低。由此可见此模型对数据集训练后用来识别的效果并不理想。而图5是用轻量化网络模型MobileNet对数据集训练后的测试结果。通过对颜色的深浅可以明显看出,在对12个不同蔬果种类的测试中,对8个种类蔬果的识别准确率都达到了100%,只有少数把土豆识别成芒果,大葱识别出韭菜等错误,原因可能是这两种蔬果颜色、形状等特征相似,如果训练更多蔬果的特征图会改善此问题。由此可得出结论,MobileNet网络模型在本实验项目中,得到识别正确结果的准确率比较高,总错误率不超过0.3%。所以该系统采用MobileNet网络模型更好。
3.2 实验结果
模型训练完毕后,我们随便在网络上搜索果蔬的网图,运行此程序进行识别,在通过测试了苹果、香蕉以及错误率最高的芒果后,得出结果都是正确识别,如图6图7所示。但可能随着测试次数的增加,会有识别错误情况以及错误概率的提升。因为验证集的测试结果显示并不是每张图都是完全正确识别,还是有小部分错误识别的状况,造成错误识别的原因可能是数据集或训练epoch的原因,如果提高数据集数量和训练的epoch次数会使识别准确率更高,如果要达到每张图都能完全正确识别的状态还有待进一步地优化提升。
4 结 论
本实验项目设计并实现了一种基于MobileNet的果蔬识别系统,训练模型采用了MobileNetV2的特征层,Adam优化器和交叉熵损失函数。训练结果显示相比传统CNN模型,MobileNet模型的精度更高,但本实验中通过测试发现识别正确率还有待提升,为了能够投入商业化应用还有待进一步优化,以提高果蔬检测的准确度和稳定性。
参考文献:
[1] HOWARD A G,ZHU M L,CHEN B,etal. MobileNets:Efficient Convolutional Neural Networks for Mobile Vision Applications [J/OL].arXiv:1704.04861 [cs.CV].https: //arxiv.org/abs/1704.04861.
[2] 高淑萍,赵清源,齐小刚,等.改进MobileNet的图像分类方法研究 [J].智能系统学报,2021,16(1):11-20.
[3] 陆飞,沈世斌,苏晓云,等.基于改进Mask R-CNN的交通监控视频车辆检测算法 [J].南京师范大学学报(工程技术版),2020,20(4):44-50.
[4] 张焯林,曹飞龙.基于MobileNet的轻量级网络构建及其超分辨率图像重建 [J].中国计量大学学报,2019,30(1):56-64+103.
[5] 高洋,陈万米,林城.基于SSD-MobileNet的投篮机器人目标识别算法 [J].工业控制计算机,2021,34(6):51-53.
[6] 江南大学.基于MobileNetV3的实时人脸检测方法:CN110647817A [P].2020-01-03.
[7] 张陶宁,陈恩庆,肖文福.一种改进MobileNet_YOLOv3网络的快速目标检测方法 [J].小型微型计算机系统,2021,42(5):1008-1014.
[8] 张骏,朱标,吉涛.基于MobileNet-SSD的红外人脸检测算法 [J].激光与红外,2021,51(1):107-113.
作者简介:陈怡帆(2000—),男,汉族,四川南充人,本科在读,研究方向:机器学习。