基于Xception 改进的卷积神经网络服装分类算法①
2022-06-29任永亮
任永亮, 宋 田, 毋 涛
1(西安工程大学 计算机科学学院, 西安 710048)
2(山东如意毛纺服装集团股份有限公司 公司调度中心, 济宁 272004)
随着电子商务的崛起, 人们选择网购的方式购买商品变得越来越普遍, 据数据统计, 服装行业在电子商务的市场销售额占比已经高达近30%, 中国消费者服装通过线上购买的方式占比近80%. 目前, 购物网站比如淘宝, 拼多多主要通过人工输入文本关键字的形式搜索商品链接, 但是, 当用户需要的商品周边信息不明确时, 这种检索的方式很难达到消费者的真实需求[1].而需要快速地找到同类型的服装的前提是需要先进行服装的识别和精确分类, 识别不同的服装类别在不断增长的时尚业中具有很高的潜在价值, 可以监测和分类供商业使用的服装. 由于商业市场上服装产品繁多,人工识别服装既费时又费力, 并且对同一幅图片受主观性的影响不同的人可能产生不一致的理解, 进而影响检索结果. 因此亟需要一种准确而又高效的服装分类方法.
针对服装图像的分类问题, 研究人员提出了很多的服装分类算法和网络模型, 在基于图像内容的服装分类方法领域方面. Willimon 等[2]提出了一种称为LC-S-H (low level, characteristics, selection mask, high level)的中层服装分类方法, 该方法将问题分解为高(H)、低(L)和多个中层(特征(C)、选择掩模(S))层,并产生“局部”解决方案来解决全局分类问题. Huo 等[3]还提出了一种基于服装局部和整体特征进行融合的分类方法对自然环境场景生活中的各种服装造型进行融合分类, 实验证明了此方法的有效性. Wang 等[4]提出了一种知识引导的时尚网络来解决视觉时尚分析的问题, 例如时尚地标定位和服装品类分类. 建议的时装模型利用了该领域的高级人类知识, 在大规模时尚数据集上的实验结果证明时尚语法网络的优越性能. 另外基于深度学习的卷积神经网络, 研究者对卷积神经网络通过不同方式做了优化改进, 目的是能够在服装分类的性能, 准确率或者速度上有所提升. 张振焕等[1]提出通过调整批量归一化层、激活函数层、卷积层的排列顺序和池化层+卷积层的排列顺序来改变参差的优化卷积神经网络提高服装的精度. 王雅静等[5]提出了基于BP 神经网络算法的女性服装方面的款式分类方法, 但是没有具体说明服装的分类种类和对比性不足等问题, 而且仅限于女装. 刘童童[6]提出了通过计算每一个卷积层的卷积核容量和覆盖率来评估网络分类效率的方式, 使得深层卷积神经网络可以缩短训练时间, 同时提高了资源利用率. 高妍等[7]将HyperNet 网络、空间变换网络(STN), 卷积神经网络R-FCN 算法相融合的方式进行对服装图像的识别和分类, 提高了分类准确率, 减少了训练时间, 但是存在分类属性不够精确, 复杂背景下对服装图像的检测影响比较大. 杨天祺等[8]通过批量标准归一化, 改进了卷积层组织结构、增加了冗余分类器的方式大大提高了服装的图像归一化分类的准确率和速度. 严安等[9]为了解决复杂背景下的服装图片的分类, 在AlexNet 模型的结构上增加一个全连接层, 提出了一种九层的卷积神经网络,但是在数据集上的选择的每类服装的数量不均匀, 缺乏说服力. 陈巧红等[10]由于使用多尺度深度可分离卷积来提升模型特征数据信息的丰富度, 多尺度SEXception 模型在复杂的场景下可以稳定较高的准确率,提高了鲁棒性, 但是所提模型的结构更加复杂, 增加了一定的参数量和计算量. 上述针对服装图像分类, 从多个方向对卷积神经网络进行了改进, 如增加卷积层, 批量归一化, 调整网络结构顺序等, 但是由于网络深度的不断增加, 参数量过大, 运行时间长等问题依然存在.
本文针对卷积神经网络在处理图像分类时参数过多, 训练时间过长等问题提出了利用一种通道剪枝方法[11]来加速深度可分离卷积的轻量级卷积神经网络Xception, 并嵌入SE-Net 模块[12]提升服装图像分类准确率, 使模型更加稳定.
1 Xception 剪枝服装图像分类
卷积神经网络(convolutional neural network, CNN)是一种比较常用的人工神经网络, 常被应用在图像识别、图像分类和图像分割等领域. 它是由卷积层、池化层和全连接层是相互堆叠在一起形成的CNN 架构[13],如图1 所示.
图1 一个规则的三层神经网络与一个规则的CNN
CNN 的标准来自LeCun 等的作品《Gradientbased learning applied to document recognition》[14], 他们首次在图像识别和分类领域成功地使用卷积神经网络, 1998 年, LeCun 创建了一种最早的卷积神经网络架构, 称为LeNet5 架构. 2012 年, Krizhevsky 等[15]提出的AlexNet 网络模型在ILSVRC (image net large scale visual recognition challenge)网络图像分类竞争中获得第一名, 错误率比第二名低约10%, AlexNet 在卷积数据层种采用ReLU 作为数据激励函数, 使用了随机数据的失活和动态数据属性增强技术, 缩短了模型的收敛时间. 2013 年, Zeiler 等[16]提出的ZF-Net 在2013年ILSVRC 图像分类算法的比赛中取得第一名, 是在AlexNet 的基础上做了将第一个卷积核大小调整为7×7, 步长减半的处理, 取得较好的分类效果. 2015年, Simonyan 等[17]随后提出了一种使用较小卷积分类核可以代替大卷积分类核的一种VGG-Net 分类模型,同时大大增加了模型层的深度; Szegedy 等[18]提出了采用不同类型大小卷积核可以提升分类准确度的GoogLeNet 模型. 2016 年He 等[19]关于CNN 的退化问题提出了Res-Net 模型. 2017 年, Chollet[20]在CVPR 2017 会议中提出的Xception 模型在服装图像分类上取得了优于其他模型的效果.
1.1 Xception 模型
本文研究的框架是基于Xception 模型构建, 该框架由输入层, 中层和输出层3 个主要组成部分共同组成, 具体结构如图2 所示. 它是基于InceptionV3 模型的基础上做出的改进. Xception 包括36 个卷积层14 个模块, 采用深度可分离卷积来进行替换Inception V3 中卷积模块,同时加入residual learning 结构, 除了第一和最后一个卷积模块, 中间每一个模块都有残差模块连接. Xception网络与Inception 网络比较相似, 但有不同之处. 前者首先执行通道空间卷积操作, 每次卷积完成操作之后它都加入了分批归一化和激活函数ReLU. 中间模块采用残差直连结构, 可以减少网络复杂性, 在数据量比较大的服装图像数据集上, 训练效果比Inception V3 更好.
图2 Xception 模型的主要网络模块示意图
1.2 SE-Net 模型
SE-Net (squeeze-and-excitation networks)模型是由Momenta 公司的研发团队的高级工程师Hu 等[12]提出, 该网络模块在2017 年ILSVRC 技术挑战赛国际图像处理分类比赛中获得了第一名. SE-Net 模块不是一个全新、完整的CNN 网络模型, 是一种子可以直接嵌入其他各种网络模型中的子模块. SE 模块的结构图如图3 所示, 结构操作流程通过使用Squeeze, Excitation和Reweight 三个基本操作流程来重标定前面得到的特征. 给定一个新的输入特征x, 特征通道数用C1表示, 通过一系列卷积等一般函数变换后得到一个特征通道数为C2的输入特征.
图3 SE 模块结构图
(1) Squeeze 信道特征向量压缩统计操作, 为了有效解决信道特征向量依赖性的问题, 首先将一个全局空间信息特征压缩到一维信道描述符中, 通过使用全局平均池来直接生成一维通道特征统计数据公式实现,得到包含c个实数的一维信道特征向量, Squeeze 通过式(1)计算:
其中, Fsq(·)为Squeeze 函数;uc为输入特征中第c通道的特征曲线图;Wsq和Hsq分别表示输入特征图的宽和高;u(i,j)为输入特征图中的点在坐标位置(i,j)处的取值.
(2) Excitation 特征激励, 利用在Squeeze 操作中所聚集的特征信息, 进行第二个操作, 该操作的目的是完全自动捕获通道间的依赖. 首先它必须考虑是灵活的和非完全互斥的关系, 为了满足这些标准我们采用两个全连接层和Sigmoid 激活函数, 公式如下.
其中,z为Squeeze 操作获得的全局描述, δ表示ReLU函数, 保证输出为正,W1,W2为两个全连接层, 其中W1∈,W2∈其中r 为缩放参数, 主要用于减轻网络的计算复杂度和参数量, σ(·)为Sigmoid 函数.
(3) Reweight 特征重标定, 将 Excitation 的输出的权重看作是经过特征选择后的每个特征通道的重要性,然后通过乘法逐通道加权到先前的特征上, 完成在通道维度上的对原始特征的重标定, 公式如下.
其中, Fscale(·)表示Reweight 函数,sc为第c个特征图的权重值.
1.3 网络模型剪枝
随着卷积神经网络深度的不断加深, 导致了大量的浮点数量的增加, 全连接层也产生了大量的训练浮点参数[11]. 近几年, 研究者们针对这样的问题, 在CNN加速上做出改进, CNN 加速工作分为3 类: 优化实现(如FFT[21])、量化(如BinaryNet[22])和结构化简化将CNN 转换为精简的[23]. 结构化简化主要内容包括: 张量因子分解、稀疏连接、通道剪枝. 张量分解法是将一个卷积层分解成了几个比较有效的卷积层. 但是feature map 宽度(channel number)不能减少, 这使得分解现代网络(如GoogLeNet, ResNet, Xception) 的1×1 卷积层结构变得困难. 这种类型的方法还会增加额外的计算开销. 稀疏连接使神经元或通道之间的连接失效. 虽然它可以达到很高的理论加速比, 但稀疏卷积层的“不规则”形状, 这种实现是欠佳的. 相比之下, 通道剪枝直接减少了特征图的宽度. 因为不需要特别的实现, 它在CPU 和GPU 上的表现都是比较高效的.
由于传统的剪枝方法需要长时间的再训练程序,通过多次的随机试验选择通道, 在深度网络上需要较长时间评估每一次实验, 这限制了在深的模型和大的数据集上的实验. 因此, 为了正确的选择最具代表性的渠道, 本文采用一种迭代两步算法的方法, 使用基于线性LASSO 回归的方法公式为:
其中, φ1(X) 是事先已经选定的一组线性空间无关的函数, φk是待定向量系数k=1, 2, …,m, (m 前面已经详细介绍本次研究所使用的模型, 本文改进的Xception 剪枝模型与原始Xception 模型大体一致, 整体结构如表1 所示, 卷积层的前两层标准卷积不变, Conv_3–Conv_7 层进行信道剪枝以减少信道数量, 为了保证实验准确率的稳定和运行时间上的平衡性, 在Conv_3–Conv_7 层根据实验结果灵活选取是否需要进行剪枝操作, 使用基于线性LASSO 回归的方法提取最小且最有代表性的通道, 删除冗余变量通道, 另外, 使用线性最小二乘重构提取剩余通道的数据输出,两步交替进行. 与原来相比, 改变了卷积神经网络层的内部结构, 在Conv_3–Conv_7, Conv_8 和Conv_9 层中分别加入SE-Net 模块, 增加了对卷积后的特征图大小包括宽高以及通道数的特征压缩, 特征激励和重标定的操作使得可以得到维度相同的特征图, 保留了原全局均值池化层GPA_10 与全连接层FC_11, 通过实验验证和分析了所改进模型的优势和可行性, 如表1 所示. 表1 为改进的Xception 网络模型的整体框架, 从第3 卷积层开始加入剪枝操作, 即基于LASSO 正则化剔除冗余卷积核与其对应的特征图, 然后重构剩余网络, 剪枝操作可选表示根据具体实验结果在准确度和效率上选取一个平衡点, 在第8, 9 层上嵌入了SE-Net模型用以增强有用通道, 减弱无用通道, 第10 和第11 层分别保留了原有的全局均值池化和全连接层. 表1 改进的Xception 网络模型的整体框架 本实验选取公开DeepFashion 数据集[24], 包含的服装图片背景一般为纯色, 复杂度较低, 每个服装包含从不同角度进行拍摄的图像, 又利用特定模型的训练, 部分服装进行了服装位置的精确裁剪, 数据集一共包含了80 多万张服装图像, 图片标记了种类, 属性等关键点的位置坐标. 本文选取其中的一部分作为本实验的数据集, 选取10 种熟数量相差不大的服装类别, 每种选取2000 张左右, 一共选取2 万多张, 其中选取80%作为训练集, 20%作为验证集, 部分图片如图4 所示. 图4 DeepFashion 服装示例图 实验环境配置及工具如下: 在带有NVIDIA CUDA 8.0 的GPU 机器上安装 MXNet (0.11.0)深度学习库,采用笔记本Windows 10 系统, 12 GB 运行内存, PyCharm 2020 开发工具, GPU 为Intel(R) HD Graphics 520,Python 版本为3.6. 由于DeepFashion 数据集的尺寸大小不同, 将数据集进行归一化预处理, 统一尺寸大小设置为256×256, 做图像的归一化处理可以加快模型的收敛速度. 为了验证所改进的Xception 模型的有效性, 将DeepFashion 数据集先在Xception 模型上作训练和验证, 记录相关的性能数据, 然后Conv_3–Conv_9 层保持不变, 在Conv_8 和Conv_9 层中加入SE-Net 模块,进行再训练, 最后在基础上在Conv_3–Conv_9 层进行信道剪枝操作, 由于剪枝操作在准确率和运行时间上具有互斥性, 在Conv_3–Conv_7 层根据实验结果调整剪枝操作的次数和卷积层, 进行反复训练对比, 最终实验证明在分别在Conv_3、Conv_5 和Conv_7 层上做剪枝操作进行通道的选取可以在两者之间达到一个比较好的平衡. 分别记录了3 种模型的Top3 准确率, 消耗时间和消耗内存大小如表2 所示. 3 次训练验证均在相同条件下, 从实验结果数据中可以看出, 相对于原始的Xception 模型, 加入SE-Net 模块的Xception 在时间和内存的消耗上边均有小幅度所增加, 但是Top3 准确率提升, 3.12 个百分点, 而之后加入的LASSO 回归的方法提取最有代表性的通道, 删除冗余通道和最小二乘重构剩余通道, 使得模型在精度只降低了0.21 的情况下, 大幅度减少了训练时间和内存空间的占用, 缩短了将近3 倍. 这证明了所提出方法的可行性和有效性. 表2 不同改进的模型实验数据性能对比 为了进一步证明所提出模型的优势和有效性, 本实验也和VGG-6, ResNet-50 和Xception 模型在最终的平均分类准确率做了对比, 在相同的数据集和实验条件下, 几种不同方法模型的平均服装分类准确率如表3 所示, VGG-16 模型的平均分类准确率最低为70.23%, 然后ResNet-50, Xception 依次升高. 每种均选取均匀种类的服装, 在不同的由数据可知, 提出的通过剪枝通道的SE-Net+Xception 模型平均分类精确度最高. 此外, 实验数据集按大小分成了3 种, 分别和其他3 种模型进行实验对比, 如图5 所示, 由图可直观地看出, 随着数据集的增大, 每种模型的服装分类准确率均有不同程度的提升, 相比于其他3 种模型, 所提出改进的Xception 模型在不同大小的数据集下分类准确率均高于其他模型, 而且在运行效率上均比其他模型用时少. 实验从不同的维度证明了本文所提出模型的优越性, 是一种性能比较好的服装图像分类网络模型. 图5 不同数量的数据集在不同模型上的准确率对比 表3 不同网络模型平均分类准确率对比 本次研究提出了一种改进的Xception 模型算法,在Xception 的基础上, 加入了SE-Net 模块, 这是一种新的架构单元. 它在数据集上实现了比较好的性能.SE-Net 模块诱发的特征重要性有助于其他相关领域的压缩, 如网络剪枝等. 为了解决参数过大和内存消耗问题, 在此基础上, 利用LASSO 回归的方法提取最有代表性的通道, 删除冗余通道和最小二乘重构剩余通道的方法对Xception 模型卷积层进行了剪枝操作, 实验证明, 这样做在很小精度损失的条件下提高了训练速度, 缩小了内存的占用空间. 最后实验证明了, 本文所提出模型和其他模型相比, 大幅度缩短了运行时间, 服装的平均分类准确率也得到了进一步的提升. 但是也有一些不足, 比如如何对复杂背景下服装的精确分类问题, 以及服装图像分类准确率在参数减少的前提下如何仍可以更好地保持精确度的问题等.1.4 改进的Xception 网络模型
2 实验结果与分析
2.1 数据集
2.2 实验准备
2.3 实验结果分析
3 结束语