1 问题背景
衣物易变形,衣服本身是柔性很大的物体,人摆出千奇百怪的姿势时,同一件衣服的样子会非常不同
在不同条件下拍出的衣服图片差距也非常大,比如模特的摆拍照和消费者的自拍照差别就很明显
衣服的设计包含了大量细节特征,比如领型、版型、衣长、装饰等等,想要算法区分出它们难度很大
2 解决思路
- 用带有成百上千的细节标签的图片来训练模型,使其学到能够区分这些细节属性的特征
- 使用同一件服装多个拍摄者提供的图片作训练,增加模型对此的鲁棒性
- 对服装的姿态进行估计,在若干关键点处提取特征,以抵消严重形变带来的影响。直观上,尽管衣服的形态可能千变万化,但只要在领口、袖口、下摆等一些固定区域去比较,其特征仍然非常稳定。
3 数据形式
来源电商和搜索引擎的图片数据,共80万张标注的数据。用来训练FashionNet网络的30万,5万做验证
数据如下形式:
4 网络结构
1. 和VGG16相似相似,都能很好的解决对象识别和分割问题
2. 网络结构从顶层到倒数第二层都和VGG16相似,最后一层是专门为服装设计的
3. VGG16的最后一层被三个分支取代。
- 蓝色:也就是1,主要的作用就是估计服装关键点,以及判断是否有关键点
-绿色:图中的2模块,在1中预测的关键点位置处进行local pooling,提取局部特征,
- 红色:图中的3模块,捕获整个衣服的全局特征特征
-2和3模块相结合,预测衣服的种类属性
5 具体的过程
前向传播:将图片喂到1模块,预测服装的关键点,然后传到2模块,来控制pool5_local层,该步可以解决衣服局部特征易变化和遮挡的问题,最后和3模块联合输出。
反向传播:有四个损失函数
是服装关键点位置的regression loss
- D 为训练样本数
- 第j个关键点是否可见,可见为1,不可见则为0,控制是否进行损失函数计算
- 第j个关键点的坐标
预测关键点可见性和服装类别的softmax loss
针对分类标签可视化和精细(fine-grained)分类采用1-K的 softmax loss,它们分别被称为
属性预测的cross-entropy loss
其中 为第j个属性标签 为两个属性,由正负样品的比率决定成对(pairwise)服装图像度量学习的 triplet loss
这里有一个三元组(x, x+, x-),其中x+和x-是指相对x的相同和不同的衣服图片,d()是距离函数,m是边缘参数
FashionNet是通过以上几个损失函数加权组合来优化
迭代训练步骤:主要有以下两步,不断迭代,直到收敛
- 第一步:蓝色分支作为主要的任务,其余分支作为辅助任务。分配 更大的权重,其它的损失函数较小的权重,这是因为其它的任务和关键点的训练是相关的
- 第二步:预测衣服种类和属性,同时学习两个衣服成对的关联性。在这一步中利用关键点坐标池化局部特征
Landmark Pooling Layer
- 该landmark pooling 层的输入是 feature maps(如 conv4 ) 和 估计的 landmarks.
- 针对每一个关键点位置 l,首先,确定其可见性 v. 不可见关键点的响应设为 0;然后,对关键点周围区域进行 max-pooling 操作,以得到局部 feature maps,并堆积成为 pool5_local 层的最终 feature maps.
- landmark 池化层的反向传播类似于 Fast R-CNN中的 RoI pooling 层. 不同之处在于,Fast R-CNN中的 RoI 层将池化的区域(pooled regions) 独立对待,landmark pooling 层通过连接局部特征来捕捉不同服装关键点的交互关联性(interaction).