基于树莓派的服装识别系统设计
2021-12-30江美玲
江美玲, 章 杰
(福州大学 物理与信息工程学院,福建 福州 350000)
0 引 言
随着人们生活水平的不断提高,人们对于服装的需求不再是传统意义上的生活必需品,服装已经成为人们生活中的一种时尚消费品。针对大部分消费者家中服装种类多、管理难度大等问题,本文采用服装识别的方法,帮助用户高效、准确地分类管理不同款式的服装。深度学习作为传统机器学习的延伸和扩展,已在众多领域得到广泛应用[1]。目前,基于深度学习的目标检测算法总体上分为两类:1)基于区域提名的R-CNN算法系列,如SPP-net[2],Fast R-CNN[3],Faster R-CNN[4];2)无需区域提名的YOLO,SSD算法系列。如YOLOv1[5],YOLOv2[6],SSD[7]等一系列算法。虽然基于区域提名的R-CNN系列算法通过使用深度卷积网络来分类目标候选框,获得了很高的目标检测精度,但在时间和空间上的训练开销很大且检测速度不能满足实时的要求;而无需区域提名的YOLO,SSD系列算法能够满足实时的要求。其中,2016年Liu等人提出的快速高效的SSD算法结合了YOLO的回归思想以及 Faster R-CNN的Anchor机制,做到了速度与准确率并存。但SSD的基础网络使用的是VGG—16,在卷积计算上花费的时间很多。而MobileNet算法使用深度可分解卷积,可以减少卷积的计算量,而且适合在资源有限的嵌入式设备上运行,克服了VGG—16在卷积计算上花费时间多的问题又保证了算法的实时性。
本文使用SSD检测框架和MobileNet进行服装数据集的训练,并将训练得到的模型移植到树莓派上,以实现服装识别功能。
1 系统总体方案
本文系统由树莓派(Raspberry Pi)硬件平台、图像采集
模块、触摸传感器模块和语音输出模块等硬件部分,以及树莓派操作系统、服装识别系统、语音合成等软件部分共同构成。系统的总工作流程是:启动树莓派并处于待机状态,触碰触摸传感器启动服装识别函数,将树莓派Picamera摄像头采集到的服装图像传输至服装识别模块,在服装识别模块上使用已训练好的MobileNet模型进行服装类型的识别,然后通过语音的方式将识别的结果和对应的存放位置播放出来,同时也将结果显示在显示屏上,以便查看。为了更好地在树莓派上进行测试和验证,本文使用Python3编程语言进行服装识别系统的开发和设计,Python语言的高可读性以及面向对象的特性非常适合本系统的开发[8]。
2 服装识别功能实现
2.1 MobileNet识别模型介绍
MobileNet网络是针对树莓派等小型嵌入式设备提出的一种轻量级的深层神经网络。MobileNet模型是基于深度可分解卷积的,它可以将标准卷积分解成一个深度卷积和一个1×1点卷积,这种分解可以有效减少计算量,降低模型大小,提高提取特征的速度[9]。MobileNet引入的两个全局超参数,具有平衡延迟度和准确度的功能。这两个超参数允许模型构建者根据问题的约束条件,为其应用选择合适尺寸的模型。其中超参数α的目的是改变输入输出通道数,减少特征图数量,使模型变瘦。超参数ρ的目的是降低图片的分辨率,减少参数。考虑到树莓派资源的有限和MobileNet网络的轻量化,本文使用MobileNet识别模型来训练自制的服装数据集,以达到服装识别的目的。
2.2 MobileNet识别模型的改进
在使用神经网络模型时,优化算法的选择是至关重要的一步。如何最小化损失函数以加快模型的收敛速度和正确学习是神经网络使用者必须考虑的一个问题。目前,MobileNet使用的优化算法是RMSprop算法[10],该算法是通过调小剧烈变化方向上的步伐和调大平稳方向上的步伐来加快梯度下降的,但是在算法的优化后期会因为梯度稀疏,无法最优收敛,会使得模型的训练时间偏长,所以针对RMSprop 算法的不足之处,本文将MobileNet的优化算法改成Adam算法[11]。Adam结合了善于处理稀疏梯度的Momentum动量算法和善于处理非平稳目标的RMSprop算法,利用梯度的一阶矩估计和二阶矩估计调整每个参数的学习率,其在经过偏置校正后,使得每一次迭代学习率都有确定范围,使得参数较为平稳。随着梯度变得稀疏,Adam比RMSprop效果好,能够保证较高的收敛速度下实现最优收敛,而且所需内存空间很小,比较适合内存有限的计算机训练识别模型。
假设在第t轮训练中,得到的Momentum和RMSProp的指数加权平均如下
v=β1v+(1-β1)dW,s=β2s+(1-β2)dW2
(1)
在Momentum中dW表示原始梯度,v表示通过指数加权平均计算出来的梯度,相当于对原始梯度做了一个平滑。RMSProp中的s表示对原始梯度dW平方做了一次平滑。
由于指数加权平均在迭代开始的初期会和开始的值有较大的差异,所以需要对上面求得的几个值做偏差修正。以下是在第t轮迭代过程中,参数梯度累积量的修正值和其中权重更新公式,vc和sc表示修正后的梯度
(2)
在Adam算法中,参数β1对应Momentum算法中的β值,一般取0.9;参数β2对应RMSProp算法中的β值,一般取0.999;ε是一个平滑项,一般取值为10-8;学习率α决定了参数每次更新的幅度。
2.3 服装识别及语音播放实现
本文按照着装位置,从电商平台和自行拍摄两种途径,获得羽绒服、西装外套、夹克、高领毛衣、圆领毛衣、帽衫、衬衫、T恤衫、背心、连衣裙、牛仔裤、背带裤、半身裙和短裤这14类图片,每一类服装图片的数量为150~300张不等。将其制作成MobileNet模型训练所需的TFRecord格式,测试集数为280件、训练集数为2 106件和验证集数为384件。使用预训练模型ssd_mobilenet_v1_coco_2017_11_17训练制作的数据集。在模型训练配置文件中设置初始学习率为0.002,β1=0.9,β2=0.999,ε=1×10-8。当损失值接近1时,停止训练。使用Object Detection API库中的模型导出脚本将包含模型结构和参数的临时文件转化为PB模型文件,该PB模型文件用于进行服装的识别。
服装识别的工作流程主要分为以下几个部分,分别是树莓派摄像头采集服装图像部分、图像预处理部分、加载已训练的PB模型部分、服装检测部分和检测结果可视化和语音播报部分。在树莓派平台上,使用树莓派摄像头对准待识别的服装,采集一张服装图像并保存在指定的文件夹下。图像的质量会受到树莓派摄像头的摆放位置、成像角度、透视关系以及镜头自身原因的影响,所以本文采用自适应加权向量滤波法[12],对获取的服装图像进行图像预处理操作,将重要特征点存入一个行(列)矩阵中,将各点重构后合成去噪后的图,保证图像的清晰度,便于后续的服装图像的识别。加载已训练过的PB服装识别模型,对经过预处理的的服装图像进行检测,使用PB服装识别模型中6个层数各不相同的卷积层得到H×W×Channel的Extracted Feature Map,再经过3×3×(25×num_default_box)的深度可分解卷积核,卷积成H×W×(25×num_default_box)的feature map作为物体检测的预测。抽取其中6层的feature map,在 feature map 的每个小格(cell)上生成一系列固定大小default box。再将生成的所有default box全部丢到 NMS(极大值抑制)中,使用NMS过滤掉背景default box和重叠度较大的default box,最后输出筛选后的default box即为检测结果。通过可视化函数将识别的结果在显示窗口上显示出来,显示的结果包含三个部分,分别是:目标检测框、服装的类型和存放的位置。同时调用百度的语音合成接口,实现语音的播报,即完成语音存入。本文以夹克这一类服装为例,展示服装识别结果及语音播放功能,如图1所示,在检测图片上使用矩形框框出检测到的目标,并在矩形框上方标注cloth_style(服装类型):lapel jacket;place(存放位置):3_2。同时语音播放以下内容:您要存放的服装是翻领夹克,应该存放入3区2号储物箱。
图1 服装识别结果和语音播放
3 环境搭建与实验测试
系统使用树莓派3B作为开发平台,树莓派是基于Linux的开放式嵌入式系统的卡片式电脑。使用树莓派专用摄像头Raspberry Pi Camera Module v2作为图像采集模块,拥有自动定焦功能。触摸传感器的型号是TTP223B,TTP223B是基于触摸检测IC的电容式点动型触摸开关模块。本文使用测试集进行识别结果的验证,使用的测试集数为280件,其中每类服装各取20件,共14类服装。本文部分比较了使用RMSProp优化函数和Adam优化函数对识别结果的影响。两者的识别结果如表1所示。
表1 服装识别结果统计
从表1中可以看出,在这14类服装中,使用RMSProp作为优化函数获得的识别正确率为91.48 %,而使用Adma获得的识别正确率为95.19 %。与RMSProp相比,使用Adma优化函数获得的识别正确率提高了3.71 %。由此可知Adam优化函数不仅缩短了模型的训练时间而且还提高了模型的识别正确率。对于识别出错的部分的分析如下:主要是由于在标注各类服装图片时,误标注了非本类服装信息,使得提取的特征点不准确,掺杂了其他类型服装的特征点,导致在识别某类服装时,由于与其他类型的服装特征点有较大的匹配度,而导致识别出错。针对这一问题,在制作服装数据集时,要重点注意两个方面,一个是选取的每类服装图片应该只包含该类服装的相关信息,以解决特征匹配不准确而导致识别错误的问题;另一个是应该从各个角度拍摄每类服装,这样可以让识别模型提取每类服装更多的特征,以降低不同类型某一相似特征给识别结果带来的干扰程度,从而提高服装识别的准确率。
4 结 论
本文在树莓派平台上,使用服装识别技术并结合百度的语音合成技术,实现服装类型的识别,并通过语音的方式将识别的结果和存放的位置播放出来,同时也将这两个结果在显示屏上显示,以供用户查看。本系统能够帮助用户快速、高效、准确的分类管理不同的服装,具有成本低、使用方便等优点。