system: [SYSTEM]

user: 3. 实施过程 3.1. 数据处理 3.1.1. 初步分类 本文采用来自阿里电商数据的网络服饰图像数据库，选取八个属性维度，每个维度包含若干属性值，基于数据集所定义的服装特征标签属性，对属性值以及维度两方面完成对服饰图像(单人平铺或单人模特)的识别分类。依据服饰图像识别的复杂性，将八个属性维度分为长度层面和设计层面两种方案，八种属性维度及属性值如表1所示。 Table 1 Data set attribute dimensions and attribute value 属性维度 属性值 颈线设计 V领、圆领、深V领、方领、不规则领、抹胸领、一字领、露肩领、半开领、桃型领 领子设计 娃娃领、清道夫领、衬衫领、飞行员领、不可见 脖颈设计 荷叶半高领、常规半高领、堆堆领、高常规领、不可见 翻领设计 西装领、一片领、青果领、直线领、不可见 袖长 无袖、杯袖、短袖、五分袖、七分袖、九分袖、长袖、超长袖、不可见 衣长 高腰、正常、长款、加长款、及膝、超长、及地、不可见 裙长 短裙、中裙、七分裙、九分裙、长裙、不可见 裤长 短裤、五分裤、七分裤、九分裤、长裤、不可见 表1. 数据集属性维度和属性值 数据集初步分类如图1所示。 图1. 数据集初步分类 3.1.2. 数据预处理 (1) 图像标准化 由于服饰图像数据拍摄来源不同，加上拍摄的角度、光线强弱、以及图像分辨率等不同，导致数据样本之间存在较大差异，这就导致识别可能出现较大的误差。所以进行识别之前先做标准化处理，经过图像标准化可得到一致的输入数据，从而加快收敛速度，加速训练过程，提高识别准确率。 使用单独计算的本数据集的std (标准差)与mean (平均值)，代替直接用ImageNet的std与mean的方式，训练集一共79573张图片，计算得到数据集的均值和标准差分别为： ， ， 使用以下公式进行图像标准化处理： (6) (7) 其中X表示要处理图像的像素矩阵，image_standardiztaion表示标准化后的图像像素矩阵，mean是整体数据集的均值，std表示整体数据集的标准方差，image_std每张图片的标准偏差，N表示图像X的像素数量。 (2) 图像分辨率 数据集中图片的分辨率是不一样的，对图像识别来说，图像的大小对识别结果至关重要，更高的分辨率显然可以获取到更多的有效信息，可以提取到更多的有效特征。提高图像分辨，增大图像输入尺寸可提高分类准确率，但是分辨率的增加无疑会使训练过程更加复杂，增加卷积核和显存的压力，因此需选择一个合适的尺寸。如图2所示，选用ImageNet，进行分辨率选取实验，根据实验结果最后选定size为480，采用RGB三通道进行实验。 图2. 选取图像分辨率尺寸 (3) 数据增强 从大量图像数据中了解得到，图像本身并不是规则的，为了从中提取到有效信息，采用Imgaug技术，它提供了多种数据增强方式，并且可以方便快捷的使用其提供的接口，并根据自己需要对增强方式进行自定义组合，从而增强不同大小的图片，使得在背景处理中通过此种增强方式来大大提高模型性能。 显然仅执行一种增强作用并不明显，因此，通过多种增强组合的方式来得到更加鲁棒的效果。通过实例化单个augment_images()来分次实现图像增强，无疑是繁琐的。因此本文使用Imgaug生成变换序列(Sequential)，将图像batch传入，并在Sequential中加入所需的图像增强方式。本实验选用了Affine，将放射转应用于图像，又增加了AdditiveGaussianNoise，在初期加入了裁剪图像(Crop)，但经过实验发现，若是裁剪不当可能会导致图片特征被裁减掉，影响最终的识别效果，因此这里不加入裁剪图像的方式。此外由于颜色特征对于本文的识别分类是无意义的，为了避免颜色对图像的识别分类产生影响，加入了颜色通道的随意变化。另外，数据集中存在不同旋转角度的图像，因此添加水平翻转及随机角度翻转来增强模型的泛化能力，实验证明模型经过数据增强后有了较大提升。 3.2. 长度层面平铺和非平铺数据分类 Joint Body Parsing & Pose Estimation Network，简称JPPNet，是由中山大学研究 [ 10 ]，可以很好对人体部位进行识别分类，人体解析的目的是将人体图像用细粒度语义分割成多个部分，如身体部位和衣服。 考虑到数据集中的图片会有平铺数据和非平铺数据两种，研究对比发现，JPPNet可以很好对人体部位进行识别，结合本文的研究目标，发现JPPNet可以很好实现平铺数据和非平铺数据的精确分类。对长度层面的图片进行测试并分类。首先使用JPPNet进行初步分类，若图片中含有头、脸、左臂、右臂、左腿、右腿、左脚、右脚其中之一部位，则判定为非平铺，反之则为平铺数据，得到初步的平铺数据和非平铺数据。 由于JPPNet框架的局限性，分析初筛结果发现非平铺数据中仍存在大量的平铺数据，且不同属性维度的分类结果有差异，针对差异进行二次筛选，采用MaskRCNN和JPPNet做对衣长和袖长并行训练进行联合复筛；由于JPP Net检测出现大量错误，因此使用MaskRCNN对裙长和裤长进行复筛。 对复筛的结果使用优化器进行优化处理，先用Adam优化器进行优化，学习率设置为0.001，以交叉熵作为损失函数，以准确率作为评估指标，进行三轮训练准确率达到0.9024，然后又将学习率设置为0.000025和0.0000075进行两轮训练，准确率达到0.9411，最后只有SDG进行微调，学习率设置为0.0000045和0.000001分别进行训练，最终准确率达到0.957。完成平铺数据和非平铺数据的分类，得到最终的平铺数据和非平铺数据。 3.3. 多任务识别模型训练优化 为了将多属性维度的数据集一起输入到网络中进行训练，引入了多任务训练的设计。整个属性识别网络中的识别任务的卷积层共享，但是由于其任务的差异性，并不能使用完全相同的模型来对全部数据进行统一分类，如果不进行区分会对识别结果产生较大影响，因此将数据按属性分成设计层面和长度层面两类，由于服饰所具备的多个属性维度需要提取各自不同的特征才能进行识别，在设计与长度两个层面的差异性最为巨大，所以使用分离的多任务训练方法。 3.3.1. 设计层面识别模型 由于平铺数据和非平铺数据对设计层面相关属性的识别分类没有明显影响，所以在设计层面对包含的多个属性维度构造了一个多任务识别分类模型。 建模过程：输入设计层面数据集，使用整体数据集的均值和标准差将批处理的图像进行标准化，再处理数据使之符合TensorFlow格式，然后导入基网络，冻结网络层，添加全局平均池化层和Dropout来防止过拟合，全连接层选择SoftMax分类器进行分类，之后使用Adam结合SGD分类器完成优化微调，生成设计层面识别模型，保存模型权重。 以Inception-V4和InceptionResNet-V2为基网络建模，得到两个设计层面识别模型，保存权重。 3.3.2. 长度层面识别模型 考虑到平铺数据和非平铺数据对长度层面相关属性识别分类有明显影响，因此在长度层面分别生成平铺识别模型和非平铺识别模型，再将两个模型进行融合形成长度层面的识别模型。 首先在长度层面训练了平铺识别模型和非平铺识别模型。训练过程为，首先读入数据，使用整体数据集的均值和标准差将批处理的图像进行标准化，经过处理使数据规格符合Tensorflow的数据格式，之后导入基网络，冻结网络层，引入全局平均池化和Dropout，这两个操作是防止过拟合，最后的全连接层选择SoftMax分类器进行多任务的分类，最终形成多任务输出模型，最后使用Adam结合SGD分类器完成优化微调，生成识别模型。分别读入平铺数据和非平铺数据，生成平铺识别模型和非平铺识别模型。 鉴于平铺域和非平铺域的不一致性和复杂性，在长度层面，为平铺识别模型和非平铺识别模型设计了一个双通道的服饰属性识别网络进行融合，最终完成属性标签识别。对于非平铺数据，可以根据人体相对位置得到更好的特征识别，而对于平铺数据的识别更复杂，使用神经网络的自行优化来进行识别容易产生过拟合，因此模型融合过程为，抛弃平铺识别模型顶层的全连接层，之后加入一个Dropout层；抛弃非平铺识别模型顶层的全连接层，之后引入Dense(128)；利用concat方法将处理后的平铺别模型和非平铺识别模型进行融合；最后使用优化器优化，使用交叉熵作为损失函数进行训练，生成长度层面识别模型，得到模型权重。 以Inception-V4和InceptionResNet-V2为基网络建模，得到两个长度层面识别模型，保存权重。 3.4. 预测模型 预测模型搭建流程，输入图像数据，导入基网络，冻结网络层，开始进行微调，由于数据量的限制，虽经过了数据增强，数据打乱，正则规范化等一系列预处理操作，但是经过基网络的处理之后，必然面临着数据过拟合的情况发生，因此引入池化，由于平均池化更适用于网络的深层，因此这里使用了mean-pooling。 通常来说，平均池化与Dropout结合使用，效果会更佳出众。因此又引入了Dropout层。经过实验，发现隐含节点Dropout率为0.5的时候效果最好，此时Dropout随机生成的网络结构最多。验证后发现，确实在准确率上有了轻微的提升效果。 载入对于对应基网络训练模型保存的权重，在最后一层引入全连接网络，由于每个层面各自包括多个属性维度，且每个属性维度又分别包含不同数量的属性值。因此在最后的全连接层引入的SoftMax多分类器中的类别是需要动态变化的。例如在进行长度层面识别训练时，在长度层面的列表字典中，通过索引不同的属性维度，取到该属性维度对应的属性值数量，将其传给SoftMax进行输出。 最后通过自定义的process函数， 得到输入数据原图与水平翻转两种状态下的图像，输入到预测模型，得到输入数据的两种状态在该模型的两个预测结果，两个结果相加取平均得到输入数据在该模型下的最终预测结果。 分别使用Inception_v4和Inception_ResNet_v2作为基网络建立两个预测模型，进行上述预测，最后将两个预测模型的识别结果进行集成，即将两个模型的预测结果分别乘以相应的权重再相加，权重和为1，这里采用两个预测模型，权重各为0.5，得到最终的属性标签识别结果。