原文:知衣科技应用 TensorFlow 建立服装搜索系统 - 2019.09.18
出处:TensorFlow - 微信公众号
知衣科技是一家致力于应用图像技术、时序分析、个性化推荐等人工智能技术为各类从事电商及服装行业客户提供最新最前沿数据分析服务的公司,人工智能技术是知衣科技的基因,知衣科技希望通过不断的技术创新,为服装行业客户带来更好的智能服务.
在服装行业中,以服装图像找相似款服装是一个非常强烈的需求,目前也存在一些工具,但是都存在着一定的问题. 同款检索而非相似款搜索、搜索准确率低、搜索库较小、缺乏秀场等时尚设计数据等,在实际使用中都较难满足服装从业者们的需求. 知衣科技的目标是实现以图找相似款,在开发过程中遇到以下几个难点 :
- 相似服装数据集缺乏
- 服装形态各异且是柔性目标
- 服装搜索库巨大算力需求巨大
知衣团队基于TensorFlow开发一套相似服装搜索系统,该系统包含服装检测、服装特征提取与服装检索等基础算法,本文大致介绍系统的开发流程,以及如何进行模型部署与模型使用.
1. 数据采集与数据标注
海量的标注训练数据是深度学习模型强大识别能力的动力来源,由于服装相似款搜索需求特殊,目前很难从网络上找到大量可用的公开数据集. 因此我们采用了人工与机器结合的方法从海量的服装图像库中进行相似款服装数据的抽取与标注 ( 已经有了标注框,由知衣服装检测模型检测,检测模型使用改进版本的YOLOv3实现). 由于服装本身的特性,不同季节不同国家不同年份不同秀场不同风格的数据各不相同,如日韩风与欧美风服装风格差异巨大,不同秀场的拍摄差异巨大,不同年份服装流行点发生巨大变化等.
服装组标注
知衣科技根据服装从业者的常用的服装相似角度定义了一套方案,从服装版型、袖型领型、季节与服装图案面料等作为服装相似度的评判标准,相似的服装定义为一个组并进行标号,如上图服装组标注,相似的服装被归为一组,框中为每张图像中相似的服装部分.
服装细节标注
其次,在服装相似性搜索过程中,除了外形搜索相似,我们还通过定义一些额外的标签来限制搜索空间,保证搜索结果的可靠性,如搜索裙装时不希望出现裤装. 所以除了标注相似图像组外,同时对服装的品类、季节、袖型领型等信息进行细节标注,如长袖圆领秋冬款吊带连衣裙,上图服装细节标注,对服装品类风格面料工艺等进行了标注.
.
机器辅助人工标注
标注过程如果完全依靠人工会到导致标注效率低下,标注质量低的等问题,所以我们采用机器辅助人工标注的方法. 先人工标注部分数据,然后进行机器训练,机器来标注数据,人工进行数据修正,机器再次使用标注数据进行优化训练,在机器的帮助下大幅度提高标注效率与标注质量. 在标注完成后就得到了所需要的数据集,每个相似组内包含数量不等的若干的图像,同时每张图像还包含了相应的各项细节信息. 我们标注了大概5万组超过100万张相似图像,包含了各种服装品类与各种来源的服装.
2. 模型设计
基于深度学习的图像搜索一般是先使用深度学习模型进行图像特征提取,提取完成后即可得到一个特定的特征向量(比如128维),该特征向量就可以表示该图像,图像搜索本质就是计算图像向量之间的距离,距离越近表示图像越相似,同理,服装之间的相似度就是特征向量之间的距离,通常可以使用欧式距离或者余弦距离. 做服装搜索就是对需要搜索的服装图像进行特征提取,然后使用取到的特征去特征库中进行匹配,找出最相似的图像. 如可以直接使用VGG16模型的4096的全连接层进行图像的特征表示,也可以来做服装的搜索,但是由于VGG16模型训练时使用的是通用类别,对服装特征的提取粒度不够,搜索服装时关注点一般不在服装上,搜索出来的一般是类似场景,而非类似的服装. 所以一般来说如果需要进行特定领域的图像搜索,需要收集该领域的数据集进行标注并训练.
服装搜索模型结构图(多分支)
服装搜索模型训练时可以采用VGG, ResNet, Inception系列等模型进行Finetune,然后进行搜索,但是因为服装的特殊性,通用分类模型结构无法良好的适应服装,有一定的搜索效果,但是比较难满足服装从业者的搜索需求. 我们采用ResNet50模型作为BackBone,使用384x384的输入,利用标注过的海量服装图像进行模型的Finetune,强化ResNet50对服装图像的特征提取能力,通过设计多分支的模型结构进行有效的特征提取,分支分为一个global分支和多个local分支. global同时连接softmax和triplet_loss,同时进行分类任务和度量学习任务,local的其他分支只进行分类学习任务,global分支用于提取全局特征,local的其他所有分支用于提取服装的细节特征(类似于注意力机制的方法), 在特征维度方面,知衣进行了强力的压缩,主分支使用128的特征维度,其他分支均采用32x2的结构,最终整个特征维度向量为320维,良好的进行了特征的压缩.
服装相似度计算
在搜索时,根据用户的搜索需求,可以使用单个维度特征进行搜索,也可以实时调节各个特征维度的权重,如侧重搜索领型可以将领型分支的相似度权重调高,搜索出来的结果领型相似度高的会被排在前面,实现用户的个性化搜索.
搜索效果图
如上图所示,上传图像后可以进行任意的框选,搜索系统默认搜索情况下,同时把握了包含了服装整体、袖型领型、图案面料等信息,力求帮助找到最相似的服装图像.
3. 模型部署
最后,训练完成的模型去除了softmax分类层,保留了基础的BackBone模型和多分支结构,专门用于做服装图像的特征提取,并将模型保存为pb格式,部署时使用TensorFlow Serving作为最终的部署方案. 使用Float16替换Float32,减少内存使用和算力消耗进一步加速计算. 参考官方的文档,将pb模型操作分为了图像预处理、模型计算、结果转换三个部分,最终部署在1080TI的GPU上,因为做了FP16后内存大大减小,单个GPU可以同时部署6~8个Serving特征提取服务,GPU的性能被极大利用. 每张图像通过模型进行特征提取后,即可将特征送入特征计算库中进行计算,最终得到相似的服装图像列表.
4. 总结与展望
本文以服装搜索为例,介绍了知衣科技如何使用TensorFlow来满足服装领域的相似服装搜索需求,包含了服装搜索流程介绍、服装特征提取模型的构建与模型的实际部署使用,TensorFlow特有的TensorFlow-Serving帮助降低了模型了部署难度,在模型加速方向也提供很多帮助.
后续,知衣科技会继续研究人工智能在服装行业的应用,不断将新的技术投入到产品服务中,让服装从业者们享受更好的科技福利,TensorFlow人工智能领域的必备利器.